<?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>25119</bug_id>
          
          <creation_ts>2009-04-09 12:12:00 -0700</creation_ts>
          <short_desc>IME modifies the DOM before keydown</short_desc>
          <delta_ts>2017-07-18 08:29:34 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>http://jparent.googlepages.com/IME.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julie Parent">jparent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>agl</cc>
    
    <cc>amanda</cc>
    
    <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>hbono</cc>
    
    <cc>joone</cc>
    
    <cc>kai</cc>
    
    <cc>oliver</cc>
    
    <cc>onlytime1434</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117062</commentid>
    <comment_count>0</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-04-09 12:12:00 -0700</bug_when>
    <thetext>Repro steps:
1. Add a keydown listener to any text input/contentEditable node, in the listener print out value/innerHTML of the text input/contentEditable node (or use demo page provided).
2. Type

Result:
In English, the value/innerHTML does not change to contain the character typed until after the keydown event.  When an IME is in use, the value/innerHTML change before the keydown event.

Expected Result:
DOM should not be changed until after the keydown event, just like non-IME input.

Notes:
* Seen in Safari 3, Safari 4, and WebKit nightly.
* Only effects Safari on Mac.  Safari on Windows functions as expected.
* I&apos;ve excluded text areas from this report because they are broken in other ways, see https://bugs.webkit.org/show_bug.cgi?id=25061.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117130</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-10 01:19:42 -0700</bug_when>
    <thetext>I seem to recall that this was done on purpose to better match IE. Oliver, could you confirm?

It&apos;s certainly wrong for Safari on Mac and Windows to behave differently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117137</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-10 02:04:52 -0700</bug_when>
    <thetext>honestly not sure -- i know we deliberately send keydown -- not sure about the dom content changes however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117172</commentid>
    <comment_count>3</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-04-10 13:28:29 -0700</bug_when>
    <thetext>The reason this matters is for applications that want to prepare for the character insertions, either by saving the state, modifying the dom, or calling preventDefault to prevent the insertion.  This works fine for all non-IME input, but since the dom is modified before the keydown for IME, there is no way for us to prepare for it, we only know about the input once it has already changed the dom, at which point it is too late.  Calling preventDefault() on the keydown should always cause the character insertion to not happen.

For what its worth, IE 7 has the same behavior as Safari 3/4 on Windows, which is the behavior I want for Safari on Mac too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117225</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-04-10 22:46:14 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Calling preventDefault() on the keydown should always cause the character
&gt; insertion to not happen.

This is a bit offtopic for this bug, but if character insertion happens due to e.g. drag&amp;drop, Ink, or Character Palette, keydown obviously isn&apos;t sent, so preventDefault() won&apos;t prevent it.

&gt; For what its worth, IE 7 has the same behavior as Safari 3/4 on Windows, which
&gt; is the behavior I want for Safari on Mac too.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117330</commentid>
    <comment_count>5</comment_count>
    <who name="Julie Parent">jparent</who>
    <bug_when>2009-04-13 12:56:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Calling preventDefault() on the keydown should always cause the character
&gt; &gt; insertion to not happen.
&gt; 
&gt; This is a bit offtopic for this bug, but if character insertion happens due to
&gt; e.g. drag&amp;drop, Ink, or Character Palette, keydown obviously isn&apos;t sent, so
&gt; preventDefault() won&apos;t prevent it.

Yup.  That *should* generate a cancelable textInput event though.
 
&gt; &gt; For what its worth, IE 7 has the same behavior as Safari 3/4 on Windows, which
&gt; &gt; is the behavior I want for Safari on Mac too.
&gt; 
&gt; OK.
&gt; </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119583</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-01 04:28:16 -0700</bug_when>
    <thetext>This is a comment in EventHandler::keyEvent():
    // Run input method in advance of DOM event handling.  This may result in the IM
    // modifying the page prior the keydown event, but this behaviour is necessary
    // in order to match IE:
    // 1. preventing default handling of keydown and keypress events has no effect on IM input;
    // 2. if an input method handles the event, its keyCode is set to 229 in keydown event.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119791</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-04 00:51:13 -0700</bug_when>
    <thetext>The comment in EventHandler::keyEvent() does not match IE7 and was made before IE8 existed. I was not able to get a machine with IE6 and East Asian Language support, so I can&apos;t check what IE6 does.

In either case, the IE7 behavior of firing a keydown event that cancels the text insertion is more sane. It seems like we should match it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119792</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-04 01:06:28 -0700</bug_when>
    <thetext>OK. The comment is half false actually. In IE7:

1. keydown, keypress happen before the DOM is modified for IME
2. cancelling keydown (i.e. returning false) prevents IME and regular text insertion
3. cancelling keypress prevents only regular text insertion

That&apos;s a bit weird, but matching IE in that way seems reasonable to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119793</commentid>
    <comment_count>9</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-04 01:11:51 -0700</bug_when>
    <thetext>OK. This makes a bit more sense now. IE and WebKit don&apos;t fire keypress events for IME at all. So it makes sense that canceling them does not affect IME. :) So, I come back to the conclusion that we should just match IE7. Keydown should fire before the DOM has been modified and should be cancelable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119803</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-04 01:34:04 -0700</bug_when>
    <thetext>Ojan, our behaviour is a &quot;compatible&quot; blend of IE, Firefox, and Mac IM behaviour -- it was very carefully designed so just &quot;matching IE&quot; is not really a good argument, esp. given none of the browsers really are consistent in this field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119807</commentid>
    <comment_count>11</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-04 01:52:33 -0700</bug_when>
    <thetext>The intention of this change is that web developers ought to be able to a) see what change a keyboard event is about to make and b) cancel it. The IE7 behavior affords this.

Firefox WIN/MAC modify the DOM after the keydown event as well. Canceling the event only seems to prevent text insertion on Windows Firefox though.

So, in terms of web compatibility, it seems clear that the IE/FF-Win model is best.

Is there somewhere I should look to get a better sense of why the current behavior is correct? What is different about the Mac IM behavior that make the current behavior correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119811</commentid>
    <comment_count>12</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-04 01:58:46 -0700</bug_when>
    <thetext>I&apos;ve filed https://bugs.webkit.org/show_bug.cgi?id=25543 for the bug of not canceling IME insertion when keydown in preventDefaulted. This bug should focus on the timing of the event (i.e. that they keydown should come before the text insertion has occurred).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119812</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-04 02:00:49 -0700</bug_when>
    <thetext>I don&apos;t think that &quot;careful design&quot; is a particularly strong argument in this case. It is true that a lot of time and energy was spent on this issue, but it is also true that the current behavior is not perfect.

That said, it may be difficult or impossible to ensure that canceling keydown prevents IM from handling the event on Mac OS X. We need to pass the event through the IM before DOM event dispatch in order to determine which keycode to report (remember, events that are handled by IM have a keycode of 229) - and one we pass the event through the IM, we cannot un-pass it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121733</commentid>
    <comment_count>14</comment_count>
      <attachid>30435</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-17 21:04:28 -0700</bug_when>
    <thetext>Created attachment 30435
Fire keydown event before inserting text into the DOM on IME input.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121734</commentid>
    <comment_count>15</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-17 22:04:05 -0700</bug_when>
    <thetext>Adding some Chromium folk as the Chromium mac/linux ports will likely need to do this as well once they get around to supporting IME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121743</commentid>
    <comment_count>16</comment_count>
      <attachid>30435</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-17 23:20:50 -0700</bug_when>
    <thetext>Comment on attachment 30435
Fire keydown event before inserting text into the DOM on IME input.

A couple style nits:

 1427 void Editor::applyIMECommand(IMECommand* command) {

     IMECommand(const String&amp; confirmedText)
 63     : text(confirmedText)
 64     , isConfirmationCommand(true) {}
(indent and {} should be on new lines)

No arg name needed:
 281     void applyIMECommand(IMECommand* command);


 34 &lt;/body&gt;
 35 &lt;/html&gt;
036 \ No newline at end of file


     // If there&apos;s a key event, stow away the IME command to be processed in
 5717     // EventHandler::keyEvent after the keydown has been fired.
 5718     if (parameters &amp;&amp; parameters-&gt;event)
 5719         parameters-&gt;event-&gt;setIMECommand(command);
 5720     else
 5721         coreFrame-&gt;editor()-&gt;applyIMECommand(command);

Could go into a static function in the file instead of copy/paste.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121745</commentid>
    <comment_count>17</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-05-17 23:26:33 -0700</bug_when>
    <thetext>+    // IE sends VK_PROCESSKEY which has value 229;
Weird semicolon.


+        // Currently, only Mac Safari uses this. Eventually GTK, and Chromium Linux/Win

If it affects linux at the IME level, it&apos;ll likely affect all linux webkit ports (importantly Qt).  Might be worth rephrasing this so you don&apos;t need to enumerate them.  (This comment is duplicated across two locations.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121751</commentid>
    <comment_count>18</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-17 23:42:29 -0700</bug_when>
    <thetext>(In reply to comment #16)
Eric, all those sound reasonable. Will post a new patch soon.

(In reply to comment #17)
&gt; +    // IE sends VK_PROCESSKEY which has value 229;
&gt; Weird semicolon.
&gt; +        // Currently, only Mac Safari uses this. Eventually GTK, and Chromium
&gt; Linux/Win
&gt; 
&gt; If it affects linux at the IME level, it&apos;ll likely affect all linux webkit
&gt; ports (importantly Qt).  Might be worth rephrasing this so you don&apos;t need to
&gt; enumerate them.  (This comment is duplicated across two locations.)

I don&apos;t actually know if it needs to affect linux. Currently, Qt goes through the same codepath as Mac (at least, according to the comments). That said, the Mac code path is a side effect of the requirements of Mac IME. It&apos;s not clear to me that linux needs to go through all the same contortions. Mainly, it might be possible to cancel IME keydowns on Linux as it is on Windows (Safari Windows will ignore an IME keypress if the keydown event is canceled). Specifically, the Mac issue is that you need to tell the IME a keypress happened before you know if it will handle the keypress. But you need to know if it will handle the keypress in order to set the 229 keycode on the keydown event, at which point, it&apos;s too late to cancel the keydown as the IME has no undo (basically what Alexey said above). Does Linux have the same issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121762</commentid>
    <comment_count>19</comment_count>
      <attachid>30442</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-18 01:12:17 -0700</bug_when>
    <thetext>Created attachment 30442
Implements Eric&apos;s code review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121763</commentid>
    <comment_count>20</comment_count>
      <attachid>30435</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-18 01:32:24 -0700</bug_when>
    <thetext>Comment on attachment 30435
Fire keydown event before inserting text into the DOM on IME input.

&gt; +        Fire the keydown event before inserting text into the DOM on IME input
&lt;...&gt;
&gt; +        On Mac, we need to send the key event to the IME before firing keydown to
&gt; +        know that it&apos;s an IME input (so we can set the keycode to 229). In order
&gt; +        to fire the keydown after the DOM is modified we:

This probably should say &quot;before&quot;, not &quot;after&quot;.

&gt; +        There&apos;s no automated way to test IME input, so I&apos;ve added a manual test.

We have some tests for input methods in editing/input and platform/mac/editing/input, I think that an automated test can and should be added for this change.

&gt;  #if PLATFORM(MAC)
&gt;          // We only have this need to store keypress command info on the Mac.
&gt;          Vector&lt;KeypressCommand&gt;&amp; keypressCommands() { return m_keypressCommands; }
&gt; +
&gt; +        // Currently, only Mac Safari uses this. Eventually GTK, and Chromium Linux/Win
&gt; +        // probably want to use this as well though. To ensure keydown fires before the
&gt; +        // DOM is modified on IME key events.

There is no need to say that only Mac uses the code under a PLATFORM(MAC) guard. Also, as this becomes a part of normal text processing, it&apos;s not accurate to say that this code only ensures keydown firing at correct time - that&apos;s its original inspiration that can be discovered via svn history, but not the full set of its effects.

&gt;  #if PLATFORM(MAC)        
&gt;          Vector&lt;KeypressCommand&gt; m_keypressCommands;
&gt; +        // Currently, only Mac Safari uses this. Eventually GTK, and Chromium Linux/Win
&gt; +        // probably want to use this as well though. To ensure keydown fires before the
&gt; +        // DOM is modified on IME key events.
&gt; +        OwnPtr&lt;IMECommand&gt; m_imeCommand;
&gt;  #endif

Ditto.

But here is also my major comment about this patch. We are already storing input method commands in the same object, and in a much more versatile way (Vector&lt;KeypressCommand&gt; m_keypressCommands). Why do do need to store another copy? The new IMECommand structure doesn&apos;t even adequately describe what commands can be sent back to us as a result of text processing.

Since Cocoa text bindings work in tandem with input methods, you may want to check out a nice description of those at &lt;http://www.hcs.harvard.edu/~jrus/Site/cocoa-text.html&gt;, especially an example binding they give for ^H.

Another consideration is that this approach breaks expectations for input methods that use two-way communication with the editing view. For example, after an IM sends setMarkedText:selectedRange:, it has every right to expect that hasMarkedText will return true.

&gt; +void Editor::applyIMECommand(IMECommand* command) {

Brace goes to next line (and the comment about not using &quot;IME&quot; of course still applies).

&gt; +struct IMECommand {
&gt; +    IMECommand(const String&amp; confirmedText)
&gt; +    : text(confirmedText)
&gt; +    , isConfirmationCommand(true) {}

Initializers should be indented 4 spaces more to the right, and we usually put braces each on its own line (although the latter doesn&apos;t seem to be mentioned in coding style guidelines).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121767</commentid>
    <comment_count>21</comment_count>
      <attachid>30442</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-18 02:06:00 -0700</bug_when>
    <thetext>Comment on attachment 30442
Implements Eric&apos;s code review feedback.

r- per above comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121879</commentid>
    <comment_count>22</comment_count>
      <attachid>30464</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-19 00:57:44 -0700</bug_when>
    <thetext>Created attachment 30464
Restructure after ap&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121880</commentid>
    <comment_count>23</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-05-19 00:59:29 -0700</bug_when>
    <thetext>This isn&apos;t quite ready for review, but the patch does work. It&apos;s basically done except the code in WebHTMLView is a bit ugly and the ChangeLogs are out of date. I&apos;ll wrap that up tomorrow, but I wanted to get this patch up in case you have any non-nits about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121895</commentid>
    <comment_count>24</comment_count>
      <attachid>30464</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-19 06:06:29 -0700</bug_when>
    <thetext>Comment on attachment 30464
Restructure after ap&apos;s feedback.

1 CONSOLE MESSAGE: line 77: TypeError: Result of expression &apos;keyDowns[current]&apos; [undefined] is not an object.

if (event.characters[0] == &apos;\n&apos;) {
3     // Enter key is charCode 13.
4     if (event.characters[0] == String.fromCharCode(13)) {
and why is that clearer?
I figure \n is eaiser to read than fromCharCode(13)
WK style does not != null:
16         if (kotoeriState.compositionString != null) {
if (foo)
not if(foo != null)

Why do you call:
1862     keyDown-&gt;setDefaultHandled();
fro in  1857 void EventHandler::dispatchInputMethodKeyDownEvent(PassRefPtr&lt;KeyboardEvent&gt; keyDown)

I might have written:
 5311     if (parameters &amp;&amp; parameters-&gt;event &amp;&amp; !parameters-&gt;keyDownWasDispatched &amp;&amp; parameters-&gt;shouldSaveCommand) {

to early return instead... but it&apos;s fine as is.

 5348         else if (hasKeypressCommand) {
probably needs a changelog comment.

If there ever was a need for a static function.. this copy/paste was it:
} else if ([character isEqualToString:@&quot;escape&quot;]) {
 469         const unichar ch = 0x1B;
 470         eventCharacter = [NSString stringWithCharacters:&amp;ch length:1];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122122</commentid>
    <comment_count>25</comment_count>
      <attachid>30464</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-20 04:30:35 -0700</bug_when>
    <thetext>Comment on attachment 30464
Restructure after ap&apos;s feedback.

I think the statement &quot;There&apos;s no automated way to test IME input, so I&apos;ve added a manual test.&quot; is incorrect? you even appear to have improved the testing :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122123</commentid>
    <comment_count>26</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-20 04:35:37 -0700</bug_when>
    <thetext>Ooh, Ojan, can you also test that all the standard japanese, simplified and traditional chinese, and korean input methods still work &quot;correctly&quot; (no apparent change in user visible behaviour) in editable regions in Safari, and also mail composition in Mail.app</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30435</attachid>
            <date>2009-05-17 21:04:28 -0700</date>
            <delta_ts>2009-05-19 00:56:35 -0700</delta_ts>
            <desc>Fire keydown event before inserting text into the DOM on IME input.</desc>
            <filename>Fire-keydown-event-before-inserting-text-into-the-DOM-on-IME-input..patch</filename>
            <type>text/plain</type>
            <size>15495</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">NzRiN2M4OTM4NWNlNDIyMDNhZTYxMzRjMjQyNzFjMWVmNjQzZjkzZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyY2M1MmQwLi4xNmU2MDg2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQxIEBACisyMDA5LTA1LTE3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmly
ZSB0aGUga2V5ZG93biBldmVudCBiZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50byB0aGUgRE9NIG9u
IElNRSBpbnB1dAorICAgICAgICBvbiB0aGUgTWFjLiBXaW5kb3dzIFdlYktpdCBkb2VzIHRoaXMg
YWxyZWFkeSwgYXMgZG8gSUUgYW5kIEZpcmVmb3guCisgICAgICAgIAorICAgICAgICBPbiBNYWMs
IHdlIG5lZWQgdG8gc2VuZCB0aGUga2V5IGV2ZW50IHRvIHRoZSBJTUUgYmVmb3JlIGZpcmluZyBr
ZXlkb3duIHRvCisgICAgICAgIGtub3cgdGhhdCBpdCdzIGFuIElNRSBpbnB1dCAoc28gd2UgY2Fu
IHNldCB0aGUga2V5Y29kZSB0byAyMjkpLiBJbiBvcmRlcgorICAgICAgICB0byBmaXJlIHRoZSBr
ZXlkb3duIGFmdGVyIHRoZSBET00gaXMgbW9kaWZpZWQgd2U6CisgICAgICAgICAgLVNlbmQgdGhl
IHJlcXVlc3QgdG8gdGhlIElNRS4KKyAgICAgICAgICAtSWYgdGhlIElNRSBoYW5kbGVzIGl0LCB0
aGVuIHdlIHN0b3JlIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIElNRQorICAgICAgICAgIG9u
IHRoZSBrZXkgZXZlbnQuCisgICAgICAgICAgLVRoZW4sIGluIEV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQsIHdlIGZpcmUga2V5ZG93bi4KKyAgICAgICAgICAtRmluYWxseSwgd2UgYXBwbHkgdGhlIElN
RSB0ZXh0IGluc2VydGlvbiB0byB0aGUgRE9NLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhl
cyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxMTkuIEl0IGRvZXMg
bm90CisgICAgICAgIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU1NDMsIHdoaWNoIGlzIGFib3V0IGNhbmNlbGluZworICAgICAgICBJTUUgaW5wdXQgaWYgdGhl
IGtleWRvd24gZXZlbnQgaXMgcHJldmVudERlZmF1bHRlZCAod2hpY2ggYWxzbyB3b3JrcyBvbiAK
KyAgICAgICAgV2luZG93cyBXZWJLaXQpLgorICAgICAgICAKKyAgICAgICAgVGhlcmUncyBubyBh
dXRvbWF0ZWQgd2F5IHRvIHRlc3QgSU1FIGlucHV0LCBzbyBJJ3ZlIGFkZGVkIGEgbWFudWFsIHRl
c3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU4NDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6CisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudDo6c2V0S2V5Q29kZUZvcklNRSk6CisgICAgICAgICogZG9tL0tl
eWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmltZUNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6c2V0SU1FQ29tbWFuZCk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseUlNRUNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJTUVDb21tYW5kOjpJTUVDb21tYW5kKToKKyAgICAgICAgKiBtYW51YWwtdGVzdHMv
bG9nLWltZS1rZXktZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorCiAy
MDA5LTA1LTE3ICBHZW9yZ2UgU3RhaWtvcyAgPGdlb3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNv
bT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQgLSBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggZGZi
ODI0YS4uMGVlZDk4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cApAQCAtNDQzLDExICs0NDMsMTEgQEAgX19aTjdXZWJD
b3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CiBfX1pON1dlYkNvcmUyM1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18x
NkRvY3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTIz
Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVudEVSS04zV1RGNlZlY3RvcklQTlNf
NE5vZGVFTG0wRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3Jp
dGVQcm9wZXJ0eUxpc3RFdgorX19aTjdXZWJDb3JlMjRXZWJDb3JlQ3JlZGVudGlhbFN0b3JhZ2U5
bV9zdG9yYWdlRQogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUE5TXzhE
b2N1bWVudEVSS05TXzZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hh
bmdlZEUKIF9fWk43V2ViQ29yZTI0cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50RVJLTlNfOFBvc2l0
aW9uRQotX19aTjdXZWJDb3JlMjRXZWJDb3JlQ3JlZGVudGlhbFN0b3JhZ2U5bV9zdG9yYWdlRQog
X19aTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0YUV2CiBf
X1pON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxMndyaXRlT2JqZWN0c0VSTlNf
MzBCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW1FCiBfX1pON1dlYkNvcmUyNUhpc3RvcnlQ
cm9wZXJ0eUxpc3RXcml0ZXIxNndyaXRlSGlzdG9yeUl0ZW1FUk5TXzMwQmluYXJ5UHJvcGVydHlM
aXN0T2JqZWN0U3RyZWFtRVBOU18xMUhpc3RvcnlJdGVtRQpAQCAtNTM3LDYgKzUzNyw3IEBAIF9f
Wk43V2ViQ29yZTZFZGl0b3IxM3BlcmZvcm1EZWxldGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEz
cmFuZ2VGb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3RyeURI
VE1MUGFzdGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjE0c2V0Q29tcG9zaXRpb25FUktOU182U3Ry
aW5nRVJLTjNXVEY2VmVjdG9ySU5TXzIwQ29tcG9zaXRpb25VbmRlcmxpbmVFTG0wRUVFamoKK19f
Wk43V2ViQ29yZTZFZGl0b3IxNWFwcGx5SU1FQ29tbWFuZEVQTlNfMTBJTUVDb21tYW5kRQogX19a
TjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9z
aXRpb25FUktOU182U3RyaW5nRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5jcHAgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAppbmRleCA2YmM4MjVmLi5iNmE4
MmE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysgYi9XZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMTUzLDYgKzE1MywxMSBAQCBpbnQgS2V5Ym9h
cmRFdmVudDo6d2hpY2goKSBjb25zdAogICAgIHJldHVybiBrZXlDb2RlKCk7CiB9CiAKK3ZvaWQg
S2V5Ym9hcmRFdmVudDo6c2V0S2V5Q29kZUZvcklNRSgpCit7CisgICAgbV9rZXlFdmVudC0+c2V0
V2luZG93c1ZpcnR1YWxLZXlDb2RlKENvbXBvc2l0aW9uRXZlbnRLZXlDb2RlKTsKK30KKwogS2V5
Ym9hcmRFdmVudCogZmluZEtleWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAo
RXZlbnQqIGUgPSBldmVudDsgZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIGIvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5oCmluZGV4IDJiMGExMzEuLjE5ZjM2NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaAorKysgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKQEAgLTI0LDEwICsy
NCwxNCBAQAogI2lmbmRlZiBLZXlib2FyZEV2ZW50X2gKICNkZWZpbmUgS2V5Ym9hcmRFdmVudF9o
CiAKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJVSUV2ZW50V2l0aEtleVN0YXRlLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgLy8g
TWF0Y2gga2V5IGNvZGUgb2YgY29tcG9zaXRpb24ga2V5ZG93biBldmVudCBvbiB3aW5kb3dzLgor
ICAgIC8vIElFIHNlbmRzIFZLX1BST0NFU1NLRVkgd2hpY2ggaGFzIHZhbHVlIDIyOTsKKyAgICBj
b25zdCBpbnQgQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSAyMjk7CiAKICAgICBjbGFzcyBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ7CiAKQEAgLTg3LDkgKzkxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwogCisgICAgICAgIC8vIFNldHMgdGhlIGtleWNv
ZGUgb2YgdGhpcyBldmVudCB0byB0aGUgSU1FIGtleWNvZGUgb2YgMjI5LgorICAgICAgICB2b2lk
IHNldEtleUNvZGVGb3JJTUUoKTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gV2Ug
b25seSBoYXZlIHRoaXMgbmVlZCB0byBzdG9yZSBrZXlwcmVzcyBjb21tYW5kIGluZm8gb24gdGhl
IE1hYy4KICAgICAgICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGtleXByZXNzQ29tbWFuZHMo
KSB7IHJldHVybiBtX2tleXByZXNzQ29tbWFuZHM7IH0KKworICAgICAgICAvLyBDdXJyZW50bHks
IG9ubHkgTWFjIFNhZmFyaSB1c2VzIHRoaXMuIEV2ZW50dWFsbHkgR1RLLCBhbmQgQ2hyb21pdW0g
TGludXgvV2luCisgICAgICAgIC8vIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoaXMgYXMgd2VsbCB0
aG91Z2guIFRvIGVuc3VyZSBrZXlkb3duIGZpcmVzIGJlZm9yZSB0aGUKKyAgICAgICAgLy8gRE9N
IGlzIG1vZGlmaWVkIG9uIElNRSBrZXkgZXZlbnRzLgorICAgICAgICBJTUVDb21tYW5kKiBpbWVD
b21tYW5kKCkgeyByZXR1cm4gbV9pbWVDb21tYW5kLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0
SU1FQ29tbWFuZChJTUVDb21tYW5kKiBjb21tYW5kKSB7IG1faW1lQ29tbWFuZC5zZXQoY29tbWFu
ZCk7IH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKQEAgLTEwNiw2ICsxMTksMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCiAgICAgICAgIFZlY3Rv
cjxLZXlwcmVzc0NvbW1hbmQ+IG1fa2V5cHJlc3NDb21tYW5kczsKKyAgICAgICAgLy8gQ3VycmVu
dGx5LCBvbmx5IE1hYyBTYWZhcmkgdXNlcyB0aGlzLiBFdmVudHVhbGx5IEdUSywgYW5kIENocm9t
aXVtIExpbnV4L1dpbgorICAgICAgICAvLyBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzIGFzIHdl
bGwgdGhvdWdoLiBUbyBlbnN1cmUga2V5ZG93biBmaXJlcyBiZWZvcmUgdGhlCisgICAgICAgIC8v
IERPTSBpcyBtb2RpZmllZCBvbiBJTUUga2V5IGV2ZW50cy4KKyAgICAgICAgT3duUHRyPElNRUNv
bW1hbmQ+IG1faW1lQ29tbWFuZDsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
NmE1ZDI5Zi4uMTAxMTE5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE0MjQsNiArMTQyNCwxMyBAQCB2
b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIHNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9u
Q2hhbmdlKGZhbHNlKTsKIH0KIAordm9pZCBFZGl0b3I6OmFwcGx5SU1FQ29tbWFuZChJTUVDb21t
YW5kKiBjb21tYW5kKSB7CisgICAgaWYgKGNvbW1hbmQtPmlzQ29uZmlybWF0aW9uQ29tbWFuZCkK
KyAgICAgICAgY29uZmlybUNvbXBvc2l0aW9uKGNvbW1hbmQtPnRleHQpOworICAgIGVsc2UKKyAg
ICAgICAgc2V0Q29tcG9zaXRpb24oY29tbWFuZC0+dGV4dCwgY29tbWFuZC0+dW5kZXJsaW5lcywg
Y29tbWFuZC0+c2VsZWN0aW9uU3RhcnQsIGNvbW1hbmQtPnNlbGVjdGlvbkVuZCk7Cit9CisKIHZv
aWQgRWRpdG9yOjppZ25vcmVTcGVsbGluZygpCiB7CiAgICAgaWYgKCFjbGllbnQoKSkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aAppbmRleCAxMjE1ZTllLi44NjNkNjU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC01OCw2ICs1OCwyNSBAQCBz
dHJ1Y3QgQ29tcG9zaXRpb25VbmRlcmxpbmUgewogICAgIGJvb2wgdGhpY2s7CiB9OwogCitzdHJ1
Y3QgSU1FQ29tbWFuZCB7CisgICAgSU1FQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbmZpcm1lZFRl
eHQpCisgICAgOiB0ZXh0KGNvbmZpcm1lZFRleHQpCisgICAgLCBpc0NvbmZpcm1hdGlvbkNvbW1h
bmQodHJ1ZSkge30KKworICAgIElNRUNvbW1hbmQoY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBjb25z
dCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzLCB1bnNpZ25lZCBzZWxl
Y3Rpb25TdGFydCwgdW5zaWduZWQgc2VsZWN0aW9uRW5kKQorICAgIDogdGV4dChuZXdUZXh0KQor
ICAgICwgaXNDb25maXJtYXRpb25Db21tYW5kKGZhbHNlKQorICAgICwgdW5kZXJsaW5lcyh1bmRl
cmxpbmVzKQorICAgICwgc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCisgICAgLCBzZWxl
Y3Rpb25FbmQoc2VsZWN0aW9uRW5kKSB7fQorCisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBp
c0NvbmZpcm1hdGlvbkNvbW1hbmQ7CisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1
bmRlcmxpbmVzOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgIHVuc2lnbmVkIHNl
bGVjdGlvbkVuZDsKK307CisKIGVudW0gVHJpU3RhdGUgeyBGYWxzZVRyaVN0YXRlLCBUcnVlVHJp
U3RhdGUsIE1peGVkVHJpU3RhdGUgfTsKIGVudW0gRWRpdG9yQ29tbWFuZFNvdXJjZSB7IENvbW1h
bmRGcm9tTWVudU9yS2V5QmluZGluZywgQ29tbWFuZEZyb21ET00sIENvbW1hbmRGcm9tRE9NV2l0
aFVzZXJJbnRlcmZhY2UgfTsKIGVudW0gV3JpdGluZ0RpcmVjdGlvbiB7IE5hdHVyYWxXcml0aW5n
RGlyZWN0aW9uLCBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24sIFJpZ2h0VG9MZWZ0V3JpdGlu
Z0RpcmVjdGlvbiB9OwpAQCAtMjU5LDYgKzI3OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZp
cm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7CiAgICAgUGFzc1JlZlB0
cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgZ2V0Q29tcG9zaXRp
b25TZWxlY3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9u
RW5kKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5SU1FQ29tbWFuZChJTUVDb21tYW5kKiBjb21tYW5k
KTsKIAogICAgIC8vIGdldHRpbmcgaW50ZXJuYXRpb25hbCB0ZXh0IGlucHV0IGNvbXBvc2l0aW9u
IHN0YXRlIChmb3IgdXNlIGJ5IElubGluZVRleHRCb3gpCiAgICAgVGV4dCogY29tcG9zaXRpb25O
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGlvbk5vZGUuZ2V0KCk7IH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvbWFudWFsLXRlc3RzL2xvZy1pbWUta2V5LWV2ZW50cy5odG1sIGIvV2ViQ29y
ZS9tYW51YWwtdGVzdHMvbG9nLWltZS1rZXktZXZlbnRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTIzZDdjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvbWFu
dWFsLXRlc3RzL2xvZy1pbWUta2V5LWV2ZW50cy5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzxodG1s
PgorPGhlYWQ+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4
dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KKzwvaGVhZD4KKzxib2R5PgorICAKKzxwPlRoaXMgdGVz
dHMgdGhhdCBrZXlkb3duIGZpcmVzLCB0aGVuIHRoZSBET00gaXMgbW9kaWZpZWQga2V5dXAgZmly
ZXMgZHVyaW5nIElNRSBpbnB1dC4gVGhpcyBhbHNvIHRlc3RzIHRoZSBrZXlwcmVzcyBuZXZlciBm
aXJlcyBmb3IgSU1FIGlucHV0LiBUbyB0ZXN0IHRoaXMsIGZpcnN0IHN3aXRjaCB0byBLYXRha2Fu
YS48L3A+Cis8b2w+CisgIDxsaT5UeXBlICdkJyBhbmQgc2VlIGl0IGdldCBpbnNlcnRlZCBpbnRv
IHRoZSBkaXYgYmV0d2VlbiBrZXlkb3duIGFuZCBrZXl1cC4gVHlwZSAnZScgYW5kIHNlZSAn44OH
JyBnZXQgaW5zZXJ0ZWQuIEhpdCBlbnRlciBhbmQgc2VlIHRoYXQgdGhlIGRpdidzIGNvbnRlbnRz
IGRvbid0IGNoYW5nZS48L2xpPgorICA8bGk+VHlwZSAiZGUiIGFuZCBzZWUgdGhhdCB0aGUgZGl2
J3MgY29udGVudHMgYmVjb21lICLjg4fjg4ciLiBUeXBlIGVzcGFjZSBhbmQgc2VlIHRoZSBkaXYn
cyBjb250ZW50cyBiZWNvbWUgJ+ODhycgYmV0d2VlbiB0aGUga2V5ZG93biBhbmQga2V5dXAgb2Yg
dGhlIGVzY2FwZS48L2xpPgorICA8bGk+VHlwZSAidGFkZSIgYW5kIHlvdSBzaG91bGQgc2VlICLj
gr/jg4ciIGdldCBpbnNlcnRlZC4gSGl0IHNwYWNlIGFuZCBzZWUgdGhlIGN1cnNvciBkaXNhcHBl
YXIgYW5kIHRoZSB1bmRlcmxpbmUgcmVtYWlucy7jgIBIaXQgZW50ZXIgdG8gY29uZmlybSB0aGUg
ZW50cnkgYW5kIHNlZSB0aGUgdGV4dCByZW1haW4uPC9saT4KKyAgPGxpPlR5cGUgImRlIiwgdGhl
biBjbGljayBzb21ld2hlcmUgZWxzZS4gVGhpcyBzaG91bGQgY29uZmlybSB0aGUgZW50cnkgKGku
ZS4gcmVtb3ZlIHRoZSB1bmRlcmxpbmUpLCBidXQgbGVhdmUgdGhlIGN1cnNvciB3aGVyZSBpdCB3
YXMuPC9saT4KKzwvb2w+CisKKzxkaXYgY29udGVudEVkaXRhYmxlIGlkPXJvb3Qgc3R5bGU9ImJv
cmRlcjogMXB4IGRhc2hlZCBibHVlIj48L2Rpdj4KKzxkaXYgaWQ9bG9nPjwvZGl2PgorCis8c2Ny
aXB0PgorICBmdW5jdGlvbiBkZWJ1ZyhzdHIpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnbG9nJykuaW5uZXJIVE1MICs9IHN0ciArICc8YnI+JzsKKyAgfTsKKyAgdmFyIHJvb3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpOworICByb290Lm9ua2V5ZG93biA9IGZ1bmN0
aW9uKGUpIHsKKyAgICBkZWJ1ZygnS0VZRE9XTiBrZXljb2RlOiAnICsgZS5rZXlDb2RlICsgJyBo
dG1sOiAnICsgcm9vdC5pbm5lckhUTUwpOworICB9OworICByb290Lm9ua2V5cHJlc3MgPSBmdW5j
dGlvbihlKSB7CisgICAgZGVidWcoJ0tFWVBSRVNTIGtleWNvZGU6ICcgKyBlLmtleUNvZGUgKyAn
IGh0bWw6ICcgKyByb290LmlubmVySFRNTCk7CisgIH07CisgIHJvb3Qub25rZXl1cCA9IGZ1bmN0
aW9uKGUpIHsKKyAgICBkZWJ1ZygnS0VZVVAga2V5Y29kZTogJyArIGUua2V5Q29kZSArICcgaHRt
bDogJyArIHJvb3QuaW5uZXJIVE1MKTsKKyAgfTsKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0
bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA1
ZmJmMjRjLi43OTY2NzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODUsMTAgKzg1LDYgQEAg
Y29uc3QgaW50IEltYWdlRHJhZ0h5c3RlcmVzaXMgPSA1OwogY29uc3QgaW50IFRleHREcmFnSHlz
dGVyZXNpcyA9IDM7CiBjb25zdCBpbnQgR2VuZXJhbERyYWdIeXN0ZXJlc2lzID0gMzsKIAotLy8g
TWF0Y2gga2V5IGNvZGUgb2YgY29tcG9zaXRpb24ga2V5ZG93biBldmVudCBvbiB3aW5kb3dzLgot
Ly8gSUUgc2VuZHMgVktfUFJPQ0VTU0tFWSB3aGljaCBoYXMgdmFsdWUgMjI5OwotY29uc3QgaW50
IENvbXBvc2l0aW9uRXZlbnRLZXlDb2RlID0gMjI5OwotCiAjaWYgRU5BQkxFKFNWRykKIHVzaW5n
IG5hbWVzcGFjZSBTVkdOYW1lczsKICNlbmRpZgpAQCAtMTkyNSwxNCArMTkyMSwyOSBAQCBib29s
IEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0
aWFsS2V5RXZlbnQpCiAgICAgCiAgICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGtleWRv
d24tPmRlZmF1bHRIYW5kbGVkKCk7CiAgICAgCi0gICAgaWYgKGhhbmRsZWRCeUlucHV0TWV0aG9k
KSB7Ci0gICAgICAgIGtleURvd25FdmVudC5zZXRXaW5kb3dzVmlydHVhbEtleUNvZGUoQ29tcG9z
aXRpb25FdmVudEtleUNvZGUpOwotICAgICAgICBrZXlkb3duID0gS2V5Ym9hcmRFdmVudDo6Y3Jl
YXRlKGtleURvd25FdmVudCwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7Ci0g
ICAgICAgIGtleWRvd24tPnNldFRhcmdldChub2RlKTsKLSAgICAgICAga2V5ZG93bi0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKLSAgICB9CisgICAgaWYgKGhhbmRsZWRCeUlucHV0TWV0aG9kKQorICAg
ICAgICBrZXlkb3duLT5zZXRLZXlDb2RlRm9ySU1FKCk7CiAKICAgICBub2RlLT5kaXNwYXRjaEV2
ZW50KGtleWRvd24sIGVjKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBJZiB0aGUgaW1l
Q29tbWFuZCBpcyBzZXQsIHRoZW4gdGhlcmUgaXMgYW4gSU1FIG9wZXJhdGlvbiB0byBiZSBhcHBs
aWVkCisgICAgLy8gdGhhdCB3YXMgc3RvcmVkIGluIHRoZSBLZXlFdmVudHMgaW1lQ29tbWFuZCBz
byB0aGF0IHRoZSBvcGVyYXRpb24gY291bGQKKyAgICAvLyBiZSBhcHBsaWVkIGFmdGVyIHRoZSBr
ZXlkb3duIGV2ZW50IHdhcyBmaXJlZC4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgb25seSBN
YWMgU2FmYXJpIHVzZXMgdGhpcy4gRXZlbnR1YWxseSBHVEssIGFuZCBDaHJvbWl1bSBMaW51eC9X
aW4KKyAgICAvLyBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzIGFzIHdlbGwgdGhvdWdoLiBUbyBl
bnN1cmUga2V5ZG93biBmaXJlcyBiZWZvcmUgdGhlCisgICAgLy8gRE9NIGlzIG1vZGlmaWVkIG9u
IElNRSBrZXkgZXZlbnRzLgorICAgIC8vCisgICAgLy8gRklYTUU6IFJlc3BlY3Qga2V5ZG93bi0+
ZGVmYXVsdFByZXZlbnRlZCgpIGhlcmUgKGkuZS4gZG9uJ3QgYXBwbHkgdGhlIGNvbW1hbmQpLgor
ICAgIC8vIFRoZSBkaWZmaWN1bHR5IGlzIGdldHRpbmcgdGhlIE9TIElNRSBiYWNrIHRvIHRoZSBz
dGF0ZSBpdCB3YXMgaW4gYmVmb3JlCisgICAgLy8gd2UgY2FsbGVkIGhhbmRsZUlucHV0TWV0aG9k
S2V5ZG93biBhYm92ZS4KKyAgICBpZiAoa2V5ZG93bi0+aW1lQ29tbWFuZCgpKSB7CisgICAgICAg
IEFTU0VSVChoYW5kbGVkQnlJbnB1dE1ldGhvZCk7CisgICAgICAgIG1fZnJhbWUtPmVkaXRvcigp
LT5hcHBseUlNRUNvbW1hbmQoa2V5ZG93bi0+aW1lQ29tbWFuZCgpKTsKKyAgICB9CisjZW5kaWYK
KwogICAgIGJvb2wga2V5ZG93blJlc3VsdCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCkgfHwg
a2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmIChoYW5kbGVkQnlJbnB1dE1ldGhv
ZCB8fCAoa2V5ZG93blJlc3VsdCAmJiAhYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkpCiAgICAg
ICAgIHJldHVybiBrZXlkb3duUmVzdWx0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiMTAzOGVkLi5jOGNjMTc1IDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMwIEBACisyMDA5LTA1LTE3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyZSB0
aGUga2V5ZG93biBldmVudCBiZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50byB0aGUgRE9NIG9uIElN
RSBpbnB1dAorICAgICAgICBvbiB0aGUgTWFjLiBXaW5kb3dzIFdlYktpdCBkb2VzIHRoaXMgYWxy
ZWFkeSwgYXMgZG8gSUUgYW5kIEZpcmVmb3guCisgICAgICAgIAorICAgICAgICBPbiBNYWMsIHdl
IG5lZWQgdG8gc2VuZCB0aGUga2V5IGV2ZW50IHRvIHRoZSBJTUUgYmVmb3JlIGZpcmluZyBrZXlk
b3duIHRvCisgICAgICAgIGtub3cgdGhhdCBpdCdzIGFuIElNRSBpbnB1dCAoc28gd2UgY2FuIHNl
dCB0aGUga2V5Y29kZSB0byAyMjkpLiBJbiBvcmRlcgorICAgICAgICB0byBmaXJlIHRoZSBrZXlk
b3duIGFmdGVyIHRoZSBET00gaXMgbW9kaWZpZWQgd2U6CisgICAgICAgICAgLVNlbmQgdGhlIHJl
cXVlc3QgdG8gdGhlIElNRS4KKyAgICAgICAgICAtSWYgdGhlIElNRSBoYW5kbGVzIGl0LCB0aGVu
IHdlIHN0b3JlIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIElNRQorICAgICAgICAgIG9uIHRo
ZSBrZXkgZXZlbnQuCisgICAgICAgICAgLVRoZW4sIGluIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQs
IHdlIGZpcmUga2V5ZG93bi4KKyAgICAgICAgICAtRmluYWxseSwgd2UgYXBwbHkgdGhlIElNRSB0
ZXh0IGluc2VydGlvbiB0byB0aGUgRE9NLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhlcyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxMTkuIEl0IGRvZXMgbm90
CisgICAgICAgIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1
NDMsIHdoaWNoIGlzIGFib3V0IGNhbmNlbGluZworICAgICAgICBJTUUgaW5wdXQgaWYgdGhlIGtl
eWRvd24gZXZlbnQgaXMgcHJldmVudERlZmF1bHRlZCAod2hpY2ggYWxzbyB3b3JrcyBvbiAKKyAg
ICAgICAgV2luZG93cyBXZWJLaXQpLgorICAgICAgICAKKyAgICAgICAgVGhlcmUncyBubyBhdXRv
bWF0ZWQgd2F5IHRvIHRlc3QgSU1FIGlucHV0LCBzbyBJJ3ZlIGFkZGVkIGEgbWFudWFsIHRlc3Qu
CisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4
NDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5t
bToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgorCiAyMDA5LTA1LTE2ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZyBhbmQgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQppbmRleCA0Y2Y1OWJhLi5iODMyMzkzIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBA
IC01Njg4LDcgKzU2ODgsNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgICAgICBwYXJh
bWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBZRVM7CiAgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1
bWVkQnlJTSA9IE5POwogICAgIH0KLSAgICAKKwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CkBA
IC01NzEyLDcgKzU3MTIsMTMgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICAgICAgZXh0
cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRlcmxpbmVzKTsKICAgICB9CiAKLSAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5n
ZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOworICAgIElNRUNvbW1hbmQqIGNv
bW1hbmQgPSBuZXcgSU1FQ29tbWFuZCh0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2Nh
dGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOworICAgIC8vIElmIHRoZXJlJ3MgYSBrZXkg
ZXZlbnQsIHN0b3cgYXdheSB0aGUgSU1FIGNvbW1hbmQgdG8gYmUgcHJvY2Vzc2VkIGluCisgICAg
Ly8gRXZlbnRIYW5kbGVyOjprZXlFdmVudCBhZnRlciB0aGUga2V5ZG93biBoYXMgYmVlbiBmaXJl
ZC4KKyAgICBpZiAocGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5ldmVudCkKKyAgICAgICAgcGFy
YW1ldGVycy0+ZXZlbnQtPnNldElNRUNvbW1hbmQoY29tbWFuZCk7CisgICAgZWxzZQorICAgICAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseUlNRUNvbW1hbmQoY29tbWFuZCk7CiB9CiAKIC0g
KHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCkBAIC01ODI3LDcgKzU4MzMs
MTMgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpz
dHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKICAgICAgICAgICAgICAgICBldmVudEhhbmRs
ZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24o
ZXZlbnRUZXh0KTsKKyAgICAgICAgICAgICAgICBJTUVDb21tYW5kKiBjb21tYW5kID0gbmV3IElN
RUNvbW1hbmQoZXZlbnRUZXh0KTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEga2V5
IGV2ZW50LCBzdG93IGF3YXkgdGhlIElNRSBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZCBpbgorICAg
ICAgICAgICAgICAgIC8vIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQgYWZ0ZXIgdGhlIGtleWRvd24g
aGFzIGJlZW4gZmlyZWQuCisgICAgICAgICAgICAgICAgaWYgKGV2ZW50KQorICAgICAgICAgICAg
ICAgICAgICBldmVudC0+c2V0SU1FQ29tbWFuZChjb21tYW5kKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5SU1FQ29t
bWFuZChjb21tYW5kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
</data>
<flag name="review"
          id="15350"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30442</attachid>
            <date>2009-05-18 01:12:17 -0700</date>
            <delta_ts>2009-05-19 00:56:39 -0700</delta_ts>
            <desc>Implements Eric&apos;s code review feedback.</desc>
            <filename>Implements-Eric-s-code-review-feedback..patch</filename>
            <type>text/plain</type>
            <size>15664</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">MzdiOWZmNWZkODg3ZjJmZmM0NDc4YTZmNWNhYjA0MmMxYzMxMjZhYgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyY2M1MmQwLi4xNmU2MDg2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQxIEBACisyMDA5LTA1LTE3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmly
ZSB0aGUga2V5ZG93biBldmVudCBiZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50byB0aGUgRE9NIG9u
IElNRSBpbnB1dAorICAgICAgICBvbiB0aGUgTWFjLiBXaW5kb3dzIFdlYktpdCBkb2VzIHRoaXMg
YWxyZWFkeSwgYXMgZG8gSUUgYW5kIEZpcmVmb3guCisgICAgICAgIAorICAgICAgICBPbiBNYWMs
IHdlIG5lZWQgdG8gc2VuZCB0aGUga2V5IGV2ZW50IHRvIHRoZSBJTUUgYmVmb3JlIGZpcmluZyBr
ZXlkb3duIHRvCisgICAgICAgIGtub3cgdGhhdCBpdCdzIGFuIElNRSBpbnB1dCAoc28gd2UgY2Fu
IHNldCB0aGUga2V5Y29kZSB0byAyMjkpLiBJbiBvcmRlcgorICAgICAgICB0byBmaXJlIHRoZSBr
ZXlkb3duIGFmdGVyIHRoZSBET00gaXMgbW9kaWZpZWQgd2U6CisgICAgICAgICAgLVNlbmQgdGhl
IHJlcXVlc3QgdG8gdGhlIElNRS4KKyAgICAgICAgICAtSWYgdGhlIElNRSBoYW5kbGVzIGl0LCB0
aGVuIHdlIHN0b3JlIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIElNRQorICAgICAgICAgIG9u
IHRoZSBrZXkgZXZlbnQuCisgICAgICAgICAgLVRoZW4sIGluIEV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQsIHdlIGZpcmUga2V5ZG93bi4KKyAgICAgICAgICAtRmluYWxseSwgd2UgYXBwbHkgdGhlIElN
RSB0ZXh0IGluc2VydGlvbiB0byB0aGUgRE9NLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhl
cyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxMTkuIEl0IGRvZXMg
bm90CisgICAgICAgIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU1NDMsIHdoaWNoIGlzIGFib3V0IGNhbmNlbGluZworICAgICAgICBJTUUgaW5wdXQgaWYgdGhl
IGtleWRvd24gZXZlbnQgaXMgcHJldmVudERlZmF1bHRlZCAod2hpY2ggYWxzbyB3b3JrcyBvbiAK
KyAgICAgICAgV2luZG93cyBXZWJLaXQpLgorICAgICAgICAKKyAgICAgICAgVGhlcmUncyBubyBh
dXRvbWF0ZWQgd2F5IHRvIHRlc3QgSU1FIGlucHV0LCBzbyBJJ3ZlIGFkZGVkIGEgbWFudWFsIHRl
c3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjU4NDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUu
YmFzZS5leHA6CisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudDo6c2V0S2V5Q29kZUZvcklNRSk6CisgICAgICAgICogZG9tL0tl
eWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmltZUNvbW1h
bmQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6c2V0SU1FQ29tbWFuZCk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseUlNRUNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJTUVDb21tYW5kOjpJTUVDb21tYW5kKToKKyAgICAgICAgKiBtYW51YWwtdGVzdHMv
bG9nLWltZS1rZXktZXZlbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5k
bGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorCiAy
MDA5LTA1LTE3ICBHZW9yZ2UgU3RhaWtvcyAgPGdlb3JnZS5zdGFpa29zQHRvcmNobW9iaWxlLmNv
bT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQgLSBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggZGZi
ODI0YS4uMGVlZDk4YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cApAQCAtNDQzLDExICs0NDMsMTEgQEAgX19aTjdXZWJD
b3JlMjNBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTVlbXB0eUV2CiBfX1pON1dlYkNvcmUyM1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kQzFFUE5TXzhEb2N1bWVudEVOM1dURjEwUGFzc1JlZlB0cklOU18x
NkRvY3VtZW50RnJhZ21lbnRFRUViYmJiYk5TXzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTIz
Y3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVudEVSS04zV1RGNlZlY3RvcklQTlNf
NE5vZGVFTG0wRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3Jp
dGVQcm9wZXJ0eUxpc3RFdgorX19aTjdXZWJDb3JlMjRXZWJDb3JlQ3JlZGVudGlhbFN0b3JhZ2U5
bV9zdG9yYWdlRQogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUE5TXzhE
b2N1bWVudEVSS05TXzZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hh
bmdlZEUKIF9fWk43V2ViQ29yZTI0cmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50RVJLTlNfOFBvc2l0
aW9uRQotX19aTjdXZWJDb3JlMjRXZWJDb3JlQ3JlZGVudGlhbFN0b3JhZ2U5bV9zdG9yYWdlRQog
X19aTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0YUV2CiBf
X1pON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxMndyaXRlT2JqZWN0c0VSTlNf
MzBCaW5hcnlQcm9wZXJ0eUxpc3RPYmplY3RTdHJlYW1FCiBfX1pON1dlYkNvcmUyNUhpc3RvcnlQ
cm9wZXJ0eUxpc3RXcml0ZXIxNndyaXRlSGlzdG9yeUl0ZW1FUk5TXzMwQmluYXJ5UHJvcGVydHlM
aXN0T2JqZWN0U3RyZWFtRVBOU18xMUhpc3RvcnlJdGVtRQpAQCAtNTM3LDYgKzUzNyw3IEBAIF9f
Wk43V2ViQ29yZTZFZGl0b3IxM3BlcmZvcm1EZWxldGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjEz
cmFuZ2VGb3JQb2ludEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTZFZGl0b3IxM3RyeURI
VE1MUGFzdGVFdgogX19aTjdXZWJDb3JlNkVkaXRvcjE0c2V0Q29tcG9zaXRpb25FUktOU182U3Ry
aW5nRVJLTjNXVEY2VmVjdG9ySU5TXzIwQ29tcG9zaXRpb25VbmRlcmxpbmVFTG0wRUVFamoKK19f
Wk43V2ViQ29yZTZFZGl0b3IxNWFwcGx5SU1FQ29tbWFuZEVQTlNfMTBJTUVDb21tYW5kRQogX19a
TjdXZWJDb3JlNkVkaXRvcjE2cGFzdGVBc1BsYWluVGV4dEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MTdpbnNlcnRPcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9yMThjb25maXJtQ29tcG9z
aXRpb25FUktOU182U3RyaW5nRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5jcHAgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAppbmRleCA2YmM4MjVmLi5iNmE4
MmE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAorKysgYi9XZWJD
b3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMTUzLDYgKzE1MywxMSBAQCBpbnQgS2V5Ym9h
cmRFdmVudDo6d2hpY2goKSBjb25zdAogICAgIHJldHVybiBrZXlDb2RlKCk7CiB9CiAKK3ZvaWQg
S2V5Ym9hcmRFdmVudDo6c2V0S2V5Q29kZUZvcklNRSgpCit7CisgICAgbV9rZXlFdmVudC0+c2V0
V2luZG93c1ZpcnR1YWxLZXlDb2RlKENvbXBvc2l0aW9uRXZlbnRLZXlDb2RlKTsKK30KKwogS2V5
Ym9hcmRFdmVudCogZmluZEtleWJvYXJkRXZlbnQoRXZlbnQqIGV2ZW50KQogewogICAgIGZvciAo
RXZlbnQqIGUgPSBldmVudDsgZTsgZSA9IGUtPnVuZGVybHlpbmdFdmVudCgpKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIGIvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVu
dC5oCmluZGV4IDJiMGExMzEuLjE5ZjM2NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0tleWJv
YXJkRXZlbnQuaAorKysgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKQEAgLTI0LDEwICsy
NCwxNCBAQAogI2lmbmRlZiBLZXlib2FyZEV2ZW50X2gKICNkZWZpbmUgS2V5Ym9hcmRFdmVudF9o
CiAKKyNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJVSUV2ZW50V2l0aEtleVN0YXRlLmgi
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgLy8g
TWF0Y2gga2V5IGNvZGUgb2YgY29tcG9zaXRpb24ga2V5ZG93biBldmVudCBvbiB3aW5kb3dzLgor
ICAgIC8vIElFIHNlbmRzIFZLX1BST0NFU1NLRVkgd2hpY2ggaGFzIHZhbHVlIDIyOTsKKyAgICBj
b25zdCBpbnQgQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSAyMjk7CiAKICAgICBjbGFzcyBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ7CiAKQEAgLTg3LDkgKzkxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIGludCB3aGljaCgpIGNvbnN0OwogCisgICAgICAgIC8vIFNldHMgdGhlIGtleWNv
ZGUgb2YgdGhpcyBldmVudCB0byB0aGUgSU1FIGtleWNvZGUgb2YgMjI5LgorICAgICAgICB2b2lk
IHNldEtleUNvZGVGb3JJTUUoKTsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gV2Ug
b25seSBoYXZlIHRoaXMgbmVlZCB0byBzdG9yZSBrZXlwcmVzcyBjb21tYW5kIGluZm8gb24gdGhl
IE1hYy4KICAgICAgICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGtleXByZXNzQ29tbWFuZHMo
KSB7IHJldHVybiBtX2tleXByZXNzQ29tbWFuZHM7IH0KKworICAgICAgICAvLyBDdXJyZW50bHks
IG9ubHkgTWFjIFNhZmFyaSB1c2VzIHRoaXMuIEV2ZW50dWFsbHkgR1RLLCBhbmQgQ2hyb21pdW0g
TGludXgvV2luCisgICAgICAgIC8vIHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoaXMgYXMgd2VsbCB0
aG91Z2guIFRvIGVuc3VyZSBrZXlkb3duIGZpcmVzIGJlZm9yZSB0aGUKKyAgICAgICAgLy8gRE9N
IGlzIG1vZGlmaWVkIG9uIElNRSBrZXkgZXZlbnRzLgorICAgICAgICBJTUVDb21tYW5kKiBpbWVD
b21tYW5kKCkgeyByZXR1cm4gbV9pbWVDb21tYW5kLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0
SU1FQ29tbWFuZChJTUVDb21tYW5kKiBjb21tYW5kKSB7IG1faW1lQ29tbWFuZC5zZXQoY29tbWFu
ZCk7IH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKQEAgLTEwNiw2ICsxMTksMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCiAgICAgICAgIFZlY3Rv
cjxLZXlwcmVzc0NvbW1hbmQ+IG1fa2V5cHJlc3NDb21tYW5kczsKKyAgICAgICAgLy8gQ3VycmVu
dGx5LCBvbmx5IE1hYyBTYWZhcmkgdXNlcyB0aGlzLiBFdmVudHVhbGx5IEdUSywgYW5kIENocm9t
aXVtIExpbnV4L1dpbgorICAgICAgICAvLyBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzIGFzIHdl
bGwgdGhvdWdoLiBUbyBlbnN1cmUga2V5ZG93biBmaXJlcyBiZWZvcmUgdGhlCisgICAgICAgIC8v
IERPTSBpcyBtb2RpZmllZCBvbiBJTUUga2V5IGV2ZW50cy4KKyAgICAgICAgT3duUHRyPElNRUNv
bW1hbmQ+IG1faW1lQ29tbWFuZDsKICNlbmRpZgogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
NmE1ZDI5Zi4uYTdmYTY0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE0MjQsNiArMTQyNCwxNCBAQCB2
b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogICAgIHNldElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9u
Q2hhbmdlKGZhbHNlKTsKIH0KIAordm9pZCBFZGl0b3I6OmFwcGx5SU1FQ29tbWFuZChJTUVDb21t
YW5kKiBjb21tYW5kKQoreworICAgIGlmIChjb21tYW5kLT5pc0NvbmZpcm1hdGlvbkNvbW1hbmQp
CisgICAgICAgIGNvbmZpcm1Db21wb3NpdGlvbihjb21tYW5kLT50ZXh0KTsKKyAgICBlbHNlCisg
ICAgICAgIHNldENvbXBvc2l0aW9uKGNvbW1hbmQtPnRleHQsIGNvbW1hbmQtPnVuZGVybGluZXMs
IGNvbW1hbmQtPnNlbGVjdGlvblN0YXJ0LCBjb21tYW5kLT5zZWxlY3Rpb25FbmQpOworfQorCiB2
b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogewogICAgIGlmICghY2xpZW50KCkpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKaW5kZXggMTIxNWU5ZS4uM2YxOWQzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtNTgsNiArNTgsMjkgQEAg
c3RydWN0IENvbXBvc2l0aW9uVW5kZXJsaW5lIHsKICAgICBib29sIHRoaWNrOwogfTsKIAorc3Ry
dWN0IElNRUNvbW1hbmQgeworICAgIElNRUNvbW1hbmQoY29uc3QgU3RyaW5nJiBjb25maXJtZWRU
ZXh0KQorICAgICAgICA6IHRleHQoY29uZmlybWVkVGV4dCkKKyAgICAgICAgLCBpc0NvbmZpcm1h
dGlvbkNvbW1hbmQodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgSU1FQ29tbWFuZChjb25zdCBT
dHJpbmcmIG5ld1RleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVy
bGluZXMsIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCBzZWxlY3Rpb25FbmQpCisg
ICAgICAgIDogdGV4dChuZXdUZXh0KQorICAgICAgICAsIGlzQ29uZmlybWF0aW9uQ29tbWFuZChm
YWxzZSkKKyAgICAgICAgLCB1bmRlcmxpbmVzKHVuZGVybGluZXMpCisgICAgICAgICwgc2VsZWN0
aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCisgICAgICAgICwgc2VsZWN0aW9uRW5kKHNlbGVjdGlv
bkVuZCkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBpc0NvbmZp
cm1hdGlvbkNvbW1hbmQ7CisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxp
bmVzOworICAgIHVuc2lnbmVkIHNlbGVjdGlvblN0YXJ0OworICAgIHVuc2lnbmVkIHNlbGVjdGlv
bkVuZDsKK307CisKIGVudW0gVHJpU3RhdGUgeyBGYWxzZVRyaVN0YXRlLCBUcnVlVHJpU3RhdGUs
IE1peGVkVHJpU3RhdGUgfTsKIGVudW0gRWRpdG9yQ29tbWFuZFNvdXJjZSB7IENvbW1hbmRGcm9t
TWVudU9yS2V5QmluZGluZywgQ29tbWFuZEZyb21ET00sIENvbW1hbmRGcm9tRE9NV2l0aFVzZXJJ
bnRlcmZhY2UgfTsKIGVudW0gV3JpdGluZ0RpcmVjdGlvbiB7IE5hdHVyYWxXcml0aW5nRGlyZWN0
aW9uLCBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24sIFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVj
dGlvbiB9OwpAQCAtMjU5LDYgKzI4Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbmZpcm1Db21w
b3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7CiAgICAgUGFzc1JlZlB0cjxSYW5n
ZT4gY29tcG9zaXRpb25SYW5nZSgpIGNvbnN0OwogICAgIGJvb2wgZ2V0Q29tcG9zaXRpb25TZWxl
Y3Rpb24odW5zaWduZWQmIHNlbGVjdGlvblN0YXJ0LCB1bnNpZ25lZCYgc2VsZWN0aW9uRW5kKSBj
b25zdDsKKyAgICB2b2lkIGFwcGx5SU1FQ29tbWFuZChJTUVDb21tYW5kKik7CiAKICAgICAvLyBn
ZXR0aW5nIGludGVybmF0aW9uYWwgdGV4dCBpbnB1dCBjb21wb3NpdGlvbiBzdGF0ZSAoZm9yIHVz
ZSBieSBJbmxpbmVUZXh0Qm94KQogICAgIFRleHQqIGNvbXBvc2l0aW9uTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcG9zaXRpb25Ob2RlLmdldCgpOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL21h
bnVhbC10ZXN0cy9sb2ctaW1lLWtleS1ldmVudHMuaHRtbCBiL1dlYkNvcmUvbWFudWFsLXRlc3Rz
L2xvZy1pbWUta2V5LWV2ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjRkYjM1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL21hbnVhbC10ZXN0cy9sb2ct
aW1lLWtleS1ldmVudHMuaHRtbApAQCAtMCwwICsxLDM1IEBACis8aHRtbD4KKzxoZWFkPgorICA8
bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNl
dD11dGYtOCI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgCis8cD5UaGlzIHRlc3RzIHRoYXQga2V5ZG93
biBmaXJlcywgdGhlbiB0aGUgRE9NIGlzIG1vZGlmaWVkIGtleXVwIGZpcmVzIGR1cmluZyBJTUUg
aW5wdXQuIFRoaXMgYWxzbyB0ZXN0cyB0aGUga2V5cHJlc3MgbmV2ZXIgZmlyZXMgZm9yIElNRSBp
bnB1dC4gVG8gdGVzdCB0aGlzLCBmaXJzdCBzd2l0Y2ggdG8gS2F0YWthbmEuPC9wPgorPG9sPgor
ICA8bGk+VHlwZSAnZCcgYW5kIHNlZSBpdCBnZXQgaW5zZXJ0ZWQgaW50byB0aGUgZGl2IGJldHdl
ZW4ga2V5ZG93biBhbmQga2V5dXAuIFR5cGUgJ2UnIGFuZCBzZWUgJ+ODhycgZ2V0IGluc2VydGVk
LiBIaXQgZW50ZXIgYW5kIHNlZSB0aGF0IHRoZSBkaXYncyBjb250ZW50cyBkb24ndCBjaGFuZ2Uu
PC9saT4KKyAgPGxpPlR5cGUgImRlIiBhbmQgc2VlIHRoYXQgdGhlIGRpdidzIGNvbnRlbnRzIGJl
Y29tZSAi44OH44OHIi4gVHlwZSBlc2NhcGUgYW5kIHNlZSB0aGUgZGl2J3MgY29udGVudHMgYmVj
b21lICfjg4cnIGJldHdlZW4gdGhlIGtleWRvd24gYW5kIGtleXVwIG9mIHRoZSBlc2NhcGUuPC9s
aT4KKyAgPGxpPlR5cGUgInRhZGUiIGFuZCB5b3Ugc2hvdWxkIHNlZSAi44K/44OHIiBnZXQgaW5z
ZXJ0ZWQuIEhpdCBzcGFjZSBhbmQgc2VlIHRoZSBjdXJzb3IgZGlzYXBwZWFyIGFuZCB0aGUgdW5k
ZXJsaW5lIHJlbWFpbnMu44CASGl0IGVudGVyIHRvIGNvbmZpcm0gdGhlIGVudHJ5IGFuZCBzZWUg
dGhlIHRleHQgcmVtYWluLjwvbGk+CisgIDxsaT5UeXBlICJkZSIsIHRoZW4gY2xpY2sgc29tZXdo
ZXJlIGVsc2UuIFRoaXMgc2hvdWxkIGNvbmZpcm0gdGhlIGVudHJ5IChpLmUuIHJlbW92ZSB0aGUg
dW5kZXJsaW5lKSwgYnV0IGxlYXZlIHRoZSBjdXJzb3Igd2hlcmUgaXQgd2FzLjwvbGk+Cis8L29s
PgorCis8ZGl2IGNvbnRlbnRFZGl0YWJsZSBpZD1yb290IHN0eWxlPSJib3JkZXI6IDFweCBkYXNo
ZWQgYmx1ZSI+PC9kaXY+Cis8ZGl2IGlkPWxvZz48L2Rpdj4KKworPHNjcmlwdD4KKyAgZnVuY3Rp
b24gZGVidWcoc3RyKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpLmlubmVy
SFRNTCArPSBzdHIgKyAnPGJyPic7CisgIH07CisgIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3Jvb3QnKTsKKyAgcm9vdC5vbmtleWRvd24gPSBmdW5jdGlvbihlKSB7CisgICAg
ZGVidWcoJ0tFWURPV04ga2V5Y29kZTogJyArIGUua2V5Q29kZSArICcgaHRtbDogJyArIHJvb3Qu
aW5uZXJIVE1MKTsKKyAgfTsKKyAgcm9vdC5vbmtleXByZXNzID0gZnVuY3Rpb24oZSkgeworICAg
IGRlYnVnKCdLRVlQUkVTUyBrZXljb2RlOiAnICsgZS5rZXlDb2RlICsgJyBodG1sOiAnICsgcm9v
dC5pbm5lckhUTUwpOworICB9OworICByb290Lm9ua2V5dXAgPSBmdW5jdGlvbihlKSB7CisgICAg
ZGVidWcoJ0tFWVVQIGtleWNvZGU6ICcgKyBlLmtleUNvZGUgKyAnIGh0bWw6ICcgKyByb290Lmlu
bmVySFRNTCk7CisgIH07Cis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAppbmRleCA1ZmJmMjRjLi43OTY2NzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
ODUsMTAgKzg1LDYgQEAgY29uc3QgaW50IEltYWdlRHJhZ0h5c3RlcmVzaXMgPSA1OwogY29uc3Qg
aW50IFRleHREcmFnSHlzdGVyZXNpcyA9IDM7CiBjb25zdCBpbnQgR2VuZXJhbERyYWdIeXN0ZXJl
c2lzID0gMzsKIAotLy8gTWF0Y2gga2V5IGNvZGUgb2YgY29tcG9zaXRpb24ga2V5ZG93biBldmVu
dCBvbiB3aW5kb3dzLgotLy8gSUUgc2VuZHMgVktfUFJPQ0VTU0tFWSB3aGljaCBoYXMgdmFsdWUg
MjI5OwotY29uc3QgaW50IENvbXBvc2l0aW9uRXZlbnRLZXlDb2RlID0gMjI5OwotCiAjaWYgRU5B
QkxFKFNWRykKIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKICNlbmRpZgpAQCAtMTkyNSwxNCAr
MTkyMSwyOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXli
b2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQpCiAgICAgCiAgICAgYm9vbCBoYW5kbGVkQnlJbnB1
dE1ldGhvZCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVkKCk7CiAgICAgCi0gICAgaWYgKGhhbmRs
ZWRCeUlucHV0TWV0aG9kKSB7Ci0gICAgICAgIGtleURvd25FdmVudC5zZXRXaW5kb3dzVmlydHVh
bEtleUNvZGUoQ29tcG9zaXRpb25FdmVudEtleUNvZGUpOwotICAgICAgICBrZXlkb3duID0gS2V5
Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVm
YXVsdFZpZXcoKSk7Ci0gICAgICAgIGtleWRvd24tPnNldFRhcmdldChub2RlKTsKLSAgICAgICAg
a2V5ZG93bi0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAgICB9CisgICAgaWYgKGhhbmRsZWRCeUlu
cHV0TWV0aG9kKQorICAgICAgICBrZXlkb3duLT5zZXRLZXlDb2RlRm9ySU1FKCk7CiAKICAgICBu
b2RlLT5kaXNwYXRjaEV2ZW50KGtleWRvd24sIGVjKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICAvLyBJZiB0aGUgaW1lQ29tbWFuZCBpcyBzZXQsIHRoZW4gdGhlcmUgaXMgYW4gSU1FIG9wZXJh
dGlvbiB0byBiZSBhcHBsaWVkCisgICAgLy8gdGhhdCB3YXMgc3RvcmVkIGluIHRoZSBLZXlFdmVu
dHMgaW1lQ29tbWFuZCBzbyB0aGF0IHRoZSBvcGVyYXRpb24gY291bGQKKyAgICAvLyBiZSBhcHBs
aWVkIGFmdGVyIHRoZSBrZXlkb3duIGV2ZW50IHdhcyBmaXJlZC4KKyAgICAvLworICAgIC8vIEN1
cnJlbnRseSwgb25seSBNYWMgU2FmYXJpIHVzZXMgdGhpcy4gRXZlbnR1YWxseSBHVEssIGFuZCBD
aHJvbWl1bSBMaW51eC9XaW4KKyAgICAvLyBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGlzIGFzIHdl
bGwgdGhvdWdoLiBUbyBlbnN1cmUga2V5ZG93biBmaXJlcyBiZWZvcmUgdGhlCisgICAgLy8gRE9N
IGlzIG1vZGlmaWVkIG9uIElNRSBrZXkgZXZlbnRzLgorICAgIC8vCisgICAgLy8gRklYTUU6IFJl
c3BlY3Qga2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRlZCgpIGhlcmUgKGkuZS4gZG9uJ3QgYXBwbHkg
dGhlIGNvbW1hbmQpLgorICAgIC8vIFRoZSBkaWZmaWN1bHR5IGlzIGdldHRpbmcgdGhlIE9TIElN
RSBiYWNrIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYmVmb3JlCisgICAgLy8gd2UgY2FsbGVkIGhh
bmRsZUlucHV0TWV0aG9kS2V5ZG93biBhYm92ZS4KKyAgICBpZiAoa2V5ZG93bi0+aW1lQ29tbWFu
ZCgpKSB7CisgICAgICAgIEFTU0VSVChoYW5kbGVkQnlJbnB1dE1ldGhvZCk7CisgICAgICAgIG1f
ZnJhbWUtPmVkaXRvcigpLT5hcHBseUlNRUNvbW1hbmQoa2V5ZG93bi0+aW1lQ29tbWFuZCgpKTsK
KyAgICB9CisjZW5kaWYKKwogICAgIGJvb2wga2V5ZG93blJlc3VsdCA9IGtleWRvd24tPmRlZmF1
bHRIYW5kbGVkKCkgfHwga2V5ZG93bi0+ZGVmYXVsdFByZXZlbnRlZCgpOwogICAgIGlmIChoYW5k
bGVkQnlJbnB1dE1ldGhvZCB8fCAoa2V5ZG93blJlc3VsdCAmJiAhYmFja3dhcmRDb21wYXRpYmls
aXR5TW9kZSkpCiAgICAgICAgIHJldHVybiBrZXlkb3duUmVzdWx0OwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBiMTAzOGVkLi5j
OGNjMTc1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFj
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDA5LTA1LTE3ICBPamFuIFZhZmFpICA8b2ph
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRmlyZSB0aGUga2V5ZG93biBldmVudCBiZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50
byB0aGUgRE9NIG9uIElNRSBpbnB1dAorICAgICAgICBvbiB0aGUgTWFjLiBXaW5kb3dzIFdlYktp
dCBkb2VzIHRoaXMgYWxyZWFkeSwgYXMgZG8gSUUgYW5kIEZpcmVmb3guCisgICAgICAgIAorICAg
ICAgICBPbiBNYWMsIHdlIG5lZWQgdG8gc2VuZCB0aGUga2V5IGV2ZW50IHRvIHRoZSBJTUUgYmVm
b3JlIGZpcmluZyBrZXlkb3duIHRvCisgICAgICAgIGtub3cgdGhhdCBpdCdzIGFuIElNRSBpbnB1
dCAoc28gd2UgY2FuIHNldCB0aGUga2V5Y29kZSB0byAyMjkpLiBJbiBvcmRlcgorICAgICAgICB0
byBmaXJlIHRoZSBrZXlkb3duIGFmdGVyIHRoZSBET00gaXMgbW9kaWZpZWQgd2U6CisgICAgICAg
ICAgLVNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIElNRS4KKyAgICAgICAgICAtSWYgdGhlIElNRSBo
YW5kbGVzIGl0LCB0aGVuIHdlIHN0b3JlIHRoZSByZWxldmFudCBkYXRhIGZyb20gdGhlIElNRQor
ICAgICAgICAgIG9uIHRoZSBrZXkgZXZlbnQuCisgICAgICAgICAgLVRoZW4sIGluIEV2ZW50SGFu
ZGxlcjo6a2V5RXZlbnQsIHdlIGZpcmUga2V5ZG93bi4KKyAgICAgICAgICAtRmluYWxseSwgd2Ug
YXBwbHkgdGhlIElNRSB0ZXh0IGluc2VydGlvbiB0byB0aGUgRE9NLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBmaXhlcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUx
MTkuIEl0IGRvZXMgbm90CisgICAgICAgIGZpeCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU1NDMsIHdoaWNoIGlzIGFib3V0IGNhbmNlbGluZworICAgICAgICBJTUUg
aW5wdXQgaWYgdGhlIGtleWRvd24gZXZlbnQgaXMgcHJldmVudERlZmF1bHRlZCAod2hpY2ggYWxz
byB3b3JrcyBvbiAKKyAgICAgICAgV2luZG93cyBXZWJLaXQpLgorICAgICAgICAKKyAgICAgICAg
VGhlcmUncyBubyBhdXRvbWF0ZWQgd2F5IHRvIHRlc3QgSU1FIGlucHV0LCBzbyBJJ3ZlIGFkZGVk
IGEgbWFudWFsIHRlc3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU4NDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgICogV2ViVmll
dy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpz
ZWxlY3RlZFJhbmdlOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRUZXh0Ol0pOgor
CiAyMDA5LTA1LTE2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyBhbmQgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdp
dCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQppbmRleCA0Y2Y1OWJhLi5jNDM2Yjg4IDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tCkBAIC01Njc0LDYgKzU2NzQsMTYgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVu
ZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVu
ZGUKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIGFwcGx5SU1FQ29tbWFuZChGcmFtZSogZnJhbWUs
IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycywgSU1F
Q29tbWFuZCogY29tbWFuZCkKK3sKKyAgICAvLyBJZiB0aGVyZSdzIGEga2V5IGV2ZW50LCBzdG93
IGF3YXkgdGhlIElNRSBjb21tYW5kIHRvIGJlIHByb2Nlc3NlZCBpbgorICAgIC8vIEV2ZW50SGFu
ZGxlcjo6a2V5RXZlbnQgYWZ0ZXIgdGhlIGtleWRvd24gaGFzIGJlZW4gZmlyZWQuCisgICAgaWYg
KHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+ZXZlbnQpCisgICAgICAgIHBhcmFtZXRlcnMtPmV2
ZW50LT5zZXRJTUVDb21tYW5kKGNvbW1hbmQpOworICAgIGVsc2UKKyAgICAgICAgZnJhbWUtPmVk
aXRvcigpLT5hcHBseUlNRUNvbW1hbmQoY29tbWFuZCk7Cit9CisKIC0gKHZvaWQpc2V0TWFya2Vk
VGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKIHsKICAg
ICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRy
aWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKQEAgLTU2ODgsNyAr
NTY5OCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmlu
ZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgICAgIHBhcmFtZXRlcnMtPmV2
ZW50V2FzSGFuZGxlZCA9IFlFUzsKICAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0g
Tk87CiAgICAgfQotICAgIAorCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTU3MTIsNyAr
NTcyMiw4IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmlu
ZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAgICAgICAgIGV4dHJhY3RVbmRlcmxp
bmVzKHN0cmluZywgdW5kZXJsaW5lcyk7CiAgICAgfQogCi0gICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRpb24s
IE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpKTsKKyAgICBJTUVDb21tYW5kKiBjb21tYW5kID0gbmV3
IElNRUNvbW1hbmQodGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIE5TTWF4
UmFuZ2UobmV3U2VsUmFuZ2UpKTsKKyAgICBhcHBseUlNRUNvbW1hbmQoY29yZUZyYW1lLCBwYXJh
bWV0ZXJzLCBjb21tYW5kKTsKIH0KIAogLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwp
c2VsZWN0b3IKQEAgLTU4MjcsNyArNTgzOCw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxp
bmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlCiAg
ICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0
VGV4dChldmVudFRleHQsIGV2ZW50KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKGV2ZW50VGV4dCk7CisgICAgICAgICAgICAgICAgYXBw
bHlJTUVDb21tYW5kKGNvcmVGcmFtZS5nZXQoKSwgcGFyYW1ldGVycywgbmV3IElNRUNvbW1hbmQo
ZXZlbnRUZXh0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="review"
          id="15356"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30464</attachid>
            <date>2009-05-19 00:57:44 -0700</date>
            <delta_ts>2010-06-10 17:14:28 -0700</delta_ts>
            <desc>Restructure after ap&apos;s feedback.</desc>
            <filename>Restructure-after-ap-s-feedback..patch</filename>
            <type>text/plain</type>
            <size>25138</size>
            <attacher name="Ojan Vafai">ojan</attacher>
            
              <data encoding="base64">YWY2M2JjOTQyNDM4YTg1MjU5Y2E5ODIwNmM2MjFmNTdlZmIwNDExOApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvaW5wdXQvaW1lLWtleS1ldmVudHMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvaW5wdXQvaW1lLWtleS1l
dmVudHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZj
OTE4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9pbnB1dC9pbWUta2V5LWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0NSBAQAorQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDc3OiBUeXBlRXJyb3I6IFJlc3VsdCBvZiBleHByZXNzaW9uICdr
ZXlEb3duc1tjdXJyZW50XScgW3VuZGVmaW5lZF0gaXMgbm90IGFuIG9iamVjdC4KK1Rlc3RzIGtl
eSBldmVudHMgb24gSU1FIGlucHV0LiBTcGVjaWZpY2FsbHkgdGhhdCBrZXlkb3duIGZpcmVzIGJl
Zm9yZSB0aGUgRE9NIGlzIG1vZGlmaWVkLiBUbyB0ZXN0IG1hbnVhbGx5LCBsb2FkIHRoZSB0ZXN0
LCBzd2l0Y2ggdG8gdGhlIEtvdG9lcmkvSGlyYWdhbmEgaW5wdXQgbWV0aG9kLCBhbmQgdHlwZTog
J2RlW2VudGVyXWRlW2VzY2FwZV10YWRlW3NwYWNlXVtzcGFjZV1bZW50ZXJdZGVbZW50ZXJdW2Vu
dGVyXScuIFlvdSBzaG91bGQgc2VlIGEgc2VyaWVzIG9mIFBBU1Mga2V5ZG93bi9rZXl1cCBsaW5l
cy5Pbmx5IHRoZSBmaW5hbCBlbnRlciBwcmVzcyBzaG91bGQgaGF2ZSBhIGtleXByZXNzIG1lc3Nh
Z2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGtleWRvd24ga2V5Q29k
ZTogMjI5IGh0bWw6IAorUEFTUyBrZXl1cCBrZXlDb2RlOiA2OCBodG1sOiBkCitQQVNTIGtleWRv
d24ga2V5Q29kZTogMjI5IGh0bWw6IGQKK1BBU1Mga2V5dXAga2V5Q29kZTogNjkgaHRtbDogZGUK
K1BBU1Mga2V5ZG93biBrZXlDb2RlOiAyMjkgaHRtbDogZGUKK1BBU1Mga2V5dXAga2V5Q29kZTog
MTMgaHRtbDogZGUKK1BBU1Mga2V5ZG93biBrZXlDb2RlOiAyMjkgaHRtbDogZGUKK1BBU1Mga2V5
dXAga2V5Q29kZTogNjggaHRtbDogZGVkCitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0bWw6
IGRlZAorUEFTUyBrZXl1cCBrZXlDb2RlOiA2OSBodG1sOiBkZWRlCitQQVNTIGtleWRvd24ga2V5
Q29kZTogMjI5IGh0bWw6IGRlZGUKK1BBU1Mga2V5dXAga2V5Q29kZTogMjcgaHRtbDogZGUKK1BB
U1Mga2V5ZG93biBrZXlDb2RlOiAyMjkgaHRtbDogZGUKK1BBU1Mga2V5dXAga2V5Q29kZTogODQg
aHRtbDogZGV0CitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0bWw6IGRldAorUEFTUyBrZXl1
cCBrZXlDb2RlOiA2NSBodG1sOiBkZXRhCitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0bWw6
IGRldGEKK1BBU1Mga2V5dXAga2V5Q29kZTogNjggaHRtbDogZGV0YWQKK1BBU1Mga2V5ZG93biBr
ZXlDb2RlOiAyMjkgaHRtbDogZGV0YWQKK1BBU1Mga2V5dXAga2V5Q29kZTogNjkgaHRtbDogZGV0
YWRlCitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0bWw6IGRldGFkZQorUEFTUyBrZXl1cCBr
ZXlDb2RlOiAzMiBodG1sOiBkZXRhZGUKK1BBU1Mga2V5ZG93biBrZXlDb2RlOiAyMjkgaHRtbDog
ZGV0YWRlCitQQVNTIGtleXVwIGtleUNvZGU6IDMyIGh0bWw6IGRldGFkZQorUEFTUyBrZXlkb3du
IGtleUNvZGU6IDIyOSBodG1sOiBkZXRhZGUKK1BBU1Mga2V5dXAga2V5Q29kZTogMTMgaHRtbDog
ZGV0YWRlCitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0bWw6IGRldGFkZQorUEFTUyBrZXl1
cCBrZXlDb2RlOiA2OCBodG1sOiBkZXRhZGVkCitQQVNTIGtleWRvd24ga2V5Q29kZTogMjI5IGh0
bWw6IGRldGFkZWQKK1BBU1Mga2V5dXAga2V5Q29kZTogNjkgaHRtbDogZGV0YWRlZGUKK1BBU1Mg
a2V5ZG93biBrZXlDb2RlOiAyMjkgaHRtbDogZGV0YWRlZGUKK1BBU1Mga2V5dXAga2V5Q29kZTog
MTMgaHRtbDogZGV0YWRlZGUKK1BBU1Mga2V5ZG93biBrZXlDb2RlOiAxMyBodG1sOiBkZXRhZGVk
ZQorUEFTUyBrZXlwcmVzcyBrZXlDb2RlOiAxMyBodG1sOiBkZXRhZGVkZQorUEFTUyBrZXl1cCBr
ZXlDb2RlOiAxMyBodG1sOiBkZXRhZGVkZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL2lucHV0L2ltZS1rZXktZXZlbnRzLmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZWRpdGluZy9pbnB1dC9pbWUta2V5LWV2ZW50cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTFkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9pbWUta2V5LWV2ZW50cy5odG1sCkBAIC0wLDAg
KzEsMTYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9
InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ia290b2VyaS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iaGFuZ3Vs
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvaW1lLWtl
eS1ldmVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9rb3RvZXJp
LWVudGVyLXRvLWNvbmZpcm0tYW5kLW5ld2xpbmUuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9lZGl0aW5nL2lucHV0L2tvdG9lcmktZW50ZXItdG8tY29uZmlybS1hbmQtbmV3bGluZS5o
dG1sCmluZGV4IDQzMDMwODYuLjI5MDllNDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9lZGl0aW5nL2lucHV0L2tvdG9lcmktZW50ZXItdG8tY29uZmlybS1hbmQtbmV3bGlu
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2lucHV0L2tvdG9l
cmktZW50ZXItdG8tY29uZmlybS1hbmQtbmV3bGluZS5odG1sCkBAIC01MSw5ICs1MSw5IEBACiAg
ICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ3knKTsKICAgICAgICAgZXZlbnRTZW5kZXIua2V5
RG93bignbycpOwogICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCd1Jyk7Ci0gICAgICAgIGV2
ZW50U2VuZGVyLmtleURvd24oJ1xuJyk7CisgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oJ2Vu
dGVyJyk7CiAgICAgICAgIHNob3VsZEJlQ29tcG9zaXRpb25FdmVudCA9IGZhbHNlOwotICAgICAg
ICBldmVudFNlbmRlci5rZXlEb3duKCdcbicpOworICAgICAgICBldmVudFNlbmRlci5rZXlEb3du
KCdlbnRlcicpOwogICAgICAgICBpZiAodGFyZ2V0SW5wdXQudmFsdWUgIT0gInRvdWt5b3UiKQog
ICAgICAgICAgICAgbG9nKCJGQUlMRUQ6IElucHV0IGZpZWxkIHNob3VsZCBjb3VudGFpbiB0aGUg
dGV4dCAndG91a3lvdSciKTsKICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2VkaXRpbmcvaW5wdXQva290b2VyaS5qcyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9lZGl0aW5nL2lucHV0L2tvdG9lcmkuanMKaW5kZXggMTlkNDk3MS4uYjU3YjM0NiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvaW5wdXQva290b2Vy
aS5qcworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9rb3RvZXJp
LmpzCkBAIC0xLDYgKzEsNyBAQAogdmFyIGtvdG9lcmlTdGF0ZSA9IHsgImNvbXBvc2l0aW9uU3Ry
aW5nIjogbnVsbCB9OwogZnVuY3Rpb24ga290b2VyaShldmVudCl7Ci0gICAgaWYgKGV2ZW50LmNo
YXJhY3RlcnNbMF0gPT0gJ1xuJykgeworICAgIC8vIEVudGVyIGtleSBpcyBjaGFyQ29kZSAxMy4K
KyAgICBpZiAoZXZlbnQuY2hhcmFjdGVyc1swXSA9PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDEzKSkg
ewogICAgICAgICBpZiAoa290b2VyaVN0YXRlLmNvbXBvc2l0aW9uU3RyaW5nID09IG51bGwpIHsK
ICAgICAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuZG9Db21tYW5kKCJpbnNlcnROZXdsaW5l
OiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04LDggKzksMjIgQEAgZnVuY3Rpb24g
a290b2VyaShldmVudCl7CiAgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXIuaW5zZXJ0VGV4dChr
b3RvZXJpU3RhdGUuY29tcG9zaXRpb25TdHJpbmcpOwogICAgICAgICBrb3RvZXJpU3RhdGUuY29t
cG9zaXRpb25TdHJpbmcgPSBudWxsOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9ICAgICAg
ICAKLSAgICAgICAgCisgICAgfQorICAgIAorICAgIC8vIEVzY2FwZSBrZXkgaXMgY2hhckNvZGUg
MjcuCisgICAgaWYgKGV2ZW50LmNoYXJhY3RlcnNbMF0gPT0gU3RyaW5nLmZyb21DaGFyQ29kZSgy
NykpIHsKKyAgICAgICAgaWYgKGtvdG9lcmlTdGF0ZS5jb21wb3NpdGlvblN0cmluZyAhPSBudWxs
KSB7CisgICAgICAgICAgICBrb3RvZXJpU3RhdGUuY29tcG9zaXRpb25TdHJpbmcgPSBudWxsOwor
ICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlci5zZXRNYXJrZWRUZXh0KCIiLCAwLCAwKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGV2
ZW50LmNoYXJhY3RlcnNbMF0gPT0gJyAnICYmIGtvdG9lcmlTdGF0ZS5jb21wb3NpdGlvblN0cmlu
ZyAhPSBudWxsKSB7CisgICAgICAgIC8vIEZJWE1FOiBEbyB0aGUgY29ycmVjdCB0ZXh0IG1hcmtp
bmcvc2VsZWN0aW9uIHdoZW4gc3BhY2UgaXMgaGl0IG9uIHVuY29uZmlybWVkIHRleHQuCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICBpZiAoa290b2VyaVN0YXRlLmNvbXBv
c2l0aW9uU3RyaW5nID09IG51bGwpIAogICAgICAgICAga290b2VyaVN0YXRlLmNvbXBvc2l0aW9u
U3RyaW5nID0gIiI7CiAgICAga290b2VyaVN0YXRlLmNvbXBvc2l0aW9uU3RyaW5nICs9IGV2ZW50
LmNoYXJhY3RlcnM7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGlu
Zy9pbnB1dC9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL2lucHV0L3Jlc291cmNlcy9URU1QTEFURS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjM3MWE4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9yZXNvdXJjZXMvVEVNUExBVEUuaHRtbApAQCAt
MCwwICsxLDE2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250
ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9ImtvdG9lcmkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Imhh
bmd1bC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iWU9VUl9KU19GSUxF
X0hFUkUiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9yZXNvdXJjZXMvaW1l
LWtleS1ldmVudHMuanMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9pbnB1dC9y
ZXNvdXJjZXMvaW1lLWtleS1ldmVudHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzU0Njc1OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL2lucHV0L3Jlc291cmNlcy9pbWUta2V5LWV2ZW50cy5qcwpAQCAtMCwwICsxLDg1
IEBACitkZXNjcmlwdGlvbigiVGVzdHMga2V5IGV2ZW50cyBvbiBJTUUgaW5wdXQuIFNwZWNpZmlj
YWxseSB0aGF0IGtleWRvd24gZmlyZXMgYmVmb3JlIHRoZSBET00gaXMgbW9kaWZpZWQuICIgKwor
ICAgICJUbyB0ZXN0IG1hbnVhbGx5LCBsb2FkIHRoZSB0ZXN0LCBzd2l0Y2ggdG8gdGhlIEtvdG9l
cmkvSGlyYWdhbmEgaW5wdXQgbWV0aG9kLCBhbmQgdHlwZTogIiArCisgICAgIidkZVtlbnRlcl1k
ZVtlc2NhcGVddGFkZVtzcGFjZV1bc3BhY2VdW2VudGVyXWRlW2VudGVyXVtlbnRlcl0nLiBZb3Ug
c2hvdWxkIHNlZSBhIHNlcmllcyBvZiBQQVNTIGtleWRvd24va2V5dXAgbGluZXMuIiArCisgICAg
Ik9ubHkgdGhlIGZpbmFsIGVudGVyIHByZXNzIHNob3VsZCBoYXZlIGEga2V5cHJlc3MgbWVzc2Fn
ZS4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICB0ZXh0SW5wdXRD
b250cm9sbGVyLnNldElucHV0TWV0aG9kSGFuZGxlcihrb3RvZXJpKTsKKwordmFyIHJvb3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChyb290KTsKK3Jvb3QuZm9jdXMoKTsKKwordmFyIGN1cnJlbnQgPSAwOwordmFyIGtleURvd25z
ID0gW107CisKK2Z1bmN0aW9uIGFkZEtleURvd24oa2V5LCBleHBlY3RlZFZhbHVlLCBleHBlY3Rl
ZFJvbWFuVmFsdWUsIGV4cGVjdGVkS2V5RG93bkNvZGUsIGV4cGVjdGVkS2V5VXBDb2RlKQorewor
ICAgIC8vIHRleHRJbnB1dENvbnRyb2xsZXIgb25seSB3b3JrcyB3aXRoIHJvbWFuIGNoYXJhY3Rl
cnMuIFdlIGtlZXAgdGhlIG5vbi1yb21hbiB2YWx1ZXMgdG8gc3VwcG9ydAorICAgIC8vIG1ha2lu
ZyB0aGlzIHRlc3QgaW50ZXJhY3RpdmUuCisgICAga2V5RG93bnMucHVzaCh7CisgICAgICAgIGtl
eToga2V5LAorICAgICAgICB2YWx1ZTogZXhwZWN0ZWRWYWx1ZSwKKyAgICAgICAgcm9tYW5WYWx1
ZTogZXhwZWN0ZWRSb21hblZhbHVlLAorICAgICAgICBrZXlEb3duQ29kZTogZXhwZWN0ZWRLZXlE
b3duQ29kZSwKKyAgICAgICAga2V5VXBDb2RlOiBleHBlY3RlZEtleVVwQ29kZSB9KTsKK30KKwor
ZnVuY3Rpb24gYXNzZXJ0S2V5Q29kZUFuZEhUTUwoZXZlbnRUeXBlLCBleHBlY3RlZEtleUNvZGUs
IGFjdHVhbEtleUNvZGUsIGV4cGVjdGVkSFRNTCwgYWN0dWFsSFRNTCkKK3sKKyAgICBpZiAoZXhw
ZWN0ZWRLZXlDb2RlID09IGFjdHVhbEtleUNvZGUgJiYgZXNjYXBlKGV4cGVjdGVkSFRNTCkgPT0g
ZXNjYXBlKGFjdHVhbEhUTUwpKQorICAgICAgICB0ZXN0UGFzc2VkKGV2ZW50VHlwZSArICIga2V5
Q29kZTogIiArIGFjdHVhbEtleUNvZGUgKyAiIGh0bWw6ICIgKyBhY3R1YWxIVE1MKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZChldmVudFR5cGUgKyAiIGV4cGVjdGVkS2V5Q29kZTog
IiArIGV4cGVjdGVkS2V5Q29kZSArICIgYWN0dWFsS2V5Q29kZTogIiArIGFjdHVhbEtleUNvZGUg
KworICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWRIVE1MOiAiICsgZXhwZWN0ZWRIVE1MICsg
IiBhY3R1YWxIVE1MOiAiICsgYWN0dWFsSFRNTCk7CisgICAgfQorfQorCit2YXIgdmFsdWVQcm9w
ZXJ0eSA9IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciA/ICdyb21hblZhbHVlJyA6ICd2YWx1
ZSc7CisKK3Jvb3Qub25rZXlkb3duID0gcm9vdC5vbmtleXByZXNzID0gZnVuY3Rpb24oZSkKK3sK
KyAgICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IGN1cnJlbnQgPyBrZXlEb3duc1tjdXJyZW50IC0gMV1b
dmFsdWVQcm9wZXJ0eV0gOiAnJzsKKyAgICBhc3NlcnRLZXlDb2RlQW5kSFRNTChlLnR5cGUsIGtl
eURvd25zW2N1cnJlbnRdLmtleURvd25Db2RlLCBlLmtleUNvZGUsIGV4cGVjdGVkVmFsdWUsIHJv
b3QudmFsdWUpOworfQorCityb290Lm9ua2V5dXAgPSBmdW5jdGlvbihlKQoreworICAgIGFzc2Vy
dEtleUNvZGVBbmRIVE1MKGUudHlwZSwga2V5RG93bnNbY3VycmVudF0ua2V5VXBDb2RlLCBlLmtl
eUNvZGUsIGtleURvd25zW2N1cnJlbnRdW3ZhbHVlUHJvcGVydHldLCByb290LnZhbHVlKTsKKyAg
ICBjdXJyZW50Kys7CisgICAgZmlyZU5leHRLZXlEb3duKCk7Cit9CisKK2FkZEtleURvd24oJ2Qn
LCAiZCIsICJkIiwgMjI5LCA2OCk7CithZGRLZXlEb3duKCdlJywgIuOBpyIsICJkZSIsIDIyOSwg
NjkpOworYWRkS2V5RG93bignZW50ZXInLCAi44GnIiwgImRlIiwgMjI5LCAxMyk7CithZGRLZXlE
b3duKCdkJywgIuOBp2QiLCAiZGVkIiwgMjI5LCA2OCk7CithZGRLZXlEb3duKCdlJywgIuOBp+OB
pyIsICJkZWRlIiwgMjI5LCA2OSk7CithZGRLZXlEb3duKCJlc2NhcGUiLCAi44GnIiwgImRlIiwg
MjI5LCAyNyk7CithZGRLZXlEb3duKCd0JywgIuOBp3QiLCAiZGV0IiwgMjI5LCA4NCk7CithZGRL
ZXlEb3duKCdhJywgIuOBp+OBnyIsICJkZXRhIiwgMjI5LCA2NSk7CithZGRLZXlEb3duKCdkJywg
IuOBp+OBn2QiLCAiZGV0YWQiLCAyMjksIDY4KTsKK2FkZEtleURvd24oJ2UnLCAi44Gn44Gf44Gn
IiwgImRldGFkZSIsIDIyOSwgNjkpOworCithZGRLZXlEb3duKCcgJywgIuOBp+S7luOBpyIsICJk
ZXRhZGUiLCAyMjksIDMyKTsKK2FkZEtleURvd24oJyAnLCAi44Gn44Gf44GnIiwgImRldGFkZSIs
IDIyOSwgMzIpOworCithZGRLZXlEb3duKCdlbnRlcicsICLjgafjgZ/jgaciLCAiZGV0YWRlIiwg
MjI5LCAxMyk7CisKK2FkZEtleURvd24oJ2QnLCAi44Gn44Gf44GnZCIsICJkZXRhZGVkIiwgMjI5
LCA2OCk7CithZGRLZXlEb3duKCdlJywgIuOBp+OBn+OBp+OBpyIsICJkZXRhZGVkZSIsIDIyOSwg
NjkpOworCithZGRLZXlEb3duKCdlbnRlcicsICLjgafjgZ/jgafjgaciLCAiZGV0YWRlZGUiLCAy
MjksIDEzKTsKK2FkZEtleURvd24oJ2VudGVyJywgIuOBp+OBn+OBp+OBpyIsICJkZXRhZGVkZSIs
IDEzLCAxMyk7CisKK2Z1bmN0aW9uIGZpcmVOZXh0S2V5RG93bigpIHsKKyAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKQorICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKGtleURvd25zW2N1cnJl
bnRdLmtleSk7Cit9CisKK2ZpcmVOZXh0S2V5RG93bigpOworCitpZiAod2luZG93LmV2ZW50U2Vu
ZGVyKQorICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocm9vdCk7CisKK3ZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCA2YWJjZjQxLi4wOGRjNGFlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDA5
LTA1LTE3ICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmlyZSB0aGUga2V5ZG93biBldmVudCBi
ZWZvcmUgaW5zZXJ0aW5nIHRleHQgaW50byB0aGUgRE9NIG9uIElNRSBpbnB1dAorICAgICAgICBv
biB0aGUgTWFjLiBXaW5kb3dzIFdlYktpdCBkb2VzIHRoaXMgYWxyZWFkeSwgYXMgZG8gSUUgYW5k
IEZpcmVmb3guCisgICAgICAgIAorICAgICAgICBPbiBNYWMsIHdlIG5lZWQgdG8gc2VuZCB0aGUg
a2V5IGV2ZW50IHRvIHRoZSBJTUUgYmVmb3JlIGZpcmluZyBrZXlkb3duIHRvCisgICAgICAgIGtu
b3cgdGhhdCBpdCdzIGFuIElNRSBpbnB1dCAoc28gd2UgY2FuIHNldCB0aGUga2V5Y29kZSB0byAy
MjkpLiBJbiBvcmRlcgorICAgICAgICB0byBmaXJlIHRoZSBrZXlkb3duIGFmdGVyIHRoZSBET00g
aXMgbW9kaWZpZWQgd2U6CisgICAgICAgICAgLVNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIElNRS4K
KyAgICAgICAgICAtSWYgdGhlIElNRSBoYW5kbGVzIGl0LCB0aGVuIHdlIHN0b3JlIHRoZSByZWxl
dmFudCBkYXRhIGZyb20gdGhlIElNRQorICAgICAgICAgIG9uIHRoZSBrZXkgZXZlbnQuCisgICAg
ICAgICAgLVRoZW4sIGluIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQsIHdlIGZpcmUga2V5ZG93bi4K
KyAgICAgICAgICAtRmluYWxseSwgd2UgYXBwbHkgdGhlIElNRSB0ZXh0IGluc2VydGlvbiB0byB0
aGUgRE9NLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhlcyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUxMTkuIEl0IGRvZXMgbm90CisgICAgICAgIGZpeCBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1NDMsIHdoaWNoIGlzIGFib3V0
IGNhbmNlbGluZworICAgICAgICBJTUUgaW5wdXQgaWYgdGhlIGtleWRvd24gZXZlbnQgaXMgcHJl
dmVudERlZmF1bHRlZCAod2hpY2ggYWxzbyB3b3JrcyBvbiAKKyAgICAgICAgV2luZG93cyBXZWJL
aXQpLgorICAgICAgICAKKyAgICAgICAgVGhlcmUncyBubyBhdXRvbWF0ZWQgd2F5IHRvIHRlc3Qg
SU1FIGlucHV0LCBzbyBJJ3ZlIGFkZGVkIGEgbWFudWFsIHRlc3QuCisgICAgICAgIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4NDQgZm9yIG1vcmUgaW5mb3Jt
YXRpb24uCisgICAgICAgIAorICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICog
ZG9tL0tleWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6
c2V0S2V5Q29kZUZvcklNRSk6CisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmltZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudDo6c2V0SU1FQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseUlNRUNvbW1hbmQpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJTUVDb21tYW5kOjpJ
TUVDb21tYW5kKToKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvbG9nLWltZS1rZXktZXZlbnRzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorCiAyMDA5LTA1LTE4ICBNYXJrIFJvd2Ug
IDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBidWlsZC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAppbmRl
eCBkZmI4MjRhLi5iM2Y0Mzc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC0yMzYsNiArMjM2LDcgQEAgX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhhbmRsZVRleHRJbnB1dEV2ZW50RVJLTlNfNlN0cmluZ0VQ
TlNfNUV2ZW50RWJiCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0
UG9pbnRFUktOU184SW50UG9pbnRFYmIKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5k
Q29udGV4dE1lbnVFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CitfX1pON1dlYkNv
cmUxMkV2ZW50SGFuZGxlcjMxZGlzcGF0Y2hJbnB1dE1ldGhvZEtleURvd25FdmVudEVOM1dURjEw
UGFzc1JlZlB0cklOU18xM0tleWJvYXJkRXZlbnRFRUUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyN21vdXNlVXBFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjhrZXlFdmVu
dEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVJLTlNfMjFQ
bGF0Zm9ybUtleWJvYXJkRXZlbnRFCkBAIC00NDMsMTEgKzQ0NCwxMSBAQCBfX1pON1dlYkNvcmUy
M0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlNWVtcHR5RXYKIF9fWk43V2ViQ29yZTIzUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmRDMUVQTlNfOERvY3VtZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzE2RG9j
dW1lbnRGcmFnbWVudEVFRWJiYmJiTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlMjNjcmVh
dGVGcmFnbWVudEZyb21Ob2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9k
ZUVMbTBFRUUKIF9fWk43V2ViQ29yZTI0QmluYXJ5UHJvcGVydHlMaXN0V3JpdGVyMTd3cml0ZVBy
b3BlcnR5TGlzdEV2CitfX1pON1dlYkNvcmUyNFdlYkNvcmVDcmVkZW50aWFsU3RvcmFnZTltX3N0
b3JhZ2VFCiBfX1pON1dlYkNvcmUyNGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3Vt
ZW50RVJLTlNfNlN0cmluZ0VTNF8KIF9fWk43V2ViQ29yZTI0ZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
RQogX19aTjdXZWJDb3JlMjRyYW5nZUNvbXBsaWFudEVxdWl2YWxlbnRFUktOU184UG9zaXRpb25F
Ci1fX1pON1dlYkNvcmUyNFdlYkNvcmVDcmVkZW50aWFsU3RvcmFnZTltX3N0b3JhZ2VFCiBfX1pO
N1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxMXJlbGVhc2VEYXRhRXYKIF9fWk43
V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlcjEyd3JpdGVPYmplY3RzRVJOU18zMEJp
bmFyeVByb3BlcnR5TGlzdE9iamVjdFN0cmVhbUUKIF9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3Bl
cnR5TGlzdFdyaXRlcjE2d3JpdGVIaXN0b3J5SXRlbUVSTlNfMzBCaW5hcnlQcm9wZXJ0eUxpc3RP
YmplY3RTdHJlYW1FUE5TXzExSGlzdG9yeUl0ZW1FCkBAIC02NDksMTMgKzY1MCwxMyBAQCBfX1pO
N1dlYkNvcmU4U2V0dGluZ3MyOXNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkRWIKIF9fWk43
V2ViQ29yZThTZXR0aW5nczI5c2V0V2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWRFYgogX19aTjdX
ZWJDb3JlOFNldHRpbmdzMzFzZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0RWIKIF9fWk43
V2ViQ29yZThTZXR0aW5nczMyc2V0TmVlZHNBZG9iZUZyYW1lUmVsb2FkaW5nUXVpcmtFYgorX19a
TjdXZWJDb3JlOFNldHRpbmdzMzNzZXREb3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWRFYgog
X19aTjdXZWJDb3JlOFNldHRpbmdzMzNzZXRFbmZvcmNlQ1NTTUlNRVR5cGVJblN0cmljdE1vZGVF
YgogX19aTjdXZWJDb3JlOFNldHRpbmdzMzVzZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxl
VVJMc0ViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3MzNnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNh
Y2hlRW5hYmxlZEViCiBfX1pON1dlYkNvcmU4U2V0dGluZ3M0MHNldEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHlFYgogX19aTjdXZWJDb3JlOFNldHRpbmdzNDBzZXRUZXh0RGly
ZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yRU5TXzM3VGV4dERpcmVjdGlvblN1Ym1lbnVJ
bmNsdXNpb25CZWhhdmlvckUKIF9fWk43V2ViQ29yZThTZXR0aW5nczQxc2V0TmVlZHNLZXlib2Fy
ZEV2ZW50RGlzYW1iaWd1YXRpb25RdWlya3NFYgotX19aTjdXZWJDb3JlOFNldHRpbmdzMzNzZXRE
b3dubG9hZGFibGVCaW5hcnlGb250c0VuYWJsZWRFYgogX19aTjdXZWJDb3JlOGJsYW5rVVJMRXYK
IF9fWk43V2ViQ29yZThwYXJzZVVSTEVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmU5RE9NV2lu
ZG93MzBkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVudHNFdgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApp
bmRleCA2YmM4MjVmLi5iNmE4MmE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2
ZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcApAQCAtMTUzLDYgKzE1
MywxMSBAQCBpbnQgS2V5Ym9hcmRFdmVudDo6d2hpY2goKSBjb25zdAogICAgIHJldHVybiBrZXlD
b2RlKCk7CiB9CiAKK3ZvaWQgS2V5Ym9hcmRFdmVudDo6c2V0S2V5Q29kZUZvcklNRSgpCit7Cisg
ICAgbV9rZXlFdmVudC0+c2V0V2luZG93c1ZpcnR1YWxLZXlDb2RlKENvbXBvc2l0aW9uRXZlbnRL
ZXlDb2RlKTsKK30KKwogS2V5Ym9hcmRFdmVudCogZmluZEtleWJvYXJkRXZlbnQoRXZlbnQqIGV2
ZW50KQogewogICAgIGZvciAoRXZlbnQqIGUgPSBldmVudDsgZTsgZSA9IGUtPnVuZGVybHlpbmdF
dmVudCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIGIvV2ViQ29y
ZS9kb20vS2V5Ym9hcmRFdmVudC5oCmluZGV4IDJiMGExMzEuLjlkMTU1MzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAorKysgYi9XZWJDb3JlL2RvbS9LZXlib2FyZEV2
ZW50LmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAvLyBNYXRjaCBrZXkgY29kZSBvZiBjb21wb3NpdGlvbiBrZXlk
b3duIGV2ZW50IG9uIHdpbmRvd3MuCisgICAgLy8gSUUgc2VuZHMgVktfUFJPQ0VTU0tFWSB3aGlj
aCBoYXMgdmFsdWUgMjI5OworICAgIGNvbnN0IGludCBDb21wb3NpdGlvbkV2ZW50S2V5Q29kZSA9
IDIyOTsKIAogICAgIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKIApAQCAtODcsNiArOTAs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJk
RXZlbnQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdDsKIAorICAg
ICAgICAvLyBTZXRzIHRoZSBrZXljb2RlIG9mIHRoaXMgZXZlbnQgdG8gdGhlIElNRSBrZXljb2Rl
IG9mIDIyOS4KKyAgICAgICAgdm9pZCBzZXRLZXlDb2RlRm9ySU1FKCk7CisKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGlzIG5lZWQgdG8gc3RvcmUga2V5cHJl
c3MgY29tbWFuZCBpbmZvIG9uIHRoZSBNYWMuCiAgICAgICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1h
bmQ+JiBrZXlwcmVzc0NvbW1hbmRzKCkgeyByZXR1cm4gbV9rZXlwcmVzc0NvbW1hbmRzOyB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCmluZGV4IDVmYmYyNGMuLmIyZjNlMzQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCkBAIC04NSwxMCArODUsNiBAQCBjb25zdCBpbnQgSW1hZ2VEcmFnSHlzdGVyZXNpcyA9IDU7
CiBjb25zdCBpbnQgVGV4dERyYWdIeXN0ZXJlc2lzID0gMzsKIGNvbnN0IGludCBHZW5lcmFsRHJh
Z0h5c3RlcmVzaXMgPSAzOwogCi0vLyBNYXRjaCBrZXkgY29kZSBvZiBjb21wb3NpdGlvbiBrZXlk
b3duIGV2ZW50IG9uIHdpbmRvd3MuCi0vLyBJRSBzZW5kcyBWS19QUk9DRVNTS0VZIHdoaWNoIGhh
cyB2YWx1ZSAyMjk7Ci1jb25zdCBpbnQgQ29tcG9zaXRpb25FdmVudEtleUNvZGUgPSAyMjk7Ci0K
ICNpZiBFTkFCTEUoU1ZHKQogdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVzOwogI2VuZGlmCkBAIC0x
ODU3LDYgKzE4NTMsMTYgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om5lZWRzS2V5Ym9hcmRFdmVudERp
c2FtYmlndWF0aW9uUXVpcmtzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAjZW5kaWYK
KyAgICAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaElucHV0TWV0aG9kS2V5RG93bkV2ZW50
KFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4ga2V5RG93bikKK3sKKyAgICBSZWZQdHI8Tm9kZT4g
bm9kZSA9IGV2ZW50VGFyZ2V0Tm9kZUZvckRvY3VtZW50KG1fZnJhbWUtPmRvY3VtZW50KCkpOwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAga2V5RG93bi0+c2V0S2V5Q29kZUZvcklNRSgpOwor
ICAgIGtleURvd24tPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgaWYgKG5vZGUpCisgICAgICAg
IG5vZGUtPmRpc3BhdGNoRXZlbnQoa2V5RG93biwgZWMpOworfQogCiBib29sIEV2ZW50SGFuZGxl
cjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5RXZlbnQp
CiB7CkBAIC0xOTI0LDE1ICsxOTMwLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNv
bnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYgaW5pdGlhbEtleUV2ZW50KQogICAgIG1fZnJhbWUt
PmVkaXRvcigpLT5oYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oa2V5ZG93bi5nZXQoKSk7CiAgICAg
CiAgICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IGtleWRvd24tPmRlZmF1bHRIYW5kbGVk
KCk7Ci0gICAgCi0gICAgaWYgKGhhbmRsZWRCeUlucHV0TWV0aG9kKSB7Ci0gICAgICAgIGtleURv
d25FdmVudC5zZXRXaW5kb3dzVmlydHVhbEtleUNvZGUoQ29tcG9zaXRpb25FdmVudEtleUNvZGUp
OwotICAgICAgICBrZXlkb3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7Ci0gICAgICAgIGtleWRvd24tPnNl
dFRhcmdldChub2RlKTsKLSAgICAgICAga2V5ZG93bi0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKLSAg
ICB9CisgICAgaWYgKCFoYW5kbGVkQnlJbnB1dE1ldGhvZCkKKyAgICAgICAgbm9kZS0+ZGlzcGF0
Y2hFdmVudChrZXlkb3duLCBlYyk7CiAKLSAgICBub2RlLT5kaXNwYXRjaEV2ZW50KGtleWRvd24s
IGVjKTsKICAgICBib29sIGtleWRvd25SZXN1bHQgPSBrZXlkb3duLT5kZWZhdWx0SGFuZGxlZCgp
IHx8IGtleWRvd24tPmRlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICBpZiAoaGFuZGxlZEJ5SW5wdXRN
ZXRob2QgfHwgKGtleWRvd25SZXN1bHQgJiYgIWJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUpKQog
ICAgICAgICByZXR1cm4ga2V5ZG93blJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCBjNTRhYTg3
Li5mZTk4MWQ4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0xNDAsNiArMTQwLDcgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHVuc2lnbmVkIGFjY2Vzc0tleU1vZGlmaWVycygpOwogICAgIGJvb2wgaGFu
ZGxlQWNjZXNzS2V5KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgZGlz
cGF0Y2hJbnB1dE1ldGhvZEtleURvd25FdmVudChQYXNzUmVmUHRyPEtleWJvYXJkRXZlbnQ+KTsK
ICAgICBib29sIGtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYpOwogICAgIHZv
aWQgZGVmYXVsdEtleWJvYXJkRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCBi
MTAzOGVkLi5jOGNjMTc1IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDA5LTA1LTE3ICBPamFuIFZh
ZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRmlyZSB0aGUga2V5ZG93biBldmVudCBiZWZvcmUgaW5zZXJ0aW5n
IHRleHQgaW50byB0aGUgRE9NIG9uIElNRSBpbnB1dAorICAgICAgICBvbiB0aGUgTWFjLiBXaW5k
b3dzIFdlYktpdCBkb2VzIHRoaXMgYWxyZWFkeSwgYXMgZG8gSUUgYW5kIEZpcmVmb3guCisgICAg
ICAgIAorICAgICAgICBPbiBNYWMsIHdlIG5lZWQgdG8gc2VuZCB0aGUga2V5IGV2ZW50IHRvIHRo
ZSBJTUUgYmVmb3JlIGZpcmluZyBrZXlkb3duIHRvCisgICAgICAgIGtub3cgdGhhdCBpdCdzIGFu
IElNRSBpbnB1dCAoc28gd2UgY2FuIHNldCB0aGUga2V5Y29kZSB0byAyMjkpLiBJbiBvcmRlcgor
ICAgICAgICB0byBmaXJlIHRoZSBrZXlkb3duIGFmdGVyIHRoZSBET00gaXMgbW9kaWZpZWQgd2U6
CisgICAgICAgICAgLVNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIElNRS4KKyAgICAgICAgICAtSWYg
dGhlIElNRSBoYW5kbGVzIGl0LCB0aGVuIHdlIHN0b3JlIHRoZSByZWxldmFudCBkYXRhIGZyb20g
dGhlIElNRQorICAgICAgICAgIG9uIHRoZSBrZXkgZXZlbnQuCisgICAgICAgICAgLVRoZW4sIGlu
IEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQsIHdlIGZpcmUga2V5ZG93bi4KKyAgICAgICAgICAtRmlu
YWxseSwgd2UgYXBwbHkgdGhlIElNRSB0ZXh0IGluc2VydGlvbiB0byB0aGUgRE9NLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBmaXhlcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjUxMTkuIEl0IGRvZXMgbm90CisgICAgICAgIGZpeCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU1NDMsIHdoaWNoIGlzIGFib3V0IGNhbmNlbGluZworICAg
ICAgICBJTUUgaW5wdXQgaWYgdGhlIGtleWRvd24gZXZlbnQgaXMgcHJldmVudERlZmF1bHRlZCAo
d2hpY2ggYWxzbyB3b3JrcyBvbiAKKyAgICAgICAgV2luZG93cyBXZWJLaXQpLgorICAgICAgICAK
KyAgICAgICAgVGhlcmUncyBubyBhdXRvbWF0ZWQgd2F5IHRvIHRlc3QgSU1FIGlucHV0LCBzbyBJ
J3ZlIGFkZGVkIGEgbWFudWFsIHRlc3QuCisgICAgICAgIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU4NDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAg
ICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgc2V0TWFy
a2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBpbnNlcnRU
ZXh0Ol0pOgorCiAyMDA5LTA1LTE2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZyBhbmQgRGFuIEJlcm5zdGVpbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA0Y2Y1OWJhLi4zZWU3ODhkIDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC00MzAsNiArNDMwLDcgQEAgc3RydWN0IFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CiAgICAgLy8gVGhlIElucHV0IE1ldGhv
ZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90IHRlbGwgdXMsIGluCiAgICAgLy8gd2hpY2gg
Y2FzZSB3ZSBzaG91bGQgbm90IGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIERPTQogICAgIEJPT0wg
Y29uc3VtZWRCeUlNOworICAgIEJPT0wga2V5RG93bldhc0Rpc3BhdGNoZWQ7CiB9OwogCiBAaW50
ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKQEAgLTUzMDUsMTEgKzUzMDYs
MjAgQEAgc3RhdGljIENHUG9pbnQgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3Jl
ZW5Qb2ludChOU1BvaW50IHBvaW50KQogICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRmFr
ZUV2ZW50XTsKIH0KIAorc3RhdGljIHZvaWQgZGlzcGF0Y2hLZXlEb3duRXZlbnQoRnJhbWUqIGZy
YW1lLCBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMp
Cit7CisgICAgaWYgKHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+ZXZlbnQgJiYgIXBhcmFtZXRl
cnMtPmtleURvd25XYXNEaXNwYXRjaGVkICYmIHBhcmFtZXRlcnMtPnNob3VsZFNhdmVDb21tYW5k
KSB7CisgICAgICAgIHBhcmFtZXRlcnMtPmtleURvd25XYXNEaXNwYXRjaGVkID0gdHJ1ZTsKKyAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kaXNwYXRjaElucHV0TWV0aG9kS2V5RG93bkV2
ZW50KHBhcmFtZXRlcnMtPmV2ZW50KTsKKyAgICB9Cit9CisKIC0gKEJPT0wpX2ludGVyY2VwdEVk
aXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2hvdWxkU2F2ZUNvbW1hbmQ6KEJP
T0wpc2hvdWxkU2F2ZQogewogICAgIC8vIEFzayBBcHBLaXQgdG8gcHJvY2VzcyB0aGUga2V5IGV2
ZW50IC0tIGl0IHdpbGwgY2FsbCBiYWNrIHdpdGggZWl0aGVyIGluc2VydFRleHQgb3IgZG9Db21t
YW5kQnlTZWxlY3Rvci4KICAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMgcGFyYW1ldGVyczsKICAgICBwYXJhbWV0ZXJzLmV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwor
ICAgIHBhcmFtZXRlcnMua2V5RG93bldhc0Rpc3BhdGNoZWQgPSBmYWxzZTsKICAgICBwYXJhbWV0
ZXJzLnNob3VsZFNhdmVDb21tYW5kID0gc2hvdWxkU2F2ZTsKICAgICAvLyBJZiB3ZSdyZSBpbnRl
cmNlcHRpbmcgdGhlIGluaXRpYWwgSU0gY2FsbCB3ZSBhc3N1bWUgdGhhdCB0aGUgSU0gaGFzIGNv
bnN1bWVkIHRoZSBldmVudCwgCiAgICAgLy8gYW5kIG9ubHkgY2hhbmdlIHRoaXMgYXNzdW1wdGlv
biBpZiBvbmUgb2YgdGhlIE5TVGV4dElucHV0L1Jlc3BvbmRlciBjYWxsYmFja3MgaXMgdXNlZC4K
QEAgLTUzMzUsNyArNTM0NSw3IEBAIHN0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVlblBv
aW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoTlNQb2ludCBwb2ludCkKICAgICAgICAgLy8gYnV0IHNl
bmQgYSBmdWxsIHNlcXVlbmNlIG9mIERPTSBldmVudHMsIGluY2x1ZGluZyBhbiB1bm5lZWRlZCBr
ZXlwcmVzcy4KICAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgfHwgIWhh
c0tleXByZXNzQ29tbWFuZCkKICAgICAgICAgICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6bWFjRXZlbnRdXTsKLSAgICAgICAgZWxzZSB7CisgICAg
ICAgIGVsc2UgaWYgKGhhc0tleXByZXNzQ29tbWFuZCkgewogICAgICAgICAgICAgc2l6ZV90IHNp
emUgPSBjb21tYW5kcy5zaXplKCk7CiAgICAgICAgICAgICAvLyBBcmUgdGhlcmUgY29tbWFuZHMg
dGhhdCB3b3VsZCBqdXN0IGNhdXNlIHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZpYSBFZGl0
b3I/CiAgICAgICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlv
biBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRlZCwgc28gd2Ug
bGVhdmUgaXQgdXBvbiBXZWJDb3JlCkBAIC01MzU3LDYgKzUzNjcsMTAgQEAgc3RhdGljIENHUG9p
bnQgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1BvaW50IHBv
aW50KQogICAgICAgICB9CiAgICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzID0gMDsKICAgICB9CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBpZiAocGFyYW1ldGVycy5jb25zdW1lZEJ5SU0gJiYgY29yZUZyYW1lKQor
ICAgICAgICBkaXNwYXRjaEtleURvd25FdmVudChjb3JlRnJhbWUsICZwYXJhbWV0ZXJzKTsKICAg
ICByZXR1cm4gKCFfcHJpdmF0ZS0+cmVjZWl2ZWROT09QICYmIHBhcmFtZXRlcnMuZXZlbnRXYXNI
YW5kbGVkKSB8fCBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTTsKIH0KIApAQCAtNTY1MCw4ICs1NjY0
LDEwIEBAIHN0YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxkKEZyYW1lKiBjb3JlRnJhbWUpCiAg
ICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwogICAgIH0KICAgICAKLSAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGRpc3BhdGNoS2V5
RG93bkV2ZW50KGNvcmVGcmFtZSwgcGFyYW1ldGVycyk7CiAgICAgICAgIGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbigpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgZXh0
cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4mIHJlc3VsdCkKQEAgLTU2ODgsNyArNTcwNCw3IEBAIHN0YXRpYyB2b2lk
IGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29t
cG9zaXRpb25VbmRlCiAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsK
ICAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87CiAgICAgfQotICAgIAorCiAg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKCFjb3Jl
RnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTU3MTIsNiArNTcyOCw3IEBAIHN0YXRpYyB2b2lk
IGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29t
cG9zaXRpb25VbmRlCiAgICAgICAgIGV4dHJhY3RVbmRlcmxpbmVzKHN0cmluZywgdW5kZXJsaW5l
cyk7CiAgICAgfQogCisgICAgZGlzcGF0Y2hLZXlEb3duRXZlbnQoY29yZUZyYW1lLCBwYXJhbWV0
ZXJzKTsKICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRl
cmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOwog
fQogCkBAIC01NzMzLDYgKzU3NTAsNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZQogICAgIEtl
eWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsK
ICAgICBib29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5z
aG91bGRTYXZlQ29tbWFuZDsKIAorICAgIC8vIFRPRE8ob2phbik6IEFkZCBGSVhNRSBoZXJlLgog
ICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCkKICAgICAgICAgZXZlbnQtPmtleXBy
ZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKE5TU3RyaW5nRnJvbVNlbGVjdG9y
KHNlbGVjdG9yKSkpOwogICAgIGVsc2UgewpAQCAtNTgyNyw2ICs1ODQ1LDcgQEAgc3RhdGljIHZv
aWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxD
b21wb3NpdGlvblVuZGUKICAgICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUt
PmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBkaXNwYXRjaEtleURvd25FdmVudChjb3JlRnJhbWUuZ2V0KCksIHBhcmFtZXRlcnMpOwogICAg
ICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihldmVu
dFRleHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5tbSBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCmluZGV4IDU4
ODMwMjYuLjk0N2M0MWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCkBAIC00NjUsNiArNDY1LDE1IEBAIHN0
YXRpYyBOU0V2ZW50VHlwZSBldmVudFR5cGVGb3JNb3VzZUJ1dHRvbkFuZEFjdGlvbihpbnQgYnV0
dG9uLCBNb3VzZUFjdGlvbiBhY3RpCiAgICAgfSBlbHNlIGlmIChbY2hhcmFjdGVyIGlzRXF1YWxU
b1N0cmluZzpAImRlbGV0ZSJdKSB7CiAgICAgICAgIGNvbnN0IHVuaWNoYXIgY2ggPSAweDdmOwog
ICAgICAgICBldmVudENoYXJhY3RlciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczom
Y2ggbGVuZ3RoOjFdOworICAgIH0gZWxzZSBpZiAoW2NoYXJhY3RlciBpc0VxdWFsVG9TdHJpbmc6
QCJlc2NhcGUiXSkgeworICAgICAgICBjb25zdCB1bmljaGFyIGNoID0gMHgxQjsKKyAgICAgICAg
ZXZlbnRDaGFyYWN0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNoIGxlbmd0
aDoxXTsKKyAgICB9IGVsc2UgaWYgKFtjaGFyYWN0ZXIgaXNFcXVhbFRvU3RyaW5nOkAic3BhY2Ui
XSkgeworICAgICAgICBjb25zdCB1bmljaGFyIGNoID0gMHgxQjsKKyAgICAgICAgZXZlbnRDaGFy
YWN0ZXIgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNoIGxlbmd0aDoxXTsKKyAg
ICB9IGVsc2UgaWYgKFtjaGFyYWN0ZXIgaXNFcXVhbFRvU3RyaW5nOkAiZW50ZXIiXSkgeworICAg
ICAgICBjb25zdCB1bmljaGFyIGNoID0gMHgwRDsKKyAgICAgICAgZXZlbnRDaGFyYWN0ZXIgPSBb
TlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6JmNoIGxlbmd0aDoxXTsKICAgICB9CiAKICAg
ICBOU1N0cmluZyAqY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzID0gZXZlbnRDaGFyYWN0ZXI7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>