<?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>17852</bug_id>
          
          <creation_ts>2008-03-14 13:20:01 -0700</creation_ts>
          <short_desc>_NPN_IntFromIdentifier is wrong</short_desc>
          <delta_ts>2008-03-17 14:47:55 -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>Plug-ins</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>73775</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-14 13:20:01 -0700</bug_when>
    <thetext>_NPN_IntFromIdentifier is wrong

int32_t _NPN_IntFromIdentifier(NPIdentifier identifier)
{
    PrivateIdentifier* i = (PrivateIdentifier*)identifier;
    if (!i-&gt;isString)
        return 0;
    return i-&gt;value.number;
}


The check should be if (i-&gt;isString) instead of !i-&gt;isString

This is a one line fix.  The test case is the PITA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73776</commentid>
    <comment_count>1</comment_count>
      <attachid>19773</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-14 13:20:43 -0700</bug_when>
    <thetext>Created attachment 19773
First pass at identifier -&gt; int fix and test case

 .../netscape-identifier-conversion-expected.txt    |   10 ++++
 .../plugins/netscape-identifier-conversion.html    |   13 +++++
 LayoutTests/plugins/resources/TEMPLATE.html        |   13 +++++
 .../resources/netscape-identifier-conversion.js    |   33 +++++++++++
 WebCore/bridge/npruntime.cpp                       |    2 +-
 .../TestNetscapePlugIn.subproj/PluginObject.cpp    |   58 +++++++++++++++++++-
 6 files changed, 126 insertions(+), 3 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73777</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-14 13:21:55 -0700</bug_when>
    <thetext>I don&apos;t think I got the test case quite right, debugging now.  I&apos;m posting this now to make sure it doesn&apos;t get forgotten.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74151</commentid>
    <comment_count>3</comment_count>
      <attachid>19847</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-17 13:59:53 -0700</bug_when>
    <thetext>Created attachment 19847
Cleanup PluginObject.cpp and fix test methods

 .../TestNetscapePlugIn.subproj/PluginObject.cpp    |  473 +++++++++++---------
 1 files changed, 270 insertions(+), 203 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74152</commentid>
    <comment_count>4</comment_count>
      <attachid>19848</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-17 13:59:54 -0700</bug_when>
    <thetext>Created attachment 19848
Fix NPAPI implementation and plugin test

 .../netscape-identifier-conversion-expected.txt    |   13 ++++-
 .../resources/netscape-identifier-conversion.js    |   36 ++++-------
 WebCore/WebCore.NPAPI.exp                          |    1 +
 WebKit/mac/Plugins/WebNetscapePluginPackage.m      |    2 +
 .../TestNetscapePlugIn.subproj/PluginObject.cpp    |   66 ++++++++++++--------
 5 files changed, 68 insertions(+), 50 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74153</commentid>
    <comment_count>5</comment_count>
      <attachid>19849</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-17 14:08:48 -0700</bug_when>
    <thetext>Created attachment 19849
First pass at identifier -&gt; int fix and test case


Cleanup PluginObject.cpp and fix test methods

Fix NPAPI implementation and plugin test
---
 .../netscape-identifier-conversion-expected.txt    |   21 +
 .../plugins/netscape-identifier-conversion.html    |   13 +
 LayoutTests/plugins/resources/TEMPLATE.html        |   13 +
 .../resources/netscape-identifier-conversion.js    |   23 +
 WebCore/WebCore.NPAPI.exp                          |    1 +
 WebCore/bridge/npruntime.cpp                       |    2 +-
 WebKit/mac/Plugins/WebNetscapePluginPackage.m      |    2 +
 .../TestNetscapePlugIn.subproj/PluginObject.cpp    |  547 ++++++++++++--------
 8 files changed, 415 insertions(+), 207 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74154</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-17 14:11:07 -0700</bug_when>
    <thetext>In order to maintain my sanity, I had to clean up PluginObject a little as well.  I did not make any attempt to further validate our NPNetscapeFuncs struct, it&apos;s possible we&apos;re still missing other function pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74156</commentid>
    <comment_count>7</comment_count>
      <attachid>19849</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-17 14:22:10 -0700</bug_when>
    <thetext>Comment on attachment 19849
First pass at identifier -&gt; int fix and test case

r=me, all good except for lack of ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>74163</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-03-17 14:47:55 -0700</bug_when>
    <thetext>Added changelog and landed as r31112</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19773</attachid>
            <date>2008-03-14 13:20:43 -0700</date>
            <delta_ts>2008-03-14 13:20:43 -0700</delta_ts>
            <desc>First pass at identifier -&gt; int fix and test case</desc>
            <filename>First-pass-at-identifier-int-fix-and-test-case.patch</filename>
            <type>text/plain</type>
            <size>7233</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZjlmNGUxZDhjNzdkNWJlYTE2ODViYTliYWExNzk0YTI0NTc1NDI0MgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24t
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMWE0OTcK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBlLWlkZW50aWZp
ZXItY29udmVyc2lvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorRkFJTDogVGltZWQg
b3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkCitUZXN0IGNvbnZlcnRpbmcg
c3RyaW5ncyBhbmQgaW50ZWdlcnMgdG8gaWRlbnRpZmllcnMgYW5kIGJhY2sKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBl
LWlkZW50aWZpZXItY29udmVyc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2Fw
ZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yNDhmYjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9u
ZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9u
ZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9URU1Q
TEFURS5odG1sIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc3MjI4Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbApAQCAtMCww
ICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9IllPVVJfSlNfRklMRV9IRVJFIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvbmV0c2NhcGUtaWRlbnRp
Zmllci1jb252ZXJzaW9uLmpzIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvbmV0c2Nh
cGUtaWRlbnRpZmllci1jb252ZXJzaW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQxZTFkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL3Jl
c291cmNlcy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uanMKQEAgLTAsMCArMSwzMyBA
QAorZGVzY3JpcHRpb24oIlRlc3QgY29udmVydGluZyBzdHJpbmdzIGFuZCBpbnRlZ2VycyB0byBp
ZGVudGlmaWVycyBhbmQgYmFjayIpCisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgZW1iZWQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJlbWJlZCIpOworLy9lbWJlZC5vbmxvYWQgPSBjb250
aW51ZVRlc3Q7CitlbWJlZC50eXBlID0gImFwcGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2Nh
cGUiOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbWJlZCk7CisKK2Z1bmN0aW9uIGNvbnRp
bnVlVGVzdCgpIHsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVtYmVkLnRlc3RJZGVudGlm
aWVyVG9TdHJpbmcoJ2ZvbycpIiwgImZvbyIpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
ZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygnMTIzJykiLCAiMTIzIik7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKCdudWxsJykiLCAi
bnVsbCIpOworCisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlbWJlZC50ZXN0SWRlbnRpZmll
clRvU3RyaW5nKDEpIiwgIjEiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVtYmVkLnRl
c3RJZGVudGlmaWVyVG9TdHJpbmcoLTEpIiwgIi0xIik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKDEuNDApIiwgIjEiKTsKKworICAgIHNo
b3VsZEJlKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KDEpIiwgIjEiKTsKKyAgICBzaG91bGRC
ZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgtMSkiLCAiLTEiKTsKKyAgICBzaG91bGRCZSgi
ZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgxMCkiLCAiMTAiKTsKKyAgICBzaG91bGRCZSgiZW1i
ZWQudGVzdElkZW50aWZpZXJUb0ludCgxMC4yMzQyMzQpIiwgIjEwIik7CisKKyAgICBzaG91bGRC
ZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgnZm9vJykiLCAiMCIpOworICAgIHNob3VsZEJl
KCJlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KCcxMCcpIiwgIjAiKTsKKworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworY29udGludWVUZXN0KCk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2UvbnBy
dW50aW1lLmNwcCBiL1dlYkNvcmUvYnJpZGdlL25wcnVudGltZS5jcHAKaW5kZXggZjE3MGVhYi4u
NTliZGYwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmNwcAorKysgYi9X
ZWJDb3JlL2JyaWRnZS9ucHJ1bnRpbWUuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgTlBVVEY4ICpf
TlBOX1VURjhGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRpZmllcikKIGludDMyX3Qg
X05QTl9JbnRGcm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBQ
cml2YXRlSWRlbnRpZmllciogaSA9IChQcml2YXRlSWRlbnRpZmllciopaWRlbnRpZmllcjsKLSAg
ICBpZiAoIWktPmlzU3RyaW5nKQorICAgIGlmIChpLT5pc1N0cmluZykKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGktPnZhbHVlLm51bWJlcjsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVj
dC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVnSW4uc3Vi
cHJvai9QbHVnaW5PYmplY3QuY3BwCmluZGV4IDIwYzBlNTMuLjBjODA1MTggMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1Bs
dWdpbk9iamVjdC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNj
YXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmNwcApAQCAtODksNyArODksOSBAQCBzdGF0
aWMgY29uc3QgTlBVVEY4ICpwbHVnaW5Qcm9wZXJ0eUlkZW50aWZpZXJOYW1lc1tOVU1fUFJPUEVS
VFlfSURFTlRJRklFUlNdID0gewogI2RlZmluZSBJRF9URVNUX0dFVF9QUk9QRVJUWSAgICAgICAg
OQogI2RlZmluZSBJRF9URVNUX0VWQUxVQVRFICAgICAgICAgICAgMTAKICNkZWZpbmUgSURfVEVT
VF9HRVRfUFJPUEVSVFlfUkVUVVJOX1ZBTFVFIDExCi0jZGVmaW5lIE5VTV9NRVRIT0RfSURFTlRJ
RklFUlMgICAgICAxMgorI2RlZmluZSBJRF9URVNUX0lERU5USUZJRVJfVE9fU1RSSU5HIDEyCisj
ZGVmaW5lIElEX1RFU1RfSURFTlRJRklFUl9UT19JTlQgICAxMworI2RlZmluZSBOVU1fTUVUSE9E
X0lERU5USUZJRVJTICAgICAgMTQKIAogc3RhdGljIE5QSWRlbnRpZmllciBwbHVnaW5NZXRob2RJ
ZGVudGlmaWVyc1tOVU1fTUVUSE9EX0lERU5USUZJRVJTXTsKIHN0YXRpYyBjb25zdCBOUFVURjgg
KnBsdWdpbk1ldGhvZElkZW50aWZpZXJOYW1lc1tOVU1fTUVUSE9EX0lERU5USUZJRVJTXSA9IHsK
QEAgLTEwNSw2ICsxMDcsOCBAQCBzdGF0aWMgY29uc3QgTlBVVEY4ICpwbHVnaW5NZXRob2RJZGVu
dGlmaWVyTmFtZXNbTlVNX01FVEhPRF9JREVOVElGSUVSU10gPSB7CiAgICAgInRlc3RHZXRQcm9w
ZXJ0eSIsCiAgICAgInRlc3RFdmFsdWF0ZSIsCiAgICAgInRlc3RHZXRQcm9wZXJ0eVJldHVyblZh
bHVlIiwKKyAgICAidGVzdElkZW50aWZpZXJUb1N0cmluZyIsCisgICAgInRlc3RJZGVudGlmaWVy
VG9JbnQiLAogfTsKIAogc3RhdGljIE5QVVRGOCogY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQo
Y29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQpAQCAtMTk1LDYgKzE5OSw1MCBAQCBzdGF0aWMgdm9p
ZCB0ZXN0RE9NQWNjZXNzKFBsdWdpbk9iamVjdCAqb2JqKQogICAgIH0KIH0KIAorc3RhdGljIE5Q
SWRlbnRpZmllciBzdHJpbmdWYXJpYW50VG9JZGVudGlmaWVyKE5QVmFyaWFudCB2YXJpYW50KQor
eworICAgIE5QVVRGOCogdXRmOFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZ2
YXJpYW50KTsKKyAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmlu
Z2lkZW50aWZpZXIodXRmOFN0cmluZyk7CisgICAgZnJlZSh1dGY4U3RyaW5nKTsKKyAgICByZXR1
cm4gaWRlbnRpZmllcjsKK30KKworc3RhdGljIE5QSWRlbnRpZmllciBpbnQzMlZhcmlhbnRUb0lk
ZW50aWZpZXIoTlBWYXJpYW50IHZhcmlhbnQpCit7CisgICAgaW50MzIgaW50ZWdlciA9IE5QVkFS
SUFOVF9UT19JTlQzMih2YXJpYW50KTsKKyAgICByZXR1cm4gYnJvd3Nlci0+Z2V0aW50aWRlbnRp
ZmllcihpbnRlZ2VyKTsKK30KKworc3RhdGljIE5QSWRlbnRpZmllciB2YXJpYW50VG9JZGVudGlm
aWVyKE5QVmFyaWFudCB2YXJpYW50KQoreworICAgIGlmIChOUFZBUklBTlRfSVNfU1RSSU5HKHZh
cmlhbnQpKQorICAgICAgICByZXR1cm4gc3RyaW5nVmFyaWFudFRvSWRlbnRpZmllcih2YXJpYW50
KTsKKyAgICBlbHNlIGlmIChOUFZBUklBTlRfSVNfSU5UMzIodmFyaWFudCkpCisgICAgICAgIHJl
dHVybiBpbnQzMlZhcmlhbnRUb0lkZW50aWZpZXIodmFyaWFudCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBib29sIHRlc3RJZGVudGlmaWVyVG9TdHJpbmcoY29uc3QgTlBWYXJpYW50KiBh
cmdzLCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9
IHZhcmlhbnRUb0lkZW50aWZpZXIoYXJnc1sxXSk7CisgICAgaWYgKCFpZGVudGlmaWVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgTlBVVEY4KiB1dGY4U3RyaW5nID0gYnJvd3Nlci0+dXRm
OGZyb21pZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgIFNUUklOR1pfVE9fTlBWQVJJQU5UKHV0
ZjhTdHJpbmcsICpyZXN1bHQpOworICAgIGZyZWUodXRmOFN0cmluZyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3N0YXRpYyBib29sIHRlc3RJZGVudGlmaWVyVG9JbnQoY29uc3QgTlBWYXJpYW50
KiBhcmdzLCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBOUElkZW50aWZpZXIgaWRlbnRpZmll
ciA9IHZhcmlhbnRUb0lkZW50aWZpZXIoYXJnc1sxXSk7CisgICAgaWYgKCFpZGVudGlmaWVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50MzIgaW50ZWdlciA9IGJyb3dzZXItPmludGZy
b21pZGVudGlmaWVyKGlkZW50aWZpZXIpOworICAgIElOVDMyX1RPX05QVkFSSUFOVChpbnRlZ2Vy
LCAqcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgcGx1Z2luSW52
b2tlKE5QT2JqZWN0ICpoZWFkZXIsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQg
KmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCkKIHsKICAgICBQbHVn
aW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFkZXI7CkBAIC0zNjUsNyArNDEzLDEz
IEBAIHN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCAqaGVhZGVyLCBOUElkZW50aWZp
ZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50ICphCiAKICAgICAgICAgQk9PTEVBTl9UT19OUFZBUklB
TlQocmV0dmFsLCAqcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0lERU5USUZJ
RVJfVE9fU1RSSU5HXSAmJgorICAgICAgICBhcmdDb3VudCA+PSAyICYmIE5QVkFSSUFOVF9JU19P
QkpFQ1QoYXJnc1swXSkpCisgICAgICAgIHJldHVybiB0ZXN0SWRlbnRpZmllclRvU3RyaW5nKGFy
Z3MsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVy
c1tJRF9URVNUX0lERU5USUZJRVJfVE9fSU5UXSAmJgorICAgICAgICBhcmdDb3VudCA+PSAyICYm
IE5QVkFSSUFOVF9JU19PQkpFQ1QoYXJnc1swXSkpCisgICAgICAgIHJldHVybiB0ZXN0SWRlbnRp
ZmllclRvSW50KGFyZ3MsIHJlc3VsdCk7CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19847</attachid>
            <date>2008-03-17 13:59:53 -0700</date>
            <delta_ts>2008-03-17 13:59:53 -0700</delta_ts>
            <desc>Cleanup PluginObject.cpp and fix test methods</desc>
            <filename>Cleanup-PluginObject.cpp-and-fix-test-methods.patch</filename>
            <type>text/plain</type>
            <size>25089</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MDM1YzcyOGU4Njk1OTQ5ZDk3Mzc1MjI1NDFkMGI2OTBiNzA2Y2Q2YQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2lu
T2JqZWN0LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJ
bi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jcHAKaW5kZXggMGM4MDUxOC4uOGNmOWVlYyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luLnN1YnBy
b2ovUGx1Z2luT2JqZWN0LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
TmV0c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwCkBAIC0yMCw3ICsyMCw3IEBA
CiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJQbHVnaW5PYmplY3QuaCIKQEAgLTQx
LDEwICs0MSwxMCBAQCBzdGF0aWMgdm9pZCBwbHVnaW5EZWFsbG9jYXRlKE5QT2JqZWN0ICpvYmop
OwogCiBOUE5ldHNjYXBlRnVuY3MgKmJyb3dzZXI7CiAKLXN0YXRpYyBOUENsYXNzIHBsdWdpbkNs
YXNzID0geyAKK3N0YXRpYyBOUENsYXNzIHBsdWdpbkNsYXNzID0gewogICAgIE5QX0NMQVNTX1NU
UlVDVF9WRVJTSU9OLAotICAgIHBsdWdpbkFsbG9jYXRlLCAKLSAgICBwbHVnaW5EZWFsbG9jYXRl
LCAKKyAgICBwbHVnaW5BbGxvY2F0ZSwKKyAgICBwbHVnaW5EZWFsbG9jYXRlLAogICAgIHBsdWdp
bkludmFsaWRhdGUsCiAgICAgcGx1Z2luSGFzTWV0aG9kLAogICAgIHBsdWdpbkludm9rZSwKQEAg
LTUzLDcgKzUzLDcgQEAgc3RhdGljIE5QQ2xhc3MgcGx1Z2luQ2xhc3MgPSB7CiAgICAgcGx1Z2lu
R2V0UHJvcGVydHksCiAgICAgcGx1Z2luU2V0UHJvcGVydHksCiB9OwotIAorCiBOUENsYXNzICpn
ZXRQbHVnaW5DbGFzcyh2b2lkKQogewogICAgIHJldHVybiAmcGx1Z2luQ2xhc3M7CkBAIC0xMTEs
NyArMTExLDcgQEAgc3RhdGljIGNvbnN0IE5QVVRGOCAqcGx1Z2luTWV0aG9kSWRlbnRpZmllck5h
bWVzW05VTV9NRVRIT0RfSURFTlRJRklFUlNdID0gewogICAgICJ0ZXN0SWRlbnRpZmllclRvSW50
IiwKIH07CiAKLXN0YXRpYyBOUFVURjgqIGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KGNvbnN0
IE5QVmFyaWFudCAqdmFyaWFudCkKK3N0YXRpYyBOUFVURjgqIGNyZWF0ZUNTdHJpbmdGcm9tTlBW
YXJpYW50KGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCkKIHsKICAgICBzaXplX3QgbGVuZ3RoID0g
TlBWQVJJQU5UX1RPX1NUUklORygqdmFyaWFudCkuVVRGOExlbmd0aDsKICAgICBOUFVURjgqIHJl
c3VsdCA9IChOUFVURjgqKW1hbGxvYyhsZW5ndGggKyAxKTsKQEAgLTE0Miw0NiArMTQyLDQ4IEBA
IHN0YXRpYyBib29sIHBsdWdpbkhhc01ldGhvZChOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIg
bmFtZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIHBsdWdpbkdldFByb3Bl
cnR5KE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQgKnZhcmlhbnQp
CitzdGF0aWMgYm9vbCBwbHVnaW5HZXRQcm9wZXJ0eShOUE9iamVjdCogb2JqLCBOUElkZW50aWZp
ZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgUGx1Z2luT2JqZWN0KiBwbHVnaW4g
PSByZWludGVycHJldF9jYXN0PFBsdWdpbk9iamVjdCo+KG9iaik7CiAgICAgaWYgKG5hbWUgPT0g
cGx1Z2luUHJvcGVydHlJZGVudGlmaWVyc1tJRF9QUk9QRVJUWV9QUk9QRVJUWV0pIHsKLSAgICAg
ICAgU1RSSU5HWl9UT19OUFZBUklBTlQoInByb3BlcnR5IiwgKnZhcmlhbnQpOworICAgICAgICBT
VFJJTkdaX1RPX05QVkFSSUFOVCgicHJvcGVydHkiLCAqcmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpblByb3BlcnR5SWRlbnRpZmllcnNb
SURfUFJPUEVSVFlfRVZFTlRfTE9HR0lOR10pIHsKLSAgICAgICAgQk9PTEVBTl9UT19OUFZBUklB
TlQoKChQbHVnaW5PYmplY3QgKilvYmopLT5ldmVudExvZ2dpbmcsICp2YXJpYW50KTsKKyAgICAg
ICAgQk9PTEVBTl9UT19OUFZBUklBTlQocGx1Z2luLT5ldmVudExvZ2dpbmcsICpyZXN1bHQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luUHJvcGVy
dHlJZGVudGlmaWVyc1tJRF9QUk9QRVJUWV9MT0dfREVTVFJPWV0pIHsKLSAgICAgICAgQk9PTEVB
Tl9UT19OUFZBUklBTlQoKChQbHVnaW5PYmplY3QgKilvYmopLT5sb2dEZXN0cm95LCAqdmFyaWFu
dCk7Ci0gICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgIAorICAgICAgICBCT09MRUFOX1RP
X05QVkFSSUFOVChwbHVnaW4tPmxvZ0Rlc3Ryb3ksICpyZXN1bHQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luUHJvcGVydHlJZGVudGlmaWVyc1tJ
RF9QUk9QRVJUWV9IQVNfU1RSRUFNXSkgewotICAgICAgICBCT09MRUFOX1RPX05QVkFSSUFOVCgo
KFBsdWdpbk9iamVjdCAqKW9iaiktPnN0cmVhbSAhPSAwLCAqdmFyaWFudCk7CisgICAgICAgIEJP
T0xFQU5fVE9fTlBWQVJJQU5UKHBsdWdpbi0+c3RyZWFtICE9IDAsICpyZXN1bHQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luUHJvcGVydHlJZGVu
dGlmaWVyc1tJRF9QUk9QRVJUWV9URVNUX09CSkVDVF0pIHsKLSAgICAgICAgTlBPYmplY3QgKnRl
c3RPYmplY3QgPSAoKFBsdWdpbk9iamVjdCAqKW9iaiktPnRlc3RPYmplY3Q7CisgICAgICAgIE5Q
T2JqZWN0KiB0ZXN0T2JqZWN0ID0gcGx1Z2luLT50ZXN0T2JqZWN0OwogICAgICAgICBicm93c2Vy
LT5yZXRhaW5vYmplY3QodGVzdE9iamVjdCk7Ci0gICAgICAgIE9CSkVDVF9UT19OUFZBUklBTlQo
dGVzdE9iamVjdCwgKnZhcmlhbnQpOworICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKHRlc3RP
YmplY3QsICpyZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBwbHVnaW5TZXRQcm9wZXJ0eShOUE9iamVjdCAqb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQorc3RhdGljIGJv
b2wgcGx1Z2luU2V0UHJvcGVydHkoTlBPYmplY3QqIG9iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNv
bnN0IE5QVmFyaWFudCogdmFyaWFudCkKIHsKKyAgICBQbHVnaW5PYmplY3QqIHBsdWdpbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UGx1Z2luT2JqZWN0Kj4ob2JqKTsKICAgICBpZiAobmFtZSA9PSBwbHVn
aW5Qcm9wZXJ0eUlkZW50aWZpZXJzW0lEX1BST1BFUlRZX0VWRU5UX0xPR0dJTkddKSB7Ci0gICAg
ICAgICgoUGx1Z2luT2JqZWN0ICopb2JqKS0+ZXZlbnRMb2dnaW5nID0gTlBWQVJJQU5UX1RPX0JP
T0xFQU4oKnZhcmlhbnQpOworICAgICAgICBwbHVnaW4tPmV2ZW50TG9nZ2luZyA9IE5QVkFSSUFO
VF9UT19CT09MRUFOKCp2YXJpYW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNl
IGlmIChuYW1lID09IHBsdWdpblByb3BlcnR5SWRlbnRpZmllcnNbSURfUFJPUEVSVFlfTE9HX0RF
U1RST1ldKSB7Ci0gICAgICAgICgoUGx1Z2luT2JqZWN0ICopb2JqKS0+bG9nRGVzdHJveSA9IE5Q
VkFSSUFOVF9UT19CT09MRUFOKCp2YXJpYW50KTsKKyAgICAgICAgcGx1Z2luLT5sb2dEZXN0cm95
ID0gTlBWQVJJQU5UX1RPX0JPT0xFQU4oKnZhcmlhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RE
T01BY2Nlc3MoUGx1Z2luT2JqZWN0ICpvYmopCitzdGF0aWMgYm9vbCB0ZXN0RE9NQWNjZXNzKFBs
dWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqLCB1aW50MzJfdCwgTlBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgLy8gR2V0IHBsdWctaW4ncyBET00gZWxlbWVudAotICAgIE5QT2JqZWN0
ICplbGVtZW50T2JqZWN0OworICAgIE5QT2JqZWN0KiBlbGVtZW50T2JqZWN0OwogICAgIGlmIChi
cm93c2VyLT5nZXR2YWx1ZShvYmotPm5wcCwgTlBOVlBsdWdpbkVsZW1lbnROUE9iamVjdCwgJmVs
ZW1lbnRPYmplY3QpID09IE5QRVJSX05PX0VSUk9SKSB7CiAgICAgICAgIC8vIEdldCBzdHlsZQog
ICAgICAgICBOUFZhcmlhbnQgc3R5bGVWYXJpYW50OwpAQCAtMTk0LDkgKzE5NiwxMSBAQCBzdGF0
aWMgdm9pZCB0ZXN0RE9NQWNjZXNzKFBsdWdpbk9iamVjdCAqb2JqKQogICAgICAgICAgICAgYnJv
d3Nlci0+c2V0cHJvcGVydHkob2JqLT5ucHAsIE5QVkFSSUFOVF9UT19PQkpFQ1Qoc3R5bGVWYXJp
YW50KSwgYm9yZGVySWRlbnRpZmllciwgJmJvcmRlclZhcmlhbnQpOwogICAgICAgICAgICAgYnJv
d3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmc3R5bGVWYXJpYW50KTsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBicm93c2VyLT5yZWxlYXNlb2JqZWN0KGVsZW1lbnRPYmplY3QpOwog
ICAgIH0KKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogc3RhdGljIE5QSWRlbnRpZmllciBzdHJpbmdWYXJpYW50VG9JZGVudGlmaWVyKE5QVmFy
aWFudCB2YXJpYW50KQpAQCAtMjIyLDggKzIyNiwxMCBAQCBzdGF0aWMgTlBJZGVudGlmaWVyIHZh
cmlhbnRUb0lkZW50aWZpZXIoTlBWYXJpYW50IHZhcmlhbnQpCiAgICAgcmV0dXJuIDA7CiB9CiAK
LXN0YXRpYyBib29sIHRlc3RJZGVudGlmaWVyVG9TdHJpbmcoY29uc3QgTlBWYXJpYW50KiBhcmdz
LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3N0YXRpYyBib29sIHRlc3RJZGVudGlmaWVyVG9TdHJpbmco
UGx1Z2luT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwg
TlBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgaWYgKGFyZ0NvdW50ICE9IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IHZhcmlhbnRUb0lkZW50
aWZpZXIoYXJnc1sxXSk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0yMzMsOCArMjM5LDEwIEBAIHN0YXRpYyBib29sIHRlc3RJZGVudGlmaWVyVG9TdHJp
bmcoY29uc3QgTlBWYXJpYW50KiBhcmdzLCBOUFZhcmlhbnQqIHJlc3VsdCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgdGVzdElkZW50aWZpZXJUb0ludChjb25zdCBOUFZhcmlh
bnQqIGFyZ3MsIE5QVmFyaWFudCogcmVzdWx0KQorc3RhdGljIGJvb2wgdGVzdElkZW50aWZpZXJU
b0ludChQbHVnaW5PYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0Nv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKKyAgICBpZiAoYXJnQ291bnQgIT0gMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gdmFyaWFudFRv
SWRlbnRpZmllcihhcmdzWzFdKTsKICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTI0MywyMDAgKzI1MSwyNjEgQEAgc3RhdGljIGJvb2wgdGVzdElkZW50aWZp
ZXJUb0ludChjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIE5QVmFyaWFudCogcmVzdWx0KQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBwbHVnaW5JbnZva2UoTlBPYmplY3QgKmhlYWRl
ciwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJn
Q291bnQsIE5QVmFyaWFudCAqcmVzdWx0KQorc3RhdGljIGJvb2wgdGVzdENhbGxiYWNrKFBsdWdp
bk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBO
UFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBQbHVnaW5PYmplY3QgKm9iaiA9IChQbHVnaW5PYmpl
Y3QgKiloZWFkZXI7Ci0gICAgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURf
VEVTVF9DQUxMQkFDS19NRVRIT0RdKSB7Ci0gICAgICAgIC8vIGNhbGwgd2hhdGV2ZXIgbWV0aG9k
IG5hbWUgd2UncmUgZ2l2ZW4KLSAgICAgICAgaWYgKGFyZ0NvdW50ID4gMCAmJiBOUFZBUklBTlRf
SVNfU1RSSU5HKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBOUE9iamVjdCAqd2luZG93U2NyaXB0
T2JqZWN0OwotICAgICAgICAgICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5k
b3dOUE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7CisgICAgaWYgKGFyZ0NvdW50ID09IDAg
fHwgIU5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9t
TlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QSWRlbnRpZmllciBjYWxsYmFja0lk
ZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKGNhbGxiYWNrU3RyaW5nKTsK
LSAgICAgICAgICAgIGZyZWUoY2FsbGJhY2tTdHJpbmcpOworICAgIE5QT2JqZWN0KiB3aW5kb3dT
Y3JpcHRPYmplY3Q7CisgICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5kb3dO
UE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7CiAKLSAgICAgICAgICAgIE5QVmFyaWFudCBi
cm93c2VyUmVzdWx0OwotICAgICAgICAgICAgYnJvd3Nlci0+aW52b2tlKG9iai0+bnBwLCB3aW5k
b3dTY3JpcHRPYmplY3QsIGNhbGxiYWNrSWRlbnRpZmllciwgMCwgMCwgJmJyb3dzZXJSZXN1bHQp
OwotICAgICAgICAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3Vs
dCk7CisgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJp
YW50KCZhcmdzWzBdKTsKKyAgICBOUElkZW50aWZpZXIgY2FsbGJhY2tJZGVudGlmaWVyID0gYnJv
d3Nlci0+Z2V0c3RyaW5naWRlbnRpZmllcihjYWxsYmFja1N0cmluZyk7CisgICAgZnJlZShjYWxs
YmFja1N0cmluZyk7CiAKLSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRVUkxdKSB7Ci0gICAgICAgIGlm
IChhcmdDb3VudCA9PSAyICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkgJiYgTlBWQVJJ
QU5UX0lTX1NUUklORyhhcmdzWzFdKSkgewotICAgICAgICAgICAgTlBVVEY4KiB1cmxTdHJpbmcg
PSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1swXSk7Ci0gICAgICAgICAgICBOUFVU
RjgqIHRhcmdldFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKTsK
LSAgICAgICAgICAgIGJyb3dzZXItPmdldHVybChvYmotPm5wcCwgdXJsU3RyaW5nLCB0YXJnZXRT
dHJpbmcpOwotICAgICAgICAgICAgZnJlZSh1cmxTdHJpbmcpOwotICAgICAgICAgICAgZnJlZSh0
YXJnZXRTdHJpbmcpOwotCi0gICAgICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGFyZ0NvdW50ID09
IDEgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzBdKSkgewotICAgICAgICAgICAgTlBVVEY4
KiB1cmxTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1swXSk7Ci0gICAg
ICAgICAgICBicm93c2VyLT5nZXR1cmwob2JqLT5ucHAsIHVybFN0cmluZywgMCk7Ci0gICAgICAg
ICAgICBmcmVlKHVybFN0cmluZyk7CisgICAgTlBWYXJpYW50IGJyb3dzZXJSZXN1bHQ7CisgICAg
YnJvd3Nlci0+aW52b2tlKG9iai0+bnBwLCB3aW5kb3dTY3JpcHRPYmplY3QsIGNhbGxiYWNrSWRl
bnRpZmllciwgMCwgMCwgJmJyb3dzZXJSZXN1bHQpOworICAgIGJyb3dzZXItPnJlbGVhc2V2YXJp
YW50dmFsdWUoJmJyb3dzZXJSZXN1bHQpOworCisgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGdldFVSTChQbHVnaW5PYmpl
Y3QqIG9iaiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ0NvdW50ID09IDIgJiYgTlBWQVJJQU5UX0lTX1NU
UklORyhhcmdzWzBdKSAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMV0pKSB7CisgICAgICAg
IE5QVVRGOCogdXJsU3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMF0p
OworICAgICAgICBOUFVURjgqIHRhcmdldFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJp
YW50KCZhcmdzWzFdKTsKKyAgICAgICAgYnJvd3Nlci0+Z2V0dXJsKG9iai0+bnBwLCB1cmxTdHJp
bmcsIHRhcmdldFN0cmluZyk7CisgICAgICAgIGZyZWUodXJsU3RyaW5nKTsKKyAgICAgICAgZnJl
ZSh0YXJnZXRTdHJpbmcpOwogCi0gICAgICAgICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChu
YW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1JFTU9WRV9ERUZBVUxUX01FVEhPRF0p
IHsKLSAgICAgICAgcGx1Z2luQ2xhc3MuaW52b2tlRGVmYXVsdCA9IDA7CiAgICAgICAgIFZPSURf
VE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9ET01fQUNDRVNTXSkg
ewotICAgICAgICB0ZXN0RE9NQWNjZXNzKG9iaik7CisgICAgfSBlbHNlIGlmIChhcmdDb3VudCA9
PSAxICYmIE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkpIHsKKyAgICAgICAgTlBVVEY4KiB1
cmxTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1swXSk7CisgICAgICAg
IGJyb3dzZXItPmdldHVybChvYmotPm5wcCwgdXJsU3RyaW5nLCAwKTsKKyAgICAgICAgZnJlZSh1
cmxTdHJpbmcpOworCiAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRp
ZmllcnNbSURfVEVTVF9HRVRfVVJMX05PVElGWV0pIHsKLSAgICAgICAgaWYgKGFyZ0NvdW50ID09
IDMKLSAgICAgICAgICAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pCi0gICAgICAgICAg
JiYgKE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkgfHwgTlBWQVJJQU5UX0lTX05VTEwoYXJn
c1sxXSkpCi0gICAgICAgICAgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkgewotICAg
ICAgICAgICAgTlBVVEY4KiB1cmxTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgm
YXJnc1swXSk7Ci0gICAgICAgICAgICBOUFVURjgqIHRhcmdldFN0cmluZyA9IChOUFZBUklBTlRf
SVNfU1RSSU5HKGFyZ3NbMV0pID8gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0p
IDogTlVMTCk7Ci0gICAgICAgICAgICBOUFVURjgqIGNhbGxiYWNrU3RyaW5nID0gY3JlYXRlQ1N0
cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMl0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBO
UElkZW50aWZpZXIgY2FsbGJhY2tJZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0c3RyaW5naWRlbnRp
ZmllcihjYWxsYmFja1N0cmluZyk7Ci0gICAgICAgICAgICBicm93c2VyLT5nZXR1cmxub3RpZnko
b2JqLT5ucHAsIHVybFN0cmluZywgdGFyZ2V0U3RyaW5nLCBjYWxsYmFja0lkZW50aWZpZXIpOwot
Ci0gICAgICAgICAgICBmcmVlKHVybFN0cmluZyk7Ci0gICAgICAgICAgICBmcmVlKHRhcmdldFN0
cmluZyk7Ci0gICAgICAgICAgICBmcmVlKGNhbGxiYWNrU3RyaW5nKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJ
ZGVudGlmaWVyc1tJRF9URVNUX0lOVk9LRV9ERUZBVUxUXSAmJiBOUFZBUklBTlRfSVNfT0JKRUNU
KGFyZ3NbMF0pKSB7Ci0gICAgICAgIE5QT2JqZWN0ICpjYWxsYmFjayA9IE5QVkFSSUFOVF9UT19P
QkpFQ1QoYXJnc1swXSk7Ci0gICAgICAgIAotICAgICAgICBOUFZhcmlhbnQgYXJnc1sxXTsKLSAg
ICAgICAgTlBWYXJpYW50IGJyb3dzZXJSZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBTVFJJTkda
X1RPX05QVkFSSUFOVCgidGVzdCIsIGFyZ3NbMF0pOwotICAgICAgICBib29sIHJldHZhbCA9IGJy
b3dzZXItPmludm9rZURlZmF1bHQob2JqLT5ucHAsIGNhbGxiYWNrLCBhcmdzLCAxLCAmYnJvd3Nl
clJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmV0dmFsKQorICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHJlbW92ZURlZmF1bHRNZXRob2QoUGx1Z2luT2Jq
ZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpCit7CisgICAgcGx1Z2luQ2xhc3MuaW52b2tlRGVmYXVsdCA9IDA7CisgICAgVk9J
RF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIGdldFVSTE5vdGlmeShQbHVnaW5PYmplY3QqIG9iaiwgY29uc3QgTlBWYXJpYW50KiBhcmdz
LCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFyZ0Nv
dW50ICE9IDMgfHwgIU5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkKKyAgICAgICAgfHwgKCFO
UFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMV0pICYmICFOUFZBUklBTlRfSVNfTlVMTChhcmdzWzFd
KSkKKyAgICAgICAgfHwgIU5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1syXSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIE5QVVRGOCogdXJsU3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21O
UFZhcmlhbnQoJmFyZ3NbMF0pOworICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0gKE5QVkFSSUFO
VF9JU19TVFJJTkcoYXJnc1sxXSkgPyBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1sx
XSkgOiBOVUxMKTsKKyAgICBOUFVURjgqIGNhbGxiYWNrU3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zy
b21OUFZhcmlhbnQoJmFyZ3NbMl0pOworCisgICAgTlBJZGVudGlmaWVyIGNhbGxiYWNrSWRlbnRp
ZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIoY2FsbGJhY2tTdHJpbmcpOworICAg
IGJyb3dzZXItPmdldHVybG5vdGlmeShvYmotPm5wcCwgdXJsU3RyaW5nLCB0YXJnZXRTdHJpbmcs
IGNhbGxiYWNrSWRlbnRpZmllcik7CisKKyAgICBmcmVlKHVybFN0cmluZyk7CisgICAgZnJlZSh0
YXJnZXRTdHJpbmcpOworICAgIGZyZWUoY2FsbGJhY2tTdHJpbmcpOworCisgICAgVk9JRF9UT19O
UFZBUklBTlQoKnJlc3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRl
c3RJbnZva2VEZWZhdWx0KFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3Ms
IHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoIU5QVkFS
SUFOVF9JU19PQkpFQ1QoYXJnc1swXSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5Q
T2JqZWN0ICpjYWxsYmFjayA9IE5QVkFSSUFOVF9UT19PQkpFQ1QoYXJnc1swXSk7CisKKyAgICBO
UFZhcmlhbnQgaW52b2tlQXJnc1sxXTsKKyAgICBOUFZhcmlhbnQgYnJvd3NlclJlc3VsdDsKKwor
ICAgIFNUUklOR1pfVE9fTlBWQVJJQU5UKCJ0ZXN0IiwgaW52b2tlQXJnc1swXSk7CisgICAgYm9v
bCByZXR2YWwgPSBicm93c2VyLT5pbnZva2VEZWZhdWx0KG9iai0+bnBwLCBjYWxsYmFjaywgaW52
b2tlQXJncywgMSwgJmJyb3dzZXJSZXN1bHQpOworCisgICAgaWYgKHJldHZhbCkKKyAgICAgICAg
YnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJlc3VsdCk7CisKKyAgICBCT09M
RUFOX1RPX05QVkFSSUFOVChyZXR2YWwsICpyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCBkZXN0cm95U3RyZWFtKFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZh
cmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBOUEVycm9yIG5wRXJyb3IgPSBicm93c2VyLT5kZXN0cm95c3RyZWFtKG9iai0+bnBwLCBvYmot
PnN0cmVhbSwgTlBSRVNfVVNFUl9CUkVBSyk7CisgICAgSU5UMzJfVE9fTlBWQVJJQU5UKG5wRXJy
b3IsICpyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB0ZXN0RW51
bWVyYXRlKFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90
IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJnQ291bnQgIT0gMiB8
fCAhTlBWQVJJQU5UX0lTX09CSkVDVChhcmdzWzBdKSB8fCAhTlBWQVJJQU5UX0lTX09CSkVDVChh
cmdzWzFdKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3QgY291bnQ7Cisg
ICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVyczsKKyAgICBpZiAoYnJvd3Nlci0+ZW51bWVyYXRl
KG9iai0+bnBwLCBOUFZBUklBTlRfVE9fT0JKRUNUKGFyZ3NbMF0pLCAmaWRlbnRpZmllcnMsICZj
b3VudCkpIHsKKyAgICAgICAgTlBPYmplY3QqIG91dEFycmF5ID0gTlBWQVJJQU5UX1RPX09CSkVD
VChhcmdzWzFdKTsKKyAgICAgICAgTlBJZGVudGlmaWVyIHB1c2hJZGVudGlmaWVyID0gYnJvd3Nl
ci0+Z2V0c3RyaW5naWRlbnRpZmllcigicHVzaCIpOworCisgICAgICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBOUFVURjgqIHN0cmluZyA9IGJy
b3dzZXItPnV0Zjhmcm9taWRlbnRpZmllcihpZGVudGlmaWVyc1tpXSk7CisKKyAgICAgICAgICAg
IGlmICghc3RyaW5nKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBO
UFZhcmlhbnQgYXJnc1sxXTsKKyAgICAgICAgICAgIFNUUklOR1pfVE9fTlBWQVJJQU5UKHN0cmlu
ZywgYXJnc1swXSk7CisgICAgICAgICAgICBOUFZhcmlhbnQgYnJvd3NlclJlc3VsdDsKKyAgICAg
ICAgICAgIGJyb3dzZXItPmludm9rZShvYmotPm5wcCwgb3V0QXJyYXksIHB1c2hJZGVudGlmaWVy
LCBhcmdzLCAxLCAmYnJvd3NlclJlc3VsdCk7CiAgICAgICAgICAgICBicm93c2VyLT5yZWxlYXNl
dmFyaWFudHZhbHVlKCZicm93c2VyUmVzdWx0KTsKLSAgICAgICAgCi0gICAgICAgIEJPT0xFQU5f
VE9fTlBWQVJJQU5UKHJldHZhbCwgKnJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0VOVU1F
UkFURV0pIHsKLSAgICAgICAgaWYgKGFyZ0NvdW50ID09IDIgJiYgTlBWQVJJQU5UX0lTX09CSkVD
VChhcmdzWzBdKSAmJiBOUFZBUklBTlRfSVNfT0JKRUNUKGFyZ3NbMV0pKSB7Ci0gICAgICAgICAg
ICB1aW50MzJfdCBjb3VudDsgICAgICAgICAgICAKLSAgICAgICAgICAgIE5QSWRlbnRpZmllciog
aWRlbnRpZmllcnM7Ci0KLSAgICAgICAgICAgIGlmIChicm93c2VyLT5lbnVtZXJhdGUob2JqLT5u
cHAsIE5QVkFSSUFOVF9UT19PQkpFQ1QoYXJnc1swXSksICZpZGVudGlmaWVycywgJmNvdW50KSkg
ewotICAgICAgICAgICAgICAgIE5QT2JqZWN0KiBvdXRBcnJheSA9IE5QVkFSSUFOVF9UT19PQkpF
Q1QoYXJnc1sxXSk7Ci0gICAgICAgICAgICAgICAgTlBJZGVudGlmaWVyIHB1c2hJZGVudGlmaWVy
ID0gYnJvd3Nlci0+Z2V0c3RyaW5naWRlbnRpZmllcigicHVzaCIpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIE5QVVRGOCogc3RyaW5nID0gYnJvd3Nlci0+dXRmOGZyb21p
ZGVudGlmaWVyKGlkZW50aWZpZXJzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmICghc3RyaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIE5QVmFyaWFudCBhcmdzWzFdOwotICAgICAgICAgICAgICAgICAgICBTVFJJTkda
X1RPX05QVkFSSUFOVChzdHJpbmcsIGFyZ3NbMF0pOwotICAgICAgICAgICAgICAgICAgICBOUFZh
cmlhbnQgYnJvd3NlclJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci0+aW52b2tl
KG9iai0+bnBwLCBvdXRBcnJheSwgcHVzaElkZW50aWZpZXIsIGFyZ3MsIDEsICZicm93c2VyUmVz
dWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgm
YnJvd3NlclJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyb3dzZXItPm1lbWZyZWUoc3Ry
aW5nKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgYnJvd3Nlci0+bWVtZnJlZShpZGVudGlmaWVycyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgCisgICAgICAgICAgICBicm93c2VyLT5tZW1mcmVl
KHN0cmluZyk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9k
SWRlbnRpZmllcnNbSURfREVTVFJPWV9TVFJFQU1dKSB7Ci0gICAgICAgIE5QRXJyb3IgbnBFcnJv
ciA9IGJyb3dzZXItPmRlc3Ryb3lzdHJlYW0ob2JqLT5ucHAsIG9iai0+c3RyZWFtLCBOUFJFU19V
U0VSX0JSRUFLKTsKLSAgICAgICAgSU5UMzJfVE9fTlBWQVJJQU5UKG5wRXJyb3IsICpyZXN1bHQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsgICAgICAgIAotICAgIH0gZWxzZSBpZiAobmFtZSA9PSBw
bHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVElOVElERU5USUZJRVJdKSB7Ci0gICAg
ICAgIGlmIChhcmdDb3VudCA9PSAxICYmIE5QVkFSSUFOVF9JU19ET1VCTEUoYXJnc1swXSkpIHsK
LSAgICAgICAgICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0aW50aWRl
bnRpZmllcigoaW50KU5QVkFSSUFOVF9UT19ET1VCTEUoYXJnc1swXSkpOwotICAgICAgICAgICAg
SU5UMzJfVE9fTlBWQVJJQU5UKChpbnQzMilpZGVudGlmaWVyLCAqcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdp
bk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfRVZBTFVBVEVdICYmIAotICAgICAgICAgICAgICAg
YXJnQ291bnQgPT0gMSAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pKSB7Ci0gICAgICAg
IE5QT2JqZWN0ICp3aW5kb3dTY3JpcHRPYmplY3Q7Ci0gICAgICAgIGJyb3dzZXItPmdldHZhbHVl
KG9iai0+bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dTY3JpcHRPYmplY3QpOwotCi0g
ICAgICAgIE5QU3RyaW5nIHMgPSBOUFZBUklBTlRfVE9fU1RSSU5HKGFyZ3NbMF0pOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCByZXR2YWwgPSBicm93c2VyLT5ldmFsdWF0ZShvYmotPm5wcCwgd2lu
ZG93U2NyaXB0T2JqZWN0LCAmcywgcmVzdWx0KTsKLSAgICAgICAgYnJvd3Nlci0+cmVsZWFzZW9i
amVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgIH0g
ZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVF9QUk9Q
RVJUWV0gJiYKLSAgICAgICAgICAgICAgIGFyZ0NvdW50ID4gMCkgewotICAgICAgICBOUE9iamVj
dCAqb2JqZWN0OwotICAgICAgICBicm93c2VyLT5nZXR2YWx1ZShvYmotPm5wcCwgTlBOVldpbmRv
d05QT2JqZWN0LCAmb2JqZWN0KTsKLQotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
YXJnQ291bnQ7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0KE5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1tpXSkpOwotICAgICAgICAgICAgTlBVVEY4KiBwcm9wZXJ0eVN0cmluZyA9IGNyZWF0ZUNT
dHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzW2ldKTsKLSAgICAgICAgICAgIE5QSWRlbnRpZmllciBw
cm9wZXJ0eUlkZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKHByb3BlcnR5
U3RyaW5nKTsKLSAgICAgICAgICAgIGZyZWUocHJvcGVydHlTdHJpbmcpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBOUFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgICAgIGJvb2wgcmV0dmFs
ID0gYnJvd3Nlci0+Z2V0cHJvcGVydHkob2JqLT5ucHAsIG9iamVjdCwgcHJvcGVydHlJZGVudGlm
aWVyLCAmdmFyaWFudCk7Ci0gICAgICAgICAgICBicm93c2VyLT5yZWxlYXNlb2JqZWN0KG9iamVj
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghcmV0dmFsKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSArIDEgPCBhcmdDb3Vu
dCkgewotICAgICAgICAgICAgICAgIGFzc2VydChOUFZBUklBTlRfSVNfT0JKRUNUKHZhcmlhbnQp
KTsKLSAgICAgICAgICAgICAgICBvYmplY3QgPSBOUFZBUklBTlRfVE9fT0JKRUNUKHZhcmlhbnQp
OwotICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
KnJlc3VsdCA9IHZhcmlhbnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpy
ZXN1bHQpOworCisgICAgICAgIGJyb3dzZXItPm1lbWZyZWUoaWRlbnRpZmllcnMpOworICAgIH0K
KworICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgYm9vbCB0ZXN0R2V0SW50SWRlbnRpZmllcihQbHVnaW5PYmplY3QqLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICBpZiAoYXJnQ291bnQgIT0gMSB8fCAhTlBWQVJJQU5UX0lTX0RPVUJMRShhcmdzWzBdKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBi
cm93c2VyLT5nZXRpbnRpZGVudGlmaWVyKChpbnQpTlBWQVJJQU5UX1RPX0RPVUJMRShhcmdzWzBd
KSk7CisgICAgSU5UMzJfVE9fTlBWQVJJQU5UKChpbnQzMilpZGVudGlmaWVyLCAqcmVzdWx0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdGVzdEdldFByb3BlcnR5KFBsdWdp
bk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBO
UFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJnQ291bnQgPiAwKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJz
W0lEX1RFU1RfR0VUX1BST1BFUlRZX1JFVFVSTl9WQUxVRV0gJiYKLSAgICAgICAgYXJnQ291bnQg
PT0gMiAmJiBOUFZBUklBTlRfSVNfT0JKRUNUKGFyZ3NbMF0pICYmIE5QVkFSSUFOVF9JU19TVFJJ
TkcoYXJnc1sxXSkpIHsKLSAgICAgICAgTlBVVEY4KiBwcm9wZXJ0eVN0cmluZyA9IGNyZWF0ZUNT
dHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKTsKKworICAgIE5QT2JqZWN0ICpvYmplY3Q7Cisg
ICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5kb3dOUE9iamVjdCwgJm9iamVj
dCk7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykgeworICAg
ICAgICBhc3NlcnQoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzW2ldKSk7CisgICAgICAgIE5QVVRG
OCogcHJvcGVydHlTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1tpXSk7
CiAgICAgICAgIE5QSWRlbnRpZmllciBwcm9wZXJ0eUlkZW50aWZpZXIgPSBicm93c2VyLT5nZXRz
dHJpbmdpZGVudGlmaWVyKHByb3BlcnR5U3RyaW5nKTsKICAgICAgICAgZnJlZShwcm9wZXJ0eVN0
cmluZyk7CiAKICAgICAgICAgTlBWYXJpYW50IHZhcmlhbnQ7Ci0gICAgICAgIGJvb2wgcmV0dmFs
ID0gYnJvd3Nlci0+Z2V0cHJvcGVydHkob2JqLT5ucHAsIE5QVkFSSUFOVF9UT19PQkpFQ1QoYXJn
c1swXSksIHByb3BlcnR5SWRlbnRpZmllciwgJnZhcmlhbnQpOwotICAgICAgICBpZiAocmV0dmFs
KQotICAgICAgICAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmdmFyaWFudCk7Cisg
ICAgICAgIGJvb2wgcmV0dmFsID0gYnJvd3Nlci0+Z2V0cHJvcGVydHkob2JqLT5ucHAsIG9iamVj
dCwgcHJvcGVydHlJZGVudGlmaWVyLCAmdmFyaWFudCk7CisgICAgICAgIGJyb3dzZXItPnJlbGVh
c2VvYmplY3Qob2JqZWN0KTsKIAotICAgICAgICBCT09MRUFOX1RPX05QVkFSSUFOVChyZXR2YWws
ICpyZXN1bHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
cGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9JREVOVElGSUVSX1RPX1NUUklOR10gJiYK
LSAgICAgICAgYXJnQ291bnQgPj0gMiAmJiBOUFZBUklBTlRfSVNfT0JKRUNUKGFyZ3NbMF0pKQot
ICAgICAgICByZXR1cm4gdGVzdElkZW50aWZpZXJUb1N0cmluZyhhcmdzLCByZXN1bHQpOwotICAg
IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9JREVOVElG
SUVSX1RPX0lOVF0gJiYKLSAgICAgICAgYXJnQ291bnQgPj0gMiAmJiBOUFZBUklBTlRfSVNfT0JK
RUNUKGFyZ3NbMF0pKQotICAgICAgICByZXR1cm4gdGVzdElkZW50aWZpZXJUb0ludChhcmdzLCBy
ZXN1bHQpOworICAgICAgICBpZiAoIXJldHZhbCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGlmIChpICsgMSA8IGFyZ0NvdW50KSB7CisgICAgICAgICAgICBhc3NlcnQoTlBWQVJJQU5U
X0lTX09CSkVDVCh2YXJpYW50KSk7CisgICAgICAgICAgICBvYmplY3QgPSBOUFZBUklBTlRfVE9f
T0JKRUNUKHZhcmlhbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnJlc3VsdCA9
IHZhcmlhbnQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KIAor
ICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIGJvb2wgcGx1Z2luSW52b2tlRGVmYXVsdChOUE9iamVjdCAqb2JqLCBjb25zdCBOUFZh
cmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCkKK3N0YXRp
YyBib29sIHRlc3RFdmFsdWF0ZShQbHVnaW5PYmplY3QqIG9iaiwgY29uc3QgTlBWYXJpYW50KiBh
cmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCit7CisgICAgaWYgKGFy
Z0NvdW50ICE9IDEgfHwgIU5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBOUE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0OworICAgIGJyb3dz
ZXItPmdldHZhbHVlKG9iai0+bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dTY3JpcHRP
YmplY3QpOworCisgICAgTlBTdHJpbmcgcyA9IE5QVkFSSUFOVF9UT19TVFJJTkcoYXJnc1swXSk7
CisKKyAgICBib29sIHJldHZhbCA9IGJyb3dzZXItPmV2YWx1YXRlKG9iai0+bnBwLCB3aW5kb3dT
Y3JpcHRPYmplY3QsICZzLCByZXN1bHQpOworICAgIGJyb3dzZXItPnJlbGVhc2VvYmplY3Qod2lu
ZG93U2NyaXB0T2JqZWN0KTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgYm9vbCB0
ZXN0R2V0UHJvcGVydHlSZXR1cm5WYWx1ZShQbHVnaW5PYmplY3QqIG9iaiwgY29uc3QgTlBWYXJp
YW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCit7CisgICAg
aWYgKGFyZ0NvdW50ICE9IDIgfHwgIU5QVkFSSUFOVF9JU19PQkpFQ1QoYXJnc1swXSkgfHwgIU5Q
VkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IE5QVVRGOCogcHJvcGVydHlTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJn
c1sxXSk7CisgICAgTlBJZGVudGlmaWVyIHByb3BlcnR5SWRlbnRpZmllciA9IGJyb3dzZXItPmdl
dHN0cmluZ2lkZW50aWZpZXIocHJvcGVydHlTdHJpbmcpOworICAgIGZyZWUocHJvcGVydHlTdHJp
bmcpOworCisgICAgTlBWYXJpYW50IHZhcmlhbnQ7CisgICAgYm9vbCByZXR2YWwgPSBicm93c2Vy
LT5nZXRwcm9wZXJ0eShvYmotPm5wcCwgTlBWQVJJQU5UX1RPX09CSkVDVChhcmdzWzBdKSwgcHJv
cGVydHlJZGVudGlmaWVyLCAmdmFyaWFudCk7CisgICAgaWYgKHJldHZhbCkKKyAgICAgICAgYnJv
d3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmdmFyaWFudCk7CisKKyAgICBCT09MRUFOX1RPX05Q
VkFSSUFOVChyZXR2YWwsICpyZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Ym9vbCBwbHVnaW5JbnZva2UoTlBPYmplY3QqIGhlYWRlciwgTlBJZGVudGlmaWVyIG5hbWUsIGNv
bnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0
KQoreworICAgIFBsdWdpbk9iamVjdCogcGx1Z2luID0gcmVpbnRlcnByZXRfY2FzdDxQbHVnaW5P
YmplY3QqPihoZWFkZXIpOworICAgIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJz
W0lEX1RFU1RfQ0FMTEJBQ0tfTUVUSE9EXSkKKyAgICAgICAgdGVzdENhbGxiYWNrKHBsdWdpbiwg
YXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRo
b2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVFVSTF0pCisgICAgICAgIGdldFVSTChwbHVnaW4sIGFy
Z3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9k
SWRlbnRpZmllcnNbSURfUkVNT1ZFX0RFRkFVTFRfTUVUSE9EXSkKKyAgICAgICAgcmVtb3ZlRGVm
YXVsdE1ldGhvZChwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgIGVsc2UgaWYg
KG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9ET01fQUNDRVNTXSkKKyAg
ICAgICAgdGVzdERPTUFjY2VzcyhwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAg
IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRfVVJM
X05PVElGWV0pCisgICAgICAgIGdldFVSTE5vdGlmeShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCBy
ZXN1bHQpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURf
VEVTVF9JTlZPS0VfREVGQVVMVF0pCisgICAgICAgIHRlc3RJbnZva2VEZWZhdWx0KHBsdWdpbiwg
YXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRo
b2RJZGVudGlmaWVyc1tJRF9URVNUX0VOVU1FUkFURV0pCisgICAgICAgIHRlc3RFbnVtZXJhdGUo
cGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09IHBs
dWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX0RFU1RST1lfU1RSRUFNXSkKKyAgICAgICAgZGVzdHJv
eVN0cmVhbShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgIGVsc2UgaWYgKG5h
bWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRJTlRJREVOVElGSUVSXSkK
KyAgICAgICAgdGVzdEdldEludElkZW50aWZpZXIocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVz
dWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RF
U1RfRVZBTFVBVEVdKQorICAgICAgICB0ZXN0RXZhbHVhdGUocGx1Z2luLCBhcmdzLCBhcmdDb3Vu
dCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJz
W0lEX1RFU1RfR0VUX1BST1BFUlRZXSkKKyAgICAgICAgdGVzdEdldFByb3BlcnR5KHBsdWdpbiwg
YXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRo
b2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVF9QUk9QRVJUWV9SRVRVUk5fVkFMVUVdKQorICAgICAg
ICB0ZXN0R2V0UHJvcGVydHlSZXR1cm5WYWx1ZShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1
bHQpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVT
VF9JREVOVElGSUVSX1RPX1NUUklOR10pCisgICAgICAgIHJldHVybiB0ZXN0SWRlbnRpZmllclRv
U3RyaW5nKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFt
ZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0lERU5USUZJRVJfVE9fSU5UXSkK
KyAgICAgICAgcmV0dXJuIHRlc3RJZGVudGlmaWVyVG9JbnQocGx1Z2luLCBhcmdzLCBhcmdDb3Vu
dCwgcmVzdWx0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgcGx1Z2lu
SW52b2tlRGVmYXVsdChOUE9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBJTlQzMl9UT19OUFZBUklB
TlQoMSwgKnJlc3VsdCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIHBsdWdp
bkludmFsaWRhdGUoTlBPYmplY3QgKm9iaikKK3N0YXRpYyB2b2lkIHBsdWdpbkludmFsaWRhdGUo
TlBPYmplY3QqIG9iaikKIHsKIH0KIAogc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0ZShO
UFAgbnBwLCBOUENsYXNzICp0aGVDbGFzcykKIHsKLSAgICBQbHVnaW5PYmplY3QgKm5ld0luc3Rh
bmNlID0gKFBsdWdpbk9iamVjdCopbWFsbG9jKHNpemVvZihQbHVnaW5PYmplY3QpKTsKLSAgICAK
KyAgICBQbHVnaW5PYmplY3QqIG5ld0luc3RhbmNlID0gKFBsdWdpbk9iamVjdCopbWFsbG9jKHNp
emVvZihQbHVnaW5PYmplY3QpKTsKKwogICAgIGlmICghaWRlbnRpZmllcnNJbml0aWFsaXplZCkg
ewogICAgICAgICBpZGVudGlmaWVyc0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgaW5pdGlh
bGl6ZUlkZW50aWZpZXJzKCk7CkBAIC00NDksMzggKzUxOCwzNiBAQCBzdGF0aWMgTlBPYmplY3Qg
KnBsdWdpbkFsbG9jYXRlKE5QUCBucHAsIE5QQ2xhc3MgKnRoZUNsYXNzKQogICAgIG5ld0luc3Rh
bmNlLT5sb2dTZXRXaW5kb3cgPSBGQUxTRTsKICAgICBuZXdJbnN0YW5jZS0+cmV0dXJuRXJyb3JG
cm9tTmV3U3RyZWFtID0gRkFMU0U7CiAgICAgbmV3SW5zdGFuY2UtPnN0cmVhbSA9IDA7Ci0gICAg
CisKICAgICBuZXdJbnN0YW5jZS0+Zmlyc3RVcmwgPSBOVUxMOwogICAgIG5ld0luc3RhbmNlLT5m
aXJzdEhlYWRlcnMgPSBOVUxMOwogICAgIG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsKICAg
ICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRlcnMgPSBOVUxMOwotICAgIAotICAgIHJldHVybiAoTlBP
YmplY3QgKiluZXdJbnN0YW5jZTsKKworICAgIHJldHVybiAoTlBPYmplY3QqKW5ld0luc3RhbmNl
OwogfQogCi1zdGF0aWMgdm9pZCBwbHVnaW5EZWFsbG9jYXRlKE5QT2JqZWN0ICpoZWFkZXIpIAor
c3RhdGljIHZvaWQgcGx1Z2luRGVhbGxvY2F0ZShOUE9iamVjdCogaGVhZGVyKQogewotICAgIFBs
dWdpbk9iamVjdCogb2JqID0gKFBsdWdpbk9iamVjdCopaGVhZGVyOwotICAgIAotICAgIGJyb3dz
ZXItPnJlbGVhc2VvYmplY3Qob2JqLT50ZXN0T2JqZWN0KTsKLQotICAgIGZyZWUob2JqLT5maXJz
dFVybCk7Ci0gICAgZnJlZShvYmotPmZpcnN0SGVhZGVycyk7Ci0gICAgZnJlZShvYmotPmxhc3RV
cmwpOwotICAgIGZyZWUob2JqLT5sYXN0SGVhZGVycyk7Ci0KLSAgICBmcmVlKG9iaik7CisgICAg
UGx1Z2luT2JqZWN0KiBwbHVnaW4gPSByZWludGVycHJldF9jYXN0PFBsdWdpbk9iamVjdCo+KGhl
YWRlcik7CisgICAgYnJvd3Nlci0+cmVsZWFzZW9iamVjdChwbHVnaW4tPnRlc3RPYmplY3QpOwor
CisgICAgZnJlZShwbHVnaW4tPmZpcnN0VXJsKTsKKyAgICBmcmVlKHBsdWdpbi0+Zmlyc3RIZWFk
ZXJzKTsKKyAgICBmcmVlKHBsdWdpbi0+bGFzdFVybCk7CisgICAgZnJlZShwbHVnaW4tPmxhc3RI
ZWFkZXJzKTsKKyAgICBmcmVlKHBsdWdpbik7CiB9CiAKIHZvaWQgaGFuZGxlQ2FsbGJhY2soUGx1
Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIgKnVybCwgTlBSZWFzb24gcmVhc29uLCB2b2lk
ICpub3RpZnlEYXRhKQogewogICAgIGFzc2VydChvYmplY3QpOwotICAgIAorCiAgICAgTlBWYXJp
YW50IGFyZ3NbMl07Ci0gICAgCisKICAgICBOUE9iamVjdCAqd2luZG93U2NyaXB0T2JqZWN0Owog
ICAgIGJyb3dzZXItPmdldHZhbHVlKG9iamVjdC0+bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZ3
aW5kb3dTY3JpcHRPYmplY3QpOwotICAgIAorCiAgICAgTlBJZGVudGlmaWVyIGNhbGxiYWNrSWRl
bnRpZmllciA9IG5vdGlmeURhdGE7CiAKICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBh
cmdzWzBdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19848</attachid>
            <date>2008-03-17 13:59:54 -0700</date>
            <delta_ts>2008-03-17 13:59:54 -0700</delta_ts>
            <desc>Fix NPAPI implementation and plugin test</desc>
            <filename>Fix-NPAPI-implementation-and-plugin-test.patch</filename>
            <type>text/plain</type>
            <size>12461</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTQxMjlhODVkMDgyYTQ1NzViNmNkOWY5NDU3ZGMwOTM3NzExZTExOApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24t
ZXhwZWN0ZWQudHh0CmluZGV4IGJiMWE0OTcuLjNiYzcyYTMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3BsdWdpbnMvbmV0c2NhcGUtaWRlbnRpZmllci1jb252ZXJzaW9uLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBlLWlkZW50aWZpZXItY29udmVyc2lvbi1l
eHBlY3RlZC50eHQKQEAgLTEsOSArMSwyMCBAQAotRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9y
IG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkCiBUZXN0IGNvbnZlcnRpbmcgc3RyaW5ncyBhbmQgaW50
ZWdlcnMgdG8gaWRlbnRpZmllcnMgYW5kIGJhY2sKIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgogCiAKK1BBU1MgZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygnZm9vJykgaXMgImZvbyIK
K1BBU1MgZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygnMTIzJykgaXMgIjEyMyIKK1BBU1Mg
ZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygnbnVsbCcpIGlzICJudWxsIgorUEFTUyBlbWJl
ZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKDEpIGlzIHVuZGVmaW5lZAorUEFTUyBlbWJlZC50ZXN0
SWRlbnRpZmllclRvU3RyaW5nKC0xKSBpcyB1bmRlZmluZWQKK1BBU1MgZW1iZWQudGVzdElkZW50
aWZpZXJUb1N0cmluZygxLjQwKSBpcyB1bmRlZmluZWQKK1BBU1MgZW1iZWQudGVzdElkZW50aWZp
ZXJUb0ludCgxKSBpcyAxCitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoLTEpIGlzIC0x
CitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoMTApIGlzIDEwCitQQVNTIGVtYmVkLnRl
c3RJZGVudGlmaWVyVG9JbnQoMTAuMjM0MjM0KSBpcyAxMAorUEFTUyBlbWJlZC50ZXN0SWRlbnRp
ZmllclRvSW50KCdmb28nKSBpcyAwCitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoJzEw
JykgaXMgMAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRF
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9uZXRzY2FwZS1pZGVu
dGlmaWVyLWNvbnZlcnNpb24uanMgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL3Jlc291cmNlcy9uZXRz
Y2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uanMKaW5kZXggNDFlMWQ1MS4uMjA2Y2I4MCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvbmV0c2NhcGUtaWRlbnRpZmll
ci1jb252ZXJzaW9uLmpzCisrKyBiL0xheW91dFRlc3RzL3BsdWdpbnMvcmVzb3VyY2VzL25ldHNj
YXBlLWlkZW50aWZpZXItY29udmVyc2lvbi5qcwpAQCAtMSwzMyArMSwyMyBAQAogZGVzY3JpcHRp
b24oIlRlc3QgY29udmVydGluZyBzdHJpbmdzIGFuZCBpbnRlZ2VycyB0byBpZGVudGlmaWVycyBh
bmQgYmFjayIpCiAKLWlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotCi12YXIgZW1iZWQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJlbWJlZCIpOwotLy9lbWJlZC5vbmxvYWQgPSBjb250aW51ZVRlc3Q7Citl
bWJlZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImVtYmVkIik7CiBlbWJlZC50eXBlID0gImFw
cGxpY2F0aW9uL3gtd2Via2l0LXRlc3QtbmV0c2NhcGUiOwogZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChlbWJlZCk7CiAKLWZ1bmN0aW9uIGNvbnRpbnVlVGVzdCgpIHsKLSAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoJ2ZvbycpIiwgImZvbyIp
OwotICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmlu
ZygnMTIzJykiLCAiMTIzIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlbWJlZC50ZXN0
SWRlbnRpZmllclRvU3RyaW5nKCdudWxsJykiLCAibnVsbCIpOwotCi0gICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKDEpIiwgIjEiKTsKLSAgICBz
aG91bGRCZUVxdWFsVG9TdHJpbmcoImVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoLTEpIiwg
Ii0xIik7Ci0gICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlbWJlZC50ZXN0SWRlbnRpZmllclRv
U3RyaW5nKDEuNDApIiwgIjEiKTsKLQotICAgIHNob3VsZEJlKCJlbWJlZC50ZXN0SWRlbnRpZmll
clRvSW50KDEpIiwgIjEiKTsKLSAgICBzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0lu
dCgtMSkiLCAiLTEiKTsKLSAgICBzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgx
MCkiLCAiMTAiKTsKLSAgICBzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgxMC4y
MzQyMzQpIiwgIjEwIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVtYmVkLnRlc3RJZGVudGlm
aWVyVG9TdHJpbmcoJ2ZvbycpIiwgImZvbyIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlbWJl
ZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKCcxMjMnKSIsICIxMjMiKTsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygiZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygnbnVsbCcpIiwgIm51bGwiKTsK
IAotICAgIHNob3VsZEJlKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KCdmb28nKSIsICIwIik7
Ci0gICAgc2hvdWxkQmUoImVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoJzEwJykiLCAiMCIpOwor
c2hvdWxkQmUoImVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoMSkiLCAidW5kZWZpbmVkIik7
CitzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygtMSkiLCAidW5kZWZpbmVk
Iik7CitzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygxLjQwKSIsICJ1bmRl
ZmluZWQiKTsKIAotICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0KK3No
b3VsZEJlKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KDEpIiwgIjEiKTsKK3Nob3VsZEJlKCJl
bWJlZC50ZXN0SWRlbnRpZmllclRvSW50KC0xKSIsICItMSIpOworc2hvdWxkQmUoImVtYmVkLnRl
c3RJZGVudGlmaWVyVG9JbnQoMTApIiwgIjEwIik7CitzaG91bGRCZSgiZW1iZWQudGVzdElkZW50
aWZpZXJUb0ludCgxMC4yMzQyMzQpIiwgIjEwIik7CiAKLWNvbnRpbnVlVGVzdCgpOworc2hvdWxk
QmUoImVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoJ2ZvbycpIiwgIjAiKTsKK3Nob3VsZEJlKCJl
bWJlZC50ZXN0SWRlbnRpZmllclRvSW50KCcxMCcpIiwgIjAiKTsKIAogdmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhwIGIv
V2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cAppbmRleCA2Yjg1NmY2Li5iMWNlNDQyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5OUEFQ
SS5leHAKQEAgLTYsNiArNiw3IEBAIF9fTlBOX0dldFByb3BlcnR5CiBfX05QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyCiBfX05QTl9HZXRTdHJpbmdJZGVudGlmaWVycwogX19OUE5fSWRlbnRpZmllcklz
U3RyaW5nCitfX05QTl9JbnRGcm9tSWRlbnRpZmllcgogX19OUE5fSW52b2tlCiBfX05QTl9JbnZv
a2VEZWZhdWx0CiBfX05QTl9SZWxlYXNlT2JqZWN0CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0gYi9XZWJLaXQvbWFjL1BsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KaW5kZXggYmQwOGFiZS4uOTM3NTQ4MyAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCisrKyBiL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubQpAQCAtNDI1LDYgKzQy
NSw3IEBAIHN0YXRpYyBUcmFuc2l0aW9uVmVjdG9yIHRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIo
RnVuY3Rpb25Qb2ludGVyKTsKICAgICAgICAgYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZpZXIg
PSAoTlBOX0dldEludElkZW50aWZpZXJQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIo
KEZ1bmN0aW9uUG9pbnRlcilfTlBOX0dldEludElkZW50aWZpZXIpOwogICAgICAgICBicm93c2Vy
RnVuY3MuaWRlbnRpZmllcmlzc3RyaW5nID0gKE5QTl9JZGVudGlmaWVySXNTdHJpbmdQcm9jUHRy
KXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZyk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy51dGY4ZnJvbWlkZW50aWZpZXIgPSAo
TlBOX1VURjhGcm9tSWRlbnRpZmllclByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigo
RnVuY3Rpb25Qb2ludGVyKV9OUE5fVVRGOEZyb21JZGVudGlmaWVyKTsKKyAgICAgICAgYnJvd3Nl
ckZ1bmNzLmludGZyb21pZGVudGlmaWVyID0gKE5QTl9JbnRGcm9tSWRlbnRpZmllclByb2NQdHIp
dFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVyKV9OUE5fSW50RnJvbUlk
ZW50aWZpZXIpOwogICAgICAgICBicm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gKE5QTl9DcmVh
dGVPYmplY3RQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlvblBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRl
cilfTlBOX0NyZWF0ZU9iamVjdCk7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3Qg
PSAoTlBOX1JldGFpbk9iamVjdFByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVu
Y3Rpb25Qb2ludGVyKV9OUE5fUmV0YWluT2JqZWN0KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnJl
bGVhc2VvYmplY3QgPSAoTlBOX1JlbGVhc2VPYmplY3RQcm9jUHRyKXRWZWN0b3JGb3JGdW5jdGlv
blBvaW50ZXIoKEZ1bmN0aW9uUG9pbnRlcilfTlBOX1JlbGVhc2VPYmplY3QpOwpAQCAtNTI2LDYg
KzUyNyw3IEBAIHN0YXRpYyBUcmFuc2l0aW9uVmVjdG9yIHRWZWN0b3JGb3JGdW5jdGlvblBvaW50
ZXIoRnVuY3Rpb25Qb2ludGVyKTsKICAgICAgICAgYnJvd3NlckZ1bmNzLmdldGludGlkZW50aWZp
ZXIgPSBfTlBOX0dldEludElkZW50aWZpZXI7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5pZGVudGlm
aWVyaXNzdHJpbmcgPSBfTlBOX0lkZW50aWZpZXJJc1N0cmluZzsKICAgICAgICAgYnJvd3NlckZ1
bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyOworICAgICAg
ICBicm93c2VyRnVuY3MuaW50ZnJvbWlkZW50aWZpZXIgPSBfTlBOX0ludEZyb21JZGVudGlmaWVy
OwogICAgICAgICBicm93c2VyRnVuY3MuY3JlYXRlb2JqZWN0ID0gX05QTl9DcmVhdGVPYmplY3Q7
CiAgICAgICAgIGJyb3dzZXJGdW5jcy5yZXRhaW5vYmplY3QgPSBfTlBOX1JldGFpbk9iamVjdDsK
ICAgICAgICAgYnJvd3NlckZ1bmNzLnJlbGVhc2VvYmplY3QgPSBfTlBOX1JlbGVhc2VPYmplY3Q7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
VGVzdE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmNwcAppbmRleCA4Y2Y5ZWVj
Li45NmEzYWE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0
c2NhcGVQbHVnSW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdpbk9iamVjdC5jcHAK
QEAgLTI5LDE3ICsyOSwxNyBAQAogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+CiAKLXN0YXRpYyB2b2lkIHBsdWdpbkludmFsaWRhdGUoTlBPYmplY3QgKm9iaik7Ci1zdGF0
aWMgYm9vbCBwbHVnaW5IYXNQcm9wZXJ0eShOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbmFt
ZSk7Ci1zdGF0aWMgYm9vbCBwbHVnaW5IYXNNZXRob2QoTlBPYmplY3QgKm9iaiwgTlBJZGVudGlm
aWVyIG5hbWUpOwotc3RhdGljIGJvb2wgcGx1Z2luR2V0UHJvcGVydHkoTlBPYmplY3QgKm9iaiwg
TlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudCAqdmFyaWFudCk7Ci1zdGF0aWMgYm9vbCBwbHVn
aW5TZXRQcm9wZXJ0eShOUE9iamVjdCAqb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBW
YXJpYW50ICp2YXJpYW50KTsKLXN0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCAqb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdD
b3VudCwgTlBWYXJpYW50ICpyZXN1bHQpOwotc3RhdGljIGJvb2wgcGx1Z2luSW52b2tlRGVmYXVs
dChOUE9iamVjdCAqb2JqLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50
LCBOUFZhcmlhbnQgKnJlc3VsdCk7Ci1zdGF0aWMgTlBPYmplY3QgKnBsdWdpbkFsbG9jYXRlKE5Q
UCBucHAsIE5QQ2xhc3MgKnRoZUNsYXNzKTsKLXN0YXRpYyB2b2lkIHBsdWdpbkRlYWxsb2NhdGUo
TlBPYmplY3QgKm9iaik7Ci0KLU5QTmV0c2NhcGVGdW5jcyAqYnJvd3NlcjsKK3N0YXRpYyB2b2lk
IHBsdWdpbkludmFsaWRhdGUoTlBPYmplY3QqKTsKK3N0YXRpYyBib29sIHBsdWdpbkhhc1Byb3Bl
cnR5KE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG5hbWUpOworc3RhdGljIGJvb2wgcGx1Z2luSGFz
TWV0aG9kKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG5hbWUpOworc3RhdGljIGJvb2wgcGx1Z2lu
R2V0UHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50Kik7Citz
dGF0aWMgYm9vbCBwbHVnaW5TZXRQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmllciBuYW1l
LCBjb25zdCBOUFZhcmlhbnQqKTsKK3N0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCos
IE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0Nv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7CitzdGF0aWMgYm9vbCBwbHVnaW5JbnZva2VEZWZhdWx0
KE5QT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50KiByZXN1bHQpOworc3RhdGljIE5QT2JqZWN0KiBwbHVnaW5BbGxvY2F0ZShOUFAgbnBw
LCBOUENsYXNzKik7CitzdGF0aWMgdm9pZCBwbHVnaW5EZWFsbG9jYXRlKE5QT2JqZWN0Kik7CisK
K05QTmV0c2NhcGVGdW5jcyogYnJvd3NlcjsKIAogc3RhdGljIE5QQ2xhc3MgcGx1Z2luQ2xhc3Mg
PSB7CiAgICAgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04sCkBAIC0yMDUsNiArMjA1LDcgQEAgc3Rh
dGljIGJvb2wgdGVzdERPTUFjY2VzcyhQbHVnaW5PYmplY3QqIG9iaiwgY29uc3QgTlBWYXJpYW50
KiwgdWludDMyX3QsIE5QVmFyaWEKIAogc3RhdGljIE5QSWRlbnRpZmllciBzdHJpbmdWYXJpYW50
VG9JZGVudGlmaWVyKE5QVmFyaWFudCB2YXJpYW50KQogeworICAgIGFzc2VydChOUFZBUklBTlRf
SVNfU1RSSU5HKHZhcmlhbnQpKTsKICAgICBOUFVURjgqIHV0ZjhTdHJpbmcgPSBjcmVhdGVDU3Ry
aW5nRnJvbU5QVmFyaWFudCgmdmFyaWFudCk7CiAgICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIg
PSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKHV0ZjhTdHJpbmcpOwogICAgIGZyZWUodXRm
OFN0cmluZyk7CkBAIC0yMTMsMTYgKzIxNCwyOCBAQCBzdGF0aWMgTlBJZGVudGlmaWVyIHN0cmlu
Z1ZhcmlhbnRUb0lkZW50aWZpZXIoTlBWYXJpYW50IHZhcmlhbnQpCiAKIHN0YXRpYyBOUElkZW50
aWZpZXIgaW50MzJWYXJpYW50VG9JZGVudGlmaWVyKE5QVmFyaWFudCB2YXJpYW50KQogeworICAg
IGFzc2VydChOUFZBUklBTlRfSVNfSU5UMzIodmFyaWFudCkpOwogICAgIGludDMyIGludGVnZXIg
PSBOUFZBUklBTlRfVE9fSU5UMzIodmFyaWFudCk7CiAgICAgcmV0dXJuIGJyb3dzZXItPmdldGlu
dGlkZW50aWZpZXIoaW50ZWdlcik7CiB9CiAKK3N0YXRpYyBOUElkZW50aWZpZXIgZG91YmxlVmFy
aWFudFRvSWRlbnRpZmllcihOUFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBhc3NlcnQoTlBWQVJJ
QU5UX0lTX0RPVUJMRSh2YXJpYW50KSk7CisgICAgZG91YmxlIHZhbHVlID0gTlBWQVJJQU5UX1RP
X0RPVUJMRSh2YXJpYW50KTsKKyAgICAvLyBTYWRseSB0aGVyZSBpcyBubyAiZ2V0ZG91YmxlaWRl
bnRpZmllciIKKyAgICBpbnQzMiBpbnRlZ2VyID0gc3RhdGljX2Nhc3Q8aW50MzI+KHZhbHVlKTsK
KyAgICByZXR1cm4gYnJvd3Nlci0+Z2V0aW50aWRlbnRpZmllcihpbnRlZ2VyKTsKK30KKwogc3Rh
dGljIE5QSWRlbnRpZmllciB2YXJpYW50VG9JZGVudGlmaWVyKE5QVmFyaWFudCB2YXJpYW50KQog
ewogICAgIGlmIChOUFZBUklBTlRfSVNfU1RSSU5HKHZhcmlhbnQpKQogICAgICAgICByZXR1cm4g
c3RyaW5nVmFyaWFudFRvSWRlbnRpZmllcih2YXJpYW50KTsKICAgICBlbHNlIGlmIChOUFZBUklB
TlRfSVNfSU5UMzIodmFyaWFudCkpCiAgICAgICAgIHJldHVybiBpbnQzMlZhcmlhbnRUb0lkZW50
aWZpZXIodmFyaWFudCk7CisgICAgZWxzZSBpZiAoTlBWQVJJQU5UX0lTX0RPVUJMRSh2YXJpYW50
KSkKKyAgICAgICAgcmV0dXJuIGRvdWJsZVZhcmlhbnRUb0lkZW50aWZpZXIodmFyaWFudCk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIzMCwxMiArMjQzLDEzIEBAIHN0YXRpYyBib29sIHRlc3RJ
ZGVudGlmaWVyVG9TdHJpbmcoUGx1Z2luT2JqZWN0KiwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1
aW50MzJfCiB7CiAgICAgaWYgKGFyZ0NvdW50ICE9IDEpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IHZhcmlhbnRUb0lkZW50aWZpZXIoYXJnc1sx
XSk7CisgICAgTlBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSB2YXJpYW50VG9JZGVudGlmaWVyKGFy
Z3NbMF0pOwogICAgIGlmICghaWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IE5QVVRGOCogdXRmOFN0cmluZyA9IGJyb3dzZXItPnV0Zjhmcm9taWRlbnRpZmllcihpZGVudGlm
aWVyKTsKKyAgICBpZiAoIXV0ZjhTdHJpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBT
VFJJTkdaX1RPX05QVkFSSUFOVCh1dGY4U3RyaW5nLCAqcmVzdWx0KTsKLSAgICBmcmVlKHV0ZjhT
dHJpbmcpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNDMsNyArMjU3LDcgQEAgc3RhdGlj
IGJvb2wgdGVzdElkZW50aWZpZXJUb0ludChQbHVnaW5PYmplY3QqLCBjb25zdCBOUFZhcmlhbnQq
IGFyZ3MsIHVpbnQzMl90IGEKIHsKICAgICBpZiAoYXJnQ291bnQgIT0gMSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0gdmFyaWFudFRvSWRlbnRp
ZmllcihhcmdzWzFdKTsKKyAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IHZhcmlhbnRUb0lk
ZW50aWZpZXIoYXJnc1swXSk7CiAgICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgaW50MzIgaW50ZWdlciA9IGJyb3dzZXItPmludGZyb21pZGVudGlmaWVyKGlk
ZW50aWZpZXIpOwpAQCAtNDYxLDI5ICs0NzUsMjkgQEAgc3RhdGljIGJvb2wgcGx1Z2luSW52b2tl
KE5QT2JqZWN0KiBoZWFkZXIsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIGEK
IHsKICAgICBQbHVnaW5PYmplY3QqIHBsdWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luT2Jq
ZWN0Kj4oaGVhZGVyKTsKICAgICBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJ
RF9URVNUX0NBTExCQUNLX01FVEhPRF0pCi0gICAgICAgIHRlc3RDYWxsYmFjayhwbHVnaW4sIGFy
Z3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4gdGVzdENhbGxiYWNrKHBsdWdp
biwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5N
ZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVFVSTF0pCi0gICAgICAgIGdldFVSTChwbHVnaW4s
IGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgICAgICByZXR1cm4gZ2V0VVJMKHBsdWdpbiwg
YXJncywgYXJnQ291bnQsIHJlc3VsdCk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRo
b2RJZGVudGlmaWVyc1tJRF9SRU1PVkVfREVGQVVMVF9NRVRIT0RdKQotICAgICAgICByZW1vdmVE
ZWZhdWx0TWV0aG9kKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZW1vdmVEZWZhdWx0TWV0aG9kKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7
CiAgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0RP
TV9BQ0NFU1NdKQotICAgICAgICB0ZXN0RE9NQWNjZXNzKHBsdWdpbiwgYXJncywgYXJnQ291bnQs
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0ZXN0RE9NQWNjZXNzKHBsdWdpbiwgYXJncywgYXJn
Q291bnQsIHJlc3VsdCk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlm
aWVyc1tJRF9URVNUX0dFVF9VUkxfTk9USUZZXSkKLSAgICAgICAgZ2V0VVJMTm90aWZ5KHBsdWdp
biwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBnZXRVUkxOb3RpZnko
cGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKICAgICBlbHNlIGlmIChuYW1lID09IHBs
dWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfSU5WT0tFX0RFRkFVTFRdKQotICAgICAgICB0
ZXN0SW52b2tlRGVmYXVsdChwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gdGVzdEludm9rZURlZmF1bHQocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0
KTsKICAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1Rf
RU5VTUVSQVRFXSkKLSAgICAgICAgdGVzdEVudW1lcmF0ZShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50
LCByZXN1bHQpOworICAgICAgICByZXR1cm4gdGVzdEVudW1lcmF0ZShwbHVnaW4sIGFyZ3MsIGFy
Z0NvdW50LCByZXN1bHQpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRp
ZmllcnNbSURfREVTVFJPWV9TVFJFQU1dKQotICAgICAgICBkZXN0cm95U3RyZWFtKHBsdWdpbiwg
YXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBkZXN0cm95U3RyZWFtKHBs
dWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVn
aW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVElOVElERU5USUZJRVJdKQotICAgICAgICB0
ZXN0R2V0SW50SWRlbnRpZmllcihwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAg
ICAgICByZXR1cm4gdGVzdEdldEludElkZW50aWZpZXIocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwg
cmVzdWx0KTsKICAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lE
X1RFU1RfRVZBTFVBVEVdKQotICAgICAgICB0ZXN0RXZhbHVhdGUocGx1Z2luLCBhcmdzLCBhcmdD
b3VudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRlc3RFdmFsdWF0ZShwbHVnaW4sIGFyZ3Ms
IGFyZ0NvdW50LCByZXN1bHQpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRl
bnRpZmllcnNbSURfVEVTVF9HRVRfUFJPUEVSVFldKQotICAgICAgICB0ZXN0R2V0UHJvcGVydHko
cGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRlc3RHZXRQ
cm9wZXJ0eShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwogICAgIGVsc2UgaWYgKG5h
bWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRfUFJPUEVSVFlfUkVUVVJO
X1ZBTFVFXSkKLSAgICAgICAgdGVzdEdldFByb3BlcnR5UmV0dXJuVmFsdWUocGx1Z2luLCBhcmdz
LCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRlc3RHZXRQcm9wZXJ0eVJldHVy
blZhbHVlKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CiAgICAgZWxzZSBpZiAobmFt
ZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0lERU5USUZJRVJfVE9fU1RSSU5H
XSkKICAgICAgICAgcmV0dXJuIHRlc3RJZGVudGlmaWVyVG9TdHJpbmcocGx1Z2luLCBhcmdzLCBh
cmdDb3VudCwgcmVzdWx0KTsKICAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50
aWZpZXJzW0lEX1RFU1RfSURFTlRJRklFUl9UT19JTlRdKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19849</attachid>
            <date>2008-03-17 14:08:48 -0700</date>
            <delta_ts>2008-03-17 14:22:10 -0700</delta_ts>
            <desc>First pass at identifier -&gt; int fix and test case</desc>
            <filename>combined patch</filename>
            <type>text/plain</type>
            <size>33957</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2Y1MGYyMDU3NzQ2MGQ3YTc4M2I4Njc0MTNmMDE3ZWMxMGQwNWE5ZApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24t
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYzcyYTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25ldHNjYXBlLWlkZW50aWZp
ZXItY29udmVyc2lvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyMSBAQAorVGVzdCBjb252ZXJ0
aW5nIHN0cmluZ3MgYW5kIGludGVnZXJzIHRvIGlkZW50aWZpZXJzIGFuZCBiYWNrCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJp
bmcoJ2ZvbycpIGlzICJmb28iCitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoJzEy
MycpIGlzICIxMjMiCitQQVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoJ251bGwnKSBp
cyAibnVsbCIKK1BBU1MgZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygxKSBpcyB1bmRlZmlu
ZWQKK1BBU1MgZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygtMSkgaXMgdW5kZWZpbmVkCitQ
QVNTIGVtYmVkLnRlc3RJZGVudGlmaWVyVG9TdHJpbmcoMS40MCkgaXMgdW5kZWZpbmVkCitQQVNT
IGVtYmVkLnRlc3RJZGVudGlmaWVyVG9JbnQoMSkgaXMgMQorUEFTUyBlbWJlZC50ZXN0SWRlbnRp
ZmllclRvSW50KC0xKSBpcyAtMQorUEFTUyBlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KDEwKSBp
cyAxMAorUEFTUyBlbWJlZC50ZXN0SWRlbnRpZmllclRvSW50KDEwLjIzNDIzNCkgaXMgMTAKK1BB
U1MgZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgnZm9vJykgaXMgMAorUEFTUyBlbWJlZC50ZXN0
SWRlbnRpZmllclRvSW50KCcxMCcpIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL25l
dHNjYXBlLWlkZW50aWZpZXItY29udmVyc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9u
ZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yNDhmYjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGx1
Z2lucy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uaHRtbApAQCAtMCwwICsxLDEzIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbHVnaW5zL3Jlc291cmNl
cy9URU1QTEFURS5odG1sIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvVEVNUExBVEUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDc3MjI4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbApA
QCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNj
cmlwdCBzcmM9IllPVVJfSlNfRklMRV9IRVJFIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMvbmV0c2NhcGUt
aWRlbnRpZmllci1jb252ZXJzaW9uLmpzIGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9yZXNvdXJjZXMv
bmV0c2NhcGUtaWRlbnRpZmllci1jb252ZXJzaW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjIwNmNiODAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVn
aW5zL3Jlc291cmNlcy9uZXRzY2FwZS1pZGVudGlmaWVyLWNvbnZlcnNpb24uanMKQEAgLTAsMCAr
MSwyMyBAQAorZGVzY3JpcHRpb24oIlRlc3QgY29udmVydGluZyBzdHJpbmdzIGFuZCBpbnRlZ2Vy
cyB0byBpZGVudGlmaWVycyBhbmQgYmFjayIpCisKK2VtYmVkID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZW1iZWQiKTsKK2VtYmVkLnR5cGUgPSAiYXBwbGljYXRpb24veC13ZWJraXQtdGVzdC1u
ZXRzY2FwZSI7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVtYmVkKTsKKworc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJlbWJlZC50ZXN0SWRlbnRpZmllclRvU3RyaW5nKCdmb28nKSIsICJmb28i
KTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygiZW1iZWQudGVzdElkZW50aWZpZXJUb1N0cmluZygn
MTIzJykiLCAiMTIzIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImVtYmVkLnRlc3RJZGVudGlm
aWVyVG9TdHJpbmcoJ251bGwnKSIsICJudWxsIik7CisKK3Nob3VsZEJlKCJlbWJlZC50ZXN0SWRl
bnRpZmllclRvU3RyaW5nKDEpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImVtYmVkLnRlc3RJ
ZGVudGlmaWVyVG9TdHJpbmcoLTEpIiwgInVuZGVmaW5lZCIpOworc2hvdWxkQmUoImVtYmVkLnRl
c3RJZGVudGlmaWVyVG9TdHJpbmcoMS40MCkiLCAidW5kZWZpbmVkIik7CisKK3Nob3VsZEJlKCJl
bWJlZC50ZXN0SWRlbnRpZmllclRvSW50KDEpIiwgIjEiKTsKK3Nob3VsZEJlKCJlbWJlZC50ZXN0
SWRlbnRpZmllclRvSW50KC0xKSIsICItMSIpOworc2hvdWxkQmUoImVtYmVkLnRlc3RJZGVudGlm
aWVyVG9JbnQoMTApIiwgIjEwIik7CitzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0lu
dCgxMC4yMzQyMzQpIiwgIjEwIik7CisKK3Nob3VsZEJlKCJlbWJlZC50ZXN0SWRlbnRpZmllclRv
SW50KCdmb28nKSIsICIwIik7CitzaG91bGRCZSgiZW1iZWQudGVzdElkZW50aWZpZXJUb0ludCgn
MTAnKSIsICIwIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLk5QQVBJLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5OUEFQSS5leHAK
aW5kZXggNmI4NTZmNi4uYjFjZTQ0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLk5QQVBJ
LmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuTlBBUEkuZXhwCkBAIC02LDYgKzYsNyBAQCBfX05Q
Tl9HZXRQcm9wZXJ0eQogX19OUE5fR2V0U3RyaW5nSWRlbnRpZmllcgogX19OUE5fR2V0U3RyaW5n
SWRlbnRpZmllcnMKIF9fTlBOX0lkZW50aWZpZXJJc1N0cmluZworX19OUE5fSW50RnJvbUlkZW50
aWZpZXIKIF9fTlBOX0ludm9rZQogX19OUE5fSW52b2tlRGVmYXVsdAogX19OUE5fUmVsZWFzZU9i
amVjdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmNwcCBiL1dlYkNvcmUv
YnJpZGdlL25wcnVudGltZS5jcHAKaW5kZXggZjE3MGVhYi4uNTliZGYwYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9icmlkZ2UvbnBydW50aW1lLmNwcAorKysgYi9XZWJDb3JlL2JyaWRnZS9ucHJ1bnRp
bWUuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgTlBVVEY4ICpfTlBOX1VURjhGcm9tSWRlbnRpZmll
cihOUElkZW50aWZpZXIgaWRlbnRpZmllcikKIGludDMyX3QgX05QTl9JbnRGcm9tSWRlbnRpZmll
cihOUElkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBQcml2YXRlSWRlbnRpZmllciogaSA9
IChQcml2YXRlSWRlbnRpZmllciopaWRlbnRpZmllcjsKLSAgICBpZiAoIWktPmlzU3RyaW5nKQor
ICAgIGlmIChpLT5pc1N0cmluZykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGktPnZh
bHVlLm51bWJlcjsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblBhY2thZ2UubSBiL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBh
Y2thZ2UubQppbmRleCBiZDA4YWJlLi45Mzc1NDgzIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1Bs
dWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm0KKysrIGIvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tCkBAIC00MjUsNiArNDI1LDcgQEAgc3RhdGljIFRy
YW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcihGdW5jdGlvblBvaW50ZXIp
OwogICAgICAgICBicm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IChOUE5fR2V0SW50SWRl
bnRpZmllclByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVy
KV9OUE5fR2V0SW50SWRlbnRpZmllcik7CiAgICAgICAgIGJyb3dzZXJGdW5jcy5pZGVudGlmaWVy
aXNzdHJpbmcgPSAoTlBOX0lkZW50aWZpZXJJc1N0cmluZ1Byb2NQdHIpdFZlY3RvckZvckZ1bmN0
aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVyKV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKTsKICAg
ICAgICAgYnJvd3NlckZ1bmNzLnV0Zjhmcm9taWRlbnRpZmllciA9IChOUE5fVVRGOEZyb21JZGVu
dGlmaWVyUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIp
X05QTl9VVEY4RnJvbUlkZW50aWZpZXIpOworICAgICAgICBicm93c2VyRnVuY3MuaW50ZnJvbWlk
ZW50aWZpZXIgPSAoTlBOX0ludEZyb21JZGVudGlmaWVyUHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rp
b25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpX05QTl9JbnRGcm9tSWRlbnRpZmllcik7CiAgICAg
ICAgIGJyb3dzZXJGdW5jcy5jcmVhdGVvYmplY3QgPSAoTlBOX0NyZWF0ZU9iamVjdFByb2NQdHIp
dFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rpb25Qb2ludGVyKV9OUE5fQ3JlYXRlT2Jq
ZWN0KTsKICAgICAgICAgYnJvd3NlckZ1bmNzLnJldGFpbm9iamVjdCA9IChOUE5fUmV0YWluT2Jq
ZWN0UHJvY1B0cil0VmVjdG9yRm9yRnVuY3Rpb25Qb2ludGVyKChGdW5jdGlvblBvaW50ZXIpX05Q
Tl9SZXRhaW5PYmplY3QpOwogICAgICAgICBicm93c2VyRnVuY3MucmVsZWFzZW9iamVjdCA9IChO
UE5fUmVsZWFzZU9iamVjdFByb2NQdHIpdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcigoRnVuY3Rp
b25Qb2ludGVyKV9OUE5fUmVsZWFzZU9iamVjdCk7CkBAIC01MjYsNiArNTI3LDcgQEAgc3RhdGlj
IFRyYW5zaXRpb25WZWN0b3IgdFZlY3RvckZvckZ1bmN0aW9uUG9pbnRlcihGdW5jdGlvblBvaW50
ZXIpOwogICAgICAgICBicm93c2VyRnVuY3MuZ2V0aW50aWRlbnRpZmllciA9IF9OUE5fR2V0SW50
SWRlbnRpZmllcjsKICAgICAgICAgYnJvd3NlckZ1bmNzLmlkZW50aWZpZXJpc3N0cmluZyA9IF9O
UE5fSWRlbnRpZmllcklzU3RyaW5nOwogICAgICAgICBicm93c2VyRnVuY3MudXRmOGZyb21pZGVu
dGlmaWVyID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXI7CisgICAgICAgIGJyb3dzZXJGdW5jcy5p
bnRmcm9taWRlbnRpZmllciA9IF9OUE5fSW50RnJvbUlkZW50aWZpZXI7CiAgICAgICAgIGJyb3dz
ZXJGdW5jcy5jcmVhdGVvYmplY3QgPSBfTlBOX0NyZWF0ZU9iamVjdDsKICAgICAgICAgYnJvd3Nl
ckZ1bmNzLnJldGFpbm9iamVjdCA9IF9OUE5fUmV0YWluT2JqZWN0OwogICAgICAgICBicm93c2Vy
RnVuY3MucmVsZWFzZW9iamVjdCA9IF9OUE5fUmVsZWFzZU9iamVjdDsKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJwcm9qL1BsdWdp
bk9iamVjdC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9UZXN0TmV0c2NhcGVQbHVn
SW4uc3VicHJvai9QbHVnaW5PYmplY3QuY3BwCmluZGV4IDIwYzBlNTMuLjk2YTNhYTcgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3ROZXRzY2FwZVBsdWdJbi5zdWJw
cm9qL1BsdWdpbk9iamVjdC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dE5ldHNjYXBlUGx1Z0luLnN1YnByb2ovUGx1Z2luT2JqZWN0LmNwcApAQCAtMjAsNyArMjAsNyBA
QAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiUGx1Z2luT2JqZWN0LmgiCkBAIC0y
OSwyMiArMjksMjIgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgog
Ci1zdGF0aWMgdm9pZCBwbHVnaW5JbnZhbGlkYXRlKE5QT2JqZWN0ICpvYmopOwotc3RhdGljIGJv
b2wgcGx1Z2luSGFzUHJvcGVydHkoTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG5hbWUpOwot
c3RhdGljIGJvb2wgcGx1Z2luSGFzTWV0aG9kKE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBu
YW1lKTsKLXN0YXRpYyBib29sIHBsdWdpbkdldFByb3BlcnR5KE5QT2JqZWN0ICpvYmosIE5QSWRl
bnRpZmllciBuYW1lLCBOUFZhcmlhbnQgKnZhcmlhbnQpOwotc3RhdGljIGJvb2wgcGx1Z2luU2V0
UHJvcGVydHkoTlBPYmplY3QgKm9iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFu
dCAqdmFyaWFudCk7Ci1zdGF0aWMgYm9vbCBwbHVnaW5JbnZva2UoTlBPYmplY3QgKm9iaiwgTlBJ
ZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQs
IE5QVmFyaWFudCAqcmVzdWx0KTsKLXN0YXRpYyBib29sIHBsdWdpbkludm9rZURlZmF1bHQoTlBP
YmplY3QgKm9iaiwgY29uc3QgTlBWYXJpYW50ICphcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBW
YXJpYW50ICpyZXN1bHQpOwotc3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0ZShOUFAgbnBw
LCBOUENsYXNzICp0aGVDbGFzcyk7Ci1zdGF0aWMgdm9pZCBwbHVnaW5EZWFsbG9jYXRlKE5QT2Jq
ZWN0ICpvYmopOworc3RhdGljIHZvaWQgcGx1Z2luSW52YWxpZGF0ZShOUE9iamVjdCopOworc3Rh
dGljIGJvb2wgcGx1Z2luSGFzUHJvcGVydHkoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgbmFtZSk7
CitzdGF0aWMgYm9vbCBwbHVnaW5IYXNNZXRob2QoTlBPYmplY3QqLCBOUElkZW50aWZpZXIgbmFt
ZSk7CitzdGF0aWMgYm9vbCBwbHVnaW5HZXRQcm9wZXJ0eShOUE9iamVjdCosIE5QSWRlbnRpZmll
ciBuYW1lLCBOUFZhcmlhbnQqKTsKK3N0YXRpYyBib29sIHBsdWdpblNldFByb3BlcnR5KE5QT2Jq
ZWN0KiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCopOworc3RhdGljIGJvb2wg
cGx1Z2luSW52b2tlKE5QT2JqZWN0KiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFu
dCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KTsKK3N0YXRpYyBi
b29sIHBsdWdpbkludm9rZURlZmF1bHQoTlBPYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3Ms
IHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7CitzdGF0aWMgTlBPYmplY3Qq
IHBsdWdpbkFsbG9jYXRlKE5QUCBucHAsIE5QQ2xhc3MqKTsKK3N0YXRpYyB2b2lkIHBsdWdpbkRl
YWxsb2NhdGUoTlBPYmplY3QqKTsKIAotTlBOZXRzY2FwZUZ1bmNzICpicm93c2VyOworTlBOZXRz
Y2FwZUZ1bmNzKiBicm93c2VyOwogCi1zdGF0aWMgTlBDbGFzcyBwbHVnaW5DbGFzcyA9IHsgCitz
dGF0aWMgTlBDbGFzcyBwbHVnaW5DbGFzcyA9IHsKICAgICBOUF9DTEFTU19TVFJVQ1RfVkVSU0lP
TiwKLSAgICBwbHVnaW5BbGxvY2F0ZSwgCi0gICAgcGx1Z2luRGVhbGxvY2F0ZSwgCisgICAgcGx1
Z2luQWxsb2NhdGUsCisgICAgcGx1Z2luRGVhbGxvY2F0ZSwKICAgICBwbHVnaW5JbnZhbGlkYXRl
LAogICAgIHBsdWdpbkhhc01ldGhvZCwKICAgICBwbHVnaW5JbnZva2UsCkBAIC01Myw3ICs1Myw3
IEBAIHN0YXRpYyBOUENsYXNzIHBsdWdpbkNsYXNzID0gewogICAgIHBsdWdpbkdldFByb3BlcnR5
LAogICAgIHBsdWdpblNldFByb3BlcnR5LAogfTsKLSAKKwogTlBDbGFzcyAqZ2V0UGx1Z2luQ2xh
c3Modm9pZCkKIHsKICAgICByZXR1cm4gJnBsdWdpbkNsYXNzOwpAQCAtODksNyArODksOSBAQCBz
dGF0aWMgY29uc3QgTlBVVEY4ICpwbHVnaW5Qcm9wZXJ0eUlkZW50aWZpZXJOYW1lc1tOVU1fUFJP
UEVSVFlfSURFTlRJRklFUlNdID0gewogI2RlZmluZSBJRF9URVNUX0dFVF9QUk9QRVJUWSAgICAg
ICAgOQogI2RlZmluZSBJRF9URVNUX0VWQUxVQVRFICAgICAgICAgICAgMTAKICNkZWZpbmUgSURf
VEVTVF9HRVRfUFJPUEVSVFlfUkVUVVJOX1ZBTFVFIDExCi0jZGVmaW5lIE5VTV9NRVRIT0RfSURF
TlRJRklFUlMgICAgICAxMgorI2RlZmluZSBJRF9URVNUX0lERU5USUZJRVJfVE9fU1RSSU5HIDEy
CisjZGVmaW5lIElEX1RFU1RfSURFTlRJRklFUl9UT19JTlQgICAxMworI2RlZmluZSBOVU1fTUVU
SE9EX0lERU5USUZJRVJTICAgICAgMTQKIAogc3RhdGljIE5QSWRlbnRpZmllciBwbHVnaW5NZXRo
b2RJZGVudGlmaWVyc1tOVU1fTUVUSE9EX0lERU5USUZJRVJTXTsKIHN0YXRpYyBjb25zdCBOUFVU
RjggKnBsdWdpbk1ldGhvZElkZW50aWZpZXJOYW1lc1tOVU1fTUVUSE9EX0lERU5USUZJRVJTXSA9
IHsKQEAgLTEwNSw5ICsxMDcsMTEgQEAgc3RhdGljIGNvbnN0IE5QVVRGOCAqcGx1Z2luTWV0aG9k
SWRlbnRpZmllck5hbWVzW05VTV9NRVRIT0RfSURFTlRJRklFUlNdID0gewogICAgICJ0ZXN0R2V0
UHJvcGVydHkiLAogICAgICJ0ZXN0RXZhbHVhdGUiLAogICAgICJ0ZXN0R2V0UHJvcGVydHlSZXR1
cm5WYWx1ZSIsCisgICAgInRlc3RJZGVudGlmaWVyVG9TdHJpbmciLAorICAgICJ0ZXN0SWRlbnRp
ZmllclRvSW50IiwKIH07CiAKLXN0YXRpYyBOUFVURjgqIGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJp
YW50KGNvbnN0IE5QVmFyaWFudCAqdmFyaWFudCkKK3N0YXRpYyBOUFVURjgqIGNyZWF0ZUNTdHJp
bmdGcm9tTlBWYXJpYW50KGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCkKIHsKICAgICBzaXplX3Qg
bGVuZ3RoID0gTlBWQVJJQU5UX1RPX1NUUklORygqdmFyaWFudCkuVVRGOExlbmd0aDsKICAgICBO
UFVURjgqIHJlc3VsdCA9IChOUFVURjgqKW1hbGxvYyhsZW5ndGggKyAxKTsKQEAgLTEzOCw0NiAr
MTQyLDQ4IEBAIHN0YXRpYyBib29sIHBsdWdpbkhhc01ldGhvZChOUE9iamVjdCAqb2JqLCBOUElk
ZW50aWZpZXIgbmFtZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIHBsdWdp
bkdldFByb3BlcnR5KE5QT2JqZWN0ICpvYmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQg
KnZhcmlhbnQpCitzdGF0aWMgYm9vbCBwbHVnaW5HZXRQcm9wZXJ0eShOUE9iamVjdCogb2JqLCBO
UElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7CisgICAgUGx1Z2luT2JqZWN0
KiBwbHVnaW4gPSByZWludGVycHJldF9jYXN0PFBsdWdpbk9iamVjdCo+KG9iaik7CiAgICAgaWYg
KG5hbWUgPT0gcGx1Z2luUHJvcGVydHlJZGVudGlmaWVyc1tJRF9QUk9QRVJUWV9QUk9QRVJUWV0p
IHsKLSAgICAgICAgU1RSSU5HWl9UT19OUFZBUklBTlQoInByb3BlcnR5IiwgKnZhcmlhbnQpOwor
ICAgICAgICBTVFJJTkdaX1RPX05QVkFSSUFOVCgicHJvcGVydHkiLCAqcmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpblByb3BlcnR5SWRl
bnRpZmllcnNbSURfUFJPUEVSVFlfRVZFTlRfTE9HR0lOR10pIHsKLSAgICAgICAgQk9PTEVBTl9U
T19OUFZBUklBTlQoKChQbHVnaW5PYmplY3QgKilvYmopLT5ldmVudExvZ2dpbmcsICp2YXJpYW50
KTsKKyAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQocGx1Z2luLT5ldmVudExvZ2dpbmcsICpy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1
Z2luUHJvcGVydHlJZGVudGlmaWVyc1tJRF9QUk9QRVJUWV9MT0dfREVTVFJPWV0pIHsKLSAgICAg
ICAgQk9PTEVBTl9UT19OUFZBUklBTlQoKChQbHVnaW5PYmplY3QgKilvYmopLT5sb2dEZXN0cm95
LCAqdmFyaWFudCk7Ci0gICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgIAorICAgICAgICBC
T09MRUFOX1RPX05QVkFSSUFOVChwbHVnaW4tPmxvZ0Rlc3Ryb3ksICpyZXN1bHQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luUHJvcGVydHlJZGVu
dGlmaWVyc1tJRF9QUk9QRVJUWV9IQVNfU1RSRUFNXSkgewotICAgICAgICBCT09MRUFOX1RPX05Q
VkFSSUFOVCgoKFBsdWdpbk9iamVjdCAqKW9iaiktPnN0cmVhbSAhPSAwLCAqdmFyaWFudCk7Cisg
ICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKHBsdWdpbi0+c3RyZWFtICE9IDAsICpyZXN1bHQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luUHJv
cGVydHlJZGVudGlmaWVyc1tJRF9QUk9QRVJUWV9URVNUX09CSkVDVF0pIHsKLSAgICAgICAgTlBP
YmplY3QgKnRlc3RPYmplY3QgPSAoKFBsdWdpbk9iamVjdCAqKW9iaiktPnRlc3RPYmplY3Q7Cisg
ICAgICAgIE5QT2JqZWN0KiB0ZXN0T2JqZWN0ID0gcGx1Z2luLT50ZXN0T2JqZWN0OwogICAgICAg
ICBicm93c2VyLT5yZXRhaW5vYmplY3QodGVzdE9iamVjdCk7Ci0gICAgICAgIE9CSkVDVF9UT19O
UFZBUklBTlQodGVzdE9iamVjdCwgKnZhcmlhbnQpOworICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJ
QU5UKHRlc3RPYmplY3QsICpyZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBwbHVnaW5TZXRQcm9wZXJ0eShOUE9i
amVjdCAqb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50ICp2YXJpYW50KQor
c3RhdGljIGJvb2wgcGx1Z2luU2V0UHJvcGVydHkoTlBPYmplY3QqIG9iaiwgTlBJZGVudGlmaWVy
IG5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFyaWFudCkKIHsKKyAgICBQbHVnaW5PYmplY3QqIHBs
dWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGx1Z2luT2JqZWN0Kj4ob2JqKTsKICAgICBpZiAobmFt
ZSA9PSBwbHVnaW5Qcm9wZXJ0eUlkZW50aWZpZXJzW0lEX1BST1BFUlRZX0VWRU5UX0xPR0dJTkdd
KSB7Ci0gICAgICAgICgoUGx1Z2luT2JqZWN0ICopb2JqKS0+ZXZlbnRMb2dnaW5nID0gTlBWQVJJ
QU5UX1RPX0JPT0xFQU4oKnZhcmlhbnQpOworICAgICAgICBwbHVnaW4tPmV2ZW50TG9nZ2luZyA9
IE5QVkFSSUFOVF9UT19CT09MRUFOKCp2YXJpYW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpblByb3BlcnR5SWRlbnRpZmllcnNbSURfUFJPUEVS
VFlfTE9HX0RFU1RST1ldKSB7Ci0gICAgICAgICgoUGx1Z2luT2JqZWN0ICopb2JqKS0+bG9nRGVz
dHJveSA9IE5QVkFSSUFOVF9UT19CT09MRUFOKCp2YXJpYW50KTsKKyAgICAgICAgcGx1Z2luLT5s
b2dEZXN0cm95ID0gTlBWQVJJQU5UX1RPX0JPT0xFQU4oKnZhcmlhbnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2
b2lkIHRlc3RET01BY2Nlc3MoUGx1Z2luT2JqZWN0ICpvYmopCitzdGF0aWMgYm9vbCB0ZXN0RE9N
QWNjZXNzKFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqLCB1aW50MzJfdCwgTlBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgLy8gR2V0IHBsdWctaW4ncyBET00gZWxlbWVudAotICAg
IE5QT2JqZWN0ICplbGVtZW50T2JqZWN0OworICAgIE5QT2JqZWN0KiBlbGVtZW50T2JqZWN0Owog
ICAgIGlmIChicm93c2VyLT5nZXR2YWx1ZShvYmotPm5wcCwgTlBOVlBsdWdpbkVsZW1lbnROUE9i
amVjdCwgJmVsZW1lbnRPYmplY3QpID09IE5QRVJSX05PX0VSUk9SKSB7CiAgICAgICAgIC8vIEdl
dCBzdHlsZQogICAgICAgICBOUFZhcmlhbnQgc3R5bGVWYXJpYW50OwpAQCAtMTkwLDE5OSArMTk2
LDMzMCBAQCBzdGF0aWMgdm9pZCB0ZXN0RE9NQWNjZXNzKFBsdWdpbk9iamVjdCAqb2JqKQogICAg
ICAgICAgICAgYnJvd3Nlci0+c2V0cHJvcGVydHkob2JqLT5ucHAsIE5QVkFSSUFOVF9UT19PQkpF
Q1Qoc3R5bGVWYXJpYW50KSwgYm9yZGVySWRlbnRpZmllciwgJmJvcmRlclZhcmlhbnQpOwogICAg
ICAgICAgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmc3R5bGVWYXJpYW50KTsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBicm93c2VyLT5yZWxlYXNlb2JqZWN0KGVsZW1l
bnRPYmplY3QpOwogICAgIH0KKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcGx1Z2luSW52b2tlKE5QT2JqZWN0ICpoZWFk
ZXIsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQgKmFyZ3MsIHVpbnQzMl90IGFy
Z0NvdW50LCBOUFZhcmlhbnQgKnJlc3VsdCkKK3N0YXRpYyBOUElkZW50aWZpZXIgc3RyaW5nVmFy
aWFudFRvSWRlbnRpZmllcihOUFZhcmlhbnQgdmFyaWFudCkKIHsKLSAgICBQbHVnaW5PYmplY3Qg
Km9iaiA9IChQbHVnaW5PYmplY3QgKiloZWFkZXI7Ci0gICAgaWYgKG5hbWUgPT0gcGx1Z2luTWV0
aG9kSWRlbnRpZmllcnNbSURfVEVTVF9DQUxMQkFDS19NRVRIT0RdKSB7Ci0gICAgICAgIC8vIGNh
bGwgd2hhdGV2ZXIgbWV0aG9kIG5hbWUgd2UncmUgZ2l2ZW4KLSAgICAgICAgaWYgKGFyZ0NvdW50
ID4gMCAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBOUE9i
amVjdCAqd2luZG93U2NyaXB0T2JqZWN0OwotICAgICAgICAgICAgYnJvd3Nlci0+Z2V0dmFsdWUo
b2JqLT5ucHAsIE5QTlZXaW5kb3dOUE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7CisgICAg
YXNzZXJ0KE5QVkFSSUFOVF9JU19TVFJJTkcodmFyaWFudCkpOworICAgIE5QVVRGOCogdXRmOFN0
cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZ2YXJpYW50KTsKKyAgICBOUElkZW50
aWZpZXIgaWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIodXRmOFN0cmlu
Zyk7CisgICAgZnJlZSh1dGY4U3RyaW5nKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KIAot
ICAgICAgICAgICAgTlBVVEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBW
YXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QSWRlbnRpZmllciBjYWxsYmFja0lkZW50
aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKGNhbGxiYWNrU3RyaW5nKTsKLSAg
ICAgICAgICAgIGZyZWUoY2FsbGJhY2tTdHJpbmcpOworc3RhdGljIE5QSWRlbnRpZmllciBpbnQz
MlZhcmlhbnRUb0lkZW50aWZpZXIoTlBWYXJpYW50IHZhcmlhbnQpCit7CisgICAgYXNzZXJ0KE5Q
VkFSSUFOVF9JU19JTlQzMih2YXJpYW50KSk7CisgICAgaW50MzIgaW50ZWdlciA9IE5QVkFSSUFO
VF9UT19JTlQzMih2YXJpYW50KTsKKyAgICByZXR1cm4gYnJvd3Nlci0+Z2V0aW50aWRlbnRpZmll
cihpbnRlZ2VyKTsKK30KIAotICAgICAgICAgICAgTlBWYXJpYW50IGJyb3dzZXJSZXN1bHQ7Ci0g
ICAgICAgICAgICBicm93c2VyLT5pbnZva2Uob2JqLT5ucHAsIHdpbmRvd1NjcmlwdE9iamVjdCwg
Y2FsbGJhY2tJZGVudGlmaWVyLCAwLCAwLCAmYnJvd3NlclJlc3VsdCk7Ci0gICAgICAgICAgICBi
cm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZicm93c2VyUmVzdWx0KTsKK3N0YXRpYyBOUElk
ZW50aWZpZXIgZG91YmxlVmFyaWFudFRvSWRlbnRpZmllcihOUFZhcmlhbnQgdmFyaWFudCkKK3sK
KyAgICBhc3NlcnQoTlBWQVJJQU5UX0lTX0RPVUJMRSh2YXJpYW50KSk7CisgICAgZG91YmxlIHZh
bHVlID0gTlBWQVJJQU5UX1RPX0RPVUJMRSh2YXJpYW50KTsKKyAgICAvLyBTYWRseSB0aGVyZSBp
cyBubyAiZ2V0ZG91YmxlaWRlbnRpZmllciIKKyAgICBpbnQzMiBpbnRlZ2VyID0gc3RhdGljX2Nh
c3Q8aW50MzI+KHZhbHVlKTsKKyAgICByZXR1cm4gYnJvd3Nlci0+Z2V0aW50aWRlbnRpZmllcihp
bnRlZ2VyKTsKK30KIAotICAgICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobmFtZSA9
PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVFVSTF0pIHsKLSAgICAgICAgaWYg
KGFyZ0NvdW50ID09IDIgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzBdKSAmJiBOUFZBUklB
TlRfSVNfU1RSSU5HKGFyZ3NbMV0pKSB7Ci0gICAgICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9
IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAgICAgIE5QVVRG
OCogdGFyZ2V0U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOwot
ICAgICAgICAgICAgYnJvd3Nlci0+Z2V0dXJsKG9iai0+bnBwLCB1cmxTdHJpbmcsIHRhcmdldFN0
cmluZyk7Ci0gICAgICAgICAgICBmcmVlKHVybFN0cmluZyk7Ci0gICAgICAgICAgICBmcmVlKHRh
cmdldFN0cmluZyk7Ci0KLSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJnQ291bnQgPT0g
MSAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pKSB7Ci0gICAgICAgICAgICBOUFVURjgq
IHVybFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAg
ICAgICAgIGJyb3dzZXItPmdldHVybChvYmotPm5wcCwgdXJsU3RyaW5nLCAwKTsKLSAgICAgICAg
ICAgIGZyZWUodXJsU3RyaW5nKTsKK3N0YXRpYyBOUElkZW50aWZpZXIgdmFyaWFudFRvSWRlbnRp
ZmllcihOUFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBpZiAoTlBWQVJJQU5UX0lTX1NUUklORyh2
YXJpYW50KSkKKyAgICAgICAgcmV0dXJuIHN0cmluZ1ZhcmlhbnRUb0lkZW50aWZpZXIodmFyaWFu
dCk7CisgICAgZWxzZSBpZiAoTlBWQVJJQU5UX0lTX0lOVDMyKHZhcmlhbnQpKQorICAgICAgICBy
ZXR1cm4gaW50MzJWYXJpYW50VG9JZGVudGlmaWVyKHZhcmlhbnQpOworICAgIGVsc2UgaWYgKE5Q
VkFSSUFOVF9JU19ET1VCTEUodmFyaWFudCkpCisgICAgICAgIHJldHVybiBkb3VibGVWYXJpYW50
VG9JZGVudGlmaWVyKHZhcmlhbnQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCB0
ZXN0SWRlbnRpZmllclRvU3RyaW5nKFBsdWdpbk9iamVjdCosIGNvbnN0IE5QVmFyaWFudCogYXJn
cywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmdD
b3VudCAhPSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgTlBJZGVudGlmaWVyIGlkZW50
aWZpZXIgPSB2YXJpYW50VG9JZGVudGlmaWVyKGFyZ3NbMF0pOworICAgIGlmICghaWRlbnRpZmll
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE5QVVRGOCogdXRmOFN0cmluZyA9IGJyb3dz
ZXItPnV0Zjhmcm9taWRlbnRpZmllcihpZGVudGlmaWVyKTsKKyAgICBpZiAoIXV0ZjhTdHJpbmcp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTVFJJTkdaX1RPX05QVkFSSUFOVCh1dGY4U3Ry
aW5nLCAqcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdGVzdElk
ZW50aWZpZXJUb0ludChQbHVnaW5PYmplY3QqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQz
Ml90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJnQ291bnQgIT0g
MSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE5QSWRlbnRpZmllciBpZGVudGlmaWVyID0g
dmFyaWFudFRvSWRlbnRpZmllcihhcmdzWzBdKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQzMiBpbnRlZ2VyID0gYnJvd3Nlci0+aW50ZnJvbWlk
ZW50aWZpZXIoaWRlbnRpZmllcik7CisgICAgSU5UMzJfVE9fTlBWQVJJQU5UKGludGVnZXIsICpy
ZXN1bHQpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCB0ZXN0Q2FsbGJhY2so
UGx1Z2luT2JqZWN0KiBvYmosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291
bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmdDb3VudCA9PSAwIHx8ICFOUFZB
UklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBO
UE9iamVjdCogd2luZG93U2NyaXB0T2JqZWN0OworICAgIGJyb3dzZXItPmdldHZhbHVlKG9iai0+
bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dTY3JpcHRPYmplY3QpOworCisgICAgTlBV
VEY4KiBjYWxsYmFja1N0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBd
KTsKKyAgICBOUElkZW50aWZpZXIgY2FsbGJhY2tJZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0c3Ry
aW5naWRlbnRpZmllcihjYWxsYmFja1N0cmluZyk7CisgICAgZnJlZShjYWxsYmFja1N0cmluZyk7
CisKKyAgICBOUFZhcmlhbnQgYnJvd3NlclJlc3VsdDsKKyAgICBicm93c2VyLT5pbnZva2Uob2Jq
LT5ucHAsIHdpbmRvd1NjcmlwdE9iamVjdCwgY2FsbGJhY2tJZGVudGlmaWVyLCAwLCAwLCAmYnJv
d3NlclJlc3VsdCk7CisgICAgYnJvd3Nlci0+cmVsZWFzZXZhcmlhbnR2YWx1ZSgmYnJvd3NlclJl
c3VsdCk7CisKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIGJvb2wgZ2V0VVJMKFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZh
cmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBpZiAoYXJnQ291bnQgPT0gMiAmJiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMF0pICYmIE5Q
VkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkpIHsKKyAgICAgICAgTlBVVEY4KiB1cmxTdHJpbmcg
PSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1swXSk7CisgICAgICAgIE5QVVRGOCog
dGFyZ2V0U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQoJmFyZ3NbMV0pOworICAg
ICAgICBicm93c2VyLT5nZXR1cmwob2JqLT5ucHAsIHVybFN0cmluZywgdGFyZ2V0U3RyaW5nKTsK
KyAgICAgICAgZnJlZSh1cmxTdHJpbmcpOworICAgICAgICBmcmVlKHRhcmdldFN0cmluZyk7CiAK
LSAgICAgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9k
SWRlbnRpZmllcnNbSURfUkVNT1ZFX0RFRkFVTFRfTUVUSE9EXSkgewotICAgICAgICBwbHVnaW5D
bGFzcy5pbnZva2VEZWZhdWx0ID0gMDsKICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5N
ZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0RPTV9BQ0NFU1NdKSB7Ci0gICAgICAgIHRlc3RET01B
Y2Nlc3Mob2JqKTsKKyAgICB9IGVsc2UgaWYgKGFyZ0NvdW50ID09IDEgJiYgTlBWQVJJQU5UX0lT
X1NUUklORyhhcmdzWzBdKSkgeworICAgICAgICBOUFVURjgqIHVybFN0cmluZyA9IGNyZWF0ZUNT
dHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsKKyAgICAgICAgYnJvd3Nlci0+Z2V0dXJsKG9i
ai0+bnBwLCB1cmxTdHJpbmcsIDApOworICAgICAgICBmcmVlKHVybFN0cmluZyk7CisKICAgICAg
ICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVF9V
UkxfTk9USUZZXSkgewotICAgICAgICBpZiAoYXJnQ291bnQgPT0gMwotICAgICAgICAgICYmIE5Q
VkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkKLSAgICAgICAgICAmJiAoTlBWQVJJQU5UX0lTX1NU
UklORyhhcmdzWzFdKSB8fCBOUFZBUklBTlRfSVNfTlVMTChhcmdzWzFdKSkKLSAgICAgICAgICAm
JiBOUFZBUklBTlRfSVNfU1RSSU5HKGFyZ3NbMl0pKSB7Ci0gICAgICAgICAgICBOUFVURjgqIHVy
bFN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzBdKTsKLSAgICAgICAg
ICAgIE5QVVRGOCogdGFyZ2V0U3RyaW5nID0gKE5QVkFSSUFOVF9JU19TVFJJTkcoYXJnc1sxXSkg
PyBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1sxXSkgOiBOVUxMKTsKLSAgICAgICAg
ICAgIE5QVVRGOCogY2FsbGJhY2tTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgm
YXJnc1syXSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5QSWRlbnRpZmllciBjYWxsYmFj
a0lkZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlmaWVyKGNhbGxiYWNrU3RyaW5n
KTsKLSAgICAgICAgICAgIGJyb3dzZXItPmdldHVybG5vdGlmeShvYmotPm5wcCwgdXJsU3RyaW5n
LCB0YXJnZXRTdHJpbmcsIGNhbGxiYWNrSWRlbnRpZmllcik7Ci0KLSAgICAgICAgICAgIGZyZWUo
dXJsU3RyaW5nKTsKLSAgICAgICAgICAgIGZyZWUodGFyZ2V0U3RyaW5nKTsKLSAgICAgICAgICAg
IGZyZWUoY2FsbGJhY2tTdHJpbmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWT0lEX1RP
X05QVkFSSUFOVCgqcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1Rf
SU5WT0tFX0RFRkFVTFRdICYmIE5QVkFSSUFOVF9JU19PQkpFQ1QoYXJnc1swXSkpIHsKLSAgICAg
ICAgTlBPYmplY3QgKmNhbGxiYWNrID0gTlBWQVJJQU5UX1RPX09CSkVDVChhcmdzWzBdKTsKLSAg
ICAgICAgCi0gICAgICAgIE5QVmFyaWFudCBhcmdzWzFdOwotICAgICAgICBOUFZhcmlhbnQgYnJv
d3NlclJlc3VsdDsKLSAgICAgICAgCi0gICAgICAgIFNUUklOR1pfVE9fTlBWQVJJQU5UKCJ0ZXN0
IiwgYXJnc1swXSk7Ci0gICAgICAgIGJvb2wgcmV0dmFsID0gYnJvd3Nlci0+aW52b2tlRGVmYXVs
dChvYmotPm5wcCwgY2FsbGJhY2ssIGFyZ3MsIDEsICZicm93c2VyUmVzdWx0KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChyZXR2YWwpCisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGJvb2wgcmVtb3ZlRGVmYXVsdE1ldGhvZChQbHVnaW5PYmplY3QqLCBjb25zdCBOUFZhcmlh
bnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBw
bHVnaW5DbGFzcy5pbnZva2VEZWZhdWx0ID0gMDsKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVz
dWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZ2V0VVJMTm90aWZ5KFBs
dWdpbk9iamVjdCogb2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50
LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpZiAoYXJnQ291bnQgIT0gMyB8fCAhTlBWQVJJ
QU5UX0lTX1NUUklORyhhcmdzWzBdKQorICAgICAgICB8fCAoIU5QVkFSSUFOVF9JU19TVFJJTkco
YXJnc1sxXSkgJiYgIU5QVkFSSUFOVF9JU19OVUxMKGFyZ3NbMV0pKQorICAgICAgICB8fCAhTlBW
QVJJQU5UX0lTX1NUUklORyhhcmdzWzJdKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
TlBVVEY4KiB1cmxTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1swXSk7
CisgICAgTlBVVEY4KiB0YXJnZXRTdHJpbmcgPSAoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFd
KSA/IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzWzFdKSA6IE5VTEwpOworICAgIE5Q
VVRGOCogY2FsbGJhY2tTdHJpbmcgPSBjcmVhdGVDU3RyaW5nRnJvbU5QVmFyaWFudCgmYXJnc1sy
XSk7CisKKyAgICBOUElkZW50aWZpZXIgY2FsbGJhY2tJZGVudGlmaWVyID0gYnJvd3Nlci0+Z2V0
c3RyaW5naWRlbnRpZmllcihjYWxsYmFja1N0cmluZyk7CisgICAgYnJvd3Nlci0+Z2V0dXJsbm90
aWZ5KG9iai0+bnBwLCB1cmxTdHJpbmcsIHRhcmdldFN0cmluZywgY2FsbGJhY2tJZGVudGlmaWVy
KTsKKworICAgIGZyZWUodXJsU3RyaW5nKTsKKyAgICBmcmVlKHRhcmdldFN0cmluZyk7CisgICAg
ZnJlZShjYWxsYmFja1N0cmluZyk7CisKKyAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgdGVzdEludm9rZURlZmF1bHQoUGx1
Z2luT2JqZWN0KiBvYmosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQs
IE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmICghTlBWQVJJQU5UX0lTX09CSkVDVChhcmdz
WzBdKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTlBPYmplY3QgKmNhbGxiYWNrID0g
TlBWQVJJQU5UX1RPX09CSkVDVChhcmdzWzBdKTsKKworICAgIE5QVmFyaWFudCBpbnZva2VBcmdz
WzFdOworICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0OworCisgICAgU1RSSU5HWl9UT19OUFZB
UklBTlQoInRlc3QiLCBpbnZva2VBcmdzWzBdKTsKKyAgICBib29sIHJldHZhbCA9IGJyb3dzZXIt
Pmludm9rZURlZmF1bHQob2JqLT5ucHAsIGNhbGxiYWNrLCBpbnZva2VBcmdzLCAxLCAmYnJvd3Nl
clJlc3VsdCk7CisKKyAgICBpZiAocmV0dmFsKQorICAgICAgICBicm93c2VyLT5yZWxlYXNldmFy
aWFudHZhbHVlKCZicm93c2VyUmVzdWx0KTsKKworICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKHJl
dHZhbCwgKnJlc3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGRlc3Ry
b3lTdHJlYW0oUGx1Z2luT2JqZWN0KiBvYmosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMy
X3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIE5QRXJyb3IgbnBFcnJvciA9
IGJyb3dzZXItPmRlc3Ryb3lzdHJlYW0ob2JqLT5ucHAsIG9iai0+c3RyZWFtLCBOUFJFU19VU0VS
X0JSRUFLKTsKKyAgICBJTlQzMl9UT19OUFZBUklBTlQobnBFcnJvciwgKnJlc3VsdCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRlc3RFbnVtZXJhdGUoUGx1Z2luT2JqZWN0
KiBvYmosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQoreworICAgIGlmIChhcmdDb3VudCAhPSAyIHx8ICFOUFZBUklBTlRfSVNfT0JK
RUNUKGFyZ3NbMF0pIHx8ICFOUFZBUklBTlRfSVNfT0JKRUNUKGFyZ3NbMV0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCBjb3VudDsKKyAgICBOUElkZW50aWZpZXIqIGlk
ZW50aWZpZXJzOworICAgIGlmIChicm93c2VyLT5lbnVtZXJhdGUob2JqLT5ucHAsIE5QVkFSSUFO
VF9UT19PQkpFQ1QoYXJnc1swXSksICZpZGVudGlmaWVycywgJmNvdW50KSkgeworICAgICAgICBO
UE9iamVjdCogb3V0QXJyYXkgPSBOUFZBUklBTlRfVE9fT0JKRUNUKGFyZ3NbMV0pOworICAgICAg
ICBOUElkZW50aWZpZXIgcHVzaElkZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJpbmdpZGVudGlm
aWVyKCJwdXNoIik7CisKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgICAgIE5QVVRGOCogc3RyaW5nID0gYnJvd3Nlci0+dXRmOGZyb21pZGVu
dGlmaWVyKGlkZW50aWZpZXJzW2ldKTsKKworICAgICAgICAgICAgaWYgKCFzdHJpbmcpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIE5QVmFyaWFudCBhcmdzWzFdOwor
ICAgICAgICAgICAgU1RSSU5HWl9UT19OUFZBUklBTlQoc3RyaW5nLCBhcmdzWzBdKTsKKyAgICAg
ICAgICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0OworICAgICAgICAgICAgYnJvd3Nlci0+aW52
b2tlKG9iai0+bnBwLCBvdXRBcnJheSwgcHVzaElkZW50aWZpZXIsIGFyZ3MsIDEsICZicm93c2Vy
UmVzdWx0KTsKICAgICAgICAgICAgIGJyb3dzZXItPnJlbGVhc2V2YXJpYW50dmFsdWUoJmJyb3dz
ZXJSZXN1bHQpOwotICAgICAgICAKLSAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQocmV0dmFs
LCAqcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChuYW1lID09
IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfRU5VTUVSQVRFXSkgewotICAgICAgICBp
ZiAoYXJnQ291bnQgPT0gMiAmJiBOUFZBUklBTlRfSVNfT0JKRUNUKGFyZ3NbMF0pICYmIE5QVkFS
SUFOVF9JU19PQkpFQ1QoYXJnc1sxXSkpIHsKLSAgICAgICAgICAgIHVpbnQzMl90IGNvdW50OyAg
ICAgICAgICAgIAotICAgICAgICAgICAgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVyczsKLQotICAg
ICAgICAgICAgaWYgKGJyb3dzZXItPmVudW1lcmF0ZShvYmotPm5wcCwgTlBWQVJJQU5UX1RPX09C
SkVDVChhcmdzWzBdKSwgJmlkZW50aWZpZXJzLCAmY291bnQpKSB7Ci0gICAgICAgICAgICAgICAg
TlBPYmplY3QqIG91dEFycmF5ID0gTlBWQVJJQU5UX1RPX09CSkVDVChhcmdzWzFdKTsKLSAgICAg
ICAgICAgICAgICBOUElkZW50aWZpZXIgcHVzaElkZW50aWZpZXIgPSBicm93c2VyLT5nZXRzdHJp
bmdpZGVudGlmaWVyKCJwdXNoIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgTlBVVEY4KiBzdHJpbmcgPSBicm93c2VyLT51dGY4ZnJvbWlkZW50aWZpZXIoaWRlbnRpZmll
cnNbaV0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTlBWYXJpYW50
IGFyZ3NbMV07Ci0gICAgICAgICAgICAgICAgICAgIFNUUklOR1pfVE9fTlBWQVJJQU5UKHN0cmlu
ZywgYXJnc1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIE5QVmFyaWFudCBicm93c2VyUmVzdWx0
OwotICAgICAgICAgICAgICAgICAgICBicm93c2VyLT5pbnZva2Uob2JqLT5ucHAsIG91dEFycmF5
LCBwdXNoSWRlbnRpZmllciwgYXJncywgMSwgJmJyb3dzZXJSZXN1bHQpOwotICAgICAgICAgICAg
ICAgICAgICBicm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZicm93c2VyUmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJvd3Nlci0+bWVtZnJlZShzdHJpbmcpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicm93c2VyLT5tZW1mcmVl
KGlkZW50aWZpZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Vk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGJyb3dzZXItPm1lbWZyZWUoc3RyaW5nKTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9ERVNU
Uk9ZX1NUUkVBTV0pIHsKLSAgICAgICAgTlBFcnJvciBucEVycm9yID0gYnJvd3Nlci0+ZGVzdHJv
eXN0cmVhbShvYmotPm5wcCwgb2JqLT5zdHJlYW0sIE5QUkVTX1VTRVJfQlJFQUspOwotICAgICAg
ICBJTlQzMl9UT19OUFZBUklBTlQobnBFcnJvciwgKnJlc3VsdCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOyAgICAgICAgCi0gICAgfSBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZp
ZXJzW0lEX1RFU1RfR0VUSU5USURFTlRJRklFUl0pIHsKLSAgICAgICAgaWYgKGFyZ0NvdW50ID09
IDEgJiYgTlBWQVJJQU5UX0lTX0RPVUJMRShhcmdzWzBdKSkgewotICAgICAgICAgICAgTlBJZGVu
dGlmaWVyIGlkZW50aWZpZXIgPSBicm93c2VyLT5nZXRpbnRpZGVudGlmaWVyKChpbnQpTlBWQVJJ
QU5UX1RPX0RPVUJMRShhcmdzWzBdKSk7Ci0gICAgICAgICAgICBJTlQzMl9UT19OUFZBUklBTlQo
KGludDMyKWlkZW50aWZpZXIsICpyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNb
SURfVEVTVF9FVkFMVUFURV0gJiYgCi0gICAgICAgICAgICAgICBhcmdDb3VudCA9PSAxICYmIE5Q
VkFSSUFOVF9JU19TVFJJTkcoYXJnc1swXSkpIHsKLSAgICAgICAgTlBPYmplY3QgKndpbmRvd1Nj
cmlwdE9iamVjdDsKLSAgICAgICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5k
b3dOUE9iamVjdCwgJndpbmRvd1NjcmlwdE9iamVjdCk7Ci0KLSAgICAgICAgTlBTdHJpbmcgcyA9
IE5QVkFSSUFOVF9UT19TVFJJTkcoYXJnc1swXSk7Ci0gICAgICAgIAotICAgICAgICBib29sIHJl
dHZhbCA9IGJyb3dzZXItPmV2YWx1YXRlKG9iai0+bnBwLCB3aW5kb3dTY3JpcHRPYmplY3QsICZz
LCByZXN1bHQpOwotICAgICAgICBicm93c2VyLT5yZWxlYXNlb2JqZWN0KHdpbmRvd1NjcmlwdE9i
amVjdCk7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfSBlbHNlIGlmIChuYW1lID09IHBs
dWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfR0VUX1BST1BFUlRZXSAmJgotICAgICAgICAg
ICAgICAgYXJnQ291bnQgPiAwKSB7Ci0gICAgICAgIE5QT2JqZWN0ICpvYmplY3Q7Ci0gICAgICAg
IGJyb3dzZXItPmdldHZhbHVlKG9iai0+bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZvYmplY3Qp
OwotCi0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7Ci0g
ICAgICAgICAgICBhc3NlcnQoTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzW2ldKSk7Ci0gICAgICAg
ICAgICBOUFVURjgqIHByb3BlcnR5U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQo
JmFyZ3NbaV0pOwotICAgICAgICAgICAgTlBJZGVudGlmaWVyIHByb3BlcnR5SWRlbnRpZmllciA9
IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIocHJvcGVydHlTdHJpbmcpOwotICAgICAgICAg
ICAgZnJlZShwcm9wZXJ0eVN0cmluZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5QVmFy
aWFudCB2YXJpYW50OwotICAgICAgICAgICAgYm9vbCByZXR2YWwgPSBicm93c2VyLT5nZXRwcm9w
ZXJ0eShvYmotPm5wcCwgb2JqZWN0LCBwcm9wZXJ0eUlkZW50aWZpZXIsICZ2YXJpYW50KTsKLSAg
ICAgICAgICAgIGJyb3dzZXItPnJlbGVhc2VvYmplY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKCFyZXR2YWwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpICsgMSA8IGFyZ0NvdW50KSB7Ci0gICAgICAgICAgICAg
ICAgYXNzZXJ0KE5QVkFSSUFOVF9JU19PQkpFQ1QodmFyaWFudCkpOwotICAgICAgICAgICAgICAg
IG9iamVjdCA9IE5QVkFSSUFOVF9UT19PQkpFQ1QodmFyaWFudCk7Ci0gICAgICAgICAgICB9IGVs
c2UgeyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAqcmVzdWx0ID0gdmFyaWFudDsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisKKyAgICAgICAg
YnJvd3Nlci0+bWVtZnJlZShpZGVudGlmaWVycyk7CisgICAgfQorCisgICAgVk9JRF9UT19OUFZB
UklBTlQoKnJlc3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHRlc3RH
ZXRJbnRJZGVudGlmaWVyKFBsdWdpbk9iamVjdCosIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWlu
dDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIGlmIChhcmdDb3VudCAh
PSAxIHx8ICFOUFZBUklBTlRfSVNfRE9VQkxFKGFyZ3NbMF0pKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBOUElkZW50aWZpZXIgaWRlbnRpZmllciA9IGJyb3dzZXItPmdldGludGlkZW50
aWZpZXIoKGludClOUFZBUklBTlRfVE9fRE9VQkxFKGFyZ3NbMF0pKTsKKyAgICBJTlQzMl9UT19O
UFZBUklBTlQoKGludDMyKWlkZW50aWZpZXIsICpyZXN1bHQpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCB0ZXN0R2V0UHJvcGVydHkoUGx1Z2luT2JqZWN0KiBvYmosIGNvbnN0
IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQor
eworICAgIGlmIChhcmdDb3VudCA+IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRfUFJPUEVS
VFlfUkVUVVJOX1ZBTFVFXSAmJgotICAgICAgICBhcmdDb3VudCA9PSAyICYmIE5QVkFSSUFOVF9J
U19PQkpFQ1QoYXJnc1swXSkgJiYgTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSkgewotICAg
ICAgICBOUFVURjgqIHByb3BlcnR5U3RyaW5nID0gY3JlYXRlQ1N0cmluZ0Zyb21OUFZhcmlhbnQo
JmFyZ3NbMV0pOworCisgICAgTlBPYmplY3QgKm9iamVjdDsKKyAgICBicm93c2VyLT5nZXR2YWx1
ZShvYmotPm5wcCwgTlBOVldpbmRvd05QT2JqZWN0LCAmb2JqZWN0KTsKKworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7CisgICAgICAgIGFzc2VydChOUFZBUklB
TlRfSVNfU1RSSU5HKGFyZ3NbaV0pKTsKKyAgICAgICAgTlBVVEY4KiBwcm9wZXJ0eVN0cmluZyA9
IGNyZWF0ZUNTdHJpbmdGcm9tTlBWYXJpYW50KCZhcmdzW2ldKTsKICAgICAgICAgTlBJZGVudGlm
aWVyIHByb3BlcnR5SWRlbnRpZmllciA9IGJyb3dzZXItPmdldHN0cmluZ2lkZW50aWZpZXIocHJv
cGVydHlTdHJpbmcpOwogICAgICAgICBmcmVlKHByb3BlcnR5U3RyaW5nKTsKIAogICAgICAgICBO
UFZhcmlhbnQgdmFyaWFudDsKLSAgICAgICAgYm9vbCByZXR2YWwgPSBicm93c2VyLT5nZXRwcm9w
ZXJ0eShvYmotPm5wcCwgTlBWQVJJQU5UX1RPX09CSkVDVChhcmdzWzBdKSwgcHJvcGVydHlJZGVu
dGlmaWVyLCAmdmFyaWFudCk7Ci0gICAgICAgIGlmIChyZXR2YWwpCi0gICAgICAgICAgICBicm93
c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZ2YXJpYW50KTsKKyAgICAgICAgYm9vbCByZXR2YWwg
PSBicm93c2VyLT5nZXRwcm9wZXJ0eShvYmotPm5wcCwgb2JqZWN0LCBwcm9wZXJ0eUlkZW50aWZp
ZXIsICZ2YXJpYW50KTsKKyAgICAgICAgYnJvd3Nlci0+cmVsZWFzZW9iamVjdChvYmplY3QpOwog
Ci0gICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKHJldHZhbCwgKnJlc3VsdCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoIXJldHZhbCkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGlmIChpICsgMSA8IGFyZ0NvdW50KSB7CisgICAgICAgICAgICBhc3NlcnQoTlBW
QVJJQU5UX0lTX09CSkVDVCh2YXJpYW50KSk7CisgICAgICAgICAgICBvYmplY3QgPSBOUFZBUklB
TlRfVE9fT0JKRUNUKHZhcmlhbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnJl
c3VsdCA9IHZhcmlhbnQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RhdGljIGJvb2wgdGVzdEV2YWx1YXRlKFBsdWdpbk9iamVjdCogb2JqLCBjb25zdCBO
UFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sK
KyAgICBpZiAoYXJnQ291bnQgIT0gMSB8fCAhTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzBdKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE5QT2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3Q7
CisgICAgYnJvd3Nlci0+Z2V0dmFsdWUob2JqLT5ucHAsIE5QTlZXaW5kb3dOUE9iamVjdCwgJndp
bmRvd1NjcmlwdE9iamVjdCk7CisKKyAgICBOUFN0cmluZyBzID0gTlBWQVJJQU5UX1RPX1NUUklO
RyhhcmdzWzBdKTsKKworICAgIGJvb2wgcmV0dmFsID0gYnJvd3Nlci0+ZXZhbHVhdGUob2JqLT5u
cHAsIHdpbmRvd1NjcmlwdE9iamVjdCwgJnMsIHJlc3VsdCk7CisgICAgYnJvd3Nlci0+cmVsZWFz
ZW9iamVjdCh3aW5kb3dTY3JpcHRPYmplY3QpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK3N0
YXRpYyBib29sIHRlc3RHZXRQcm9wZXJ0eVJldHVyblZhbHVlKFBsdWdpbk9iamVjdCogb2JqLCBj
b25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBpZiAoYXJnQ291bnQgIT0gMiB8fCAhTlBWQVJJQU5UX0lTX09CSkVDVChhcmdz
WzBdKSB8fCAhTlBWQVJJQU5UX0lTX1NUUklORyhhcmdzWzFdKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgTlBVVEY4KiBwcm9wZXJ0eVN0cmluZyA9IGNyZWF0ZUNTdHJpbmdGcm9tTlBW
YXJpYW50KCZhcmdzWzFdKTsKKyAgICBOUElkZW50aWZpZXIgcHJvcGVydHlJZGVudGlmaWVyID0g
YnJvd3Nlci0+Z2V0c3RyaW5naWRlbnRpZmllcihwcm9wZXJ0eVN0cmluZyk7CisgICAgZnJlZShw
cm9wZXJ0eVN0cmluZyk7CisKKyAgICBOUFZhcmlhbnQgdmFyaWFudDsKKyAgICBib29sIHJldHZh
bCA9IGJyb3dzZXItPmdldHByb3BlcnR5KG9iai0+bnBwLCBOUFZBUklBTlRfVE9fT0JKRUNUKGFy
Z3NbMF0pLCBwcm9wZXJ0eUlkZW50aWZpZXIsICZ2YXJpYW50KTsKKyAgICBpZiAocmV0dmFsKQor
ICAgICAgICBicm93c2VyLT5yZWxlYXNldmFyaWFudHZhbHVlKCZ2YXJpYW50KTsKKworICAgIEJP
T0xFQU5fVE9fTlBWQVJJQU5UKHJldHZhbCwgKnJlc3VsdCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBib29sIHBsdWdpbkludm9rZShOUE9iamVjdCogaGVhZGVyLCBOUElkZW50aWZp
ZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdDb3VudCwgTlBWYXJp
YW50KiByZXN1bHQpCit7CisgICAgUGx1Z2luT2JqZWN0KiBwbHVnaW4gPSByZWludGVycHJldF9j
YXN0PFBsdWdpbk9iamVjdCo+KGhlYWRlcik7CisgICAgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9k
SWRlbnRpZmllcnNbSURfVEVTVF9DQUxMQkFDS19NRVRIT0RdKQorICAgICAgICByZXR1cm4gdGVz
dENhbGxiYWNrKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAo
bmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0dFVFVSTF0pCisgICAgICAg
IHJldHVybiBnZXRVUkwocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNl
IGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1JFTU9WRV9ERUZBVUxUX01F
VEhPRF0pCisgICAgICAgIHJldHVybiByZW1vdmVEZWZhdWx0TWV0aG9kKHBsdWdpbiwgYXJncywg
YXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAobmFtZSA9PSBwbHVnaW5NZXRob2RJZGVu
dGlmaWVyc1tJRF9URVNUX0RPTV9BQ0NFU1NdKQorICAgICAgICByZXR1cm4gdGVzdERPTUFjY2Vz
cyhwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgIGVsc2UgaWYgKG5hbWUgPT0g
cGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRfVVJMX05PVElGWV0pCisgICAgICAg
IHJldHVybiBnZXRVUkxOb3RpZnkocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAg
ICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfSU5WT0tF
X0RFRkFVTFRdKQorICAgICAgICByZXR1cm4gdGVzdEludm9rZURlZmF1bHQocGx1Z2luLCBhcmdz
LCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElk
ZW50aWZpZXJzW0lEX1RFU1RfRU5VTUVSQVRFXSkKKyAgICAgICAgcmV0dXJuIHRlc3RFbnVtZXJh
dGUocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09
IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX0RFU1RST1lfU1RSRUFNXSkKKyAgICAgICAgcmV0
dXJuIGRlc3Ryb3lTdHJlYW0ocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBl
bHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfR0VUSU5USURF
TlRJRklFUl0pCisgICAgICAgIHJldHVybiB0ZXN0R2V0SW50SWRlbnRpZmllcihwbHVnaW4sIGFy
Z3MsIGFyZ0NvdW50LCByZXN1bHQpOworICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9k
SWRlbnRpZmllcnNbSURfVEVTVF9FVkFMVUFURV0pCisgICAgICAgIHJldHVybiB0ZXN0RXZhbHVh
dGUocGx1Z2luLCBhcmdzLCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09
IHBsdWdpbk1ldGhvZElkZW50aWZpZXJzW0lEX1RFU1RfR0VUX1BST1BFUlRZXSkKKyAgICAgICAg
cmV0dXJuIHRlc3RHZXRQcm9wZXJ0eShwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOwor
ICAgIGVsc2UgaWYgKG5hbWUgPT0gcGx1Z2luTWV0aG9kSWRlbnRpZmllcnNbSURfVEVTVF9HRVRf
UFJPUEVSVFlfUkVUVVJOX1ZBTFVFXSkKKyAgICAgICAgcmV0dXJuIHRlc3RHZXRQcm9wZXJ0eVJl
dHVyblZhbHVlKHBsdWdpbiwgYXJncywgYXJnQ291bnQsIHJlc3VsdCk7CisgICAgZWxzZSBpZiAo
bmFtZSA9PSBwbHVnaW5NZXRob2RJZGVudGlmaWVyc1tJRF9URVNUX0lERU5USUZJRVJfVE9fU1RS
SU5HXSkKKyAgICAgICAgcmV0dXJuIHRlc3RJZGVudGlmaWVyVG9TdHJpbmcocGx1Z2luLCBhcmdz
LCBhcmdDb3VudCwgcmVzdWx0KTsKKyAgICBlbHNlIGlmIChuYW1lID09IHBsdWdpbk1ldGhvZElk
ZW50aWZpZXJzW0lEX1RFU1RfSURFTlRJRklFUl9UT19JTlRdKQorICAgICAgICByZXR1cm4gdGVz
dElkZW50aWZpZXJUb0ludChwbHVnaW4sIGFyZ3MsIGFyZ0NvdW50LCByZXN1bHQpOworCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBwbHVnaW5JbnZva2VEZWZhdWx0KE5QT2Jq
ZWN0ICpvYmosIGNvbnN0IE5QVmFyaWFudCAqYXJncywgdWludDMyX3QgYXJnQ291bnQsIE5QVmFy
aWFudCAqcmVzdWx0KQorc3RhdGljIGJvb2wgcGx1Z2luSW52b2tlRGVmYXVsdChOUE9iamVjdCog
b2JqLCBjb25zdCBOUFZhcmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ0NvdW50LCBOUFZhcmlhbnQq
IHJlc3VsdCkKIHsKICAgICBJTlQzMl9UT19OUFZBUklBTlQoMSwgKnJlc3VsdCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIHBsdWdpbkludmFsaWRhdGUoTlBPYmplY3QgKm9i
aikKK3N0YXRpYyB2b2lkIHBsdWdpbkludmFsaWRhdGUoTlBPYmplY3QqIG9iaikKIHsKIH0KIAog
c3RhdGljIE5QT2JqZWN0ICpwbHVnaW5BbGxvY2F0ZShOUFAgbnBwLCBOUENsYXNzICp0aGVDbGFz
cykKIHsKLSAgICBQbHVnaW5PYmplY3QgKm5ld0luc3RhbmNlID0gKFBsdWdpbk9iamVjdCopbWFs
bG9jKHNpemVvZihQbHVnaW5PYmplY3QpKTsKLSAgICAKKyAgICBQbHVnaW5PYmplY3QqIG5ld0lu
c3RhbmNlID0gKFBsdWdpbk9iamVjdCopbWFsbG9jKHNpemVvZihQbHVnaW5PYmplY3QpKTsKKwog
ICAgIGlmICghaWRlbnRpZmllcnNJbml0aWFsaXplZCkgewogICAgICAgICBpZGVudGlmaWVyc0lu
aXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgaW5pdGlhbGl6ZUlkZW50aWZpZXJzKCk7CkBAIC0z
OTUsMzggKzUzMiwzNiBAQCBzdGF0aWMgTlBPYmplY3QgKnBsdWdpbkFsbG9jYXRlKE5QUCBucHAs
IE5QQ2xhc3MgKnRoZUNsYXNzKQogICAgIG5ld0luc3RhbmNlLT5sb2dTZXRXaW5kb3cgPSBGQUxT
RTsKICAgICBuZXdJbnN0YW5jZS0+cmV0dXJuRXJyb3JGcm9tTmV3U3RyZWFtID0gRkFMU0U7CiAg
ICAgbmV3SW5zdGFuY2UtPnN0cmVhbSA9IDA7Ci0gICAgCisKICAgICBuZXdJbnN0YW5jZS0+Zmly
c3RVcmwgPSBOVUxMOwogICAgIG5ld0luc3RhbmNlLT5maXJzdEhlYWRlcnMgPSBOVUxMOwogICAg
IG5ld0luc3RhbmNlLT5sYXN0VXJsID0gTlVMTDsKICAgICBuZXdJbnN0YW5jZS0+bGFzdEhlYWRl
cnMgPSBOVUxMOwotICAgIAotICAgIHJldHVybiAoTlBPYmplY3QgKiluZXdJbnN0YW5jZTsKKwor
ICAgIHJldHVybiAoTlBPYmplY3QqKW5ld0luc3RhbmNlOwogfQogCi1zdGF0aWMgdm9pZCBwbHVn
aW5EZWFsbG9jYXRlKE5QT2JqZWN0ICpoZWFkZXIpIAorc3RhdGljIHZvaWQgcGx1Z2luRGVhbGxv
Y2F0ZShOUE9iamVjdCogaGVhZGVyKQogewotICAgIFBsdWdpbk9iamVjdCogb2JqID0gKFBsdWdp
bk9iamVjdCopaGVhZGVyOwotICAgIAotICAgIGJyb3dzZXItPnJlbGVhc2VvYmplY3Qob2JqLT50
ZXN0T2JqZWN0KTsKLQotICAgIGZyZWUob2JqLT5maXJzdFVybCk7Ci0gICAgZnJlZShvYmotPmZp
cnN0SGVhZGVycyk7Ci0gICAgZnJlZShvYmotPmxhc3RVcmwpOwotICAgIGZyZWUob2JqLT5sYXN0
SGVhZGVycyk7Ci0KLSAgICBmcmVlKG9iaik7CisgICAgUGx1Z2luT2JqZWN0KiBwbHVnaW4gPSBy
ZWludGVycHJldF9jYXN0PFBsdWdpbk9iamVjdCo+KGhlYWRlcik7CisgICAgYnJvd3Nlci0+cmVs
ZWFzZW9iamVjdChwbHVnaW4tPnRlc3RPYmplY3QpOworCisgICAgZnJlZShwbHVnaW4tPmZpcnN0
VXJsKTsKKyAgICBmcmVlKHBsdWdpbi0+Zmlyc3RIZWFkZXJzKTsKKyAgICBmcmVlKHBsdWdpbi0+
bGFzdFVybCk7CisgICAgZnJlZShwbHVnaW4tPmxhc3RIZWFkZXJzKTsKKyAgICBmcmVlKHBsdWdp
bik7CiB9CiAKIHZvaWQgaGFuZGxlQ2FsbGJhY2soUGx1Z2luT2JqZWN0KiBvYmplY3QsIGNvbnN0
IGNoYXIgKnVybCwgTlBSZWFzb24gcmVhc29uLCB2b2lkICpub3RpZnlEYXRhKQogewogICAgIGFz
c2VydChvYmplY3QpOwotICAgIAorCiAgICAgTlBWYXJpYW50IGFyZ3NbMl07Ci0gICAgCisKICAg
ICBOUE9iamVjdCAqd2luZG93U2NyaXB0T2JqZWN0OwogICAgIGJyb3dzZXItPmdldHZhbHVlKG9i
amVjdC0+bnBwLCBOUE5WV2luZG93TlBPYmplY3QsICZ3aW5kb3dTY3JpcHRPYmplY3QpOwotICAg
IAorCiAgICAgTlBJZGVudGlmaWVyIGNhbGxiYWNrSWRlbnRpZmllciA9IG5vdGlmeURhdGE7CiAK
ICAgICBJTlQzMl9UT19OUFZBUklBTlQocmVhc29uLCBhcmdzWzBdKTsK
</data>
<flag name="review"
          id="8684"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>