<?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>144663</bug_id>
          
          <creation_ts>2015-05-05 22:25:01 -0700</creation_ts>
          <short_desc>New force-related DOM events should fire in WK1 views</short_desc>
          <delta_ts>2015-05-08 11:23:23 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1092039</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-05 22:25:01 -0700</bug_when>
    <thetext>NeNew force-related DOM events should fire in WK1 views

rdar://problem/20281886</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092048</commentid>
    <comment_count>1</comment_count>
      <attachid>252448</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-05 22:38:00 -0700</bug_when>
    <thetext>Created attachment 252448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092049</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-05 22:40:03 -0700</bug_when>
    <thetext>Attachment 252448 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebImmediateActionController.mm:151:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:53:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:78:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:109:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092356</commentid>
    <comment_count>3</comment_count>
      <attachid>252527</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-06 15:27:34 -0700</bug_when>
    <thetext>Created attachment 252527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092359</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-06 15:29:30 -0700</bug_when>
    <thetext>Attachment 252527 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebImmediateActionController.mm:151:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:53:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:78:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:109:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092370</commentid>
    <comment_count>5</comment_count>
      <attachid>252527</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-05-06 15:41:47 -0700</bug_when>
    <thetext>Comment on attachment 252527
Patch

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

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:86
&gt; +    static NeverDestroyed&lt;RetainPtr&lt;NSEvent&gt;&gt; event;

Is it really right for this to be stored between views? That seems weird.

&gt; Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:428
&gt; +        if ([event type] == NSEventTypePressure) {

You check this three times in this function. Maybe put it in a local?

&gt; Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:439
&gt; +    UNUSED_PARAM(lastPressureEvent);

Indentation is wrong I think.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:-3844
&gt; -    [[[self _webView] _immediateActionController] webView:[self _webView] willHandleMouseDown:event];

Whaaaaaa?

&gt; Source/WebKit/mac/WebView/WebViewData.h:178
&gt; +    NSEvent *pressureEvent;

Maybe lastPressureEvent?

Could you not keep this in EventHandler instead and avoid keeping it here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092377</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-06 15:55:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 252527 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=252527&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/mac/EventHandlerMac.mm:86
&gt; &gt; +    static NeverDestroyed&lt;RetainPtr&lt;NSEvent&gt;&gt; event;
&gt; 
&gt; Is it really right for this to be stored between views? That seems weird.
&gt; 

Hmm, maybe not. I was copying what&apos;s done for currentNSEventSlot(). I think it makes as much sense in this new case as it did in the old, but I&apos;m a little unsure here.

&gt; &gt; Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:428
&gt; &gt; +        if ([event type] == NSEventTypePressure) {
&gt; 
&gt; You check this three times in this function. Maybe put it in a local?
&gt; 

Sure, I can fix this up.

&gt; &gt; Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:439
&gt; &gt; +    UNUSED_PARAM(lastPressureEvent);
&gt; 
&gt; Indentation is wrong I think.
&gt; 

Will look.

&gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:-3844
&gt; &gt; -    [[[self _webView] _immediateActionController] webView:[self _webView] willHandleMouseDown:event];
&gt; 
&gt; Whaaaaaa?
&gt; 

This is because mouseDown used to come after the immediate action! Remember? We used to have shenanigans like this in WK2 as well, and we were able to remove them when we switched to delaysPrimaryMouseEvents:NO. This code was there purely because we were getting mouse down at a weird time.

&gt; &gt; Source/WebKit/mac/WebView/WebViewData.h:178
&gt; &gt; +    NSEvent *pressureEvent;
&gt; 
&gt; Maybe lastPressureEvent?
&gt; 

Sure.

&gt; Could you not keep this in EventHandler instead and avoid keeping it here?

Hmmmmmmm. I&apos;ll have to think this over. This is a closer mirror to what we do in WK2. If we moved it to EventHandler, we would have WK1 only member variables there, which we actually manage to avoid at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092380</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-05-06 15:58:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Comment on attachment 252527 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=252527&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/mac/EventHandlerMac.mm:86
&gt; &gt; &gt; +    static NeverDestroyed&lt;RetainPtr&lt;NSEvent&gt;&gt; event;
&gt; &gt; 
&gt; &gt; Is it really right for this to be stored between views? That seems weird.
&gt; &gt; 
&gt; 
&gt; Hmm, maybe not. I was copying what&apos;s done for currentNSEventSlot(). I think
&gt; it makes as much sense in this new case as it did in the old, but I&apos;m a
&gt; little unsure here.

It&apos;s OK to keep a &quot;current&quot; event globally, because the relevant parts of WebKit are single-threaded, and a &quot;current&quot; event will get cleared when it&apos;s done (I assume). But keeping a &quot;last&quot; event, that lives beyond its own handling, seems wrong in the multi-view case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092381</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-05-06 15:59:23 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:-3844
&gt; &gt; &gt; -    [[[self _webView] _immediateActionController] webView:[self _webView] willHandleMouseDown:event];
&gt; &gt; 
&gt; &gt; Whaaaaaa?
&gt; &gt; 
&gt; 
&gt; This is because mouseDown used to come after the immediate action! Remember?
&gt; We used to have shenanigans like this in WK2 as well, and we were able to
&gt; remove them when we switched to delaysPrimaryMouseEvents:NO. This code was
&gt; there purely because we were getting mouse down at a weird time.

Righto.

&gt; &gt; Could you not keep this in EventHandler instead and avoid keeping it here?
&gt; 
&gt; Hmmmmmmm. I&apos;ll have to think this over. This is a closer mirror to what we
&gt; do in WK2. If we moved it to EventHandler, we would have WK1 only member
&gt; variables there, which we actually manage to avoid at this point.

Could you not then perhaps use them for WK2 as well, and share some code that you currently have duplicated between WebView and WKView?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092384</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-06 16:03:46 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; Source/WebKit/mac/WebView/WebHTMLView.mm:-3844
&gt; &gt; &gt; &gt; -    [[[self _webView] _immediateActionController] webView:[self _webView] willHandleMouseDown:event];
&gt; &gt; &gt; 
&gt; &gt; &gt; Whaaaaaa?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; This is because mouseDown used to come after the immediate action! Remember?
&gt; &gt; We used to have shenanigans like this in WK2 as well, and we were able to
&gt; &gt; remove them when we switched to delaysPrimaryMouseEvents:NO. This code was
&gt; &gt; there purely because we were getting mouse down at a weird time.
&gt; 
&gt; Righto.
&gt; 
&gt; &gt; &gt; Could you not keep this in EventHandler instead and avoid keeping it here?
&gt; &gt; 
&gt; &gt; Hmmmmmmm. I&apos;ll have to think this over. This is a closer mirror to what we
&gt; &gt; do in WK2. If we moved it to EventHandler, we would have WK1 only member
&gt; &gt; variables there, which we actually manage to avoid at this point.
&gt; 
&gt; Could you not then perhaps use them for WK2 as well, and share some code
&gt; that you currently have duplicated between WebView and WKView?

Ugh, maybe some day? But I  find the idea of that exhausting because I had originally implemented a version of the WK2 code that was more like this, but Simon and Sam very much wanted every layer of the WebKit events to have force in them, and to squish the square peg (pressure events in AppKit are not mouse events) into the round hole (we want pressure events to be mouse events) at the moment NSEvents are converted to anything else in WK2. That is done in the UIProcess, way far away from EventHandler. In WK1, that conversion happens at a surprisingly low level, hence all of these new parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092387</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-05-06 16:11:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; Comment on attachment 252527 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=252527&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/page/mac/EventHandlerMac.mm:86
&gt; &gt; &gt; &gt; +    static NeverDestroyed&lt;RetainPtr&lt;NSEvent&gt;&gt; event;
&gt; &gt; &gt; 
&gt; &gt; &gt; Is it really right for this to be stored between views? That seems weird.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Hmm, maybe not. I was copying what&apos;s done for currentNSEventSlot(). I think
&gt; &gt; it makes as much sense in this new case as it did in the old, but I&apos;m a
&gt; &gt; little unsure here.
&gt; 
&gt; It&apos;s OK to keep a &quot;current&quot; event globally, because the relevant parts of
&gt; WebKit are single-threaded, and a &quot;current&quot; event will get cleared when it&apos;s
&gt; done (I assume). But keeping a &quot;last&quot; event, that lives beyond its own
&gt; handling, seems wrong in the multi-view case.

OK, Sam explained that this *is* actually the force event matching the currently processing event, not actually the last event, and it doesn&apos;t persist between handling events, so I think it just needs a different name, not a big change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092396</commentid>
    <comment_count>11</comment_count>
      <attachid>252535</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-06 16:32:22 -0700</bug_when>
    <thetext>Created attachment 252535
Patch

Okay, here&apos;s a new patch that uses a new name, assuming we do feel okay about this approach. I can try something else if there is another idea too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092398</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-06 16:33:29 -0700</bug_when>
    <thetext>Attachment 252535 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebImmediateActionController.mm:151:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:53:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:78:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:109:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092411</commentid>
    <comment_count>13</comment_count>
      <attachid>252540</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-06 17:03:27 -0700</bug_when>
    <thetext>Created attachment 252540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092413</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-06 17:05:13 -0700</bug_when>
    <thetext>Attachment 252540 did not pass style-queue:


ERROR: Source/WebKit/mac/WebView/WebImmediateActionController.mm:151:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:53:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:78:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/mac/PlatformEventFactoryMac.mm:109:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 4 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092703</commentid>
    <comment_count>15</comment_count>
      <attachid>252540</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-05-07 13:00:05 -0700</bug_when>
    <thetext>Comment on attachment 252540
Patch

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

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:124
&gt;      currentNSEventSlot() = m_savedCurrentEvent;
&gt; +    correspondingPressureEventSlot() = nil;

I would follow the pattern we have here and keep a stack of corresponding events.

&gt; Source/WebKit/mac/WebView/WebHTMLView.mm:4093
&gt; +    NSEvent *lastPressureEvent = [[self _webView] _pressureEvent];
&gt; +    if (event == lastPressureEvent)
&gt; +        return;

Is this necessary? It seems like it can&apos;t happen.

&gt; Source/WebKit/mac/WebView/WebViewData.h:178
&gt; +    NSEvent *pressureEvent;

This should be a RetainPtr. You can probably get rid of the helpers when you make this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092801</commentid>
    <comment_count>16</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-07 15:34:02 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/183954

Thanks Sam and Tim!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1092936</commentid>
    <comment_count>17</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-05-07 18:11:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/183968

Fixing iPhone 6 iOS simulator Build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093242</commentid>
    <comment_count>18</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-05-08 11:23:23 -0700</bug_when>
    <thetext>Another follow-up: https://bugs.webkit.org/show_bug.cgi?id=144805</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252448</attachid>
            <date>2015-05-05 22:38:00 -0700</date>
            <delta_ts>2015-05-06 15:27:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>34510</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTA1ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9yY2UtcmVsYXRlZCBET00g
ZXZlbnRzIHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgb2YgdGhlIFdLMSBtb3VzZSBldmVudHMg
bmVlZCB0byB0YWtlIHRoZSBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOgorCisgICAgICAgIE1ha2UgbGFzdFByZXNzdXJlRXZlbnQgYSBwYXJ0IG9mIEN1
cnJlbnRFdmVudFNjb3BlLiBUaGlzIGlzIG5lZWRlZCB0byBoYXZlIAorICAgICAgICBhY2N1cmF0
ZSBwcmVzc3VyZSBpbmZvcm1hdGlvbiBmb3IgYWxsIG9mIHRoZSBtb3VzZSBldmVudHMgaW4gc3Vi
ZnJhbWVzLgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6Omxhc3RQcmVzc3VyZUV2ZW50U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6Omxhc3RQcmVzc3VyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRF
dmVudFNjb3BlOjpDdXJyZW50RXZlbnRTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50
RXZlbnRTY29wZTo6fkN1cnJlbnRFdmVudFNjb3BlKToKKworICAgICAgICBUaGVzZSBldmVudHMg
ZG9u4oCZdCBoYXZlIGFuIGFzc29jaWF0ZWQgcHJlc3N1cmUsIHNvIHNlbmQgbmlsIGZvciB0aGUg
CisgICAgICAgIGxhc3RQcmVzc3VyZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQpOgorCisgICAgICAgIFBpcGUgdGhyb3VnaCBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6bW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQp
OgorCisgICAgICAgIE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgcHJlc3N1cmUgY2hhbmdlIGV2ZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cHJlc3N1cmVDaGFuZ2UpOgorCisg
ICAgICAgIFBpcGUgdGhyb3VnaCBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQpOgorCisg
ICAgICAgIFRha2UgdGhlIGxhc3RQcmVzc3VyZUV2ZW50IGluIG9yZGVyIHRvIGJ1aWxkIGEgUGxh
dGZvcm1Nb3VzZUV2ZW50IHdpdGggdGhlIGNvcnJlY3QgCisgICAgICAgIHByZXNzdXJlIGluZm9y
bWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cG9pbnRGb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb3VzZUJ1dHRvbkZvckV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6
OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudCk6CisKIDIwMTUtMDUtMDUgIFphbGFuIEJ1anRhcyAg
PHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIFJlbmRlckxheWVyQmFj
a2luZzo6aGFzQ29udGVudHNMYXllcigpLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCShyZXZpc2lvbiAxODM2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsMTAgKzI2NiwxMSBAQCBwdWJsaWM6CiAKICNpZiBQ
TEFURk9STShDT0NPQSkgJiYgZGVmaW5lZChfX09CSkNfXykKICNpZiAhUExBVEZPUk0oSU9TKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VEb3duKE5TRXZlbnQgKik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAqKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIG1vdXNlVXAoTlNFdmVudCAqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNl
TW92ZWQoTlNFdmVudCAqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNlRG93bihOU0V2
ZW50ICosIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50ICosIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNlVXAoTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0
UHJlc3N1cmVFdmVudCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZU1vdmVkKE5TRXZl
bnQgKiwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHJlc3N1cmVDaGFuZ2UoTlNFdmVudCAqLCBOU0V2ZW50KiBsYXN0UHJlc3N1cmVFdmVudCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBrZXlFdmVudChOU0V2ZW50ICopOwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgd2hlZWxFdmVudChOU0V2ZW50ICopOwogI2Vsc2UKQEAgLTI4NSw3ICsy
ODYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmICFQTEFURk9STShJT1MpCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJzKE5TRXZlbnQgKik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJz
KE5TRXZlbnQgKiwgTlNFdmVudCogbGFzdFByZXNzdXJlRXZlbnQpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZW5kRmFrZUV2ZW50c0FmdGVyV2lkZ2V0VHJhY2tpbmcoTlNFdmVudCAqaW5p
dGlhdGluZ0V2ZW50KTsKICNlbmRpZgpAQCAtMjk0LDYgKzI5NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEFjdGl2YXRpb25FdmVudE51bWJlcihpbnQgbnVtKSB7IG1fYWN0aXZhdGlvbkV2ZW50
TnVtYmVyID0gbnVtOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTlNFdmVudCAqY3Vy
cmVudE5TRXZlbnQoKTsKKyAgICBzdGF0aWMgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQoKTsK
ICNlbHNlCiAgICAgc3RhdGljIFdlYkV2ZW50ICpjdXJyZW50RXZlbnQoKTsKICNlbmRpZiAvLyAh
UExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbQkocmV2aXNpb24gMTgzNjkwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMCArODEsMjEgQEAgTlNFdmVu
dCAqRXZlbnRIYW5kbGVyOjpjdXJyZW50TlNFdmVudCgpCiAgICAgcmV0dXJuIGN1cnJlbnROU0V2
ZW50U2xvdCgpLmdldCgpOwogfQogCitzdGF0aWMgUmV0YWluUHRyPE5TRXZlbnQ+JiBsYXN0UHJl
c3N1cmVFdmVudFNsb3QoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXRhaW5QdHI8
TlNFdmVudD4+IGV2ZW50OworICAgIHJldHVybiBldmVudDsKK30KKworTlNFdmVudCAqRXZlbnRI
YW5kbGVyOjpsYXN0UHJlc3N1cmVFdmVudCgpCit7CisgICAgcmV0dXJuIGxhc3RQcmVzc3VyZUV2
ZW50U2xvdCgpLmdldCgpOworfQorCiBjbGFzcyBDdXJyZW50RXZlbnRTY29wZSB7CiAgICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEN1cnJlbnRFdmVudFNjb3BlKTsKIHB1YmxpYzoKLSAgICBDdXJy
ZW50RXZlbnRTY29wZShOU0V2ZW50ICopOworICAgIEN1cnJlbnRFdmVudFNjb3BlKE5TRXZlbnQg
KiwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQpOwogICAgIH5DdXJyZW50RXZlbnRTY29wZSgp
OwogCiBwcml2YXRlOgpAQCAtOTIsMjEgKzEwMywyNSBAQCBwcml2YXRlOgogI2lmbmRlZiBOREVC
VUcKICAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9ldmVudDsKICNlbmRpZgorICAgIFJldGFpblB0
cjxOU0V2ZW50PiBtX2xhc3RQcmVzc3VyZUV2ZW50OwogfTsKIAotaW5saW5lIEN1cnJlbnRFdmVu
dFNjb3BlOjpDdXJyZW50RXZlbnRTY29wZShOU0V2ZW50ICpldmVudCkKK2lubGluZSBDdXJyZW50
RXZlbnRTY29wZTo6Q3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxh
c3RQcmVzc3VyZUV2ZW50KQogICAgIDogbV9zYXZlZEN1cnJlbnRFdmVudChjdXJyZW50TlNFdmVu
dFNsb3QoKSkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2V2ZW50KGV2ZW50KQogI2VuZGlmCisg
ICAgLCBtX2xhc3RQcmVzc3VyZUV2ZW50KGxhc3RQcmVzc3VyZUV2ZW50KQogewogICAgIGN1cnJl
bnROU0V2ZW50U2xvdCgpID0gZXZlbnQ7CisgICAgbGFzdFByZXNzdXJlRXZlbnRTbG90KCkgPSBs
YXN0UHJlc3N1cmVFdmVudDsKIH0KIAogaW5saW5lIEN1cnJlbnRFdmVudFNjb3BlOjp+Q3VycmVu
dEV2ZW50U2NvcGUoKQogewogICAgIEFTU0VSVChjdXJyZW50TlNFdmVudFNsb3QoKSA9PSBtX2V2
ZW50KTsKICAgICBjdXJyZW50TlNFdmVudFNsb3QoKSA9IG1fc2F2ZWRDdXJyZW50RXZlbnQ7Cisg
ICAgbGFzdFByZXNzdXJlRXZlbnRTbG90KCkgPSBuaWw7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVy
Ojp3aGVlbEV2ZW50KE5TRXZlbnQgKmV2ZW50KQpAQCAtMTE1LDcgKzEzMCw3IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjp3aGVlbEV2ZW50KE5TRXZlbnQgKmUKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAg
ICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbmlsKTsKICAgICByZXR1cm4gaGFuZGxl
V2hlZWxFdmVudChQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1XaGVlbEV2ZW50
KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOwogfQogCkBAIC0x
MjUsNyArMTQwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KE5TRXZlbnQgKmV2ZQog
CiAgICAgQVNTRVJUKFtldmVudCB0eXBlXSA9PSBOU0tleURvd24gfHwgW2V2ZW50IHR5cGVdID09
IE5TS2V5VXApOwogCi0gICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOworICAgIEN1
cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBuaWwpOwogICAgIHJldHVybiBrZXlFdmVudChQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7
CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtNDY5LDcgKzQ4NCw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2UKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURvd24oTlNFdmVudCAqZXZlbnQpCit2b2lk
IEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpsYXN0UHJl
c3N1cmVFdmVudCkKIHsKICAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1lLnZpZXcoKTsKICAgICBp
ZiAoIXYgfHwgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpCkBAIC00NzksMTQgKzQ5NCwxNCBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQgKmV2CiAgICAgCiAgICAgbV9tb3Vz
ZURvd25WaWV3ID0gbmlsOwogICAgIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50
KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbGFzdFByZXNzdXJlRXZlbnQp
OwogCiAgICAgaGFuZGxlTW91c2VQcmVzc0V2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQo
KSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFu
ZGxlcjo6bW91c2VEcmFnZ2VkKE5TRXZlbnQgKmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1v
dXNlRHJhZ2dlZChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAqbGFzdFByZXNzdXJlRXZlbnQpCiB7
CiAgICAgRnJhbWVWaWV3KiB2ID0gbV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2IHx8IG1fc2Vu
ZGluZ0V2ZW50VG9TdWJ2aWV3KQpAQCAtNDk0LDEzICs1MDksMTMgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6Om1vdXNlRHJhZ2dlZChOU0V2ZW50IAogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCi0gICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOworICAgIEN1cnJlbnRF
dmVudFNjb3BlIHNjb3BlKGV2ZW50LCBsYXN0UHJlc3N1cmVFdmVudCk7CiAgICAgaGFuZGxlTW91
c2VNb3ZlRXZlbnQoY3VycmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZl
bnQgKmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlVXAoTlNFdmVudCAqZXZlbnQsIE5T
RXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50KQogewogICAgIEZyYW1lVmlldyogdiA9IG1fZnJhbWUu
dmlldygpOwogICAgIGlmICghdiB8fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldykKQEAgLTUwOCw3
ICs1MjMsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VVcChOU0V2ZW50ICpldmVuCiAKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBDdXJyZW50RXZlbnRTY29wZSBz
Y29wZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIGxhc3RQcmVz
c3VyZUV2ZW50KTsKIAogICAgIC8vIE91ciBiZWhhdmlvciBoZXJlIGlzIGEgbGl0dGxlIGRpZmZl
cmVudCB0aGF0IFF0LiBRdCBhbHdheXMgc2VuZHMKICAgICAvLyBhIG1vdXNlIHJlbGVhc2UgZXZl
bnQsIGV2ZW4gZm9yIGEgZG91YmxlIGNsaWNrLiBUbyBjb3JyZWN0IHByb2JsZW1zCkBAIC01OTUs
NyArNjEwLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnNlbmRGYWtlRXZlbnRzQWZ0ZXJXaQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjptb3Vz
ZU1vdmVkKE5TRXZlbnQgKmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoTlNF
dmVudCAqZXZlbnQsIE5TRXZlbnQqIGxhc3RQcmVzc3VyZUV2ZW50KQogewogICAgIC8vIFJlamVj
dCBhIG1vdXNlIG1vdmVkIGlmIHRoZSBidXR0b24gaXMgZG93biAtIHNjcmV3cyB1cCB0cmFja2lu
ZyBkdXJpbmcgYXV0b3Njcm9sbAogICAgIC8vIFRoZXNlIGhhcHBlbiBiZWNhdXNlIFdlYktpdCBz
b21ldGltZXMgaGFzIHRvIGZha2UgdXAgbW92ZWQgZXZlbnRzLgpAQCAtNjAzLDEyICs2MTgsMjMg
QEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoTlNFdmVudCAqZQogICAgICAgICByZXR1
cm47CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgQ3VycmVudEV2ZW50
U2NvcGUgc2NvcGUoZXZlbnQpOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBs
YXN0UHJlc3N1cmVFdmVudCk7CiAgICAgbW91c2VNb3ZlZChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2
ZW50KCkpOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgRXZlbnRI
YW5kbGVyOjpwYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJzKE5TRXZlbnQgKmV2ZW50KQor
dm9pZCBFdmVudEhhbmRsZXI6OnByZXNzdXJlQ2hhbmdlKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50
KiBsYXN0UHJlc3N1cmVFdmVudCkKK3sKKyAgICBpZiAoIW1fZnJhbWUudmlldygpIHx8IG1fc2Vu
ZGluZ0V2ZW50VG9TdWJ2aWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIGxhc3RQ
cmVzc3VyZUV2ZW50KTsKKyAgICBoYW5kbGVNb3VzZUZvcmNlRXZlbnQoY3VycmVudFBsYXRmb3Jt
TW91c2VFdmVudCgpKTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit2b2lk
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhOU0V2ZW50ICpl
dmVudCwgTlNFdmVudCogbGFzdFByZXNzdXJlRXZlbnQpCiB7CiAgICAgLy8gUmVqZWN0IGEgbW91
c2UgbW92ZWQgaWYgdGhlIGJ1dHRvbiBpcyBkb3duIC0gc2NyZXdzIHVwIHRyYWNraW5nIGR1cmlu
ZyBhdXRvc2Nyb2xsCiAgICAgLy8gVGhlc2UgaGFwcGVuIGJlY2F1c2UgV2ViS2l0IHNvbWV0aW1l
cyBoYXMgdG8gZmFrZSB1cCBtb3ZlZCBldmVudHMuCkBAIC02MTYsNyArNjQyLDcgQEAgdm9pZCBF
dmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUbwogICAgICAgICByZXR1cm47CiAKICAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgQ3VycmVudEV2ZW50U2NvcGUgc2Nv
cGUoZXZlbnQpOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBsYXN0UHJlc3N1
cmVFdmVudCk7CiAgICAgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhjdXJyZW50UGxh
dGZvcm1Nb3VzZUV2ZW50KCkpOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CkBA
IC02NzQsNyArNzAwLDcgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50IEV2ZW50SGFuZGxlcjo6Y3VycmVu
dAogICAgIE5TVmlldyAqd2luZG93VmlldyA9IG5pbDsKICAgICBpZiAoUGFnZSogcGFnZSA9IG1f
ZnJhbWUucGFnZSgpKQogICAgICAgICB3aW5kb3dWaWV3ID0gcGFnZS0+Y2hyb21lKCkucGxhdGZv
cm1QYWdlQ2xpZW50KCk7Ci0gICAgcmV0dXJuIFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQ
bGF0Zm9ybU1vdXNlRXZlbnQoY3VycmVudE5TRXZlbnQoKSwgd2luZG93Vmlldyk7CisgICAgcmV0
dXJuIFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoY3VycmVu
dE5TRXZlbnQoKSwgbGFzdFByZXNzdXJlRXZlbnQoKSwgd2luZG93Vmlldyk7CiB9CiAKIGJvb2wg
RXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldmVudCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9y
bUV2ZW50RmFjdG9yeU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oCShyZXZpc2lvbiAxODM2OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBs
YXRmb3JtRXZlbnRGYWN0b3J5IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICosIE5T
VmlldyAqd2luZG93Vmlldyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtTW91
c2VFdmVudCBjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0
UHJlc3N1cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKICAgICBzdGF0aWMgUGxhdGZvcm1X
aGVlbEV2ZW50IGNyZWF0ZVBsYXRmb3JtV2hlZWxFdmVudChOU0V2ZW50ICosIE5TVmlldyAqd2lu
ZG93Vmlldyk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCBjcmVhdGVQbGF0Zm9ybUtleWJvYXJkRXZlbnQoTlNFdmVudCAqKTsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLm1tCShyZXZpc2lvbiAxODM2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkg
QEAgSW50UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZAogc3RhdGljIEludFBv
aW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChb
ZXZlbnQgdHlwZV0pIHsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisgICAgICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3Vy
ZToKKyNlbmRpZgogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKICAgICAgICAgY2FzZSBO
U0xlZnRNb3VzZURyYWdnZWQ6CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKQEAgLTcxLDYg
Kzc0LDkgQEAgc3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdgogc3RhdGlj
IEludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93Vmll
dykKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgeworI2lmIGRlZmluZWQoX19MUDY0X18p
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICAgICAgY2Fz
ZSBOU0V2ZW50VHlwZVByZXNzdXJlOgorI2VuZGlmCiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VE
b3duOgogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKICAgICAgICAgY2FzZSBOU0xl
ZnRNb3VzZVVwOgpAQCAtOTksNiArMTA1LDkgQEAgc3RhdGljIEludFBvaW50IHBvaW50Rm9yRXZl
bnQoTlNFdmVudCAqZQogc3RhdGljIE1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uRm9yRXZlbnQoTlNF
dmVudCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKKyNpZiBkZWZpbmVk
KF9fTFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisg
ICAgICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgogICAgICAgICBjYXNlIE5T
TGVmdE1vdXNlRG93bjoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZVVwOgogICAgICAgICBjYXNl
IE5TTGVmdE1vdXNlRHJhZ2dlZDoKQEAgLTQxMSwyOSArNDIwLDQ5IEBAIHN0YXRpYyBpbnQgdHlw
ZUZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogICAgIAogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50
QnVpbGRlciA6IHB1YmxpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgewogcHVibGljOgotICAgIFBsYXRm
b3JtTW91c2VFdmVudEJ1aWxkZXIoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykK
KyAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICps
YXN0UHJlc3N1cmVFdmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KQogICAgIHsKICAgICAgICAgLy8g
UGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IG1vdXNlRXZlbnRUeXBlRm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX21vZGlmaWVycyAg
ICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKLSAgICAg
ICAgbV90aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBldmVudFRpbWVTdGFtcFNp
bmNlMTk3MChldmVudCk7CisgICAgICAgIG1fdHlwZSA9IG1vdXNlRXZlbnRUeXBlRm9yRXZlbnQo
ZXZlbnQpOworI2lmIGRlZmluZWQoX19MUDY0X18pICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhf
QUxMT1dFRCA+PSAxMDEwMDMKKyAgICAgICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlw
ZVByZXNzdXJlKSB7CisgICAgICAgICAgICAvLyBTaW5jZSBBcHBLaXQgZG9lc24ndCBzZW5kIG1v
dXNlIGV2ZW50cyBmb3IgZm9yY2UgZG93biBvciBmb3JjZSB1cCwgd2UgaGF2ZSB0byB1c2UgdGhl
IGN1cnJlbnQgcHJlc3N1cmUKKyAgICAgICAgICAgIC8vIGV2ZW50IGFuZCBsYXN0UHJlc3N1cmVF
dmVudCB0byBkZXRlY3QgaWYgdGhpcyBpcyBNb3VzZUZvcmNlRG93biwgTW91c2VGb3JjZVVwLCBv
ciBqdXN0IE1vdXNlRm9yY2VDaGFuZ2VkLgorICAgICAgICAgICAgaWYgKGxhc3RQcmVzc3VyZUV2
ZW50LnN0YWdlID09IDEgJiYgZXZlbnQuc3RhZ2UgPT0gMikKKyAgICAgICAgICAgICAgICBtX3R5
cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlRG93bjsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlID09IDIgJiYgZXZlbnQuc3RhZ2UgPT0gMSkKKyAgICAg
ICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlVXA7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VG
b3JjZUNoYW5nZWQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIG1fbW9kaWZpZXJzID0g
bW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX3RpbWVzdGFtcCA9IGV2ZW50VGlt
ZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKIAogICAgICAgICAvLyBQbGF0Zm9ybU1vdXNlRXZlbnQK
LSAgICAgICAgbV9wb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBwb2ludEZvckV2
ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiAgICAgICAg
ICAgICAgICAgICAgPSBnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9idXR0
b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb3VzZUJ1dHRvbkZvckV2ZW50KGV2ZW50
KTsKLSAgICAgICAgbV9jbGlja0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBjbGlja0Nv
dW50Rm9yRXZlbnQoZXZlbnQpOwotICAgICAgICAKKyAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50
Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0g
Z2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0gbW91c2VCdXR0
b25Gb3JFdmVudChldmVudCk7CisgICAgICAgIG1fY2xpY2tDb3VudCA9IGNsaWNrQ291bnRGb3JF
dmVudChldmVudCk7CisKKyAgICAgICAgbV9mb3JjZSA9IDA7CisjaWYgZGVmaW5lZChfX0xQNjRf
XykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBp
bnQgc3RhZ2UgPSBbZXZlbnQgdHlwZV0gPT0gTlNFdmVudFR5cGVQcmVzc3VyZSA/IGV2ZW50LnN0
YWdlIDogbGFzdFByZXNzdXJlRXZlbnQuc3RhZ2U7CisgICAgICAgIGRvdWJsZSBwcmVzc3VyZSA9
IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZVByZXNzdXJlID8gZXZlbnQucHJlc3N1cmUgOiBs
YXN0UHJlc3N1cmVFdmVudC5wcmVzc3VyZTsKKyAgICAgICAgbV9mb3JjZSA9IHN0YWdlIDwgMSA/
IHByZXNzdXJlIDogcHJlc3N1cmUgKyBzdGFnZSAtIDE7CisjZW5kaWYKKwogICAgICAgICAvLyBN
YWMgc3BlY2lmaWMKLSAgICAgICAgbV9tb2RpZmllckZsYWdzICAgICAgICAgICAgICAgICAgICAg
PSBbZXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgICAgIG1fZXZlbnROdW1iZXIgICAgICAgICAg
ICAgICAgICAgICAgID0gW2V2ZW50IGV2ZW50TnVtYmVyXTsKLSAgICAgICAgbV9tZW51VHlwZUZv
ckV2ZW50ICAgICAgICAgICAgICAgICAgPSB0eXBlRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBt
X21vZGlmaWVyRmxhZ3MgPSBbZXZlbnQgbW9kaWZpZXJGbGFnc107CisgICAgICAgIG1fZXZlbnRO
dW1iZXIgPSBbZXZlbnQgZXZlbnROdW1iZXJdOworICAgICAgICBtX21lbnVUeXBlRm9yRXZlbnQg
PSB0eXBlRm9yRXZlbnQoZXZlbnQpOwogICAgIH0KIH07CiAKLVBsYXRmb3JtTW91c2VFdmVudCBQ
bGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKmV2
ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVu
dEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVu
dCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihldmVudCwgd2luZG93Vmlldyk7CisgICAgcmV0dXJu
IFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQsIGxhc3RQcmVzc3VyZUV2ZW50LCB3aW5k
b3dWaWV3KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM4NDkpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2
MCBAQAorMjAxNS0wNS0wNSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgTmV3IGZvcmNlLXJlbGF0ZWQgRE9NIGV2ZW50cyBzaG91bGQgZmlyZSBpbiBXSzEgdmlld3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2Mwor
ICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMjgx
ODg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFz
cyB0aGUgbGFzdFByZXNzdXJlRXZlbnQgdG8gV2ViQ29yZS4KKyAgICAgICAgKiBXZWJWaWV3L1dl
YkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlTW91c2VvdmVyV2l0
aEV2ZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyByaWdodE1vdXNlVXA6XSk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IG1lbnVGb3JFdmVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgYWNjZXB0c0ZpcnN0TW91c2U6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNob3VsZERl
bGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91
c2VEb3duOm1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91c2VEcmFnZ2Vk
Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZVVwOm1vdXNlVXA6XSk6CisKKyAgICAg
ICAgTmV3IE5TUmVzcG5kZXIgbWV0aG9kIGZvciBwcmVzc3VyZSBjaGFuZ2VzLgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudDpdKToKKworICAgICAgICBOZXcg
Qk9PTCBfY29udGVudFByZXZlbnRzRGVmYXVsdCB0cmFja3Mgd2hldGhlciB0aGUgSGl0VGVzdFJl
c3VsdCBwcmV2ZW50ZWQgdGhlIAorICAgICAgICBkZWZhdWx0IGFjdGlvbi4gR2V0IHJpZCBvZiB3
aWxsSGFuZGxlTW91c2VEb3duOyBub3cgdGhhdCB0aGUgZ2VzdHVyZSByZWNvZ25pemVyIAorICAg
ICAgICBzZXRzIGRlbGF5c1ByaW1hcnlNb3VzZUJ1dHRvbkV2ZW50cyB0byBOTywgd2UgZG9u4oCZ
dCBuZWVkIHRoaXMuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLmg6CisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1t
OgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9jbGVhckltbWVkaWF0
ZUFjdGlvblN0YXRlXSk6CisKKyAgICAgICAgU2V0IGFsbCBvZiB0aGUgaW1tZWRpYXRlQWN0aW9u
U3RhZ2VzIG9uIEV2ZW50SGFuZGxlci4gVGhpcyBpcyBjcml0aWNhbCB0byBrZWVwIAorICAgICAg
ICBsaW5rIG5hdmlnYXRpb24gaGFwcGVuaW5nIGF0IHRoZSByaWdodCB0aW1lIG5vdyB0aGF0IAor
ICAgICAgICBkZWxheXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHMgaXMgc2V0IHRvIE5PLgorICAg
ICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIHBlcmZvcm1IaXRUZXN0QXRQb2lu
dDpdKToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBpbW1lZGlhdGVB
Y3Rpb25SZWNvZ25pemVyRGlkVXBkYXRlQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDYW5jZWxB
bmltYXRpb246XSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1t
ZWRpYXRlQWN0aW9uUmVjb2duaXplckRpZENvbXBsZXRlQW5pbWF0aW9uOl0pOgorCisgICAgICAg
IFVzZSBhIGR1bW15IGFuaW1hdGlvbiBjb250cm9sbGVyIGlmIHRoZSBjb250ZW50IHByZXZlbnRz
IGRlZmF1bHQuCisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RlZmF1
bHRBbmltYXRpb25Db250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIgX3VwZGF0ZUltbWVkaWF0ZUFjdGlvbkl0ZW1dKToKKyAgICAgICAgKC1bV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciB3ZWJWaWV3OndpbGxIYW5kbGVNb3VzZURvd246XSk6IERl
bGV0ZWQuCisKKyAgICAgICAgU2V0IGRlbGF5c1ByaW1hcnlNb3VzZUJ1dHRvbkV2ZW50cyB0byBO
TyBzbyB0aGF0IHdlIGdldCBleGlzdGluZyBtb3VzZSBldmVudHMgd2hlbiAKKyAgICAgICAgd2Ug
ZXhwZWN0IHRvLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2Vi
VmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKwor
ICAgICAgICBDYWNoZSB0aGUgbW9zdCByZWNlbnQgcHJlc3N1cmUgZXZlbnQgc28gdGhhdCB3ZSBj
YW4gc2VuZCBpdCB0byBXZWJDb3JlIGZvciBhbGwgb2YgCisgICAgICAgIHRoZSBtb3VzZSBldmVu
dHMuCisgICAgICAgICgtW1dlYlZpZXcgX3ByZXNzdXJlRXZlbnRdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBfc2V0UHJlc3N1cmVFdmVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRh
Lmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKyAgICAgICAgKC1bV2ViVmll
d1ByaXZhdGUgZGVhbGxvY10pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6
CisKIDIwMTUtMDUtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVG9nZ2xpbmcgdW5kZXJsaW5lIG9yIHN0cmlrZSB0aHJvdWdoIGFmZmVjdHMgZWFjaCBvdGhl
cgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lv
biAxODM2OTApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzY4LDcgKzE3NjgsNyBAQCAtICh2b2lkKV91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6KE5TRXZlCiAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2
ZW50XSBjb250ZXh0XQogICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJl
c3N1cmU6MF07CiAgICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFtZSA9IGNvcmUoW2xh
c3RIaXRWaWV3IF9mcmFtZV0pKQotICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubW91c2VNb3ZlZChldmVudCk7CisgICAgICAgICAgICBsYXN0SGl0Q29yZUZyYW1l
LT5ldmVudEhhbmRsZXIoKS5tb3VzZU1vdmVkKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVz
c3VyZUV2ZW50XSk7CiAgICAgfQogCiAgICAgbGFzdEhpdFZpZXcgPSB2aWV3OwpAQCAtMTc4Nyw5
ICsxNzg3LDkgQEAgLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZQogICAg
ICAgICAgICAgICAgIHx8IFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRh
c2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxXaW5kb3dzXQogI2VuZGlm
CiAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhh
bmRsZXIoKS5tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJl
RXZlbnRdKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCkucGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhldmVudCk7Cisg
ICAgICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5wYXNzTW91c2VNb3ZlZEV2
ZW50VG9TY3JvbGxiYXJzKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7
CiAgICAgICAgIH0KIAogICAgICAgICBbdmlldyByZWxlYXNlXTsKQEAgLTMzMDMsNyArMzMwMyw3
IEBAIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKICAgICBbc3VwZXIgcmln
aHRNb3VzZVVwOmV2ZW50XTsKIAogICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZVVwKGV2
ZW50KTsKKyAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZVVwKGV2ZW50LCBb
W3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldE1l
bnVJdGVtVGFyZ2V0KE5TTWVudUl0ZW0qIG1lbnVJdGVtKQpAQCAtMzM0OCw4ICszMzQ4LDggQEAg
LSAoTlNNZW51ICopbWVudUZvckV2ZW50OihOU0V2ZW50ICopZXZlbgogICAgIC8vIE1hdGNoIGJl
aGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzIGJ5IHNlbmRpbmcgYSBtb3VzZWRvd24gZXZlbnQgZm9y
IHJpZ2h0IGNsaWNrcy4KICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlF
UzsKICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5jbGVhckNvbnRleHRNZW51KCk7
Ci0gICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZURvd24oZXZlbnQpOwotICAgIEJP
T0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZW5kQ29udGV4dE1l
bnVFdmVudChQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2
ZW50LCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOworICAgIGNvcmVGcmFt
ZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3duKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVz
c3VyZUV2ZW50XSk7CisgICAgQk9PTCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLnNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRd
LCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOwogICAgIF9wcml2YXRlLT5o
YW5kbGluZ01vdXNlRG93bkV2ZW50ID0gTk87CiAKICAgICBpZiAoIWhhbmRsZWRFdmVudCkKQEAg
LTM3NzcsNyArMzc3Nyw3IEBAIC0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91c2U6KE5TRXZlbnQgKill
dmUKICAgICAgICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRd
KSB7CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgICAgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBj
b3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFBsYXRmb3JtRXZlbnRG
YWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIHBhZ2UtPmNocm9tZSgpLnBs
YXRmb3JtUGFnZUNsaWVudCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoUGxhdGZvcm1FdmVudEZhY3Rv
cnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJl
c3N1cmVFdmVudF0sIHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7CiAjZW5k
aWYKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW2hpdEhUTUxWaWV3IF9pc1Njcm9sbEJhckV2ZW50
OmV2ZW50XSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwpAQCAtMzgwNCw3ICszODA0
LDcgQEAgLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbgogI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7CiAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9ybUV2ZW50RmFjdG9y
eTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFBsYXRmb3JtRXZlbnRGYWN0b3J5Ojpj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJl
RXZlbnRdLCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOwogICAgICAgICAg
ICAgfQogI2VuZGlmCiAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50
Om5pbF07CkBAIC0zODQxLDcgKzM4NDEsNiBAQCAtICh2b2lkKW1vdXNlRG93bjooV2ViRXZlbnQg
KilldmVudAogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTAwMAogICAgIFtbW3NlbGYgX3dlYlZpZXddIF9hY3Rpb25NZW51Q29udHJv
bGxlcl0gd2ViVmlldzpbc2VsZiBfd2ViVmlld10gd2lsbEhhbmRsZU1vdXNlRG93bjpldmVudF07
Ci0gICAgW1tbc2VsZiBfd2ViVmlld10gX2ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXJdIHdlYlZp
ZXc6W3NlbGYgX3dlYlZpZXddIHdpbGxIYW5kbGVNb3VzZURvd246ZXZlbnRdOwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1MpCkBAIC0zODcyLDcgKzM4NzEsNyBAQCAtICh2b2lkKW1vdXNlRG93
bjooV2ViRXZlbnQgKilldmVudAogICAgICAgICAgICAgLy8gTGV0IFdlYkNvcmUgZ2V0IGEgY2hh
bmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJhY2sgdG8gdXMKICAg
ICAgICAgICAgIC8vIHRvIHN0YXJ0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRl
LgogICAgICAgICAgICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQotICAgICAgICAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3duKGV2
ZW50KTsKKyAgICAgICAgICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlRG93
bihldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogICAgICAgICB9CiAg
ICAgfQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcApAQCAtMzkyNSw3ICszOTI0LDcgQEAg
LSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAogICAgIGlmICghX3ByaXZhdGUt
Pmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzKSB7CiAgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CiAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZy
YW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkubW91c2VEcmFnZ2VkKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBwYWdlLT5tYWluRnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5tb3VzZURyYWdnZWQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10g
X3ByZXNzdXJlRXZlbnRdKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDA2NCw4ICs0MDYzLDEz
IEBAIC0gKHZvaWQpbW91c2VVcDooV2ViRXZlbnQgKilldmVudAogCiAgICAgW3NlbGYgX3N0b3BB
dXRvc2Nyb2xsVGltZXJdOwogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisjaWYgUExBVEZPUk0oSU9TKQogICAg
ICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91c2VVcChldmVudCk7
CisjZWxzZQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91
c2VVcChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOworI2VuZGlmCisg
ICAgICAgIH0KICAgICB9CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBbc2VsZiBfdXBkYXRlTW91
c2VvdmVyV2l0aEZha2VFdmVudF07CkBAIC00MDgxLDYgKzQwODUsMjUgQEAgLSAodm9pZCltb3Vz
ZU1vdmVkOihOU0V2ZW50ICopZXZlbnQKIH0KICNlbmRpZgogCistICh2b2lkKXByZXNzdXJlQ2hh
bmdlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAm
JiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisgICAgTlNFdmVudCAq
bGFzdFByZXNzdXJlRXZlbnQgPSBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XTsKKyAg
ICBpZiAoZXZlbnQgPT0gbGFzdFByZXNzdXJlRXZlbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VDaGFuZ2VkICYmIGV2ZW50LnBoYXNlICE9
IE5TRXZlbnRQaGFzZUJlZ2FuICYmIGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUVuZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkucHJlc3N1cmVDaGFuZ2UoZXZlbnQsIGxhc3RQcmVz
c3VyZUV2ZW50KTsKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9zZXRQcmVzc3VyZUV2ZW50OmV2ZW50
XTsKKyNlbmRpZgorfQorCiAjaWYgIVBMQVRGT1JNKElPUykKIC8vIHJldHVybmluZyBZRVMgZnJv
bSB0aGlzIG1ldGhvZCBpcyB0aGUgd2F5IHdlIHRlbGwgQXBwS2l0IHRoYXQgaXQgaXMgb2sgZm9y
IHRoaXMgdmlldwogLy8gdG8gYmUgaW4gdGhlIGtleSBsb29wIGV2ZW4gd2hlbiAidGFiIHRvIGFs
bCBjb250cm9scyIgaXMgbm90IG9uLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDE4
MzY5MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsMTIgQEAgQGludGVyZmFjZSBX
ZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIAogICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRl
eHQ+IF9jdXJyZW50QWN0aW9uQ29udGV4dDsKICAgICBCT09MIF9pc1Nob3dpbmdUZXh0SW5kaWNh
dG9yOwogICAgIEJPT0wgX2hhc0FjdGl2YXRlZEFjdGlvbkNvbnRleHQ7CisgICAgQk9PTCBfY29u
dGVudFByZXZlbnRzRGVmYXVsdDsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXcgcmVjb2duaXplcjooTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJl
UmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7CiAtICh2b2lkKXdlYlZpZXdD
bG9zZWQ7CiAKLS0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgd2lsbEhhbmRsZU1v
dXNlRG93bjooTlNFdmVudCAqKWV2ZW50OwogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyBkaWRIYW5kbGVTY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50OwogCiAtIChOU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE4MzY5MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjQsNiArNjQsMTMgQEAgU09GVF9MSU5LX0NMQVNTKFF1aWNrTG9va1VJLCBRTFBy
ZXZpZXdNZQogQGludGVyZmFjZSBXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyICgpIDxRTFBy
ZXZpZXdNZW51SXRlbURlbGVnYXRlPgogQGVuZAogCitAaW50ZXJmYWNlIFdlYkFuaW1hdGlvbkNv
bnRyb2xsZXIgOiBOU09iamVjdCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVy
PiB7Cit9CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBbmltYXRpb25Db250cm9sbGVyCitA
ZW5kCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlcgpAQCAtOTQsMTIgKzEwMSw2IEBAIC0gKHZvaWQpd2ViVmll
d0Nsb3NlZAogICAgIF9jdXJyZW50QWN0aW9uQ29udGV4dCA9IG5pbDsKIH0KIAotLSAodm9pZCl3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aWxsSGFuZGxlTW91c2VEb3duOihOU0V2ZW50ICop
ZXZlbnQKLXsKLSAgICBbc2VsZiBfY2xlYXJJbW1lZGlhdGVBY3Rpb25TdGF0ZV07Ci0gICAgW193
ZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uOlRleHRJbmRpY2F0b3JEaXNt
aXNzYWxBbmltYXRpb246OkZhZGVPdXRdOwotfQotCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
Kil3ZWJWaWV3IGRpZEhhbmRsZVNjcm9sbFdoZWVsOihOU0V2ZW50ICopZXZlbnQKIHsKICAgICBb
X2N1cnJlbnRRTFByZXZpZXdNZW51SXRlbSBjbG9zZV07CkBAIC0xMzYsNiArMTM3LDcgQEAgLSAo
dm9pZClfY2xlYXJJbW1lZGlhdGVBY3Rpb25TdGF0ZQogICAgIF90eXBlID0gV2ViSW1tZWRpYXRl
QWN0aW9uTm9uZTsKICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBuaWw7CiAgICAgX2N1cnJl
bnRRTFByZXZpZXdNZW51SXRlbSA9IG5pbDsKKyAgICBfY29udGVudFByZXZlbnRzRGVmYXVsdCA9
IE5POwogfQogCiAtICh2b2lkKXBlcmZvcm1IaXRUZXN0QXRQb2ludDooTlNQb2ludCl2aWV3UG9p
bnQKQEAgLTE0NCw2ICsxNDYsMTAgQEAgLSAodm9pZClwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6KE5T
UG9pbnQpdgogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgX2hpdFRl
c3RSZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50
KEludFBvaW50KHZpZXdQb2ludCkpOworICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0
SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRlQWN0aW9uU3RhZ2U6OlBlcmZvcm1lZEhpdFRl
c3QpOworCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBfaGl0VGVzdFJlc3VsdC5pbm5lckVs
ZW1lbnQoKSkKKyAgICAgICAgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQgPSBlbGVtZW50LT5kaXNw
YXRjaE1vdXNlRm9yY2VXaWxsQmVnaW4oKTsKIH0KIAogI3ByYWdtYSBtYXJrIE5TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZQpAQCAtMTg4LDYgKzE5NCwxMyBAQCAtICh2
b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRVcGRhCiAgICAgaWYgKGltbWVkaWF0ZUFj
dGlvblJlY29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtbW1tfd2ViVmlldyBfc2VsZWN0
ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIF9mcmFtZV0pOworICAgIGlm
ICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9u
VXBkYXRlZCk7CisgICAgaWYgKF9jb250ZW50UHJldmVudHNEZWZhdWx0KQorICAgICAgICByZXR1
cm47CisKICAgICBbX3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzczpb
aW1tZWRpYXRlQWN0aW9uUmVjb2duaXplciBhbmltYXRpb25Qcm9ncmVzc11dOwogfQogCkBAIC0x
OTYsNiArMjA5LDEwIEBAIC0gKHZvaWQpaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplckRpZENhbmMK
ICAgICBpZiAoaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplciAhPSBfaW1tZWRpYXRlQWN0aW9uUmVj
b2duaXplcikKICAgICAgICAgcmV0dXJuOwogCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W1tbW193ZWJWaWV3IF9zZWxlY3RlZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmll
d10gX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSkKKyAgICAgICAgY29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6
QWN0aW9uQ2FuY2VsbGVkKTsKKwogICAgIFtfd2ViVmlldyBfc2V0VGV4dEluZGljYXRvckFuaW1h
dGlvblByb2dyZXNzOjBdOwogICAgIFtzZWxmIF9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlXTsK
ICAgICBbX3dlYlZpZXcgX2NsZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb246VGV4dEluZGlj
YXRvckRpc21pc3NhbEFuaW1hdGlvbjo6Tm9uZV07CkBAIC0yMDcsNiArMjI0LDExIEBAIC0gKHZv
aWQpaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplckRpZENvbXAKICAgICBpZiAoaW1tZWRpYXRlQWN0
aW9uUmVjb2duaXplciAhPSBfaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcikKICAgICAgICAgcmV0
dXJuOwogCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW1tbW193ZWJWaWV3IF9zZWxlY3Rl
ZE9yTWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gX2ZyYW1lXSk7CisgICAgaWYg
KCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpBY3Rpb25D
b21wbGV0ZWQpOworCiAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJv
Z3Jlc3M6MV07CiAgICAgW193ZWJWaWV3IF9zZXRNYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbjpO
T107CiB9CkBAIC0yMTUsNiArMjM3LDExIEBAIC0gKHZvaWQpaW1tZWRpYXRlQWN0aW9uUmVjb2du
aXplckRpZENvbXAKIAogLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxl
cj4pX2RlZmF1bHRBbmltYXRpb25Db250cm9sbGVyCiB7CisgICAgaWYgKF9jb250ZW50UHJldmVu
dHNEZWZhdWx0KSB7CisgICAgICAgIFJldGFpblB0cjxXZWJBbmltYXRpb25Db250cm9sbGVyPiBk
dW1teUNvbnRyb2xsZXIgPSBbW1dlYkFuaW1hdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRdOwor
ICAgICAgICByZXR1cm4gZHVtbXlDb250cm9sbGVyLmdldCgpOworICAgIH0KKwogICAgIE5TVVJM
ICp1cmwgPSBfaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICBOU1N0cmluZyAq
YWJzb2x1dGVVUkxTdHJpbmcgPSBbdXJsIGFic29sdXRlU3RyaW5nXTsKICAgICBpZiAodXJsICYm
IF9oaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKSkgewpAQCAtMjY1LDYgKzI5MiwxMSBAQCAtICh2
b2lkKV91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtCiAKICAgICBpZCA8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyPiBkZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlciA9IFtzZWxm
IF9kZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcl07CiAKKyAgICBpZiAoX2NvbnRlbnRQcmV2ZW50
c0RlZmF1bHQpIHsKKyAgICAgICAgW19pbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyIHNldEFuaW1h
dGlvbkNvbnRyb2xsZXI6ZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXJdOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgLy8gQWxsb3cgY2xpZW50cyB0aGUgb3Bwb3J0dW5pdHkgdG8gb3Zl
cnJpZGUgdGhlIGRlZmF1bHQgaW1tZWRpYXRlIGFjdGlvbi4KICAgICBpZCBjdXN0b21DbGllbnRB
bmltYXRpb25Db250cm9sbGVyID0gbmlsOwogICAgIGlmIChbW193ZWJWaWV3IFVJRGVsZWdhdGVd
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6aW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlckZvckhpdFRlc3RSZXN1bHQ6d2l0aFR5cGU6KV0pIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE4MzY5MCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTEwLDYg
KzkxMCw3IEBAIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmEKICAgICAg
ICAgUmV0YWluUHRyPE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXI+IHJlY29nbml6
ZXIgPSBhZG9wdE5TKFsoTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKVtnZXN0
dXJlQ2xhc3MgYWxsb2NdIGluaXRXaXRoVGFyZ2V0Om5pbCBhY3Rpb246TlVMTF0pOwogICAgICAg
ICBfcHJpdmF0ZS0+aW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciA9IFtbV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OnNlbGYgcmVjb2duaXplcjpyZWNv
Z25pemVyLmdldCgpXTsKICAgICAgICAgW3JlY29nbml6ZXIgc2V0RGVsZWdhdGU6X3ByaXZhdGUt
PmltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXJdOworICAgICAgICBbcmVjb2duaXplciBzZXREZWxh
eXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHM6Tk9dOwogICAgIH0KICNlbmRpZgogCkBAIC04NjAx
LDYgKzg2MDIsMjAgQEAgLSAoaWQpX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEaWN0aW9uYXJ5TAog
fQogI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAK
Ky0gKE5TRXZlbnQgKilfcHJlc3N1cmVFdmVudAoreworICAgIHJldHVybiBfcHJpdmF0ZS0+cHJl
c3N1cmVFdmVudDsKK30KKworLSAodm9pZClfc2V0UHJlc3N1cmVFdmVudDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgaWYgKGV2ZW50ID09IF9wcml2YXRlLT5wcmVzc3VyZUV2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBbX3ByaXZhdGUtPnByZXNzdXJlRXZlbnQgcmVsZWFzZV07CisgICAg
X3ByaXZhdGUtPnByZXNzdXJlRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKK30KKwogLSAodm9pZClf
c2V0VGV4dEluZGljYXRvcjooVGV4dEluZGljYXRvciYpdGV4dEluZGljYXRvcgogewogICAgIFtz
ZWxmIF9zZXRUZXh0SW5kaWNhdG9yOnRleHRJbmRpY2F0b3Igd2l0aExpZmV0aW1lOlRleHRJbmRp
Y2F0b3JMaWZldGltZTo6UGVybWFuZW50XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLmgJKHJldmlzaW9uIDE4MzY5MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlld0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBAIEBp
bnRlcmZhY2UgV2ViVmlld1ByaXZhdGUgOiBOU09iamVjdCB7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3c+IHRleHRJbmRpY2F0b3JXaW5kb3c7CiAgICAg
Qk9PTCBoYXNJbml0aWFsaXplZExvb2t1cE9ic2VydmVyOwogICAgIFJldGFpblB0cjxXZWJXaW5k
b3dWaXNpYmlsaXR5T2JzZXJ2ZXI+IHdpbmRvd1Zpc2liaWxpdHlPYnNlcnZlcjsKKyAgICBOU0V2
ZW50ICpwcmVzc3VyZUV2ZW50OwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAogICAgIEJPT0wg
c2hvdWxkTWFpbnRhaW5JbmFjdGl2ZVNlbGVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0RhdGEubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3RGF0YS5tbQkocmV2aXNpb24gMTgzNjkwKQorKysgU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg3LDEwICsx
ODcsMTMgQEAgLSAodm9pZClkZWFsbG9jCiAjZW5kaWYKICAgICBbaW5zcGVjdG9yIHJlbGVhc2Vd
OwogICAgIFtjdXJyZW50Tm9kZUhpZ2hsaWdodCByZWxlYXNlXTsKLSNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCisjaWYgUExBVEZP
Uk0oTUFDKQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwCiAg
ICAgW2FjdGlvbk1lbnVDb250cm9sbGVyIHJlbGVhc2VdOwogICAgIFtpbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyIHJlbGVhc2VdOwogI2VuZGlmCisgICAgW3ByZXNzdXJlRXZlbnQgcmVsZWFzZV07
CisjZW5kaWYKICAgICBbaG9zdFdpbmRvdyByZWxlYXNlXTsKICAgICBbcG9saWN5RGVsZWdhdGVG
b3J3YXJkZXIgcmVsZWFzZV07CiAgICAgW1VJRGVsZWdhdGVGb3J3YXJkZXIgcmVsZWFzZV07Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlz
aW9uIDE4MzY5MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsyNjksOCBAQCBAaW50ZXJmYWNlIFdlYlZpZXcg
KFdlYlZpZXdPdGhlckludGVybmFsCiAtIChXZWJBY3Rpb25NZW51Q29udHJvbGxlciAqKV9hY3Rp
b25NZW51Q29udHJvbGxlcjsKIC0gKFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgKilfaW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlcjsKICNlbmRpZgorLSAoTlNFdmVudCAqKV9wcmVzc3VyZUV2
ZW50OworLSAodm9pZClfc2V0UHJlc3N1cmVFdmVudDooTlNFdmVudCAqKWV2ZW50OwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKSAmJiAhUExBVEZPUk0oSU9T
KSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzODQ5KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTUtMDUtMDUgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIE5ldyBmb3JjZS1yZWxhdGVkIERPTSBl
dmVudHMgc2hvdWxkIGZpcmUgaW4gV0sxIHZpZXdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5n
LQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMDI4MTg4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQ
bGF0Zm9ybU1vdXNlRXZlbnQoKSB0YWtlcyB0aGUgbGFzdCBwcmVzc3VyZSBldmVudCAKKyAgICAg
ICAgbm93LiBKdXN0IHNlbmQgbmlsLiAKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL21h
Yy9NZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmJ1
aWxkQW5kUGVyZm9ybVRlc3QpOgorCiAyMDE1LTA1LTA1ICBUaW1vdGh5IEhvcnRvbiAgPHRpbW90
aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBsYXlvdXQgbW9kZSBmb3IgY29t
cHV0aW5nIGZpeGVkIGxheW91dCBzaXplIGZyb20gYSBtaW5pbXVtIHNpemUKSW5kZXg6IFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01lbnVUeXBlc0Zvck1vdXNl
RXZlbnRzLm1tCShyZXZpc2lvbiAxODM2OTApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L21hYy9NZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCBzdGF0aWMgdm9pZCBidWlsZEFuZFBlcmZvcm1UZXN0KE5TRXZlbnRUCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrQ291bnQ6MAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlOjBdOwogICAgIAotICAgIGF1dG8g
cG1lID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VF
dmVudChldmVudCwgd2ViVmlldy5nZXQoKSk7CisgICAgYXV0byBwbWUgPSBXZWJDb3JlOjpQbGF0
Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBuaWwsIHdl
YlZpZXcuZ2V0KCkpOwogICAgIAogICAgIEVYUEVDVF9FUShleHBlY3RlZEJ1dHRvbiwgcG1lLmJ1
dHRvbigpKTsKICAgICBFWFBFQ1RfVFJVRSghbW9kaWZpZXJGbGFncyB8fCBwbWUubW9kaWZpZXJG
bGFncygpICYgbW9kaWZpZXJGbGFncyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252527</attachid>
            <date>2015-05-06 15:27:34 -0700</date>
            <delta_ts>2015-05-06 16:32:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>34525</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTA2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9yY2UtcmVsYXRlZCBET00g
ZXZlbnRzIHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgb2YgdGhlIFdLMSBtb3VzZSBldmVudHMg
bmVlZCB0byB0YWtlIHRoZSBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5oOgorCisgICAgICAgIE1ha2UgbGFzdFByZXNzdXJlRXZlbnQgYSBwYXJ0IG9mIEN1
cnJlbnRFdmVudFNjb3BlLiBUaGlzIGlzIG5lZWRlZCB0byBoYXZlIAorICAgICAgICBhY2N1cmF0
ZSBwcmVzc3VyZSBpbmZvcm1hdGlvbiBmb3IgYWxsIG9mIHRoZSBtb3VzZSBldmVudHMgaW4gc3Vi
ZnJhbWVzLgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6Omxhc3RQcmVzc3VyZUV2ZW50U2xvdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6Omxhc3RQcmVzc3VyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRF
dmVudFNjb3BlOjpDdXJyZW50RXZlbnRTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50
RXZlbnRTY29wZTo6fkN1cnJlbnRFdmVudFNjb3BlKToKKworICAgICAgICBUaGVzZSBldmVudHMg
ZG9u4oCZdCBoYXZlIGFuIGFzc29jaWF0ZWQgcHJlc3N1cmUsIHNvIHNlbmQgbmlsIGZvciB0aGUg
CisgICAgICAgIGxhc3RQcmVzc3VyZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZl
bnQpOgorCisgICAgICAgIFBpcGUgdGhyb3VnaCBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6bW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQp
OgorCisgICAgICAgIE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgcHJlc3N1cmUgY2hhbmdlIGV2ZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cHJlc3N1cmVDaGFuZ2UpOgorCisg
ICAgICAgIFBpcGUgdGhyb3VnaCBsYXN0UHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQpOgorCisg
ICAgICAgIFRha2UgdGhlIGxhc3RQcmVzc3VyZUV2ZW50IGluIG9yZGVyIHRvIGJ1aWxkIGEgUGxh
dGZvcm1Nb3VzZUV2ZW50IHdpdGggdGhlIGNvcnJlY3QgCisgICAgICAgIHByZXNzdXJlIGluZm9y
bWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cG9pbnRGb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb3VzZUJ1dHRvbkZvckV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6
OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudCk6CisKIDIwMTUtMDUtMDYgIERhdmlkIEh5YXR0ICA8
aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIGNvcGllcyBpbiBzY3JvbGxPZmZzZXRG
b3JGaXhlZFBvc2l0aW9uKCkgYW5kIGlubGluZSBpdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEwICsyNjYsMTEgQEAgcHVibGljOgog
CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18pCiAjaWYgIVBMQVRGT1JN
KElPUykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNlRG93bihOU0V2ZW50ICopOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VEcmFnZ2VkKE5TRXZlbnQgKik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBtb3VzZU1vdmVkKE5TRXZlbnQgKik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZURv
d24oTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0UHJlc3N1cmVFdmVudCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAqLCBOU0V2ZW50ICpsYXN0UHJlc3N1cmVF
dmVudCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKiwgTlNFdmVu
dCAqbGFzdFByZXNzdXJlRXZlbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VNb3Zl
ZChOU0V2ZW50ICosIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50KTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHByZXNzdXJlQ2hhbmdlKE5TRXZlbnQgKiwgTlNFdmVudCogbGFzdFByZXNzdXJl
RXZlbnQpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIHdoZWVsRXZlbnQoTlNFdmVudCAqKTsKICNlbHNlCkBAIC0y
ODUsNyArMjg2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9TKQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhOU0V2
ZW50ICopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Ny
b2xsYmFycyhOU0V2ZW50ICosIE5TRXZlbnQqIGxhc3RQcmVzc3VyZUV2ZW50KTsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZl
bnQgKmluaXRpYXRpbmdFdmVudCk7CiAjZW5kaWYKQEAgLTI5NCw2ICsyOTUsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoaW50IG51bSkgeyBtX2FjdGl2YXRp
b25FdmVudE51bWJlciA9IG51bTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TRXZl
bnQgKmN1cnJlbnROU0V2ZW50KCk7CisgICAgc3RhdGljIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2
ZW50KCk7CiAjZWxzZQogICAgIHN0YXRpYyBXZWJFdmVudCAqY3VycmVudEV2ZW50KCk7CiAjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50
SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVu
dEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDE4Mzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODEsMTAgKzgxLDIxIEBA
IE5TRXZlbnQgKkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZlbnQoKQogICAgIHJldHVybiBjdXJy
ZW50TlNFdmVudFNsb3QoKS5nZXQoKTsKIH0KIAorc3RhdGljIFJldGFpblB0cjxOU0V2ZW50PiYg
bGFzdFByZXNzdXJlRXZlbnRTbG90KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0
YWluUHRyPE5TRXZlbnQ+PiBldmVudDsKKyAgICByZXR1cm4gZXZlbnQ7Cit9CisKK05TRXZlbnQg
KkV2ZW50SGFuZGxlcjo6bGFzdFByZXNzdXJlRXZlbnQoKQoreworICAgIHJldHVybiBsYXN0UHJl
c3N1cmVFdmVudFNsb3QoKS5nZXQoKTsKK30KKwogY2xhc3MgQ3VycmVudEV2ZW50U2NvcGUgewog
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJyZW50RXZlbnRTY29wZSk7CiBwdWJsaWM6Ci0g
ICAgQ3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqKTsKKyAgICBDdXJyZW50RXZlbnRTY29wZShO
U0V2ZW50ICosIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50KTsKICAgICB+Q3VycmVudEV2ZW50
U2NvcGUoKTsKIAogcHJpdmF0ZToKQEAgLTkyLDIxICsxMDMsMjUgQEAgcHJpdmF0ZToKICNpZm5k
ZWYgTkRFQlVHCiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fZXZlbnQ7CiAjZW5kaWYKKyAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gbV9sYXN0UHJlc3N1cmVFdmVudDsKIH07CiAKLWlubGluZSBDdXJy
ZW50RXZlbnRTY29wZTo6Q3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqZXZlbnQpCitpbmxpbmUg
Q3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKE5TRXZlbnQgKmV2ZW50LCBOU0V2
ZW50ICpsYXN0UHJlc3N1cmVFdmVudCkKICAgICA6IG1fc2F2ZWRDdXJyZW50RXZlbnQoY3VycmVu
dE5TRXZlbnRTbG90KCkpCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9ldmVudChldmVudCkKICNl
bmRpZgorICAgICwgbV9sYXN0UHJlc3N1cmVFdmVudChsYXN0UHJlc3N1cmVFdmVudCkKIHsKICAg
ICBjdXJyZW50TlNFdmVudFNsb3QoKSA9IGV2ZW50OworICAgIGxhc3RQcmVzc3VyZUV2ZW50U2xv
dCgpID0gbGFzdFByZXNzdXJlRXZlbnQ7CiB9CiAKIGlubGluZSBDdXJyZW50RXZlbnRTY29wZTo6
fkN1cnJlbnRFdmVudFNjb3BlKCkKIHsKICAgICBBU1NFUlQoY3VycmVudE5TRXZlbnRTbG90KCkg
PT0gbV9ldmVudCk7CiAgICAgY3VycmVudE5TRXZlbnRTbG90KCkgPSBtX3NhdmVkQ3VycmVudEV2
ZW50OworICAgIGxhc3RQcmVzc3VyZUV2ZW50U2xvdCgpID0gbmlsOwogfQogCiBib29sIEV2ZW50
SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKQEAgLTExNSw3ICsxMzAsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICplCiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVu
dCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIG5pbCk7CiAgICAgcmV0dXJu
IGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtV2hl
ZWxFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKIH0K
IApAQCAtMTI1LDcgKzE0MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChOU0V2ZW50
ICpldmUKIAogICAgIEFTU0VSVChbZXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duIHx8IFtldmVudCB0
eXBlXSA9PSBOU0tleVVwKTsKIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsK
KyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbmlsKTsKICAgICByZXR1cm4ga2V5
RXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRFdmVudChl
dmVudCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTQ2OSw3ICs0ODQs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdlCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQgKmV2ZW50
KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCwgTlNFdmVudCAq
bGFzdFByZXNzdXJlRXZlbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2ID0gbV9mcmFtZS52aWV3KCk7
CiAgICAgaWYgKCF2IHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KQpAQCAtNDc5LDE0ICs0OTQs
MTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldgogICAgIAogICAg
IG1fbW91c2VEb3duVmlldyA9IG5pbDsKICAgICAKLSAgICBDdXJyZW50RXZlbnRTY29wZSBzY29w
ZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIGxhc3RQcmVzc3Vy
ZUV2ZW50KTsKIAogICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVudChjdXJyZW50UGxhdGZvcm1Nb3Vz
ZUV2ZW50KCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBF
dmVudEhhbmRsZXI6Om1vdXNlRHJhZ2dlZChOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5k
bGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2
ZW50KQogewogICAgIEZyYW1lVmlldyogdiA9IG1fZnJhbWUudmlldygpOwogICAgIGlmICghdiB8
fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldykKQEAgLTQ5NCwxMyArNTA5LDEzIEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAKIAogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBD
dXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbGFzdFByZXNzdXJlRXZlbnQpOwogICAgIGhh
bmRsZU1vdXNlTW92ZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VV
cChOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2
ZW50LCBOU0V2ZW50ICpsYXN0UHJlc3N1cmVFdmVudCkKIHsKICAgICBGcmFtZVZpZXcqIHYgPSBt
X2ZyYW1lLnZpZXcoKTsKICAgICBpZiAoIXYgfHwgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpCkBA
IC01MDgsNyArNTIzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlVXAoTlNFdmVudCAqZXZl
bgogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgQ3VycmVudEV2ZW50
U2NvcGUgc2NvcGUoZXZlbnQpOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBs
YXN0UHJlc3N1cmVFdmVudCk7CiAKICAgICAvLyBPdXIgYmVoYXZpb3IgaGVyZSBpcyBhIGxpdHRs
ZSBkaWZmZXJlbnQgdGhhdCBRdC4gUXQgYWx3YXlzIHNlbmRzCiAgICAgLy8gYSBtb3VzZSByZWxl
YXNlIGV2ZW50LCBldmVuIGZvciBhIGRvdWJsZSBjbGljay4gVG8gY29ycmVjdCBwcm9ibGVtcwpA
QCAtNTk1LDcgKzYxMCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kRmFrZUV2ZW50c0FmdGVy
V2kKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxl
cjo6bW91c2VNb3ZlZChOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1v
dmVkKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50KiBsYXN0UHJlc3N1cmVFdmVudCkKIHsKICAgICAv
LyBSZWplY3QgYSBtb3VzZSBtb3ZlZCBpZiB0aGUgYnV0dG9uIGlzIGRvd24gLSBzY3Jld3MgdXAg
dHJhY2tpbmcgZHVyaW5nIGF1dG9zY3JvbGwKICAgICAvLyBUaGVzZSBoYXBwZW4gYmVjYXVzZSBX
ZWJLaXQgc29tZXRpbWVzIGhhcyB0byBmYWtlIHVwIG1vdmVkIGV2ZW50cy4KQEAgLTYwMywxMiAr
NjE4LDIzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZlbnQgKmUKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIEN1cnJl
bnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShl
dmVudCwgbGFzdFByZXNzdXJlRXZlbnQpOwogICAgIG1vdXNlTW92ZWQoY3VycmVudFBsYXRmb3Jt
TW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhOU0V2ZW50ICpl
dmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwcmVzc3VyZUNoYW5nZShOU0V2ZW50ICpldmVudCwg
TlNFdmVudCogbGFzdFByZXNzdXJlRXZlbnQpCit7CisgICAgaWYgKCFtX2ZyYW1lLnZpZXcoKSB8
fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50
LCBsYXN0UHJlc3N1cmVFdmVudCk7CisgICAgaGFuZGxlTW91c2VGb3JjZUV2ZW50KGN1cnJlbnRQ
bGF0Zm9ybU1vdXNlRXZlbnQoKSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
Kwordm9pZCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoTlNF
dmVudCAqZXZlbnQsIE5TRXZlbnQqIGxhc3RQcmVzc3VyZUV2ZW50KQogewogICAgIC8vIFJlamVj
dCBhIG1vdXNlIG1vdmVkIGlmIHRoZSBidXR0b24gaXMgZG93biAtIHNjcmV3cyB1cCB0cmFja2lu
ZyBkdXJpbmcgYXV0b3Njcm9sbAogICAgIC8vIFRoZXNlIGhhcHBlbiBiZWNhdXNlIFdlYktpdCBz
b21ldGltZXMgaGFzIHRvIGZha2UgdXAgbW92ZWQgZXZlbnRzLgpAQCAtNjE2LDcgKzY0Miw3IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlZEV2ZW50VG8KICAgICAgICAgcmV0dXJu
OwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIEN1cnJlbnRFdmVudFNj
b3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbGFz
dFByZXNzdXJlRXZlbnQpOwogICAgIHBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoY3Vy
cmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQpAQCAtNjc0LDcgKzcwMCw3IEBAIFBsYXRmb3JtTW91c2VFdmVudCBFdmVudEhhbmRsZXI6
OmN1cnJlbnQKICAgICBOU1ZpZXcgKndpbmRvd1ZpZXcgPSBuaWw7CiAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKICAgICAgICAgd2luZG93VmlldyA9IHBhZ2UtPmNocm9tZSgp
LnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGN1cnJlbnROU0V2ZW50KCksIHdpbmRvd1ZpZXcpOwor
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50
KGN1cnJlbnROU0V2ZW50KCksIGxhc3RQcmVzc3VyZUV2ZW50KCksIHdpbmRvd1ZpZXcpOwogfQog
CiBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAkocmV2aXNpb24gMTgzODkxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBQbGF0Zm9ybUV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVu
dCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQbGF0
Zm9ybU1vdXNlRXZlbnQgY3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKiwgTlNFdmVu
dCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93Vmlldyk7CiAgICAgc3RhdGljIFBs
YXRmb3JtV2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCAqLCBOU1Zp
ZXcgKndpbmRvd1ZpZXcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQgY3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KE5TRXZlbnQgKik7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50
RmFjdG9yeU1hYy5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSw5IEBAIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmQKIHN0YXRp
YyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3
aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBjYXNlIE5TRXZlbnRUeXBl
UHJlc3N1cmU6CisjZW5kaWYKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246CiAgICAgICAg
IGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlVXA6CkBA
IC03MSw2ICs3NCw5IEBAIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXYK
IHN0YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndp
bmRvd1ZpZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKKyNpZiBkZWZpbmVkKF9f
TFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisgICAg
ICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgogICAgICAgICBjYXNlIE5TTGVm
dE1vdXNlRG93bjoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CiAgICAgICAgIGNh
c2UgTlNMZWZ0TW91c2VVcDoKQEAgLTk5LDYgKzEwNSw5IEBAIHN0YXRpYyBJbnRQb2ludCBwb2lu
dEZvckV2ZW50KE5TRXZlbnQgKmUKIHN0YXRpYyBNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbkZvckV2
ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisjaWYg
ZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEw
MTAwMworICAgICAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKICAgICAgICAg
Y2FzZSBOU0xlZnRNb3VzZURvd246CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKICAgICAg
ICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CkBAIC00MTEsMjkgKzQyMCw1MSBAQCBzdGF0aWMg
aW50IHR5cGVGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICAgICAKIGNsYXNzIFBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2ZW50IHsKIHB1YmxpYzoKLSAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRv
d1ZpZXcpCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihOU0V2ZW50ICpldmVudCwgTlNF
dmVudCAqbGFzdFByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKICAgICB7CiAgICAg
ICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAgbV90eXBlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb2Rp
ZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRUaW1l
U3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAgICBtX3R5cGUgPSBtb3VzZUV2ZW50VHlwZUZv
ckV2ZW50KGV2ZW50KTsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCisgICAgICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNF
dmVudFR5cGVQcmVzc3VyZSkgeworICAgICAgICAgICAgLy8gU2luY2UgQXBwS2l0IGRvZXNuJ3Qg
c2VuZCBtb3VzZSBldmVudHMgZm9yIGZvcmNlIGRvd24gb3IgZm9yY2UgdXAsIHdlIGhhdmUgdG8g
dXNlIHRoZSBjdXJyZW50IHByZXNzdXJlCisgICAgICAgICAgICAvLyBldmVudCBhbmQgbGFzdFBy
ZXNzdXJlRXZlbnQgdG8gZGV0ZWN0IGlmIHRoaXMgaXMgTW91c2VGb3JjZURvd24sIE1vdXNlRm9y
Y2VVcCwgb3IganVzdCBNb3VzZUZvcmNlQ2hhbmdlZC4KKyAgICAgICAgICAgIGlmIChsYXN0UHJl
c3N1cmVFdmVudC5zdGFnZSA9PSAxICYmIGV2ZW50LnN0YWdlID09IDIpCisgICAgICAgICAgICAg
ICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZURvd247CisgICAgICAgICAgICBl
bHNlIGlmIChsYXN0UHJlc3N1cmVFdmVudC5zdGFnZSA9PSAyICYmIGV2ZW50LnN0YWdlID09IDEp
CisgICAgICAgICAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6TW91c2VGb3JjZVVwOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6
Ok1vdXNlRm9yY2VDaGFuZ2VkOworICAgICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShs
YXN0UHJlc3N1cmVFdmVudCk7CisjZW5kaWYKKworICAgICAgICBtX21vZGlmaWVycyA9IG1vZGlm
aWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBldmVudFRpbWVTdGFt
cFNpbmNlMTk3MChldmVudCk7CiAKICAgICAgICAgLy8gUGxhdGZvcm1Nb3VzZUV2ZW50Ci0gICAg
ICAgIG1fcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgID0gcG9pbnRGb3JFdmVudChl
dmVudCwgd2luZG93Vmlldyk7Ci0gICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gICAgICAgICAgICAg
ICAgICAgID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fYnV0dG9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gbW91c2VCdXR0b25Gb3JFdmVudChldmVudCk7Ci0g
ICAgICAgIG1fY2xpY2tDb3VudCAgICAgICAgICAgICAgICAgICAgICAgID0gY2xpY2tDb3VudEZv
ckV2ZW50KGV2ZW50KTsKLSAgICAgICAgCisgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2
ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2Jh
bFBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2J1dHRvbiA9IG1vdXNlQnV0dG9uRm9y
RXZlbnQoZXZlbnQpOworICAgICAgICBtX2NsaWNrQ291bnQgPSBjbGlja0NvdW50Rm9yRXZlbnQo
ZXZlbnQpOworCisgICAgICAgIG1fZm9yY2UgPSAwOworI2lmIGRlZmluZWQoX19MUDY0X18pICYm
IF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICAgICAgaW50IHN0
YWdlID0gW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlUHJlc3N1cmUgPyBldmVudC5zdGFnZSA6
IGxhc3RQcmVzc3VyZUV2ZW50LnN0YWdlOworICAgICAgICBkb3VibGUgcHJlc3N1cmUgPSBbZXZl
bnQgdHlwZV0gPT0gTlNFdmVudFR5cGVQcmVzc3VyZSA/IGV2ZW50LnByZXNzdXJlIDogbGFzdFBy
ZXNzdXJlRXZlbnQucHJlc3N1cmU7CisgICAgICAgIG1fZm9yY2UgPSBzdGFnZSA8IDEgPyBwcmVz
c3VyZSA6IHByZXNzdXJlICsgc3RhZ2UgLSAxOworI2VuZGlmCisKICAgICAgICAgLy8gTWFjIHNw
ZWNpZmljCi0gICAgICAgIG1fbW9kaWZpZXJGbGFncyAgICAgICAgICAgICAgICAgICAgID0gW2V2
ZW50IG1vZGlmaWVyRmxhZ3NdOwotICAgICAgICBtX2V2ZW50TnVtYmVyICAgICAgICAgICAgICAg
ICAgICAgICA9IFtldmVudCBldmVudE51bWJlcl07Ci0gICAgICAgIG1fbWVudVR5cGVGb3JFdmVu
dCAgICAgICAgICAgICAgICAgID0gdHlwZUZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9tb2Rp
ZmllckZsYWdzID0gW2V2ZW50IG1vZGlmaWVyRmxhZ3NdOworICAgICAgICBtX2V2ZW50TnVtYmVy
ID0gW2V2ZW50IGV2ZW50TnVtYmVyXTsKKyAgICAgICAgbV9tZW51VHlwZUZvckV2ZW50ID0gdHlw
ZUZvckV2ZW50KGV2ZW50KTsKICAgICB9CiB9OwogCi1QbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZv
cm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwg
TlNWaWV3ICp3aW5kb3dWaWV3KQorUGxhdGZvcm1Nb3VzZUV2ZW50IFBsYXRmb3JtRXZlbnRGYWN0
b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TRXZlbnQgKmxh
c3RQcmVzc3VyZUV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7Ci0gICAgcmV0dXJuIFBsYXRm
b3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAgIHJldHVybiBQbGF0
Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKGV2ZW50LCBsYXN0UHJlc3N1cmVFdmVudCwgd2luZG93Vmll
dyk7CiB9CiAKIApJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzODkxKQorKysgU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjAgQEAK
KzIwMTUtMDUtMDYgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIE5l
dyBmb3JjZS1yZWxhdGVkIERPTSBldmVudHMgc2hvdWxkIGZpcmUgaW4gV0sxIHZpZXdzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjMKKyAgICAg
ICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICByZGFyOi8vcHJvYmxlbS8yMDI4MTg4Ngor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3MgdGhl
IGxhc3RQcmVzc3VyZUV2ZW50IHRvIFdlYkNvcmUuCisgICAgICAgICogV2ViVmlldy9XZWJIVE1M
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmlnaHRNb3VzZVVwOl0pOgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBtZW51Rm9yRXZlbnQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGFj
Y2VwdHNGaXJzdE1vdXNlOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzaG91bGREZWxheVdp
bmRvd09yZGVyaW5nRm9yRXZlbnQ6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1vdXNlRG93
bjptb3VzZURvd246XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1vdXNlRHJhZ2dlZDpdKToK
KyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91c2VVcDptb3VzZVVwOl0pOgorCisgICAgICAgIE5l
dyBOU1Jlc3BuZGVyIG1ldGhvZCBmb3IgcHJlc3N1cmUgY2hhbmdlcy4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6XSk6CisKKyAgICAgICAgTmV3IEJPT0wg
X2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQgdHJhY2tzIHdoZXRoZXIgdGhlIEhpdFRlc3RSZXN1bHQg
cHJldmVudGVkIHRoZSAKKyAgICAgICAgZGVmYXVsdCBhY3Rpb24uIEdldCByaWQgb2Ygd2lsbEhh
bmRsZU1vdXNlRG93bjsgbm93IHRoYXQgdGhlIGdlc3R1cmUgcmVjb2duaXplciAKKyAgICAgICAg
c2V0cyBkZWxheXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHMgdG8gTk8sIHdlIGRvbuKAmXQgbmVl
ZCB0aGlzLgorICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5o
OgorICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAg
ICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfY2xlYXJJbW1lZGlhdGVBY3Rp
b25TdGF0ZV0pOgorCisgICAgICAgIFNldCBhbGwgb2YgdGhlIGltbWVkaWF0ZUFjdGlvblN0YWdl
cyBvbiBFdmVudEhhbmRsZXIuIFRoaXMgaXMgY3JpdGljYWwgdG8ga2VlcCAKKyAgICAgICAgbGlu
ayBuYXZpZ2F0aW9uIGhhcHBlbmluZyBhdCB0aGUgcmlnaHQgdGltZSBub3cgdGhhdCAKKyAgICAg
ICAgZGVsYXlzUHJpbWFyeU1vdXNlQnV0dG9uRXZlbnRzIGlzIHNldCB0byBOTy4KKyAgICAgICAg
KC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6XSk6
CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1tZWRpYXRlQWN0aW9u
UmVjb2duaXplckRpZFVwZGF0ZUFuaW1hdGlvbjpdKToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlciBpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkQ2FuY2VsQW5pbWF0
aW9uOl0pOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIGltbWVkaWF0
ZUFjdGlvblJlY29nbml6ZXJEaWRDb21wbGV0ZUFuaW1hdGlvbjpdKToKKworICAgICAgICBVc2Ug
YSBkdW1teSBhbmltYXRpb24gY29udHJvbGxlciBpZiB0aGUgY29udGVudCBwcmV2ZW50cyBkZWZh
dWx0LgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kZWZhdWx0QW5p
bWF0aW9uQ29udHJvbGxlcl0pOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyIF91cGRhdGVJbW1lZGlhdGVBY3Rpb25JdGVtXSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIgd2ViVmlldzp3aWxsSGFuZGxlTW91c2VEb3duOl0pOiBEZWxldGVk
LgorCisgICAgICAgIFNldCBkZWxheXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHMgdG8gTk8gc28g
dGhhdCB3ZSBnZXQgZXhpc3RpbmcgbW91c2UgZXZlbnRzIHdoZW4gCisgICAgICAgIHdlIGV4cGVj
dCB0by4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTpncm91cE5hbWU6XSk6CisKKyAgICAg
ICAgQ2FjaGUgdGhlIG1vc3QgcmVjZW50IHByZXNzdXJlIGV2ZW50IHNvIHRoYXQgd2UgY2FuIHNl
bmQgaXQgdG8gV2ViQ29yZSBmb3IgYWxsIG9mIAorICAgICAgICB0aGUgbW91c2UgZXZlbnRzLgor
ICAgICAgICAoLVtXZWJWaWV3IF9wcmVzc3VyZUV2ZW50XSk6CisgICAgICAgICgtW1dlYlZpZXcg
X3NldFByZXNzdXJlRXZlbnQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5oOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0RhdGEubW06CisgICAgICAgICgtW1dlYlZpZXdQcml2
YXRlIGRlYWxsb2NdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOgorCiAy
MDE1LTA0LTAyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW50cm9kdWNpbmcgdGhlIFBsYXRmb3JtIEFic3RyYWN0aW9uIExheWVyIChQQUwpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE4
Mzg5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE3NjgsNyArMTc2OCw3IEBAIC0gKHZvaWQpX3VwZGF0ZU1vdXNlb3Zlcldp
dGhFdmVudDooTlNFdmUKICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRd
IGNvbnRleHRdCiAgICAgICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3Vy
ZTowXTsKICAgICAgICAgaWYgKEZyYW1lKiBsYXN0SGl0Q29yZUZyYW1lID0gY29yZShbbGFzdEhp
dFZpZXcgX2ZyYW1lXSkpCi0gICAgICAgICAgICBsYXN0SGl0Q29yZUZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJl
RXZlbnRdKTsKICAgICB9CiAKICAgICBsYXN0SGl0VmlldyA9IHZpZXc7CkBAIC0xNzg3LDkgKzE3
ODcsOSBAQCAtICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlCiAgICAgICAg
ICAgICAgICAgfHwgW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJv
YXJkQmVoYXZpb3JBbHdheXNTZW5kTW91c2VFdmVudHNUb0FsbFdpbmRvd3NdCiAjZW5kaWYKICAg
ICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLm1vdXNlTW92ZWQoZXZlbnQpOworICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCkubW91c2VNb3ZlZChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVu
dF0pOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5wYXNzTW91c2VNb3ZlZEV2ZW50VG9TY3JvbGxiYXJzKGV2ZW50KTsKKyAgICAg
ICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnBhc3NNb3VzZU1vdmVkRXZlbnRU
b1Njcm9sbGJhcnMoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKICAg
ICAgICAgfQogCiAgICAgICAgIFt2aWV3IHJlbGVhc2VdOwpAQCAtMzMwMyw3ICszMzAzLDcgQEAg
LSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZlbnQgKilldmVudAogICAgIFtzdXBlciByaWdodE1v
dXNlVXA6ZXZlbnRdOwogCiAgICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pKQotICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlVXAoZXZlbnQp
OworICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlVXAoZXZlbnQsIFtbc2Vs
ZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0TWVudUl0
ZW1UYXJnZXQoTlNNZW51SXRlbSogbWVudUl0ZW0pCkBAIC0zMzQ4LDggKzMzNDgsOCBAQCAtIChO
U01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVuCiAgICAgLy8gTWF0Y2ggYmVoYXZp
b3Igb2Ygb3RoZXIgYnJvd3NlcnMgYnkgc2VuZGluZyBhIG1vdXNlZG93biBldmVudCBmb3Igcmln
aHQgY2xpY2tzLgogICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVTOwog
ICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLmNsZWFyQ29udGV4dE1lbnUoKTsKLSAg
ICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlRG93bihldmVudCk7Ci0gICAgQk9PTCBo
YW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnNlbmRDb250ZXh0TWVudUV2
ZW50KFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQs
IHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7CisgICAgY29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS5tb3VzZURvd24oZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJl
RXZlbnRdKTsKKyAgICBCT09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuc2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtTW91c2VFdmVudChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0sIHBh
Z2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7CiAgICAgX3ByaXZhdGUtPmhhbmRs
aW5nTW91c2VEb3duRXZlbnQgPSBOTzsKIAogICAgIGlmICghaGFuZGxlZEV2ZW50KQpAQCAtMzc3
Nyw3ICszNzc3LDcgQEAgLSAoQk9PTClhY2NlcHRzRmlyc3RNb3VzZTooTlNFdmVudCAqKWV2ZQog
ICAgICAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0pIHsK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoUGxhdGZvcm1FdmVudEZhY3Rv
cnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZv
cm1QYWdlQ2xpZW50KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1l
LT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3Vy
ZUV2ZW50XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKICNlbmRpZgog
ICAgICAgICAgICAgfSBlbHNlIGlmIChbaGl0SFRNTFZpZXcgX2lzU2Nyb2xsQmFyRXZlbnQ6ZXZl
bnRdKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CkBAIC0zODA0LDcgKzM4MDQsNyBA
QCAtIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVuCiAjaWYgRU5BQkxFKERS
QUdfU1VQUE9SVCkKICAgICAgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbaGl0
SFRNTFZpZXcgX2ZyYW1lXSkpIHsKICAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNv
cmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFBsYXRmb3JtRXZlbnRGYWN0b3J5Ojpj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFn
ZUNsaWVudCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0
ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVu
dF0sIHBhZ2UtPmNocm9tZSgpLnBsYXRmb3JtUGFnZUNsaWVudCgpKSk7CiAgICAgICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmls
XTsKQEAgLTM4NDEsNyArMzg0MSw2IEBAIC0gKHZvaWQpbW91c2VEb3duOihXZWJFdmVudCAqKWV2
ZW50CiAKICNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxMDAwCiAgICAgW1tbc2VsZiBfd2ViVmlld10gX2FjdGlvbk1lbnVDb250cm9sbGVy
XSB3ZWJWaWV3OltzZWxmIF93ZWJWaWV3XSB3aWxsSGFuZGxlTW91c2VEb3duOmV2ZW50XTsKLSAg
ICBbW1tzZWxmIF93ZWJWaWV3XSBfaW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlcl0gd2ViVmlldzpb
c2VsZiBfd2ViVmlld10gd2lsbEhhbmRsZU1vdXNlRG93bjpldmVudF07CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKElPUykKQEAgLTM4NzIsNyArMzg3MSw3IEBAIC0gKHZvaWQpbW91c2VEb3duOihX
ZWJFdmVudCAqKWV2ZW50CiAgICAgICAgICAgICAvLyBMZXQgV2ViQ29yZSBnZXQgYSBjaGFuY2Ug
dG8gZGVhbCB3aXRoIHRoZSBldmVudC4gVGhpcyB3aWxsIGNhbGwgYmFjayB0byB1cwogICAgICAg
ICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaWYgYXBwcm9wcmlhdGUuCiAg
ICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0g
ICAgICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZURvd24oZXZlbnQp
OworICAgICAgICAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3duKGV2
ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiAgICAgICAgIH0KICAgICB9
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCkBAIC0zOTI1LDcgKzM5MjQsNyBAQCAtICh2
b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50CiAgICAgaWYgKCFfcHJpdmF0ZS0+aWdu
b3JpbmdNb3VzZURyYWdnZWRFdmVudHMpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKSkKLSAgICAgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5tb3VzZURyYWdnZWQoZXZlbnQpOworICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgp
LmV2ZW50SGFuZGxlcigpLm1vdXNlRHJhZ2dlZChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJl
c3N1cmVFdmVudF0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MDY0LDggKzQwNjMsMTMgQEAg
LSAodm9pZCltb3VzZVVwOihXZWJFdmVudCAqKWV2ZW50CiAKICAgICBbc2VsZiBfc3RvcEF1dG9z
Y3JvbGxUaW1lcl07CiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
IHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICBpZiAo
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKKyNpZiBQTEFURk9STShJT1MpCiAgICAgICAg
ICAgICBwYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5tb3VzZVVwKGV2ZW50KTsKKyNl
bHNlCisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5tb3VzZVVw
KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CisjZW5kaWYKKyAgICAg
ICAgfQogICAgIH0KICNpZiAhUExBVEZPUk0oSU9TKQogICAgIFtzZWxmIF91cGRhdGVNb3VzZW92
ZXJXaXRoRmFrZUV2ZW50XTsKQEAgLTQwODEsNiArNDA4NSwyNSBAQCAtICh2b2lkKW1vdXNlTW92
ZWQ6KE5TRXZlbnQgKilldmVudAogfQogI2VuZGlmCiAKKy0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VX
aXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworI2lmIGRlZmluZWQoX19MUDY0X18pICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAgICBOU0V2ZW50ICpsYXN0
UHJlc3N1cmVFdmVudCA9IFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdOworICAgIGlm
IChldmVudCA9PSBsYXN0UHJlc3N1cmVFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGV2ZW50LnBoYXNlICE9IE5TRXZlbnRQaGFzZUNoYW5nZWQgJiYgZXZlbnQucGhhc2UgIT0gTlNF
dmVudFBoYXNlQmVnYW4gJiYgZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlRW5kZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5wcmVzc3VyZUNoYW5nZShldmVudCwgbGFzdFByZXNzdXJl
RXZlbnQpOworICAgIFtbc2VsZiBfd2ViVmlld10gX3NldFByZXNzdXJlRXZlbnQ6ZXZlbnRdOwor
I2VuZGlmCit9CisKICNpZiAhUExBVEZPUk0oSU9TKQogLy8gcmV0dXJuaW5nIFlFUyBmcm9tIHRo
aXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQgdGhhdCBpdCBpcyBvayBmb3IgdGhp
cyB2aWV3CiAvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZlbiB3aGVuICJ0YWIgdG8gYWxsIGNv
bnRyb2xzIiBpcyBub3Qgb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTgzODkx
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCBAaW50ZXJmYWNlIFdlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgCiAgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4g
X2N1cnJlbnRBY3Rpb25Db250ZXh0OwogICAgIEJPT0wgX2lzU2hvd2luZ1RleHRJbmRpY2F0b3I7
CiAgICAgQk9PTCBfaGFzQWN0aXZhdGVkQWN0aW9uQ29udGV4dDsKKyAgICBCT09MIF9jb250ZW50
UHJldmVudHNEZWZhdWx0OwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhXZWJWaWV3OihX
ZWJWaWV3ICopd2ViVmlldyByZWNvZ25pemVyOihOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsKIC0gKHZvaWQpd2ViVmlld0Nsb3Nl
ZDsKIAotLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyB3aWxsSGFuZGxlTW91c2VE
b3duOihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IGRpZEhhbmRsZVNjcm9sbFdoZWVsOihOU0V2ZW50ICopZXZlbnQ7CiAKIC0gKE5TSW1tZWRpYXRl
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyOwpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC02NCw2ICs2NCwxMyBAQCBTT0ZUX0xJTktfQ0xBU1MoUXVpY2tMb29rVUksIFFMUHJldmll
d01lCiBAaW50ZXJmYWNlIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgKCkgPFFMUHJldmll
d01lbnVJdGVtRGVsZWdhdGU+CiBAZW5kCiAKK0BpbnRlcmZhY2UgV2ViQW5pbWF0aW9uQ29udHJv
bGxlciA6IE5TT2JqZWN0IDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+IHsK
K30KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkFuaW1hdGlvbkNvbnRyb2xsZXIKK0BlbmQK
KwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyCkBAIC05NCwxMiArMTAxLDYgQEAgLSAodm9pZCl3ZWJWaWV3Q2xv
c2VkCiAgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gbmlsOwogfQogCi0tICh2b2lkKXdlYlZp
ZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHdpbGxIYW5kbGVNb3VzZURvd246KE5TRXZlbnQgKilldmVu
dAotewotICAgIFtzZWxmIF9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlXTsKLSAgICBbX3dlYlZp
ZXcgX2NsZWFyVGV4dEluZGljYXRvcldpdGhBbmltYXRpb246VGV4dEluZGljYXRvckRpc21pc3Nh
bEFuaW1hdGlvbjo6RmFkZU91dF07Ci19Ci0KIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcgZGlkSGFuZGxlU2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAogewogICAgIFtfY3Vy
cmVudFFMUHJldmlld01lbnVJdGVtIGNsb3NlXTsKQEAgLTEzNiw2ICsxMzcsNyBAQCAtICh2b2lk
KV9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlCiAgICAgX3R5cGUgPSBXZWJJbW1lZGlhdGVBY3Rp
b25Ob25lOwogICAgIF9jdXJyZW50QWN0aW9uQ29udGV4dCA9IG5pbDsKICAgICBfY3VycmVudFFM
UHJldmlld01lbnVJdGVtID0gbmlsOworICAgIF9jb250ZW50UHJldmVudHNEZWZhdWx0ID0gTk87
CiB9CiAKIC0gKHZvaWQpcGVyZm9ybUhpdFRlc3RBdFBvaW50OihOU1BvaW50KXZpZXdQb2ludApA
QCAtMTQ0LDYgKzE0NiwxMCBAQCAtICh2b2lkKXBlcmZvcm1IaXRUZXN0QXRQb2ludDooTlNQb2lu
dCl2CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBfaGl0VGVzdFJl
c3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50
UG9pbnQodmlld1BvaW50KSk7CisgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZXRJbW1l
ZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6UGVyZm9ybWVkSGl0VGVzdCk7
CisKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IF9oaXRUZXN0UmVzdWx0LmlubmVyRWxlbWVu
dCgpKQorICAgICAgICBfY29udGVudFByZXZlbnRzRGVmYXVsdCA9IGVsZW1lbnQtPmRpc3BhdGNo
TW91c2VGb3JjZVdpbGxCZWdpbigpOwogfQogCiAjcHJhZ21hIG1hcmsgTlNJbW1lZGlhdGVBY3Rp
b25HZXN0dXJlUmVjb2duaXplckRlbGVnYXRlCkBAIC0xODgsNiArMTk0LDEzIEBAIC0gKHZvaWQp
aW1tZWRpYXRlQWN0aW9uUmVjb2duaXplckRpZFVwZGEKICAgICBpZiAoaW1tZWRpYXRlQWN0aW9u
UmVjb2duaXplciAhPSBfaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcikKICAgICAgICAgcmV0dXJu
OwogCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW1tbW193ZWJWaWV3IF9zZWxlY3RlZE9y
TWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gX2ZyYW1lXSk7CisgICAgaWYgKCFj
b3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpBY3Rpb25VcGRh
dGVkKTsKKyAgICBpZiAoX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQpCisgICAgICAgIHJldHVybjsK
KwogICAgIFtfd2ViVmlldyBfc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzOltpbW1l
ZGlhdGVBY3Rpb25SZWNvZ25pemVyIGFuaW1hdGlvblByb2dyZXNzXV07CiB9CiAKQEAgLTE5Niw2
ICsyMDksMTAgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkQ2FuYwogICAg
IGlmIChpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyICE9IF9pbW1lZGlhdGVBY3Rpb25SZWNvZ25p
emVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbW1tb
X3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBf
ZnJhbWVdKTsKKyAgICBpZiAoY29yZUZyYW1lKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpBY3Rp
b25DYW5jZWxsZWQpOworCiAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9u
UHJvZ3Jlc3M6MF07CiAgICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGVdOwogICAg
IFtfd2ViVmlldyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9y
RGlzbWlzc2FsQW5pbWF0aW9uOjpOb25lXTsKQEAgLTIwNyw2ICsyMjQsMTEgQEAgLSAodm9pZClp
bW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkQ29tcAogICAgIGlmIChpbW1lZGlhdGVBY3Rpb25S
ZWNvZ25pemVyICE9IF9pbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyKQogICAgICAgICByZXR1cm47
CiAKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbW1tbX3dlYlZpZXcgX3NlbGVjdGVkT3JN
YWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCku
c2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlvbkNvbXBs
ZXRlZCk7CisKICAgICBbX3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVz
czoxXTsKICAgICBbX3dlYlZpZXcgX3NldE1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uOk5PXTsK
IH0KQEAgLTIxNSw2ICsyMzcsMTEgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVy
RGlkQ29tcAogCiAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilf
ZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXIKIHsKKyAgICBpZiAoX2NvbnRlbnRQcmV2ZW50c0Rl
ZmF1bHQpIHsKKyAgICAgICAgUmV0YWluUHRyPFdlYkFuaW1hdGlvbkNvbnRyb2xsZXI+IGR1bW15
Q29udHJvbGxlciA9IFtbV2ViQW5pbWF0aW9uQ29udHJvbGxlciBhbGxvY10gaW5pdF07CisgICAg
ICAgIHJldHVybiBkdW1teUNvbnRyb2xsZXIuZ2V0KCk7CisgICAgfQorCiAgICAgTlNVUkwgKnVy
bCA9IF9oaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIE5TU3RyaW5nICphYnNv
bHV0ZVVSTFN0cmluZyA9IFt1cmwgYWJzb2x1dGVTdHJpbmddOwogICAgIGlmICh1cmwgJiYgX2hp
dFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpKSB7CkBAIC0yNjUsNiArMjkyLDExIEBAIC0gKHZvaWQp
X3VwZGF0ZUltbWVkaWF0ZUFjdGlvbkl0ZW0KIAogICAgIGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+IGRlZmF1bHRBbmltYXRpb25Db250cm9sbGVyID0gW3NlbGYgX2Rl
ZmF1bHRBbmltYXRpb25Db250cm9sbGVyXTsKIAorICAgIGlmIChfY29udGVudFByZXZlbnRzRGVm
YXVsdCkgeworICAgICAgICBbX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgc2V0QW5pbWF0aW9u
Q29udHJvbGxlcjpkZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcl07CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICAvLyBBbGxvdyBjbGllbnRzIHRoZSBvcHBvcnR1bml0eSB0byBvdmVycmlk
ZSB0aGUgZGVmYXVsdCBpbW1lZGlhdGUgYWN0aW9uLgogICAgIGlkIGN1c3RvbUNsaWVudEFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBuaWw7CiAgICAgaWYgKFtbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzppbW1lZGlhdGVBY3Rpb25BbmltYXRp
b25Db250cm9sbGVyRm9ySGl0VGVzdFJlc3VsdDp3aXRoVHlwZTopXSkgewpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MTAsNiArOTEw
LDcgQEAgLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYQogICAgICAgICBS
ZXRhaW5QdHI8TlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplcj4gcmVjb2duaXplciA9
IGFkb3B0TlMoWyhOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopW2dlc3R1cmVD
bGFzcyBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6bmlsIGFjdGlvbjpOVUxMXSk7CiAgICAgICAgIF9w
cml2YXRlLT5pbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyID0gW1tXZWJJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6c2VsZiByZWNvZ25pemVyOnJlY29nbml6
ZXIuZ2V0KCldOwogICAgICAgICBbcmVjb2duaXplciBzZXREZWxlZ2F0ZTpfcHJpdmF0ZS0+aW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlcl07CisgICAgICAgIFtyZWNvZ25pemVyIHNldERlbGF5c1By
aW1hcnlNb3VzZUJ1dHRvbkV2ZW50czpOT107CiAgICAgfQogI2VuZGlmCiAKQEAgLTg2MDEsNiAr
ODYwMiwyMCBAQCAtIChpZClfYW5pbWF0aW9uQ29udHJvbGxlckZvckRpY3Rpb25hcnlMCiB9CiAj
ZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKIAorLSAo
TlNFdmVudCAqKV9wcmVzc3VyZUV2ZW50Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5wcmVzc3Vy
ZUV2ZW50OworfQorCistICh2b2lkKV9zZXRQcmVzc3VyZUV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPnByZXNzdXJlRXZlbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFtfcHJpdmF0ZS0+cHJlc3N1cmVFdmVudCByZWxlYXNlXTsKKyAgICBfcHJp
dmF0ZS0+cHJlc3N1cmVFdmVudCA9IFtldmVudCByZXRhaW5dOworfQorCiAtICh2b2lkKV9zZXRU
ZXh0SW5kaWNhdG9yOihUZXh0SW5kaWNhdG9yJil0ZXh0SW5kaWNhdG9yCiB7CiAgICAgW3NlbGYg
X3NldFRleHRJbmRpY2F0b3I6dGV4dEluZGljYXRvciB3aXRoTGlmZXRpbWU6VGV4dEluZGljYXRv
ckxpZmV0aW1lOjpQZXJtYW5lbnRdOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlld0RhdGEuaAkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgQGludGVy
ZmFjZSBXZWJWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6VGV4dEluZGljYXRvcldpbmRvdz4gdGV4dEluZGljYXRvcldpbmRvdzsKICAgICBCT09M
IGhhc0luaXRpYWxpemVkTG9va3VwT2JzZXJ2ZXI7CiAgICAgUmV0YWluUHRyPFdlYldpbmRvd1Zp
c2liaWxpdHlPYnNlcnZlcj4gd2luZG93VmlzaWJpbGl0eU9ic2VydmVyOworICAgIE5TRXZlbnQg
KnByZXNzdXJlRXZlbnQ7CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAgICAgQk9PTCBzaG91
bGRNYWludGFpbkluYWN0aXZlU2VsZWN0aW9uOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3RGF0YS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLm1tCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMTAgKzE4Nywx
MyBAQCAtICh2b2lkKWRlYWxsb2MKICNlbmRpZgogICAgIFtpbnNwZWN0b3IgcmVsZWFzZV07CiAg
ICAgW2N1cnJlbnROb2RlSGlnaGxpZ2h0IHJlbGVhc2VdOwotI2lmIFBMQVRGT1JNKE1BQykgJiYg
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKKyNpZiBQTEFURk9STShN
QUMpCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKICAgICBb
YWN0aW9uTWVudUNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAgW2ltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIgcmVsZWFzZV07CiAjZW5kaWYKKyAgICBbcHJlc3N1cmVFdmVudCByZWxlYXNlXTsKKyNl
bmRpZgogICAgIFtob3N0V2luZG93IHJlbGVhc2VdOwogICAgIFtwb2xpY3lEZWxlZ2F0ZUZvcndh
cmRlciByZWxlYXNlXTsKICAgICBbVUlEZWxlZ2F0ZUZvcndhcmRlciByZWxlYXNlXTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24g
MTgzODkxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw4IEBAIEBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
Vmlld090aGVySW50ZXJuYWwKIC0gKFdlYkFjdGlvbk1lbnVDb250cm9sbGVyICopX2FjdGlvbk1l
bnVDb250cm9sbGVyOwogLSAoV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAqKV9pbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyOwogI2VuZGlmCistIChOU0V2ZW50ICopX3ByZXNzdXJlRXZlbnQ7
CistICh2b2lkKV9zZXRQcmVzc3VyZUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpICYmICFQTEFURk9STShJT1MpICYm
IGRlZmluZWQoX19jcGx1c3BsdXMpCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM4OTEpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wNS0wNiAgQmV0aCBEYWtpbiAg
PGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmV3IGZvcmNlLXJlbGF0ZWQgRE9NIGV2ZW50
cyBzaG91bGQgZmlyZSBpbiBXSzEgdmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NDY2MworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMjgxODg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtTW91c2VFdmVudCgpIHRha2VzIHRoZSBsYXN0IHByZXNzdXJlIGV2ZW50IAorICAgICAgICBu
b3cuIEp1c3Qgc2VuZCBuaWwuIAorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01l
bnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6YnVpbGRB
bmRQZXJmb3JtVGVzdCk6CisKIDIwMTUtMDUtMDYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgRG8gbm90IGxpbmsgdG9vbHMgdG8gV2ViS2l0Mi5mcmFtZXdv
cmsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01lbnVUeXBlc0Zvck1vdXNl
RXZlbnRzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01l
bnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tCShyZXZpc2lvbiAxODM4OTEpCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL21hYy9NZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBzdGF0aWMgdm9pZCBidWlsZEFuZFBlcmZvcm1UZXN0KE5T
RXZlbnRUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrQ291bnQ6
MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlOjBdOwog
ICAgIAotICAgIGF1dG8gcG1lID0gV2ViQ29yZTo6UGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0
ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgd2ViVmlldy5nZXQoKSk7CisgICAgYXV0byBwbWUg
PSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50
KGV2ZW50LCBuaWwsIHdlYlZpZXcuZ2V0KCkpOwogICAgIAogICAgIEVYUEVDVF9FUShleHBlY3Rl
ZEJ1dHRvbiwgcG1lLmJ1dHRvbigpKTsKICAgICBFWFBFQ1RfVFJVRSghbW9kaWZpZXJGbGFncyB8
fCBwbWUubW9kaWZpZXJGbGFncygpICYgbW9kaWZpZXJGbGFncyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252535</attachid>
            <date>2015-05-06 16:32:22 -0700</date>
            <delta_ts>2015-05-06 17:03:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>35037</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTA2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9yY2UtcmVsYXRlZCBET00g
ZXZlbnRzIHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgb2YgdGhlIFdLMSBtb3VzZSBldmVudHMg
bmVlZCB0byB0YWtlIHRoZSBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKiBw
YWdlL0V2ZW50SGFuZGxlci5oOgorCisgICAgICAgIE1ha2UgY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQgYSBwYXJ0IG9mIEN1cnJlbnRFdmVudFNjb3BlLiBUaGlzIGlzIG5lZWRlZCB0byAKKyAg
ICAgICAgaGF2ZSBhY2N1cmF0ZSBwcmVzc3VyZSBpbmZvcm1hdGlvbiBmb3IgYWxsIG9mIHRoZSBt
b3VzZSBldmVudHMgaW4gc3ViZnJhbWVzLgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xv
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvcnJlc3BvbmRpbmdQcmVzc3Vy
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRFdmVudFNjb3BlOjpDdXJyZW50RXZl
bnRTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50RXZlbnRTY29wZTo6fkN1cnJlbnRF
dmVudFNjb3BlKToKKworICAgICAgICBUaGVzZSBldmVudHMgZG9u4oCZdCBoYXZlIGFuIGFzc29j
aWF0ZWQgcHJlc3N1cmUsIHNvIHNlbmQgbmlsIGZvciB0aGUgCisgICAgICAgIGNvcnJlc3BvbmRp
bmdQcmVzc3VyZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorCisgICAg
ICAgIFBpcGUgdGhyb3VnaCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6bW91c2VEcmFnZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
bW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgor
CisgICAgICAgIE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgcHJlc3N1cmUgY2hhbmdlIGV2ZW50cy4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cHJlc3N1cmVDaGFuZ2UpOgorCisgICAg
ICAgIFBpcGUgdGhyb3VnaCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQp
OgorCisgICAgICAgIFRha2UgdGhlIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50IGluIG9yZGVy
IHRvIGJ1aWxkIGEgUGxhdGZvcm1Nb3VzZUV2ZW50IHdpdGggCisgICAgICAgIHRoZSBjb3JyZWN0
IHByZXNzdXJlIGluZm9ybWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cG9pbnRGb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb3VzZUJ1
dHRvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxk
ZXI6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudCk6CisKIDIwMTUtMDUtMDYg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIGNvcGllcyBp
biBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkgYW5kIGlubGluZSBpdC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEwICsyNjYs
MTEgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18p
CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNlRG93bihO
U0V2ZW50ICopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VEcmFnZ2VkKE5TRXZlbnQg
Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBtb3VzZU1vdmVkKE5TRXZlbnQgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBtb3VzZURvd24oTlNFdmVudCAqLCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1
cmVFdmVudCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAq
LCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKiwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICosIE5T
RXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHByZXNzdXJlQ2hhbmdlKE5TRXZlbnQgKiwgTlNFdmVudCogY29ycmVzcG9uZGluZ1ByZXNz
dXJlRXZlbnQpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHdoZWVsRXZlbnQoTlNFdmVudCAqKTsKICNlbHNlCkBA
IC0yODUsNyArMjg2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9TKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhO
U0V2ZW50ICopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRv
U2Nyb2xsYmFycyhOU0V2ZW50ICosIE5TRXZlbnQqIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRy
YWNraW5nKE5TRXZlbnQgKmluaXRpYXRpbmdFdmVudCk7CiAjZW5kaWYKQEAgLTI5NCw2ICsyOTUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoaW50IG51bSkg
eyBtX2FjdGl2YXRpb25FdmVudE51bWJlciA9IG51bTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIE5TRXZlbnQgKmN1cnJlbnROU0V2ZW50KCk7CisgICAgc3RhdGljIE5TRXZlbnQgKmNv
cnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KCk7CiAjZWxzZQogICAgIHN0YXRpYyBXZWJFdmVudCAq
Y3VycmVudEV2ZW50KCk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDE4Mzg5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtODEsMTAgKzgxLDIxIEBAIE5TRXZlbnQgKkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZl
bnQoKQogICAgIHJldHVybiBjdXJyZW50TlNFdmVudFNsb3QoKS5nZXQoKTsKIH0KIAorc3RhdGlj
IFJldGFpblB0cjxOU0V2ZW50PiYgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnRTbG90KCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TRXZlbnQ+PiBldmVudDsKKyAg
ICByZXR1cm4gZXZlbnQ7Cit9CisKK05TRXZlbnQgKkV2ZW50SGFuZGxlcjo6Y29ycmVzcG9uZGlu
Z1ByZXNzdXJlRXZlbnQoKQoreworICAgIHJldHVybiBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dFNsb3QoKS5nZXQoKTsKK30KKwogY2xhc3MgQ3VycmVudEV2ZW50U2NvcGUgewogICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDdXJyZW50RXZlbnRTY29wZSk7CiBwdWJsaWM6Ci0gICAgQ3VycmVu
dEV2ZW50U2NvcGUoTlNFdmVudCAqKTsKKyAgICBDdXJyZW50RXZlbnRTY29wZShOU0V2ZW50ICos
IE5TRXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKICAgICB+Q3VycmVudEV2ZW50
U2NvcGUoKTsKIAogcHJpdmF0ZToKQEAgLTkyLDIxICsxMDMsMjUgQEAgcHJpdmF0ZToKICNpZm5k
ZWYgTkRFQlVHCiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fZXZlbnQ7CiAjZW5kaWYKKyAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gbV9jb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudDsKIH07CiAKLWlu
bGluZSBDdXJyZW50RXZlbnRTY29wZTo6Q3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqZXZlbnQp
CitpbmxpbmUgQ3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKE5TRXZlbnQgKmV2
ZW50LCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKICAgICA6IG1fc2F2ZWRD
dXJyZW50RXZlbnQoY3VycmVudE5TRXZlbnRTbG90KCkpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9ldmVudChldmVudCkKICNlbmRpZgorICAgICwgbV9jb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dChjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKIHsKICAgICBjdXJyZW50TlNFdmVudFNsb3Qo
KSA9IGV2ZW50OworICAgIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xvdCgpID0gY29ycmVz
cG9uZGluZ1ByZXNzdXJlRXZlbnQ7CiB9CiAKIGlubGluZSBDdXJyZW50RXZlbnRTY29wZTo6fkN1
cnJlbnRFdmVudFNjb3BlKCkKIHsKICAgICBBU1NFUlQoY3VycmVudE5TRXZlbnRTbG90KCkgPT0g
bV9ldmVudCk7CiAgICAgY3VycmVudE5TRXZlbnRTbG90KCkgPSBtX3NhdmVkQ3VycmVudEV2ZW50
OworICAgIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xvdCgpID0gbmlsOwogfQogCiBib29s
IEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKQEAgLTExNSw3ICsxMzAs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICplCiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDdXJyZW50RXZlbnRTY29wZSBzY29w
ZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIG5pbCk7CiAgICAg
cmV0dXJuIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtV2hlZWxFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkp
KTsKIH0KIApAQCAtMTI1LDcgKzE0MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChO
U0V2ZW50ICpldmUKIAogICAgIEFTU0VSVChbZXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duIHx8IFtl
dmVudCB0eXBlXSA9PSBOU0tleVVwKTsKIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2
ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbmlsKTsKICAgICByZXR1
cm4ga2V5RXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRF
dmVudChldmVudCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTQ2OSw3
ICs0ODQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdlCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQg
KmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCwgTlNF
dmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2ID0g
bV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2IHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KQpA
QCAtNDc5LDE0ICs0OTQsMTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50
ICpldgogICAgIAogICAgIG1fbW91c2VEb3duVmlldyA9IG5pbDsKICAgICAKLSAgICBDdXJyZW50
RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZl
bnQsIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKIAogICAgIGhhbmRsZU1vdXNlUHJlc3NF
dmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRHJhZ2dlZChOU0V2ZW50
ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAqZXZlbnQs
IE5TRXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KQogewogICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUudmlldygpOwogICAgIGlmICghdiB8fCBtX3NlbmRpbmdFdmVudFRvU3Vidmll
dykKQEAgLTQ5NCwxMyArNTA5LDEzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQo
TlNFdmVudCAKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIEN1cnJl
bnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShl
dmVudCwgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpOwogICAgIGhhbmRsZU1vdXNlTW92ZUV2
ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VVcChOU0V2ZW50ICpldmVu
dCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpj
b3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKIHsKICAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1l
LnZpZXcoKTsKICAgICBpZiAoIXYgfHwgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpCkBAIC01MDgs
NyArNTIzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlVXAoTlNFdmVudCAqZXZlbgogCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgQ3VycmVudEV2ZW50U2NvcGUg
c2NvcGUoZXZlbnQpOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBjb3JyZXNw
b25kaW5nUHJlc3N1cmVFdmVudCk7CiAKICAgICAvLyBPdXIgYmVoYXZpb3IgaGVyZSBpcyBhIGxp
dHRsZSBkaWZmZXJlbnQgdGhhdCBRdC4gUXQgYWx3YXlzIHNlbmRzCiAgICAgLy8gYSBtb3VzZSBy
ZWxlYXNlIGV2ZW50LCBldmVuIGZvciBhIGRvdWJsZSBjbGljay4gVG8gY29ycmVjdCBwcm9ibGVt
cwpAQCAtNTk1LDcgKzYxMCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kRmFrZUV2ZW50c0Fm
dGVyV2kKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFu
ZGxlcjo6bW91c2VNb3ZlZChOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3Vz
ZU1vdmVkKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50KiBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dCkKIHsKICAgICAvLyBSZWplY3QgYSBtb3VzZSBtb3ZlZCBpZiB0aGUgYnV0dG9uIGlzIGRvd24g
LSBzY3Jld3MgdXAgdHJhY2tpbmcgZHVyaW5nIGF1dG9zY3JvbGwKICAgICAvLyBUaGVzZSBoYXBw
ZW4gYmVjYXVzZSBXZWJLaXQgc29tZXRpbWVzIGhhcyB0byBmYWtlIHVwIG1vdmVkIGV2ZW50cy4K
QEAgLTYwMywxMiArNjE4LDIzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZl
bnQgKmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRT
Y29wZSBzY29wZShldmVudCwgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpOwogICAgIG1vdXNl
TW92ZWQoY3VycmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRv
U2Nyb2xsYmFycyhOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwcmVzc3VyZUNo
YW5nZShOU0V2ZW50ICpldmVudCwgTlNFdmVudCogY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQp
Cit7CisgICAgaWYgKCFtX2ZyYW1lLnZpZXcoKSB8fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dCk7CisgICAgaGFuZGxlTW91c2VGb3JjZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQo
KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoTlNFdmVudCAqZXZlbnQsIE5TRXZl
bnQqIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KQogewogICAgIC8vIFJlamVjdCBhIG1vdXNl
IG1vdmVkIGlmIHRoZSBidXR0b24gaXMgZG93biAtIHNjcmV3cyB1cCB0cmFja2luZyBkdXJpbmcg
YXV0b3Njcm9sbAogICAgIC8vIFRoZXNlIGhhcHBlbiBiZWNhdXNlIFdlYktpdCBzb21ldGltZXMg
aGFzIHRvIGZha2UgdXAgbW92ZWQgZXZlbnRzLgpAQCAtNjE2LDcgKzY0Miw3IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlZEV2ZW50VG8KICAgICAgICAgcmV0dXJuOwogCiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3Bl
KGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgY29ycmVzcG9uZGlu
Z1ByZXNzdXJlRXZlbnQpOwogICAgIHBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoY3Vy
cmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQpAQCAtNjc0LDcgKzcwMCw3IEBAIFBsYXRmb3JtTW91c2VFdmVudCBFdmVudEhhbmRsZXI6
OmN1cnJlbnQKICAgICBOU1ZpZXcgKndpbmRvd1ZpZXcgPSBuaWw7CiAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKICAgICAgICAgd2luZG93VmlldyA9IHBhZ2UtPmNocm9tZSgp
LnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGN1cnJlbnROU0V2ZW50KCksIHdpbmRvd1ZpZXcpOwor
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50
KGN1cnJlbnROU0V2ZW50KCksIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KCksIHdpbmRvd1Zp
ZXcpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAkocmV2aXNpb24g
MTgzODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0
b3J5TWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBQbGF0Zm9ybUV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVQbGF0Zm9ybU1vdXNlRXZl
bnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQg
KiwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93Vmll
dyk7CiAgICAgc3RhdGljIFBsYXRmb3JtV2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZl
bnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgY3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KE5T
RXZlbnQgKik7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
RXZlbnRGYWN0b3J5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5T
UG9pbnQmIHdpbmQKIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisjaWYgZGVmaW5lZChfX0xQ
NjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAg
ICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKICAgICAgICAgY2FzZSBOU0xlZnRN
b3VzZURvd246CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgogICAgICAgICBjYXNl
IE5TTGVmdE1vdXNlVXA6CkBAIC03MSw2ICs3NCw5IEBAIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQ
b2ludEZvckV2ZW50KE5TRXYKIHN0YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0p
IHsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gMTAxMDAzCisgICAgICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgog
ICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURy
YWdnZWQ6CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKQEAgLTk5LDYgKzEwNSw5IEBAIHN0
YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmUKIHN0YXRpYyBNb3VzZUJ1dHRv
biBtb3VzZUJ1dHRvbkZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2
ZW50IHR5cGVdKSB7CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6
CisjZW5kaWYKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246CiAgICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VVcDoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CkBAIC00MTEsMjkg
KzQyMCw1NCBAQCBzdGF0aWMgaW50IHR5cGVGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICAgICAK
IGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2
ZW50IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2
ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihO
U0V2ZW50ICpldmVudCwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKICAgICB7CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAg
bV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb3VzZUV2ZW50VHlwZUZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb2RpZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAg
PSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAg
ICAgICAgICAgICAgICAgID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAg
ICBtX3R5cGUgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50KTsKKworICAgICAgICBCT09M
IGV2ZW50SXNQcmVzc3VyZUV2ZW50ID0gTk87CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBldmVudElzUHJl
c3N1cmVFdmVudCA9IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZVByZXNzdXJlOworICAgICAg
ICBpZiAoZXZlbnRJc1ByZXNzdXJlRXZlbnQpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIEFwcEtp
dCBkb2Vzbid0IHNlbmQgbW91c2UgZXZlbnRzIGZvciBmb3JjZSBkb3duIG9yIGZvcmNlIHVwLCB3
ZSBoYXZlIHRvIHVzZSB0aGUgY3VycmVudCBwcmVzc3VyZQorICAgICAgICAgICAgLy8gZXZlbnQg
YW5kIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50IHRvIGRldGVjdCBpZiB0aGlzIGlzIE1vdXNl
Rm9yY2VEb3duLCBNb3VzZUZvcmNlVXAsIG9yIGp1c3QgTW91c2VGb3JjZUNoYW5nZWQuCisgICAg
ICAgICAgICBpZiAoY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQuc3RhZ2UgPT0gMSAmJiBldmVu
dC5zdGFnZSA9PSAyKQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1v
dXNlRm9yY2VEb3duOworICAgICAgICAgICAgZWxzZSBpZiAoY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQuc3RhZ2UgPT0gMiAmJiBldmVudC5zdGFnZSA9PSAxKQorICAgICAgICAgICAgICAgIG1f
dHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpNb3VzZUZvcmNlQ2hhbmdlZDsK
KyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvcnJlc3BvbmRpbmdQcmVz
c3VyZUV2ZW50KTsKKyNlbmRpZgorCisgICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9y
RXZlbnQoZXZlbnQpOworICAgICAgICBtX3RpbWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2Ux
OTcwKGV2ZW50KTsKIAogICAgICAgICAvLyBQbGF0Zm9ybU1vdXNlRXZlbnQKLSAgICAgICAgbV9w
b3NpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBwb2ludEZvckV2ZW50KGV2ZW50LCB3
aW5kb3dWaWV3KTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiAgICAgICAgICAgICAgICAgICAg
PSBnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9idXR0b24gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSBtb3VzZUJ1dHRvbkZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAg
bV9jbGlja0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAgPSBjbGlja0NvdW50Rm9yRXZlbnQo
ZXZlbnQpOwotICAgICAgICAKKyAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZl
bnQsIHdpbmRvd1ZpZXcpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9pbnRG
b3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0gbW91c2VCdXR0b25Gb3JFdmVudChl
dmVudCk7CisgICAgICAgIG1fY2xpY2tDb3VudCA9IGNsaWNrQ291bnRGb3JFdmVudChldmVudCk7
CisKKyAgICAgICAgbV9mb3JjZSA9IDA7CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNf
T1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBpbnQgc3RhZ2UgPSBl
dmVudElzUHJlc3N1cmVFdmVudCA/IGV2ZW50LnN0YWdlIDogY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQuc3RhZ2U7CisgICAgICAgIGRvdWJsZSBwcmVzc3VyZSA9IGV2ZW50SXNQcmVzc3VyZUV2
ZW50ID8gZXZlbnQucHJlc3N1cmUgOiBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC5wcmVzc3Vy
ZTsKKyAgICAgICAgbV9mb3JjZSA9IHN0YWdlIDwgMSA/IHByZXNzdXJlIDogcHJlc3N1cmUgKyBz
dGFnZSAtIDE7CisjZW5kaWYKKwogICAgICAgICAvLyBNYWMgc3BlY2lmaWMKLSAgICAgICAgbV9t
b2RpZmllckZsYWdzICAgICAgICAgICAgICAgICAgICAgPSBbZXZlbnQgbW9kaWZpZXJGbGFnc107
Ci0gICAgICAgIG1fZXZlbnROdW1iZXIgICAgICAgICAgICAgICAgICAgICAgID0gW2V2ZW50IGV2
ZW50TnVtYmVyXTsKLSAgICAgICAgbV9tZW51VHlwZUZvckV2ZW50ICAgICAgICAgICAgICAgICAg
PSB0eXBlRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX21vZGlmaWVyRmxhZ3MgPSBbZXZlbnQg
bW9kaWZpZXJGbGFnc107CisgICAgICAgIG1fZXZlbnROdW1iZXIgPSBbZXZlbnQgZXZlbnROdW1i
ZXJdOworICAgICAgICBtX21lbnVUeXBlRm9yRXZlbnQgPSB0eXBlRm9yRXZlbnQoZXZlbnQpOwog
ICAgIH0KIH07CiAKLVBsYXRmb3JtTW91c2VFdmVudCBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3Jl
YXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcp
CitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3Jt
TW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2
ZW50QnVpbGRlcihldmVudCwgd2luZG93Vmlldyk7CisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VF
dmVudEJ1aWxkZXIoZXZlbnQsIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50LCB3aW5kb3dWaWV3
KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2MCBAQAor
MjAxNS0wNS0wNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTmV3
IGZvcmNlLXJlbGF0ZWQgRE9NIGV2ZW50cyBzaG91bGQgZmlyZSBpbiBXSzEgdmlld3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2MworICAgICAg
ICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzIwMjgxODg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzcyB0aGUg
bGFzdFByZXNzdXJlRXZlbnQgdG8gV2ViQ29yZS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50
Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyByaWdodE1vdXNlVXA6XSk6CisgICAgICAgICgt
W1dlYkhUTUxWaWV3IG1lbnVGb3JFdmVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYWNj
ZXB0c0ZpcnN0TW91c2U6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNob3VsZERlbGF5V2lu
ZG93T3JkZXJpbmdGb3JFdmVudDpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91c2VEb3du
Om1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbW91c2VEcmFnZ2VkOl0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZVVwOm1vdXNlVXA6XSk6CisKKyAgICAgICAgTmV3
IE5TUmVzcG5kZXIgbWV0aG9kIGZvciBwcmVzc3VyZSBjaGFuZ2VzLgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudDpdKToKKworICAgICAgICBOZXcgQk9PTCBf
Y29udGVudFByZXZlbnRzRGVmYXVsdCB0cmFja3Mgd2hldGhlciB0aGUgSGl0VGVzdFJlc3VsdCBw
cmV2ZW50ZWQgdGhlIAorICAgICAgICBkZWZhdWx0IGFjdGlvbi4gR2V0IHJpZCBvZiB3aWxsSGFu
ZGxlTW91c2VEb3duOyBub3cgdGhhdCB0aGUgZ2VzdHVyZSByZWNvZ25pemVyIAorICAgICAgICBz
ZXRzIGRlbGF5c1ByaW1hcnlNb3VzZUJ1dHRvbkV2ZW50cyB0byBOTywgd2UgZG9u4oCZdCBuZWVk
IHRoaXMuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmg6
CisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAg
ICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9jbGVhckltbWVkaWF0ZUFjdGlv
blN0YXRlXSk6CisKKyAgICAgICAgU2V0IGFsbCBvZiB0aGUgaW1tZWRpYXRlQWN0aW9uU3RhZ2Vz
IG9uIEV2ZW50SGFuZGxlci4gVGhpcyBpcyBjcml0aWNhbCB0byBrZWVwIAorICAgICAgICBsaW5r
IG5hdmlnYXRpb24gaGFwcGVuaW5nIGF0IHRoZSByaWdodCB0aW1lIG5vdyB0aGF0IAorICAgICAg
ICBkZWxheXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHMgaXMgc2V0IHRvIE5PLgorICAgICAgICAo
LVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIHBlcmZvcm1IaXRUZXN0QXRQb2ludDpdKToK
KyAgICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBpbW1lZGlhdGVBY3Rpb25S
ZWNvZ25pemVyRGlkVXBkYXRlQW5pbWF0aW9uOl0pOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDYW5jZWxBbmltYXRp
b246XSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgaW1tZWRpYXRl
QWN0aW9uUmVjb2duaXplckRpZENvbXBsZXRlQW5pbWF0aW9uOl0pOgorCisgICAgICAgIFVzZSBh
IGR1bW15IGFuaW1hdGlvbiBjb250cm9sbGVyIGlmIHRoZSBjb250ZW50IHByZXZlbnRzIGRlZmF1
bHQuCisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RlZmF1bHRBbmlt
YXRpb25Db250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIgX3VwZGF0ZUltbWVkaWF0ZUFjdGlvbkl0ZW1dKToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlciB3ZWJWaWV3OndpbGxIYW5kbGVNb3VzZURvd246XSk6IERlbGV0ZWQu
CisKKyAgICAgICAgU2V0IGRlbGF5c1ByaW1hcnlNb3VzZUJ1dHRvbkV2ZW50cyB0byBOTyBzbyB0
aGF0IHdlIGdldCBleGlzdGluZyBtb3VzZSBldmVudHMgd2hlbiAKKyAgICAgICAgd2UgZXhwZWN0
IHRvLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBf
Y29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTpdKToKKworICAgICAg
ICBDYWNoZSB0aGUgbW9zdCByZWNlbnQgcHJlc3N1cmUgZXZlbnQgc28gdGhhdCB3ZSBjYW4gc2Vu
ZCBpdCB0byBXZWJDb3JlIGZvciBhbGwgb2YgCisgICAgICAgIHRoZSBtb3VzZSBldmVudHMuCisg
ICAgICAgICgtW1dlYlZpZXcgX3ByZXNzdXJlRXZlbnRdKToKKyAgICAgICAgKC1bV2ViVmlldyBf
c2V0UHJlc3N1cmVFdmVudDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6Cisg
ICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKyAgICAgICAgKC1bV2ViVmlld1ByaXZh
dGUgZGVhbGxvY10pOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlld0ludGVybmFsLmg6CisKIDIw
MTUtMDQtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAg
ICAgICBJbnRyb2R1Y2luZyB0aGUgUGxhdGZvcm0gQWJzdHJhY3Rpb24gTGF5ZXIgKFBBTCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gMTgz
ODkxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2OCw3ICsxNzY4LDcgQEAgLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0
aEV2ZW50OihOU0V2ZQogICAgICAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0g
Y29udGV4dF0KICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJl
OjBdOwogICAgICAgICBpZiAoRnJhbWUqIGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFtsYXN0SGl0
VmlldyBfZnJhbWVdKSkKLSAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLm1vdXNlTW92ZWQoZXZlbnQpOworICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCkubW91c2VNb3ZlZChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVF
dmVudF0pOwogICAgIH0KIAogICAgIGxhc3RIaXRWaWV3ID0gdmlldzsKQEAgLTE3ODcsOSArMTc4
Nyw5IEBAIC0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDooTlNFdmUKICAgICAgICAg
ICAgICAgICB8fCBbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9h
cmRCZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10KICNlbmRpZgogICAg
ICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkubW91c2VNb3ZlZChldmVudCk7CisgICAgICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhh
bmRsZXIoKS5tb3VzZU1vdmVkKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50
XSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50
SGFuZGxlcigpLnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoZXZlbnQpOworICAgICAg
ICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGFzc01vdXNlTW92ZWRFdmVudFRv
U2Nyb2xsYmFycyhldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogICAg
ICAgICB9CiAKICAgICAgICAgW3ZpZXcgcmVsZWFzZV07CkBAIC0zMzAzLDcgKzMzMDMsNyBAQCAt
ICh2b2lkKXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiAgICAgW3N1cGVyIHJpZ2h0TW91
c2VVcDpldmVudF07CiAKICAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSkpCi0gICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VVcChldmVudCk7
CisgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VVcChldmVudCwgW1tzZWxm
IF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogfQogCiBzdGF0aWMgdm9pZCBzZXRNZW51SXRl
bVRhcmdldChOU01lbnVJdGVtKiBtZW51SXRlbSkKQEAgLTMzNDgsOCArMzM0OCw4IEBAIC0gKE5T
TWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAqKWV2ZW4KICAgICAvLyBNYXRjaCBiZWhhdmlv
ciBvZiBvdGhlciBicm93c2VycyBieSBzZW5kaW5nIGEgbW91c2Vkb3duIGV2ZW50IGZvciByaWdo
dCBjbGlja3MuCiAgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7CiAg
ICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY2xlYXJDb250ZXh0TWVudSgpOwotICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3duKGV2ZW50KTsKLSAgICBCT09MIGhh
bmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2VuZENvbnRleHRNZW51RXZl
bnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwg
cGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKKyAgICBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLm1vdXNlRG93bihldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVF
dmVudF0pOworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIo
KS5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZv
cm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSwgcGFn
ZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKICAgICBfcHJpdmF0ZS0+aGFuZGxp
bmdNb3VzZURvd25FdmVudCA9IE5POwogCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCkBAIC0zNzc3
LDcgKzM3NzcsNyBAQCAtIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlCiAg
ICAgICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkgewog
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9ybUV2ZW50RmFjdG9y
eTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9y
bVBhZ2VDbGllbnQoKSkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFBsYXRmb3JtRXZlbnRGYWN0b3J5Ojpj
cmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJl
RXZlbnRdLCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOwogI2VuZGlmCiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKFtoaXRIVE1MVmlldyBfaXNTY3JvbGxCYXJFdmVudDpldmVu
dF0pCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKQEAgLTM4MDQsNyArMzgwNCw3IEBA
IC0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW4KICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQogICAgICAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRI
VE1MVmlldyBfZnJhbWVdKSkgewogICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29y
ZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNy
ZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdl
Q2xpZW50KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRl
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50
XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKICAgICAgICAgICAgIH0K
ICNlbmRpZgogICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxd
OwpAQCAtMzg0MSw3ICszODQxLDYgQEAgLSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZl
bnQKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDEwMDAKICAgICBbW1tzZWxmIF93ZWJWaWV3XSBfYWN0aW9uTWVudUNvbnRyb2xsZXJd
IHdlYlZpZXc6W3NlbGYgX3dlYlZpZXddIHdpbGxIYW5kbGVNb3VzZURvd246ZXZlbnRdOwotICAg
IFtbW3NlbGYgX3dlYlZpZXddIF9pbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyXSB3ZWJWaWV3Oltz
ZWxmIF93ZWJWaWV3XSB3aWxsSGFuZGxlTW91c2VEb3duOmV2ZW50XTsKICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TKQpAQCAtMzg3Miw3ICszODcxLDcgQEAgLSAodm9pZCltb3VzZURvd246KFdl
YkV2ZW50ICopZXZlbnQKICAgICAgICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNoYW5jZSB0
byBkZWFsIHdpdGggdGhlIGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCiAgICAgICAg
ICAgICAvLyB0byBzdGFydCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpZiBhcHByb3ByaWF0ZS4KICAg
ICAgICAgICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAg
ICAgICAgICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlRG93bihldmVudCk7
CisgICAgICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZURvd24oZXZl
bnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKICAgICAgICAgfQogICAgIH0K
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKQEAgLTM5MjUsNyArMzkyNCw3IEBAIC0gKHZv
aWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKICAgICBpZiAoIV9wcml2YXRlLT5pZ25v
cmluZ01vdXNlRHJhZ2dlZEV2ZW50cykgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkgewogICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+
cGFnZSgpKQotICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigp
Lm1vdXNlRHJhZ2dlZChldmVudCk7CisgICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCku
ZXZlbnRIYW5kbGVyKCkubW91c2VEcmFnZ2VkKGV2ZW50LCBbW3NlbGYgX3dlYlZpZXddIF9wcmVz
c3VyZUV2ZW50XSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQwNjQsOCArNDA2MywxMyBAQCAt
ICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKIAogICAgIFtzZWxmIF9zdG9wQXV0b3Nj
cm9sbFRpbWVyXTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkg
ewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAg
ICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLm1vdXNlVXAoZXZlbnQpOworI2Vs
c2UKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLm1vdXNlVXAo
ZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdKTsKKyNlbmRpZgorICAgICAg
ICB9CiAgICAgfQogI2lmICFQTEFURk9STShJT1MpCiAgICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3Zl
cldpdGhGYWtlRXZlbnRdOwpAQCAtNDA4MSw2ICs0MDg1LDI1IEBAIC0gKHZvaWQpbW91c2VNb3Zl
ZDooTlNFdmVudCAqKWV2ZW50CiB9CiAjZW5kaWYKIAorLSAodm9pZClwcmVzc3VyZUNoYW5nZVdp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19N
QUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgIE5TRXZlbnQgKmxhc3RQ
cmVzc3VyZUV2ZW50ID0gW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF07CisgICAgaWYg
KGV2ZW50ID09IGxhc3RQcmVzc3VyZUV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
ZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlQ2hhbmdlZCAmJiBldmVudC5waGFzZSAhPSBOU0V2
ZW50UGhhc2VCZWdhbiAmJiBldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VFbmRlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBjb3Jl
RnJhbWUtPmV2ZW50SGFuZGxlcigpLnByZXNzdXJlQ2hhbmdlKGV2ZW50LCBsYXN0UHJlc3N1cmVF
dmVudCk7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBfc2V0UHJlc3N1cmVFdmVudDpldmVudF07Cisj
ZW5kaWYKK30KKwogI2lmICFQTEFURk9STShJT1MpCiAvLyByZXR1cm5pbmcgWUVTIGZyb20gdGhp
cyBtZXRob2QgaXMgdGhlIHdheSB3ZSB0ZWxsIEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0aGlz
IHZpZXcKIC8vIHRvIGJlIGluIHRoZSBrZXkgbG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwgY29u
dHJvbHMiIGlzIG5vdCBvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODM4OTEp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEyIEBAIEBpbnRlcmZhY2UgV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciAKICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBf
Y3VycmVudEFjdGlvbkNvbnRleHQ7CiAgICAgQk9PTCBfaXNTaG93aW5nVGV4dEluZGljYXRvcjsK
ICAgICBCT09MIF9oYXNBY3RpdmF0ZWRBY3Rpb25Db250ZXh0OworICAgIEJPT0wgX2NvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQ7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdlYlZpZXc6KFdl
YlZpZXcgKil3ZWJWaWV3IHJlY29nbml6ZXI6KE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyOwogLSAodm9pZCl3ZWJWaWV3Q2xvc2Vk
OwogCi0tICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHdpbGxIYW5kbGVNb3VzZURv
d246KE5TRXZlbnQgKilldmVudDsKIC0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcg
ZGlkSGFuZGxlU2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudDsKIAogLSAoTlNJbW1lZGlhdGVB
Y3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTY0LDYgKzY0LDEzIEBAIFNPRlRfTElOS19DTEFTUyhRdWlja0xvb2tVSSwgUUxQcmV2aWV3
TWUKIEBpbnRlcmZhY2UgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAoKSA8UUxQcmV2aWV3
TWVudUl0ZW1EZWxlZ2F0ZT4KIEBlbmQKIAorQGludGVyZmFjZSBXZWJBbmltYXRpb25Db250cm9s
bGVyIDogTlNPYmplY3QgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gewor
fQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0aW9uQ29udHJvbGxlcgorQGVuZAor
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxlbWVudGF0aW9uIFdlYkltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIKQEAgLTk0LDEyICsxMDEsNiBAQCAtICh2b2lkKXdlYlZpZXdDbG9z
ZWQKICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBuaWw7CiB9CiAKLS0gKHZvaWQpd2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXcgd2lsbEhhbmRsZU1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGVdOwotICAgIFtfd2ViVmll
dyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpUZXh0SW5kaWNhdG9yRGlzbWlzc2Fs
QW5pbWF0aW9uOjpGYWRlT3V0XTsKLX0KLQogLSAodm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyBkaWRIYW5kbGVTY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50CiB7CiAgICAgW19jdXJy
ZW50UUxQcmV2aWV3TWVudUl0ZW0gY2xvc2VdOwpAQCAtMTM2LDYgKzEzNyw3IEBAIC0gKHZvaWQp
X2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGUKICAgICBfdHlwZSA9IFdlYkltbWVkaWF0ZUFjdGlv
bk5vbmU7CiAgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gbmlsOwogICAgIF9jdXJyZW50UUxQ
cmV2aWV3TWVudUl0ZW0gPSBuaWw7CisgICAgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQgPSBOTzsK
IH0KIAogLSAodm9pZClwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6KE5TUG9pbnQpdmlld1BvaW50CkBA
IC0xNDQsNiArMTQ2LDEwIEBAIC0gKHZvaWQpcGVyZm9ybUhpdFRlc3RBdFBvaW50OihOU1BvaW50
KXYKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIF9oaXRUZXN0UmVz
dWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQ
b2ludCh2aWV3UG9pbnQpKTsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnNldEltbWVk
aWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdlOjpQZXJmb3JtZWRIaXRUZXN0KTsK
KworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gX2hpdFRlc3RSZXN1bHQuaW5uZXJFbGVtZW50
KCkpCisgICAgICAgIF9jb250ZW50UHJldmVudHNEZWZhdWx0ID0gZWxlbWVudC0+ZGlzcGF0Y2hN
b3VzZUZvcmNlV2lsbEJlZ2luKCk7CiB9CiAKICNwcmFnbWEgbWFyayBOU0ltbWVkaWF0ZUFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUKQEAgLTE4OCw2ICsxOTQsMTMgQEAgLSAodm9pZClp
bW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkVXBkYQogICAgIGlmIChpbW1lZGlhdGVBY3Rpb25S
ZWNvZ25pemVyICE9IF9pbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyKQogICAgICAgICByZXR1cm47
CiAKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbW1tbX3dlYlZpZXcgX3NlbGVjdGVkT3JN
YWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCku
c2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlvblVwZGF0
ZWQpOworICAgIGlmIChfY29udGVudFByZXZlbnRzRGVmYXVsdCkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yQW5pbWF0aW9uUHJvZ3Jlc3M6W2ltbWVk
aWF0ZUFjdGlvblJlY29nbml6ZXIgYW5pbWF0aW9uUHJvZ3Jlc3NdXTsKIH0KIApAQCAtMTk2LDYg
KzIwOSwxMCBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDYW5jCiAgICAg
aWYgKGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6
ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtbW1tf
d2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIF9m
cmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUpCisgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRlQWN0aW9uU3RhZ2U6OkFjdGlv
bkNhbmNlbGxlZCk7CisKICAgICBbX3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3JBbmltYXRpb25Q
cm9ncmVzczowXTsKICAgICBbc2VsZiBfY2xlYXJJbW1lZGlhdGVBY3Rpb25TdGF0ZV07CiAgICAg
W193ZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5pbWF0aW9uOlRleHRJbmRpY2F0b3JE
aXNtaXNzYWxBbmltYXRpb246Ok5vbmVdOwpAQCAtMjA3LDYgKzIyNCwxMSBAQCAtICh2b2lkKWlt
bWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDb21wCiAgICAgaWYgKGltbWVkaWF0ZUFjdGlvblJl
Y29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIpCiAgICAgICAgIHJldHVybjsK
IAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtbW1tfd2ViVmlldyBfc2VsZWN0ZWRPck1h
aW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIF9mcmFtZV0pOworICAgIGlmICghY29y
ZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5z
ZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rpb25TdGFnZTo6QWN0aW9uQ29tcGxl
dGVkKTsKKwogICAgIFtfd2ViVmlldyBfc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNz
OjFdOwogICAgIFtfd2ViVmlldyBfc2V0TWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb246Tk9dOwog
fQpAQCAtMjE1LDYgKzIzNywxMSBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJE
aWRDb21wCiAKIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9k
ZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcgogeworICAgIGlmIChfY29udGVudFByZXZlbnRzRGVm
YXVsdCkgeworICAgICAgICBSZXRhaW5QdHI8V2ViQW5pbWF0aW9uQ29udHJvbGxlcj4gZHVtbXlD
b250cm9sbGVyID0gW1tXZWJBbmltYXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgcmV0dXJuIGR1bW15Q29udHJvbGxlci5nZXQoKTsKKyAgICB9CisKICAgICBOU1VSTCAqdXJs
ID0gX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgTlNTdHJpbmcgKmFic29s
dXRlVVJMU3RyaW5nID0gW3VybCBhYnNvbHV0ZVN0cmluZ107CiAgICAgaWYgKHVybCAmJiBfaGl0
VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpIHsKQEAgLTI2NSw2ICsyOTIsMTEgQEAgLSAodm9pZClf
dXBkYXRlSW1tZWRpYXRlQWN0aW9uSXRlbQogCiAgICAgaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4gZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXIgPSBbc2VsZiBfZGVm
YXVsdEFuaW1hdGlvbkNvbnRyb2xsZXJdOwogCisgICAgaWYgKF9jb250ZW50UHJldmVudHNEZWZh
dWx0KSB7CisgICAgICAgIFtfaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplciBzZXRBbmltYXRpb25D
b250cm9sbGVyOmRlZmF1bHRBbmltYXRpb25Db250cm9sbGVyXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIC8vIEFsbG93IGNsaWVudHMgdGhlIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRl
IHRoZSBkZWZhdWx0IGltbWVkaWF0ZSBhY3Rpb24uCiAgICAgaWQgY3VzdG9tQ2xpZW50QW5pbWF0
aW9uQ29udHJvbGxlciA9IG5pbDsKICAgICBpZiAoW1tfd2ViVmlldyBVSURlbGVnYXRlXSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmltbWVkaWF0ZUFjdGlvbkFuaW1hdGlv
bkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OndpdGhUeXBlOildKSB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTkxMCw2ICs5MTAs
NyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldpdGhGcmFtZU5hCiAgICAgICAgIFJl
dGFpblB0cjxOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyPiByZWNvZ25pemVyID0g
YWRvcHROUyhbKE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIgKilbZ2VzdHVyZUNs
YXNzIGFsbG9jXSBpbml0V2l0aFRhcmdldDpuaWwgYWN0aW9uOk5VTExdKTsKICAgICAgICAgX3By
aXZhdGUtPmltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgPSBbW1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpzZWxmIHJlY29nbml6ZXI6cmVjb2duaXpl
ci5nZXQoKV07CiAgICAgICAgIFtyZWNvZ25pemVyIHNldERlbGVnYXRlOl9wcml2YXRlLT5pbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyXTsKKyAgICAgICAgW3JlY29nbml6ZXIgc2V0RGVsYXlzUHJp
bWFyeU1vdXNlQnV0dG9uRXZlbnRzOk5PXTsKICAgICB9CiAjZW5kaWYKIApAQCAtODYwMSw2ICs4
NjAyLDIwIEBAIC0gKGlkKV9hbmltYXRpb25Db250cm9sbGVyRm9yRGljdGlvbmFyeUwKIH0KICNl
bmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMAogCistIChO
U0V2ZW50ICopX3ByZXNzdXJlRXZlbnQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnByZXNzdXJl
RXZlbnQ7Cit9CisKKy0gKHZvaWQpX3NldFByZXNzdXJlRXZlbnQ6KE5TRXZlbnQgKilldmVudAor
eworICAgIGlmIChldmVudCA9PSBfcHJpdmF0ZS0+cHJlc3N1cmVFdmVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgW19wcml2YXRlLT5wcmVzc3VyZUV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2
YXRlLT5wcmVzc3VyZUV2ZW50ID0gW2V2ZW50IHJldGFpbl07Cit9CisKIC0gKHZvaWQpX3NldFRl
eHRJbmRpY2F0b3I6KFRleHRJbmRpY2F0b3ImKXRleHRJbmRpY2F0b3IKIHsKICAgICBbc2VsZiBf
c2V0VGV4dEluZGljYXRvcjp0ZXh0SW5kaWNhdG9yIHdpdGhMaWZldGltZTpUZXh0SW5kaWNhdG9y
TGlmZXRpbWU6OlBlcm1hbmVudF07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJW
aWV3RGF0YS5oCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBAaW50ZXJm
YWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmplY3QgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5kaWNhdG9yV2luZG93OwogICAgIEJPT0wg
aGFzSW5pdGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8V2ViV2luZG93Vmlz
aWJpbGl0eU9ic2VydmVyPiB3aW5kb3dWaXNpYmlsaXR5T2JzZXJ2ZXI7CisgICAgTlNFdmVudCAq
cHJlc3N1cmVFdmVudDsKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICAgICBCT09MIHNob3Vs
ZE1haW50YWluSW5hY3RpdmVTZWxlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0RhdGEubW0JKHJldmlzaW9uIDE4Mzg5MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0RhdGEubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NywxMCArMTg3LDEz
IEBAIC0gKHZvaWQpZGVhbGxvYwogI2VuZGlmCiAgICAgW2luc3BlY3RvciByZWxlYXNlXTsKICAg
ICBbY3VycmVudE5vZGVIaWdobGlnaHQgcmVsZWFzZV07Ci0jaWYgUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMAorI2lmIFBMQVRGT1JNKE1B
QykKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTAwMAogICAgIFth
Y3Rpb25NZW51Q29udHJvbGxlciByZWxlYXNlXTsKICAgICBbaW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlciByZWxlYXNlXTsKICNlbmRpZgorICAgIFtwcmVzc3VyZUV2ZW50IHJlbGVhc2VdOworI2Vu
ZGlmCiAgICAgW2hvc3RXaW5kb3cgcmVsZWFzZV07CiAgICAgW3BvbGljeURlbGVnYXRlRm9yd2Fy
ZGVyIHJlbGVhc2VdOwogICAgIFtVSURlbGVnYXRlRm9yd2FyZGVyIHJlbGVhc2VdOwpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAx
ODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5LDggQEAgQGludGVyZmFjZSBXZWJWaWV3IChXZWJW
aWV3T3RoZXJJbnRlcm5hbAogLSAoV2ViQWN0aW9uTWVudUNvbnRyb2xsZXIgKilfYWN0aW9uTWVu
dUNvbnRyb2xsZXI7CiAtIChXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyICopX2ltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXI7CiAjZW5kaWYKKy0gKE5TRXZlbnQgKilfcHJlc3N1cmVFdmVudDsK
Ky0gKHZvaWQpX3NldFByZXNzdXJlRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkgJiYgIVBMQVRGT1JNKElPUykgJiYg
ZGVmaW5lZChfX2NwbHVzcGx1cykKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5MSkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1LTA1LTA2ICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9yY2UtcmVsYXRlZCBET00gZXZlbnRz
IHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAg
ICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZv
cm1Nb3VzZUV2ZW50KCkgdGFrZXMgdGhlIGxhc3QgcHJlc3N1cmUgZXZlbnQgCisgICAgICAgIG5v
dy4gSnVzdCBzZW5kIG5pbC4gCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvTWVu
dVR5cGVzRm9yTW91c2VFdmVudHMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpidWlsZEFu
ZFBlcmZvcm1UZXN0KToKKwogMjAxNS0wNS0wNiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBEbyBub3QgbGluayB0b29scyB0byBXZWJLaXQyLmZyYW1ld29y
awpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvTWVudVR5cGVzRm9yTW91c2VF
dmVudHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9tYWMvTWVu
dVR5cGVzRm9yTW91c2VFdmVudHMubW0JKHJldmlzaW9uIDE4Mzg5MSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvbWFjL01lbnVUeXBlc0Zvck1vdXNlRXZlbnRzLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGJ1aWxkQW5kUGVyZm9ybVRlc3QoTlNF
dmVudFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tDb3VudDow
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3N1cmU6MF07CiAg
ICAgCi0gICAgYXV0byBwbWUgPSBXZWJDb3JlOjpQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRl
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCB3ZWJWaWV3LmdldCgpKTsKKyAgICBhdXRvIHBtZSA9
IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQo
ZXZlbnQsIG5pbCwgd2ViVmlldy5nZXQoKSk7CiAgICAgCiAgICAgRVhQRUNUX0VRKGV4cGVjdGVk
QnV0dG9uLCBwbWUuYnV0dG9uKCkpOwogICAgIEVYUEVDVF9UUlVFKCFtb2RpZmllckZsYWdzIHx8
IHBtZS5tb2RpZmllckZsYWdzKCkgJiBtb2RpZmllckZsYWdzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252540</attachid>
            <date>2015-05-06 17:03:27 -0700</date>
            <delta_ts>2015-05-07 13:00:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>35001</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA1LTA2ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9yY2UtcmVsYXRlZCBET00g
ZXZlbnRzIHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGlu
Zy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGwgb2YgdGhlIFdLMSBtb3VzZSBldmVudHMg
bmVlZCB0byB0YWtlIHRoZSBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKiBw
YWdlL0V2ZW50SGFuZGxlci5oOgorCisgICAgICAgIE1ha2UgY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQgYSBwYXJ0IG9mIEN1cnJlbnRFdmVudFNjb3BlLiBUaGlzIGlzIG5lZWRlZCB0byAKKyAg
ICAgICAgaGF2ZSBhY2N1cmF0ZSBwcmVzc3VyZSBpbmZvcm1hdGlvbiBmb3IgYWxsIG9mIHRoZSBt
b3VzZSBldmVudHMgaW4gc3ViZnJhbWVzLgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xv
dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNvcnJlc3BvbmRpbmdQcmVzc3Vy
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnJlbnRFdmVudFNjb3BlOjpDdXJyZW50RXZl
bnRTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJyZW50RXZlbnRTY29wZTo6fkN1cnJlbnRF
dmVudFNjb3BlKToKKworICAgICAgICBUaGVzZSBldmVudHMgZG9u4oCZdCBoYXZlIGFuIGFzc29j
aWF0ZWQgcHJlc3N1cmUsIHNvIHNlbmQgbmlsIGZvciB0aGUgCisgICAgICAgIGNvcnJlc3BvbmRp
bmdQcmVzc3VyZUV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOgorCisgICAg
ICAgIFBpcGUgdGhyb3VnaCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6bW91c2VEcmFnZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
bW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgor
CisgICAgICAgIE5ldyBmdW5jdGlvbiB0byBoYW5kbGUgcHJlc3N1cmUgY2hhbmdlIGV2ZW50cy4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cHJlc3N1cmVDaGFuZ2UpOgorCisgICAg
ICAgIFBpcGUgdGhyb3VnaCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQp
OgorCisgICAgICAgIFRha2UgdGhlIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50IGluIG9yZGVy
IHRvIGJ1aWxkIGEgUGxhdGZvcm1Nb3VzZUV2ZW50IHdpdGggCisgICAgICAgIHRoZSBjb3JyZWN0
IHByZXNzdXJlIGluZm9ybWF0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeU1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6cG9pbnRGb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjptb3VzZUJ1
dHRvbkZvckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxk
ZXI6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudCk6CisKIDIwMTUtMDUtMDYg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEF2b2lkIGNvcGllcyBp
biBzY3JvbGxPZmZzZXRGb3JGaXhlZFBvc2l0aW9uKCkgYW5kIGlubGluZSBpdC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDEwICsyNjYs
MTEgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18p
CiAjaWYgIVBMQVRGT1JNKElPUykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1vdXNlRG93bihO
U0V2ZW50ICopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VEcmFnZ2VkKE5TRXZlbnQg
Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKik7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBtb3VzZU1vdmVkKE5TRXZlbnQgKik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBtb3VzZURvd24oTlNFdmVudCAqLCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1
cmVFdmVudCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBtb3VzZURyYWdnZWQoTlNFdmVudCAq
LCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKiwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJl
RXZlbnQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICosIE5T
RXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHByZXNzdXJlQ2hhbmdlKE5TRXZlbnQgKiwgTlNFdmVudCogY29ycmVzcG9uZGluZ1ByZXNz
dXJlRXZlbnQpOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHdoZWVsRXZlbnQoTlNFdmVudCAqKTsKICNlbHNlCkBA
IC0yODUsNyArMjg2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiAhUExBVEZPUk0oSU9TKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhO
U0V2ZW50ICopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFzc01vdXNlTW92ZWRFdmVudFRv
U2Nyb2xsYmFycyhOU0V2ZW50ICosIE5TRXZlbnQqIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRy
YWNraW5nKE5TRXZlbnQgKmluaXRpYXRpbmdFdmVudCk7CiAjZW5kaWYKQEAgLTI5NCw2ICsyOTUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoaW50IG51bSkg
eyBtX2FjdGl2YXRpb25FdmVudE51bWJlciA9IG51bTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIE5TRXZlbnQgKmN1cnJlbnROU0V2ZW50KCk7CisgICAgc3RhdGljIE5TRXZlbnQgKmNv
cnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KCk7CiAjZWxzZQogICAgIHN0YXRpYyBXZWJFdmVudCAq
Y3VycmVudEV2ZW50KCk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDE4Mzg5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtODEsMTAgKzgxLDIxIEBAIE5TRXZlbnQgKkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZl
bnQoKQogICAgIHJldHVybiBjdXJyZW50TlNFdmVudFNsb3QoKS5nZXQoKTsKIH0KIAorc3RhdGlj
IFJldGFpblB0cjxOU0V2ZW50PiYgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnRTbG90KCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmV0YWluUHRyPE5TRXZlbnQ+PiBldmVudDsKKyAg
ICByZXR1cm4gZXZlbnQ7Cit9CisKK05TRXZlbnQgKkV2ZW50SGFuZGxlcjo6Y29ycmVzcG9uZGlu
Z1ByZXNzdXJlRXZlbnQoKQoreworICAgIHJldHVybiBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dFNsb3QoKS5nZXQoKTsKK30KKwogY2xhc3MgQ3VycmVudEV2ZW50U2NvcGUgewogICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDdXJyZW50RXZlbnRTY29wZSk7CiBwdWJsaWM6Ci0gICAgQ3VycmVu
dEV2ZW50U2NvcGUoTlNFdmVudCAqKTsKKyAgICBDdXJyZW50RXZlbnRTY29wZShOU0V2ZW50ICos
IE5TRXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKICAgICB+Q3VycmVudEV2ZW50
U2NvcGUoKTsKIAogcHJpdmF0ZToKQEAgLTkyLDIxICsxMDMsMjUgQEAgcHJpdmF0ZToKICNpZm5k
ZWYgTkRFQlVHCiAgICAgUmV0YWluUHRyPE5TRXZlbnQ+IG1fZXZlbnQ7CiAjZW5kaWYKKyAgICBS
ZXRhaW5QdHI8TlNFdmVudD4gbV9jb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudDsKIH07CiAKLWlu
bGluZSBDdXJyZW50RXZlbnRTY29wZTo6Q3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqZXZlbnQp
CitpbmxpbmUgQ3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKE5TRXZlbnQgKmV2
ZW50LCBOU0V2ZW50ICpjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKICAgICA6IG1fc2F2ZWRD
dXJyZW50RXZlbnQoY3VycmVudE5TRXZlbnRTbG90KCkpCiAjaWZuZGVmIE5ERUJVRwogICAgICwg
bV9ldmVudChldmVudCkKICNlbmRpZgorICAgICwgbV9jb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dChjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKIHsKICAgICBjdXJyZW50TlNFdmVudFNsb3Qo
KSA9IGV2ZW50OworICAgIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xvdCgpID0gY29ycmVz
cG9uZGluZ1ByZXNzdXJlRXZlbnQ7CiB9CiAKIGlubGluZSBDdXJyZW50RXZlbnRTY29wZTo6fkN1
cnJlbnRFdmVudFNjb3BlKCkKIHsKICAgICBBU1NFUlQoY3VycmVudE5TRXZlbnRTbG90KCkgPT0g
bV9ldmVudCk7CiAgICAgY3VycmVudE5TRXZlbnRTbG90KCkgPSBtX3NhdmVkQ3VycmVudEV2ZW50
OworICAgIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50U2xvdCgpID0gbmlsOwogfQogCiBib29s
IEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKQEAgLTExNSw3ICsxMzAs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICplCiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDdXJyZW50RXZlbnRTY29wZSBzY29w
ZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQsIG5pbCk7CiAgICAg
cmV0dXJuIGhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtV2hlZWxFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkp
KTsKIH0KIApAQCAtMTI1LDcgKzE0MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChO
U0V2ZW50ICpldmUKIAogICAgIEFTU0VSVChbZXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duIHx8IFtl
dmVudCB0eXBlXSA9PSBOU0tleVVwKTsKIAotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2
ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgbmlsKTsKICAgICByZXR1
cm4ga2V5RXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtS2V5Ym9hcmRF
dmVudChldmVudCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTQ2OSw3
ICs0ODQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdlCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQg
KmV2ZW50KQordm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldmVudCwgTlNF
dmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpCiB7CiAgICAgRnJhbWVWaWV3KiB2ID0g
bV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2IHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KQpA
QCAtNDc5LDE0ICs0OTQsMTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50
ICpldgogICAgIAogICAgIG1fbW91c2VEb3duVmlldyA9IG5pbDsKICAgICAKLSAgICBDdXJyZW50
RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZl
bnQsIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKIAogICAgIGhhbmRsZU1vdXNlUHJlc3NF
dmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOwogCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlRHJhZ2dlZChOU0V2ZW50
ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAqZXZlbnQs
IE5TRXZlbnQgKmNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KQogewogICAgIEZyYW1lVmlldyog
diA9IG1fZnJhbWUudmlldygpOwogICAgIGlmICghdiB8fCBtX3NlbmRpbmdFdmVudFRvU3Vidmll
dykKQEAgLTQ5NCwxMyArNTA5LDEzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQo
TlNFdmVudCAKIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIEN1cnJl
bnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShl
dmVudCwgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpOwogICAgIGhhbmRsZU1vdXNlTW92ZUV2
ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VVcChOU0V2ZW50ICpldmVu
dCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50ICpj
b3JyZXNwb25kaW5nUHJlc3N1cmVFdmVudCkKIHsKICAgICBGcmFtZVZpZXcqIHYgPSBtX2ZyYW1l
LnZpZXcoKTsKICAgICBpZiAoIXYgfHwgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpCkBAIC01MDgs
NyArNTIzLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6Om1vdXNlVXAoTlNFdmVudCAqZXZlbgogCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgQ3VycmVudEV2ZW50U2NvcGUg
c2NvcGUoZXZlbnQpOworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBjb3JyZXNw
b25kaW5nUHJlc3N1cmVFdmVudCk7CiAKICAgICAvLyBPdXIgYmVoYXZpb3IgaGVyZSBpcyBhIGxp
dHRsZSBkaWZmZXJlbnQgdGhhdCBRdC4gUXQgYWx3YXlzIHNlbmRzCiAgICAgLy8gYSBtb3VzZSBy
ZWxlYXNlIGV2ZW50LCBldmVuIGZvciBhIGRvdWJsZSBjbGljay4gVG8gY29ycmVjdCBwcm9ibGVt
cwpAQCAtNTk1LDcgKzYxMCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpzZW5kRmFrZUV2ZW50c0Fm
dGVyV2kKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFu
ZGxlcjo6bW91c2VNb3ZlZChOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjptb3Vz
ZU1vdmVkKE5TRXZlbnQgKmV2ZW50LCBOU0V2ZW50KiBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dCkKIHsKICAgICAvLyBSZWplY3QgYSBtb3VzZSBtb3ZlZCBpZiB0aGUgYnV0dG9uIGlzIGRvd24g
LSBzY3Jld3MgdXAgdHJhY2tpbmcgZHVyaW5nIGF1dG9zY3JvbGwKICAgICAvLyBUaGVzZSBoYXBw
ZW4gYmVjYXVzZSBXZWJLaXQgc29tZXRpbWVzIGhhcyB0byBmYWtlIHVwIG1vdmVkIGV2ZW50cy4K
QEAgLTYwMywxMiArNjE4LDIzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZl
bnQgKmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRT
Y29wZSBzY29wZShldmVudCwgY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQpOwogICAgIG1vdXNl
TW92ZWQoY3VycmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZWRFdmVudFRv
U2Nyb2xsYmFycyhOU0V2ZW50ICpldmVudCkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwcmVzc3VyZUNo
YW5nZShOU0V2ZW50ICpldmVudCwgTlNFdmVudCogY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQp
Cit7CisgICAgaWYgKCFtX2ZyYW1lLnZpZXcoKSB8fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAg
IEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50LCBjb3JyZXNwb25kaW5nUHJlc3N1cmVFdmVu
dCk7CisgICAgaGFuZGxlTW91c2VGb3JjZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQo
KSk7CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKwordm9pZCBFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoTlNFdmVudCAqZXZlbnQsIE5TRXZl
bnQqIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KQogewogICAgIC8vIFJlamVjdCBhIG1vdXNl
IG1vdmVkIGlmIHRoZSBidXR0b24gaXMgZG93biAtIHNjcmV3cyB1cCB0cmFja2luZyBkdXJpbmcg
YXV0b3Njcm9sbAogICAgIC8vIFRoZXNlIGhhcHBlbiBiZWNhdXNlIFdlYktpdCBzb21ldGltZXMg
aGFzIHRvIGZha2UgdXAgbW92ZWQgZXZlbnRzLgpAQCAtNjE2LDcgKzY0Miw3IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlZEV2ZW50VG8KICAgICAgICAgcmV0dXJuOwogCiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3Bl
KGV2ZW50KTsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCwgY29ycmVzcG9uZGlu
Z1ByZXNzdXJlRXZlbnQpOwogICAgIHBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9sbGJhcnMoY3Vy
cmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQpAQCAtNjc0LDcgKzcwMCw3IEBAIFBsYXRmb3JtTW91c2VFdmVudCBFdmVudEhhbmRsZXI6
OmN1cnJlbnQKICAgICBOU1ZpZXcgKndpbmRvd1ZpZXcgPSBuaWw7CiAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLnBhZ2UoKSkKICAgICAgICAgd2luZG93VmlldyA9IHBhZ2UtPmNocm9tZSgp
LnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6
Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGN1cnJlbnROU0V2ZW50KCksIHdpbmRvd1ZpZXcpOwor
ICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50
KGN1cnJlbnROU0V2ZW50KCksIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KCksIHdpbmRvd1Zp
ZXcpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAkocmV2aXNpb24g
MTgzODkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0
b3J5TWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBQbGF0Zm9ybUV2ZW50RmFjdG9yeSB7CiBwdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVQbGF0Zm9ybU1vdXNlRXZl
bnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQg
KiwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93Vmll
dyk7CiAgICAgc3RhdGljIFBsYXRmb3JtV2hlZWxFdmVudCBjcmVhdGVQbGF0Zm9ybVdoZWVsRXZl
bnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgY3JlYXRlUGxhdGZvcm1LZXlib2FyZEV2ZW50KE5T
RXZlbnQgKik7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
RXZlbnRGYWN0b3J5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw5IEBAIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5T
UG9pbnQmIHdpbmQKIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CisjaWYgZGVmaW5lZChfX0xQ
NjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAg
ICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6CisjZW5kaWYKICAgICAgICAgY2FzZSBOU0xlZnRN
b3VzZURvd246CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEcmFnZ2VkOgogICAgICAgICBjYXNl
IE5TTGVmdE1vdXNlVXA6CkBAIC03MSw2ICs3NCw5IEBAIHN0YXRpYyBJbnRQb2ludCBnbG9iYWxQ
b2ludEZvckV2ZW50KE5TRXYKIHN0YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0p
IHsKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gMTAxMDAzCisgICAgICAgIGNhc2UgTlNFdmVudFR5cGVQcmVzc3VyZToKKyNlbmRpZgog
ICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRG93bjoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURy
YWdnZWQ6CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VVcDoKQEAgLTk5LDYgKzEwNSw5IEBAIHN0
YXRpYyBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmUKIHN0YXRpYyBNb3VzZUJ1dHRv
biBtb3VzZUJ1dHRvbkZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2
ZW50IHR5cGVdKSB7CisjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01BWF9BTExPV0VEID49IDEwMTAwMworICAgICAgICBjYXNlIE5TRXZlbnRUeXBlUHJlc3N1cmU6
CisjZW5kaWYKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246CiAgICAgICAgIGNhc2UgTlNM
ZWZ0TW91c2VVcDoKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURyYWdnZWQ6CkBAIC00MTEsMjkg
KzQyMCw1MyBAQCBzdGF0aWMgaW50IHR5cGVGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICAgICAK
IGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIgOiBwdWJsaWMgUGxhdGZvcm1Nb3VzZUV2
ZW50IHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2
ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihO
U0V2ZW50ICpldmVudCwgTlNFdmVudCAqY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKICAgICB7CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAg
bV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb3VzZUV2ZW50VHlwZUZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb2RpZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAg
PSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAg
ICAgICAgICAgICAgICAgID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAg
ICBtX3R5cGUgPSBtb3VzZUV2ZW50VHlwZUZvckV2ZW50KGV2ZW50KTsKKworI2lmIGRlZmluZWQo
X19MUDY0X18pICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKKyAg
ICAgICAgQk9PTCBldmVudElzUHJlc3N1cmVFdmVudCA9IFtldmVudCB0eXBlXSA9PSBOU0V2ZW50
VHlwZVByZXNzdXJlOworICAgICAgICBpZiAoZXZlbnRJc1ByZXNzdXJlRXZlbnQpIHsKKyAgICAg
ICAgICAgIC8vIFNpbmNlIEFwcEtpdCBkb2Vzbid0IHNlbmQgbW91c2UgZXZlbnRzIGZvciBmb3Jj
ZSBkb3duIG9yIGZvcmNlIHVwLCB3ZSBoYXZlIHRvIHVzZSB0aGUgY3VycmVudCBwcmVzc3VyZQor
ICAgICAgICAgICAgLy8gZXZlbnQgYW5kIGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50IHRvIGRl
dGVjdCBpZiB0aGlzIGlzIE1vdXNlRm9yY2VEb3duLCBNb3VzZUZvcmNlVXAsIG9yIGp1c3QgTW91
c2VGb3JjZUNoYW5nZWQuCisgICAgICAgICAgICBpZiAoY29ycmVzcG9uZGluZ1ByZXNzdXJlRXZl
bnQuc3RhZ2UgPT0gMSAmJiBldmVudC5zdGFnZSA9PSAyKQorICAgICAgICAgICAgICAgIG1fdHlw
ZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VEb3duOworICAgICAgICAgICAgZWxzZSBpZiAo
Y29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQuc3RhZ2UgPT0gMiAmJiBldmVudC5zdGFnZSA9PSAx
KQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Ok1vdXNlRm9yY2VVcDsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50
OjpNb3VzZUZvcmNlQ2hhbmdlZDsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGNvcnJlc3BvbmRpbmdQcmVzc3VyZUV2ZW50KTsKKyNlbmRpZgorCisgICAgICAgIG1fbW9k
aWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX3RpbWVzdGFtcCA9
IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKIAogICAgICAgICAvLyBQbGF0Zm9ybU1v
dXNlRXZlbnQKLSAgICAgICAgbV9wb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgPSBw
b2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlv
biAgICAgICAgICAgICAgICAgICAgPSBnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KTsKLSAgICAg
ICAgbV9idXR0b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb3VzZUJ1dHRvbkZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9jbGlja0NvdW50ICAgICAgICAgICAgICAgICAgICAgICAg
PSBjbGlja0NvdW50Rm9yRXZlbnQoZXZlbnQpOwotICAgICAgICAKKyAgICAgICAgbV9wb3NpdGlv
biA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAgICAgICBtX2dsb2JhbFBv
c2l0aW9uID0gZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fYnV0dG9uID0g
bW91c2VCdXR0b25Gb3JFdmVudChldmVudCk7CisgICAgICAgIG1fY2xpY2tDb3VudCA9IGNsaWNr
Q291bnRGb3JFdmVudChldmVudCk7CisKKyAgICAgICAgbV9mb3JjZSA9IDA7CisjaWYgZGVmaW5l
ZChfX0xQNjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwor
ICAgICAgICBpbnQgc3RhZ2UgPSBldmVudElzUHJlc3N1cmVFdmVudCA/IGV2ZW50LnN0YWdlIDog
Y29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQuc3RhZ2U7CisgICAgICAgIGRvdWJsZSBwcmVzc3Vy
ZSA9IGV2ZW50SXNQcmVzc3VyZUV2ZW50ID8gZXZlbnQucHJlc3N1cmUgOiBjb3JyZXNwb25kaW5n
UHJlc3N1cmVFdmVudC5wcmVzc3VyZTsKKyAgICAgICAgbV9mb3JjZSA9IHN0YWdlIDwgMSA/IHBy
ZXNzdXJlIDogcHJlc3N1cmUgKyBzdGFnZSAtIDE7CisjZW5kaWYKKwogICAgICAgICAvLyBNYWMg
c3BlY2lmaWMKLSAgICAgICAgbV9tb2RpZmllckZsYWdzICAgICAgICAgICAgICAgICAgICAgPSBb
ZXZlbnQgbW9kaWZpZXJGbGFnc107Ci0gICAgICAgIG1fZXZlbnROdW1iZXIgICAgICAgICAgICAg
ICAgICAgICAgID0gW2V2ZW50IGV2ZW50TnVtYmVyXTsKLSAgICAgICAgbV9tZW51VHlwZUZvckV2
ZW50ICAgICAgICAgICAgICAgICAgPSB0eXBlRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX21v
ZGlmaWVyRmxhZ3MgPSBbZXZlbnQgbW9kaWZpZXJGbGFnc107CisgICAgICAgIG1fZXZlbnROdW1i
ZXIgPSBbZXZlbnQgZXZlbnROdW1iZXJdOworICAgICAgICBtX21lbnVUeXBlRm9yRXZlbnQgPSB0
eXBlRm9yRXZlbnQoZXZlbnQpOwogICAgIH0KIH07CiAKLVBsYXRmb3JtTW91c2VFdmVudCBQbGF0
Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQgKmV2ZW50
LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCitQbGF0Zm9ybU1vdXNlRXZlbnQgUGxhdGZvcm1FdmVudEZh
Y3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICpldmVudCwgTlNFdmVudCAq
Y29ycmVzcG9uZGluZ1ByZXNzdXJlRXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihldmVudCwgd2luZG93Vmlldyk7CisgICAg
cmV0dXJuIFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIoZXZlbnQsIGNvcnJlc3BvbmRpbmdQcmVz
c3VyZUV2ZW50LCB3aW5kb3dWaWV3KTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw2MCBAQAorMjAxNS0wNS0wNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgTmV3IGZvcmNlLXJlbGF0ZWQgRE9NIGV2ZW50cyBzaG91bGQgZmly
ZSBpbiBXSzEgdmlld3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDY2MworICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzIwMjgxODg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUGFzcyB0aGUgbGFzdFByZXNzdXJlRXZlbnQgdG8gV2ViQ29yZS4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfdXBk
YXRlTW91c2VvdmVyV2l0aEV2ZW50Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyByaWdodE1v
dXNlVXA6XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1lbnVGb3JFdmVudDpdKToKKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6XSk6CisgICAgICAgICgtW1dlYkhU
TUxWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpdKToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgbW91c2VEb3duOm1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZVVwOm1vdXNl
VXA6XSk6CisKKyAgICAgICAgTmV3IE5TUmVzcG5kZXIgbWV0aG9kIGZvciBwcmVzc3VyZSBjaGFu
Z2VzLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBwcmVzc3VyZUNoYW5nZVdpdGhFdmVudDpdKToK
KworICAgICAgICBOZXcgQk9PTCBfY29udGVudFByZXZlbnRzRGVmYXVsdCB0cmFja3Mgd2hldGhl
ciB0aGUgSGl0VGVzdFJlc3VsdCBwcmV2ZW50ZWQgdGhlIAorICAgICAgICBkZWZhdWx0IGFjdGlv
bi4gR2V0IHJpZCBvZiB3aWxsSGFuZGxlTW91c2VEb3duOyBub3cgdGhhdCB0aGUgZ2VzdHVyZSBy
ZWNvZ25pemVyIAorICAgICAgICBzZXRzIGRlbGF5c1ByaW1hcnlNb3VzZUJ1dHRvbkV2ZW50cyB0
byBOTywgd2UgZG9u4oCZdCBuZWVkIHRoaXMuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLmg6CisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
IF9jbGVhckltbWVkaWF0ZUFjdGlvblN0YXRlXSk6CisKKyAgICAgICAgU2V0IGFsbCBvZiB0aGUg
aW1tZWRpYXRlQWN0aW9uU3RhZ2VzIG9uIEV2ZW50SGFuZGxlci4gVGhpcyBpcyBjcml0aWNhbCB0
byBrZWVwIAorICAgICAgICBsaW5rIG5hdmlnYXRpb24gaGFwcGVuaW5nIGF0IHRoZSByaWdodCB0
aW1lIG5vdyB0aGF0IAorICAgICAgICBkZWxheXNQcmltYXJ5TW91c2VCdXR0b25FdmVudHMgaXMg
c2V0IHRvIE5PLgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIHBlcmZv
cm1IaXRUZXN0QXRQb2ludDpdKToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlciBpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkVXBkYXRlQW5pbWF0aW9uOl0pOgorICAg
ICAgICAoLVtXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIGltbWVkaWF0ZUFjdGlvblJlY29n
bml6ZXJEaWRDYW5jZWxBbmltYXRpb246XSk6CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlv
bkNvbnRyb2xsZXIgaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplckRpZENvbXBsZXRlQW5pbWF0aW9u
Ol0pOgorCisgICAgICAgIFVzZSBhIGR1bW15IGFuaW1hdGlvbiBjb250cm9sbGVyIGlmIHRoZSBj
b250ZW50IHByZXZlbnRzIGRlZmF1bHQuCisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIgX2RlZmF1bHRBbmltYXRpb25Db250cm9sbGVyXSk6CisgICAgICAgICgtW1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX3VwZGF0ZUltbWVkaWF0ZUFjdGlvbkl0ZW1dKToKKyAg
ICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciB3ZWJWaWV3OndpbGxIYW5kbGVN
b3VzZURvd246XSk6IERlbGV0ZWQuCisKKyAgICAgICAgU2V0IGRlbGF5c1ByaW1hcnlNb3VzZUJ1
dHRvbkV2ZW50cyB0byBOTyBzbyB0aGF0IHdlIGdldCBleGlzdGluZyBtb3VzZSBldmVudHMgd2hl
biAKKyAgICAgICAgd2UgZXhwZWN0IHRvLgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdy
b3VwTmFtZTpdKToKKworICAgICAgICBDYWNoZSB0aGUgbW9zdCByZWNlbnQgcHJlc3N1cmUgZXZl
bnQgc28gdGhhdCB3ZSBjYW4gc2VuZCBpdCB0byBXZWJDb3JlIGZvciBhbGwgb2YgCisgICAgICAg
IHRoZSBtb3VzZSBldmVudHMuCisgICAgICAgICgtW1dlYlZpZXcgX3ByZXNzdXJlRXZlbnRdKToK
KyAgICAgICAgKC1bV2ViVmlldyBfc2V0UHJlc3N1cmVFdmVudDpdKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3RGF0YS5tbToKKyAg
ICAgICAgKC1bV2ViVmlld1ByaXZhdGUgZGVhbGxvY10pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlld0ludGVybmFsLmg6CisKIDIwMTUtMDQtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZp
ZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRyb2R1Y2luZyB0aGUgUGxhdGZvcm0gQWJzdHJh
Y3Rpb24gTGF5ZXIgKFBBTCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRN
TFZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbQkocmV2aXNpb24gMTgzODkxKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc2OCw3ICsxNzY4LDcgQEAgLSAodm9p
ZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZQogICAgICAgICAgICAgY29udGV4dDpb
W05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAg
Y2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwogICAgICAgICBpZiAoRnJhbWUqIGxhc3RIaXRDb3Jl
RnJhbWUgPSBjb3JlKFtsYXN0SGl0VmlldyBfZnJhbWVdKSkKLSAgICAgICAgICAgIGxhc3RIaXRD
b3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlTW92ZWQoZXZlbnQpOworICAgICAgICAgICAg
bGFzdEhpdENvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VNb3ZlZChldmVudCwgW1tzZWxm
IF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogICAgIH0KIAogICAgIGxhc3RIaXRWaWV3ID0g
dmlldzsKQEAgLTE3ODcsOSArMTc4Nyw5IEBAIC0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhF
dmVudDooTlNFdmUKICAgICAgICAgICAgICAgICB8fCBbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9h
cmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxs
V2luZG93c10KICNlbmRpZgogICAgICAgICAgICAgICAgICkgewotICAgICAgICAgICAgICAgIGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VNb3ZlZChldmVudCk7CisgICAgICAgICAgICAg
ICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5tb3VzZU1vdmVkKGV2ZW50LCBbW3NlbGYgX3dl
YlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnBhc3NNb3VzZU1vdmVkRXZlbnRUb1Njcm9s
bGJhcnMoZXZlbnQpOworICAgICAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCku
cGFzc01vdXNlTW92ZWRFdmVudFRvU2Nyb2xsYmFycyhldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBf
cHJlc3N1cmVFdmVudF0pOwogICAgICAgICB9CiAKICAgICAgICAgW3ZpZXcgcmVsZWFzZV07CkBA
IC0zMzAzLDcgKzMzMDMsNyBAQCAtICh2b2lkKXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50
CiAgICAgW3N1cGVyIHJpZ2h0TW91c2VVcDpldmVudF07CiAKICAgICBpZiAoRnJhbWUqIGNvcmVm
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5k
bGVyKCkubW91c2VVcChldmVudCk7CisgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCku
bW91c2VVcChldmVudCwgW1tzZWxmIF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOwogfQogCiBz
dGF0aWMgdm9pZCBzZXRNZW51SXRlbVRhcmdldChOU01lbnVJdGVtKiBtZW51SXRlbSkKQEAgLTMz
NDgsOCArMzM0OCw4IEBAIC0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAqKWV2ZW4K
ICAgICAvLyBNYXRjaCBiZWhhdmlvciBvZiBvdGhlciBicm93c2VycyBieSBzZW5kaW5nIGEgbW91
c2Vkb3duIGV2ZW50IGZvciByaWdodCBjbGlja3MuCiAgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91
c2VEb3duRXZlbnQgPSBZRVM7CiAgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY2xl
YXJDb250ZXh0TWVudSgpOwotICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkubW91c2VEb3du
KGV2ZW50KTsKLSAgICBCT09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuc2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRm
b3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkp
KTsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLm1vdXNlRG93bihldmVudCwgW1tzZWxm
IF93ZWJWaWV3XSBfcHJlc3N1cmVFdmVudF0pOworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybUV2ZW50
RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dlYlZpZXdd
IF9wcmVzc3VyZUV2ZW50XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsK
ICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POwogCiAgICAgaWYgKCFo
YW5kbGVkRXZlbnQpCkBAIC0zNzc3LDcgKzM3NzcsNyBAQCAtIChCT09MKWFjY2VwdHNGaXJzdE1v
dXNlOihOU0V2ZW50ICopZXZlCiAgICAgICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVj
dGlvbkV2ZW50OmV2ZW50XSkgewogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJh
ZyhQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBw
YWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VDbGllbnQoKSkpOworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLmV2ZW50TWF5U3RhcnREcmFnKFBs
YXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIFtbc2Vs
ZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRdLCBwYWdlLT5jaHJvbWUoKS5wbGF0Zm9ybVBhZ2VD
bGllbnQoKSkpOwogI2VuZGlmCiAgICAgICAgICAgICB9IGVsc2UgaWYgKFtoaXRIVE1MVmlldyBf
aXNTY3JvbGxCYXJFdmVudDpldmVudF0pCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsK
QEAgLTM4MDQsNyArMzgwNCw3IEBAIC0gKEJPT0wpc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0Zv
ckV2ZW4KICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgICAgICAgICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgewogICAgICAgICAgICAgICAg
IGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuZXZlbnRNYXlTdGFydERyYWcoUGxh
dGZvcm1FdmVudEZhY3Rvcnk6OmNyZWF0ZVBsYXRmb3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+
Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5ldmVudE1heVN0YXJ0RHJhZyhQbGF0Zm9y
bUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBbW3NlbGYgX3dl
YlZpZXddIF9wcmVzc3VyZUV2ZW50XSwgcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50
KCkpKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9z
ZXRNb3VzZURvd25FdmVudDpuaWxdOwpAQCAtMzg0MSw3ICszODQxLDYgQEAgLSAodm9pZCltb3Vz
ZURvd246KFdlYkV2ZW50ICopZXZlbnQKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEwMDAKICAgICBbW1tzZWxmIF93ZWJWaWV3XSBf
YWN0aW9uTWVudUNvbnRyb2xsZXJdIHdlYlZpZXc6W3NlbGYgX3dlYlZpZXddIHdpbGxIYW5kbGVN
b3VzZURvd246ZXZlbnRdOwotICAgIFtbW3NlbGYgX3dlYlZpZXddIF9pbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyXSB3ZWJWaWV3OltzZWxmIF93ZWJWaWV3XSB3aWxsSGFuZGxlTW91c2VEb3duOmV2
ZW50XTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMzg3Miw3ICszODcxLDcgQEAg
LSAodm9pZCltb3VzZURvd246KFdlYkV2ZW50ICopZXZlbnQKICAgICAgICAgICAgIC8vIExldCBX
ZWJDb3JlIGdldCBhIGNoYW5jZSB0byBkZWFsIHdpdGggdGhlIGV2ZW50LiBUaGlzIHdpbGwgY2Fs
bCBiYWNrIHRvIHVzCiAgICAgICAgICAgICAvLyB0byBzdGFydCB0aGUgYXV0b3Njcm9sbCB0aW1l
ciBpZiBhcHByb3ByaWF0ZS4KICAgICAgICAgICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFuZGxl
cigpLm1vdXNlRG93bihldmVudCk7CisgICAgICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhh
bmRsZXIoKS5tb3VzZURvd24oZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZlbnRd
KTsKICAgICAgICAgfQogICAgIH0KICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKQEAgLTM5
MjUsNyArMzkyNCw3IEBAIC0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKICAg
ICBpZiAoIV9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cykgewogICAgICAgICBp
ZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewogICAgICAgICAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5G
cmFtZSgpLmV2ZW50SGFuZGxlcigpLm1vdXNlRHJhZ2dlZChldmVudCk7CisgICAgICAgICAgICAg
ICAgcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubW91c2VEcmFnZ2VkKGV2ZW50LCBb
W3NlbGYgX3dlYlZpZXddIF9wcmVzc3VyZUV2ZW50XSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTQwNjQsOCArNDA2MywxMyBAQCAtICh2b2lkKW1vdXNlVXA6KFdlYkV2ZW50ICopZXZlbnQKIAog
ICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworI2lmIFBM
QVRGT1JNKElPUykKICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigp
Lm1vdXNlVXAoZXZlbnQpOworI2Vsc2UKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmV2
ZW50SGFuZGxlcigpLm1vdXNlVXAoZXZlbnQsIFtbc2VsZiBfd2ViVmlld10gX3ByZXNzdXJlRXZl
bnRdKTsKKyNlbmRpZgorICAgICAgICB9CiAgICAgfQogI2lmICFQTEFURk9STShJT1MpCiAgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwpAQCAtNDA4MSw2ICs0MDg1LDI1
IEBAIC0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50CiB9CiAjZW5kaWYKIAorLSAo
dm9pZClwcmVzc3VyZUNoYW5nZVdpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisjaWYgZGVm
aW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAw
MworICAgIE5TRXZlbnQgKmxhc3RQcmVzc3VyZUV2ZW50ID0gW1tzZWxmIF93ZWJWaWV3XSBfcHJl
c3N1cmVFdmVudF07CisgICAgaWYgKGV2ZW50ID09IGxhc3RQcmVzc3VyZUV2ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZXZlbnQucGhhc2UgIT0gTlNFdmVudFBoYXNlQ2hhbmdlZCAm
JiBldmVudC5waGFzZSAhPSBOU0V2ZW50UGhhc2VCZWdhbiAmJiBldmVudC5waGFzZSAhPSBOU0V2
ZW50UGhhc2VFbmRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEZyYW1lPiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLnByZXNzdXJlQ2hhbmdl
KGV2ZW50LCBsYXN0UHJlc3N1cmVFdmVudCk7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBfc2V0UHJl
c3N1cmVFdmVudDpldmVudF07CisjZW5kaWYKK30KKwogI2lmICFQTEFURk9STShJT1MpCiAvLyBy
ZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRob2QgaXMgdGhlIHdheSB3ZSB0ZWxsIEFwcEtpdCB0
aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcKIC8vIHRvIGJlIGluIHRoZSBrZXkgbG9vcCBldmVu
IHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMiIGlzIG5vdCBvbi4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDEy
IEBAIEBpbnRlcmZhY2UgV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciAKICAgICBSZXRhaW5Q
dHI8RERBY3Rpb25Db250ZXh0PiBfY3VycmVudEFjdGlvbkNvbnRleHQ7CiAgICAgQk9PTCBfaXNT
aG93aW5nVGV4dEluZGljYXRvcjsKICAgICBCT09MIF9oYXNBY3RpdmF0ZWRBY3Rpb25Db250ZXh0
OworICAgIEJPT0wgX2NvbnRlbnRQcmV2ZW50c0RlZmF1bHQ7CiB9CiAKIC0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHJlY29nbml6ZXI6KE5TSW1tZWRp
YXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyOwog
LSAodm9pZCl3ZWJWaWV3Q2xvc2VkOwogCi0tICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJW
aWV3IHdpbGxIYW5kbGVNb3VzZURvd246KE5TRXZlbnQgKilldmVudDsKIC0gKHZvaWQpd2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXcgZGlkSGFuZGxlU2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVu
dDsKIAogLSAoTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFj
dGlvblJlY29nbml6ZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCShyZXZpc2lvbiAxODM4OTEp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDEzIEBAIFNPRlRfTElOS19DTEFTUyhR
dWlja0xvb2tVSSwgUUxQcmV2aWV3TWUKIEBpbnRlcmZhY2UgV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlciAoKSA8UUxQcmV2aWV3TWVudUl0ZW1EZWxlZ2F0ZT4KIEBlbmQKIAorQGludGVyZmFj
ZSBXZWJBbmltYXRpb25Db250cm9sbGVyIDogTlNPYmplY3QgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4geworfQorQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0
aW9uQ29udHJvbGxlcgorQGVuZAorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQGltcGxl
bWVudGF0aW9uIFdlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIKQEAgLTk0LDEyICsxMDEsNiBA
QCAtICh2b2lkKXdlYlZpZXdDbG9zZWQKICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBuaWw7
CiB9CiAKLS0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgd2lsbEhhbmRsZU1vdXNl
RG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW3NlbGYgX2NsZWFySW1tZWRpYXRlQWN0aW9u
U3RhdGVdOwotICAgIFtfd2ViVmlldyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpU
ZXh0SW5kaWNhdG9yRGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKLX0KLQogLSAodm9pZCl3
ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBkaWRIYW5kbGVTY3JvbGxXaGVlbDooTlNFdmVudCAq
KWV2ZW50CiB7CiAgICAgW19jdXJyZW50UUxQcmV2aWV3TWVudUl0ZW0gY2xvc2VdOwpAQCAtMTM2
LDYgKzEzNyw3IEBAIC0gKHZvaWQpX2NsZWFySW1tZWRpYXRlQWN0aW9uU3RhdGUKICAgICBfdHlw
ZSA9IFdlYkltbWVkaWF0ZUFjdGlvbk5vbmU7CiAgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0g
bmlsOwogICAgIF9jdXJyZW50UUxQcmV2aWV3TWVudUl0ZW0gPSBuaWw7CisgICAgX2NvbnRlbnRQ
cmV2ZW50c0RlZmF1bHQgPSBOTzsKIH0KIAogLSAodm9pZClwZXJmb3JtSGl0VGVzdEF0UG9pbnQ6
KE5TUG9pbnQpdmlld1BvaW50CkBAIC0xNDQsNiArMTQ2LDEwIEBAIC0gKHZvaWQpcGVyZm9ybUhp
dFRlc3RBdFBvaW50OihOU1BvaW50KXYKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0
dXJuOwogICAgIF9oaXRUZXN0UmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS5oaXRU
ZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludCh2aWV3UG9pbnQpKTsKKyAgICBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLnNldEltbWVkaWF0ZUFjdGlvblN0YWdlKEltbWVkaWF0ZUFjdGlvblN0YWdl
OjpQZXJmb3JtZWRIaXRUZXN0KTsKKworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gX2hpdFRl
c3RSZXN1bHQuaW5uZXJFbGVtZW50KCkpCisgICAgICAgIF9jb250ZW50UHJldmVudHNEZWZhdWx0
ID0gZWxlbWVudC0+ZGlzcGF0Y2hNb3VzZUZvcmNlV2lsbEJlZ2luKCk7CiB9CiAKICNwcmFnbWEg
bWFyayBOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUKQEAgLTE4OCw2
ICsxOTQsMTMgQEAgLSAodm9pZClpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyRGlkVXBkYQogICAg
IGlmIChpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyICE9IF9pbW1lZGlhdGVBY3Rpb25SZWNvZ25p
emVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbW1tb
X3dlYlZpZXcgX3NlbGVjdGVkT3JNYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBf
ZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRpYXRlQWN0
aW9uU3RhZ2U6OkFjdGlvblVwZGF0ZWQpOworICAgIGlmIChfY29udGVudFByZXZlbnRzRGVmYXVs
dCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yQW5p
bWF0aW9uUHJvZ3Jlc3M6W2ltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgYW5pbWF0aW9uUHJvZ3Jl
c3NdXTsKIH0KIApAQCAtMTk2LDYgKzIwOSwxMCBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJl
Y29nbml6ZXJEaWRDYW5jCiAgICAgaWYgKGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgIT0gX2lt
bWVkaWF0ZUFjdGlvblJlY29nbml6ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtbW1tfd2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVW
aWV3XSBkb2N1bWVudFZpZXddIF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUpCisgICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1tZWRp
YXRlQWN0aW9uU3RhZ2U6OkFjdGlvbkNhbmNlbGxlZCk7CisKICAgICBbX3dlYlZpZXcgX3NldFRl
eHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzczowXTsKICAgICBbc2VsZiBfY2xlYXJJbW1lZGlh
dGVBY3Rpb25TdGF0ZV07CiAgICAgW193ZWJWaWV3IF9jbGVhclRleHRJbmRpY2F0b3JXaXRoQW5p
bWF0aW9uOlRleHRJbmRpY2F0b3JEaXNtaXNzYWxBbmltYXRpb246Ok5vbmVdOwpAQCAtMjA3LDYg
KzIyNCwxMSBAQCAtICh2b2lkKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDb21wCiAgICAg
aWYgKGltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXIgIT0gX2ltbWVkaWF0ZUFjdGlvblJlY29nbml6
ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtbW1tf
d2ViVmlldyBfc2VsZWN0ZWRPck1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIF9m
cmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS5zZXRJbW1lZGlhdGVBY3Rpb25TdGFnZShJbW1lZGlhdGVBY3Rp
b25TdGFnZTo6QWN0aW9uQ29tcGxldGVkKTsKKwogICAgIFtfd2ViVmlldyBfc2V0VGV4dEluZGlj
YXRvckFuaW1hdGlvblByb2dyZXNzOjFdOwogICAgIFtfd2ViVmlldyBfc2V0TWFpbnRhaW5zSW5h
Y3RpdmVTZWxlY3Rpb246Tk9dOwogfQpAQCAtMjE1LDYgKzIzNywxMSBAQCAtICh2b2lkKWltbWVk
aWF0ZUFjdGlvblJlY29nbml6ZXJEaWRDb21wCiAKIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFu
aW1hdGlvbkNvbnRyb2xsZXI+KV9kZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcgogeworICAgIGlm
IChfY29udGVudFByZXZlbnRzRGVmYXVsdCkgeworICAgICAgICBSZXRhaW5QdHI8V2ViQW5pbWF0
aW9uQ29udHJvbGxlcj4gZHVtbXlDb250cm9sbGVyID0gW1tXZWJBbmltYXRpb25Db250cm9sbGVy
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgcmV0dXJuIGR1bW15Q29udHJvbGxlci5nZXQoKTsKKyAg
ICB9CisKICAgICBOU1VSTCAqdXJsID0gX2hpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7
CiAgICAgTlNTdHJpbmcgKmFic29sdXRlVVJMU3RyaW5nID0gW3VybCBhYnNvbHV0ZVN0cmluZ107
CiAgICAgaWYgKHVybCAmJiBfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpIHsKQEAgLTI2NSw2
ICsyOTIsMTEgQEAgLSAodm9pZClfdXBkYXRlSW1tZWRpYXRlQWN0aW9uSXRlbQogCiAgICAgaWQg
PE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4gZGVmYXVsdEFuaW1hdGlvbkNv
bnRyb2xsZXIgPSBbc2VsZiBfZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXJdOwogCisgICAgaWYg
KF9jb250ZW50UHJldmVudHNEZWZhdWx0KSB7CisgICAgICAgIFtfaW1tZWRpYXRlQWN0aW9uUmVj
b2duaXplciBzZXRBbmltYXRpb25Db250cm9sbGVyOmRlZmF1bHRBbmltYXRpb25Db250cm9sbGVy
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEFsbG93IGNsaWVudHMgdGhlIG9w
cG9ydHVuaXR5IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltbWVkaWF0ZSBhY3Rpb24uCiAgICAg
aWQgY3VzdG9tQ2xpZW50QW5pbWF0aW9uQ29udHJvbGxlciA9IG5pbDsKICAgICBpZiAoW1tfd2Vi
VmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3Omlt
bWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXJGb3JIaXRUZXN0UmVzdWx0OndpdGhUeXBl
OildKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAx
ODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTkxMCw2ICs5MTAsNyBAQCAtICh2b2lkKV9jb21tb25Jbml0aWFsaXphdGlvbldp
dGhGcmFtZU5hCiAgICAgICAgIFJldGFpblB0cjxOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyPiByZWNvZ25pemVyID0gYWRvcHROUyhbKE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXIgKilbZ2VzdHVyZUNsYXNzIGFsbG9jXSBpbml0V2l0aFRhcmdldDpuaWwgYWN0aW9u
Ok5VTExdKTsKICAgICAgICAgX3ByaXZhdGUtPmltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgPSBb
W1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoV2ViVmlldzpzZWxm
IHJlY29nbml6ZXI6cmVjb2duaXplci5nZXQoKV07CiAgICAgICAgIFtyZWNvZ25pemVyIHNldERl
bGVnYXRlOl9wcml2YXRlLT5pbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyXTsKKyAgICAgICAgW3Jl
Y29nbml6ZXIgc2V0RGVsYXlzUHJpbWFyeU1vdXNlQnV0dG9uRXZlbnRzOk5PXTsKICAgICB9CiAj
ZW5kaWYKIApAQCAtODYwMSw2ICs4NjAyLDIwIEBAIC0gKGlkKV9hbmltYXRpb25Db250cm9sbGVy
Rm9yRGljdGlvbmFyeUwKIH0KICNlbmRpZiAvLyBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTAwMAogCistIChOU0V2ZW50ICopX3ByZXNzdXJlRXZlbnQKK3sKKyAgICByZXR1
cm4gX3ByaXZhdGUtPnByZXNzdXJlRXZlbnQ7Cit9CisKKy0gKHZvaWQpX3NldFByZXNzdXJlRXZl
bnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChldmVudCA9PSBfcHJpdmF0ZS0+cHJlc3N1
cmVFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW19wcml2YXRlLT5wcmVzc3VyZUV2ZW50
IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5wcmVzc3VyZUV2ZW50ID0gW2V2ZW50IHJldGFpbl07
Cit9CisKIC0gKHZvaWQpX3NldFRleHRJbmRpY2F0b3I6KFRleHRJbmRpY2F0b3ImKXRleHRJbmRp
Y2F0b3IKIHsKICAgICBbc2VsZiBfc2V0VGV4dEluZGljYXRvcjp0ZXh0SW5kaWNhdG9yIHdpdGhM
aWZldGltZTpUZXh0SW5kaWNhdG9yTGlmZXRpbWU6OlBlcm1hbmVudF07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
NSw2ICsxNzUsNyBAQCBAaW50ZXJmYWNlIFdlYlZpZXdQcml2YXRlIDogTlNPYmplY3QgewogICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93PiB0ZXh0SW5kaWNh
dG9yV2luZG93OwogICAgIEJPT0wgaGFzSW5pdGlhbGl6ZWRMb29rdXBPYnNlcnZlcjsKICAgICBS
ZXRhaW5QdHI8V2ViV2luZG93VmlzaWJpbGl0eU9ic2VydmVyPiB3aW5kb3dWaXNpYmlsaXR5T2Jz
ZXJ2ZXI7CisgICAgTlNFdmVudCAqcHJlc3N1cmVFdmVudDsKICNlbmRpZiAvLyBQTEFURk9STShN
QUMpCiAKICAgICBCT09MIHNob3VsZE1haW50YWluSW5hY3RpdmVTZWxlY3Rpb247CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0JKHJldmlzaW9uIDE4Mzg5MSkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE4NywxMCArMTg3LDEzIEBAIC0gKHZvaWQpZGVhbGxvYwogI2VuZGlmCiAgICAgW2lu
c3BlY3RvciByZWxlYXNlXTsKICAgICBbY3VycmVudE5vZGVIaWdobGlnaHQgcmVsZWFzZV07Ci0j
aWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
MTAwMAorI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTAwMAogICAgIFthY3Rpb25NZW51Q29udHJvbGxlciByZWxlYXNlXTsKICAgICBb
aW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciByZWxlYXNlXTsKICNlbmRpZgorICAgIFtwcmVzc3Vy
ZUV2ZW50IHJlbGVhc2VdOworI2VuZGlmCiAgICAgW2hvc3RXaW5kb3cgcmVsZWFzZV07CiAgICAg
W3BvbGljeURlbGVnYXRlRm9yd2FyZGVyIHJlbGVhc2VdOwogICAgIFtVSURlbGVnYXRlRm9yd2Fy
ZGVyIHJlbGVhc2VdOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJ
bnRlcm5hbC5oCShyZXZpc2lvbiAxODM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5LDggQEAgQGlu
dGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRlcm5hbAogLSAoV2ViQWN0aW9uTWVudUNv
bnRyb2xsZXIgKilfYWN0aW9uTWVudUNvbnRyb2xsZXI7CiAtIChXZWJJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyICopX2ltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXI7CiAjZW5kaWYKKy0gKE5TRXZl
bnQgKilfcHJlc3N1cmVFdmVudDsKKy0gKHZvaWQpX3NldFByZXNzdXJlRXZlbnQ6KE5TRXZlbnQg
KilldmVudDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkg
JiYgIVBMQVRGT1JNKElPUykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4Mzg5MSkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE1
LTA1LTA2ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBOZXcgZm9y
Y2UtcmVsYXRlZCBET00gZXZlbnRzIHNob3VsZCBmaXJlIGluIFdLMSB2aWV3cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjYzCisgICAgICAgIC1h
bmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMjAyODE4ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQbGF0Zm9ybUV2ZW50
RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KCkgdGFrZXMgdGhlIGxhc3QgcHJlc3N1
cmUgZXZlbnQgCisgICAgICAgIG5vdy4gSnVzdCBzZW5kIG5pbC4gCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW06CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpidWlsZEFuZFBlcmZvcm1UZXN0KToKKwogMjAxNS0wNS0wNiAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBEbyBub3QgbGluayB0b29s
cyB0byBXZWJLaXQyLmZyYW1ld29yawpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9t
YWMvTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9tYWMvTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0JKHJldmlzaW9uIDE4
Mzg5MSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvbWFjL01lbnVUeXBlc0Zvck1vdXNl
RXZlbnRzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIGJ1
aWxkQW5kUGVyZm9ybVRlc3QoTlNFdmVudFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpY2tDb3VudDowCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlc3N1cmU6MF07CiAgICAgCi0gICAgYXV0byBwbWUgPSBXZWJDb3JlOjpQbGF0Zm9y
bUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCB3ZWJWaWV3Lmdl
dCgpKTsKKyAgICBhdXRvIHBtZSA9IFdlYkNvcmU6OlBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVh
dGVQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIG5pbCwgd2ViVmlldy5nZXQoKSk7CiAgICAgCiAg
ICAgRVhQRUNUX0VRKGV4cGVjdGVkQnV0dG9uLCBwbWUuYnV0dG9uKCkpOwogICAgIEVYUEVDVF9U
UlVFKCFtb2RpZmllckZsYWdzIHx8IHBtZS5tb2RpZmllckZsYWdzKCkgJiBtb2RpZmllckZsYWdz
KTsK
</data>
<flag name="review"
          id="277375"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>