<?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>105222</bug_id>
          
          <creation_ts>2012-12-17 15:47:29 -0800</creation_ts>
          <short_desc>IndexedDB: Split BackingStore histogram</short_desc>
          <delta_ts>2012-12-18 14:33:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>1</everconfirmed>
          <reporter name="David Grogan">dgrogan</reporter>
          <assigned_to name="David Grogan">dgrogan</assigned_to>
          <cc>alecflett</cc>
    
    <cc>jsbell</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>793099</commentid>
    <comment_count>0</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 15:47:29 -0800</bug_when>
    <thetext>IndexedDB: Only log to histogram on fatal errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793128</commentid>
    <comment_count>1</comment_count>
      <attachid>179823</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 16:12:01 -0800</bug_when>
    <thetext>Created attachment 179823
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793140</commentid>
    <comment_count>2</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 16:26:40 -0800</bug_when>
    <thetext>Josh and Alec,

Are these indicative of logic errors rather than IO errors?  If so I will change them to emit ConsistencyError instead of InternalError.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793162</commentid>
    <comment_count>3</comment_count>
      <attachid>179823</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-17 16:44:25 -0800</bug_when>
    <thetext>Comment on attachment 179823
Patch

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

My intent was that InternalError would be used to flag (1) errors encountered at runtime due to bugs, bad disks, etc (2) errors generated during development by new bugs (e.g. developer forgets to write deletion code for a new field). 

Separating those concepts out into distinct macros is not a bad idea (I wanted to start off simple), but at first glance most of this patch is removing cases where #2 would be detected, which seems like a bad idea...

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:-620
&gt; -            InternalError(IDBLevelDBBackingStoreReadErrorGetObjectStores);

This was to handle a case where we didn&apos;t correctly delete all object store metadata when a store was deleted, so we need skip leftover records. (Feel free to improve the comment.)

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:-633
&gt; -            InternalError(IDBLevelDBBackingStoreReadErrorGetObjectStores);

The logic of this method could be improved significantly by doing a series of get() calls against the store rather than walking a cursor. It would simplify the method and make it more robust. Maybe it&apos;s time to do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793165</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-17 16:45:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Are these indicative of logic errors rather than IO errors?  If so I will change them to emit ConsistencyError instead of InternalError.

In a word: Yes.

If these trigger, it&apos;s because either a record has mysteriously vanished from the backing store or (more likely) we have a bug where we should have added/deleted a metadata entry but didn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793277</commentid>
    <comment_count>5</comment_count>
      <attachid>179865</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 19:23:42 -0800</bug_when>
    <thetext>Created attachment 179865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793278</commentid>
    <comment_count>6</comment_count>
      <attachid>179866</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 19:28:33 -0800</bug_when>
    <thetext>Created attachment 179866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793284</commentid>
    <comment_count>7</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-17 19:40:06 -0800</bug_when>
    <thetext>This patch is the beginning of separating those concepts. The next will take advantage of the separation by making InternalReadError and maybe InternalWriteError also record successes.

This is being driven because GetRecord is responsible for 95% of the errors but we don&apos;t know if that&apos;s just because GetRecord is called 20x more than the rest of the functions.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793838</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-18 11:01:43 -0800</bug_when>
    <thetext>The latest patch LGTM.

(In reply to comment #7)
&gt; This patch is the beginning of separating those concepts. The next will take advantage of the separation by making InternalReadError and maybe InternalWriteError also record successes.
&gt; 
&gt; This is being driven because GetRecord is responsible for 95% of the errors but we don&apos;t know if that&apos;s just because GetRecord is called 20x more than the rest of the functions.
&gt; 
&gt; Thoughts?

Sounds good. Being able to correlate with filesystem-level errors would be nice, e.g. knowing that a single write attempt is resulting in tight loop generating a million I/O errors. I guess we can iterate towards that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793951</commentid>
    <comment_count>9</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-18 12:50:53 -0800</bug_when>
    <thetext>Tony, could you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794000</commentid>
    <comment_count>10</comment_count>
      <attachid>179866</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-12-18 13:39:32 -0800</bug_when>
    <thetext>Comment on attachment 179866
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:57
&gt; +    IDBLevelDBBackingStoreReadError_DEPRECATED,
&gt; +    IDBLevelDBBackingStoreWriteError_DEPRECATED,
&gt; +    IDBLevelDBBackingStoreConsistencyError_DEPRECATED,

Nit: I probably wouldn&apos;t name these. You could set FindKeyInIndex = 4 and have a comment here saying that 1-3 are no longer used.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:96
&gt; +#define InternalReadError(location) ReportError(&quot;Read&quot;, location)
&gt; +#define InternalConsistencyError(location) ReportError(&quot;Consistency&quot;, location)
&gt; +#define InternalWriteError(location) ReportError(&quot;Write&quot;, location)

Nit: It looks like most macros in WebCore are in all caps, even if it&apos;s a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794029</commentid>
    <comment_count>11</comment_count>
      <attachid>179866</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-18 14:08:29 -0800</bug_when>
    <thetext>Comment on attachment 179866
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:57
&gt;&gt; +    IDBLevelDBBackingStoreConsistencyError_DEPRECATED,
&gt; 
&gt; Nit: I probably wouldn&apos;t name these. You could set FindKeyInIndex = 4 and have a comment here saying that 1-3 are no longer used.

Done.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:96
&gt;&gt; +#define InternalWriteError(location) ReportError(&quot;Write&quot;, location)
&gt; 
&gt; Nit: It looks like most macros in WebCore are in all caps, even if it&apos;s a function.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794030</commentid>
    <comment_count>12</comment_count>
      <attachid>180021</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-12-18 14:08:44 -0800</bug_when>
    <thetext>Created attachment 180021
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794062</commentid>
    <comment_count>13</comment_count>
      <attachid>180021</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 14:33:30 -0800</bug_when>
    <thetext>Comment on attachment 180021
Patch for landing

Clearing flags on attachment: 180021

Committed r138072: &lt;http://trac.webkit.org/changeset/138072&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794063</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 14:33:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179823</attachid>
            <date>2012-12-17 16:12:01 -0800</date>
            <delta_ts>2012-12-17 19:23:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105222-20121217160919.patch</filename>
            <type>text/plain</type>
            <size>5025</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiYzk2OTJkNmY3ZDBj
MDI2YmQzMGNkNDNjOWViMTQzZGMwYmE4Ny4uOTRjYmYyMDhhNzM3MTVmNDJhZjllMmI0ZWQ0N2Q0
YzViMDc1MTA4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEyLTE3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IE9u
bHkgbG9nIHRvIGhpc3RvZ3JhbSBvbiBmYXRhbCBlcnJvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTIyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9ubHkgdXNlIEludGVybmFsRXJyb3IgaW4gY2ly
Y3Vtc3RhbmNlcyB0aGF0IG5lY2Vzc2l0YXRlIGZpcmluZyBhbgorICAgICAgICBlcnJvciBvciBh
Ym9ydCBldmVudC4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMpOgorCiAy
MDEyLTEyLTE3ICBKb2huIEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBTZWFyY2ggYnkgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA0
YjFhMWE3ZDAxNzliYjkxYjdiYjg1Mzc5YzBmYjU5N2U0YTJmZjQwLi44Y2UwZjQ1M2RmMTkxZDJj
Zjc2YjJiNmE3M2ZlN2U0MWJlZDA2MDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTYxNyw3ICs2MTcsNiBAQCBW
ZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZXMoaW50NjRfdCBkYXRhYmFzZQogICAgICAgICBwID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtl
eTo6ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwogICAgICAgICBBU1NFUlQocCk7CiAg
ICAgICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBPYmplY3RTdG9yZU1ldGFE
YXRhS2V5OjpOYW1lKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAgICAgLy8gUG9zc2li
bGUgc3RhbGUgbWV0YWRhdGEsIGJ1dCBkb24ndCBmYWlsIHRoZSBsb2FkLgogICAgICAgICAgICAg
aXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNjMwLDMzICs2MjksMjggQEAg
VmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0
U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKIAogICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICBp
ZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9i
amVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmpl
Y3RTdG9yZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgSURCS2V5
UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+
dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYgKCFjaGVj
a09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9y
ZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpBdXRvSW5jcmVtZW50KSkgewotICAgICAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0
U3RvcmVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgYXV0
b0luY3JlbWVudCA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCku
ZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIElzIGV2aWNhdGJsZS4KICAgICAgICAg
aWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBv
YmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpFdmljdGFibGUpKSB7Ci0gICAg
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRP
YmplY3RTdG9yZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBp
dC0+bmV4dCgpOyAvLyBMYXN0IHZlcnNpb24uCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9y
ZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24pKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhp
bXVtIGluZGV4IGlkIGFsbG9jYXRlZC4KICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5k
TWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjpNYXhJbmRleElkKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGludDY0X3QgbWF4SW5kZXhJZCA9IGRlY29k
ZUludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBAIC02NjksNyAr
NjYzLDYgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgICAgIC8vICgyKSBMYXRl
ciwgbnVsbCB2cy4gc3RyaW5nIHZzLiBhcnJheSB3YXMgc3RvcmVkIGluIHRoZSBrZXlQYXRoIGl0
c2VsZi4KICAgICAgICAgICAgIC8vIFNvIHRoaXMgY2hlY2sgaXMgb25seSByZWxldmFudCBmb3Ig
c3RyaW5nLXR5cGUga2V5UGF0aHMuCiAgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGggJiYgKGtl
eVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUgJiYgIWtleVBhdGguc3RyaW5n
KCkuaXNFbXB0eSgpKSkgewotICAgICAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWhhc0tleVBhdGgpCkBAIC05
OTMsNyArOTg2LDYgQEAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICAgICAgcCA9IEluZGV4
TWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNT
RVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gSW5kZXhN
ZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SW5kZXhlcyk7CiAgICAgICAgICAgICAvLyBQb3NzaWJs
ZSBzdGFsZSBtZXRhZGF0YSBkdWUgdG8gaHR0cDovL3dlYmtpdC5vcmcvYi84NTU1NyBidXQgZG9u
J3QgZmFpbCB0aGUgbG9hZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTEwMDUsMTQgKzk5NywxMiBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4g
SURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAog
CiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJ
bmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFE
YXRhS2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRleGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgp
LmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBr
ZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBz
dG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SW5kZXhl
cyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBJREJLZXlQYXRoIGtl
eVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgp
LmVuZCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179865</attachid>
            <date>2012-12-17 19:23:42 -0800</date>
            <delta_ts>2012-12-17 19:28:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105222-20121217192100.patch</filename>
            <type>text/plain</type>
            <size>24310</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFiYzk2OTJkNmY3ZDBj
MDI2YmQzMGNkNDNjOWViMTQzZGMwYmE4Ny4uYjg2YzUwNDBkZTY1ZjhjNTZjNmIxOWM3NjEwYzcy
YTJiNmUxMGRhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEyLTE3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFNw
bGl0IEJhY2tpbmdTdG9yZSBoaXN0b2dyYW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNTIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzZXBhcmF0ZSBoaXN0b2dyYW1zIGZvciBDb25zaXN0ZW5j
eSwgV3JpdGUsIGFuZCBSZWFkIGVycm9ycy4KKyAgICAgICAgUmVjYXRlZ29yaXplIHNvbWUgcmVh
ZCBlcnJvcnMgYXMgY29uc2lzdGVuY3kgZXJyb3JzLgorCisgICAgICAgIFRlc3RlZCB0aGUgcHJl
cHJvY2Vzc29yIGxvZ2ljIGJ5IG1hbnVhbGx5IG1ha2luZyBzb21lIGZ1bmN0aW9ucyBmYWlsCisg
ICAgICAgIGFuZCBwcmludGluZyB0aGUgaGlzdG9ncmFtIHN0cmluZyBmcm9tIGNocm9taXVtIGNv
ZGUuCisKKyAgICAgICAgTmV4dCB1cCBpcyBsb2dnaW5nIHN1Y2Nlc3NlcyB0byBnZXQgYW4gaWRl
YSBvZiB3aGljaCBmdW5jdGlvbnMgaGF2ZQorICAgICAgICB0aGUgaGlnaGVzdCBmYWlsdXJlIF9y
YXRlXy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZWNvcmRJbnRlcm5hbEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4T2Jq
ZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld1ZlcnNpb25OdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3JlOjp2ZXJzaW9uRXhp
c3RzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJy
ZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3cpOgorCiAyMDEyLTEyLTE3ICBKb2huIEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTZWFyY2ggYnkgc2VsZWN0aW9uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNw
cAppbmRleCA0YjFhMWE3ZDAxNzliYjkxYjdiYjg1Mzc5YzBmYjU5N2U0YTJmZjQwLi5mYzhhNTk3
NDQ1MDdiOTQyODY1YjdjZjFkN2EzZjc0NDQwYmIwY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTUxLDQzICs1
MSw1MCBAQCB1c2luZyBuYW1lc3BhY2UgSURCTGV2ZWxEQkNvZGluZzsKIAogY29uc3QgaW50NjRf
dCBLZXlHZW5lcmF0b3JJbml0aWFsTnVtYmVyID0gMTsgLy8gRnJvbSB0aGUgSW5kZXhlZERCIHNw
ZWNpZmljYXRpb24uCiAKLWVudW0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JU
eXBlIHsKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yLAotICAgIElEQkxldmVs
REJCYWNraW5nU3RvcmVXcml0ZUVycm9yLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVDb25z
aXN0ZW5jeUVycm9yLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JGaW5kS2V5
SW5JbmRleCwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJh
c2VNZXRhRGF0YSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SW5kZXhl
cywKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0S2V5R2VuZXJhdG9yQ3Vy
cmVudE51bWJlciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0
U3RvcmVzLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRSZWNvcmQsCi0g
ICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcktleUV4aXN0c0luT2JqZWN0U3RvcmUs
Ci0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93LAotICAg
IElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhLAotICAgIElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRQcmltYXJ5S2V5VmlhSW5kZXgsCi0gICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcktleUV4aXN0c0luSW5kZXgsCi0gICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclZlcnNpb25FeGlzdHMsCi0gICAgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvckRlbGV0ZU9iamVjdFN0b3JlLAotICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JTZXRNYXhPYmplY3RTdG9yZUlkLAotICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JTZXRNYXhJbmRleElkLAotICAgIElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JHZXROZXdEYXRhYmFzZUlkLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JHZXROZXdWZXJzaW9uTnVtYmVyLAorZW51bSBJREJCYWNraW5nU3RvcmVFcnJvclNv
dXJjZSB7CisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcl9ERVBSRUNBVEVELAor
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yX0RFUFJFQ0FURUQsCisgICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3JfREVQUkVDQVRFRCwKKyAgICBGaW5k
S2V5SW5JbmRleCwKKyAgICBHZXRJREJEYXRhYmFzZU1ldGFEYXRhLAorICAgIEdldEluZGV4ZXMs
CisgICAgR2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciwKKyAgICBHZXRPYmplY3RTdG9yZXMs
CisgICAgR2V0UmVjb3JkLAorICAgIEtleUV4aXN0c0luT2JqZWN0U3RvcmUsCisgICAgTG9hZEN1
cnJlbnRSb3csCisgICAgU2V0dXBNZXRhZGF0YSwKKyAgICBHZXRQcmltYXJ5S2V5VmlhSW5kZXgs
CisgICAgS2V5RXhpc3RzSW5JbmRleCwKKyAgICBWZXJzaW9uRXhpc3RzLAorICAgIERlbGV0ZU9i
amVjdFN0b3JlLAorICAgIFNldE1heE9iamVjdFN0b3JlSWQsCisgICAgU2V0TWF4SW5kZXhJZCwK
KyAgICBHZXROZXdEYXRhYmFzZUlkLAorICAgIEdldE5ld1ZlcnNpb25OdW1iZXIsCisgICAgQ3Jl
YXRlSURCRGF0YWJhc2VNZXRhRGF0YSwKICAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJu
YWxFcnJvck1heCwKIH07Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVjb3JkSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgdHlwZSkKKworc3RhdGljIHZv
aWQgcmVjb3JkSW50ZXJuYWxFcnJvcihjb25zdCBjaGFyKiB0eXBlLCBJREJCYWNraW5nU3RvcmVF
cnJvclNvdXJjZSBsb2NhdGlvbikKIHsKLSAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1F
bnVtZXJhdGlvbigiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3JlLkludGVybmFsRXJyb3Ii
LCB0eXBlLCBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvck1heCk7CisgICAgU3Ry
aW5nIG5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiV2ViQ29yZS5JbmRleGVkREIuQmFja2luZ1N0b3Jl
LiVzRXJyb3IiLCB0eXBlKTsKKyAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJh
dGlvbihuYW1lLnV0ZjgoKS5kYXRhKCksIGxvY2F0aW9uLCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
SW50ZXJuYWxFcnJvck1heCk7CiB9CiAKIC8vIFVzZSB0byBzaWduYWwgY29uZGl0aW9ucyB0aGF0
IHVzdWFsbHkgaW5kaWNhdGUgZGV2ZWxvcGVyIGVycm9yLCBidXQgY291bGQgYmUgY2F1c2VkIGJ5
IGRhdGEgY29ycnVwdGlvbi4KIC8vIEEgbWFjcm8gaXMgdXNlZCBpbnN0ZWFkIG9mIGFuIGlubGlu
ZSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBhc3NlcnQgYW5kIGxvZyByZXBvcnQgdGhlIGxpbmUgbnVt
YmVyLgotI2RlZmluZSBJbnRlcm5hbEVycm9yKHR5cGUpIFwKKyNkZWZpbmUgUmVwb3J0RXJyb3Io
dHlwZSwgbG9jYXRpb24pIFwKICAgICBkbyB7IFwKKyAgICAgICAgTE9HX0VSUk9SKCJJbmRleGVk
REIgJXMgRXJyb3I6ICVzIiwgdHlwZSwgI2xvY2F0aW9uKTsgXAogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgXAotICAgICAgICBMT0dfRVJST1IoIkludGVybmFsIEluZGV4ZWREQiBFcnJv
cjogJXMiLCAjdHlwZSk7IFwKLSAgICAgICAgcmVjb3JkSW50ZXJuYWxFcnJvcih0eXBlKTsgXAor
ICAgICAgICByZWNvcmRJbnRlcm5hbEVycm9yKHR5cGUsIGxvY2F0aW9uKTsgXAogICAgIH0gd2hp
bGUgKDApCiAKKyNkZWZpbmUgSW50ZXJuYWxSZWFkRXJyb3IobG9jYXRpb24pIFJlcG9ydEVycm9y
KCJSZWFkIiwgbG9jYXRpb24pCisjZGVmaW5lIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihsb2Nh
dGlvbikgUmVwb3J0RXJyb3IoIkNvbnNpc3RlbmN5IiwgbG9jYXRpb24pCisjZGVmaW5lIEludGVy
bmFsV3JpdGVFcnJvcihsb2NhdGlvbikgUmVwb3J0RXJyb3IoIldyaXRlIiwgbG9jYXRpb24pCisK
IHN0YXRpYyB2b2lkIHB1dEJvb2woTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29u
c3QgTGV2ZWxEQlNsaWNlJiBrZXksIGJvb2wgdmFsdWUpCiB7CiAgICAgdHJhbnNhY3Rpb24tPnB1
dChrZXksIGVuY29kZUJvb2wodmFsdWUpKTsKQEAgLTIyNSw3ICsyMzIsNyBAQCBXQVJOX1VOVVNF
RF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBj
b25zdCBTdHJpbmcmCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBnZXRJ
bnQodHJhbnNhY3Rpb24uZ2V0KCksIHNjaGVtYVZlcnNpb25LZXksIGRiU2NoZW1hVmVyc2lvbiwg
Zm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIEludGVybmFsUmVh
ZEVycm9yKFNldHVwTWV0YWRhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmICghZm91bmQpIHsKQEAgLTI0OCwxMSArMjU1LDExIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmlu
ZyYKICAgICAgICAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wg
b2sgPSBnZXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIGl0LT5rZXkoKSwgZGF0YWJhc2VJZCwgZm91
bmQpOwogICAgICAgICAgICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgICAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7
CisgICAgICAgICAgICAgICAgICAgIEludGVybmFsUmVhZEVycm9yKFNldHVwTWV0YWRhdGEpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgICAg
ICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihTZXR1cE1ldGFkYXRhKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gaW50VmVyc2lvbktleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6
OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbik7
CkBAIC0yNzEsMTEgKzI3OCwxMSBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0
VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmCiAgICAgZm91bmQg
PSBmYWxzZTsKICAgICBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgZGF0YVZlcnNpb25L
ZXksIGRiRGF0YVZlcnNpb24sIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOwor
ICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihTZXR1cE1ldGFkYXRhKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICBJbnRlcm5h
bENvbnNpc3RlbmN5RXJyb3IoU2V0dXBNZXRhZGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKGRiRGF0YVZlcnNpb24gPCBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7
CkBAIC0yODcsNyArMjk0LDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIHNldFVw
TWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJgogICAgIEFTU0VSVChk
YkRhdGFWZXJzaW9uID09IGxhdGVzdEtub3duRGF0YVZlcnNpb24pOwogCiAgICAgaWYgKCF0cmFu
c2FjdGlvbi0+Y29tbWl0KCkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsV3JpdGVFcnJvcihTZXR1cE1l
dGFkYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTQ1MSw3ICs0NTgsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNlTWV0YQogCiAgICAgYm9vbCBv
ayA9IGdldEludChtX2RiLmdldCgpLCBrZXksIG1ldGFkYXRhLT5pZCwgZm91bmQpOwogICAgIGlm
ICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9y
KEdldElEQkRhdGFiYXNlTWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIGlmICghZm91bmQpCkBAIC00NTksMjEgKzQ2NiwyMSBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNl
TWV0YQogCiAgICAgb2sgPSBnZXRTdHJpbmcobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtl
eTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24p
LCBtZXRhZGF0YS0+dmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VN
ZXRhRGF0YSk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldElEQkRhdGFiYXNlTWV0YURh
dGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQpIHsKLSAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJv
cik7CisgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRJREJEYXRhYmFzZU1ldGFE
YXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG9rID0gZ2V0VmFySW50
KG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShtZXRhZGF0YS0+aWQsIERh
dGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKSwgbWV0YWRhdGEtPmludFZlcnNpb24s
IGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldElEQkRhdGFiYXNlTWV0YURhdGEpOworICAgICAgICBJ
bnRlcm5hbFJlYWRFcnJvcihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICBJbnRlcm5h
bENvbnNpc3RlbmN5RXJyb3IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKQEAgLTQ4Miw3ICs0ODksNyBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIElEQkRhdGFiYXNl
TWV0YQogCiAgICAgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKG1fZGIuZ2V0KCksIG1ldGFkYXRh
LT5pZCwgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2spIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0
YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldElEQkRhdGFiYXNl
TWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00OTgsNyArNTA1
LDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIGdldE5ld0RhdGFiYXNlSWQoTGV2
ZWxEQkRhdGFiYXNlKiBkYiwgaW50NjRfdCYgbmUKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAg
ICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlvbi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6
ZW5jb2RlKCksIG1heERhdGFiYXNlSWQsIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE5ld0RhdGFi
YXNlSWQpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihHZXROZXdEYXRhYmFzZUlkKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZvdW5kKQpAQCAtNTA5LDcgKzUx
Niw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdEYXRhYmFzZUlkKExl
dmVsREJEYXRhYmFzZSogZGIsIGludDY0X3QmIG5lCiAgICAgaW50NjRfdCBkYXRhYmFzZUlkID0g
bWF4RGF0YWJhc2VJZCArIDE7CiAgICAgcHV0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhEYXRh
YmFzZUlkS2V5OjplbmNvZGUoKSwgZGF0YWJhc2VJZCk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+
Y29tbWl0KCkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
V3JpdGVFcnJvcik7CisgICAgICAgIEludGVybmFsV3JpdGVFcnJvcihHZXROZXdEYXRhYmFzZUlk
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBuZXdJZCA9IGRhdGFiYXNlSWQ7
CkBAIC01MzEsNyArNTM4LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUlEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcKICAgICBwdXRTdHJp
bmcodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJzaW9uKTsKICAgICBwdXRWYXJJ
bnQodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShyb3dJZCwg
RGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBpbnRWZXJzaW9uKTsKICAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5jb21taXQoKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxXcml0ZUVycm9y
KENyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpAQCAtNjE3LDcgKzYyNCw3IEBAIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRh
dGFiYXNlCiAgICAgICAgIHAgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpkZWNvZGUocCwgbGlt
aXQsICZtZXRhRGF0YUtleSk7CiAgICAgICAgIEFTU0VSVChwKTsKICAgICAgICAgaWYgKG1ldGFE
YXRhS2V5Lm1ldGFEYXRhVHlwZSgpICE9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpIHsK
LSAgICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
ckdldE9iamVjdFN0b3Jlcyk7CisgICAgICAgICAgICBJbnRlcm5hbENvbnNpc3RlbmN5RXJyb3Io
R2V0T2JqZWN0U3RvcmVzKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRh
LCBidXQgZG9uJ3QgZmFpbCB0aGUgbG9hZC4KICAgICAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTYzMCwzMyArNjM3LDMzIEBAIFZlY3RvcjxJREJPYmplY3RT
dG9yZU1ldGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRh
dGFiYXNlCiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0
b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmpl
Y3RTdG9yZU1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAg
ICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRPYmplY3RTdG9yZXMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gZGVj
b2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAK
ICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0
YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1l
dGFEYXRhS2V5OjpBdXRvSW5jcmVtZW50KSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAg
ICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZGVjb2Rl
Qm9vbChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAg
aXQtPm5leHQoKTsgLy8gSXMgZXZpY2F0YmxlLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3Rv
cmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlTWV0YURhdGFLZXk6OkV2aWN0YWJsZSkpIHsKLSAgICAgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE9iamVjdFN0b3Jlcyk7CisgICAg
ICAgICAgICBJbnRlcm5hbENvbnNpc3RlbmN5RXJyb3IoR2V0T2JqZWN0U3RvcmVzKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaXQtPm5leHQoKTsgLy8gTGFzdCB2
ZXJzaW9uLgogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQu
Z2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Okxh
c3RWZXJzaW9uKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29u
c2lzdGVuY3lFcnJvcihHZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBNYXhpbXVtIGluZGV4IGlkIGFsbG9jYXRl
ZC4KICAgICAgICAgaWYgKCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgp
LCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRl
eElkKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVu
Y3lFcnJvcihHZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgaW50NjRfdCBtYXhJbmRleElkID0gZGVjb2RlSW50KGl0LT52YWx1ZSgpLmJlZ2lu
KCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKQEAgLTY2OSw3ICs2NzYsNyBAQCBWZWN0b3I8SURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMoaW50NjRf
dCBkYXRhYmFzZQogICAgICAgICAgICAgLy8gKDIpIExhdGVyLCBudWxsIHZzLiBzdHJpbmcgdnMu
IGFycmF5IHdhcyBzdG9yZWQgaW4gdGhlIGtleVBhdGggaXRzZWxmLgogICAgICAgICAgICAgLy8g
U28gdGhpcyBjaGVjayBpcyBvbmx5IHJlbGV2YW50IGZvciBzdHJpbmctdHlwZSBrZXlQYXRocy4K
ICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5
UGF0aDo6U3RyaW5nVHlwZSAmJiAha2V5UGF0aC5zdHJpbmcoKS5pc0VtcHR5KCkpKSB7Ci0gICAg
ICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
R2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgICAgICBJbnRlcm5hbENvbnNpc3RlbmN5RXJy
b3IoR2V0T2JqZWN0U3RvcmVzKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICghaGFzS2V5UGF0aCkKQEAgLTY5NywxMiArNzA0LDEyIEBAIFdB
Uk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRNYXhPYmplY3RTdG9yZUlkKExldmVsREJU
cmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgaW50NjRfdCBtYXhPYmplY3RTdG9yZUlkID0gLTE7
CiAgICAgYm9vbCBvayA9IGdldE1heE9iamVjdFN0b3JlSWQodHJhbnNhY3Rpb24sIG1heE9iamVj
dFN0b3JlSWRLZXksIG1heE9iamVjdFN0b3JlSWQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0TWF4T2JqZWN0
U3RvcmVJZCk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKFNldE1heE9iamVjdFN0b3JlSWQp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKG9iamVjdFN0b3JlSWQg
PD0gbWF4T2JqZWN0U3RvcmVJZCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxDb25zaXN0ZW5j
eUVycm9yKFNldE1heE9iamVjdFN0b3JlSWQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIHB1dEludCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtleSwgb2JqZWN0U3Rv
cmVJZCk7CkBAIC03NDcsMTEgKzc1NCwxMSBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRl
T2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpbwogICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBib29sIG9rID0gZ2V0U3RyaW5nKGxldmVsREJUcmFu
c2FjdGlvbiwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok5hbWUpLCBvYmplY3RTdG9yZU5hbWUs
IGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckRlbGV0ZU9iamVjdFN0b3JlKTsKKyAgICAgICAgSW50ZXJu
YWxSZWFkRXJyb3IoRGVsZXRlT2JqZWN0U3RvcmUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgIEludGVybmFsQ29uc2lzdGVu
Y3lFcnJvcihEZWxldGVPYmplY3RTdG9yZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTc3OCwxNCArNzg1LDE0IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgYm9v
bCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdldChsZXZlbGRiS2V5LCBkYXRhLCBmb3Vu
ZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICByZWNvcmQgPSBTdHJpbmcoKTsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkKTsK
KyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0UmVjb3JkKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIGludDY0X3QgdmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiBwID0g
ZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwgdmVyc2lvbik7CiAgICAgaWYg
KCFwKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRF
cnJvckdldFJlY29yZCk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldFJlY29yZCk7CiAg
ICAgICAgIHJlY29yZCA9IFN0cmluZygpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtODAzLDcgKzgxMCw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdW
ZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24sIGxhc3RWZXJzaW9u
S2V5LCBsYXN0VmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3VmVyc2lvbk51bWJl
cik7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldE5ld1ZlcnNpb25OdW1iZXIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQpCkBAIC04ODAsNyArODg3
LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbioKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAg
ICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdldChrZXlHZW5lcmF0b3JDdXJy
ZW50TnVtYmVyS2V5LCBkYXRhLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRLZXlHZW5lcmF0b3JD
dXJyZW50TnVtYmVyKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0S2V5R2VuZXJhdG9y
Q3VycmVudE51bWJlcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGZv
dW5kKQpAQCAtOTQ0LDcgKzk1MSw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zCiAKICAgICBi
b29sIG9rID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5zYWZlR2V0KGxldmVsZGJLZXksIGRhdGEsIGZv
dW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvcktleUV4aXN0c0luT2JqZWN0U3RvcmUpOworICAgICAgICBJbnRl
cm5hbFJlYWRFcnJvcihLZXlFeGlzdHNJbk9iamVjdFN0b3JlKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICBpZiAoIWZvdW5kKQpAQCAtOTkzLDcgKzEwMDAsNyBAQCBWZWN0b3I8
SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdAogICAgICAgICBwID0gSW5kZXhNZXRhRGF0YUtleTo6ZGVjb2RlKHAs
IGxpbWl0LCAmbWV0YURhdGFLZXkpOwogICAgICAgICBBU1NFUlQocCk7CiAgICAgICAgIGlmICht
ZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBJbmRleE1ldGFEYXRhS2V5OjpOYW1lKSB7Ci0g
ICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JH
ZXRJbmRleGVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRJbmRl
eGVzKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1ldGFkYXRhIGR1ZSB0byBodHRw
Oi8vd2Via2l0Lm9yZy9iLzg1NTU3IGJ1dCBkb24ndCBmYWlsIHRoZSBsb2FkLgogICAgICAgICAg
ICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTAwNSwxNCArMTAxMiwx
NCBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJbmRleGVz
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIHVu
aXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgp
LCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpVbmlxdWUpKSB7Ci0gICAgICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRl
eGVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRJbmRleGVzKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJvb2wgaW5kZXhVbmlxdWUg
PSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAog
ICAgICAgICBpdC0+bmV4dCgpOyAvLyBrZXlQYXRoCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFu
ZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5
OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yR2V0SW5kZXhlcyk7CisgICAgICAgICAgICBJbnRlcm5hbENvbnNpc3Rl
bmN5RXJyb3IoR2V0SW5kZXhlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQYXRoKGl0LT52YWx1ZSgpLmJl
Z2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKQEAgLTEwMzYsMTQgKzEwNDMsMTQgQEAgV0FSTl9V
TlVTRURfUkVUVVJOIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbiwgaW4KICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9
IGdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4SW5kZXhJZCwgZm91bmQpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yU2V0TWF4SW5kZXhJZCk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKFNl
dE1heEluZGV4SWQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91
bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJZDsKIAogICAgIGlmIChpbmRl
eElkIDw9IG1heEluZGV4SWQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lF
cnJvcihTZXRNYXhJbmRleElkKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAt
MTEzNSw3ICsxMTQyLDcgQEAgc3RhdGljIGJvb2wgdmVyc2lvbkV4aXN0cyhMZXZlbERCVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGkKIAogICAgIGJvb2wgb2sg
PSB0cmFuc2FjdGlvbi0+c2FmZUdldChrZXksIGRhdGEsIGV4aXN0cyk7CiAgICAgaWYgKCFvaykg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JW
ZXJzaW9uRXhpc3RzKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoVmVyc2lvbkV4aXN0cyk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFleGlzdHMpCkBAIC0xMTY1
LDcgKzExNzIsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sCiAgICAgICAgIGludDY0X3QgdmVy
c2lvbjsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZhckludChpdC0+dmFsdWUoKS5i
ZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAgICAgICAgIGlmICghcCkgewot
ICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
RmluZEtleUluSW5kZXgpOworICAgICAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoRmluZEtleUlu
SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZv
dW5kRW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CkBA
IC0xMTkzLDcgKzEyMDAsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZp
YUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYQogICAgIFZlY3Rvcjxj
aGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGJvb2wgb2sgPSBmaW5kS2V5SW5JbmRl
eCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBm
b3VuZEVuY29kZWRQcmltYXJ5S2V5LCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRQcmltYXJ5S2V5
VmlhSW5kZXgpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihHZXRQcmltYXJ5S2V5VmlhSW5k
ZXgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmIChmb3VuZCkgewpAQCAt
MTIxMiw3ICsxMjE5LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24KICAgICBWZWN0b3I8Y2hh
cj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKICAgICBib29sIG9rID0gZmluZEtleUluSW5kZXgo
dHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGluZGV4S2V5
LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBleGlzdHMpOwogICAgIGlmICghb2spIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3Rz
SW5JbmRleCk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEtleUV4aXN0c0luSW5kZXgpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZXhpc3RzKQpAQCAtMTQxMyw3
ICsxNDIwLDcgQEAgYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93
KCkKICAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVEYXRhS2V5OwogICAgIGtleVBv
c2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoa2V5UG9zaXRpb24sIGtleUxpbWl0
LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKICAgICBpZiAoIWtleVBvc2l0aW9uKSB7Ci0gICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50
Um93KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDIyLDcgKzE0MjksNyBAQCBib29sIE9iamVj
dFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3QgdmVyc2lv
bjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0
b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7
CiAgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSW50ZXJu
YWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC0xNDcxLDcgKzE0NzgsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9h
ZEN1cnJlbnRSb3coKQogICAgIE9iamVjdFN0b3JlRGF0YUtleSBvYmplY3RTdG9yZURhdGFLZXk7
CiAgICAga2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6OmRlY29kZShrZXlQb3NpdGlv
biwga2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwogICAgIGlmICgha2V5UG9zaXRpb24p
IHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
TG9hZEN1cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3VycmVudFJv
dyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE0ODAsNyArMTQ4Nyw3IEBA
IGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRf
dCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQo
bV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpLCB2
ZXJzaW9uKTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1cnJlbnRSb3cpOworICAgICAg
ICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTE1MzgsMTMgKzE1NDUsMTMgQEAgYm9vbCBJbmRleEtleUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247CiAgICAg
Y29uc3QgY2hhciogdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1
ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24p
OwogICAgIGlmICghdmFsdWVQb3NpdGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdyk7CisgICAgICAgIEludGVy
bmFsUmVhZEVycm9yKExvYWRDdXJyZW50Um93KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgbV9p
dGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9z
aXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVh
ZEVycm9yTG9hZEN1cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3Vy
cmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1NTksNyArMTU2
Niw3IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50
NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVW
YXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lv
bik7CiAgICAgaWYgKCF0KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJy
b3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0x
NjI0LDEyICsxNjMxLDEyIEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
CiAgICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNv
ZGVWYXJJbnQodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgaW5kZXhEYXRhVmVyc2lvbik7CiAg
ICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSW50ZXJuYWxS
ZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1p
dCwgbV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50
ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1cnJlbnRSb3cp
OworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE2NDQsNyArMTY1MSw3IEBAIGJvb2wgSW5kZXhDdXJz
b3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJz
aW9uOwogICAgIGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJl
c3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbik7CiAgICAgaWYgKCF0KSB7Ci0gICAg
ICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJy
ZW50Um93KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179866</attachid>
            <date>2012-12-17 19:28:33 -0800</date>
            <delta_ts>2012-12-18 14:08:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-105222-20121217192550.patch</filename>
            <type>text/plain</type>
            <size>24328</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3OTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYxOWEzNjA2ZGZhNDMx
MTM1N2RlY2RiYjdkYjdiZDA2MDEyZjYyMC4uMTZmNjk3YmQwODNlYTg0ZDg2ZTYyOTAyODc2ZWM1
OWIyNGM2YzYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEyLTE3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFNw
bGl0IEJhY2tpbmdTdG9yZSBoaXN0b2dyYW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNTIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBzZXBhcmF0ZSBoaXN0b2dyYW1zIGZvciBDb25zaXN0ZW5j
eSwgV3JpdGUsIGFuZCBSZWFkIGVycm9ycy4KKyAgICAgICAgUmVjYXRlZ29yaXplIHNvbWUgcmVh
ZCBlcnJvcnMgYXMgY29uc2lzdGVuY3kgZXJyb3JzLgorCisgICAgICAgIFRlc3RlZCB0aGUgcHJl
cHJvY2Vzc29yIGxvZ2ljIGJ5IG1hbnVhbGx5IG1ha2luZyBzb21lIGZ1bmN0aW9ucyBmYWlsCisg
ICAgICAgIGFuZCBwcmludGluZyB0aGUgaGlzdG9ncmFtIHN0cmluZyBmcm9tIGNocm9taXVtIGNv
ZGUuCisKKyAgICAgICAgTmV4dCB1cCBpcyBsb2dnaW5nIHN1Y2Nlc3NlcyB0byBnZXQgYW4gaWRl
YSBvZiB3aGljaCBmdW5jdGlvbnMgaGF2ZQorICAgICAgICB0aGUgaGlnaGVzdCBmYWlsdXJlIF9y
YXRlXy4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpyZWNvcmRJbnRlcm5hbEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VXBNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0TmV3RGF0YWJhc2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFj
a2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4T2Jq
ZWN0U3RvcmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3Jk
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5ld1ZlcnNpb25OdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0TWF4SW5kZXhJZCk6CisgICAgICAgIChXZWJDb3JlOjp2ZXJzaW9uRXhp
c3RzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZmluZEtleUluSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJy
ZW50Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3cpOgorCiAyMDEyLTEyLTE3ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAu
bmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBSZWZhY3RvciBUaWxlZEJhY2tp
bmdTdG9yZSBjb2RlIGluIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDU0
MDJlY2Q4MTc4NmIxY2ZhZTY1OGRkNzk4OTZlYTEzMDYwNzNlNzMuLmQyMDk0ZDJjOWFiNjNiNjI1
ODIyNDk3ZDk2N2QxMjBkNTQxOWYwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcApAQCAtNTEsNDMgKzUxLDUwIEBAIHVz
aW5nIG5hbWVzcGFjZSBJREJMZXZlbERCQ29kaW5nOwogCiBjb25zdCBpbnQ2NF90IEtleUdlbmVy
YXRvckluaXRpYWxOdW1iZXIgPSAxOyAvLyBGcm9tIHRoZSBJbmRleGVkREIgc3BlY2lmaWNhdGlv
bi4KIAotZW51bSBJREJMZXZlbERCQmFja2luZ1N0b3JlSW50ZXJuYWxFcnJvclR5cGUgewotICAg
IElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3IsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZVdyaXRlRXJyb3IsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNpc3RlbmN5RXJy
b3IsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckZpbmRLZXlJbkluZGV4LAot
ICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRh
LAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRleGVzLAotICAgIElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
LAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMsCi0g
ICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCwKLSAgICBJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5PYmplY3RTdG9yZSwKLSAgICBJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1cnJlbnRSb3csCi0gICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEsCi0gICAgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVJlYWRFcnJvckdldFByaW1hcnlLZXlWaWFJbmRleCwKLSAgICBJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCwKLSAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yVmVyc2lvbkV4aXN0cywKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvclNldE1heEluZGV4SWQsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJv
ckdldE5ld0RhdGFiYXNlSWQsCi0gICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdl
dE5ld1ZlcnNpb25OdW1iZXIsCitlbnVtIElEQkJhY2tpbmdTdG9yZUVycm9yU291cmNlIHsKKyAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yX0RFUFJFQ0FURUQsCisgICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3JfREVQUkVDQVRFRCwKKyAgICBJREJMZXZlbERCQmFj
a2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcl9ERVBSRUNBVEVELAorICAgIEZpbmRLZXlJbkluZGV4
LAorICAgIEdldElEQkRhdGFiYXNlTWV0YURhdGEsCisgICAgR2V0SW5kZXhlcywKKyAgICBHZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyLAorICAgIEdldE9iamVjdFN0b3JlcywKKyAgICBHZXRS
ZWNvcmQsCisgICAgS2V5RXhpc3RzSW5PYmplY3RTdG9yZSwKKyAgICBMb2FkQ3VycmVudFJvdywK
KyAgICBTZXR1cE1ldGFkYXRhLAorICAgIEdldFByaW1hcnlLZXlWaWFJbmRleCwKKyAgICBLZXlF
eGlzdHNJbkluZGV4LAorICAgIFZlcnNpb25FeGlzdHMsCisgICAgRGVsZXRlT2JqZWN0U3RvcmUs
CisgICAgU2V0TWF4T2JqZWN0U3RvcmVJZCwKKyAgICBTZXRNYXhJbmRleElkLAorICAgIEdldE5l
d0RhdGFiYXNlSWQsCisgICAgR2V0TmV3VmVyc2lvbk51bWJlciwKKyAgICBDcmVhdGVJREJEYXRh
YmFzZU1ldGFEYXRhLAogICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yTWF4
LAogfTsKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWNvcmRJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVJbnRlcm5hbEVycm9yVHlwZSB0eXBlKQorCitzdGF0aWMgdm9pZCByZWNvcmRJ
bnRlcm5hbEVycm9yKGNvbnN0IGNoYXIqIHR5cGUsIElEQkJhY2tpbmdTdG9yZUVycm9yU291cmNl
IGxvY2F0aW9uKQogewotICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9u
KCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuSW50ZXJuYWxFcnJvciIsIHR5cGUsIElE
QkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yTWF4KTsKKyAgICBTdHJpbmcgbmFtZSA9
IFN0cmluZzo6Zm9ybWF0KCJXZWJDb3JlLkluZGV4ZWREQi5CYWNraW5nU3RvcmUuJXNFcnJvciIs
IHR5cGUpOworICAgIEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUu
dXRmOCgpLmRhdGEoKSwgbG9jYXRpb24sIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVy
cm9yTWF4KTsKIH0KIAogLy8gVXNlIHRvIHNpZ25hbCBjb25kaXRpb25zIHRoYXQgdXN1YWxseSBp
bmRpY2F0ZSBkZXZlbG9wZXIgZXJyb3IsIGJ1dCBjb3VsZCBiZSBjYXVzZWQgYnkgZGF0YSBjb3Jy
dXB0aW9uLgogLy8gQSBtYWNybyBpcyB1c2VkIGluc3RlYWQgb2YgYW4gaW5saW5lIGZ1bmN0aW9u
IHNvIHRoYXQgdGhlIGFzc2VydCBhbmQgbG9nIHJlcG9ydCB0aGUgbGluZSBudW1iZXIuCi0jZGVm
aW5lIEludGVybmFsRXJyb3IodHlwZSkgXAorI2RlZmluZSBSZXBvcnRFcnJvcih0eXBlLCBsb2Nh
dGlvbikgXAogICAgIGRvIHsgXAorICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiAlcyBFcnJv
cjogJXMiLCB0eXBlLCAjbG9jYXRpb24pOyBcCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyBcCi0gICAgICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZERCIEVycm9yOiAlcyIsICN0
eXBlKTsgXAotICAgICAgICByZWNvcmRJbnRlcm5hbEVycm9yKHR5cGUpOyBcCisgICAgICAgIHJl
Y29yZEludGVybmFsRXJyb3IodHlwZSwgbG9jYXRpb24pOyBcCiAgICAgfSB3aGlsZSAoMCkKIAor
I2RlZmluZSBJbnRlcm5hbFJlYWRFcnJvcihsb2NhdGlvbikgUmVwb3J0RXJyb3IoIlJlYWQiLCBs
b2NhdGlvbikKKyNkZWZpbmUgSW50ZXJuYWxDb25zaXN0ZW5jeUVycm9yKGxvY2F0aW9uKSBSZXBv
cnRFcnJvcigiQ29uc2lzdGVuY3kiLCBsb2NhdGlvbikKKyNkZWZpbmUgSW50ZXJuYWxXcml0ZUVy
cm9yKGxvY2F0aW9uKSBSZXBvcnRFcnJvcigiV3JpdGUiLCBsb2NhdGlvbikKKwogc3RhdGljIHZv
aWQgcHV0Qm9vbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgYm9vbCB2YWx1ZSkKIHsKICAgICB0cmFuc2FjdGlvbi0+cHV0KGtleSwgZW5j
b2RlQm9vbCh2YWx1ZSkpOwpAQCAtMjI1LDcgKzIzMiw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmlu
ZyYKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CiAg
ICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoU2V0
dXBNZXRhZGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFmb3Vu
ZCkgewpAQCAtMjQ4LDExICsyNTUsMTEgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29s
IHNldFVwTWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJgogICAgICAg
ICAgICAgICAgIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYm9vbCBvayA9IGdldElu
dCh0cmFuc2FjdGlvbi5nZXQoKSwgaXQtPmtleSgpLCBkYXRhYmFzZUlkLCBmb3VuZCk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAg
ICAgICAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoU2V0dXBNZXRhZGF0YSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAg
SW50ZXJuYWxDb25zaXN0ZW5jeUVycm9yKFNldHVwTWV0YWRhdGEpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFZl
Y3RvcjxjaGFyPiBpbnRWZXJzaW9uS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRh
dGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKTsKQEAgLTI3MSwx
MSArMjc4LDExIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRh
KExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYKICAgICBmb3VuZCA9IGZhbHNlOwog
ICAgIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lvbktleSwgZGJEYXRh
VmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAgICAgIElu
dGVybmFsUmVhZEVycm9yKFNldHVwTWV0YWRhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgIEludGVybmFsQ29uc2lzdGVu
Y3lFcnJvcihTZXR1cE1ldGFkYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICBpZiAoZGJEYXRhVmVyc2lvbiA8IGxhdGVzdEtub3duRGF0YVZlcnNpb24pIHsKQEAgLTI4Nyw3
ICsyOTQsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgc2V0VXBNZXRhZGF0YShM
ZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmCiAgICAgQVNTRVJUKGRiRGF0YVZlcnNp
b24gPT0gbGF0ZXN0S25vd25EYXRhVmVyc2lvbik7CiAKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5j
b21taXQoKSkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVX
cml0ZUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxXcml0ZUVycm9yKFNldHVwTWV0YWRhdGEpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtNDUxLDcg
KzQ1OCw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhCiAKICAgICBib29sIG9rID0gZ2V0SW50
KG1fZGIuZ2V0KCksIGtleSwgbWV0YWRhdGEtPmlkLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewot
ICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJ
REJEYXRhYmFzZU1ldGFEYXRhKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0SURCRGF0
YWJhc2VNZXRhRGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFm
b3VuZCkKQEAgLTQ1OSwyMSArNDY2LDIxIEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhCiAKICAg
ICBvayA9IGdldFN0cmluZyhtX2RiLmdldCgpLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUo
bWV0YWRhdGEtPmlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIG1ldGFkYXRh
LT52ZXJzaW9uLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsK
KyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAg
ICAgSW50ZXJuYWxDb25zaXN0ZW5jeUVycm9yKEdldElEQkRhdGFiYXNlTWV0YURhdGEpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBnZXRWYXJJbnQobV9kYi5nZXQo
KSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRhLT5pZCwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6VXNlckludFZlcnNpb24pLCBtZXRhZGF0YS0+aW50VmVyc2lvbiwgZm91bmQpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIEludGVybmFsUmVh
ZEVycm9yKEdldElEQkRhdGFiYXNlTWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgIEludGVybmFsQ29uc2lzdGVu
Y3lFcnJvcihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIApAQCAtNDgyLDcgKzQ4OSw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhCiAKICAg
ICBvayA9IGdldE1heE9iamVjdFN0b3JlSWQobV9kYi5nZXQoKSwgbWV0YWRhdGEtPmlkLCBtZXRh
ZGF0YS0+bWF4T2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5h
bEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFE
YXRhKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ5OCw3ICs1MDUsNyBAQCBXQVJO
X1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJh
c2UqIGRiLCBpbnQ2NF90JiBuZQogICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBib29sIG9r
ID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhEYXRhYmFzZUlkS2V5OjplbmNvZGUoKSwg
bWF4RGF0YWJhc2VJZCwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3RGF0YWJhc2VJZCk7Cisg
ICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldE5ld0RhdGFiYXNlSWQpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQpCkBAIC01MDksNyArNTE2LDcgQEAgV0FS
Tl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIGdldE5ld0RhdGFiYXNlSWQoTGV2ZWxEQkRhdGFi
YXNlKiBkYiwgaW50NjRfdCYgbmUKICAgICBpbnQ2NF90IGRhdGFiYXNlSWQgPSBtYXhEYXRhYmFz
ZUlkICsgMTsKICAgICBwdXRJbnQodHJhbnNhY3Rpb24uZ2V0KCksIE1heERhdGFiYXNlSWRLZXk6
OmVuY29kZSgpLCBkYXRhYmFzZUlkKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5jb21taXQoKSkg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9y
KTsKKyAgICAgICAgSW50ZXJuYWxXcml0ZUVycm9yKEdldE5ld0RhdGFiYXNlSWQpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIG5ld0lkID0gZGF0YWJhc2VJZDsKQEAgLTUzMSw3
ICs1MzgsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0
YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZwogICAgIHB1dFN0cmluZyh0cmFuc2Fj
dGlvbi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjpVc2VyVmVyc2lvbiksIHZlcnNpb24pOwogICAgIHB1dFZhckludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKHJvd0lkLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjpVc2VySW50VmVyc2lvbiksIGludFZlcnNpb24pOwogICAgIGlmICghdHJhbnNh
Y3Rpb24tPmNvbW1pdCgpKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJbnRlcm5hbFdyaXRlRXJyb3IoQ3JlYXRlSURC
RGF0YWJhc2VNZXRhRGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CkBAIC02MTcsNyArNjI0LDcgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAg
ICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFE
YXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0
YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0
U3RvcmVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRPYmplY3RT
dG9yZXMpOwogICAgICAgICAgICAgLy8gUG9zc2libGUgc3RhbGUgbWV0YWRhdGEsIGJ1dCBkb24n
dCBmYWlsIHRoZSBsb2FkLgogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNjMwLDMzICs2MzcsMzMgQEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRh
dGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKIAog
ICAgICAgICBpdC0+bmV4dCgpOwogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRh
RGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0
YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMpOworICAgICAgICAgICAgSW50
ZXJuYWxDb25zaXN0ZW5jeUVycm9yKEdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQ
YXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBp
dC0+bmV4dCgpOwogICAgICAgICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUo
aXQuZ2V0KCksIHN0b3BLZXksIG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6
OkF1dG9JbmNyZW1lbnQpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMpOworICAgICAgICAgICAgSW50ZXJu
YWxDb25zaXN0ZW5jeUVycm9yKEdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29sKGl0LT52
YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgp
OyAvLyBJcyBldmljYXRibGUuCiAgICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFE
YXRhVHlwZShpdC5nZXQoKSwgc3RvcEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRh
RGF0YUtleTo6RXZpY3RhYmxlKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIElu
dGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBMYXN0IHZlcnNpb24uCiAg
ICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3Rv
cEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TGFzdFZlcnNpb24p
KSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3JHZXRPYmplY3RTdG9yZXMpOworICAgICAgICAgICAgSW50ZXJuYWxDb25zaXN0ZW5jeUVy
cm9yKEdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIGl0LT5uZXh0KCk7IC8vIE1heGltdW0gaW5kZXggaWQgYWxsb2NhdGVkLgogICAgICAg
ICBpZiAoIWNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoaXQuZ2V0KCksIHN0b3BLZXks
IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlTWV0YURhdGFLZXk6Ok1heEluZGV4SWQpKSB7Ci0g
ICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JH
ZXRPYmplY3RTdG9yZXMpOworICAgICAgICAgICAgSW50ZXJuYWxDb25zaXN0ZW5jeUVycm9yKEdl
dE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBp
bnQ2NF90IG1heEluZGV4SWQgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZh
bHVlKCkuZW5kKCkpOwpAQCAtNjY5LDcgKzY3Niw3IEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1l
dGFkYXRhPiBJREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNl
CiAgICAgICAgICAgICAvLyAoMikgTGF0ZXIsIG51bGwgdnMuIHN0cmluZyB2cy4gYXJyYXkgd2Fz
IHN0b3JlZCBpbiB0aGUga2V5UGF0aCBpdHNlbGYuCiAgICAgICAgICAgICAvLyBTbyB0aGlzIGNo
ZWNrIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHN0cmluZy10eXBlIGtleVBhdGhzLgogICAgICAgICAg
ICAgaWYgKCFoYXNLZXlQYXRoICYmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJp
bmdUeXBlICYmICFrZXlQYXRoLnN0cmluZygpLmlzRW1wdHkoKSkpIHsKLSAgICAgICAgICAgICAg
ICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RT
dG9yZXMpOworICAgICAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lFcnJvcihHZXRPYmpl
Y3RTdG9yZXMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKCFoYXNLZXlQYXRoKQpAQCAtNjk3LDEyICs3MDQsMTIgQEAgV0FSTl9VTlVTRURf
UkVUVVJOIHN0YXRpYyBib29sIHNldE1heE9iamVjdFN0b3JlSWQoTGV2ZWxEQlRyYW5zYWN0aW9u
KiB0cmFuc2FjdGkKICAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQgPSAtMTsKICAgICBib29s
IG9rID0gZ2V0TWF4T2JqZWN0U3RvcmVJZCh0cmFuc2FjdGlvbiwgbWF4T2JqZWN0U3RvcmVJZEtl
eSwgbWF4T2JqZWN0U3RvcmVJZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVy
cm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JTZXRNYXhPYmplY3RTdG9yZUlkKTsK
KyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoU2V0TWF4T2JqZWN0U3RvcmVJZCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBpZiAob2JqZWN0U3RvcmVJZCA8PSBtYXhPYmpl
Y3RTdG9yZUlkKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZUNvbnNpc3RlbmN5RXJyb3IpOworICAgICAgICBJbnRlcm5hbENvbnNpc3RlbmN5RXJyb3IoU2V0
TWF4T2JqZWN0U3RvcmVJZCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcHV0
SW50KHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKTsKQEAg
LTc0NywxMSArNzU0LDExIEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9y
ZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvCiAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBnZXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0b3JlTmFtZSwgZm91bmQpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0
b3JlUmVhZEVycm9yRGVsZXRlT2JqZWN0U3RvcmUpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJv
cihEZWxldGVPYmplY3RTdG9yZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
aWYgKCFmb3VuZCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgSW50ZXJuYWxDb25zaXN0ZW5jeUVycm9yKERl
bGV0ZU9iamVjdFN0b3JlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNzc5
LDE0ICs3ODYsMTQgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQKICAgICBib29sIGZvdW5kID0g
ZmFsc2U7CiAgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdldChsZXZlbGRi
S2V5LCBkYXRhLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRSZWNvcmQpOworICAgICAgICBJbnRl
cm5hbFJlYWRFcnJvcihHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQo
ZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXApIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3Jk
KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoR2V0UmVjb3JkKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtODAzLDcgKzgxMCw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3RpCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNh
Y3Rpb24sIGxhc3RWZXJzaW9uS2V5LCBsYXN0VmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2sp
IHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
R2V0TmV3VmVyc2lvbk51bWJlcik7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEdldE5ld1Zl
cnNpb25OdW1iZXIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91
bmQpCkBAIC04ODAsNyArODg3LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVy
YXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbioKICAgICBib29s
IGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdl
dChrZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyS2V5LCBkYXRhLCBmb3VuZCk7CiAgICAgaWYgKCFv
aykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJy
b3JHZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJy
b3IoR2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKGZvdW5kKQpAQCAtOTQ0LDcgKzk1MSw3IEBAIGJvb2wgSURCQmFja2lu
Z1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zCiAKICAgICBib29sIG9rID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5zYWZlR2V0KGxl
dmVsZGJLZXksIGRhdGEsIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFs
RXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcktleUV4aXN0c0luT2JqZWN0U3Rv
cmUpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihLZXlFeGlzdHNJbk9iamVjdFN0b3JlKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZvdW5kKQpAQCAtOTkzLDcg
KzEwMDAsNyBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRJ
bmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogICAgICAgICBwID0gSW5kZXhNZXRh
RGF0YUtleTo6ZGVjb2RlKHAsIGxpbWl0LCAmbWV0YURhdGFLZXkpOwogICAgICAgICBBU1NFUlQo
cCk7CiAgICAgICAgIGlmIChtZXRhRGF0YUtleS5tZXRhRGF0YVR5cGUoKSAhPSBJbmRleE1ldGFE
YXRhS2V5OjpOYW1lKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRleGVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lz
dGVuY3lFcnJvcihHZXRJbmRleGVzKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0YWxlIG1l
dGFkYXRhIGR1ZSB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzg1NTU3IGJ1dCBkb24ndCBmYWlsIHRo
ZSBsb2FkLgogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTAwNSwxNCArMTAxMiwxNCBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURCQmFja2lu
Z1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogCiAgICAgICAg
IGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJbmRleEFuZE1l
dGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRhS2V5OjpV
bmlxdWUpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JHZXRJbmRleGVzKTsKKyAgICAgICAgICAgIEludGVybmFsQ29uc2lzdGVuY3lF
cnJvcihHZXRJbmRleGVzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGJvb2wgaW5kZXhVbmlxdWUgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBrZXlQYXRoCiAgICAgICAg
IGlmICghY2hlY2tJbmRleEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElk
LCBJbmRleE1ldGFEYXRhS2V5OjpLZXlQYXRoKSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJv
cihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SW5kZXhlcyk7CisgICAgICAgICAg
ICBJbnRlcm5hbENvbnNpc3RlbmN5RXJyb3IoR2V0SW5kZXhlcyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBJREJLZXlQYXRoIGtleVBhdGggPSBkZWNvZGVJREJLZXlQ
YXRoKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52YWx1ZSgpLmVuZCgpKTsKQEAgLTEwMzYsMTQg
KzEwNDMsMTQgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIHNldE1heEluZGV4SWQo
TGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW4KICAgICBib29sIGZvdW5kID0gZmFs
c2U7CiAgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2FjdGlvbiwgbWF4SW5kZXhJZEtleSwgbWF4
SW5kZXhJZCwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0TWF4SW5kZXhJZCk7CisgICAgICAgIElu
dGVybmFsUmVhZEVycm9yKFNldE1heEluZGV4SWQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBNaW5pbXVtSW5kZXhJ
ZDsKIAogICAgIGlmIChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKLSAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgIElu
dGVybmFsQ29uc2lzdGVuY3lFcnJvcihTZXRNYXhJbmRleElkKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtMTEzNSw3ICsxMTQyLDcgQEAgc3RhdGljIGJvb2wgdmVyc2lvbkV4
aXN0cyhMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGkKIAogICAgIGJvb2wgb2sgPSB0cmFuc2FjdGlvbi0+c2FmZUdldChrZXksIGRhdGEsIGV4aXN0
cyk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JWZXJzaW9uRXhpc3RzKTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJy
b3IoVmVyc2lvbkV4aXN0cyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYg
KCFleGlzdHMpCkBAIC0xMTY1LDcgKzExNzIsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Zmlu
ZEtleUluSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sCiAg
ICAgICAgIGludDY0X3QgdmVyc2lvbjsKICAgICAgICAgY29uc3QgY2hhciogcCA9IGRlY29kZVZh
ckludChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAg
ICAgICAgIGlmICghcCkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yRmluZEtleUluSW5kZXgpOworICAgICAgICAgICAgSW50ZXJuYWxS
ZWFkRXJyb3IoRmluZEtleUluSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXkuYXBwZW5kKHAsIGl0LT52YWx1
ZSgpLmVuZCgpIC0gcCk7CkBAIC0xMTkzLDcgKzEyMDAsNyBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYQogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmltYXJ5S2V5OwogICAgIGJvb2wg
b2sgPSBmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJ
ZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBmb3VuZCk7CiAgICAgaWYg
KCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFk
RXJyb3JHZXRQcmltYXJ5S2V5VmlhSW5kZXgpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihH
ZXRQcmltYXJ5S2V5VmlhSW5kZXgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGlmIChmb3VuZCkgewpAQCAtMTIxMiw3ICsxMjE5LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luSW5kZXgoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24KICAgICBWZWN0b3I8Y2hhcj4gZm91bmRFbmNvZGVkUHJpbWFyeUtleTsKICAgICBib29sIG9r
ID0gZmluZEtleUluSW5kZXgodHJhbnNhY3Rpb24sIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGluZGV4S2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5LCBleGlzdHMpOwogICAg
IGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yS2V5RXhpc3RzSW5JbmRleCk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKEtl
eUV4aXN0c0luSW5kZXgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICgh
ZXhpc3RzKQpAQCAtMTQxMiw3ICsxNDE5LDcgQEAgYm9vbCBPYmplY3RTdG9yZUtleUN1cnNvcklt
cGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBPYmplY3RTdG9yZURhdGFLZXkgb2JqZWN0U3RvcmVE
YXRhS2V5OwogICAgIGtleVBvc2l0aW9uID0gT2JqZWN0U3RvcmVEYXRhS2V5OjpkZWNvZGUoa2V5
UG9zaXRpb24sIGtleUxpbWl0LCAmb2JqZWN0U3RvcmVEYXRhS2V5KTsKICAgICBpZiAoIWtleVBv
c2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJl
YWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1
cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDIxLDcgKzE0
MjgsNyBAQCBib29sIE9iamVjdFN0b3JlS2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQog
ICAgIGludDY0X3QgdmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVj
b2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUo
KS5lbmQoKSwgdmVyc2lvbik7CiAgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93
KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDcwLDcgKzE0NzcsNyBAQCBib29sIE9iamVjdFN0
b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIE9iamVjdFN0b3JlRGF0YUtleSBv
YmplY3RTdG9yZURhdGFLZXk7CiAgICAga2V5UG9zaXRpb24gPSBPYmplY3RTdG9yZURhdGFLZXk6
OmRlY29kZShrZXlQb3NpdGlvbiwga2V5TGltaXQsICZvYmplY3RTdG9yZURhdGFLZXkpOwogICAg
IGlmICgha2V5UG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5hbFJlYWRF
cnJvcihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTE0NzksNyArMTQ4Niw3IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVu
dFJvdygpCiAgICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHZhbHVlUG9zaXRp
b24gPSBkZWNvZGVWYXJJbnQobV9pdGVyYXRvci0+dmFsdWUoKS5iZWdpbigpLCBtX2l0ZXJhdG9y
LT52YWx1ZSgpLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAg
ICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1
cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3VycmVudFJvdyk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1MzgsMTMgKzE1NDUsMTMgQEAgYm9v
bCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICBpbnQ2NF90IGluZGV4
RGF0YVZlcnNpb247CiAgICAgY29uc3QgY2hhciogdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhcklu
dChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2luKCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCks
IGluZGV4RGF0YVZlcnNpb24pOwogICAgIGlmICghdmFsdWVQb3NpdGlvbikgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJv
dyk7CisgICAgICAgIEludGVybmFsUmVhZEVycm9yKExvYWRDdXJyZW50Um93KTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXko
dmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgbV9wcmltYXJ5S2V5KTsK
ICAgICBpZiAoIXZhbHVlUG9zaXRpb24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZl
bERCQmFja2luZ1N0b3JlUmVhZEVycm9yTG9hZEN1cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5h
bFJlYWRFcnJvcihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTE1NTksNyArMTU2Niw3IEBAIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCiAgICAgaW50NjRfdCBvYmplY3RTdG9yZURhdGFWZXJzaW9uOwogICAgIGNvbnN0
IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2Jq
ZWN0U3RvcmVEYXRhVmVyc2lvbik7CiAgICAgaWYgKCF0KSB7Ci0gICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAg
ICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0xNjI0LDEyICsxNjMxLDEyIEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBs
Ojpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwogICAgIHZh
bHVlUG9zaXRpb24gPSBkZWNvZGVWYXJJbnQodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgaW5k
ZXhEYXRhVmVyc2lvbik7CiAgICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsK
KyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVJREJLZXkodmFsdWVQ
b3NpdGlvbiwgdmFsdWVMaW1pdCwgbV9wcmltYXJ5S2V5KTsKICAgICBpZiAoIXZhbHVlUG9zaXRp
b24pIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yTG9hZEN1cnJlbnRSb3cpOworICAgICAgICBJbnRlcm5hbFJlYWRFcnJvcihMb2FkQ3VycmVu
dFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE2NDQsNyArMTY1MSw3
IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgaW50NjRfdCBv
YmplY3RTdG9yZURhdGFWZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHQgPSBkZWNvZGVWYXJJbnQo
cmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgb2JqZWN0U3RvcmVEYXRhVmVyc2lvbik7CiAg
ICAgaWYgKCF0KSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSW50ZXJuYWxSZWFkRXJyb3IoTG9h
ZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180021</attachid>
            <date>2012-12-18 14:08:44 -0800</date>
            <delta_ts>2012-12-18 14:33:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-105222-20121218140601.patch</filename>
            <type>text/plain</type>
            <size>24313</size>
            <attacher name="David Grogan">dgrogan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhhOTUwZjc0YzRlY2Rk
ZTVkNmRlZWIzOGZiYTQ3Y2I1ZjRkYTI4YS4uNTM0OTQ1YzViZmU2YTYxYzAyZDI4YTIzNWNiYWJm
NThlNTFmZjJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEyLTEyLTE3ICBEYXZp
ZCBHcm9nYW4gIDxkZ3JvZ2FuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IFNw
bGl0IEJhY2tpbmdTdG9yZSBoaXN0b2dyYW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEwNTIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hh
bmcuCisKKyAgICAgICAgQWRkIHNlcGFyYXRlIGhpc3RvZ3JhbXMgZm9yIENvbnNpc3RlbmN5LCBX
cml0ZSwgYW5kIFJlYWQgZXJyb3JzLgorICAgICAgICBSZWNhdGVnb3JpemUgc29tZSByZWFkIGVy
cm9ycyBhcyBjb25zaXN0ZW5jeSBlcnJvcnMuCisKKyAgICAgICAgVGVzdGVkIHRoZSBwcmVwcm9j
ZXNzb3IgbG9naWMgYnkgbWFudWFsbHkgbWFraW5nIHNvbWUgZnVuY3Rpb25zIGZhaWwKKyAgICAg
ICAgYW5kIHByaW50aW5nIHRoZSBoaXN0b2dyYW0gc3RyaW5nIGZyb20gY2hyb21pdW0gY29kZS4K
KworICAgICAgICBOZXh0IHVwIGlzIGxvZ2dpbmcgc3VjY2Vzc2VzIHRvIGdldCBhbiBpZGVhIG9m
IHdoaWNoIGZ1bmN0aW9ucyBoYXZlCisgICAgICAgIHRoZSBoaWdoZXN0IGZhaWx1cmUgX3JhdGVf
LgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnJlY29yZEludGVybmFsRXJyb3IpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRVcE1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXROZXdEYXRhYmFzZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRNYXhPYmplY3RT
dG9yZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0TmV3VmVyc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJCYWNraW5nU3RvcmU6OmdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRNYXhJbmRleElkKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnNpb25FeGlzdHMp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpmaW5kS2V5SW5JbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dyk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKFdlYkNvcmU6OkluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRS
b3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6
CisKIDIwMTItMTItMTggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWFjXSBBZGQgQnVpbGQgUGhhc2UgdG8gQ2hlY2sgSGVhZGVycyBmb3IgSW5hcHBy
b3ByaWF0ZSBNYWNyb3MgKFBsYXRmb3JtLmggbWFjcm9zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNTQwMmVjZDgx
Nzg2YjFjZmFlNjU4ZGQ3OTg5NmVhMTMwNjA3M2U3My4uYzMxNjA3ZGFkM2M0ZmYwZjMxN2RjOGFm
OGVlZThjNTRmYjRjZjQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCkBAIC01MSw0MyArNTEsNDggQEAgdXNpbmcgbmFt
ZXNwYWNlIElEQkxldmVsREJDb2Rpbmc7CiAKIGNvbnN0IGludDY0X3QgS2V5R2VuZXJhdG9ySW5p
dGlhbE51bWJlciA9IDE7IC8vIEZyb20gdGhlIEluZGV4ZWREQiBzcGVjaWZpY2F0aW9uLgogCi1l
bnVtIElEQkxldmVsREJCYWNraW5nU3RvcmVJbnRlcm5hbEVycm9yVHlwZSB7Ci0gICAgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlV3Jp
dGVFcnJvciwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvciwKLSAg
ICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yRmluZEtleUluSW5kZXgsCi0gICAgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldElEQkRhdGFiYXNlTWV0YURhdGEsCi0gICAg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldEluZGV4ZXMsCi0gICAgSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIsCi0gICAg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE9iamVjdFN0b3JlcywKLSAgICBJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkLAotICAgIElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JLZXlFeGlzdHNJbk9iamVjdFN0b3JlLAotICAgIElEQkxldmVsREJC
YWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdywKLSAgICBJREJMZXZlbERCQmFja2lu
Z1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3Jl
UmVhZEVycm9yR2V0UHJpbWFyeUtleVZpYUluZGV4LAotICAgIElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JLZXlFeGlzdHNJbkluZGV4LAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JWZXJzaW9uRXhpc3RzLAotICAgIElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJy
b3JEZWxldGVPYmplY3RTdG9yZSwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
U2V0TWF4T2JqZWN0U3RvcmVJZCwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
U2V0TWF4SW5kZXhJZCwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3
RGF0YWJhc2VJZCwKLSAgICBJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0TmV3VmVy
c2lvbk51bWJlciwKK2VudW0gSURCQmFja2luZ1N0b3JlRXJyb3JTb3VyY2UgeworICAgIC8vIDAg
LSAyIGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICBGaW5kS2V5SW5JbmRleCA9IDMsCisgICAgR2V0
SURCRGF0YWJhc2VNZXRhRGF0YSwKKyAgICBHZXRJbmRleGVzLAorICAgIEdldEtleUdlbmVyYXRv
ckN1cnJlbnROdW1iZXIsCisgICAgR2V0T2JqZWN0U3RvcmVzLAorICAgIEdldFJlY29yZCwKKyAg
ICBLZXlFeGlzdHNJbk9iamVjdFN0b3JlLAorICAgIExvYWRDdXJyZW50Um93LAorICAgIFNldHVw
TWV0YWRhdGEsCisgICAgR2V0UHJpbWFyeUtleVZpYUluZGV4LAorICAgIEtleUV4aXN0c0luSW5k
ZXgsCisgICAgVmVyc2lvbkV4aXN0cywKKyAgICBEZWxldGVPYmplY3RTdG9yZSwKKyAgICBTZXRN
YXhPYmplY3RTdG9yZUlkLAorICAgIFNldE1heEluZGV4SWQsCisgICAgR2V0TmV3RGF0YWJhc2VJ
ZCwKKyAgICBHZXROZXdWZXJzaW9uTnVtYmVyLAorICAgIENyZWF0ZUlEQkRhdGFiYXNlTWV0YURh
dGEsCiAgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgsCiB9Owotc3Rh
dGljIGlubGluZSB2b2lkIHJlY29yZEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZUludGVybmFsRXJyb3JUeXBlIHR5cGUpCisKK3N0YXRpYyB2b2lkIHJlY29yZEludGVybmFsRXJy
b3IoY29uc3QgY2hhciogdHlwZSwgSURCQmFja2luZ1N0b3JlRXJyb3JTb3VyY2UgbG9jYXRpb24p
CiB7Ci0gICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24oIldlYkNvcmUu
SW5kZXhlZERCLkJhY2tpbmdTdG9yZS5JbnRlcm5hbEVycm9yIiwgdHlwZSwgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgpOworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpm
b3JtYXQoIldlYkNvcmUuSW5kZXhlZERCLkJhY2tpbmdTdG9yZS4lc0Vycm9yIiwgdHlwZSk7Cisg
ICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtRW51bWVyYXRpb24obmFtZS51dGY4KCkuZGF0
YSgpLCBsb2NhdGlvbiwgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUludGVybmFsRXJyb3JNYXgpOwog
fQogCiAvLyBVc2UgdG8gc2lnbmFsIGNvbmRpdGlvbnMgdGhhdCB1c3VhbGx5IGluZGljYXRlIGRl
dmVsb3BlciBlcnJvciwgYnV0IGNvdWxkIGJlIGNhdXNlZCBieSBkYXRhIGNvcnJ1cHRpb24uCiAv
LyBBIG1hY3JvIGlzIHVzZWQgaW5zdGVhZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24gc28gdGhhdCB0
aGUgYXNzZXJ0IGFuZCBsb2cgcmVwb3J0IHRoZSBsaW5lIG51bWJlci4KLSNkZWZpbmUgSW50ZXJu
YWxFcnJvcih0eXBlKSBcCisjZGVmaW5lIFJFUE9SVF9FUlJPUih0eXBlLCBsb2NhdGlvbikgXAog
ICAgIGRvIHsgXAorICAgICAgICBMT0dfRVJST1IoIkluZGV4ZWREQiAlcyBFcnJvcjogJXMiLCB0
eXBlLCAjbG9jYXRpb24pOyBcCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBcCi0gICAg
ICAgIExPR19FUlJPUigiSW50ZXJuYWwgSW5kZXhlZERCIEVycm9yOiAlcyIsICN0eXBlKTsgXAot
ICAgICAgICByZWNvcmRJbnRlcm5hbEVycm9yKHR5cGUpOyBcCisgICAgICAgIHJlY29yZEludGVy
bmFsRXJyb3IodHlwZSwgbG9jYXRpb24pOyBcCiAgICAgfSB3aGlsZSAoMCkKIAorI2RlZmluZSBJ
TlRFUk5BTF9SRUFEX0VSUk9SKGxvY2F0aW9uKSBSRVBPUlRfRVJST1IoIlJlYWQiLCBsb2NhdGlv
bikKKyNkZWZpbmUgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IobG9jYXRpb24pIFJFUE9SVF9F
UlJPUigiQ29uc2lzdGVuY3kiLCBsb2NhdGlvbikKKyNkZWZpbmUgSU5URVJOQUxfV1JJVEVfRVJS
T1IobG9jYXRpb24pIFJFUE9SVF9FUlJPUigiV3JpdGUiLCBsb2NhdGlvbikKKwogc3RhdGljIHZv
aWQgcHV0Qm9vbChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBMZXZlbERC
U2xpY2UmIGtleSwgYm9vbCB2YWx1ZSkKIHsKICAgICB0cmFuc2FjdGlvbi0+cHV0KGtleSwgZW5j
b2RlQm9vbCh2YWx1ZSkpOwpAQCAtMjI1LDcgKzIzMCw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBz
dGF0aWMgYm9vbCBzZXRVcE1ldGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmlu
ZyYKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2Fj
dGlvbi5nZXQoKSwgc2NoZW1hVmVyc2lvbktleSwgZGJTY2hlbWFWZXJzaW9uLCBmb3VuZCk7CiAg
ICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JTZXR1cE1ldGFkYXRhKTsKKyAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihT
ZXR1cE1ldGFkYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZv
dW5kKSB7CkBAIC0yNDgsMTEgKzI1MywxMSBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJv
b2wgc2V0VXBNZXRhZGF0YShMZXZlbERCRGF0YWJhc2UqIGRiLCBjb25zdCBTdHJpbmcmCiAgICAg
ICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29sIG9rID0gZ2V0
SW50KHRyYW5zYWN0aW9uLmdldCgpLCBpdC0+a2V5KCksIGRhdGFiYXNlSWQsIGZvdW5kKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICAgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldHVwTWV0YWRhdGEpOworICAgICAg
ICAgICAgICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKFNldHVwTWV0YWRhdGEpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7CisgICAgICAgICAgICAgICAg
ICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKFNldHVwTWV0YWRhdGEpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIFZlY3RvcjxjaGFyPiBpbnRWZXJzaW9uS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5j
b2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJJbnRWZXJzaW9uKTsKQEAg
LTI3MSwxMSArMjc2LDExIEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRVcE1l
dGFkYXRhKExldmVsREJEYXRhYmFzZSogZGIsIGNvbnN0IFN0cmluZyYKICAgICBmb3VuZCA9IGZh
bHNlOwogICAgIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBkYXRhVmVyc2lvbktleSwg
ZGJEYXRhVmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxF
cnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yU2V0dXBNZXRhZGF0YSk7CisgICAg
ICAgIElOVEVSTkFMX1JFQURfRVJST1IoU2V0dXBNZXRhZGF0YSk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAgICAgSU5URVJOQUxf
Q09OU0lTVEVOQ1lfRVJST1IoU2V0dXBNZXRhZGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgaWYgKGRiRGF0YVZlcnNpb24gPCBsYXRlc3RLbm93bkRhdGFWZXJzaW9uKSB7
CkBAIC0yODcsNyArMjkyLDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0YXRpYyBib29sIHNldFVw
TWV0YWRhdGEoTGV2ZWxEQkRhdGFiYXNlKiBkYiwgY29uc3QgU3RyaW5nJgogICAgIEFTU0VSVChk
YkRhdGFWZXJzaW9uID09IGxhdGVzdEtub3duRGF0YVZlcnNpb24pOwogCiAgICAgaWYgKCF0cmFu
c2FjdGlvbi0+Y29tbWl0KCkpIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFj
a2luZ1N0b3JlV3JpdGVFcnJvcik7CisgICAgICAgIElOVEVSTkFMX1dSSVRFX0VSUk9SKFNldHVw
TWV0YWRhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwpAQCAtNDUxLDcgKzQ1Niw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCRGF0YWJhc2VNZXRhCiAKICAgICBib29s
IG9rID0gZ2V0SW50KG1fZGIuZ2V0KCksIGtleSwgbWV0YWRhdGEtPmlkLCBmb3VuZCk7CiAgICAg
aWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVS
ZWFkRXJyb3JHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKKyAgICAgICAgSU5URVJOQUxfUkVBRF9F
UlJPUihHZXRJREJEYXRhYmFzZU1ldGFEYXRhKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICBpZiAoIWZvdW5kKQpAQCAtNDU5LDIxICs0NjQsMjEgQEAgYm9vbCBJREJCYWNraW5n
U3RvcmU6OmdldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJEYXRh
YmFzZU1ldGEKIAogICAgIG9rID0gZ2V0U3RyaW5nKG1fZGIuZ2V0KCksIERhdGFiYXNlTWV0YURh
dGFLZXk6OmVuY29kZShtZXRhZGF0YS0+aWQsIERhdGFiYXNlTWV0YURhdGFLZXk6OlVzZXJWZXJz
aW9uKSwgbWV0YWRhdGEtPnZlcnNpb24sIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAg
IEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldElEQkRhdGFi
YXNlTWV0YURhdGEpOworICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKEdldElEQkRhdGFiYXNl
TWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQp
IHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVu
Y3lFcnJvcik7CisgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldElEQkRhdGFi
YXNlTWV0YURhdGEpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgb2sgPSBn
ZXRWYXJJbnQobV9kYi5nZXQoKSwgRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKG1ldGFkYXRh
LT5pZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBtZXRhZGF0YS0+aW50
VmVyc2lvbiwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7Cisg
ICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5jeUVycm9yKTsKKyAgICAg
ICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQ4Miw3ICs0ODcsNyBAQCBib29sIElE
QkJhY2tpbmdTdG9yZTo6Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkRhdGFiYXNlTWV0YQogCiAgICAgb2sgPSBnZXRNYXhPYmplY3RTdG9yZUlkKG1fZGIuZ2V0
KCksIG1ldGFkYXRhLT5pZCwgbWV0YWRhdGEtPm1heE9iamVjdFN0b3JlSWQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yR2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1Io
R2V0SURCRGF0YWJhc2VNZXRhRGF0YSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
QEAgLTQ5OCw3ICs1MDMsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0TmV3
RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90JiBuZQogICAgIGJvb2wgZm91
bmQgPSBmYWxzZTsKICAgICBib29sIG9rID0gZ2V0SW50KHRyYW5zYWN0aW9uLmdldCgpLCBNYXhE
YXRhYmFzZUlkS2V5OjplbmNvZGUoKSwgbWF4RGF0YWJhc2VJZCwgZm91bmQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yR2V0TmV3RGF0YWJhc2VJZCk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoR2V0TmV3
RGF0YWJhc2VJZCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKCFmb3Vu
ZCkKQEAgLTUwOSw3ICs1MTQsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wgZ2V0
TmV3RGF0YWJhc2VJZChMZXZlbERCRGF0YWJhc2UqIGRiLCBpbnQ2NF90JiBuZQogICAgIGludDY0
X3QgZGF0YWJhc2VJZCA9IG1heERhdGFiYXNlSWQgKyAxOwogICAgIHB1dEludCh0cmFuc2FjdGlv
bi5nZXQoKSwgTWF4RGF0YWJhc2VJZEtleTo6ZW5jb2RlKCksIGRhdGFiYXNlSWQpOwogICAgIGlm
ICghdHJhbnNhY3Rpb24tPmNvbW1pdCgpKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVdyaXRlRXJyb3IpOworICAgICAgICBJTlRFUk5BTF9XUklURV9FUlJP
UihHZXROZXdEYXRhYmFzZUlkKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBu
ZXdJZCA9IGRhdGFiYXNlSWQ7CkBAIC01MzEsNyArNTM2LDcgQEAgYm9vbCBJREJCYWNraW5nU3Rv
cmU6OmNyZWF0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcKICAgICBwdXRTdHJpbmcodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlclZlcnNpb24pLCB2ZXJz
aW9uKTsKICAgICBwdXRWYXJJbnQodHJhbnNhY3Rpb24uZ2V0KCksIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmVuY29kZShyb3dJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6VXNlckludFZlcnNpb24pLCBp
bnRWZXJzaW9uKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5jb21taXQoKSkgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVXcml0ZUVycm9yKTsKKyAgICAgICAg
SU5URVJOQUxfV1JJVEVfRVJST1IoQ3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MTcsNyArNjIyLDcg
QEAgVmVjdG9yPElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6Z2V0T2Jq
ZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2UKICAgICAgICAgcCA9IE9iamVjdFN0b3JlTWV0YURh
dGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNTRVJUKHAp
OwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gT2JqZWN0U3RvcmVN
ZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIElOVEVS
TkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICAvLyBQ
b3NzaWJsZSBzdGFsZSBtZXRhZGF0YSwgYnV0IGRvbid0IGZhaWwgdGhlIGxvYWQuCiAgICAgICAg
ICAgICBpdC0+bmV4dCgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC02MzAsMzMgKzYzNSwz
MyBAQCBWZWN0b3I8SURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gSURCQmFja2luZ1N0b3JlOjpnZXRP
YmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZQogCiAgICAgICAgIGl0LT5uZXh0KCk7CiAgICAg
ICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3RvcEtl
eSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6S2V5UGF0aCkpIHsKLSAg
ICAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdl
dE9iamVjdFN0b3Jlcyk7CisgICAgICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJPUihH
ZXRPYmplY3RTdG9yZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
SURCS2V5UGF0aCBrZXlQYXRoID0gZGVjb2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigp
LCBpdC0+dmFsdWUoKS5lbmQoKSk7CiAKICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgaWYg
KCFjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmpl
Y3RTdG9yZUlkLCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpBdXRvSW5jcmVtZW50KSkgewotICAg
ICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0
T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdl
dE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBi
b29sIGF1dG9JbmNyZW1lbnQgPSBkZWNvZGVCb29sKGl0LT52YWx1ZSgpLmJlZ2luKCksIGl0LT52
YWx1ZSgpLmVuZCgpKTsKIAogICAgICAgICBpdC0+bmV4dCgpOyAvLyBJcyBldmljYXRibGUuCiAg
ICAgICAgIGlmICghY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShpdC5nZXQoKSwgc3Rv
cEtleSwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6RXZpY3RhYmxlKSkg
ewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yR2V0T2JqZWN0U3RvcmVzKTsKKyAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VS
Uk9SKEdldE9iamVjdFN0b3Jlcyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIGl0LT5uZXh0KCk7IC8vIExhc3QgdmVyc2lvbi4KICAgICAgICAgaWYgKCFjaGVja09i
amVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlk
LCBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjpMYXN0VmVyc2lvbikpIHsKLSAgICAgICAgICAgIElu
dGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldE9iamVjdFN0b3Jl
cyk7CisgICAgICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJPUihHZXRPYmplY3RTdG9y
ZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBpdC0+bmV4dCgp
OyAvLyBNYXhpbXVtIGluZGV4IGlkIGFsbG9jYXRlZC4KICAgICAgICAgaWYgKCFjaGVja09iamVj
dFN0b3JlQW5kTWV0YURhdGFUeXBlKGl0LmdldCgpLCBzdG9wS2V5LCBvYmplY3RTdG9yZUlkLCBP
YmplY3RTdG9yZU1ldGFEYXRhS2V5OjpNYXhJbmRleElkKSkgewotICAgICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0T2JqZWN0U3RvcmVzKTsK
KyAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpbnQ2NF90IG1heEluZGV4
SWQgPSBkZWNvZGVJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5kKCkpOwpA
QCAtNjY5LDcgKzY3NCw3IEBAIFZlY3RvcjxJREJPYmplY3RTdG9yZU1ldGFkYXRhPiBJREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlCiAgICAgICAgICAgICAv
LyAoMikgTGF0ZXIsIG51bGwgdnMuIHN0cmluZyB2cy4gYXJyYXkgd2FzIHN0b3JlZCBpbiB0aGUg
a2V5UGF0aCBpdHNlbGYuCiAgICAgICAgICAgICAvLyBTbyB0aGlzIGNoZWNrIGlzIG9ubHkgcmVs
ZXZhbnQgZm9yIHN0cmluZy10eXBlIGtleVBhdGhzLgogICAgICAgICAgICAgaWYgKCFoYXNLZXlQ
YXRoICYmIChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlICYmICFrZXlQ
YXRoLnN0cmluZygpLmlzRW1wdHkoKSkpIHsKLSAgICAgICAgICAgICAgICBJbnRlcm5hbEVycm9y
KElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRPYmplY3RTdG9yZXMpOworICAgICAg
ICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldE9iamVjdFN0b3Jlcyk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWhh
c0tleVBhdGgpCkBAIC02OTcsMTIgKzcwMiwxMiBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGlj
IGJvb2wgc2V0TWF4T2JqZWN0U3RvcmVJZChMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aQog
ICAgIGludDY0X3QgbWF4T2JqZWN0U3RvcmVJZCA9IC0xOwogICAgIGJvb2wgb2sgPSBnZXRNYXhP
YmplY3RTdG9yZUlkKHRyYW5zYWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBtYXhPYmplY3RT
dG9yZUlkKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heE9iamVjdFN0b3JlSWQpOworICAgICAgICBJTlRF
Uk5BTF9SRUFEX0VSUk9SKFNldE1heE9iamVjdFN0b3JlSWQpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgaWYgKG9iamVjdFN0b3JlSWQgPD0gbWF4T2JqZWN0U3RvcmVJZCkg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVDb25zaXN0ZW5j
eUVycm9yKTsKKyAgICAgICAgSU5URVJOQUxfQ09OU0lTVEVOQ1lfRVJST1IoU2V0TWF4T2JqZWN0
U3RvcmVJZCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcHV0SW50KHRyYW5z
YWN0aW9uLCBtYXhPYmplY3RTdG9yZUlkS2V5LCBvYmplY3RTdG9yZUlkKTsKQEAgLTc0NywxMSAr
NzUyLDExIEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGJvb2wgb2sgPSBnZXRTdHJpbmcobGV2ZWxEQlRyYW5zYWN0aW9uLCBPYmplY3RTdG9y
ZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3Rv
cmVNZXRhRGF0YUtleTo6TmFtZSksIG9iamVjdFN0b3JlTmFtZSwgZm91bmQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yRGVsZXRlT2JqZWN0U3RvcmUpOworICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKERlbGV0
ZU9iamVjdFN0b3JlKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZv
dW5kKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZUNvbnNp
c3RlbmN5RXJyb3IpOworICAgICAgICBJTlRFUk5BTF9DT05TSVNURU5DWV9FUlJPUihEZWxldGVP
YmplY3RTdG9yZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTc3OSwxNCAr
Nzg0LDE0IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktleSwg
ZGF0YSwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJM
ZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkKTsKKyAgICAgICAgSU5URVJOQUxf
UkVBRF9FUlJPUihHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgaW50NjRfdCB2ZXJzaW9uOwogICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0
YS5iZWdpbigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXApIHsKLSAgICAgICAg
SW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkKTsK
KyAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCkBAIC04MDMsNyArODA4LDcgQEAgV0FSTl9VTlVTRURfUkVUVVJOIHN0
YXRpYyBib29sIGdldE5ld1ZlcnNpb25OdW1iZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGkKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgYm9vbCBvayA9IGdldEludCh0cmFuc2Fj
dGlvbiwgbGFzdFZlcnNpb25LZXksIGxhc3RWZXJzaW9uLCBmb3VuZCk7CiAgICAgaWYgKCFvaykg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JH
ZXROZXdWZXJzaW9uTnVtYmVyKTsKKyAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihHZXROZXdW
ZXJzaW9uTnVtYmVyKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIWZv
dW5kKQpAQCAtODgwLDcgKzg4NSw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRLZXlHZW5l
cmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qCiAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVH
ZXQoa2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcktleSwgZGF0YSwgZm91bmQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVy
cm9yR2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CisgICAgICAgIElOVEVSTkFMX1JFQURf
RVJST1IoR2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgaWYgKGZvdW5kKQpAQCAtOTQ0LDcgKzk0OSw3IEBAIGJvb2wgSURCQmFj
a2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24qIHRyYW5zCiAKICAgICBib29sIG9rID0gbGV2ZWxEQlRyYW5zYWN0aW9uLT5zYWZlR2V0
KGxldmVsZGJLZXksIGRhdGEsIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvcktleUV4aXN0c0luT2JqZWN0
U3RvcmUpOworICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKEtleUV4aXN0c0luT2JqZWN0U3Rv
cmUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQpCkBAIC05
OTMsNyArOTk4LDcgQEAgVmVjdG9yPElEQkluZGV4TWV0YWRhdGE+IElEQkJhY2tpbmdTdG9yZTo6
Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QKICAgICAgICAgcCA9IEluZGV4
TWV0YURhdGFLZXk6OmRlY29kZShwLCBsaW1pdCwgJm1ldGFEYXRhS2V5KTsKICAgICAgICAgQVNT
RVJUKHApOwogICAgICAgICBpZiAobWV0YURhdGFLZXkubWV0YURhdGFUeXBlKCkgIT0gSW5kZXhN
ZXRhRGF0YUtleTo6TmFtZSkgewotICAgICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERC
QmFja2luZ1N0b3JlUmVhZEVycm9yR2V0SW5kZXhlcyk7CisgICAgICAgICAgICBJTlRFUk5BTF9D
T05TSVNURU5DWV9FUlJPUihHZXRJbmRleGVzKTsKICAgICAgICAgICAgIC8vIFBvc3NpYmxlIHN0
YWxlIG1ldGFkYXRhIGR1ZSB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzg1NTU3IGJ1dCBkb24ndCBm
YWlsIHRoZSBsb2FkLgogICAgICAgICAgICAgaXQtPm5leHQoKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTAwNSwxNCArMTAxMCwxNCBAQCBWZWN0b3I8SURCSW5kZXhNZXRhZGF0YT4gSURC
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdAogCiAg
ICAgICAgIGl0LT5uZXh0KCk7IC8vIHVuaXF1ZSBmbGFnCiAgICAgICAgIGlmICghY2hlY2tJbmRl
eEFuZE1ldGFEYXRhS2V5KGl0LmdldCgpLCBzdG9wS2V5LCBpbmRleElkLCBJbmRleE1ldGFEYXRh
S2V5OjpVbmlxdWUpKSB7Ci0gICAgICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRleGVzKTsKKyAgICAgICAgICAgIElOVEVSTkFMX0NPTlNJ
U1RFTkNZX0VSUk9SKEdldEluZGV4ZXMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgYm9vbCBpbmRleFVuaXF1ZSA9IGRlY29kZUJvb2woaXQtPnZhbHVlKCkuYmVnaW4o
KSwgaXQtPnZhbHVlKCkuZW5kKCkpOwogCiAgICAgICAgIGl0LT5uZXh0KCk7IC8vIGtleVBhdGgK
ICAgICAgICAgaWYgKCFjaGVja0luZGV4QW5kTWV0YURhdGFLZXkoaXQuZ2V0KCksIHN0b3BLZXks
IGluZGV4SWQsIEluZGV4TWV0YURhdGFLZXk6OktleVBhdGgpKSB7Ci0gICAgICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRJbmRleGVzKTsKKyAg
ICAgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKEdldEluZGV4ZXMpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgSURCS2V5UGF0aCBrZXlQYXRoID0gZGVj
b2RlSURCS2V5UGF0aChpdC0+dmFsdWUoKS5iZWdpbigpLCBpdC0+dmFsdWUoKS5lbmQoKSk7CkBA
IC0xMDM2LDE0ICsxMDQxLDE0IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBzZXRN
YXhJbmRleElkKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGluCiAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBnZXRJbnQodHJhbnNhY3Rpb24sIG1heEluZGV4
SWRLZXksIG1heEluZGV4SWQsIGZvdW5kKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclNldE1heEluZGV4SWQpOwor
ICAgICAgICBJTlRFUk5BTF9SRUFEX0VSUk9SKFNldE1heEluZGV4SWQpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghZm91bmQpCiAgICAgICAgIG1heEluZGV4SWQgPSBN
aW5pbXVtSW5kZXhJZDsKIAogICAgIGlmIChpbmRleElkIDw9IG1heEluZGV4SWQpIHsKLSAgICAg
ICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlQ29uc2lzdGVuY3lFcnJvcik7
CisgICAgICAgIElOVEVSTkFMX0NPTlNJU1RFTkNZX0VSUk9SKFNldE1heEluZGV4SWQpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMTM1LDcgKzExNDAsNyBAQCBzdGF0aWMg
Ym9vbCB2ZXJzaW9uRXhpc3RzKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0
X3QgZGF0YWJhc2VJZCwgaQogCiAgICAgYm9vbCBvayA9IHRyYW5zYWN0aW9uLT5zYWZlR2V0KGtl
eSwgZGF0YSwgZXhpc3RzKTsKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvclZlcnNpb25FeGlzdHMpOworICAgICAgICBJ
TlRFUk5BTF9SRUFEX0VSUk9SKFZlcnNpb25FeGlzdHMpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIGlmICghZXhpc3RzKQpAQCAtMTE2NSw3ICsxMTcwLDcgQEAgYm9vbCBJREJC
YWNraW5nU3RvcmU6OmZpbmRLZXlJbkluZGV4KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uLAogICAgICAgICBpbnQ2NF90IHZlcnNpb247CiAgICAgICAgIGNvbnN0IGNo
YXIqIHAgPSBkZWNvZGVWYXJJbnQoaXQtPnZhbHVlKCkuYmVnaW4oKSwgaXQtPnZhbHVlKCkuZW5k
KCksIHZlcnNpb24pOwogICAgICAgICBpZiAoIXApIHsKLSAgICAgICAgICAgIEludGVybmFsRXJy
b3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckZpbmRLZXlJbkluZGV4KTsKKyAgICAg
ICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoRmluZEtleUluSW5kZXgpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZvdW5kRW5jb2RlZFByaW1hcnlLZXku
YXBwZW5kKHAsIGl0LT52YWx1ZSgpLmVuZCgpIC0gcCk7CkBAIC0xMTkzLDcgKzExOTgsNyBAQCBi
b29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYQogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5OwogICAgIGJvb2wgb2sgPSBmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5LCBmb3VuZEVuY29kZWRQcmltYXJ5S2V5
LCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVs
REJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRQcmltYXJ5S2V5VmlhSW5kZXgpOworICAgICAgICBJ
TlRFUk5BTF9SRUFEX0VSUk9SKEdldFByaW1hcnlLZXlWaWFJbmRleCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgaWYgKGZvdW5kKSB7CkBAIC0xMjEyLDcgKzEyMTcsNyBAQCBi
b29sIElEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbgogICAgIFZlY3RvcjxjaGFyPiBmb3VuZEVuY29kZWRQcmlt
YXJ5S2V5OwogICAgIGJvb2wgb2sgPSBmaW5kS2V5SW5JbmRleCh0cmFuc2FjdGlvbiwgZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaW5kZXhLZXksIGZvdW5kRW5jb2RlZFByaW1h
cnlLZXksIGV4aXN0cyk7CiAgICAgaWYgKCFvaykgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JLZXlFeGlzdHNJbkluZGV4KTsKKyAgICAgICAg
SU5URVJOQUxfUkVBRF9FUlJPUihLZXlFeGlzdHNJbkluZGV4KTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICBpZiAoIWV4aXN0cykKQEAgLTE0MTIsNyArMTQxNyw3IEBAIGJvb2wg
T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgT2JqZWN0U3Rv
cmVEYXRhS2V5IG9iamVjdFN0b3JlRGF0YUtleTsKICAgICBrZXlQb3NpdGlvbiA9IE9iamVjdFN0
b3JlRGF0YUtleTo6ZGVjb2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwgJm9iamVjdFN0b3JlRGF0
YUtleSk7CiAgICAgaWYgKCFrZXlQb3NpdGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElE
QkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdyk7CisgICAgICAgIElO
VEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0xNDIxLDcgKzE0MjYsNyBAQCBib29sIE9iamVjdFN0b3JlS2V5Q3Vyc29y
SW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3QgdmVyc2lvbjsKICAgICBjb25zdCBj
aGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3ItPnZhbHVlKCkuYmVn
aW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAgICAgaWYgKCF2YWx1
ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSU5URVJOQUxfUkVBRF9FUlJPUihM
b2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE0NzAs
NyArMTQ3NSw3IEBAIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
CiAgICAgT2JqZWN0U3RvcmVEYXRhS2V5IG9iamVjdFN0b3JlRGF0YUtleTsKICAgICBrZXlQb3Np
dGlvbiA9IE9iamVjdFN0b3JlRGF0YUtleTo6ZGVjb2RlKGtleVBvc2l0aW9uLCBrZXlMaW1pdCwg
Jm9iamVjdFN0b3JlRGF0YUtleSk7CiAgICAgaWYgKCFrZXlQb3NpdGlvbikgewotICAgICAgICBJ
bnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJv
dyk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNDc5LDcgKzE0ODQsNyBAQCBib29sIE9iamVj
dFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3QgdmVyc2lvbjsK
ICAgICBjb25zdCBjaGFyKiB2YWx1ZVBvc2l0aW9uID0gZGVjb2RlVmFySW50KG1faXRlcmF0b3It
PnZhbHVlKCkuYmVnaW4oKSwgbV9pdGVyYXRvci0+dmFsdWUoKS5lbmQoKSwgdmVyc2lvbik7CiAg
ICAgaWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSU5URVJOQUxf
UkVBRF9FUlJPUihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTE1MzgsMTMgKzE1NDMsMTMgQEAgYm9vbCBJbmRleEtleUN1cnNvckltcGw6OmxvYWRD
dXJyZW50Um93KCkKICAgICBpbnQ2NF90IGluZGV4RGF0YVZlcnNpb247CiAgICAgY29uc3QgY2hh
ciogdmFsdWVQb3NpdGlvbiA9IGRlY29kZVZhckludChtX2l0ZXJhdG9yLT52YWx1ZSgpLmJlZ2lu
KCksIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCksIGluZGV4RGF0YVZlcnNpb24pOwogICAgIGlm
ICghdmFsdWVQb3NpdGlvbikgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNr
aW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdyk7CisgICAgICAgIElOVEVSTkFMX1JFQURf
RVJST1IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1ZVBvc2l0aW9uLCBtX2l0ZXJhdG9y
LT52YWx1ZSgpLmVuZCgpLCBtX3ByaW1hcnlLZXkpOwogICAgIGlmICghdmFsdWVQb3NpdGlvbikg
ewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JM
b2FkQ3VycmVudFJvdyk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRS
b3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNTU5LDcgKzE1NjQsNyBA
QCBib29sIEluZGV4S2V5Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3Qg
b2JqZWN0U3RvcmVEYXRhVmVyc2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50
KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwog
ICAgIGlmICghdCkgewotICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3Rv
cmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdyk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1Io
TG9hZEN1cnJlbnRSb3cpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNjI0
LDEyICsxNjI5LDEyIEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAg
ICAgaW50NjRfdCBpbmRleERhdGFWZXJzaW9uOwogICAgIHZhbHVlUG9zaXRpb24gPSBkZWNvZGVW
YXJJbnQodmFsdWVQb3NpdGlvbiwgdmFsdWVMaW1pdCwgaW5kZXhEYXRhVmVyc2lvbik7CiAgICAg
aWYgKCF2YWx1ZVBvc2l0aW9uKSB7Ci0gICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZVJlYWRFcnJvckxvYWRDdXJyZW50Um93KTsKKyAgICAgICAgSU5URVJOQUxfUkVB
RF9FUlJPUihMb2FkQ3VycmVudFJvdyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgdmFsdWVQb3NpdGlvbiA9IGRlY29kZUlEQktleSh2YWx1ZVBvc2l0aW9uLCB2YWx1ZUxpbWl0
LCBtX3ByaW1hcnlLZXkpOwogICAgIGlmICghdmFsdWVQb3NpdGlvbikgewotICAgICAgICBJbnRl
cm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3VycmVudFJvdyk7
CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xNjQ0LDcgKzE2NDksNyBAQCBib29sIEluZGV4Q3Vy
c29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhVmVy
c2lvbjsKICAgICBjb25zdCBjaGFyKiB0ID0gZGVjb2RlVmFySW50KHJlc3VsdC5iZWdpbigpLCBy
ZXN1bHQuZW5kKCksIG9iamVjdFN0b3JlRGF0YVZlcnNpb24pOwogICAgIGlmICghdCkgewotICAg
ICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JMb2FkQ3Vy
cmVudFJvdyk7CisgICAgICAgIElOVEVSTkFMX1JFQURfRVJST1IoTG9hZEN1cnJlbnRSb3cpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>