<?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>92725</bug_id>
          
          <creation_ts>2012-07-31 01:11:46 -0700</creation_ts>
          <short_desc>IndexedDB: ObjectStoreMetaDataKey::m_metaDataType should use byte type</short_desc>
          <delta_ts>2012-08-01 22:59:21 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>0</everconfirmed>
          <reporter name="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>haraken</cc>
    
    <cc>jochen</cc>
    
    <cc>jsbell</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>682806</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 01:11:46 -0700</bug_when>
    <thetext>Use unsigned char instead of integer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682809</commentid>
    <comment_count>1</comment_count>
      <attachid>155461</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 01:15:44 -0700</bug_when>
    <thetext>Created attachment 155461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682817</commentid>
    <comment_count>2</comment_count>
      <attachid>155461</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-31 01:26:39 -0700</bug_when>
    <thetext>Comment on attachment 155461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155461&amp;action=review

Looks good.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests - Covered by existing tests.

Would you list up a couple of existing tests here?

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:1089
&gt; +    result-&gt;m_metaDataType = *p++;

Shall we implement decodeByte()? (For consistency with existing encodeByte().)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682829</commentid>
    <comment_count>3</comment_count>
      <attachid>155461</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 01:46:30 -0700</bug_when>
    <thetext>Comment on attachment 155461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155461&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        No new tests - Covered by existing tests.
&gt; 
&gt; Would you list up a couple of existing tests here?

All right. It`s in the encoding/decoding level of object store,I think most of the test cases could cover this.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:1089
&gt;&gt; +    result-&gt;m_metaDataType = *p++;
&gt; 
&gt; Shall we implement decodeByte()? (For consistency with existing encodeByte().)

Good suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683015</commentid>
    <comment_count>4</comment_count>
      <attachid>155461</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-31 07:22:26 -0700</bug_when>
    <thetext>Comment on attachment 155461
Patch

This looks like it will fail for existing stored data on disk.  Some back compat mechanism is necessary. 

I&apos;m on vacation at the moment. Please CC dgrogan and alecflett for feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683020</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-31 07:23:58 -0700</bug_when>
    <thetext>(Ah, they already are CC&apos;d. I&apos;m reading this on my phone, sorry.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683213</commentid>
    <comment_count>6</comment_count>
      <attachid>155461</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-31 09:54:18 -0700</bug_when>
    <thetext>Comment on attachment 155461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155461&amp;action=review

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:1089
&gt;&gt;&gt; +    result-&gt;m_metaDataType = *p++;
&gt;&gt; 
&gt;&gt; Shall we implement decodeByte()? (For consistency with existing encodeByte().)
&gt; 
&gt; Good suggestion.

For compatibility with existing databases, you can maybe detect here whether it&apos;s a byte or var int.  I don&apos;t know if that&apos;s bulletproof though.  Or you can look into doing a schema upgrade in IDBLevelDBBackingStore::setUpMetadata.  That might be slow.  Some experimentation might be needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683801</commentid>
    <comment_count>7</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 20:00:22 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 155461 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155461&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:1089
&gt; &gt;&gt;&gt; +    result-&gt;m_metaDataType = *p++;
&gt; &gt;&gt; 
&gt; &gt;&gt; Shall we implement decodeByte()? (For consistency with existing encodeByte().)
&gt; &gt; 
&gt; &gt; Good suggestion.
&gt; 
&gt; For compatibility with existing databases, you can maybe detect here whether it&apos;s a byte or var int.  I don&apos;t know if that&apos;s bulletproof though.  Or you can look into doing a schema upgrade in IDBLevelDBBackingStore::setUpMetadata.  That might be slow.  Some experimentation might be needed.

m_metaDataType is always less than 8, which is encoded by encodeVarInt() with only one byte. Also encodeByte() uses one byte to store the data with the same way. So could we think it would not fail for the existing data in disk?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683805</commentid>
    <comment_count>8</comment_count>
      <attachid>155461</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-31 20:12:42 -0700</bug_when>
    <thetext>Comment on attachment 155461
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155461&amp;action=review

You&apos;re right - the range of existing values that are used for the ObjectMetaDataType should encode identically for VarInt and Byte since they are &lt;= 127. So this should be safe. (A webkit_unit_test case could be added for that, validating that the encodings are the same for the current roster of values.) Removing my paranoid objection.

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:67
&gt; +//     The prefix is followed by a type byte, then a variable-length integer, and then another variable-length integer.

That should end with &quot;and then another type byte.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683915</commentid>
    <comment_count>9</comment_count>
      <attachid>155729</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 23:42:18 -0700</bug_when>
    <thetext>Created attachment 155729
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683918</commentid>
    <comment_count>10</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-07-31 23:44:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=155729) [details]
&gt; Patch

Updated the patch as your comments, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683923</commentid>
    <comment_count>11</comment_count>
      <attachid>155729</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-07-31 23:59:57 -0700</bug_when>
    <thetext>Comment on attachment 155729
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155729&amp;action=review

LGTM. If jsbell@ says OK, I&apos;m happy to r+ it.

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:180
&gt; +    ASSERT(p &lt; limit);
&gt; +    if (p &gt;= limit)

This looks strange. We don&apos;t need both. (Although some code in IDBLevelDBCoding.cpp already use both.)

If &apos;p &gt;= limit&apos; must not happen, please remove &apos;if (p &gt;= limit)&apos;. If it can happen, please remove ASSERT(p &lt; limit). (I think that removing ASSERT() looks reasonable in this case.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683975</commentid>
    <comment_count>12</comment_count>
      <attachid>155750</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-08-01 01:30:59 -0700</bug_when>
    <thetext>Created attachment 155750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684200</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-01 08:31:21 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 155729 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155729&amp;action=review
&gt; 
&gt; LGTM. If jsbell@ says OK, I&apos;m happy to r+ it.

I&apos;m going to build the Chromium tests locally with this patch first. Working on that now.
 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp:180
&gt; &gt; +    ASSERT(p &lt; limit);
&gt; &gt; +    if (p &gt;= limit)
&gt; 
&gt; This looks strange. We don&apos;t need both. (Although some code in IDBLevelDBCoding.cpp already use both.)
&gt; 
&gt; If &apos;p &gt;= limit&apos; must not happen, please remove &apos;if (p &gt;= limit)&apos;. If it can happen, please remove ASSERT(p &lt; limit). (I think that removing ASSERT() looks reasonable in this case.)

As an FYI:

Although much of this code predates me, I believe the intent of these redundant tests is to serve two different purposes. The ASSERTs are present to catch errors during development, e.g. when we&apos;re refactoring code, modifying constants, etc. The non-debug tests are in there to catch runtime errors due to corrupt data (e.g. actual on-disk corruption, uncaught bugs that write bad data, etc). 

I agree that&apos;s not a very good style, and I&apos;m fine with leaving out the ASSERT here, as the error handling in this file needs a cleanup pass. We should probably switch the ASSERTs over to something like a custom macro that does ASSERT in Debug but also does a LOG_ERROR and stats reporting in Release builds, in addition to returning the error code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684230</commentid>
    <comment_count>14</comment_count>
      <attachid>155750</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-01 09:22:59 -0700</bug_when>
    <thetext>Comment on attachment 155750
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155750&amp;action=review

LGTM with one change suggestion.

Also, I think there should be a Source/WebKit/chromium/ChangeLog entry. Either just add it manually, or remove the Source/WebCore/ChangeLog entry, run webkit-patch prepare 92725, then re-apply the Source/WebCore/ChangeLog entry (I don&apos;t know if there&apos;s a faster way to prepare just the missing ChangeLogs)

&gt; Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp:93
&gt; +#ifdef NDEBUG

These NDEBUG guards should not be necessary here. 

We use them in the &quot;Int&quot; tests due to ASSERTs that guard against using data with the high bit set (since the methods are not correctly using signed/unsigned types), but wanted to ensure the correct behavior in the test. (I can dig up the bug number if desired, there was a long discussion.)

The new decodeByte function correctly takes an unsigned char, though, so it doesn&apos;t matter here.

&gt; Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp:708
&gt; +TEST(IDBLevelDBCodingTest, EncodeVarIntVSEncodeByteTest)

Thanks a bunch for adding this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684882</commentid>
    <comment_count>15</comment_count>
      <attachid>155949</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-08-01 19:07:40 -0700</bug_when>
    <thetext>Created attachment 155949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684885</commentid>
    <comment_count>16</comment_count>
      <attachid>155750</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-08-01 19:10:08 -0700</bug_when>
    <thetext>Comment on attachment 155750
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=155750&amp;action=review

&gt;&gt; Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp:93
&gt;&gt; +#ifdef NDEBUG
&gt; 
&gt; These NDEBUG guards should not be necessary here. 
&gt; 
&gt; We use them in the &quot;Int&quot; tests due to ASSERTs that guard against using data with the high bit set (since the methods are not correctly using signed/unsigned types), but wanted to ensure the correct behavior in the test. (I can dig up the bug number if desired, there was a long discussion.)
&gt; 
&gt; The new decodeByte function correctly takes an unsigned char, though, so it doesn&apos;t matter here.

Removed this one.

&gt;&gt; Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp:708
&gt;&gt; +TEST(IDBLevelDBCodingTest, EncodeVarIntVSEncodeByteTest)
&gt; 
&gt; Thanks a bunch for adding this.

Thanks for your review, updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684886</commentid>
    <comment_count>17</comment_count>
      <attachid>155949</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-01 19:10:43 -0700</bug_when>
    <thetext>Comment on attachment 155949
Patch

Looks OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684921</commentid>
    <comment_count>18</comment_count>
      <attachid>155949</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-01 20:08:27 -0700</bug_when>
    <thetext>Comment on attachment 155949
Patch

Clearing flags on attachment: 155949

Committed r124402: &lt;http://trac.webkit.org/changeset/124402&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684922</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-01 20:08:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684997</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-01 22:59:21 -0700</bug_when>
    <thetext>Chromium Android build fix landed in http://trac.webkit.org/changeset/124411.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155461</attachid>
            <date>2012-07-31 01:15:44 -0700</date>
            <delta_ts>2012-07-31 23:42:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92725-20120731162102.patch</filename>
            <type>text/plain</type>
            <size>4692</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMGFiNmZhM2IzZjQ0
NGRjYThjZWMzOTYxNzY2M2ZmMzlhMGU3NS4uYzgyMTYwYWM3Y2ZhNjM1YmVhMzNlNDAzMGI4OTA3
NmNiNDliYzc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIxIEBACiAyMDEyLTA3LTMxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgogCisgICAgICAgIEluZGV4ZWREQjog
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bV9tZXRhRGF0YVR5cGUgc2hvdWxkIHVzZSBieXRlIHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIC0gQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwOgorICAgICAgICAoSURCTGV2ZWxEQkNvZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6T2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJDb2Rpbmc6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om1ldGFEYXRhVHlwZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oOgorCisyMDEyLTA3LTMxICBY
aW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCiAgICAgICAgIEluZGV4ZWRE
QjogU2l6ZSB0aGUgVmVjdG9yIGluIGVuY29kZUludC9lbmNvZGVWYXJJbnQvZW5jb2RlU3RyaW5n
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTgxMwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERC
Q29kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJD
b2RpbmcuY3BwCmluZGV4IDdlMzdiZTc2MjRhY2UzYzMwNTliN2NkYTA4ODUwNGU1NjA4YjA1ZTku
LjhlYTg0NDU1NmU2MDA1ODU3ZmRiZDQ4N2I5ZGVkMTEyYjE4MDJmZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCkBA
IC02NCw3ICs2NCw3IEBACiAvLwogLy8gT2JqZWN0IHN0b3JlIG1ldGEtZGF0YToKIC8vCi0vLyAg
ICAgVGhlIHByZWZpeCBpcyBmb2xsb3dlZCBieSBhIHR5cGUgYnl0ZSwgdGhlbiBhIHZhcmlhYmxl
LWxlbmd0aCBpbnRlZ2VyLCBhbmQgdGhlbiBhbm90aGVyIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2Vy
IChGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBieXRlKS4KKy8vICAgICBUaGUgcHJlZml4IGlzIGZv
bGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIsIGFu
ZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuCiAvLwogLy8gICAgIDxkYXRh
YmFzZSBpZCwgMCwgMCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0
b3JlIG5hbWUgW09iamVjdFN0b3JlTWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFiYXNlIGlkLCAw
LCAwLCA1MCwgb2JqZWN0IHN0b3JlIGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleV0KQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBJbmRleEZyZWVMaXN0VHlwZUJ5dGUgPSAxNTE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Y2hhciBPYmplY3RTdG9yZU5hbWVzVHlwZUJ5dGUgPSAyMDA7CiBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgY2hhciBJbmRleE5hbWVzS2V5VHlwZUJ5dGUgPSAyMDE7CiAKLXN0YXRpYyBjb25zdCBpbnQ2
NF90IE9iamVjdE1ldGFEYXRhVHlwZU1heGltdW0gPSBJTlQ2NF9NQVg7CitzdGF0aWMgY29uc3Qg
dW5zaWduZWQgY2hhciBPYmplY3RNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1Owogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgSW5kZXhNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1OwogCiBWZWN0
b3I8Y2hhcj4gZW5jb2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCkBAIC0xMDg2LDE2ICsxMDg2LDE3
IEBAIGNvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsCiAgICAgQVNTRVJUKHJlc3VsdC0+bV9vYmplY3RT
dG9yZUlkKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSk7CisgICAg
cmVzdWx0LT5tX21ldGFEYXRhVHlwZSA9ICpwKys7CisgICAgcmV0dXJuIHA7CiB9CiAKLVZlY3Rv
cjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKQorVmVjdG9yPGNo
YXI+IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmVuY29kZShpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgdW5zaWduZWQgY2hhciBtZXRhRGF0YVR5cGUpCiB7CiAgICAg
S2V5UHJlZml4IHByZWZpeChkYXRhYmFzZUlkLCAwLCAwKTsKICAgICBWZWN0b3I8Y2hhcj4gcmV0
ID0gcHJlZml4LmVuY29kZSgpOwogICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShPYmplY3RTdG9y
ZU1ldGFEYXRhVHlwZUJ5dGUpKTsKICAgICByZXQuYXBwZW5kKGVuY29kZVZhckludChvYmplY3RT
dG9yZUlkKSk7Ci0gICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQobWV0YURhdGFUeXBlKSk7Cisg
ICAgcmV0LmFwcGVuZChlbmNvZGVCeXRlKG1ldGFEYXRhVHlwZSkpOwogICAgIHJldHVybiByZXQ7
CiB9CiAKQEAgLTExMTQsNyArMTExNSw3IEBAIGludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6b2JqZWN0U3RvcmVJZCgpIGNvbnN0CiAgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJZCA+PSAw
KTsKICAgICByZXR1cm4gbV9vYmplY3RTdG9yZUlkOwogfQotaW50NjRfdCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjptZXRhRGF0YVR5cGUoKSBjb25zdAordW5zaWduZWQgY2hhciBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjptZXRhRGF0YVR5cGUoKSBjb25zdAogewogICAgIEFTU0VSVChtX21ldGFE
YXRhVHlwZSA+PSAwKTsKICAgICByZXR1cm4gbV9tZXRhRGF0YVR5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXggMjY3
ZjYzZGFjMzVjOGVhNmQ4ZGYzMmM4MDMxOWM3MTVmMTFjODYzOC4uYWE2MTViOTA3YzA0NTAxNjUx
ODljYzhmZTVlMjg4ZjA3NTdiNGY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaApAQCAtMTY1LDE2ICsxNjUsMTYgQEAgcHVi
bGljOgogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFE
YXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKTsK
ICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQp
OwogICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBj
b25zdDsKLSAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNo
YXIgbWV0YURhdGFUeXBlKCkgY29uc3Q7CiAgICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleSYgb3RoZXIpOwogCiBwcml2YXRlOgogICAgIGludDY0X3QgbV9vYmplY3RT
dG9yZUlkOwotICAgIGludDY0X3QgbV9tZXRhRGF0YVR5cGU7IC8vIEZJWE1FOiBNYWtlIHRoaXMg
YSBieXRlLgorICAgIHVuc2lnbmVkIGNoYXIgbV9tZXRhRGF0YVR5cGU7CiB9OwogCiBjbGFzcyBJ
bmRleE1ldGFEYXRhS2V5IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155729</attachid>
            <date>2012-07-31 23:42:18 -0700</date>
            <delta_ts>2012-08-01 01:30:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92725-20120801144736.patch</filename>
            <type>text/plain</type>
            <size>10647</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMGFiNmZhM2IzZjQ0
NGRjYThjZWMzOTYxNzY2M2ZmMzlhMGU3NS4uNzdiOTA4NjE0MTgwMzM4ZDU5YWE0YTIwY2YzZWNh
MGViZGRiZTUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDEyLTA3LTMxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgogCisgICAgICAgIEluZGV4ZWREQjog
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bV9tZXRhRGF0YVR5cGUgc2hvdWxkIHVzZSBieXRlIHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIC0gTG93IGxldmVsIGZ1bmN0aW9ucyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0
ZXN0cyBhbmQgYWxzbyBjb3ZlcmVkIGJ5IENocm9taXVtCisgICAgICAgIHdlYmtpdF91bml0X3Rl
c3RzIElEQkxldmVsSURCQ29kaW5nVGVzdC4qLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgIChJREJMZXZlbERCQ29kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGlu
Zzo6T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6CisKKzIwMTItMDctMzEgIFhpbmduYW4g
V2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisKICAgICAgICAgSW5kZXhlZERCOiBTaXpl
IHRoZSBWZWN0b3IgaW4gZW5jb2RlSW50L2VuY29kZVZhckludC9lbmNvZGVTdHJpbmcKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODEzCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5j
cHAKaW5kZXggN2UzN2JlNzYyNGFjZTNjMzA1OWI3Y2RhMDg4NTA0ZTU2MDhiMDVlOS4uOTcwNGQ2
ZTBjZGI5NjRjNTRmMTg0YTgxYTA3MDZhZmRiMzBlNjhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTY0LDcg
KzY0LDcgQEAKIC8vCiAvLyBPYmplY3Qgc3RvcmUgbWV0YS1kYXRhOgogLy8KLS8vICAgICBUaGUg
cHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEgdmFyaWFibGUtbGVuZ3Ro
IGludGVnZXIsIGFuZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgKEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBhIGJ5dGUpLgorLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQg
YnkgYSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciwgYW5kIHRoZW4g
YW5vdGhlciB0eXBlIGJ5dGUuCiAvLwogLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9i
amVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWUgW09iamVjdFN0b3Jl
TWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3Jl
IGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KQEAgLTE2
Miw3ICsxNjIsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRleEZyZWVMaXN0VHlw
ZUJ5dGUgPSAxNTE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBPYmplY3RTdG9yZU5hbWVz
VHlwZUJ5dGUgPSAyMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRleE5hbWVzS2V5
VHlwZUJ5dGUgPSAyMDE7CiAKLXN0YXRpYyBjb25zdCBpbnQ2NF90IE9iamVjdE1ldGFEYXRhVHlw
ZU1heGltdW0gPSBJTlQ2NF9NQVg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBPYmplY3RN
ZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgSW5k
ZXhNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1OwogCiBWZWN0b3I8Y2hhcj4gZW5jb2RlQnl0ZSh1
bnNpZ25lZCBjaGFyIGMpCkBAIC0xNzQsNiArMTc0LDE2IEBAIFZlY3RvcjxjaGFyPiBlbmNvZGVC
eXRlKHVuc2lnbmVkIGNoYXIgYykKICAgICByZXR1cm4gdjsKIH0KIAorY29uc3QgY2hhciogZGVj
b2RlQnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWduZWQgY2hhciYg
Zm91bmRDaGFyKQoreworICAgIEFTU0VSVChwIDwgbGltaXQpOworICAgIGlmIChwID49IGxpbWl0
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZvdW5kQ2hhciA9ICpwKys7CisgICAgcmV0dXJu
IHA7Cit9CisKIFZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKQogewogICAgIHJldHVybiBlbmNvZGVC
eXRlKElEQktleU51bGxUeXBlQnl0ZSk7CkBAIC05NjksNyArOTc5LDggQEAgY29uc3QgY2hhciog
RGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFy
KiBsaW1pdCwgRGEKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09
IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0g
KnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAs
IGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUg
PT0gRGF0YWJhc2VGcmVlTGlzdFR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC0xMDEzLDcgKzEwMjQsOCBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZU5h
bWVLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFi
YQogICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CiAgICAgaWYgKHAgPT0gbGltaXQpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOworICAg
IHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGU7CisgICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5
cGVCeXRlKTsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBEYXRhYmFz
ZU5hbWVUeXBlQnl0ZSk7CiAgICAgaWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwpA
QCAtMTA3Niw3ICsxMDg4LDggQEAgY29uc3QgY2hhciogT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQo
IXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4g
MDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFy
IHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAg
QVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gT2JqZWN0U3RvcmVNZXRhRGF0YVR5
cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDg2
LDE2ICsxMDk5LDE2IEBAIGNvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29k
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsCiAgICAgQVNTRVJUKHJlc3Vs
dC0+bV9vYmplY3RTdG9yZUlkKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX21ldGFEYXRh
VHlwZSk7CisgICAgcmV0dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3VsdC0+bV9tZXRhRGF0
YVR5cGUpOwogfQogCi1WZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2Rl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFE
YXRhVHlwZSkKK1ZlY3RvcjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0
YURhdGFUeXBlKQogewogICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CiAg
ICAgVmVjdG9yPGNoYXI+IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKICAgICByZXQuYXBwZW5kKGVu
Y29kZUJ5dGUoT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKSk7CiAgICAgcmV0LmFwcGVuZChl
bmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50
KG1ldGFEYXRhVHlwZSkpOworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUp
KTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xMTE0LDcgKzExMjcsNyBAQCBpbnQ2NF90IE9i
amVjdFN0b3JlTWV0YURhdGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAogICAgIEFTU0VSVCht
X29iamVjdFN0b3JlSWQgPj0gMCk7CiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKIH0KLWlu
dDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKK3Vuc2ln
bmVkIGNoYXIgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9tZXRhRGF0YVR5cGUgPj0gMCk7CiAgICAgcmV0dXJuIG1fbWV0YURhdGFU
eXBlOwpAQCAtMTE1MCw3ICsxMTYzLDggQEAgY29uc3QgY2hhciogSW5kZXhNZXRhRGF0YUtleTo6
ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXgKICAgICBB
U1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25l
ZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7
CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhNZXRhRGF0YVR5
cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTYy
LDggKzExNzYsNyBAQCBjb25zdCBjaGFyKiBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUoY29uc3Qg
Y2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleAogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0LT5tX21l
dGFEYXRhVHlwZSA9ICpwKys7Ci0gICAgcmV0dXJuIHA7CisgICAgcmV0dXJuIGRlY29kZUJ5dGUo
cCwgbGltaXQsIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUpOwogfQogCiBWZWN0b3I8Y2hhcj4gSW5k
ZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQpAQCAt
MTIyMSw3ICsxMjM0LDggQEAgY29uc3QgY2hhciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQoIXBy
ZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsK
LSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5
cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNT
RVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVC
eXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjc0LDcg
KzEyODgsOCBAQCBjb25zdCBjaGFyKiBJbmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hh
ciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBJbmRleAogICAgIEFTU0VSVCghcHJlZml4Lm1f
aW5kZXhJZCk7CiAgICAgaWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHVu
c2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGU7
CisgICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKICAgICBBU1NFUlRfVU5V
U0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBJbmRleEZyZWVMaXN0VHlwZUJ5dGUpOwogICAgIGlm
IChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMzQsNyArMTM0OSw4IEBAIGNv
bnN0IGNoYXIqIE9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwg
Y29uc3QgY2hhciogbGltaXQsIE9iCiAgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKICAg
ICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0
eXBlQnl0ZSA9ICpwKys7CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZTsKKyAgICBwID0gZGVj
b2RlQnl0ZShwLCBsaW1pdCwgdHlwZUJ5dGUpOwogICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUs
IHR5cGVCeXRlID09IE9iamVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CiAgICAgcmV0dXJuIGRlY29k
ZVN0cmluZ1dpdGhMZW5ndGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOwog
fQpAQCAtMTM3MSw3ICsxMzg3LDggQEAgY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2Rl
KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW0KICAgICBBU1NF
UlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1
cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhOYW1lc0tleVR5cGVC
eXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXgg
MjY3ZjYzZGFjMzVjOGVhNmQ4ZGYzMmM4MDMxOWM3MTVmMTFjODYzOC4uOGI3MWI1ZjI2ZWJjOTM2
OWQwOWQ1NGY2MzE1YWEzMzVhNDJiMzcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaApAQCAtNDgsNiArNDgsNyBAQCBjb25z
dCB1bnNpZ25lZCBjaGFyIE1pbmltdW1JbmRleElkID0gMzA7CiBzdGF0aWMgY29uc3Qgc2l6ZV90
IERlZmF1bHRJbmxpbmVCdWZmZXJTaXplID0gMzI7CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVCeXRl
KHVuc2lnbmVkIGNoYXIpOworY29uc3QgY2hhciogZGVjb2RlQnl0ZShjb25zdCBjaGFyKiBwLCBj
b25zdCBjaGFyKiBsaW1pdCwgdW5zaWduZWQgY2hhciYgZm91bmRDaGFyKTsKIFZlY3RvcjxjaGFy
PiBtYXhJREJLZXkoKTsKIFZlY3RvcjxjaGFyPiBtaW5JREJLZXkoKTsKIFZlY3RvcjxjaGFyPiBl
bmNvZGVCb29sKGJvb2wpOwpAQCAtMTY1LDE2ICsxNjYsMTYgQEAgcHVibGljOgogCiAgICAgT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleSgpOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29u
c3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5
KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSk7CisgICAg
c3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKTsKICAgICBzdGF0aWMgVmVj
dG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFiYXNlSWQpOwogICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKTsKICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2
NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBl
KCkgY29uc3Q7CiAgICAgaW50IGNvbXBhcmUoY29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYg
b3RoZXIpOwogCiBwcml2YXRlOgogICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGlu
dDY0X3QgbV9tZXRhRGF0YVR5cGU7IC8vIEZJWE1FOiBNYWtlIHRoaXMgYSBieXRlLgorICAgIHVu
c2lnbmVkIGNoYXIgbV9tZXRhRGF0YVR5cGU7CiB9OwogCiBjbGFzcyBJbmRleE1ldGFEYXRhS2V5
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCTGV2ZWxEQkNv
ZGluZ1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJMZXZlbERCQ29k
aW5nVGVzdC5jcHAKaW5kZXggNWYwZjkyZGNkNDBiY2MxYTJlYWRkOGE1M2M4YmI1NTg3OGJlMzQ0
OS4uMmZjMzYzODJkNGIyMTFkM2RlNmZkNGU3NGMzYWNhNzA3YzI5ZmRjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAK
QEAgLTg0LDYgKzg0LDI3IEBAIFRFU1QoSURCTGV2ZWxEQkNvZGluZ1Rlc3QsIEVuY29kZUJ5dGUp
CiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBlbmNvZGVCeXRlKGMpKTsKIH0KIAorVEVTVChJREJM
ZXZlbERCQ29kaW5nVGVzdCwgRGVjb2RlQnl0ZSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hh
cj4gdGVzdENhc2VzOworICAgIHRlc3RDYXNlcy5hcHBlbmQoMCk7CisgICAgdGVzdENhc2VzLmFw
cGVuZCgxKTsKKyAgICB0ZXN0Q2FzZXMuYXBwZW5kKDI1NSk7CisjaWZkZWYgTkRFQlVHCisgICAg
dGVzdENhc2VzLmFwcGVuZCgtMyk7CisjZW5kaWYKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdGVzdENhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbiA9IHRl
c3RDYXNlc1tpXTsKKyAgICAgICAgVmVjdG9yPGNoYXI+IHYgPSBlbmNvZGVCeXRlKG4pOworCisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgcmVzOworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2Rl
Qnl0ZSh2LmRhdGEoKSwgdi5kYXRhKCkgKyB2LnNpemUoKSwgcmVzKTsKKyAgICAgICAgRVhQRUNU
X0VRKG4sIHJlcyk7CisgICAgICAgIEVYUEVDVF9FUSh2LmRhdGEoKSArIHYuc2l6ZSgpLCBwKTsK
KyAgICB9Cit9CisgICAKIFRFU1QoSURCTGV2ZWxEQkNvZGluZ1Rlc3QsIEVuY29kZUJvb2wpCiB7
CiAgICAgewpAQCAtNjg0LDYgKzcwNSwyNCBAQCBURVNUKElEQkxldmVsREJDb2RpbmdUZXN0LCBD
b21wYXJpc29uVGVzdCkKICAgICB9CiB9CiAKK1RFU1QoSURCTGV2ZWxEQkNvZGluZ1Rlc3QsIEVu
Y29kZVZhckludFZTRW5jb2RlQnl0ZVRlc3QpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
IHRlc3RDYXNlczsKKyAgICB0ZXN0Q2FzZXMuYXBwZW5kKDApOworICAgIHRlc3RDYXNlcy5hcHBl
bmQoMSk7CisgICAgdGVzdENhc2VzLmFwcGVuZCgxMjcpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0ZXN0Q2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBu
ID0gdGVzdENhc2VzW2ldOworCisgICAgICAgIFZlY3RvcjxjaGFyPiB2QSA9IGVuY29kZUJ5dGUo
bik7CisgICAgICAgIFZlY3RvcjxjaGFyPiB2QiA9IGVuY29kZVZhckludChzdGF0aWNfY2FzdDxp
bnQ2NF90PihuKSk7CisKKyAgICAgICAgRVhQRUNUX0VRKHZBLnNpemUoKSwgdkIuc2l6ZSgpKTsK
KyAgICAgICAgRVhQRUNUX0VRKCoodkEuZGF0YSgpKSwgKih2Qi5kYXRhKCkpKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZiAvLyBVU0UoTEVWRUxEQikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155750</attachid>
            <date>2012-08-01 01:30:59 -0700</date>
            <delta_ts>2012-08-01 19:10:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92725-20120801163617.patch</filename>
            <type>text/plain</type>
            <size>10623</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMGFiNmZhM2IzZjQ0
NGRjYThjZWMzOTYxNzY2M2ZmMzlhMGU3NS4uNzdiOTA4NjE0MTgwMzM4ZDU5YWE0YTIwY2YzZWNh
MGViZGRiZTUwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIyIEBACiAyMDEyLTA3LTMxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgogCisgICAgICAgIEluZGV4ZWREQjog
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bV9tZXRhRGF0YVR5cGUgc2hvdWxkIHVzZSBieXRlIHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIC0gTG93IGxldmVsIGZ1bmN0aW9ucyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0
ZXN0cyBhbmQgYWxzbyBjb3ZlcmVkIGJ5IENocm9taXVtCisgICAgICAgIHdlYmtpdF91bml0X3Rl
c3RzIElEQkxldmVsSURCQ29kaW5nVGVzdC4qLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgIChJREJMZXZlbERCQ29kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6Ok9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGlu
Zzo6T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKToKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6CisKKzIwMTItMDctMzEgIFhpbmduYW4g
V2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisKICAgICAgICAgSW5kZXhlZERCOiBTaXpl
IHRoZSBWZWN0b3IgaW4gZW5jb2RlSW50L2VuY29kZVZhckludC9lbmNvZGVTdHJpbmcKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODEzCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5j
cHAKaW5kZXggN2UzN2JlNzYyNGFjZTNjMzA1OWI3Y2RhMDg4NTA0ZTU2MDhiMDVlOS4uMmMyZTlh
OGViMWRlZWI2N2VhZmI5ZjJhYTA1YTIyY2I2NzU3Njc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTY0LDcg
KzY0LDcgQEAKIC8vCiAvLyBPYmplY3Qgc3RvcmUgbWV0YS1kYXRhOgogLy8KLS8vICAgICBUaGUg
cHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEgdmFyaWFibGUtbGVuZ3Ro
IGludGVnZXIsIGFuZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgKEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBhIGJ5dGUpLgorLy8gICAgIFRoZSBwcmVmaXggaXMgZm9sbG93ZWQg
YnkgYSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciwgYW5kIHRoZW4g
YW5vdGhlciB0eXBlIGJ5dGUuCiAvLwogLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwgMCwgNTAsIG9i
amVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWUgW09iamVjdFN0b3Jl
TWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2JqZWN0IHN0b3Jl
IGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtleV0KQEAgLTE2
Miw3ICsxNjIsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRleEZyZWVMaXN0VHlw
ZUJ5dGUgPSAxNTE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBPYmplY3RTdG9yZU5hbWVz
VHlwZUJ5dGUgPSAyMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRleE5hbWVzS2V5
VHlwZUJ5dGUgPSAyMDE7CiAKLXN0YXRpYyBjb25zdCBpbnQ2NF90IE9iamVjdE1ldGFEYXRhVHlw
ZU1heGltdW0gPSBJTlQ2NF9NQVg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBPYmplY3RN
ZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1Owogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgSW5k
ZXhNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1OwogCiBWZWN0b3I8Y2hhcj4gZW5jb2RlQnl0ZSh1
bnNpZ25lZCBjaGFyIGMpCkBAIC0xNzQsNiArMTc0LDE1IEBAIFZlY3RvcjxjaGFyPiBlbmNvZGVC
eXRlKHVuc2lnbmVkIGNoYXIgYykKICAgICByZXR1cm4gdjsKIH0KIAorY29uc3QgY2hhciogZGVj
b2RlQnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWduZWQgY2hhciYg
Zm91bmRDaGFyKQoreworICAgIGlmIChwID49IGxpbWl0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGZvdW5kQ2hhciA9ICpwKys7CisgICAgcmV0dXJuIHA7Cit9CisKIFZlY3RvcjxjaGFyPiBt
YXhJREJLZXkoKQogewogICAgIHJldHVybiBlbmNvZGVCeXRlKElEQktleU51bGxUeXBlQnl0ZSk7
CkBAIC05NjksNyArOTc4LDggQEAgY29uc3QgY2hhciogRGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVj
b2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGEKICAgICBBU1NFUlQo
IXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4g
MDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFy
IHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAg
QVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gRGF0YWJhc2VGcmVlTGlzdFR5cGVC
eXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDEzLDcg
KzEwMjMsOCBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShjb25zdCBjaGFy
KiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYQogICAgIEFTU0VSVCghcHJlZml4Lm1f
aW5kZXhJZCk7CiAgICAgaWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHVu
c2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGU7
CisgICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKICAgICBBU1NFUlRfVU5V
U0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBEYXRhYmFzZU5hbWVUeXBlQnl0ZSk7CiAgICAgaWYg
KHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA3Niw3ICsxMDg3LDggQEAgY29u
c3QgY2hhciogT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAg
IGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5
cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNv
ZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwg
dHlwZUJ5dGUgPT0gT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBs
aW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDg2LDE2ICsxMDk4LDE2IEBAIGNvbnN0IGNo
YXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29u
c3QgY2hhciogbGltaXQsCiAgICAgQVNTRVJUKHJlc3VsdC0+bV9vYmplY3RTdG9yZUlkKTsKICAg
ICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlY29kZVZh
ckludChwLCBsaW1pdCwgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSk7CisgICAgcmV0dXJuIGRlY29k
ZUJ5dGUocCwgbGltaXQsIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUpOwogfQogCi1WZWN0b3I8Y2hh
cj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKK1ZlY3RvcjxjaGFyPiBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQogewogICAgIEtleVBy
ZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CiAgICAgVmVjdG9yPGNoYXI+IHJldCA9IHBy
ZWZpeC5lbmNvZGUoKTsKICAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoT2JqZWN0U3RvcmVNZXRh
RGF0YVR5cGVCeXRlKSk7CiAgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2JqZWN0U3RvcmVJ
ZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG1ldGFEYXRhVHlwZSkpOworICAgIHJl
dC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUpKTsKICAgICByZXR1cm4gcmV0OwogfQog
CkBAIC0xMTE0LDcgKzExMjYsNyBAQCBpbnQ2NF90IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Om9i
amVjdFN0b3JlSWQoKSBjb25zdAogICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQgPj0gMCk7CiAg
ICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKIH0KLWludDY0X3QgT2JqZWN0U3RvcmVNZXRhRGF0
YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKK3Vuc2lnbmVkIGNoYXIgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9tZXRhRGF0YVR5
cGUgPj0gMCk7CiAgICAgcmV0dXJuIG1fbWV0YURhdGFUeXBlOwpAQCAtMTE1MCw3ICsxMTYyLDgg
QEAgY29uc3QgY2hhciogSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0
LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXgKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQp
OwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAg
PSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBl
Qnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhNZXRhRGF0YVR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBs
aW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTYyLDggKzExNzUsNyBAQCBjb25zdCBjaGFy
KiBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIq
IGxpbWl0LCBJbmRleAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocCA9PSBsaW1pdCkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSA9ICpwKys7Ci0gICAg
cmV0dXJuIHA7CisgICAgcmV0dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3VsdC0+bV9tZXRh
RGF0YVR5cGUpOwogfQogCiBWZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6ZW5jb2RlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQpAQCAtMTIyMSw3ICsxMjMzLDggQEAgY29uc3Qg
Y2hhciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBj
b25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlm
IChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVC
eXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVC
eXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlw
ZUJ5dGUgPT0gT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1p
dCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjc0LDcgKzEyODcsOCBAQCBjb25zdCBjaGFyKiBJ
bmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxp
bWl0LCBJbmRleAogICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CiAgICAgaWYgKHAgPT0g
bGltaXQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAq
cCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGU7CisgICAgcCA9IGRlY29kZUJ5dGUocCwg
bGltaXQsIHR5cGVCeXRlKTsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9
PSBJbmRleEZyZWVMaXN0VHlwZUJ5dGUpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTEzMzQsNyArMTM0OCw4IEBAIGNvbnN0IGNoYXIqIE9iamVjdFN0b3JlTmFt
ZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIE9iCiAg
ICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7CisgICAgdW5z
aWduZWQgY2hhciB0eXBlQnl0ZTsKKyAgICBwID0gZGVjb2RlQnl0ZShwLCBsaW1pdCwgdHlwZUJ5
dGUpOwogICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IE9iamVjdFN0b3Jl
TmFtZXNUeXBlQnl0ZSk7CiAgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhMZW5ndGgocCwgbGlt
aXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOwogfQpAQCAtMTM3MSw3ICsxMzg2LDggQEAg
Y29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25z
dCBjaGFyKiBsaW1pdCwgSW5kZXhOYW0KICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwog
ICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFy
IHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBk
ZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0
ZSwgdHlwZUJ5dGUgPT0gSW5kZXhOYW1lc0tleVR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1p
dCkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXggMjY3ZjYzZGFjMzVjOGVhNmQ4ZGYzMmM4
MDMxOWM3MTVmMTFjODYzOC4uOGI3MWI1ZjI2ZWJjOTM2OWQwOWQ1NGY2MzE1YWEzMzVhNDJiMzcx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJDb2RpbmcuaApAQCAtNDgsNiArNDgsNyBAQCBjb25zdCB1bnNpZ25lZCBjaGFyIE1pbmltdW1J
bmRleElkID0gMzA7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IERlZmF1bHRJbmxpbmVCdWZmZXJTaXpl
ID0gMzI7CiAKIFZlY3RvcjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworY29uc3Qg
Y2hhciogZGVjb2RlQnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWdu
ZWQgY2hhciYgZm91bmRDaGFyKTsKIFZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKTsKIFZlY3Rvcjxj
aGFyPiBtaW5JREJLZXkoKTsKIFZlY3RvcjxjaGFyPiBlbmNvZGVCb29sKGJvb2wpOwpAQCAtMTY1
LDE2ICsxNjYsMTYgQEAgcHVibGljOgogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNo
YXIqIGxpbWl0LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNv
ZGUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNo
YXIgbWV0YURhdGFUeXBlKTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShp
bnQ2NF90IGRhdGFiYXNlSWQpOwogICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICBpbnQ2NF90
IG9iamVjdFN0b3JlSWQoKSBjb25zdDsKLSAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0
OworICAgIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKCkgY29uc3Q7CiAgICAgaW50IGNvbXBh
cmUoY29uc3QgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIpOwogCiBwcml2YXRlOgogICAg
IGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9tZXRhRGF0YVR5cGU7IC8v
IEZJWE1FOiBNYWtlIHRoaXMgYSBieXRlLgorICAgIHVuc2lnbmVkIGNoYXIgbV9tZXRhRGF0YVR5
cGU7CiB9OwogCiBjbGFzcyBJbmRleE1ldGFEYXRhS2V5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAKaW5kZXggNWYwZjky
ZGNkNDBiY2MxYTJlYWRkOGE1M2M4YmI1NTg3OGJlMzQ0OS4uMmZjMzYzODJkNGIyMTFkM2RlNmZk
NGU3NGMzYWNhNzA3YzI5ZmRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAKQEAgLTg0LDYgKzg0LDI3IEBAIFRFU1Qo
SURCTGV2ZWxEQkNvZGluZ1Rlc3QsIEVuY29kZUJ5dGUpCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVk
LCBlbmNvZGVCeXRlKGMpKTsKIH0KIAorVEVTVChJREJMZXZlbERCQ29kaW5nVGVzdCwgRGVjb2Rl
Qnl0ZSkKK3sKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gdGVzdENhc2VzOworICAgIHRlc3RD
YXNlcy5hcHBlbmQoMCk7CisgICAgdGVzdENhc2VzLmFwcGVuZCgxKTsKKyAgICB0ZXN0Q2FzZXMu
YXBwZW5kKDI1NSk7CisjaWZkZWYgTkRFQlVHCisgICAgdGVzdENhc2VzLmFwcGVuZCgtMyk7Cisj
ZW5kaWYKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVzdENhc2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbiA9IHRlc3RDYXNlc1tpXTsKKyAgICAgICAgVmVj
dG9yPGNoYXI+IHYgPSBlbmNvZGVCeXRlKG4pOworCisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVz
OworICAgICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlQnl0ZSh2LmRhdGEoKSwgdi5kYXRhKCkg
KyB2LnNpemUoKSwgcmVzKTsKKyAgICAgICAgRVhQRUNUX0VRKG4sIHJlcyk7CisgICAgICAgIEVY
UEVDVF9FUSh2LmRhdGEoKSArIHYuc2l6ZSgpLCBwKTsKKyAgICB9Cit9CisgICAKIFRFU1QoSURC
TGV2ZWxEQkNvZGluZ1Rlc3QsIEVuY29kZUJvb2wpCiB7CiAgICAgewpAQCAtNjg0LDYgKzcwNSwy
NCBAQCBURVNUKElEQkxldmVsREJDb2RpbmdUZXN0LCBDb21wYXJpc29uVGVzdCkKICAgICB9CiB9
CiAKK1RFU1QoSURCTGV2ZWxEQkNvZGluZ1Rlc3QsIEVuY29kZVZhckludFZTRW5jb2RlQnl0ZVRl
c3QpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHRlc3RDYXNlczsKKyAgICB0ZXN0Q2Fz
ZXMuYXBwZW5kKDApOworICAgIHRlc3RDYXNlcy5hcHBlbmQoMSk7CisgICAgdGVzdENhc2VzLmFw
cGVuZCgxMjcpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXN0Q2FzZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBuID0gdGVzdENhc2VzW2ldOworCisgICAg
ICAgIFZlY3RvcjxjaGFyPiB2QSA9IGVuY29kZUJ5dGUobik7CisgICAgICAgIFZlY3RvcjxjaGFy
PiB2QiA9IGVuY29kZVZhckludChzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSk7CisKKyAgICAgICAg
RVhQRUNUX0VRKHZBLnNpemUoKSwgdkIuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKCoodkEu
ZGF0YSgpKSwgKih2Qi5kYXRhKCkpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKICNl
bmRpZiAvLyBVU0UoTEVWRUxEQikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155949</attachid>
            <date>2012-08-01 19:07:40 -0700</date>
            <delta_ts>2012-08-01 20:08:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92725-20120802101258.patch</filename>
            <type>text/plain</type>
            <size>11986</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdjMzdiZTVkZGNlOWYz
MzNlNGVkMzEwM2FhNTE4ZTEzN2IyMzg5Yy4uNDIzMTAzNjk0ZTcyMDI4NTc4M2JmOTFjZGU1MDc4
ODc5ZTRjNzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA4LTAxICBYaW5n
bmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEluZGV4ZWREQjog
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bV9tZXRhRGF0YVR5cGUgc2hvdWxkIHVzZSBieXRlIHR5
cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNzI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIC0gTG93IGxldmVsIGZ1bmN0aW9ucyBjb3ZlcmVkIGJ5IGV4aXN0aW5nIGxheW91dCB0
ZXN0cyBhbmQgYWxzbyBjb3ZlcmVkIGJ5IENocm9taXVtCisgICAgICAgIHdlYmtpdF91bml0X3Rl
c3RzIElEQkxldmVsSURCQ29kaW5nVGVzdC4qLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgIChJREJMZXZlbERCQ29kaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6OmRlY29kZUJ5dGUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6RGF0YWJhc2VGcmVlTGlzdEtleTo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6OkRhdGFiYXNlTmFtZUtleTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6Ok9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2
ZWxEQkNvZGluZzo6T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6OkluZGV4TWV0YURhdGFLZXk6OmRlY29kZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29kaW5nOjpPYmplY3RTdG9yZUZyZWVMaXN0
S2V5OjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6SW5kZXhG
cmVlTGlzdEtleTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6
Ok9iamVjdFN0b3JlTmFtZXNLZXk6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQ29kaW5nOjpJbmRleE5hbWVzS2V5OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAgICAgKElEQkxldmVsREJDb2RpbmcpOgor
CiAyMDEyLTA4LTAxICBLb2ppIElzaGlpICA8a29qaWlzaGlAZ21haWwuY29tPgogCiAgICAgICAg
IENhY2hlIHN1cHBvcnQgZm9yIE9wZW5UeXBlVmVydGljYWxEYXRhCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDY4NDMwNmM5MGNmNzYzYjc0MWQ1MTRjYjc2OTg4ZWVhMDFkMTE5NjkuLmNm
OTdmMmE5ODE2ZmZmOTRjYTc0OTRlMTY1ZmIzMjg0ZTU3NzZlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDgtMDEgIFhpbmduYW4gV2FuZyAgPHhp
bmduYW4ud2FuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgSW5kZXhlZERCOiBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjptX21ldGFEYXRhVHlwZSBzaG91bGQgdXNlIGJ5dGUgdHlwZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI3MjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIG5ldyB0ZXN0cyBp
biBJREJMZXZlbERCQ29kaW5nVGVzdC5jcHAuIE9uZSBmb3IgYW4gYWRkZWQgZnVuY3Rpb24gZGVj
b2RlQnl0ZSgpIGFuZCAKKyAgICAgICAgYW5vdGhlciBmb3IgdmVyaWZ5aW5nIHRoYXQgZW5jb2Rl
Qnl0ZSgpIGFuZCBlbmNvZGVWYXJJbnQoKSBhcmUgaW5kZW50aWNhbCB3aGVuIHRoZSBlbmNvZGVk
IAorICAgICAgICB2YWx1ZXMgYXJlIDw9IDEyNy4KKworICAgICAgICAqIHRlc3RzL0lEQkxldmVs
REJDb2RpbmdUZXN0LmNwcDoKKyAgICAgICAgKElEQkxldmVsREJDb2Rpbmc6OlRFU1QpOgorICAg
ICAgICAoSURCTGV2ZWxEQkNvZGluZyk6CisKIDIwMTItMDgtMDEgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1vdmUgY29tcG9zaXRv
ciBIVUQgZm9udCBhdGxhcyBpbml0aWFsaXphdGlvbiBjb2RlIG91dCBvZiBjb21wb3NpdG9yIGNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVs
REJDb2RpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxE
QkNvZGluZy5jcHAKaW5kZXggM2FmNDU0ZjBhMjNjNmI3MDhlOGUxYzFmNDU3ODE4OWM4MTE0Zjgz
OC4uMDZkZTNkMjFhMDYxYTVjYmY1N2ZmMjExMjUxZWE3MjI1YmQ2NmY5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAK
QEAgLTY0LDcgKzY0LDcgQEAKIC8vCiAvLyBPYmplY3Qgc3RvcmUgbWV0YS1kYXRhOgogLy8KLS8v
ICAgICBUaGUgcHJlZml4IGlzIGZvbGxvd2VkIGJ5IGEgdHlwZSBieXRlLCB0aGVuIGEgdmFyaWFi
bGUtbGVuZ3RoIGludGVnZXIsIGFuZCB0aGVuIGFub3RoZXIgdmFyaWFibGUtbGVuZ3RoIGludGVn
ZXIgKEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGJ5dGUpLgorLy8gICAgIFRoZSBwcmVmaXggaXMg
Zm9sbG93ZWQgYnkgYSB0eXBlIGJ5dGUsIHRoZW4gYSB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciwg
YW5kIHRoZW4gYW5vdGhlciB0eXBlIGJ5dGUuCiAvLwogLy8gICAgIDxkYXRhYmFzZSBpZCwgMCwg
MCwgNTAsIG9iamVjdCBzdG9yZSBpZCwgMD4gPT4gdXRmMTYgb2JqZWN0IHN0b3JlIG5hbWUgW09i
amVjdFN0b3JlTWV0YURhdGFLZXldCiAvLyAgICAgPGRhdGFiYXNlIGlkLCAwLCAwLCA1MCwgb2Jq
ZWN0IHN0b3JlIGlkLCAxPiA9PiB1dGYxNiBrZXkgcGF0aCBbT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eV0KQEAgLTE2Miw3ICsxNjIsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRleEZy
ZWVMaXN0VHlwZUJ5dGUgPSAxNTE7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBPYmplY3RT
dG9yZU5hbWVzVHlwZUJ5dGUgPSAyMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBJbmRl
eE5hbWVzS2V5VHlwZUJ5dGUgPSAyMDE7CiAKLXN0YXRpYyBjb25zdCBpbnQ2NF90IE9iamVjdE1l
dGFEYXRhVHlwZU1heGltdW0gPSBJTlQ2NF9NQVg7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh
ciBPYmplY3RNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1Owogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNoYXIgSW5kZXhNZXRhRGF0YVR5cGVNYXhpbXVtID0gMjU1OwogCiBWZWN0b3I8Y2hhcj4gZW5j
b2RlQnl0ZSh1bnNpZ25lZCBjaGFyIGMpCkBAIC0xNzIsNiArMTcyLDE1IEBAIFZlY3RvcjxjaGFy
PiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIgYykKICAgICByZXR1cm4gdjsKIH0KIAorY29uc3Qg
Y2hhciogZGVjb2RlQnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWdu
ZWQgY2hhciYgZm91bmRDaGFyKQoreworICAgIGlmIChwID49IGxpbWl0KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGZvdW5kQ2hhciA9ICpwKys7CisgICAgcmV0dXJuIHA7Cit9CisKIFZlY3Rv
cjxjaGFyPiBtYXhJREJLZXkoKQogewogICAgIHJldHVybiBlbmNvZGVCeXRlKElEQktleU51bGxU
eXBlQnl0ZSk7CkBAIC05NjEsNyArOTcwLDggQEAgY29uc3QgY2hhciogRGF0YWJhc2VGcmVlTGlz
dEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgRGEKICAg
ICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNp
Z25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0
ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gRGF0YWJhc2VGcmVl
TGlzdFR5cGVCeXRlKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0xMDA1LDcgKzEwMTUsOCBAQCBjb25zdCBjaGFyKiBEYXRhYmFzZU5hbWVLZXk6OmRlY29kZShj
b25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQsIERhdGFiYQogICAgIEFTU0VSVCgh
cHJlZml4Lm1faW5kZXhJZCk7CiAgICAgaWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAw
OwotICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGUgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIg
dHlwZUJ5dGU7CisgICAgcCA9IGRlY29kZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKICAgICBB
U1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0eXBlQnl0ZSA9PSBEYXRhYmFzZU5hbWVUeXBlQnl0ZSk7
CiAgICAgaWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA2OCw3ICsxMDc5
LDggQEAgY29uc3QgY2hhciogT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4
SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25l
ZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAg
IHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0
eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gT2JqZWN0U3RvcmVNZXRhRGF0YVR5cGVCeXRlKTsKICAgICBp
ZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDc4LDE2ICsxMDkwLDE2IEBA
IGNvbnN0IGNoYXIqIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShjb25zdCBjaGFyKiBz
dGFydCwgY29uc3QgY2hhciogbGltaXQsCiAgICAgQVNTRVJUKHJlc3VsdC0+bV9vYmplY3RTdG9y
ZUlkKTsKICAgICBpZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IGRlY29kZVZhckludChwLCBsaW1pdCwgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSk7CisgICAgcmV0
dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3VsdC0+bV9tZXRhRGF0YVR5cGUpOwogfQogCi1W
ZWN0b3I8Y2hhcj4gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKK1ZlY3Rv
cjxjaGFyPiBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQogewog
ICAgIEtleVByZWZpeCBwcmVmaXgoZGF0YWJhc2VJZCwgMCwgMCk7CiAgICAgVmVjdG9yPGNoYXI+
IHJldCA9IHByZWZpeC5lbmNvZGUoKTsKICAgICByZXQuYXBwZW5kKGVuY29kZUJ5dGUoT2JqZWN0
U3RvcmVNZXRhRGF0YVR5cGVCeXRlKSk7CiAgICAgcmV0LmFwcGVuZChlbmNvZGVWYXJJbnQob2Jq
ZWN0U3RvcmVJZCkpOwotICAgIHJldC5hcHBlbmQoZW5jb2RlVmFySW50KG1ldGFEYXRhVHlwZSkp
OworICAgIHJldC5hcHBlbmQoZW5jb2RlQnl0ZShtZXRhRGF0YVR5cGUpKTsKICAgICByZXR1cm4g
cmV0OwogfQogCkBAIC0xMTA2LDcgKzExMTgsNyBAQCBpbnQ2NF90IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6Om9iamVjdFN0b3JlSWQoKSBjb25zdAogICAgIEFTU0VSVChtX29iamVjdFN0b3JlSWQg
Pj0gMCk7CiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVJZDsKIH0KLWludDY0X3QgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKK3Vuc2lnbmVkIGNoYXIgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6bWV0YURhdGFUeXBlKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9t
ZXRhRGF0YVR5cGUgPj0gMCk7CiAgICAgcmV0dXJuIG1fbWV0YURhdGFUeXBlOwpAQCAtMTE0Miw3
ICsxMTU0LDggQEAgY29uc3QgY2hhciogSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2RlKGNvbnN0IGNo
YXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXgKICAgICBBU1NFUlQoIXByZWZpeC5t
X2luZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1
bnNpZ25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRl
OworICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VO
VVNFRCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhNZXRhRGF0YVR5cGVCeXRlKTsKICAgICBp
ZiAocCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTU0LDggKzExNjcsNyBAQCBj
b25zdCBjaGFyKiBJbmRleE1ldGFEYXRhS2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNv
bnN0IGNoYXIqIGxpbWl0LCBJbmRleAogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocCA9PSBs
aW1pdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0LT5tX21ldGFEYXRhVHlwZSA9ICpw
Kys7Ci0gICAgcmV0dXJuIHA7CisgICAgcmV0dXJuIGRlY29kZUJ5dGUocCwgbGltaXQsIHJlc3Vs
dC0+bV9tZXRhRGF0YVR5cGUpOwogfQogCiBWZWN0b3I8Y2hhcj4gSW5kZXhNZXRhRGF0YUtleTo6
ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFUeXBlKQpAQCAtMTIxMyw3ICsxMjI1LDgg
QEAgY29uc3QgY2hhciogT2JqZWN0U3RvcmVGcmVlTGlzdEtleTo6ZGVjb2RlKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwKICAgICBBU1NFUlQoIXByZWZpeC5tX2luZGV4SWQp
OwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNpZ25lZCBj
aGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOworICAgIHAg
PSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBl
Qnl0ZSwgdHlwZUJ5dGUgPT0gT2JqZWN0U3RvcmVGcmVlTGlzdFR5cGVCeXRlKTsKICAgICBpZiAo
cCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjY2LDcgKzEyNzksOCBAQCBjb25z
dCBjaGFyKiBJbmRleEZyZWVMaXN0S2V5OjpkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGxpbWl0LCBJbmRleAogICAgIEFTU0VSVCghcHJlZml4Lm1faW5kZXhJZCk7CiAgICAg
aWYgKHAgPT0gbGltaXQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHVuc2lnbmVkIGNoYXIgdHlw
ZUJ5dGUgPSAqcCsrOworICAgIHVuc2lnbmVkIGNoYXIgdHlwZUJ5dGU7CisgICAgcCA9IGRlY29k
ZUJ5dGUocCwgbGltaXQsIHR5cGVCeXRlKTsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGVCeXRlLCB0
eXBlQnl0ZSA9PSBJbmRleEZyZWVMaXN0VHlwZUJ5dGUpOwogICAgIGlmIChwID09IGxpbWl0KQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTEzMjYsNyArMTM0MCw4IEBAIGNvbnN0IGNoYXIqIE9iamVj
dFN0b3JlTmFtZXNLZXk6OmRlY29kZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGlt
aXQsIE9iCiAgICAgQVNTRVJUKCFwcmVmaXgubV9pbmRleElkKTsKICAgICBpZiAocCA9PSBsaW1p
dCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZSA9ICpwKys7
CisgICAgdW5zaWduZWQgY2hhciB0eXBlQnl0ZTsKKyAgICBwID0gZGVjb2RlQnl0ZShwLCBsaW1p
dCwgdHlwZUJ5dGUpOwogICAgIEFTU0VSVF9VTlVTRUQodHlwZUJ5dGUsIHR5cGVCeXRlID09IE9i
amVjdFN0b3JlTmFtZXNUeXBlQnl0ZSk7CiAgICAgcmV0dXJuIGRlY29kZVN0cmluZ1dpdGhMZW5n
dGgocCwgbGltaXQsIHJlc3VsdC0+bV9vYmplY3RTdG9yZU5hbWUpOwogfQpAQCAtMTM2Myw3ICsx
Mzc4LDggQEAgY29uc3QgY2hhciogSW5kZXhOYW1lc0tleTo6ZGVjb2RlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCwgSW5kZXhOYW0KICAgICBBU1NFUlQoIXByZWZpeC5tX2lu
ZGV4SWQpOwogICAgIGlmIChwID09IGxpbWl0KQogICAgICAgICByZXR1cm4gMDsKLSAgICB1bnNp
Z25lZCBjaGFyIHR5cGVCeXRlID0gKnArKzsKKyAgICB1bnNpZ25lZCBjaGFyIHR5cGVCeXRlOwor
ICAgIHAgPSBkZWNvZGVCeXRlKHAsIGxpbWl0LCB0eXBlQnl0ZSk7CiAgICAgQVNTRVJUX1VOVVNF
RCh0eXBlQnl0ZSwgdHlwZUJ5dGUgPT0gSW5kZXhOYW1lc0tleVR5cGVCeXRlKTsKICAgICBpZiAo
cCA9PSBsaW1pdCkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmgKaW5kZXggMzExM2U3ZDhhOTg4MmJk
N2Q4ZTc3OWNhZGFhOTdlZDgyMWM1YThlOC4uZDAyMWFkODZhYTEwNWM1MmNkNTA1YjMxZGEyZmIz
OGY4Mjc3MTVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkxldmVsREJDb2RpbmcuaApAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgSURCTGV2ZWxE
QkNvZGluZyB7CiBjb25zdCB1bnNpZ25lZCBjaGFyIE1pbmltdW1JbmRleElkID0gMzA7CiAKIFZl
Y3RvcjxjaGFyPiBlbmNvZGVCeXRlKHVuc2lnbmVkIGNoYXIpOworY29uc3QgY2hhciogZGVjb2Rl
Qnl0ZShjb25zdCBjaGFyKiBwLCBjb25zdCBjaGFyKiBsaW1pdCwgdW5zaWduZWQgY2hhciYgZm91
bmRDaGFyKTsKIFZlY3RvcjxjaGFyPiBtYXhJREJLZXkoKTsKIFZlY3RvcjxjaGFyPiBtaW5JREJL
ZXkoKTsKIFZlY3RvcjxjaGFyPiBlbmNvZGVCb29sKGJvb2wpOwpAQCAtMTYxLDE2ICsxNjIsMTYg
QEAgcHVibGljOgogCiAgICAgT2JqZWN0U3RvcmVNZXRhRGF0YUtleSgpOwogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkZWNvZGUoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5KiByZXN1bHQpOwotICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4g
ZW5jb2RlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IG1ldGFEYXRhVHlwZSk7CisgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBlbmNvZGUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIHVuc2lnbmVkIGNoYXIgbWV0YURhdGFU
eXBlKTsKICAgICBzdGF0aWMgVmVjdG9yPGNoYXI+IGVuY29kZU1heEtleShpbnQ2NF90IGRhdGFi
YXNlSWQpOwogICAgIHN0YXRpYyBWZWN0b3I8Y2hhcj4gZW5jb2RlTWF4S2V5KGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQoKSBjb25zdDsKLSAgICBpbnQ2NF90IG1ldGFEYXRhVHlwZSgpIGNvbnN0OworICAgIHVuc2ln
bmVkIGNoYXIgbWV0YURhdGFUeXBlKCkgY29uc3Q7CiAgICAgaW50IGNvbXBhcmUoY29uc3QgT2Jq
ZWN0U3RvcmVNZXRhRGF0YUtleSYgb3RoZXIpOwogCiBwcml2YXRlOgogICAgIGludDY0X3QgbV9v
YmplY3RTdG9yZUlkOwotICAgIGludDY0X3QgbV9tZXRhRGF0YVR5cGU7IC8vIEZJWE1FOiBNYWtl
IHRoaXMgYSBieXRlLgorICAgIHVuc2lnbmVkIGNoYXIgbV9tZXRhRGF0YVR5cGU7CiB9OwogCiBj
bGFzcyBJbmRleE1ldGFEYXRhS2V5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSURCTGV2ZWxEQkNvZGluZ1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJMZXZlbERCQ29kaW5nVGVzdC5jcHAKaW5kZXggMTM3Njk5YzMwZTVkNjBiMjQ1
MzRhYjQ3MzYzNzcxYTk0NDBhYjE3YS4uMmYyN2Y1NjA1NjMwNTZhMmFiYmEzYzA4ZDg4OGFhODAx
ZWQ2OGJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJMZXZl
bERCQ29kaW5nVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJM
ZXZlbERCQ29kaW5nVGVzdC5jcHAKQEAgLTg0LDYgKzg0LDI0IEBAIFRFU1QoSURCTGV2ZWxEQkNv
ZGluZ1Rlc3QsIEVuY29kZUJ5dGUpCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVkLCBlbmNvZGVCeXRl
KGMpKTsKIH0KIAorVEVTVChJREJMZXZlbERCQ29kaW5nVGVzdCwgRGVjb2RlQnl0ZSkKK3sKKyAg
ICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gdGVzdENhc2VzOworICAgIHRlc3RDYXNlcy5hcHBlbmQo
MCk7CisgICAgdGVzdENhc2VzLmFwcGVuZCgxKTsKKyAgICB0ZXN0Q2FzZXMuYXBwZW5kKDI1NSk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRlc3RDYXNlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyIG4gPSB0ZXN0Q2FzZXNbaV07CisgICAgICAgIFZlY3Rvcjxj
aGFyPiB2ID0gZW5jb2RlQnl0ZShuKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyIHJlczsKKyAg
ICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZUJ5dGUodi5kYXRhKCksIHYuZGF0YSgpICsgdi5z
aXplKCksIHJlcyk7CisgICAgICAgIEVYUEVDVF9FUShuLCByZXMpOworICAgICAgICBFWFBFQ1Rf
RVEodi5kYXRhKCkgKyB2LnNpemUoKSwgcCk7CisgICAgfQorfQorICAgCiBURVNUKElEQkxldmVs
REJDb2RpbmdUZXN0LCBFbmNvZGVCb29sKQogewogICAgIHsKQEAgLTY4Miw2ICs3MDAsMjQgQEAg
VEVTVChJREJMZXZlbERCQ29kaW5nVGVzdCwgQ29tcGFyaXNvblRlc3QpCiAgICAgfQogfQogCitU
RVNUKElEQkxldmVsREJDb2RpbmdUZXN0LCBFbmNvZGVWYXJJbnRWU0VuY29kZUJ5dGVUZXN0KQor
eworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiB0ZXN0Q2FzZXM7CisgICAgdGVzdENhc2VzLmFw
cGVuZCgwKTsKKyAgICB0ZXN0Q2FzZXMuYXBwZW5kKDEpOworICAgIHRlc3RDYXNlcy5hcHBlbmQo
MTI3KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGVzdENhc2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbiA9IHRlc3RDYXNlc1tpXTsKKworICAgICAgICBW
ZWN0b3I8Y2hhcj4gdkEgPSBlbmNvZGVCeXRlKG4pOworICAgICAgICBWZWN0b3I8Y2hhcj4gdkIg
PSBlbmNvZGVWYXJJbnQoc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpOworCisgICAgICAgIEVYUEVD
VF9FUSh2QS5zaXplKCksIHZCLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSgqKHZBLmRhdGEo
KSksICoodkIuZGF0YSgpKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYg
Ly8gVVNFKExFVkVMREIpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>