<?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>48271</bug_id>
          
          <creation_ts>2010-10-25 15:31:19 -0700</creation_ts>
          <short_desc>Support Appkit key bindings and custom key bindings in WebKit2</short_desc>
          <delta_ts>2010-10-27 17:10:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>abecsi</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>kbalazs</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>299134</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-25 15:31:19 -0700</bug_when>
    <thetext>Ensure the keybindings work correctly in WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299148</commentid>
    <comment_count>1</comment_count>
      <attachid>71808</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-25 15:51:52 -0700</bug_when>
    <thetext>Created attachment 71808
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299215</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-25 17:36:45 -0700</bug_when>
    <thetext>Attachment 71808 did not build on qt:
Build output: http://queues.webkit.org/results/4779010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299573</commentid>
    <comment_count>3</comment_count>
      <attachid>71808</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-26 10:42:36 -0700</bug_when>
    <thetext>Comment on attachment 71808
patch

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

One thing not mentioned in the bug or ChangeLog is that there is a race condition here - the application may be in an entirely different state by the time it gets to re-process the Command-key combo. We should be on lookout for user-visible problems caused by that.

Looks good to me. Please address the comments, and Qt build problems.

&gt; WebKit2/UIProcess/WebPageProxy.h:289
&gt; +    // Keyboard handling
&gt; +    void interpretKeyEvent(uint32_t, String&amp;);

These arguments should have names. It&apos;s not at all clear what they are.

&gt; WebKit2/UIProcess/API/mac/PageClientImpl.mm:237
&gt; +        [m_wkView _resentEvent:nativeEvent];

The pattern is that selector name is a verb:

resent (v) feel bitter or indignant about

&gt; WebKit2/UIProcess/API/mac/WKView.mm:90
&gt; +    NSEvent *_resentKeyDownEvent; // We keep here the event when resending it to the application.

Maybe _keyDownEventBeingResent? With that name, the comment seems superfluous, but perhaps you could explain why it needs to be stored for future readers of the code.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:91
&gt; +    NSString* _currentEditingCommand;

Ditto, an explanation of why we need to store this could be helpful. I&apos;m not 100% sure if I understand why this is one command, and not an array.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:314
&gt; +- (BOOL)_handleStyleKeyEquivalent:(NSEvent *)event

You could add a comment about why we handle italic and bold, but not underline here. See &lt;https://bugs.webkit.org/show_bug.cgi?id=24943#c8&gt; and later comments for some discussion, but I think that boils down to &quot;historic reasons&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299577</commentid>
    <comment_count>4</comment_count>
      <attachid>71808</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-26 10:46:14 -0700</bug_when>
    <thetext>Comment on attachment 71808
patch

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

&gt; WebKit2/UIProcess/API/mac/WKView.mm:348
&gt; +    // Pass command-key combos through WebCore if there is a key binding available for
&gt; +    // this event. This lets web pages have a crack at intercepting command-modified keypresses.

Another thing that bothers me is reliance on the Command key - in comments if not in code. Not all menu commands have it - even Safari has Ctrl+Tab, for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299632</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 11:29:45 -0700</bug_when>
    <thetext>&gt; One thing not mentioned in the bug or ChangeLog is that there is a race condition here - the application may be in an entirely different state by the time it gets to re-process the Command-key combo. We should be on lookout for user-visible problems caused by that.

I will add a comment in the ChangeLog and address all the other comments as well as fixing the qt build.

&gt; Ditto, an explanation of why we need to store this could be helpful. I&apos;m not 100% sure if I understand why this is one command, and not an array.
You are correct, this should be an array. I will change this.
&gt; 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:314
&gt; &gt; +- (BOOL)_handleStyleKeyEquivalent:(NSEvent *)event
&gt; 
&gt; You could add a comment about why we handle italic and bold, but not underline here. See &lt;https://bugs.webkit.org/show_bug.cgi?id=24943#c8&gt; and later comments for some discussion, but I think that boils down to &quot;historic reasons&quot;.
I did not think we needed a comment since we were simply reimplementing the existing WebKit behavior, but I can definitely add one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299636</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 11:30:56 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 71808 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71808&amp;action=review
&gt; 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:348
&gt; &gt; +    // Pass command-key combos through WebCore if there is a key binding available for
&gt; &gt; +    // this event. This lets web pages have a crack at intercepting command-modified keypresses.
&gt; 
&gt; Another thing that bothers me is reliance on the Command key - in comments if not in code. Not all menu commands have it - even Safari has Ctrl+Tab, for example.

I copied the comment from WebKit, but you are right, and I&apos;ll change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299656</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-26 11:44:06 -0700</bug_when>
    <thetext>Please don’t break the Qt build.

../../../WebKit2/UIProcess/API/qt/qwkpage.cpp:271: error: cannot allocate an object of abstract type ‘QWKPagePrivate’
../../../WebKit2/UIProcess/API/qt/qwkpage_p.h:37: note:   because the following virtual functions are pure within ‘QWKPagePrivate’:
../../../WebKit2/UIProcess/PageClient.h:62: note: 	virtual void WebKit::PageClient::interceptKeyEvent(const WebKit::NativeWebKeyboardEvent&amp;, WTF::String&amp;)

I guess we’ll need to implement interceptKeyEvent for Qt or figure out why the ifdefs aren’t doing the right thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299681</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-26 12:04:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I guess we’ll need to implement interceptKeyEvent for Qt or figure out why the ifdefs aren’t doing the right thing.

I cc-ed our WebKit2 guys. Could you check this Qt-WebKit2 break?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299684</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-26 12:05:43 -0700</bug_when>
    <thetext>I see now that Alexey already requested that you fix the Qt build problem, and I trust you will do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299801</commentid>
    <comment_count>10</comment_count>
      <attachid>71939</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 14:32:25 -0700</bug_when>
    <thetext>Created attachment 71939
New patch

addressed the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299807</commentid>
    <comment_count>11</comment_count>
      <attachid>71939</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-26 14:41:19 -0700</bug_when>
    <thetext>Comment on attachment 71939
New patch

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

r=me. We&apos;ll likely learn even more about all this while reimplementing input method support!

&gt; WebKit2/UIProcess/API/mac/PageClientImpl.mm:237
&gt; +        [m_wkView _setEventToResend:nativeEvent];

Can we say &quot;_setEventBeingResent&quot;?

&gt; WebKit2/UIProcess/API/mac/WKView.mm:92
&gt; +    NSEvent *_keyDownEventBeingResent; // We keep here the event when resending it to
&gt; +                                       // the application to distinguish the case of a new event from one 
&gt; +                                       // that has been already sent to WebCore.

We usually prefer to have a long comment before code, rather than to have to align it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299808</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-26 14:42:00 -0700</bug_when>
    <thetext>Attachment 71939 did not build on qt:
Build output: http://queues.webkit.org/results/4751028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299812</commentid>
    <comment_count>13</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 14:43:46 -0700</bug_when>
    <thetext>Will do. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299814</commentid>
    <comment_count>14</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 14:45:05 -0700</bug_when>
    <thetext>I noticed that the qt build is still broken. I&apos;ll fix it before landing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299829</commentid>
    <comment_count>15</comment_count>
      <attachid>71945</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-26 15:09:59 -0700</bug_when>
    <thetext>Created attachment 71945
Patch 3

Fixing the qt build (hopefully).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300029</commentid>
    <comment_count>16</comment_count>
      <attachid>71945</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-26 23:43:25 -0700</bug_when>
    <thetext>Comment on attachment 71945
Patch 3

Set r? for EWS bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300035</commentid>
    <comment_count>17</comment_count>
      <attachid>71945</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-10-26 23:55:15 -0700</bug_when>
    <thetext>Comment on attachment 71945
Patch 3

Remove r?, because it can&apos;t be applied now. (WebCore/WebCore.xcodeproj/project.pbxproj)

Could you update to ToT, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300128</commentid>
    <comment_count>18</comment_count>
      <attachid>71945</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-10-27 04:56:36 -0700</bug_when>
    <thetext>Comment on attachment 71945
Patch 3

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

&gt; WebKit2/UIProcess/API/qt/qwkpage_p.h:59
&gt; +    virtual void interceptKeyEvent(const WebKit::NativeWebKeyboardEvent&amp; event, WTF:Vector&lt;WTF:String&gt;&amp; commandName);

Typo. You probably wanted to use scope operators (::) for WTF.
After fixing these the patch also builds on Qt.

Thank you very much for looking after the Qt build issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300689</commentid>
    <comment_count>19</comment_count>
      <attachid>72109</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-27 16:29:38 -0700</bug_when>
    <thetext>Created attachment 72109
Patch4

I found a bug in my previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300704</commentid>
    <comment_count>20</comment_count>
      <attachid>72109</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-27 16:52:33 -0700</bug_when>
    <thetext>Comment on attachment 72109
Patch4

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

&gt; WebCore/dom/KeyboardEvent.h:36
&gt; +        KeypressCommand() { }

I don&apos;t immediately see why a default constructor is now needed. Could you add a comment?

&gt; WebCore/dom/KeyboardEvent.h:38
&gt; +        KeypressCommand(const String&amp; commandName, const String&amp; text) : commandName(commandName), text(text) { ASSERT(commandName == &quot;insertText:&quot; || commandName == &quot;insertText&quot;); }

This is surprising and fragile. How hard would it be to ensure that only one form is seen by KeypressCommand? Unless I&apos;m mistaken, that would be a one byte change.

&gt; WebKit2/UIProcess/WebPageProxy.h:304
&gt; +#if PLATFORM(MAC)
&gt; +    // Keyboard handling
&gt; +    void interpretKeyEvent(uint32_t eventType, Vector&lt;WebCore::KeypressCommand&gt;&amp;);
&gt; +#endif

How do we need to send the event back to application on other platforms for menu shortcut processing?

&gt; WebKit2/UIProcess/API/mac/WKView.mm:324
&gt; +    // This should not be changed, since it could break some Mac applications that
&gt; +    // rely on this inherent behavior.
&gt; +    // See https://bugs.webkit.org/show_bug.cgi?id=24943

That&apos;s a stronger comment than the one made by Darin in bug 24943. I&apos;m not sure which is more accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300705</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-27 16:53:38 -0700</bug_when>
    <thetext>&gt; Could you add a comment?

In ChangeLog, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300710</commentid>
    <comment_count>22</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-27 16:59:21 -0700</bug_when>
    <thetext>&gt; I don&apos;t immediately see why a default constructor is now needed. Could you add a comment?

It is needed for the generated encoder/decoder class. I&apos;ll add a comment in ChangeLog.
&gt; &gt; WebCore/dom/KeyboardEvent.h:38
&gt; &gt; +        KeypressCommand(const String&amp; commandName, const String&amp; text) : commandName(commandName), text(text) { ASSERT(commandName == &quot;insertText:&quot; || commandName == &quot;insertText&quot;); }
&gt; 
&gt; This is surprising and fragile. How hard would it be to ensure that only one form is seen by KeypressCommand? Unless I&apos;m mistaken, that would be a one byte change.

I did it this way to avoid changing WebKit code and I don&apos;t want to pass selector strings to the webprocess. I prefer to keep it this way.

&gt; &gt; WebKit2/UIProcess/WebPageProxy.h:304
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +    // Keyboard handling
&gt; &gt; +    void interpretKeyEvent(uint32_t eventType, Vector&lt;WebCore::KeypressCommand&gt;&amp;);
&gt; &gt; +#endif
&gt; 
&gt; How do we need to send the event back to application on other platforms for menu shortcut processing?

This patch is only about supporting Mac. Other platforms will be supported later.

&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:324
&gt; &gt; +    // This should not be changed, since it could break some Mac applications that
&gt; &gt; +    // rely on this inherent behavior.
&gt; &gt; +    // See https://bugs.webkit.org/show_bug.cgi?id=24943
&gt; 
&gt; That&apos;s a stronger comment than the one made by Darin in bug 24943. I&apos;m not sure which is more accurate.
Me neither. I&apos;ll stick with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300718</commentid>
    <comment_count>23</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-10-27 17:05:37 -0700</bug_when>
    <thetext>Committed revision 70730.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300719</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-10-27 17:10:15 -0700</bug_when>
    <thetext>&gt; I did it this way to avoid changing WebKit code and I don&apos;t want to pass selector strings to the webprocess. I prefer to keep it this way.

Another way to reduce the variance would be changing WebCore code to use command name without the semicolon.

Editor command names start with an upper case letter. This patch introduces a third way to store and pass commands (&quot;insertText:&quot;, &quot;InsertText&quot;, and &quot;insertText&quot;) - I don&apos;t think we had that many before.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71808</attachid>
            <date>2010-10-25 15:51:52 -0700</date>
            <delta_ts>2010-10-26 14:32:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>keybindings.txt</filename>
            <type>text/plain</type>
            <size>26510</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDQ5NSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMTAtMjUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
dXBwb3J0IEFwcGtpdCBrZXkgYmluZGluZ3MgYW5kIGN1c3RvbSBrZXkgYmluZGluZ3MgaW4gV2Vi
S2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgy
NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA3MjM+CisgICAgICAgIAorICAgICAgICBX
ZSBuZWVkIHRvIHN1cHBvcnQgQXBwS2l0IGtleSBiaW5kaW5ncyBhbmQgY3VzdG9tIGtleSBiaW5k
aW5ncyBpbiBXZWJLaXQyLgorICAgICAgICBFdmVyeSBrZXlib2FyZCBldmVudCBpcyBmaXJzdCBz
ZW50IHRvIHRoZSBXZWJQcm9jZXNzIGFuZCB3ZSBpbmZvcm0gQXBwS2l0IHRoYXQKKyAgICAgICAg
d2UgZG9uJ3QgbmVlZCBmdXJ0aGVyIHByb2Nlc3NpbmcuIFdoZW4gdGhlIGV2ZW50IGlzIHByb2Nl
c3NlZCBieSB0aGUgV2ViUHJvY2VzcyBhbmQgbm8gaGFuZGxlciBjb25zdW1lcyBpdCwKKyAgICAg
ICAgd2Ugc2VuZCBhIHN5bmNocm9ub3VzIG1lc3NhZ2UgYmFjayB0byB0aGUgVUkgcHJvY2VzcyB0
byBsZXQgQXBwS2l0IHBlcmZvcm0gdGhlIGtleSBiaW5kaW5ncy4KKyAgICAgICAgVGhpcyBvcGVy
YXRpb24gY2FuIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBlZGl0aW5nIGNvbW1hbmRzIHRvIGV4ZWN1
dGUgb3IgYSBub29wLgorICAgICAgICBUaGUgV2ViUHJvY2VzcyB0aGVuIHJlcGxpZXMgYmFjayB0
byB0aGUgVUkgcHJvY2VzcyB0byBpbmZvcm0gd2hldGhlciBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMg
cmVxdWlyZWQsIGluCisgICAgICAgIHdoaWNoIGNhc2UgdGhlIGV2ZW50IGlzIHNlbnQgYmFjayB0
byB0aGUgYXBwbGljYXRpb24gdG8gYmUgbWFwcGVkLgorICAgICAgICAKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6
aW50ZXJjZXB0S2V5RXZlbnQpOiBQYXNzLXRocm91Z2ggY2FsbCB0byB0aGUgV0tWaWV3LgorICAg
ICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOiBBZGRl
ZCBsb2dpYyB0byByZXNlbmQgdGhlIGV2ZW50IHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSB0
byBZRVMsIG90aGVyd2lzZSBubyBtZW51IHNob3J0Y3V0IGlzIHBlcmZvcm1lZC4KKyAgICAgICAg
KC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1Zp
ZXcgaW5zZXJ0VGV4dDpdKTogQWRkZWQuCisgICAgICAgICgtW1dLVmlldyBfaGFuZGxlU3R5bGVL
ZXlFcXVpdmFsZW50Ol0pOiBBZGRlZCB0byBoYW5kbGUgY29tbWFuZC1CIGFuZCBjb21tYW5kLUkK
KyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBBZGRlZCB0byBpbnRl
cmNlcHQga2V5IGJpbmRpbmcgc2VxdWVuY2VzLgorICAgICAgICAoLVtXS1ZpZXcgX3Jlc2VudEV2
ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX2ludGVyY2VwdEtleUV2ZW50Ol0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9y
Q2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9y
Q2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24pOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbTogTW92
ZWQgaGFuZGxlS2V5Ym9hcmRFdmVudCBhbmQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duIHRvIHRo
ZSBNYWMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmludGVyY2VwdEVkaXRpbmdLZXlib2FyZEV2ZW50KToKKwogMjAxMC0xMC0yNSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gNzA0OTIpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBGaW5kSW5kaWNhdG9yOwogY2xhc3MgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYkVkaXRDb21tYW5kUHJveHk7CitjbGFzcyBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50OwogY2xhc3MgV2ViUG9wdXBNZW51UHJveHk7CiAKIGNsYXNz
IFBhZ2VDbGllbnQgewpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRp
dENvbW1hbmRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3RhdGUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIFN0cmluZyYpID0gMDsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpID0gMDsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JikgPSAwOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiA3MDQ5MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZQogICAgIGRpZFJlY2VpdmVTeW5jV2ViUGFnZVByb3h5TWVzc2Fn
ZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywgcmVwbHkpOwogfQogCit2b2lkIFdl
YlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSwgU3RyaW5nJiBjb21t
YW5kTmFtZSkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmludGVyY2VwdEtleUV2ZW50KG1fa2V5RXZl
bnRRdWV1ZS5maXJzdCgpLCBjb21tYW5kTmFtZSk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDcmVhdGVNYWluRnJhbWUodWludDY0X3QgZnJhbWVJRCkKIHsKICAgICBBU1NFUlQoIW1fbWFp
bkZyYW1lKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3MDQ5MikK
KysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODUsNiArMjg1LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmRGb3JV
bmRvKHVpbnQ2NF90IGNvbW1hbmRJRCwgdWludDMyX3QgZWRpdEFjdGlvbik7CiAgICAgdm9pZCBj
bGVhckFsbEVkaXRDb21tYW5kcygpOwogCisgICAgLy8gS2V5Ym9hcmQgaGFuZGxpbmcKKyAgICB2
b2lkIGludGVycHJldEtleUV2ZW50KHVpbnQzMl90LCBTdHJpbmcmKTsKKyAgICAKICAgICAvLyBG
aW5kLgogICAgIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKGNvbnN0IFN0cmluZyYsIHVpbnQz
Ml90IG1hdGNoQ291bnQpOwogICAgIHZvaWQgc2V0RmluZEluZGljYXRvcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIHNlbGVjdGlvblJlY3QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJl
Y3Q+JiB0ZXh0UmVjdHMsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBjb250ZW50SW1hZ2VI
YW5kbGUsIGJvb2wgZmFkZU91dCk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3MDQ5MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsOSBAQCBt
ZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZEdldFNvdXJjZUZvckZyYW1lKFdURjo6
U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBEaWRSdW5KYXZh
U2NyaXB0SW5NYWluRnJhbWUoV1RGOjpTdHJpbmcgcmVzdWx0U3RyaW5nLCB1aW50NjRfdCBjYWxs
YmFja0lEKQogCisgICAgIyBLZXlib2FyZCBzdXBwb3J0CisgICAgSW50ZXJwcmV0S2V5RXZlbnQo
dWludDMyX3QgdHlwZSkgLT4gKFN0cmluZyBjb21tYW5kTmFtZSkKKyAgICAKICAgICAjIEJhY2tG
b3J3YXJkIG1lc3NhZ2VzLgogICAgIEJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQp
CiAgICAgQmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3MDQ5MikKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7CisgICAgdm9pZCBpbnRlcmNlcHRLZXlF
dmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgU3RyaW5nJiBjb21tYW5k
TmFtZSk7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VT
cGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZs
b2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlz
aW9uIDcwNDkyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIK
ICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCiAKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIK
QEAgLTIxNCw2ICsyMTUsMTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RWRpdENvbW1hbmRT
dGF0ZQogICAgIFttX3drVmlldyBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zy
b21XZWJDb3JlU3RyaW5nKGNvbW1hbmROYW1lKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpuZXdT
dGF0ZV07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmludGVyY2VwdEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBTdHJpbmcmIGNvbW1hbmROYW1lKQorewor
ICAgIGNvbW1hbmROYW1lID0gW21fd2tWaWV3IF9pbnRlcmNlcHRLZXlFdmVudDpldmVudC5uYXRp
dmVFdmVudCgpXTsKK30KKwogRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZp
Y2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFttX3drVmlldyBf
Y29udmVydFRvRGV2aWNlU3BhY2U6cmVjdF07CkBAIC0yMjQsOCArMjMwLDEzIEBAIEZsb2F0UmVj
dCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvVXNlclMKICAgICByZXR1cm4gW21fd2tWaWV3IF9j
b252ZXJ0VG9Vc2VyU3BhY2U6cmVjdF07CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OmRpZE5v
dEhhbmRsZUtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKQordm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCiB7CisgICAgTlNFdmVudCogbmF0aXZlRXZlbnQgPSBldmVudC5uYXRpdmVF
dmVudCgpOworICAgIGlmIChbbmF0aXZlRXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duKSB7CisgICAg
ICAgIFttX3drVmlldyBfcmVzZW50RXZlbnQ6bmF0aXZlRXZlbnRdOworICAgICAgICBbW05TQXBw
bGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dIHNlbmRFdmVudDpuYXRpdmVFdmVudF07CisgICAg
fQogfQogCiBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3Jl
YXRlUG9wdXBNZW51UHJveHkoKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHJldmlzaW9uIDcwNDkyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDggQEAgQGludGVyZmFjZSBXS1ZpZXdEYXRhIDog
TlNPYmplY3QgewogICAgIEhhc2hNYXA8U3RyaW5nLCBFZGl0Q29tbWFuZFN0YXRlPiBfbWVudU1h
cDsKIAogICAgIE93blB0cjxGaW5kSW5kaWNhdG9yV2luZG93PiBfZmluZEluZGljYXRvcldpbmRv
dzsKKyAgICBOU0V2ZW50ICpfcmVzZW50S2V5RG93bkV2ZW50OyAvLyBXZSBrZWVwIGhlcmUgdGhl
IGV2ZW50IHdoZW4gcmVzZW5kaW5nIGl0IHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICBOU1N0cmlu
ZyogX2N1cnJlbnRFZGl0aW5nQ29tbWFuZDsKIH0KIEBlbmQKIApAQCAtMjYwLDcgKzI2Miw3IEBA
ICAgICAgICAgcmV0dXJuIE5POyAvLyBGSVhNRTogV2UgbmVlZCB0byAKICAgICAgICAgcmV0dXJu
IGluZm8ubV9pc0VuYWJsZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIE5POworICAgIHJldHVybiBZ
RVM7CiB9CiAKIC8vIEV2ZW50cwpAQCAtMjk2LDYgKzI5OCw4MCBAQCBFVkVOVF9IQU5ETEVSKHNj
cm9sbFdoZWVsLCBXaGVlbCkKIAogI3VuZGVmIEVWRU5UX0hBTkRMRVIKIAorLSAodm9pZClkb0Nv
bW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNl
bGVjdG9yKG5vb3A6KSkKKyAgICAgICAgX2RhdGEtPl9jdXJyZW50RWRpdGluZ0NvbW1hbmQgPSBA
Im5vb3AiOworICAgIGVsc2UKKyAgICAgICAgX2RhdGEtPl9jdXJyZW50RWRpdGluZ0NvbW1hbmQg
PSBjb21tYW5kTmFtZUZvclNlbGVjdG9yKHNlbGVjdG9yKTsKK30KKworLSAodm9pZClpbnNlcnRU
ZXh0OihpZClzdHJpbmcKK3sKKyAgICBfZGF0YS0+X2N1cnJlbnRFZGl0aW5nQ29tbWFuZCA9IEAi
aW5zZXJ0VGV4dCI7Cit9CisKKy0gKEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgaWYgKChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Rldmlj
ZUluZGVwZW5kZW50TW9kaWZpZXJGbGFnc01hc2spICE9IE5TQ29tbWFuZEtleU1hc2spCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJh
Y3RlcnNdOworICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJiIl0gPT0g
TlNPcmRlcmVkU2FtZSkgeworICAgICAgICBfZGF0YS0+X3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFu
ZCgiVG9nZ2xlQm9sZCIpOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoW3N0
cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaSJdID09IE5TT3JkZXJlZFNhbWUpIHsKKyAg
ICAgICAgX2RhdGEtPl9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZUl0YWxpYyIpOwor
ICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTk87Cit9CisKKy0g
KEJPT0wpcGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRo
ZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBu
ZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQg
cmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAg
ICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2Js
ZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0
b3JlbGVhc2VdOworICAgIAorICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9kYXRh
LT5fcmVzZW50S2V5RG93bkV2ZW50ID09IGV2ZW50KTsKKyAgICBCT09MIHJldCA9IE5POworICAg
IAorICAgIFtfZGF0YS0+X3Jlc2VudEtleURvd25FdmVudCByZWxlYXNlXTsKKyAgICBfZGF0YS0+
X3Jlc2VudEtleURvd25FdmVudCA9IG5pbDsKKyAgICAKKyAgICBbc2VsZiByZXRhaW5dOworICAg
IAorICAgIC8vIFBhc3MgY29tbWFuZC1rZXkgY29tYm9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVy
ZSBpcyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBmb3IKKyAgICAvLyB0aGlzIGV2ZW50LiBUaGlz
IGxldHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBhdCBpbnRlcmNlcHRpbmcgY29tbWFuZC1tb2Rp
ZmllZCBrZXlwcmVzc2VzLgorICAgIC8vIEJ1dCBkb24ndCBkbyBpdCBpZiB3ZSBoYXZlIGFscmVh
ZHkgaGFuZGxlZCB0aGUgZXZlbnQuCisgICAgLy8gUHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBm
YWtlIGV2ZW50IGJlaW5nIHNlbnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNvcmUuCisgICAgaWYg
KCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0g
JiYgc2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0pIHsKKyAgICAgICAgX2Rh
dGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZl
bnQsIHNlbGYpKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgCisgICAgcmV0ID0g
W3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpldmVudF0gfHwgW3N1cGVyIHBlcmZvcm1L
ZXlFcXVpdmFsZW50OmV2ZW50XTsKKyAgICAKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAKKyAg
ICByZXR1cm4gcmV0OworfQorCistICh2b2lkKV9yZXNlbnRFdmVudDooTlNFdmVudCAqKWV2ZW50
Cit7CisgICAgX2RhdGEtPl9yZXNlbnRLZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKK30K
KworLSAoTlNTdHJpbmcgKilfaW50ZXJjZXB0S2V5RXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudAor
eworICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6
dGhlRXZlbnRdXTsKKyAgICAKKyAgICByZXR1cm4gX2RhdGEtPl9jdXJyZW50RWRpdGluZ0NvbW1h
bmQ7Cit9CisKIC0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAogewogICAgIF9kYXRh
LT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2
ZW50LCBzZWxmKSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRl
cm5hbC5oCShyZXZpc2lvbiA3MDQ5MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBAaW50ZXJmYWNl
IFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5n
ICopb2xkVG9vbFRpcCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwOwogLSAodm9pZClfc2V0Q3Vy
c29yOihOU0N1cnNvciAqKWN1cnNvcjsKIC0gKHZvaWQpX3NldFVzZXJJbnRlcmZhY2VJdGVtU3Rh
dGU6KE5TU3RyaW5nICopY29tbWFuZE5hbWUgZW5hYmxlZDooQk9PTClpc0VuYWJsZWQgc3RhdGU6
KGludCluZXdTdGF0ZTsKLQorLSAoTlNTdHJpbmcqKV9pbnRlcmNlcHRLZXlFdmVudDooTlNFdmVu
dCAqKXRoZUV2ZW50OworLSAodm9pZClfcmVzZW50RXZlbnQ6KE5TRXZlbnQgKilldmVudDsKIC0g
KE5TUmVjdClfY29udmVydFRvRGV2aWNlU3BhY2U6KE5TUmVjdClyZWN0OwogLSAoTlNSZWN0KV9j
b252ZXJ0VG9Vc2VyU3BhY2U6KE5TUmVjdClyZWN0OwogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNp
b24gNzA0OTIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpyZWRvKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCisjaWYgIVBMQVRG
T1JNKE1BQykKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVkaXRpbmdLZXlib2Fy
ZEV2ZW50KGV2ZW50KSkKQEAgLTI1NSw2ICsyNTYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6
aGFuZGxlSW5wdXRNZXRob2RLCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgog
CiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQq
IGVsZW1lbnQpCiB7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkVkaXRvckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gNzA0OTIp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVu
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE0IEBACiAKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Fy
Y2hpdmVSZXNvdXJjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9ET01Eb2N1bWVudEludGVybmFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYktp
dC9XZWJSZXNvdXJjZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgogI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCkBAIC01OCw2ICs2MSwx
OCBAQCAtIChXZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2UqKV9jb3JlUmVzb3VyCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCit2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnRlcmNlcHRFZGl0aW5n
S2V5Ym9hcmRFdmVudChldmVudCwgZmFsc2UpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnRlcmNlcHRF
ZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCwgdHJ1ZSkpCisgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworfQorICAgIAogTlNTdHJpbmcgKldlYkVkaXRvckNsaWVudDo6dXNlclZp
c2libGVTdHJpbmcoTlNVUkwgKnVybCkKIHsKICAgICByZXR1cm4gW3VybCBfd2ViX3VzZXJWaXNp
YmxlU3RyaW5nXTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiA3MDQ5MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NTAsNiArNzUwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZQogICAgIHBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2Uoc3Rv
cmUpOwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKIGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGlu
Z0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZ0KQogewogICAgIE5vZGUqIG5vZGUgPSBl
dnQtPnRhcmdldCgpLT50b05vZGUoKTsKQEAgLTc3OSw3ICs3ODAsOCBAQCBib29sIFdlYlBhZ2U6
OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50CiAKICAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigp
LT5pbnNlcnRUZXh0KGV2dC0+a2V5RXZlbnQoKS0+dGV4dCgpLCBldnQpOwogfQotCisjZW5kaWYK
KyAgICAKIFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1aW50NjRfdCBj
b21tYW5kSUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNvbW1hbmRJRCku
Z2V0KCk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA3
MDQ5MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDcgKzEwMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheW91dElmTmVlZGVk
KCk7CiAKICAgICAvLyAtLSBDYWxsZWQgZnJvbSBXZWJDb3JlIGNsaWVudHMuCisjaWYgIVBMQVRG
T1JNKE1BQykKICAgICBib29sIGhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQqKTsKKyNlbmRpZgogICAgIHZvaWQgc2hvdygpOwogICAgIFN0cmluZyB1c2Vy
QWdlbnQoKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkg
Y29uc3Q7CkBAIC0xNTcsNiArMTU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgd2luZG93SXNWaXNp
YmxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dJc1Zpc2libGU7IH0KICAgICBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93RnJhbWU7
IH0KICAgICBib29sIHdpbmRvd0lzRm9jdXNlZCgpIGNvbnN0OworICAgIGJvb2wgaW50ZXJjZXB0
RWRpdGluZ0tleWJvYXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCosIGJvb2wpOwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgIEhXTkQgbmF0aXZlV2luZG93KCkgY29uc3QgeyByZXR1cm4g
bV9uYXRpdmVXaW5kb3c7IH0KICNlbmRpZgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDcwNDkyKQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDggQEAKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAKICNpbmNsdWRlICJXZWJFdmVudC5oIgor
I2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgpAQCAtNDYsMTM5
ICs0OCw1NiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuCiB7CiB9
CiAKLS8vIEZJWE1FOiBFZGl0b3IgY29tbWFuZHMgc2hvdWxkIG5vdCBiZSBoYXJkIGNvZGVkIGFu
ZCBpbnN0ZWFkIHNob3VsZCBjb21lIGZyb20gQXBwS2l0LiAgCi0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBDdHJsS2V5ICAgPSAxIDw8IDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgQWx0S2V5ICAg
ID0gMSA8PCAxOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNoaWZ0S2V5ICA9IDEgPDwgMjsKLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBNZXRhS2V5ICAgPSAxIDw8IDM7Ci0KLS8vIEtleXMgd2l0aCBz
cGVjaWFsIG1lYW5pbmcuIFRoZXNlIHdpbGwgYmUgZGVsZWdhdGVkIHRvIHRoZSBlZGl0b3IgdXNp
bmcKLS8vIHRoZSBleGVjQ29tbWFuZCgpIG1ldGhvZAotc3RydWN0IEtleURvd25FbnRyeSB7Ci0g
ICAgdW5zaWduZWQgdmlydHVhbEtleTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29u
c3QgY2hhciogbmFtZTsKLX07Ci0KLXN0cnVjdCBLZXlQcmVzc0VudHJ5IHsKLSAgICB1bnNpZ25l
ZCBjaGFyQ29kZTsKLSAgICB1bnNpZ25lZCBtb2RpZmllcnM7Ci0gICAgY29uc3QgY2hhciogbmFt
ZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlEb3duRW50cnkga2V5RG93bkVudHJpZXNbXSA9IHsK
LSAgICB7IFZLX0xFRlQsICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZUxlZnQiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTEVGVCwgICAgIFNo
aWZ0S2V5LCAgICAgICAgICAgICJNb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgICAgQWx0S2V5LCAgICAgICAgICAgICAgIk1v
dmVXb3JkTGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0xFRlQsICAgICBBbHRLZXkgfCBTaGlmdEtleSwgICAiTW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICAgIDAsICAgICAgICAg
ICAgICAgICAgICJNb3ZlUmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19SSUdIVCwgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVSaWdodEFu
ZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAg
ICBBbHRLZXksICAgICAgICAgICAgICAiTW92ZVdvcmRSaWdodCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICAgIEFsdEtleSB8IFNoaWZ0S2V5LCAg
ICJNb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19VUCwgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVVcCIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgICBTaGlmdEtl
eSwgICAgICAgICAgICAiTW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgIHsgVktfUFJJT1IsICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlUGFn
ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ET1dO
LCAgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVEb3duIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgICBTaGlmdEtleSwgICAgICAg
ICAgICAiTW92ZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfTkVYVCwgICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlUGFnZURvd25BbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19QUklPUiwgICAgMCwg
ICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlVXAiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92
ZVBhZ2VEb3duIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgeyBW
S19IT01FLCAgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0hPTUUsICAgICBTaGlmdEtleSwg
ICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAg
ICB9LAotICAgIHsgVktfTEVGVCwgICAgIE1ldGFLZXksICAgICAgICAgICAgICJNb3ZlVG9CZWdp
bm5pbmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAg
ICAgTWV0YUtleSB8IFNoaWZ0S2V5LCAgIk1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgICBNZXRhS2V5LCAgICAgICAgICAg
ICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfVVAsICAgICAgIE1ldGFLZXkgfCBTaGlmdEtleSwgICJNb3ZlVG9CZWdpbm5pbmdPZkRv
Y3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAgIH0sCi0KLSAgICB7IFZLX0VORCwgICAgICAwLCAg
ICAgICAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfRU5ELCAgICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3Zl
VG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sCi0gICAgeyBWS19E
T1dOLCAgICAgTWV0YUtleSwgICAgICAgICAgICAgIk1vdmVUb0VuZE9mRG9jdW1lbnQiICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgICBNZXRhS2V5IHwgU2hp
ZnRLZXksICAiTW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICB9
LAotICAgIHsgVktfUklHSFQsICAgIE1ldGFLZXksICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxp
bmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAg
TWV0YUtleSB8IFNoaWZ0S2V5LCAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIg
ICAgICAgICAgICAgfSwKLQotICAgIHsgVktfQkFDSywgICAgIDAsICAgICAgICAgICAgICAgICAg
ICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19CQUNLLCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RFTEVURSwgICAwLCAgICAg
ICAgICAgICAgICAgICAiRGVsZXRlRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgIHsgVktfQkFDSywgICAgIEFsdEtleSwgICAgICAgICAgICAgICJEZWxldGVX
b3JkQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ERUxF
VEUsICAgQWx0S2V5LCAgICAgICAgICAgICAgIkRlbGV0ZVdvcmRGb3J3YXJkIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgJ0InLCAgICAgICAgIEN0cmxLZXksICAgICAg
ICAgICAgICJUb2dnbGVCb2xkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyAnSScsICAgICAgICAgQ3RybEtleSwgICAgICAgICAgICAgIlRvZ2dsZUl0YWxpYyIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgVktfRVNDQVBFLCAg
IDAsICAgICAgICAgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19PRU1fUEVSSU9ELCBDdHJsS2V5LCAgICAgICAgICAg
IkNhbmNlbCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX1RBQiwgICAgICAwLCAgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICAgIFNoaWZ0S2V5
LCAgICAgICAgICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19SRVRVUk4sICAgMCwgICAgICAgICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVS
TiwgICBDdHJsS2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCAgIEFsdEtleSwgICAgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19SRVRVUk4sICAgQWx0S2V5IHwgU2hpZnRLZXksICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgICBTaGlm
dEtleSwgICAgICAgICAgICAiSW5zZXJ0TGluZUJyZWFrIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotCi0gICAgeyAnQycsICAgICAgICAgTWV0YUtleSwgICAgICAgICAgICAgIkNv
cHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdW
JywgICAgICAgICBNZXRhS2V5LCAgICAgICAgICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1gnLCAgICAgICAgIE1ldGFLZXksICAg
ICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyAnQScsICAgICAgICAgTWV0YUtleSwgICAgICAgICAgICAgIlNlbGVjdEFsbCIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0lOU0VSVCwg
ICBDdHJsS2V5LCAgICAgICAgICAgICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfSU5TRVJULCAgIFNoaWZ0S2V5LCAgICAgICAgICAg
ICJQYXN0ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19ERUxFVEUsICAgU2hpZnRLZXksICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdaJywgICAgICAgICBNZXRhS2V5
LCAgICAgICAgICAgICAiVW5kbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LAotICAgIHsgJ1onLCAgICAgICAgIE1ldGFLZXkgfCBTaGlmdEtleSwgICJSZWRvIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi19OwotCi1zdGF0aWMg
Y29uc3QgS2V5UHJlc3NFbnRyeSBrZXlQcmVzc0VudHJpZXNbXSA9IHsKLSAgICB7ICdcdCcsICAg
ICAgICAwLCAgICAgICAgICAgICAgICAgICAiSW5zZXJ0VGFiIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1x0JywgICAgICAgIFNoaWZ0S2V5LCAgICAgICAg
ICAgICJJbnNlcnRCYWNrdGFiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyAnXHInLCAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgICAgICBDdHJs
S2V5LCAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgJ1xyJywgICAgICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJJbnNl
cnRMaW5lQnJlYWsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHIn
LCAgICAgICAgQWx0S2V5LCAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgICAgICBBbHRLZXkgfCBTaGlm
dEtleSwgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotfTsKLQotY29uc3QgY2hhciogV2ViUGFnZTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgS2V5
Ym9hcmRFdmVudCogZXZ0KQorLy8gRklYTUU6IG5lZWQgdG8gYWRkIHN1cHBvcnQgZm9yIGlucHV0
IG1ldGhvZHMKKyAgICAKK2Jvb2wgV2ViUGFnZTo6aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXZl
bnQoS2V5Ym9hcmRFdmVudCogZXZ0LCBib29sIHNob3VsZFNhdmVDb21tYW5kKQogeworICAgIE5v
ZGUqIG5vZGUgPSBldnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBBU1NFUlQobm9kZSk7Cisg
ICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBBU1NFUlQo
ZnJhbWUpOworICAgIAogICAgIGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQg
PSBldnQtPmtleUV2ZW50KCk7Ci0gICAgQVNTRVJUKGtleUV2ZW50KTsKLQotICAgIHN0YXRpYyBI
YXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlEb3duQ29tbWFuZHNNYXAgPSAwOwotICAgIHN0
YXRpYyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+KiBrZXlQcmVzc0NvbW1hbmRzTWFwID0gMDsK
LQotICAgIGlmICgha2V5RG93bkNvbW1hbmRzTWFwKSB7Ci0gICAgICAgIGtleURvd25Db21tYW5k
c01hcCA9IG5ldyBIYXNoTWFwPGludCwgY29uc3QgY2hhcio+OwotICAgICAgICBrZXlQcmVzc0Nv
bW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IChzaXplb2Yoa2V5RG93bkVudHJpZXMpIC8gc2l6ZW9mKGtl
eURvd25FbnRyaWVzWzBdKSk7IGkrKykgewotICAgICAgICAgICAga2V5RG93bkNvbW1hbmRzTWFw
LT5zZXQoa2V5RG93bkVudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5RG93bkVudHJpZXNb
aV0udmlydHVhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleURv
d25FbnRyaWVzW2ldLm5hbWUpOworICAgIGlmICgha2V5RXZlbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldnQt
PmtleXByZXNzQ29tbWFuZHMoKTsKKyAgICBib29sIGhhc0tleXByZXNzQ29tbWFuZCA9ICFjb21t
YW5kcy5pc0VtcHR5KCk7CisgICAgCisgICAgYm9vbCBldmVudFdhc0hhbmRsZWQgPSBmYWxzZTsK
KyAgICAKKyAgICBpZiAoc2hvdWxkU2F2ZUNvbW1hbmQgJiYgIWhhc0tleXByZXNzQ29tbWFuZCkg
eworICAgICAgICBTdHJpbmcgY29tbWFuZE5hbWU7ICAgICAgICAKKyAgICAgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkludGVycHJldEtleUV2ZW50KGtleUV2ZW50LT50eXBlKCkpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkludGVycHJldEtleUV2ZW50OjpSZXBseShjb21tYW5kTmFtZSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Bh
Z2VJRCwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFjb21tYW5kTmFtZS5pc051bGwoKSAmJiBjb21tYW5kTmFt
ZSAhPSAibm9vcCIpCisgICAgICAgICAgICBldnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQo
S2V5cHJlc3NDb21tYW5kKGNvbW1hbmROYW1lKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6
ZV90IHNpemUgPSBjb21tYW5kcy5zaXplKCk7CisgICAgICAgIC8vIEFyZSB0aGVyZSBjb21tYW5k
cyB0aGF0IHdvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYgZXhlY3V0ZWQgdmlhIEVk
aXRvcj8KKyAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24g
YWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxl
YXZlIGl0IHVwb24gV2ViQ29yZQorICAgICAgICAvLyB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1t
ZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3Mg
ZXZlbnQgYmUgZ2VuZXJhdGVkCisgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBU
YWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCisgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRpb25D
b21tYW5kcyA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kc1tp
XS5jb21tYW5kTmFtZSkuaXNUZXh0SW5zZXJ0aW9uKCkpCisgICAgICAgICAgICAgICAgaGF2ZVRl
eHRJbnNlcnRpb25Db21tYW5kcyA9IHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgKHNpemVvZihrZXlQcmVzc0VudHJpZXMpIC8gc2l6ZW9mKGtleVBy
ZXNzRW50cmllc1swXSkpOyBpKyspIHsKLSAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAt
PnNldChrZXlQcmVzc0VudHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVz
W2ldLmNoYXJDb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVBy
ZXNzRW50cmllc1tpXS5uYW1lKTsKKyAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1h
bmRzIHx8IGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChjb21tYW5kc1tpXS5jb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dCIpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFy
YWN0ZXJzIGFzIHRoZXkgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAgICAg
ICAgICAgICAgICAgICBpZiAoZXZ0LT5jaGFyQ29kZSgpIDwgJyAnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRs
ZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCks
IGV2dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIChm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLmlzU3VwcG9y
dGVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBmcmFtZS0+
ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLmV4ZWN1dGUoZXZ0KTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIHVuc2lnbmVkIG1vZGlmaWVy
cyA9IDA7Ci0gICAgaWYgKGtleUV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBtb2RpZmllcnMg
fD0gU2hpZnRLZXk7Ci0gICAgaWYgKGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IEFsdEtleTsKLSAgICBpZiAoa2V5RXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgbW9k
aWZpZXJzIHw9IEN0cmxLZXk7Ci0gICAgaWYgKGtleUV2ZW50LT5tZXRhS2V5KCkpCi0gICAgICAg
IG1vZGlmaWVycyB8PSBNZXRhS2V5OwotCi0gICAgaWYgKGtleUV2ZW50LT50eXBlKCkgPT0gUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIGludCBtYXBLZXkgPSBt
b2RpZmllcnMgPDwgMTYgfCBldnQtPmtleUNvZGUoKTsKLSAgICAgICAgcmV0dXJuIG1hcEtleSA/
IGtleURvd25Db21tYW5kc01hcC0+Z2V0KG1hcEtleSkgOiAwOwotICAgIH0KLQotICAgIGludCBt
YXBLZXkgPSBtb2RpZmllcnMgPDwgMTYgfCBldnQtPmNoYXJDb2RlKCk7Ci0gICAgcmV0dXJuIG1h
cEtleSA/IGtleVByZXNzQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKKyAgICByZXR1cm4g
ZXZlbnRXYXNIYW5kbGVkOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2Nyb2xsKFBhZ2UqIHBh
Z2UsIFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KQo=
</data>
<flag name="review"
          id="61933"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="62056"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71939</attachid>
            <date>2010-10-26 14:32:25 -0700</date>
            <delta_ts>2010-10-27 16:29:38 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>keybindings2.txt</filename>
            <type>text/plain</type>
            <size>28080</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA3MDU3NCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIzOSw2ICsyMTIzOSw3IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0
OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwog
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25S
ZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTEwLTI2ICBFbnJp
Y2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZKG9vcHMhKS4KKworICAgICAgICBTdXBwb3J0IEFwcGtpdCBrZXkgYmluZGluZ3MgYW5kIGN1
c3RvbSBrZXkgYmluZGluZ3MgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA3
MjM+CisgICAgICAgIAorICAgICAgICBXZSBuZWVkIHRvIHN1cHBvcnQgQXBwS2l0IGtleSBiaW5k
aW5ncyBhbmQgY3VzdG9tIGtleSBiaW5kaW5ncyBpbiBXZWJLaXQyLgorICAgICAgICBFdmVyeSBr
ZXlib2FyZCBldmVudCBpcyBmaXJzdCBzZW50IHRvIHRoZSBXZWJQcm9jZXNzIGFuZCB3ZSBpbmZv
cm0gQXBwS2l0IHRoYXQKKyAgICAgICAgd2UgZG9uJ3QgbmVlZCBmdXJ0aGVyIHByb2Nlc3Npbmcu
IFdoZW4gdGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBieSB0aGUgV2ViUHJvY2VzcyBhbmQgbm8gaGFu
ZGxlciBjb25zdW1lcyBpdCwKKyAgICAgICAgd2Ugc2VuZCBhIHN5bmNocm9ub3VzIG1lc3NhZ2Ug
YmFjayB0byB0aGUgVUkgcHJvY2VzcyB0byBsZXQgQXBwS2l0IHBlcmZvcm0gdGhlIGtleSBiaW5k
aW5ncy4KKyAgICAgICAgVGhpcyBvcGVyYXRpb24gY2FuIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBl
ZGl0aW5nIGNvbW1hbmRzIHRvIGV4ZWN1dGUgb3IgYSBub29wLgorICAgICAgICBUaGUgV2ViUHJv
Y2VzcyB0aGVuIHJlcGxpZXMgYmFjayB0byB0aGUgVUkgcHJvY2VzcyB0byBpbmZvcm0gd2hldGhl
ciBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQsIGluCisgICAgICAgIHdoaWNoIGNhc2Ug
dGhlIGV2ZW50IGlzIHNlbnQgYmFjayB0byB0aGUgYXBwbGljYXRpb24gdG8gYmUgbWFwcGVkLgor
ICAgICAgICBUaGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbjogaW4gY2Fz
ZSB0aGUgV2ViUHJvY2VzcyBpcyB2ZXJ5IHNsb3cgdG8gcHJvY2VzcyB0aGUga2V5IGV2ZW50cywg
dGhlIFVJCisgICAgICAgIHByb2Nlc3MgY291bGQgYmUgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVu
dCBzdGF0ZSB3aGVuIHRoZSBldmVudCBpcyBiZWluZyByZXNlbnQgKGZvciBleGFtcGxlIGl0IG1p
Z2h0IG5vdCBoYXZlIHRoZQorICAgICAgICBrZXlib2FyZCBmb2N1cyBhbnltb3JlKSBhbmQgdGhl
IGNvbW1hbmQgY291bGQgYmUgbG9zdC4gV2Ugc2hvdWxkIGxvb2sgb3V0IGZvciB1c2VyIGV4cGVy
aWVuY2UgaW1wYWN0LgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aW50ZXJjZXB0S2V5RXZlbnQp
OiBQYXNzLXRocm91Z2ggY2FsbCB0byB0aGUgV0tWaWV3LgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOiBBZGRlZCBsb2dpYyB0byByZXNlbmQg
dGhlIGV2ZW50IHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVt
Ol0pOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSB0byBZRVMsIG90aGVyd2lzZSBu
byBtZW51IHNob3J0Y3V0IGlzIHBlcmZvcm1lZC4KKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFu
ZEJ5U2VsZWN0b3I6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpdKTog
QWRkZWQuCisgICAgICAgICgtW1dLVmlldyBfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50Ol0pOiBB
ZGRlZCB0byBoYW5kbGUgY29tbWFuZC1CIGFuZCBjb21tYW5kLUkKKyAgICAgICAgKC1bV0tWaWV3
IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBBZGRlZCB0byBpbnRlcmNlcHQga2V5IGJpbmRpbmcg
c2VxdWVuY2VzLgorICAgICAgICAoLVtXS1ZpZXcgX3Jlc2VudEV2ZW50Ol0pOgorICAgICAgICAo
LVtXS1ZpZXcgX2ludGVyY2VwdEtleUV2ZW50Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNs
aWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1
dE1ldGhvZEtleWRvd24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbTogTW92ZWQgaGFuZGxlS2V5Ym9hcmRF
dmVudCBhbmQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duIHRvIHRoZSBNYWMgc3BlY2lmaWMgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmludGVyY2VwdEVkaXRpbmdL
ZXlib2FyZEV2ZW50KToKKwogMjAxMC0xMC0yNiAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIEZpbmRJbmRpY2F0b3I7CiBjbGFzcyBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKK2NsYXNzIE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQ7CiBjbGFzcyBXZWJQb3B1cE1lbnVQcm94eTsKIAogY2xhc3MgUGFnZUNsaWVudCB7CkBA
IC01OCw3ICs1OSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29t
bWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSkgPSAwOwotCisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiwgVmVjdG9yPFN0cmluZz4mKSA9IDA7CisjZW5kaWYKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRv
VXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpID0gMDsKIApJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCw2ICs1OTgsMTEgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZQogICAgIGRpZFJlY2VpdmVT
eW5jV2ViUGFnZVByb3h5TWVzc2FnZShjb25uZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywg
cmVwbHkpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQodWludDMy
X3QgdHlwZSwgVmVjdG9yPFN0cmluZz4mIGNvbW1hbmRzTGlzdCkKK3sKKyAgICBtX3BhZ2VDbGll
bnQtPmludGVyY2VwdEtleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBjb21tYW5kc0xp
c3QpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQpCiB7CiAgICAgQVNTRVJUKCFtX21haW5GcmFtZSk7CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kRm9yVW5kbyh1aW50NjRfdCBjb21tYW5kSUQsIHVp
bnQzMl90IGVkaXRBY3Rpb24pOwogICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKIAor
ICAgIC8vIEtleWJvYXJkIGhhbmRsaW5nCisgICAgdm9pZCBpbnRlcnByZXRLZXlFdmVudCh1aW50
MzJfdCBldmVudFR5cGUsIFZlY3RvcjxTdHJpbmc+Jik7CisgICAgCiAgICAgLy8gRmluZC4KICAg
ICB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRj
aENvdW50KTsKICAgICB2b2lkIHNldEZpbmRJbmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4
dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBi
b29sIGZhZGVPdXQpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDkgQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRHZXRTb3VyY2VGb3JGcmFtZShXVEY6OlN0cmluZyBy
ZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRGlkUnVuSmF2YVNjcmlwdElu
TWFpbkZyYW1lKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkK
IAorICAgICMgS2V5Ym9hcmQgc3VwcG9ydAorICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90
IHR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBjb21tYW5kTmFtZSkKKyAgICAKICAgICAjIEJhY2tG
b3J3YXJkIG1lc3NhZ2VzLgogICAgIEJhY2tGb3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQp
CiAgICAgQmFja0ZvcndhcmRHb1RvSXRlbSh1aW50NjRfdCBpdGVtSUQpCkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiA3MDU3NCkKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsNiArNTgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIGludGVy
Y2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8
U3RyaW5nPiYgY29tbWFuZE5hbWUpOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3Qg
Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW1wb3J0ICJOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgogCiAjaW1wb3J0ICJG
aW5kSW5kaWNhdG9yLmgiCkBAIC0yMTQsNiArMjE1LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
OnNldEVkaXRDb21tYW5kU3RhdGUKICAgICBbbV93a1ZpZXcgX3NldFVzZXJJbnRlcmZhY2VJdGVt
U3RhdGU6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjb21tYW5kTmFtZSkgZW5hYmxlZDppc0Vu
YWJsZWQgc3RhdGU6bmV3U3RhdGVdOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjppbnRlcmNl
cHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFN0
cmluZz4mIGNvbW1hbmRzTGlzdCkKK3sKKyAgICBjb21tYW5kc0xpc3QgPSBbbV93a1ZpZXcgX2lu
dGVyY2VwdEtleUV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCldOworfQorCiBGbG9hdFJlY3QgUGFn
ZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKQEAg
LTIyNCw4ICsyMzAsMTMgQEAgRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2Vy
UwogICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKIH0KIAot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYpCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWROb3RIYW5kbGVLZXlFdmVu
dChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKIHsKKyAgICBOU0V2ZW50KiBu
YXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50KCk7CisgICAgaWYgKFtuYXRpdmVFdmVudCB0
eXBlXSA9PSBOU0tleURvd24pIHsKKyAgICAgICAgW21fd2tWaWV3IF9zZXRFdmVudFRvUmVzZW5k
Om5hdGl2ZUV2ZW50XTsKKyAgICAgICAgW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9u
XSBzZW5kRXZlbnQ6bmF0aXZlRXZlbnRdOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxXZWJQb3B1
cE1lbnVQcm94eT4gUGFnZUNsaWVudEltcGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KCkKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
NywxMCBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAgICAgSGFzaE1hcDxT
dHJpbmcsIEVkaXRDb21tYW5kU3RhdGU+IF9tZW51TWFwOwogCiAgICAgT3duUHRyPEZpbmRJbmRp
Y2F0b3JXaW5kb3c+IF9maW5kSW5kaWNhdG9yV2luZG93OworICAgIE5TRXZlbnQgKl9rZXlEb3du
RXZlbnRCZWluZ1Jlc2VudDsgLy8gV2Uga2VlcCBoZXJlIHRoZSBldmVudCB3aGVuIHJlc2VuZGlu
ZyBpdCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFw
cGxpY2F0aW9uIHRvIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIG9mIGEgbmV3IGV2ZW50IGZyb20gb25l
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgYmVl
biBhbHJlYWR5IHNlbnQgdG8gV2ViQ29yZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBfY29tbWFuZHNM
aXN0OwogfQogQGVuZAogCkBAIC0yNjAsNyArMjY0LDcgQEAgICAgICAgICByZXR1cm4gTk87IC8v
IEZJWE1FOiBXZSBuZWVkIHRvIAogICAgICAgICByZXR1cm4gaW5mby5tX2lzRW5hYmxlZDsKICAg
ICB9CiAKLSAgICByZXR1cm4gTk87CisgICAgcmV0dXJuIFlFUzsKIH0KIAogLy8gRXZlbnRzCkBA
IC0yOTYsNiArMzAwLDg2IEBAIEVWRU5UX0hBTkRMRVIoc2Nyb2xsV2hlZWwsIFdoZWVsKQogCiAj
dW5kZWYgRVZFTlRfSEFORExFUgogCistICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgoreworICAgIGlmIChzZWxlY3RvciAhPSBAc2VsZWN0b3Iobm9vcDopKQorICAgICAg
ICBfZGF0YS0+X2NvbW1hbmRzTGlzdC5hcHBlbmQoY29tbWFuZE5hbWVGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOworfQorCistICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZworeworICAgIF9kYXRh
LT5fY29tbWFuZHNMaXN0LmFwcGVuZCgiaW5zZXJ0VGV4dCIpOworfQorCistIChCT09MKV9oYW5k
bGVTdHlsZUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmICgoW2V2ZW50
IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRlcGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAh
PSBOU0NvbW1hbmRLZXlNYXNrKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgLy8gSGVy
ZSB3ZSBzcGVjaWFsIGNhc2UgY21kK2IgYW5kIGNtZCtpIGJ1dCBub3QgY21kK3UsIGZvciBoaXN0
b3JpYyByZWFzb24uCisgICAgLy8gVGhpcyBzaG91bGQgbm90IGJlIGNoYW5nZWQsIHNpbmNlIGl0
IGNvdWxkIGJyZWFrIHNvbWUgTWFjIGFwcGxpY2F0aW9ucyB0aGF0CisgICAgLy8gcmVseSBvbiB0
aGlzIGluaGVyZW50IGJlaGF2aW9yLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5NDMKKyAgICAKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2
ZW50IGNoYXJhY3RlcnNdOworICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6
QCJiIl0gPT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICBfZGF0YS0+X3BhZ2UtPmV4ZWN1dGVF
ZGl0Q29tbWFuZCgiVG9nZ2xlQm9sZCIpOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAg
ICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaSJdID09IE5TT3JkZXJlZFNh
bWUpIHsKKyAgICAgICAgX2RhdGEtPl9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZUl0
YWxpYyIpOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTk87
Cit9CisKKy0gKEJPT0wpcGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAorewor
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2ls
bCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZl
bnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxl
YXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2lu
ZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJl
dGFpbl0gYXV0b3JlbGVhc2VdOworICAgIAorICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3Jl
ID0gKF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPT0gZXZlbnQpOworICAgIEJPT0wg
cmV0ID0gTk87CisgICAgCisgICAgW19kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgcmVs
ZWFzZV07CisgICAgX2RhdGEtPl9rZXlEb3duRXZlbnRCZWluZ1Jlc2VudCA9IG5pbDsKKyAgICAK
KyAgICBbc2VsZiByZXRhaW5dOworICAgIAorICAgIC8vIFBhc3Mga2V5IGNvbWJvcyB0aHJvdWdo
IFdlYkNvcmUgaWYgdGhlcmUgaXMgYSBrZXkgYmluZGluZyBhdmFpbGFibGUgZm9yCisgICAgLy8g
dGhpcyBldmVudC4gVGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZlIGEgY3JhY2sgYXQgaW50ZXJjZXB0
aW5nIGtleS1tb2RpZmllZCBrZXlwcmVzc2VzLgorICAgIC8vIEJ1dCBkb24ndCBkbyBpdCBpZiB3
ZSBoYXZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZXZlbnQuCisgICAgLy8gUHJlc3NpbmcgRXNjIHJl
c3VsdHMgaW4gYSBmYWtlIGV2ZW50IGJlaW5nIHNlbnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNv
cmUuCisgICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1
cnJlbnRFdmVudF0gJiYgc2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0pIHsK
KyAgICAgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQoZXZlbnQsIHNlbGYpKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAg
CisgICAgcmV0ID0gW3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpldmVudF0gfHwgW3N1
cGVyIHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsKKyAgICAKKyAgICBbc2VsZiByZWxlYXNl
XTsKKyAgICAKKyAgICByZXR1cm4gcmV0OworfQorCistICh2b2lkKV9zZXRFdmVudFRvUmVzZW5k
OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBfZGF0YS0+X2tleURvd25FdmVudEJlaW5nUmVzZW50
ID0gW2V2ZW50IHJldGFpbl07Cit9CisKKy0gKFZlY3RvcjxTdHJpbmc+JilfaW50ZXJjZXB0S2V5
RXZlbnQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIF9kYXRhLT5fY29tbWFuZHNMaXN0LmNs
ZWFyKCk7CisgICAgLy8gaW50ZXJwcmV0S2V5RXZlbnRzIHdpbGwgdHJpZ2dlciBvbmUgb3IgbW9y
ZSBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yIG9yIHNldFRleHQKKyAgICAvLyB0aGF0IHdp
bGwgcG9wdWxhdGUgdGhlIGNvbW1hbmRzTGlzdCB2ZWN0b3IuCisgICAgW3NlbGYgaW50ZXJwcmV0
S2V5RXZlbnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDp0aGVFdmVudF1dOworICAgIAorICAg
IHJldHVybiBfZGF0YS0+X2NvbW1hbmRzTGlzdDsKK30KKwogLSAodm9pZClrZXlVcDooTlNFdmVu
dCAqKXRoZUV2ZW50CiB7CiAgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQodGhlRXZlbnQsIHNlbGYpKTsKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDcwNTc0KQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX3Rv
b2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRUb29sVGlwIHRvOihOU1N0cmluZyAqKW5l
d1Rvb2xUaXA7CiAtICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yOwogLSAodm9p
ZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcgKiljb21tYW5kTmFtZSBlbmFi
bGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRlOwotCistIChWZWN0b3I8U3Ry
aW5nPiYpX2ludGVyY2VwdEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQ7CistICh2b2lkKV9z
ZXRFdmVudFRvUmVzZW5kOihOU0V2ZW50ICopZXZlbnQ7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0Rl
dmljZVNwYWNlOihOU1JlY3QpcmVjdDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihO
U1JlY3QpcmVjdDsKIApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDcwNTc0KQorKysgV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NSw2ICsyNDUsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVkbygpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorI2lmICFQTEFURk9STShNQUMpCiB2b2lkIFdlYkVk
aXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsK
ICAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCkpCkBAIC0y
NTUsNiArMjU2LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kSwog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogewpJbmRleDog
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDcwNTc0KQorKysgV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDExICszNCwxNCBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUg
IldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RP
TURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NRG9jdW1l
bnRJbnRlcm5hbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViUmVzb3VyY2UuaD4KICNp
bmNsdWRlIDxXZWJLaXQvV2ViTlNVUkxFeHRyYXMuaD4KICNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fU05PV19MRU9QQVJEKQpAQCAtNTgsNiArNjEsMTggQEAgLSAoV2ViQ29yZTo6QXJj
aGl2ZVJlc291cmNlKilfY29yZVJlc291cgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQp
Cit7CisgICAgaWYgKG1fcGFnZS0+aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQs
IGZhbHNlKSkKKyAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCit7CisgICAgaWYgKG1fcGFnZS0+aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXZlbnQo
ZXZlbnQsIHRydWUpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKyAg
ICAKIE5TU3RyaW5nICpXZWJFZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICp1
cmwpCiB7CiAgICAgcmV0dXJuIFt1cmwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CkluZGV4OiBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzA1NzQpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzYwLDYgKzc2MCw3IEBAIFdlYkluc3BlY3RvciogV2ViUGFnZTo6aW5zcGVjdG9yKCkKICAgICBy
ZXR1cm4gbV9pbnNwZWN0b3IuZ2V0KCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oTUFDKQogYm9vbCBX
ZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgpOwpAQCAtNzg5LDcgKzc5
MCw4IEBAIGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQKIAogICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCks
IGV2dCk7CiB9Ci0KKyNlbmRpZgorICAgIAogV2ViRWRpdENvbW1hbmQqIFdlYlBhZ2U6OndlYkVk
aXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKIHsKICAgICByZXR1cm4gbV9lZGl0Q29tbWFu
ZE1hcC5nZXQoY29tbWFuZElEKS5nZXQoKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHJldmlzaW9uIDcwNTc0KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDkgQEAgcHVibGljOgogICAg
IHZvaWQgbGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNvcmUg
Y2xpZW50cy4KKyNpZiAhUExBVEZPUk0oTUFDKQogICAgIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJv
YXJkRXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOworI2VuZGlmCiAgICAgdm9pZCBzaG93
KCk7CiAgICAgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3Qg
d2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKQEAgLTE2MCw2ICsxNjIsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB3aW5kb3dJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd0lzVmlzaWJs
ZTsgfQogICAgIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV93aW5kb3dGcmFtZTsgfQogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7
CisgICAgYm9vbCBpbnRlcmNlcHRFZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2Fy
ZEV2ZW50KiwgYm9vbCk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgSFdORCBuYXRpdmVXaW5k
b3coKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZVdpbmRvdzsgfQogI2VuZGlmCkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gNzA1
NzQpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKIAogI2lu
Y2x1ZGUgIldlYkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2Fy
ZEV2ZW50Lmg+CkBAIC00NiwxMzkgKzQ4LDU2IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVm
ZXJlbmNlc0RpZENoYW4KIHsKIH0KIAotLy8gRklYTUU6IEVkaXRvciBjb21tYW5kcyBzaG91bGQg
bm90IGJlIGhhcmQgY29kZWQgYW5kIGluc3RlYWQgc2hvdWxkIGNvbWUgZnJvbSBBcHBLaXQuICAK
LQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEN0cmxLZXkgICA9IDEgPDwgMDsKLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBBbHRLZXkgICAgPSAxIDw8IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgU2hp
ZnRLZXkgID0gMSA8PCAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1ldGFLZXkgICA9IDEgPDwg
MzsKLQotLy8gS2V5cyB3aXRoIHNwZWNpYWwgbWVhbmluZy4gVGhlc2Ugd2lsbCBiZSBkZWxlZ2F0
ZWQgdG8gdGhlIGVkaXRvciB1c2luZwotLy8gdGhlIGV4ZWNDb21tYW5kKCkgbWV0aG9kCi1zdHJ1
Y3QgS2V5RG93bkVudHJ5IHsKLSAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5OwotICAgIHVuc2lnbmVk
IG1vZGlmaWVyczsKLSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQotc3RydWN0IEtleVByZXNz
RW50cnkgewotICAgIHVuc2lnbmVkIGNoYXJDb2RlOwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsK
LSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQotc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBr
ZXlEb3duRW50cmllc1tdID0gewotICAgIHsgVktfTEVGVCwgICAgIDAsICAgICAgICAgICAgICAg
ICAgICJNb3ZlTGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19MRUZULCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVMZWZ0QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgICBBbHRL
ZXksICAgICAgICAgICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfTEVGVCwgICAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgICJNb3Zl
V29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19S
SUdIVCwgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgICBTaGlmdEtleSwgICAg
ICAgICAgICAiTW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICB9
LAotICAgIHsgVktfUklHSFQsICAgIEFsdEtleSwgICAgICAgICAgICAgICJNb3ZlV29yZFJpZ2h0
IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAg
QWx0S2V5IHwgU2hpZnRLZXksICAgIk1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAi
TW92ZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfVVAsICAgICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19QUklPUiwgICAgU2hpZnRLZXks
ICAgICAgICAgICAgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX0RPV04sICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZURvd24i
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwg
ICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ORVhULCAgICAgU2hpZnRLZXksICAgICAgICAg
ICAgIk1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX1BSSU9SLCAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTkVYVCwgICAgIDAsICAg
ICAgICAgICAgICAgICAgICJNb3ZlUGFnZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICB7IFZLX0hPTUUsICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92
ZVRvQmVnaW5uaW5nT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
SE9NRSwgICAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgICAgTWV0YUtleSwgICAg
ICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX0xFRlQsICAgICBNZXRhS2V5IHwgU2hpZnRLZXksICAiTW92ZVRvQmVnaW5u
aW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAotICAgIHsgVktfVVAsICAgICAg
IE1ldGFLZXksICAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19VUCwgICAgICAgTWV0YUtleSB8IFNoaWZ0S2V5LCAg
Ik1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgfSwKLQotICAg
IHsgVktfRU5ELCAgICAgIDAsICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19FTkQsICAgICAgU2hpZnRL
ZXksICAgICAgICAgICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAg
ICAgICAgfSwKLSAgICB7IFZLX0RPV04sICAgICBNZXRhS2V5LCAgICAgICAgICAgICAiTW92ZVRv
RW5kT2ZEb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9X
TiwgICAgIE1ldGFLZXkgfCBTaGlmdEtleSwgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5
U2VsZWN0aW9uIiAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAgTWV0YUtleSwgICAgICAg
ICAgICAgIk1vdmVUb0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1JJR0hULCAgICBNZXRhS2V5IHwgU2hpZnRLZXksICAiTW92ZVRvRW5kT2ZMaW5l
QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICB9LAotCi0gICAgeyBWS19CQUNLLCAgICAg
MCwgICAgICAgICAgICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX0JBQ0ssICAgICBTaGlmdEtleSwgICAgICAgICAgICAi
RGVsZXRlQmFja3dhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfREVMRVRFLCAgIDAsICAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgICAgQWx0S2V5LCAg
ICAgICAgICAgICAgIkRlbGV0ZVdvcmRCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX0RFTEVURSwgICBBbHRLZXksICAgICAgICAgICAgICAiRGVsZXRlV29y
ZEZvcndhcmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgeyAnQicsICAg
ICAgICAgQ3RybEtleSwgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgICBDdHJsS2V5LCAgICAgICAg
ICAgICAiVG9nZ2xlSXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
Ci0gICAgeyBWS19FU0NBUEUsICAgMCwgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX09FTV9QRVJJT0Qs
IEN0cmxLZXksICAgICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgVktfVEFCLCAgICAgIDAsICAgICAgICAgICAgICAgICAgICJJ
bnNlcnRUYWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBW
S19UQUIsICAgICAgU2hpZnRLZXksICAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgICAwLCAgICAgICAg
ICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAotICAgIHsgVktfUkVUVVJOLCAgIEN0cmxLZXksICAgICAgICAgICAgICJJbnNlcnROZXds
aW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4s
ICAgQWx0S2V5LCAgICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgICBBbHRLZXkgfCBTaGlmdEtleSwg
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgVktfUkVUVVJOLCAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJJbnNlcnRMaW5lQnJlYWsiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICB7ICdDJywgICAgICAgICBNZXRh
S2V5LCAgICAgICAgICAgICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgJ1YnLCAgICAgICAgIE1ldGFLZXksICAgICAgICAgICAgICJQYXN0
ZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnWCcs
ICAgICAgICAgTWV0YUtleSwgICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdBJywgICAgICAgICBNZXRhS2V5LCAgICAg
ICAgICAgICAiU2VsZWN0QWxsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgIHsgVktfSU5TRVJULCAgIEN0cmxLZXksICAgICAgICAgICAgICJDb3B5IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19JTlNFUlQsICAg
U2hpZnRLZXksICAgICAgICAgICAgIlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX0RFTEVURSwgICBTaGlmdEtleSwgICAgICAgICAgICAi
Q3V0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
J1onLCAgICAgICAgIE1ldGFLZXksICAgICAgICAgICAgICJVbmRvIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnWicsICAgICAgICAgTWV0YUtleSB8
IFNoaWZ0S2V5LCAgIlJlZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNzRW50cmllc1td
ID0gewotICAgIHsgJ1x0JywgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIi
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAgICAg
ICAgU2hpZnRLZXksICAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAgICAgICAwLCAgICAgICAgICAgICAgICAg
ICAiSW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAg
IHsgJ1xyJywgICAgICAgIEN0cmxLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgICAgICAgU2hpZnRL
ZXksICAgICAgICAgICAgIkluc2VydExpbmVCcmVhayIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7ICdccicsICAgICAgICBBbHRLZXksICAgICAgICAgICAgICAiSW5zZXJ0
TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywg
ICAgICAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi19OwotCi1jb25zdCBjaGFyKiBXZWJQYWdlOjppbnRlcnBy
ZXRLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50KiBldnQpCisvLyBGSVhNRTogbmVlZCB0byBh
ZGQgc3VwcG9ydCBmb3IgaW5wdXQgbWV0aG9kcworICAgIAorYm9vbCBXZWJQYWdlOjppbnRlcmNl
cHRFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQsIGJvb2wgc2hvdWxkU2F2
ZUNvbW1hbmQpCiB7CisgICAgTm9kZSogbm9kZSA9IGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgpOwor
ICAgIEFTU0VSVChub2RlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5m
cmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CisgICAgCiAgICAgY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50KiBrZXlFdmVudCA9IGV2dC0+a2V5RXZlbnQoKTsKLSAgICBBU1NFUlQoa2V5RXZl
bnQpOwotCi0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21t
YW5kc01hcCA9IDA7Ci0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVBy
ZXNzQ29tbWFuZHNNYXAgPSAwOwotCi0gICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsKLSAg
ICAgICAga2V5RG93bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47
Ci0gICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNo
YXIqPjsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKHNpemVvZihrZXlEb3du
RW50cmllcykgLyBzaXplb2Yoa2V5RG93bkVudHJpZXNbMF0pKTsgaSsrKSB7Ci0gICAgICAgICAg
ICBrZXlEb3duQ29tbWFuZHNNYXAtPnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwg
MTYgfCBrZXlEb3duRW50cmllc1tpXS52aXJ0dWFsS2V5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisgICAgaWYgKCFrZXlFdmVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0NvbW1h
bmQ+JiBjb21tYW5kcyA9IGV2dC0+a2V5cHJlc3NDb21tYW5kcygpOworICAgIGJvb2wgaGFzS2V5
cHJlc3NDb21tYW5kID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKKyAgICAKKyAgICBib29sIGV2ZW50
V2FzSGFuZGxlZCA9IGZhbHNlOworICAgIAorICAgIGlmIChzaG91bGRTYXZlQ29tbWFuZCAmJiAh
aGFzS2V5cHJlc3NDb21tYW5kKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGNvbW1hbmRzTGlz
dDsgICAgICAgIAorICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQoa2V5
RXZlbnQtPnR5cGUoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZl
bnQ6OlJlcGx5KGNvbW1hbmRzTGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2VJRCwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6
Tm9UaW1lb3V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb21tYW5kc0xpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBldnQt
PmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKGNvbW1hbmRzTGlzdFtp
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBzaXplID0gY29tbWFuZHMuc2l6ZSgp
OworICAgICAgICAvLyBBcmUgdGhlcmUgY29tbWFuZHMgdGhhdCB3b3VsZCBqdXN0IGNhdXNlIHRl
eHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3I/CisgICAgICAgIC8vIFdlYktpdCBk
b2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyB0
aGV5IHNob3VsZCBiZSB0cmVhdGVkLCBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUKKyAgICAg
ICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNo
YW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAorICAgICAg
ICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgor
ICAgICAgICBib29sIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmcmFt
ZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLmlzVGV4dEluc2Vy
dGlvbigpKQorICAgICAgICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSB0cnVl
OwogICAgICAgICB9Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IChzaXplb2Yo
a2V5UHJlc3NFbnRyaWVzKSAvIHNpemVvZihrZXlQcmVzc0VudHJpZXNbMF0pKTsgaSsrKSB7Ci0g
ICAgICAgICAgICBrZXlQcmVzc0NvbW1hbmRzTWFwLT5zZXQoa2V5UHJlc3NFbnRyaWVzW2ldLm1v
ZGlmaWVycyA8PCAxNiB8IGtleVByZXNzRW50cmllc1tpXS5jaGFyQ29kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlQcmVzc0VudHJpZXNbaV0ubmFtZSk7CisgICAg
ICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBrZXlFdmVudC0+dHlwZSgpID09
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhcikgeworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0u
Y29tbWFuZE5hbWUgPT0gImluc2VydFRleHQiKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IGluc2VydCBudWxsIG9yIGNvbnRyb2wgY2hhcmFjdGVycyBhcyB0aGV5IGNhbiByZXN1bHQg
aW4gdW5leHBlY3RlZCBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV2dC0+Y2hh
ckNvZGUoKSA8ICcgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gZnJhbWUtPmVkaXRvcigpLT5pbnNl
cnRUZXh0KGV2dC0+a2V5RXZlbnQoKS0+dGV4dCgpLCBldnQpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNv
bW1hbmRzW2ldLmNvbW1hbmROYW1lKS5pc1N1cHBvcnRlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnRXYXNIYW5kbGVkID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmRz
W2ldLmNvbW1hbmROYW1lKS5leGVjdXRlKGV2dCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMgPSAwOwotICAgIGlmIChrZXlFdmVudC0+
c2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChrZXlF
dmVudC0+YWx0S2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBBbHRLZXk7Ci0gICAgaWYgKGtl
eUV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBDdHJsS2V5OwotICAgIGlm
IChrZXlFdmVudC0+bWV0YUtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gTWV0YUtleTsKLQot
ICAgIGlmIChrZXlFdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5
RG93bikgewotICAgICAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5rZXlD
b2RlKCk7Ci0gICAgICAgIHJldHVybiBtYXBLZXkgPyBrZXlEb3duQ29tbWFuZHNNYXAtPmdldCht
YXBLZXkpIDogMDsKLSAgICB9Ci0KLSAgICBpbnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwg
ZXZ0LT5jaGFyQ29kZSgpOwotICAgIHJldHVybiBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFw
LT5nZXQobWFwS2V5KSA6IDA7CisgICAgcmV0dXJuIGV2ZW50V2FzSGFuZGxlZDsKIH0KIAogc3Rh
dGljIGlubGluZSB2b2lkIHNjcm9sbChQYWdlKiBwYWdlLCBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkK
</data>
<flag name="review"
          id="62093"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71945</attachid>
            <date>2010-10-26 15:09:59 -0700</date>
            <delta_ts>2010-10-27 16:29:38 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>keybindings3.txt</filename>
            <type>text/plain</type>
            <size>29345</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA3MDU3NCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTIzOSw2ICsyMTIzOSw3IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0
OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwog
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJCWRldmVsb3BtZW50UmVn
aW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25S
ZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEwLTEwLTI2ICBFbnJp
Y2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZKG9vcHMhKS4KKworICAgICAgICBTdXBwb3J0IEFwcGtpdCBrZXkgYmluZGluZ3MgYW5kIGN1
c3RvbSBrZXkgYmluZGluZ3MgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgyNzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA3
MjM+CisgICAgICAgIAorICAgICAgICBXZSBuZWVkIHRvIHN1cHBvcnQgQXBwS2l0IGtleSBiaW5k
aW5ncyBhbmQgY3VzdG9tIGtleSBiaW5kaW5ncyBpbiBXZWJLaXQyLgorICAgICAgICBFdmVyeSBr
ZXlib2FyZCBldmVudCBpcyBmaXJzdCBzZW50IHRvIHRoZSBXZWJQcm9jZXNzIGFuZCB3ZSBpbmZv
cm0gQXBwS2l0IHRoYXQKKyAgICAgICAgd2UgZG9uJ3QgbmVlZCBmdXJ0aGVyIHByb2Nlc3Npbmcu
IFdoZW4gdGhlIGV2ZW50IGlzIHByb2Nlc3NlZCBieSB0aGUgV2ViUHJvY2VzcyBhbmQgbm8gaGFu
ZGxlciBjb25zdW1lcyBpdCwKKyAgICAgICAgd2Ugc2VuZCBhIHN5bmNocm9ub3VzIG1lc3NhZ2Ug
YmFjayB0byB0aGUgVUkgcHJvY2VzcyB0byBsZXQgQXBwS2l0IHBlcmZvcm0gdGhlIGtleSBiaW5k
aW5ncy4KKyAgICAgICAgVGhpcyBvcGVyYXRpb24gY2FuIHJlc3VsdCBpbiBvbmUgb3IgbW9yZSBl
ZGl0aW5nIGNvbW1hbmRzIHRvIGV4ZWN1dGUgb3IgYSBub29wLgorICAgICAgICBUaGUgV2ViUHJv
Y2VzcyB0aGVuIHJlcGxpZXMgYmFjayB0byB0aGUgVUkgcHJvY2VzcyB0byBpbmZvcm0gd2hldGhl
ciBmdXJ0aGVyIHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQsIGluCisgICAgICAgIHdoaWNoIGNhc2Ug
dGhlIGV2ZW50IGlzIHNlbnQgYmFjayB0byB0aGUgYXBwbGljYXRpb24gdG8gYmUgbWFwcGVkLgor
ICAgICAgICBUaGVyZSBpcyBhIHBvdGVudGlhbCBmb3IgYSByYWNlIGNvbmRpdGlvbjogaW4gY2Fz
ZSB0aGUgV2ViUHJvY2VzcyBpcyB2ZXJ5IHNsb3cgdG8gcHJvY2VzcyB0aGUga2V5IGV2ZW50cywg
dGhlIFVJCisgICAgICAgIHByb2Nlc3MgY291bGQgYmUgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVu
dCBzdGF0ZSB3aGVuIHRoZSBldmVudCBpcyBiZWluZyByZXNlbnQgKGZvciBleGFtcGxlIGl0IG1p
Z2h0IG5vdCBoYXZlIHRoZQorICAgICAgICBrZXlib2FyZCBmb2N1cyBhbnltb3JlKSBhbmQgdGhl
IGNvbW1hbmQgY291bGQgYmUgbG9zdC4gV2Ugc2hvdWxkIGxvb2sgb3V0IGZvciB1c2VyIGV4cGVy
aWVuY2UgaW1wYWN0LgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aW50ZXJjZXB0S2V5RXZlbnQp
OiBQYXNzLXRocm91Z2ggY2FsbCB0byB0aGUgV0tWaWV3LgorICAgICAgICAoV2ViS2l0OjpQYWdl
Q2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5RXZlbnQpOiBBZGRlZCBsb2dpYyB0byByZXNlbmQg
dGhlIGV2ZW50IHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVt
Ol0pOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSB0byBZRVMsIG90aGVyd2lzZSBu
byBtZW51IHNob3J0Y3V0IGlzIHBlcmZvcm1lZC4KKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFu
ZEJ5U2VsZWN0b3I6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpdKTog
QWRkZWQuCisgICAgICAgICgtW1dLVmlldyBfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50Ol0pOiBB
ZGRlZCB0byBoYW5kbGUgY29tbWFuZC1CIGFuZCBjb21tYW5kLUkKKyAgICAgICAgKC1bV0tWaWV3
IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBBZGRlZCB0byBpbnRlcmNlcHQga2V5IGJpbmRpbmcg
c2VxdWVuY2VzLgorICAgICAgICAoLVtXS1ZpZXcgX3Jlc2VudEV2ZW50Ol0pOgorICAgICAgICAo
LVtXS1ZpZXcgX2ludGVyY2VwdEtleUV2ZW50Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
Y3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNs
aWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1
dE1ldGhvZEtleWRvd24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbTogTW92ZWQgaGFuZGxlS2V5Ym9hcmRF
dmVudCBhbmQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duIHRvIHRoZSBNYWMgc3BlY2lmaWMgaW1w
bGVtZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmludGVyY2VwdEVkaXRpbmdL
ZXlib2FyZEV2ZW50KToKKwogMjAxMC0xMC0yNiAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIGNsYXNzIEZpbmRJbmRpY2F0b3I7CiBjbGFzcyBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94eTsKK2NsYXNzIE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQ7CiBjbGFzcyBXZWJQb3B1cE1lbnVQcm94eTsKIAogY2xhc3MgUGFnZUNsaWVudCB7CkBA
IC01OCw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29t
bWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSkgPSAwOwotCisgICAgdmlydHVhbCB2
b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0
b3I8U3RyaW5nPiYpID0gMDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0
VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVh
bCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpID0gMDsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5OCw2ICs1OTgsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2Vp
dmVTeW5jTWVzc2FnZQogICAgIGRpZFJlY2VpdmVTeW5jV2ViUGFnZVByb3h5TWVzc2FnZShjb25u
ZWN0aW9uLCBtZXNzYWdlSUQsIGFyZ3VtZW50cywgcmVwbHkpOwogfQogCit2b2lkIFdlYlBhZ2VQ
cm94eTo6aW50ZXJwcmV0S2V5RXZlbnQodWludDMyX3QgdHlwZSwgVmVjdG9yPFN0cmluZz4mIGNv
bW1hbmRzTGlzdCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmludGVyY2VwdEtleUV2ZW50KG1fa2V5
RXZlbnRRdWV1ZS5maXJzdCgpLCBjb21tYW5kc0xpc3QpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlkQ3JlYXRlTWFpbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpCiB7CiAgICAgQVNTRVJUKCFt
X21haW5GcmFtZSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNzA1
NzQpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjkwLDYgKzI5MCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWdpc3RlckVkaXRDb21tYW5k
Rm9yVW5kbyh1aW50NjRfdCBjb21tYW5kSUQsIHVpbnQzMl90IGVkaXRBY3Rpb24pOwogICAgIHZv
aWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKIAorICAgIC8vIEtleWJvYXJkIGhhbmRsaW5nCisg
ICAgdm9pZCBpbnRlcnByZXRLZXlFdmVudCh1aW50MzJfdCBldmVudFR5cGUsIFZlY3RvcjxTdHJp
bmc+Jik7CisgICAgCiAgICAgLy8gRmluZC4KICAgICB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hl
cyhjb25zdCBTdHJpbmcmLCB1aW50MzJfdCBtYXRjaENvdW50KTsKICAgICB2b2lkIHNldEZpbmRJ
bmRpY2F0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYgdGV4dFJlY3RzLCBjb25zdCBTaGFyZWRNZW1vcnk6
OkhhbmRsZSYgY29udGVudEltYWdlSGFuZGxlLCBib29sIGZhZGVPdXQpOwpJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzA1NzQpCisr
KyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDYgKzc4LDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRH
ZXRTb3VyY2VGb3JGcmFtZShXVEY6OlN0cmluZyByZXN1bHRTdHJpbmcsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiAgICAgRGlkUnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKFdURjo6U3RyaW5nIHJlc3Vs
dFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkKIAorICAgICMgS2V5Ym9hcmQgc3VwcG9ydAor
ICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBj
b21tYW5kTmFtZSkKKyAgICAKICAgICAjIEJhY2tGb3J3YXJkIG1lc3NhZ2VzLgogICAgIEJhY2tG
b3J3YXJkQWRkSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAgQmFja0ZvcndhcmRHb1RvSXRlbSh1
aW50NjRfdCBpdGVtSUQpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRp
dENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21t
YW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBz
dGF0ZSk7CisgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8U3RyaW5nPiYgY29tbWFuZE5hbWUpOwogCiAg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29u
dmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwpJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA3MDU3NCkK
KysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCisjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQ
YWdlQ2xpZW50SW1wbC5oIgogCiAjaW1wb3J0ICJGaW5kSW5kaWNhdG9yLmgiCkBAIC0yMTQsNiAr
MjE1LDExIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEVkaXRDb21tYW5kU3RhdGUKICAgICBb
bV93a1ZpZXcgX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6bnNTdHJpbmdGcm9tV2ViQ29yZVN0
cmluZyhjb21tYW5kTmFtZSkgZW5hYmxlZDppc0VuYWJsZWQgc3RhdGU6bmV3U3RhdGVdOwogfQog
Cit2b2lkIFBhZ2VDbGllbnRJbXBsOjppbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFN0cmluZz4mIGNvbW1hbmRzTGlzdCkKK3sKKyAg
ICBjb21tYW5kc0xpc3QgPSBbbV93a1ZpZXcgX2ludGVyY2VwdEtleUV2ZW50OmV2ZW50Lm5hdGl2
ZUV2ZW50KCldOworfQorCiBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0Rldmlj
ZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9j
b252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKQEAgLTIyNCw4ICsyMzAsMTMgQEAgRmxvYXRSZWN0
IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9Vc2VyUwogICAgIHJldHVybiBbbV93a1ZpZXcgX2Nv
bnZlcnRUb1VzZXJTcGFjZTpyZWN0XTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkTm90
SGFuZGxlS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiBldmVudCkKIHsKKyAgICBOU0V2ZW50KiBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2
ZW50KCk7CisgICAgaWYgKFtuYXRpdmVFdmVudCB0eXBlXSA9PSBOU0tleURvd24pIHsKKyAgICAg
ICAgW21fd2tWaWV3IF9zZXRFdmVudEJlaW5nUmVzZW50Om5hdGl2ZUV2ZW50XTsKKyAgICAgICAg
W1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBzZW5kRXZlbnQ6bmF0aXZlRXZlbnRd
OworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUGFnZUNsaWVudElt
cGw6OmNyZWF0ZVBvcHVwTWVudVByb3h5KCkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMSBAQCBAaW50ZXJmYWNlIFdLVmll
d0RhdGEgOiBOU09iamVjdCB7CiAgICAgSGFzaE1hcDxTdHJpbmcsIEVkaXRDb21tYW5kU3RhdGU+
IF9tZW51TWFwOwogCiAgICAgT3duUHRyPEZpbmRJbmRpY2F0b3JXaW5kb3c+IF9maW5kSW5kaWNh
dG9yV2luZG93OworICAgIC8vIFdlIGtlZXAgaGVyZSB0aGUgZXZlbnQgd2hlbiByZXNlbmRpbmcg
aXQgdG8KKyAgICAvLyB0aGUgYXBwbGljYXRpb24gdG8gZGlzdGluZ3Vpc2ggdGhlIGNhc2Ugb2Yg
YSBuZXcgZXZlbnQgZnJvbSBvbmUgCisgICAgLy8gdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHNlbnQg
dG8gV2ViQ29yZS4KKyAgICBOU0V2ZW50ICpfa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQ7CisgICAg
VmVjdG9yPFN0cmluZz4gX2NvbW1hbmRzTGlzdDsKIH0KIEBlbmQKIApAQCAtMjYwLDcgKzI2NSw3
IEBAICAgICAgICAgcmV0dXJuIE5POyAvLyBGSVhNRTogV2UgbmVlZCB0byAKICAgICAgICAgcmV0
dXJuIGluZm8ubV9pc0VuYWJsZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIE5POworICAgIHJldHVy
biBZRVM7CiB9CiAKIC8vIEV2ZW50cwpAQCAtMjk2LDYgKzMwMSw4NiBAQCBFVkVOVF9IQU5ETEVS
KHNjcm9sbFdoZWVsLCBXaGVlbCkKIAogI3VuZGVmIEVWRU5UX0hBTkRMRVIKIAorLSAodm9pZClk
b0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoc2VsZWN0b3IgIT0g
QHNlbGVjdG9yKG5vb3A6KSkKKyAgICAgICAgX2RhdGEtPl9jb21tYW5kc0xpc3QuYXBwZW5kKGNv
bW1hbmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0b3IpKTsKK30KKworLSAodm9pZClpbnNlcnRUZXh0
OihpZClzdHJpbmcKK3sKKyAgICBfZGF0YS0+X2NvbW1hbmRzTGlzdC5hcHBlbmQoImluc2VydFRl
eHQiKTsKK30KKworLSAoQk9PTClfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICBpZiAoKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TRGV2aWNlSW5kZXBl
bmRlbnRNb2RpZmllckZsYWdzTWFzaykgIT0gTlNDb21tYW5kS2V5TWFzaykKKyAgICAgICAgcmV0
dXJuIE5POworICAgIAorICAgIC8vIEhlcmUgd2Ugc3BlY2lhbCBjYXNlIGNtZCtiIGFuZCBjbWQr
aSBidXQgbm90IGNtZCt1LCBmb3IgaGlzdG9yaWMgcmVhc29uLgorICAgIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBjaGFuZ2VkLCBzaW5jZSBpdCBjb3VsZCBicmVhayBzb21lIE1hYyBhcHBsaWNhdGlv
bnMgdGhhdAorICAgIC8vIHJlbHkgb24gdGhpcyBpbmhlcmVudCBiZWhhdmlvci4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTQzCisgICAgCisg
ICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJzXTsKKyAgICBpZiAoW3N0cmlu
ZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiYiJdID09IE5TT3JkZXJlZFNhbWUpIHsKKyAgICAg
ICAgX2RhdGEtPl9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlRvZ2dsZUJvbGQiKTsKKyAgICAg
ICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZTpAImkiXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgIF9kYXRhLT5fcGFnZS0+ZXhl
Y3V0ZUVkaXRDb21tYW5kKCJUb2dnbGVJdGFsaWMiKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIE5POworfQorCistIChCT09MKXBlcmZvcm1LZXlFcXVpdmFs
ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVz
cG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAor
ICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJl
dGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQg
cHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBw
S2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICAKKyAgICBC
T09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfZGF0YS0+X2tleURvd25FdmVudEJlaW5nUmVz
ZW50ID09IGV2ZW50KTsKKyAgICBCT09MIHJldCA9IE5POworICAgIAorICAgIFtfZGF0YS0+X2tl
eURvd25FdmVudEJlaW5nUmVzZW50IHJlbGVhc2VdOworICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50
QmVpbmdSZXNlbnQgPSBuaWw7CisgICAgCisgICAgW3NlbGYgcmV0YWluXTsKKyAgICAKKyAgICAv
LyBQYXNzIGtleSBjb21ib3MgdGhyb3VnaCBXZWJDb3JlIGlmIHRoZXJlIGlzIGEga2V5IGJpbmRp
bmcgYXZhaWxhYmxlIGZvcgorICAgIC8vIHRoaXMgZXZlbnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMg
aGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGluZyBrZXktbW9kaWZpZWQga2V5cHJlc3Nlcy4KKyAg
ICAvLyBCdXQgZG9uJ3QgZG8gaXQgaWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50
LgorICAgIC8vIFByZXNzaW5nIEVzYyByZXN1bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50
IC0gZG9uJ3QgcGFzcyBpdCB0byBXZWJDb3JlLgorICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJD
b3JlICYmIGV2ZW50ID09IFtOU0FwcCBjdXJyZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdp
bmRvd10gZmlyc3RSZXNwb25kZXJdKSB7CisgICAgICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5
Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2ZW50LCBzZWxmKSk7CisgICAgICAg
IHJldHVybiBZRVM7CisgICAgfQorICAgIAorICAgIHJldCA9IFtzZWxmIF9oYW5kbGVTdHlsZUtl
eUVxdWl2YWxlbnQ6ZXZlbnRdIHx8IFtzdXBlciBwZXJmb3JtS2V5RXF1aXZhbGVudDpldmVudF07
CisgICAgCisgICAgW3NlbGYgcmVsZWFzZV07CisgICAgCisgICAgcmV0dXJuIHJldDsKK30KKwor
LSAodm9pZClfc2V0RXZlbnRCZWluZ1Jlc2VudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2Rh
dGEtPl9rZXlEb3duRXZlbnRCZWluZ1Jlc2VudCA9IFtldmVudCByZXRhaW5dOworfQorCistIChW
ZWN0b3I8U3RyaW5nPiYpX2ludGVyY2VwdEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQKK3sK
KyAgICBfZGF0YS0+X2NvbW1hbmRzTGlzdC5jbGVhcigpOworICAgIC8vIGludGVycHJldEtleUV2
ZW50cyB3aWxsIHRyaWdnZXIgb25lIG9yIG1vcmUgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rv
ciBvciBzZXRUZXh0CisgICAgLy8gdGhhdCB3aWxsIHBvcHVsYXRlIHRoZSBjb21tYW5kc0xpc3Qg
dmVjdG9yLgorICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhP
YmplY3Q6dGhlRXZlbnRdXTsKKyAgICAKKyAgICByZXR1cm4gX2RhdGEtPl9jb21tYW5kc0xpc3Q7
Cit9CisKIC0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKil0aGVFdmVudAogewogICAgIF9kYXRhLT5f
cGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50
LCBzZWxmKSk7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBAaW50ZXJmYWNlIFdL
VmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICop
b2xkVG9vbFRpcCB0bzooTlNTdHJpbmcgKiluZXdUb29sVGlwOwogLSAodm9pZClfc2V0Q3Vyc29y
OihOU0N1cnNvciAqKWN1cnNvcjsKIC0gKHZvaWQpX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6
KE5TU3RyaW5nICopY29tbWFuZE5hbWUgZW5hYmxlZDooQk9PTClpc0VuYWJsZWQgc3RhdGU6KGlu
dCluZXdTdGF0ZTsKLQorLSAoVmVjdG9yPFN0cmluZz4mKV9pbnRlcmNlcHRLZXlFdmVudDooTlNF
dmVudCAqKXRoZUV2ZW50OworLSAodm9pZClfc2V0RXZlbnRCZWluZ1Jlc2VudDooTlNFdmVudCAq
KWV2ZW50OwogLSAoTlNSZWN0KV9jb252ZXJ0VG9EZXZpY2VTcGFjZTooTlNSZWN0KXJlY3Q7CiAt
IChOU1JlY3QpX2NvbnZlcnRUb1VzZXJTcGFjZTooTlNSZWN0KXJlY3Q7CiAKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJKHJldmlzaW9uIDcwNTc0KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3
LDEwIEBAIHZvaWQgUVdLUGFnZVByaXZhdGU6OmRpZE5vdEhhbmRsZUtleUV2ZW4KIHsKIH0KIAor
dm9pZCBRV0tQYWdlUHJpdmF0ZTo6aW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCYsIFZlY3RvcjxTdHJpbmc+JikKK3sKK30KKwogUGFzc1JlZlB0cjxXZWJQb3B1
cE1lbnVQcm94eT4gUVdLUGFnZVByaXZhdGU6OmNyZWF0ZVBvcHVwTWVudVByb3h5KCkKIHsKICAg
ICByZXR1cm4gV2ViUG9wdXBNZW51UHJveHlRdDo6Y3JlYXRlKCk7CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3a3BhZ2VfcC5oCShyZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2twYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5n
JiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29t
bWFuZChQYXNzUmVmUHRyPFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgV2ViS2l0
OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgV1RGOlZlY3RvcjxXVEY6U3RyaW5nPiYg
Y29tbWFuZE5hbWUpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0Rl
dmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2l0OjpO
YXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNzA1NzQp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpyZWRvKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykK
IHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQq
IGV2ZW50KQogewogICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2
ZW50KSkKQEAgLTI1NSw2ICsyNTYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5w
dXRNZXRob2RLCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KKyNlbmRpZgogCiB2b2lkIFdl
YkVkaXRvckNsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQp
CiB7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRv
ckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE0IEBACiAKICNpbmNsdWRlICJXZWJQYWdlLmgi
CiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNv
dXJjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9ET01Eb2N1bWVudEludGVybmFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJSZXNv
dXJjZS5oPgogI2luY2x1ZGUgPFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgogI2lmICFkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpCkBAIC01OCw2ICs2MSwxOCBAQCAtIChX
ZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2UqKV9jb3JlUmVzb3VyCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCit2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50KiBldmVudCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnRlcmNlcHRFZGl0aW5nS2V5Ym9hcmRF
dmVudChldmVudCwgZmFsc2UpKQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsK
K30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXli
b2FyZEV2ZW50KiBldmVudCkKK3sKKyAgICBpZiAobV9wYWdlLT5pbnRlcmNlcHRFZGl0aW5nS2V5
Ym9hcmRFdmVudChldmVudCwgdHJ1ZSkpCisgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworfQorICAgIAogTlNTdHJpbmcgKldlYkVkaXRvckNsaWVudDo6dXNlclZpc2libGVTdHJp
bmcoTlNVUkwgKnVybCkKIHsKICAgICByZXR1cm4gW3VybCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5n
XTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3
MDU3NCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NjAsNiArNzYwLDcgQEAgV2ViSW5zcGVjdG9yKiBXZWJQYWdlOjppbnNwZWN0
b3IoKQogICAgIHJldHVybiBtX2luc3BlY3Rvci5nZXQoKTsKIH0KIAorI2lmICFQTEFURk9STShN
QUMpCiBib29sIFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZl
bnQqIGV2dCkKIHsKICAgICBOb2RlKiBub2RlID0gZXZ0LT50YXJnZXQoKS0+dG9Ob2RlKCk7CkBA
IC03ODksNyArNzkwLDggQEAgYm9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVu
dAogCiAgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldnQtPmtleUV2ZW50
KCktPnRleHQoKSwgZXZ0KTsKIH0KLQorI2VuZGlmCisgICAgCiBXZWJFZGl0Q29tbWFuZCogV2Vi
UGFnZTo6d2ViRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElEKQogewogICAgIHJldHVybiBt
X2VkaXRDb21tYW5kTWFwLmdldChjb21tYW5kSUQpLmdldCgpOwpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzA1NzQpCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBsYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgLy8gLS0gQ2FsbGVkIGZy
b20gV2ViQ29yZSBjbGllbnRzLgorI2lmICFQTEFURk9STShNQUMpCiAgICAgYm9vbCBoYW5kbGVF
ZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CisjZW5kaWYKICAg
ICB2b2lkIHNob3coKTsKICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CiAgICAgV2ViQ29y
ZTo6SW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwpAQCAtMTYwLDYgKzE2Miw3IEBA
IHB1YmxpYzoKICAgICBib29sIHdpbmRvd0lzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2lu
ZG93SXNWaXNpYmxlOyB9CiAgICAgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX3dpbmRvd0ZyYW1lOyB9CiAgICAgYm9vbCB3aW5kb3dJc0ZvY3Vz
ZWQoKSBjb25zdDsKKyAgICBib29sIGludGVyY2VwdEVkaXRpbmdLZXlib2FyZEV2ZW50KFdlYkNv
cmU6OktleWJvYXJkRXZlbnQqLCBib29sKTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIV05E
IG5hdGl2ZVdpbmRvdygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlV2luZG93OyB9CiAjZW5kaWYK
SW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShy
ZXZpc2lvbiA3MDU3NCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiV2ViUGFn
ZS5oIgogCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3Vz
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0tleWJvYXJkRXZlbnQuaD4KQEAgLTQ2LDEzOSArNDgsNTYgQEAgdm9pZCBXZWJQYWdlOjpw
bGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbgogewogfQogCi0vLyBGSVhNRTogRWRpdG9yIGNvbW1h
bmRzIHNob3VsZCBub3QgYmUgaGFyZCBjb2RlZCBhbmQgaW5zdGVhZCBzaG91bGQgY29tZSBmcm9t
IEFwcEtpdC4gIAotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgQ3RybEtleSAgID0gMSA8PCAwOwot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIEFsdEtleSAgICA9IDEgPDwgMTsKLXN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTaGlmdEtleSAgPSAxIDw8IDI7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgTWV0YUtl
eSAgID0gMSA8PCAzOwotCi0vLyBLZXlzIHdpdGggc3BlY2lhbCBtZWFuaW5nLiBUaGVzZSB3aWxs
IGJlIGRlbGVnYXRlZCB0byB0aGUgZWRpdG9yIHVzaW5nCi0vLyB0aGUgZXhlY0NvbW1hbmQoKSBt
ZXRob2QKLXN0cnVjdCBLZXlEb3duRW50cnkgewotICAgIHVuc2lnbmVkIHZpcnR1YWxLZXk7Ci0g
ICAgdW5zaWduZWQgbW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19OwotCi1zdHJ1
Y3QgS2V5UHJlc3NFbnRyeSB7Ci0gICAgdW5zaWduZWQgY2hhckNvZGU7Ci0gICAgdW5zaWduZWQg
bW9kaWZpZXJzOwotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci19OwotCi1zdGF0aWMgY29uc3QgS2V5
RG93bkVudHJ5IGtleURvd25FbnRyaWVzW10gPSB7Ci0gICAgeyBWS19MRUZULCAgICAgMCwgICAg
ICAgICAgICAgICAgICAgIk1vdmVMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgICBTaGlmdEtleSwgICAgICAgICAgICAiTW92ZUxl
ZnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTEVG
VCwgICAgIEFsdEtleSwgICAgICAgICAgICAgICJNb3ZlV29yZExlZnQiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgICAgQWx0S2V5IHwgU2hpZnRL
ZXksICAgIk1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwK
LSAgICB7IFZLX1JJR0hULCAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZVJpZ2h0IiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICAgIFNo
aWZ0S2V5LCAgICAgICAgICAgICJNb3ZlUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAgQWx0S2V5LCAgICAgICAgICAgICAgIk1v
dmVXb3JkUmlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X1JJR0hULCAgICBBbHRLZXkgfCBTaGlmdEtleSwgICAiTW92ZVdvcmRSaWdodEFuZE1vZGlmeVNl
bGVjdGlvbiIgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVVAsICAgICAgIDAsICAgICAgICAg
ICAgICAgICAgICJNb3ZlVXAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19VUCwgICAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVVcEFuZE1v
ZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9SLCAg
ICBTaGlmdEtleSwgICAgICAgICAgICAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiIgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwgICAgIDAsICAgICAgICAgICAgICAgICAg
ICJNb3ZlRG93biIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAg
eyBWS19ET1dOLCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX05FWFQsICAgICBTaGlmdEtl
eSwgICAgICAgICAgICAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAg
ICAgICB9LAotICAgIHsgVktfUFJJT1IsICAgIDAsICAgICAgICAgICAgICAgICAgICJNb3ZlUGFn
ZVVwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19ORVhU
LCAgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVQYWdlRG93biIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgVktfSE9NRSwgICAgIDAsICAgICAgICAgICAg
ICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmUiICAgICAgICAgICAgICAgICAgICAgICAgIH0s
Ci0gICAgeyBWS19IT01FLCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmlu
Z09mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgICBN
ZXRhS2V5LCAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lIiAgICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgIHsgVktfTEVGVCwgICAgIE1ldGFLZXkgfCBTaGlmdEtleSwgICJN
b3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgIH0sCi0gICAgeyBW
S19VUCwgICAgICAgTWV0YUtleSwgICAgICAgICAgICAgIk1vdmVUb0JlZ2lubmluZ09mRG9jdW1l
bnQiICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1VQLCAgICAgICBNZXRhS2V5IHwg
U2hpZnRLZXksICAiTW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbiIg
ICB9LAotCi0gICAgeyBWS19FTkQsICAgICAgMCwgICAgICAgICAgICAgICAgICAgIk1vdmVUb0Vu
ZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0VORCwg
ICAgICBTaGlmdEtleSwgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0
aW9uIiAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwgICAgIE1ldGFLZXksICAgICAgICAg
ICAgICJNb3ZlVG9FbmRPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyBWS19ET1dOLCAgICAgTWV0YUtleSB8IFNoaWZ0S2V5LCAgIk1vdmVUb0VuZE9mRG9jdW1l
bnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgICBNZXRh
S2V5LCAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9LAotICAgIHsgVktfUklHSFQsICAgIE1ldGFLZXkgfCBTaGlmdEtleSwgICJNb3Zl
VG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgIH0sCi0KLSAgICB7IFZL
X0JBQ0ssICAgICAwLCAgICAgICAgICAgICAgICAgICAiRGVsZXRlQmFja3dhcmQiICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfQkFDSywgICAgIFNoaWZ0S2V5LCAg
ICAgICAgICAgICJEZWxldGVCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19ERUxFVEUsICAgMCwgICAgICAgICAgICAgICAgICAgIkRlbGV0ZUZvcndh
cmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0JBQ0ssICAg
ICBBbHRLZXksICAgICAgICAgICAgICAiRGVsZXRlV29yZEJhY2t3YXJkIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCAgIEFsdEtleSwgICAgICAgICAgICAg
ICJEZWxldGVXb3JkRm9yd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0KLSAg
ICB7ICdCJywgICAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICAiVG9nZ2xlQm9sZCIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ0knLCAgICAgICAgIEN0cmxL
ZXksICAgICAgICAgICAgICJUb2dnbGVJdGFsaWMiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICB7IFZLX0VTQ0FQRSwgICAwLCAgICAgICAgICAgICAgICAgICAiQ2Fu
Y2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
T0VNX1BFUklPRCwgQ3RybEtleSwgICAgICAgICAgICJDYW5jZWwiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19UQUIsICAgICAgMCwgICAgICAgICAg
ICAgICAgICAgIkluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1RBQiwgICAgICBTaGlmdEtleSwgICAgICAgICAgICAiSW5zZXJ0QmFja3Rh
YiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCAg
IDAsICAgICAgICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sICAgQ3RybEtleSwgICAgICAgICAgICAg
Ikluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX1JFVFVSTiwgICBBbHRLZXksICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJOLCAgIEFsdEtleSB8
IFNoaWZ0S2V5LCAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19SRVRVUk4sICAgU2hpZnRLZXksICAgICAgICAgICAgIkluc2VydExp
bmVCcmVhayIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgIHsgJ0MnLCAg
ICAgICAgIE1ldGFLZXksICAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnVicsICAgICAgICAgTWV0YUtleSwgICAgICAg
ICAgICAgIlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICB7ICdYJywgICAgICAgICBNZXRhS2V5LCAgICAgICAgICAgICAiQ3V0IiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ0EnLCAgICAgICAgIE1l
dGFLZXksICAgICAgICAgICAgICJTZWxlY3RBbGwiICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCi0gICAgeyBWS19JTlNFUlQsICAgQ3RybEtleSwgICAgICAgICAgICAgIkNv
cHkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0lOU0VSVCwgICBTaGlmdEtleSwgICAgICAgICAgICAiUGFzdGUiICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCAgIFNoaWZ0S2V5LCAg
ICAgICAgICAgICJDdXQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyAnWicsICAgICAgICAgTWV0YUtleSwgICAgICAgICAgICAgIlVuZG8iICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdaJywgICAgICAg
ICBNZXRhS2V5IHwgU2hpZnRLZXksICAiUmVkbyIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9LAotfTsKLQotc3RhdGljIGNvbnN0IEtleVByZXNzRW50cnkga2V5UHJl
c3NFbnRyaWVzW10gPSB7Ci0gICAgeyAnXHQnLCAgICAgICAgMCwgICAgICAgICAgICAgICAgICAg
Ikluc2VydFRhYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
ICdcdCcsICAgICAgICBTaGlmdEtleSwgICAgICAgICAgICAiSW5zZXJ0QmFja3RhYiIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICAgICAgIDAsICAgICAg
ICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyAnXHInLCAgICAgICAgQ3RybEtleSwgICAgICAgICAgICAgIkluc2VydE5l
d2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7ICdccicsICAg
ICAgICBTaGlmdEtleSwgICAgICAgICAgICAiSW5zZXJ0TGluZUJyZWFrIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICAgICAgIEFsdEtleSwgICAgICAgICAg
ICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0g
ICAgeyAnXHInLCAgICAgICAgQWx0S2V5IHwgU2hpZnRLZXksICAgIkluc2VydE5ld2xpbmUiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLX07Ci0KLWNvbnN0IGNoYXIqIFdlYlBh
Z2U6OmludGVycHJldEtleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQqIGV2dCkKKy8vIEZJWE1F
OiBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvciBpbnB1dCBtZXRob2RzCisgICAgCitib29sIFdlYlBh
Z2U6OmludGVyY2VwdEVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2dCwgYm9v
bCBzaG91bGRTYXZlQ29tbWFuZCkKIHsKKyAgICBOb2RlKiBub2RlID0gZXZ0LT50YXJnZXQoKS0+
dG9Ob2RlKCk7CisgICAgQVNTRVJUKG5vZGUpOworICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCktPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICAKICAgICBjb25zdCBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQqIGtleUV2ZW50ID0gZXZ0LT5rZXlFdmVudCgpOwotICAgIEFT
U0VSVChrZXlFdmVudCk7Ci0KLSAgICBzdGF0aWMgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPiog
a2V5RG93bkNvbW1hbmRzTWFwID0gMDsKLSAgICBzdGF0aWMgSGFzaE1hcDxpbnQsIGNvbnN0IGNo
YXIqPioga2V5UHJlc3NDb21tYW5kc01hcCA9IDA7Ci0KLSAgICBpZiAoIWtleURvd25Db21tYW5k
c01hcCkgewotICAgICAgICBrZXlEb3duQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNv
bnN0IGNoYXIqPjsKLSAgICAgICAga2V5UHJlc3NDb21tYW5kc01hcCA9IG5ldyBIYXNoTWFwPGlu
dCwgY29uc3QgY2hhcio+OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAoc2l6
ZW9mKGtleURvd25FbnRyaWVzKSAvIHNpemVvZihrZXlEb3duRW50cmllc1swXSkpOyBpKyspIHsK
LSAgICAgICAgICAgIGtleURvd25Db21tYW5kc01hcC0+c2V0KGtleURvd25FbnRyaWVzW2ldLm1v
ZGlmaWVycyA8PCAxNiB8IGtleURvd25FbnRyaWVzW2ldLnZpcnR1YWxLZXksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlEb3duRW50cmllc1tpXS5uYW1lKTsKKyAgICBp
ZiAoIWtleUV2ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgVmVjdG9yPEtl
eXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzID0gZXZ0LT5rZXlwcmVzc0NvbW1hbmRzKCk7CisgICAg
Ym9vbCBoYXNLZXlwcmVzc0NvbW1hbmQgPSAhY29tbWFuZHMuaXNFbXB0eSgpOworICAgIAorICAg
IGJvb2wgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNob3VsZFNhdmVD
b21tYW5kICYmICFoYXNLZXlwcmVzc0NvbW1hbmQpIHsKKyAgICAgICAgVmVjdG9yPFN0cmluZz4g
Y29tbWFuZHNMaXN0OyAgICAgICAgCisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRL
ZXlFdmVudChrZXlFdmVudC0+dHlwZSgpKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRl
cnByZXRLZXlFdmVudDo6UmVwbHkoY29tbWFuZHNMaXN0KSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZUlELCBDb3JlSVBDOjpD
b25uZWN0aW9uOjpOb1RpbWVvdXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbW1hbmRzTGlzdC5zaXplKCk7IGkrKykKKyAgICAg
ICAgICAgIGV2dC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoY29t
bWFuZHNMaXN0W2ldKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBjb21t
YW5kcy5zaXplKCk7CisgICAgICAgIC8vIEFyZSB0aGVyZSBjb21tYW5kcyB0aGF0IHdvdWxkIGp1
c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYgZXhlY3V0ZWQgdmlhIEVkaXRvcj8KKyAgICAgICAg
Ly8gV2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBk
ZWNpZGUgaG93IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVwb24gV2Vi
Q29yZQorICAgICAgICAvLyB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUuZy4g
VGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2VuZXJh
dGVkCisgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBv
ciBFbnRlcikuCisgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IGZhbHNl
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgaWYgKGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kc1tpXS5jb21tYW5kTmFtZSku
aXNUZXh0SW5zZXJ0aW9uKCkpCisgICAgICAgICAgICAgICAgaGF2ZVRleHRJbnNlcnRpb25Db21t
YW5kcyA9IHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgKHNpemVvZihrZXlQcmVzc0VudHJpZXMpIC8gc2l6ZW9mKGtleVByZXNzRW50cmllc1swXSkp
OyBpKyspIHsKLSAgICAgICAgICAgIGtleVByZXNzQ29tbWFuZHNNYXAtPnNldChrZXlQcmVzc0Vu
dHJpZXNbaV0ubW9kaWZpZXJzIDw8IDE2IHwga2V5UHJlc3NFbnRyaWVzW2ldLmNoYXJDb2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVByZXNzRW50cmllc1tpXS5u
YW1lKTsKKyAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IGtleUV2ZW50
LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChj
b21tYW5kc1tpXS5jb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dCIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgaW5zZXJ0IG51bGwgb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFzIHRoZXkg
Y2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGJlaGF2aW91cgorICAgICAgICAgICAgICAgICAgICBp
ZiAoZXZ0LT5jaGFyQ29kZSgpIDwgJyAnKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBmcmFtZS0+ZWRp
dG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2dCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkt
PmNvbW1hbmQoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLmlzU3VwcG9ydGVkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1h
bmQoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLmV4ZWN1dGUoZXZ0KTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLQotICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IDA7Ci0gICAgaWYg
KGtleUV2ZW50LT5zaGlmdEtleSgpKQotICAgICAgICBtb2RpZmllcnMgfD0gU2hpZnRLZXk7Ci0g
ICAgaWYgKGtleUV2ZW50LT5hbHRLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IEFsdEtleTsK
LSAgICBpZiAoa2V5RXZlbnQtPmN0cmxLZXkoKSkKLSAgICAgICAgbW9kaWZpZXJzIHw9IEN0cmxL
ZXk7Ci0gICAgaWYgKGtleUV2ZW50LT5tZXRhS2V5KCkpCi0gICAgICAgIG1vZGlmaWVycyB8PSBN
ZXRhS2V5OwotCi0gICAgaWYgKGtleUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpSYXdLZXlEb3duKSB7Ci0gICAgICAgIGludCBtYXBLZXkgPSBtb2RpZmllcnMgPDwgMTYg
fCBldnQtPmtleUNvZGUoKTsKLSAgICAgICAgcmV0dXJuIG1hcEtleSA/IGtleURvd25Db21tYW5k
c01hcC0+Z2V0KG1hcEtleSkgOiAwOwotICAgIH0KLQotICAgIGludCBtYXBLZXkgPSBtb2RpZmll
cnMgPDwgMTYgfCBldnQtPmNoYXJDb2RlKCk7Ci0gICAgcmV0dXJuIG1hcEtleSA/IGtleVByZXNz
Q29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKKyAgICByZXR1cm4gZXZlbnRXYXNIYW5kbGVk
OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2Nyb2xsKFBhZ2UqIHBhZ2UsIFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72109</attachid>
            <date>2010-10-27 16:29:38 -0700</date>
            <delta_ts>2010-10-27 16:52:32 -0700</delta_ts>
            <desc>Patch4</desc>
            <filename>keybindings4.txt</filename>
            <type>text/plain</type>
            <size>31986</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMTAtMjcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
dXBwb3J0IEFwcGtpdCBrZXkgYmluZGluZ3MgYW5kIGN1c3RvbSBrZXkgYmluZGluZ3MgaW4gV2Vi
S2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgy
NzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA3MjM+CisKKyAgICAgICAgKiBkb20vS2V5
Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kOjpLZXlwcmVz
c0NvbW1hbmQpOiBBZGRlZCBkZWZhdWx0IGNvbnN0cnVjdG9yIGFuZCBtb2RpZmllZCBhc3NlcnQg
Zm9yIHRleHQKKyAgICAgICAgaW5zZXJ0aW9uIGNvbW1hbmQgY29uc3RydWN0b3IgdG8gc3VwcG9y
dCBXZWJLaXQyIHNjZW5hcmlvcy4KKwogMjAxMC0xMC0yNyAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vy
c0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENocmlzIE1hcnJpbi4KSW5kZXg6
IFdlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9L
ZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDcwNzIyKQorKysgV2ViQ29yZS9kb20vS2V5Ym9hcmRF
dmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBzdHJ1Y3QgS2V5cHJlc3NDb21tYW5kIHsKLSAg
ICAgICAgS2V5cHJlc3NDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpIDogY29tbWFu
ZE5hbWUoY29tbWFuZE5hbWUpIHt9Ci0gICAgICAgIEtleXByZXNzQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIHRleHQpIDogY29tbWFuZE5hbWUoY29tbWFu
ZE5hbWUpLCB0ZXh0KHRleHQpIHsgQVNTRVJUKGNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIp
OyB9CisgICAgICAgIEtleXByZXNzQ29tbWFuZCgpIHsgfQorICAgICAgICBLZXlwcmVzc0NvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkgOiBjb21tYW5kTmFtZShjb21tYW5kTmFtZSkg
eyB9CisgICAgICAgIEtleXByZXNzQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBj
b25zdCBTdHJpbmcmIHRleHQpIDogY29tbWFuZE5hbWUoY29tbWFuZE5hbWUpLCB0ZXh0KHRleHQp
IHsgQVNTRVJUKGNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIgfHwgY29tbWFuZE5hbWUgPT0g
Imluc2VydFRleHQiKTsgfQogCiAgICAgICAgIFN0cmluZyBjb21tYW5kTmFtZTsKICAgICAgICAg
U3RyaW5nIHRleHQ7CkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzA3MjIpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEwLTEwLTI3ICBFbnJpY2EgQ2FzdWNjaSAg
PGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU3VwcG9ydCBBcHBraXQga2V5IGJpbmRpbmdzIGFuZCBjdXN0b20ga2V5IGJp
bmRpbmdzIGluIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ4MjcxCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNzIzPgorICAgICAg
ICAKKyAgICAgICAgV2UgbmVlZCB0byBzdXBwb3J0IEFwcEtpdCBrZXkgYmluZGluZ3MgYW5kIGN1
c3RvbSBrZXkgYmluZGluZ3MgaW4gV2ViS2l0Mi4KKyAgICAgICAgRXZlcnkga2V5Ym9hcmQgZXZl
bnQgaXMgZmlyc3Qgc2VudCB0byB0aGUgV2ViUHJvY2VzcyBhbmQgd2UgaW5mb3JtIEFwcEtpdCB0
aGF0CisgICAgICAgIHdlIGRvbid0IG5lZWQgZnVydGhlciBwcm9jZXNzaW5nLiBXaGVuIHRoZSBl
dmVudCBpcyBwcm9jZXNzZWQgYnkgdGhlIFdlYlByb2Nlc3MgYW5kIG5vIGhhbmRsZXIgY29uc3Vt
ZXMgaXQsCisgICAgICAgIHdlIHNlbmQgYSBzeW5jaHJvbm91cyBtZXNzYWdlIGJhY2sgdG8gdGhl
IFVJIHByb2Nlc3MgdG8gbGV0IEFwcEtpdCBwZXJmb3JtIHRoZSBrZXkgYmluZGluZ3MuCisgICAg
ICAgIFRoaXMgb3BlcmF0aW9uIGNhbiByZXN1bHQgaW4gb25lIG9yIG1vcmUgZWRpdGluZyBjb21t
YW5kcyB0byBleGVjdXRlIG9yIGEgbm9vcC4KKyAgICAgICAgVGhlIFdlYlByb2Nlc3MgdGhlbiBy
ZXBsaWVzIGJhY2sgdG8gdGhlIFVJIHByb2Nlc3MgdG8gaW5mb3JtIHdoZXRoZXIgZnVydGhlciBw
cm9jZXNzaW5nIGlzIHJlcXVpcmVkLCBpbgorICAgICAgICB3aGljaCBjYXNlIHRoZSBldmVudCBp
cyBzZW50IGJhY2sgdG8gdGhlIGFwcGxpY2F0aW9uIHRvIGJlIG1hcHBlZC4KKyAgICAgICAgVGhl
cmUgaXMgYSBwb3RlbnRpYWwgZm9yIGEgcmFjZSBjb25kaXRpb246IGluIGNhc2UgdGhlIFdlYlBy
b2Nlc3MgaXMgdmVyeSBzbG93IHRvIHByb2Nlc3MgdGhlIGtleSBldmVudHMsIHRoZSBVSQorICAg
ICAgICBwcm9jZXNzIGNvdWxkIGJlIGluIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc3RhdGUgd2hl
biB0aGUgZXZlbnQgaXMgYmVpbmcgcmVzZW50IChmb3IgZXhhbXBsZSBpdCBtaWdodCBub3QgaGF2
ZSB0aGUKKyAgICAgICAga2V5Ym9hcmQgZm9jdXMgYW55bW9yZSkgYW5kIHRoZSBjb21tYW5kIGNv
dWxkIGJlIGxvc3QuIFdlIHNob3VsZCBsb29rIG91dCBmb3IgdXNlciBleHBlcmllbmNlIGltcGFj
dC4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weTogQWRkZWQgaGVhZGVy
IGZpbGUgaW4gdGhlIGdlbmVyYXRlZCBmaWxlLgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDogQWRkZWQgZW5jb2Rlci9kZWNvZGVyIGZvciBLZXlwcmVzc0NvbW1hbmQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OmludGVyY2VwdEtleUV2ZW50KTogUGFzcy10aHJvdWdoIGNhbGwgdG8g
V0tWaWV3LgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6ZGlkTm90SGFuZGxlS2V5
RXZlbnQpOiBBZGRlZCBsb2dpYyB0byByZXNlbmQgdGhlIGV2ZW50IHRvIHRoZSBhcHBsaWNhdGlv
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dL
VmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IHJl
dHVybiB2YWx1ZSB0byBZRVMsIG90aGVyd2lzZSBubyBtZW51IHNob3J0Y3V0IGlzIHBlcmZvcm1l
ZC4KKyAgICAgICAgKC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IEFkZGVkLgorICAg
ICAgICAoLVtXS1ZpZXcgaW5zZXJ0VGV4dDpdKTogQWRkZWQuCisgICAgICAgICgtW1dLVmlldyBf
aGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50Ol0pOiBBZGRlZCB0byBoYW5kbGUgY29tbWFuZC1CIGFu
ZCBjb21tYW5kLUkuCisgICAgICAgICgtW1dLVmlldyBwZXJmb3JtS2V5RXF1aXZhbGVudDpdKTog
QWRkZWQgdG8gaW50ZXJjZXB0IGtleSBiaW5kaW5nIHNlcXVlbmNlcy4KKyAgICAgICAgKC1bV0tW
aWV3IF9zZXRFdmVudEJlaW5nUmVzZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX2ludGVyY2Vw
dEtleUV2ZW50Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnRl
cnByZXRLZXlFdmVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24pOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbTogTW92ZWQgaGFuZGxlS2V5Ym9hcmRFdmVudCBhbmQgaGFuZGxlSW5w
dXRNZXRob2RLZXlkb3duCisgICAgICAgIHRvIHRoZSBNYWMgc3BlY2lmaWMgaW1wbGVtZW50YXRp
b24uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmludGVyY2VwdEVkaXRpbmdLZXlib2FyZEV2
ZW50KTogQWRkZWQuCisKIDIwMTAtMTAtMjcgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdDIvbWVzc2FnZXMucHkJKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9TY3JpcHRzL3dl
YmtpdDIvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw2ICsyMjYsNyBAQCBkZWYg
bWVzc2FnZV90b19zdHJ1Y3RfZGVjbGFyYXRpb24obWVzc2FnCiAKIGRlZiBzdHJ1Y3Rfb3JfY2xh
c3MobmFtZXNwYWNlLCB0eXBlKToKICAgICBzdHJ1Y3RzID0gZnJvemVuc2V0KFsKKyAgICAgICAg
J1dlYkNvcmU6OktleXByZXNzQ29tbWFuZCcsCiAgICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cycsCiAgICAgICAgICdXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcycsCiAgICAgICAgICdX
ZWJLaXQ6OldlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMnLApJbmRleDogV2ViS2l0Mi9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9LZXli
b2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KQEAgLTIyOSw2ICsyMzAsMjAgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOgogICAgIH0KIH07CiAKKyNpZiBQTEFURk9STShNQUMpCit0ZW1wbGF0ZTw+IHN0
cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4geworICAgIHN0YXRp
YyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZCYga2V5cHJlc3NDb21tYW5kKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+
ZW5jb2RlKENvcmVJUEM6OkluKGtleXByZXNzQ29tbWFuZC5jb21tYW5kTmFtZSwga2V5cHJlc3ND
b21tYW5kLnRleHQpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgV2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kJiBrZXlwcmVzc0Nv
bW1hbmQpCisgICAgeworICAgICAgICByZXR1cm4gZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91
dChrZXlwcmVzc0NvbW1hbmQuY29tbWFuZE5hbWUsIGtleXByZXNzQ29tbWFuZC50ZXh0KSk7Cisg
ICAgfQorfTsKKyNlbmRpZgorICAgIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYg
Ly8gV2ViQ29yZUFyZ3VtZW50Q29kZXJzX2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJl
dmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRmluZElu
ZGljYXRvcjsKIGNsYXNzIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQ7CiBjbGFzcyBXZWJFZGl0Q29t
bWFuZFByb3h5OworY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDsKIGNsYXNzIFdlYlBvcHVw
TWVudVByb3h5OwogCiBjbGFzcyBQYWdlQ2xpZW50IHsKQEAgLTYyLDcgKzYzLDkgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRp
dENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxl
ZCwgaW50IHN0YXRlKSA9IDA7Ci0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lk
IGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8
V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpID0gMDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2Vy
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOwogCkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE5LDYgKzYxOSwxMyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlCiAgICAgZGlkUmVjZWl2ZVN5bmNX
ZWJQYWdlUHJveHlNZXNzYWdlKGNvbm5lY3Rpb24sIG1lc3NhZ2VJRCwgYXJndW1lbnRzLCByZXBs
eSk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0
S2V5RXZlbnQodWludDMyX3QgdHlwZSwgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRz
TGlzdCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmludGVyY2VwdEtleUV2ZW50KG1fa2V5RXZlbnRR
dWV1ZS5maXJzdCgpLCBjb21tYW5kc0xpc3QpOworfQorI2VuZGlmCisKIHZvaWQgV2ViUGFnZVBy
b3h5OjpkaWRDcmVhdGVNYWluRnJhbWUodWludDY0X3QgZnJhbWVJRCkKIHsKICAgICBBU1NFUlQo
IW1fbWFpbkZyYW1lKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3
MDcyMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiV2ViVUlDbGllbnQuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0VkaXRBY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgpAQCAtMjk3LDYgKzI5OCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29t
bWFuZEZvclVuZG8odWludDY0X3QgY29tbWFuZElELCB1aW50MzJfdCBlZGl0QWN0aW9uKTsKICAg
ICB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAKKyNpZiBQTEFURk9STShNQUMpCisgICAg
Ly8gS2V5Ym9hcmQgaGFuZGxpbmcKKyAgICB2b2lkIGludGVycHJldEtleUV2ZW50KHVpbnQzMl90
IGV2ZW50VHlwZSwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKKyNlbmRpZgor
ICAgIAogICAgIC8vIEZpbmQuCiAgICAgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoY29uc3Qg
U3RyaW5nJiwgdWludDMyX3QgbWF0Y2hDb3VudCk7CiAgICAgdm9pZCBzZXRGaW5kSW5kaWNhdG9y
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgc2VsZWN0aW9uUmVjdCwgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UmVjdD4mIHRleHRSZWN0cywgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUm
IGNvbnRlbnRJbWFnZUhhbmRsZSwgYm9vbCBmYWRlT3V0KTsKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw2ICs4MiwxMSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZEdldFNvdXJj
ZUZvckZyYW1lKFdURjo6U3RyaW5nIHJlc3VsdFN0cmluZywgdWludDY0X3QgY2FsbGJhY2tJRCkK
ICAgICBEaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoV1RGOjpTdHJpbmcgcmVzdWx0U3RyaW5n
LCB1aW50NjRfdCBjYWxsYmFja0lEKQogCisjaWYgUExBVEZPUk0oTUFDKQorICAgICMgS2V5Ym9h
cmQgc3VwcG9ydAorICAgIEludGVycHJldEtleUV2ZW50KHVpbnQzMl90IHR5cGUpIC0+IChWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kTmFtZSkKKyNlbmRpZgorICAgIAog
ICAgICMgQmFja0ZvcndhcmQgbWVzc2FnZXMuCiAgICAgQmFja0ZvcndhcmRBZGRJdGVtKHVpbnQ2
NF90IGl0ZW1JRCkKICAgICBCYWNrRm9yd2FyZEdvVG9JdGVtKHVpbnQ2NF90IGl0ZW1JRCkKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9u
IDcwNzIyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgaW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kTmFtZSk7CiAKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDcwNzIyKQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjMsNiArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKKyNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBh
Z2VDbGllbnRJbXBsLmgiCiAKICNpbXBvcnQgIkZpbmRJbmRpY2F0b3IuaCIKQEAgLTM0LDYgKzM1
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CisjaW1wb3J0IDx3
ZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW1w
b3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTIxNCw2ICsyMTYsMTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RWRpdENvbW1hbmRT
dGF0ZQogICAgIFttX3drVmlldyBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zy
b21XZWJDb3JlU3RyaW5nKGNvbW1hbmROYW1lKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpuZXdT
dGF0ZV07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmludGVyY2VwdEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3ND
b21tYW5kPiYgY29tbWFuZHNMaXN0KQoreworICAgIGNvbW1hbmRzTGlzdCA9IFttX3drVmlldyBf
aW50ZXJjZXB0S2V5RXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKV07Cit9CisKIEZsb2F0UmVjdCBQ
YWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb0RldmljZVNwYWNlOnJlY3RdOwpA
QCAtMjI0LDggKzIzMSwxMyBAQCBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb1Vz
ZXJTCiAgICAgcmV0dXJuIFttX3drVmlldyBfY29udmVydFRvVXNlclNwYWNlOnJlY3RdOwogfQog
Ci12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWROb3RIYW5kbGVLZXlFdmVudChjb25zdCBOYXRpdmVX
ZWJLZXlib2FyZEV2ZW50JikKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZE5vdEhhbmRsZUtleUV2
ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogeworICAgIE5TRXZlbnQq
IG5hdGl2ZUV2ZW50ID0gZXZlbnQubmF0aXZlRXZlbnQoKTsKKyAgICBpZiAoW25hdGl2ZUV2ZW50
IHR5cGVdID09IE5TS2V5RG93bikgeworICAgICAgICBbbV93a1ZpZXcgX3NldEV2ZW50QmVpbmdS
ZXNlbnQ6bmF0aXZlRXZlbnRdOworICAgICAgICBbW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGlj
YXRpb25dIHNlbmRFdmVudDpuYXRpdmVFdmVudF07CisgICAgfQogfQogCiBQYXNzUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlUG9wdXBNZW51UHJveHkoKQpJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDcwNzIyKQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDcgQEAKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2Ny
ZWVuLmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CkBAIC04Nyw2ICs4OCwxMSBAQCBAaW50ZXJmYWNlIFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAg
ICAgSGFzaE1hcDxTdHJpbmcsIEVkaXRDb21tYW5kU3RhdGU+IF9tZW51TWFwOwogCiAgICAgT3du
UHRyPEZpbmRJbmRpY2F0b3JXaW5kb3c+IF9maW5kSW5kaWNhdG9yV2luZG93OworICAgIC8vIFdl
IGtlZXAgaGVyZSB0aGUgZXZlbnQgd2hlbiByZXNlbmRpbmcgaXQgdG8KKyAgICAvLyB0aGUgYXBw
bGljYXRpb24gdG8gZGlzdGluZ3Vpc2ggdGhlIGNhc2Ugb2YgYSBuZXcgZXZlbnQgZnJvbSBvbmUg
CisgICAgLy8gdGhhdCBoYXMgYmVlbiBhbHJlYWR5IHNlbnQgdG8gV2ViQ29yZS4KKyAgICBOU0V2
ZW50ICpfa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQ7CisgICAgVmVjdG9yPEtleXByZXNzQ29tbWFu
ZD4gX2NvbW1hbmRzTGlzdDsKIH0KIEBlbmQKIApAQCAtMjYwLDcgKzI2Niw3IEBAICAgICAgICAg
cmV0dXJuIE5POyAvLyBGSVhNRTogV2UgbmVlZCB0byAKICAgICAgICAgcmV0dXJuIGluZm8ubV9p
c0VuYWJsZWQ7CiAgICAgfQogCi0gICAgcmV0dXJuIE5POworICAgIHJldHVybiBZRVM7CiB9CiAK
IC8vIEV2ZW50cwpAQCAtMjk2LDYgKzMwMiw4NiBAQCBFVkVOVF9IQU5ETEVSKHNjcm9sbFdoZWVs
LCBXaGVlbCkKIAogI3VuZGVmIEVWRU5UX0hBTkRMRVIKIAorLSAodm9pZClkb0NvbW1hbmRCeVNl
bGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoc2VsZWN0b3IgIT0gQHNlbGVjdG9yKG5v
b3A6KSkKKyAgICAgICAgX2RhdGEtPl9jb21tYW5kc0xpc3QuYXBwZW5kKEtleXByZXNzQ29tbWFu
ZChjb21tYW5kTmFtZUZvclNlbGVjdG9yKHNlbGVjdG9yKSkpOworfQorCistICh2b2lkKWluc2Vy
dFRleHQ6KGlkKXN0cmluZworeworICAgIF9kYXRhLT5fY29tbWFuZHNMaXN0LmFwcGVuZChLZXlw
cmVzc0NvbW1hbmQoImluc2VydFRleHQiLCBzdHJpbmcpKTsKK30KKworLSAoQk9PTClfaGFuZGxl
U3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoKFtldmVudCBt
b2RpZmllckZsYWdzXSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZsYWdzTWFzaykgIT0g
TlNDb21tYW5kS2V5TWFzaykKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIC8vIEhlcmUg
d2Ugc3BlY2lhbCBjYXNlIGNtZCtiIGFuZCBjbWQraSBidXQgbm90IGNtZCt1LCBmb3IgaGlzdG9y
aWMgcmVhc29uLgorICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLCBzaW5jZSBpdCBj
b3VsZCBicmVhayBzb21lIE1hYyBhcHBsaWNhdGlvbnMgdGhhdAorICAgIC8vIHJlbHkgb24gdGhp
cyBpbmhlcmVudCBiZWhhdmlvci4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI0OTQzCisgICAgCisgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVu
dCBjaGFyYWN0ZXJzXTsKKyAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAi
YiJdID09IE5TT3JkZXJlZFNhbWUpIHsKKyAgICAgICAgX2RhdGEtPl9wYWdlLT5leGVjdXRlRWRp
dENvbW1hbmQoIlRvZ2dsZUJvbGQiKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAg
aWYgKFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImkiXSA9PSBOU09yZGVyZWRTYW1l
KSB7CisgICAgICAgIF9kYXRhLT5fcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCJUb2dnbGVJdGFs
aWMiKTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE5POwor
fQorCistIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAg
ICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwg
cnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50
IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFz
aW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcg
YSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRh
aW5dIGF1dG9yZWxlYXNlXTsKKyAgICAKKyAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9
IChfZGF0YS0+X2tleURvd25FdmVudEJlaW5nUmVzZW50ID09IGV2ZW50KTsKKyAgICBCT09MIHJl
dCA9IE5POworICAgIAorICAgIFtfZGF0YS0+X2tleURvd25FdmVudEJlaW5nUmVzZW50IHJlbGVh
c2VdOworICAgIF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPSBuaWw7CisgICAgCisg
ICAgW3NlbGYgcmV0YWluXTsKKyAgICAKKyAgICAvLyBQYXNzIGtleSBjb21ib3MgdGhyb3VnaCBX
ZWJDb3JlIGlmIHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgorICAgIC8vIHRo
aXMgZXZlbnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMgaGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGlu
ZyBrZXktbW9kaWZpZWQga2V5cHJlc3Nlcy4KKyAgICAvLyBCdXQgZG9uJ3QgZG8gaXQgaWYgd2Ug
aGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50LgorICAgIC8vIFByZXNzaW5nIEVzYyByZXN1
bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50IC0gZG9uJ3QgcGFzcyBpdCB0byBXZWJDb3Jl
LgorICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGV2ZW50ID09IFtOU0FwcCBjdXJy
ZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdKSB7Cisg
ICAgICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KGV2ZW50LCBzZWxmKSk7CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIAor
ICAgIHJldCA9IFtzZWxmIF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdIHx8IFtzdXBl
ciBwZXJmb3JtS2V5RXF1aXZhbGVudDpldmVudF07CisgICAgCisgICAgW3NlbGYgcmVsZWFzZV07
CisgICAgCisgICAgcmV0dXJuIHJldDsKK30KKworLSAodm9pZClfc2V0RXZlbnRCZWluZ1Jlc2Vu
dDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgX2RhdGEtPl9rZXlEb3duRXZlbnRCZWluZ1Jlc2Vu
dCA9IFtldmVudCByZXRhaW5dOworfQorCistIChWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYpX2lu
dGVyY2VwdEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQKK3sKKyAgICBfZGF0YS0+X2NvbW1h
bmRzTGlzdC5jbGVhcigpOworICAgIC8vIGludGVycHJldEtleUV2ZW50cyB3aWxsIHRyaWdnZXIg
b25lIG9yIG1vcmUgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3RvciBvciBzZXRUZXh0CisgICAg
Ly8gdGhhdCB3aWxsIHBvcHVsYXRlIHRoZSBjb21tYW5kc0xpc3QgdmVjdG9yLgorICAgIFtzZWxm
IGludGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dGhlRXZlbnRdXTsK
KyAgICAKKyAgICByZXR1cm4gX2RhdGEtPl9jb21tYW5kc0xpc3Q7Cit9CisKIC0gKHZvaWQpa2V5
VXA6KE5TRXZlbnQgKil0aGVFdmVudAogewogICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9h
cmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50LCBzZWxmKSk7CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA3MDcy
MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbXBvcnQgIldLVmlldy5oIgorI2lt
cG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogICAg
IGNsYXNzIEZpbmRJbmRpY2F0b3I7CkBAIC0zNiw3ICszNyw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3
IChJbnRlcm5hbCkKIC0gKHZvaWQpX3Rvb2xUaXBDaGFuZ2VkRnJvbTooTlNTdHJpbmcgKilvbGRU
b29sVGlwIHRvOihOU1N0cmluZyAqKW5ld1Rvb2xUaXA7CiAtICh2b2lkKV9zZXRDdXJzb3I6KE5T
Q3Vyc29yICopY3Vyc29yOwogLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNT
dHJpbmcgKiljb21tYW5kTmFtZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5l
d1N0YXRlOwotCistIChWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpX2ludGVyY2Vw
dEtleUV2ZW50OihOU0V2ZW50ICopdGhlRXZlbnQ7CistICh2b2lkKV9zZXRFdmVudEJlaW5nUmVz
ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAtIChOU1JlY3QpX2NvbnZlcnRUb0RldmljZVNwYWNlOihO
U1JlY3QpcmVjdDsKIC0gKE5TUmVjdClfY29udmVydFRvVXNlclNwYWNlOihOU1JlY3QpcmVjdDsK
IApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
NSw2ICsyNDUsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVkbygpCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAorI2lmICFQTEFURk9STShNQUMpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAobV9w
YWdlLT5oYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCkpCkBAIC0yNTUsNiArMjU2LDcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kSwogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRGaWVs
ZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogewpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGll
bnRNYWMubW0JKHJldmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0LDEx
ICszNCwxNCBAQAogCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RPTURvY3VtZW50RnJh
Z21lbnRJbnRlcm5hbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NRG9jdW1lbnRJbnRlcm5hbC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJk
RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJLaXQvV2ViUmVzb3VyY2UuaD4KICNpbmNsdWRlIDxXZWJL
aXQvV2ViTlNVUkxFeHRyYXMuaD4KICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKQpAQCAtNTgsNiArNjEsMTggQEAgLSAoV2ViQ29yZTo6QXJjaGl2ZVJlc291cmNl
KilfY29yZVJlc291cgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7CisgICAgaWYg
KG1fcGFnZS0+aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQsIGZhbHNlKSkKKyAg
ICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCit7Cisg
ICAgaWYgKG1fcGFnZS0+aW50ZXJjZXB0RWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQsIHRydWUp
KQorICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKK30KKyAgICAKIE5TU3RyaW5n
ICpXZWJFZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICp1cmwpCiB7CiAgICAg
cmV0dXJuIFt1cmwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzA3MjIpCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzc3LDYgKzc3Nyw3
IEBAIFdlYkluc3BlY3RvciogV2ViUGFnZTo6aW5zcGVjdG9yKCkKICAgICByZXR1cm4gbV9pbnNw
ZWN0b3IuZ2V0KCk7CiB9CiAKKyNpZiAhUExBVEZPUk0oTUFDKQogYm9vbCBXZWJQYWdlOjpoYW5k
bGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQpCiB7CiAgICAgTm9kZSog
bm9kZSA9IGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgpOwpAQCAtODA2LDcgKzgwNyw4IEBAIGJvb2wg
V2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQKIAogICAgIHJldHVybiBmcmFtZS0+
ZWRpdG9yKCktPmluc2VydFRleHQoZXZ0LT5rZXlFdmVudCgpLT50ZXh0KCksIGV2dCk7CiB9Ci0K
KyNlbmRpZgorICAgIAogV2ViRWRpdENvbW1hbmQqIFdlYlBhZ2U6OndlYkVkaXRDb21tYW5kKHVp
bnQ2NF90IGNvbW1hbmRJRCkKIHsKICAgICByZXR1cm4gbV9lZGl0Q29tbWFuZE1hcC5nZXQoY29t
bWFuZElEKS5nZXQoKTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJl
dmlzaW9uIDcwNzIyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDkgQEAgcHVibGljOgogICAgIHZvaWQgbGF5b3V0
SWZOZWVkZWQoKTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNvcmUgY2xpZW50cy4KKyNp
ZiAhUExBVEZPUk0oTUFDKQogICAgIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudCopOworI2VuZGlmCiAgICAgdm9pZCBzaG93KCk7CiAgICAgU3Ry
aW5nIHVzZXJBZ2VudCgpIGNvbnN0OwogICAgIFdlYkNvcmU6OkludFJlY3Qgd2luZG93UmVzaXpl
clJlY3QoKSBjb25zdDsKQEAgLTE2Myw2ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aW5k
b3dJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd0lzVmlzaWJsZTsgfQogICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV93aW5k
b3dGcmFtZTsgfQogICAgIGJvb2wgd2luZG93SXNGb2N1c2VkKCkgY29uc3Q7CisgICAgYm9vbCBp
bnRlcmNlcHRFZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJDb3JlOjpLZXlib2FyZEV2ZW50KiwgYm9v
bCk7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgSFdORCBuYXRpdmVXaW5kb3coKSBjb25zdCB7
IHJldHVybiBtX25hdGl2ZVdpbmRvdzsgfQogI2VuZGlmCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gNzA3MjIpCisrKyBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2UuaCIKIAogI2luY2x1ZGUgIldlYkV2
ZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CkBA
IC00NiwxMzkgKzQ4LDU2IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1QcmVmZXJlbmNlc0RpZENo
YW4KIHsKIH0KIAotLy8gRklYTUU6IEVkaXRvciBjb21tYW5kcyBzaG91bGQgbm90IGJlIGhhcmQg
Y29kZWQgYW5kIGluc3RlYWQgc2hvdWxkIGNvbWUgZnJvbSBBcHBLaXQuICAKLQotc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEN0cmxLZXkgICA9IDEgPDwgMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBB
bHRLZXkgICAgPSAxIDw8IDE7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgU2hpZnRLZXkgID0gMSA8
PCAyOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIE1ldGFLZXkgICA9IDEgPDwgMzsKLQotLy8gS2V5
cyB3aXRoIHNwZWNpYWwgbWVhbmluZy4gVGhlc2Ugd2lsbCBiZSBkZWxlZ2F0ZWQgdG8gdGhlIGVk
aXRvciB1c2luZwotLy8gdGhlIGV4ZWNDb21tYW5kKCkgbWV0aG9kCi1zdHJ1Y3QgS2V5RG93bkVu
dHJ5IHsKLSAgICB1bnNpZ25lZCB2aXJ0dWFsS2V5OwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsK
LSAgICBjb25zdCBjaGFyKiBuYW1lOwotfTsKLQotc3RydWN0IEtleVByZXNzRW50cnkgewotICAg
IHVuc2lnbmVkIGNoYXJDb2RlOwotICAgIHVuc2lnbmVkIG1vZGlmaWVyczsKLSAgICBjb25zdCBj
aGFyKiBuYW1lOwotfTsKLQotc3RhdGljIGNvbnN0IEtleURvd25FbnRyeSBrZXlEb3duRW50cmll
c1tdID0gewotICAgIHsgVktfTEVGVCwgICAgIDAsICAgICAgICAgICAgICAgICAgICJNb3ZlTGVm
dCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19MRUZU
LCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX0xFRlQsICAgICBBbHRLZXksICAgICAgICAg
ICAgICAiTW92ZVdvcmRMZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgVktfTEVGVCwgICAgIEFsdEtleSB8IFNoaWZ0S2V5LCAgICJNb3ZlV29yZExlZnRBbmRN
b2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAgMCwg
ICAgICAgICAgICAgICAgICAgIk1vdmVSaWdodCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7IFZLX1JJR0hULCAgICBTaGlmdEtleSwgICAgICAgICAgICAiTW92
ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uIiAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
UklHSFQsICAgIEFsdEtleSwgICAgICAgICAgICAgICJNb3ZlV29yZFJpZ2h0IiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAgQWx0S2V5IHwgU2hp
ZnRLZXksICAgIk1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX1VQLCAgICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZVVwIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfVVAsICAgICAg
IFNoaWZ0S2V5LCAgICAgICAgICAgICJNb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19QUklPUiwgICAgU2hpZnRLZXksICAgICAgICAgICAg
Ik1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0RPV04sICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZURvd24iICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwgICAgIFNoaWZ0S2V5
LCAgICAgICAgICAgICJNb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAg
ICAgIH0sCi0gICAgeyBWS19ORVhULCAgICAgU2hpZnRLZXksICAgICAgICAgICAgIk1vdmVQYWdl
RG93bkFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1BSSU9S
LCAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZVBhZ2VVcCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfTkVYVCwgICAgIDAsICAgICAgICAgICAgICAg
ICAgICJNb3ZlUGFnZURvd24iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0K
LSAgICB7IFZLX0hPTUUsICAgICAwLCAgICAgICAgICAgICAgICAgICAiTW92ZVRvQmVnaW5uaW5n
T2ZMaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfSE9NRSwgICAgIFNo
aWZ0S2V5LCAgICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rp
b24iICAgICAgIH0sCi0gICAgeyBWS19MRUZULCAgICAgTWV0YUtleSwgICAgICAgICAgICAgIk1v
dmVUb0JlZ2lubmluZ09mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZL
X0xFRlQsICAgICBNZXRhS2V5IHwgU2hpZnRLZXksICAiTW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5k
TW9kaWZ5U2VsZWN0aW9uIiAgICAgICB9LAotICAgIHsgVktfVVAsICAgICAgIE1ldGFLZXksICAg
ICAgICAgICAgICJNb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgeyBWS19VUCwgICAgICAgTWV0YUtleSB8IFNoaWZ0S2V5LCAgIk1vdmVUb0JlZ2lu
bmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24iICAgfSwKLQotICAgIHsgVktfRU5ELCAg
ICAgIDAsICAgICAgICAgICAgICAgICAgICJNb3ZlVG9FbmRPZkxpbmUiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19FTkQsICAgICAgU2hpZnRLZXksICAgICAgICAg
ICAgIk1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbiIgICAgICAgICAgICAgfSwKLSAg
ICB7IFZLX0RPV04sICAgICBNZXRhS2V5LCAgICAgICAgICAgICAiTW92ZVRvRW5kT2ZEb2N1bWVu
dCIgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfRE9XTiwgICAgIE1ldGFL
ZXkgfCBTaGlmdEtleSwgICJNb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uIiAg
ICAgICAgIH0sCi0gICAgeyBWS19SSUdIVCwgICAgTWV0YUtleSwgICAgICAgICAgICAgIk1vdmVU
b0VuZE9mTGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JJ
R0hULCAgICBNZXRhS2V5IHwgU2hpZnRLZXksICAiTW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uIiAgICAgICAgICAgICB9LAotCi0gICAgeyBWS19CQUNLLCAgICAgMCwgICAgICAgICAg
ICAgICAgICAgIkRlbGV0ZUJhY2t3YXJkIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX0JBQ0ssICAgICBTaGlmdEtleSwgICAgICAgICAgICAiRGVsZXRlQmFja3dh
cmQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfREVMRVRFLCAg
IDAsICAgICAgICAgICAgICAgICAgICJEZWxldGVGb3J3YXJkIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyBWS19CQUNLLCAgICAgQWx0S2V5LCAgICAgICAgICAgICAg
IkRlbGV0ZVdvcmRCYWNrd2FyZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7
IFZLX0RFTEVURSwgICBBbHRLZXksICAgICAgICAgICAgICAiRGVsZXRlV29yZEZvcndhcmQiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgeyAnQicsICAgICAgICAgQ3RybEtl
eSwgICAgICAgICAgICAgIlRvZ2dsZUJvbGQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKLSAgICB7ICdJJywgICAgICAgICBDdHJsS2V5LCAgICAgICAgICAgICAiVG9nZ2xl
SXRhbGljIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgeyBWS19F
U0NBUEUsICAgMCwgICAgICAgICAgICAgICAgICAgIkNhbmNlbCIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IFZLX09FTV9QRVJJT0QsIEN0cmxLZXksICAg
ICAgICAgICAiQ2FuY2VsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
LAotICAgIHsgVktfVEFCLCAgICAgIDAsICAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19UQUIsICAgICAg
U2hpZnRLZXksICAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgICAwLCAgICAgICAgICAgICAgICAgICAi
SW5zZXJ0TmV3bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsg
VktfUkVUVVJOLCAgIEN0cmxLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19SRVRVUk4sICAgQWx0S2V5LCAg
ICAgICAgICAgICAgIkluc2VydE5ld2xpbmUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7IFZLX1JFVFVSTiwgICBBbHRLZXkgfCBTaGlmdEtleSwgICAiSW5zZXJ0TmV3
bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktfUkVUVVJO
LCAgIFNoaWZ0S2V5LCAgICAgICAgICAgICJJbnNlcnRMaW5lQnJlYWsiICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0KLSAgICB7ICdDJywgICAgICAgICBNZXRhS2V5LCAgICAgICAg
ICAgICAiQ29weSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgIHsgJ1YnLCAgICAgICAgIE1ldGFLZXksICAgICAgICAgICAgICJQYXN0ZSIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnWCcsICAgICAgICAgTWV0
YUtleSwgICAgICAgICAgICAgIkN1dCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICB7ICdBJywgICAgICAgICBNZXRhS2V5LCAgICAgICAgICAgICAiU2Vs
ZWN0QWxsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgVktf
SU5TRVJULCAgIEN0cmxLZXksICAgICAgICAgICAgICJDb3B5IiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBWS19JTlNFUlQsICAgU2hpZnRLZXksICAg
ICAgICAgICAgIlBhc3RlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSwKLSAgICB7IFZLX0RFTEVURSwgICBTaGlmdEtleSwgICAgICAgICAgICAiQ3V0IiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1onLCAgICAgICAg
IE1ldGFLZXksICAgICAgICAgICAgICJVbmRvIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgeyAnWicsICAgICAgICAgTWV0YUtleSB8IFNoaWZ0S2V5LCAg
IlJlZG8iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLX07Ci0K
LXN0YXRpYyBjb25zdCBLZXlQcmVzc0VudHJ5IGtleVByZXNzRW50cmllc1tdID0gewotICAgIHsg
J1x0JywgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICJJbnNlcnRUYWIiICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHQnLCAgICAgICAgU2hpZnRLZXks
ICAgICAgICAgICAgIkluc2VydEJhY2t0YWIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICB7ICdccicsICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAiSW5zZXJ0TmV3
bGluZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICAg
ICAgIEN0cmxLZXksICAgICAgICAgICAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCi0gICAgeyAnXHInLCAgICAgICAgU2hpZnRLZXksICAgICAgICAg
ICAgIkluc2VydExpbmVCcmVhayIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICB7ICdccicsICAgICAgICBBbHRLZXksICAgICAgICAgICAgICAiSW5zZXJ0TmV3bGluZSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgIHsgJ1xyJywgICAgICAgIEFsdEtl
eSB8IFNoaWZ0S2V5LCAgICJJbnNlcnROZXdsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCi19OwotCi1jb25zdCBjaGFyKiBXZWJQYWdlOjppbnRlcnByZXRLZXlFdmVudChj
b25zdCBLZXlib2FyZEV2ZW50KiBldnQpCisvLyBGSVhNRTogbmVlZCB0byBhZGQgc3VwcG9ydCBm
b3IgaW5wdXQgbWV0aG9kcworICAgIAorYm9vbCBXZWJQYWdlOjppbnRlcmNlcHRFZGl0aW5nS2V5
Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldnQsIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQpCiB7
CisgICAgTm9kZSogbm9kZSA9IGV2dC0+dGFyZ2V0KCktPnRvTm9kZSgpOworICAgIEFTU0VSVChu
b2RlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IEFTU0VSVChmcmFtZSk7CisgICAgCiAgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBr
ZXlFdmVudCA9IGV2dC0+a2V5RXZlbnQoKTsKLSAgICBBU1NFUlQoa2V5RXZlbnQpOwotCi0gICAg
c3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleURvd25Db21tYW5kc01hcCA9IDA7
Ci0gICAgc3RhdGljIEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj4qIGtleVByZXNzQ29tbWFuZHNN
YXAgPSAwOwotCi0gICAgaWYgKCFrZXlEb3duQ29tbWFuZHNNYXApIHsKLSAgICAgICAga2V5RG93
bkNvbW1hbmRzTWFwID0gbmV3IEhhc2hNYXA8aW50LCBjb25zdCBjaGFyKj47Ci0gICAgICAgIGtl
eVByZXNzQ29tbWFuZHNNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIGNvbnN0IGNoYXIqPjsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKHNpemVvZihrZXlEb3duRW50cmllcykgLyBz
aXplb2Yoa2V5RG93bkVudHJpZXNbMF0pKTsgaSsrKSB7Ci0gICAgICAgICAgICBrZXlEb3duQ29t
bWFuZHNNYXAtPnNldChrZXlEb3duRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlEb3du
RW50cmllc1tpXS52aXJ0dWFsS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2V5RG93bkVudHJpZXNbaV0ubmFtZSk7CisgICAgaWYgKCFrZXlFdmVudCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5k
cyA9IGV2dC0+a2V5cHJlc3NDb21tYW5kcygpOworICAgIGJvb2wgaGFzS2V5cHJlc3NDb21tYW5k
ID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKKyAgICAKKyAgICBib29sIGV2ZW50V2FzSGFuZGxlZCA9
IGZhbHNlOworICAgIAorICAgIGlmIChzaG91bGRTYXZlQ29tbWFuZCAmJiAhaGFzS2V5cHJlc3ND
b21tYW5kKSB7CisgICAgICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+IGNvbW1hbmRzTGlzdDsg
ICAgICAgIAorICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQoa2V5RXZl
bnQtPnR5cGUoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQ6
OlJlcGx5KGNvbW1hbmRzTGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3BhZ2VJRCwgQ29yZUlQQzo6Q29ubmVjdGlvbjo6Tm9U
aW1lb3V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb21tYW5kc0xpc3Quc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBldnQtPmtl
eXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoY29tbWFuZHNMaXN0W2ldKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvbW1hbmRzLnNpemUoKTsKKyAgICAgICAgLy8gQXJlIHRo
ZXJlIGNvbW1hbmRzIHRoYXQgd291bGQganVzdCBjYXVzZSB0ZXh0IGluc2VydGlvbiBpZiBleGVj
dXRlZCB2aWEgRWRpdG9yPworICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBp
bmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRl
ZCwgc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlCisgICAgICAgIC8vIHRvIGVpdGhlciBoYW5k
bGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQg
YSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQg
aW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVudGVyKS4KKyAgICAgICAgYm9vbCBoYXZlVGV4
dEluc2VydGlvbkNvbW1hbmRzID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKS5pc1RleHRJbnNlcnRpb24oKSkKKyAgICAgICAgICAg
ICAgICBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gdHJ1ZTsKICAgICAgICAgfQotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAoc2l6ZW9mKGtleVByZXNzRW50cmllcykgLyBz
aXplb2Yoa2V5UHJlc3NFbnRyaWVzWzBdKSk7IGkrKykgewotICAgICAgICAgICAga2V5UHJlc3ND
b21tYW5kc01hcC0+c2V0KGtleVByZXNzRW50cmllc1tpXS5tb2RpZmllcnMgPDwgMTYgfCBrZXlQ
cmVzc0VudHJpZXNbaV0uY2hhckNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2V5UHJlc3NFbnRyaWVzW2ldLm5hbWUpOworICAgICAgICBpZiAoIWhhdmVUZXh0SW5z
ZXJ0aW9uQ29tbWFuZHMgfHwga2V5RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OkNoYXIpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNl
cnRUZXh0IikgeworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBpbnNlcnQgbnVsbCBvciBj
b250cm9sIGNoYXJhY3RlcnMgYXMgdGhleSBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZp
b3VyCisgICAgICAgICAgICAgICAgICAgIGlmIChldnQtPmNoYXJDb2RlKCkgPCAnICcpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGV2
ZW50V2FzSGFuZGxlZCA9IGZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChjb21tYW5kc1tpXS50
ZXh0LCBldnQpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKS5pc1N1
cHBvcnRlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKS5leGVjdXRlKGV2
dCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICB1bnNpZ25lZCBtb2Rp
ZmllcnMgPSAwOwotICAgIGlmIChrZXlFdmVudC0+c2hpZnRLZXkoKSkKLSAgICAgICAgbW9kaWZp
ZXJzIHw9IFNoaWZ0S2V5OwotICAgIGlmIChrZXlFdmVudC0+YWx0S2V5KCkpCi0gICAgICAgIG1v
ZGlmaWVycyB8PSBBbHRLZXk7Ci0gICAgaWYgKGtleUV2ZW50LT5jdHJsS2V5KCkpCi0gICAgICAg
IG1vZGlmaWVycyB8PSBDdHJsS2V5OwotICAgIGlmIChrZXlFdmVudC0+bWV0YUtleSgpKQotICAg
ICAgICBtb2RpZmllcnMgfD0gTWV0YUtleTsKLQotICAgIGlmIChrZXlFdmVudC0+dHlwZSgpID09
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5RG93bikgewotICAgICAgICBpbnQgbWFwS2V5
ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5rZXlDb2RlKCk7Ci0gICAgICAgIHJldHVybiBtYXBL
ZXkgPyBrZXlEb3duQ29tbWFuZHNNYXAtPmdldChtYXBLZXkpIDogMDsKLSAgICB9Ci0KLSAgICBp
bnQgbWFwS2V5ID0gbW9kaWZpZXJzIDw8IDE2IHwgZXZ0LT5jaGFyQ29kZSgpOwotICAgIHJldHVy
biBtYXBLZXkgPyBrZXlQcmVzc0NvbW1hbmRzTWFwLT5nZXQobWFwS2V5KSA6IDA7CisgICAgcmV0
dXJuIGV2ZW50V2FzSGFuZGxlZDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNjcm9sbChQYWdl
KiBwYWdlLCBTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSkK
</data>
<flag name="review"
          id="62288"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>