<?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>30246</bug_id>
          
          <creation_ts>2009-10-09 01:05:03 -0700</creation_ts>
          <short_desc>Factor HistoryController out of FrameLoader</short_desc>
          <delta_ts>2009-10-09 19:27:30 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>29947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>153630</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 01:05:03 -0700</bug_when>
    <thetext>HistoryController is in charge of managing the current / previous / provisional HistoryItems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153631</commentid>
    <comment_count>1</comment_count>
      <attachid>40936</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 01:08:05 -0700</bug_when>
    <thetext>Created attachment 40936
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153632</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 01:09:14 -0700</bug_when>
    <thetext>This patch is larger than I would have liked, but it wasn&apos;t clear to me how to do this in a smaller step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153698</commentid>
    <comment_count>3</comment_count>
      <attachid>40936</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-09 09:40:20 -0700</bug_when>
    <thetext>Comment on attachment 40936
Patch v1

3797      if (documentLoader()-&gt;urlForHistory().isEmpty())
 3833     if (m_frame-&gt;loader()-&gt;documentLoader()-&gt;urlForHistory().isEmpty())

I still kinda think m_current and m_previous, etc, should be m_currentItem and m_previousItem, but they&apos;re also OK as is.  Likewise current() to currentItem().  This could be done in a separate change if you agree.

When does the Frame -&gt; FrameLoader connection break?
What about FrameLoader -&gt; DocumentLoader?  Could those broken connections cause new NULL pointer derefs with this change?

We need a LOG macro that knows how to handle %S for String or something:
LOG(PageCache, &quot;Not restoring page for %s from back/forward cache because cache entry has expired&quot;, history()-&gt;provisional()-&gt;url().string().ascii().data());

Some places, like in:
4253 void HistoryController::updateForStandardLoad()

grab m_frame-&gt;loader() a zillion times.  Seems that HistoryController should have a frameLoader() method do that that?  And maybe a documentLoader() method? frameLoaderClient() too?  Or in updateForStandardLoad we could use a frameLoader local variable...

HistoryController still grabs at FrameLoader a lot.  I wonder if it makes more sense for it to have an m_frameLoader instead of an m_frame.  Certainly if m_frame ever lost its loader() pointer HistoryController would be *very* unhappy.

Yeah, it&apos;s a little strange that HistoryController has an m_frame pointer, but that Frame does not have a HistoryController pointer:
4373             parentFrame-&gt;loader()-&gt;history()-&gt;m_current-&gt;setChildItem(createHistoryItem(true));
Seems like a strange love triangle going on here.  Someone&apos;s gonna get hurt.

OK.  As far as I can tell you have not caused any harm with this change. :)  This sort of split is HUGELY HELPFUL.  I&apos;m not sure the architecture is perfect yet, but I know you&apos;re workign on this more and I&apos;m happy to accept this as a first-step.  I think my primary concern with this patch is the History -&gt; m_frame, Frame -&gt; FrameLoader, FrameLoader -&gt; History triangle.  Seems like History wants to be either tied to FrameLoader or Frame, but not in a triangle like this.

r=me as is, but please consider the above comments for this and future work on this new class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153699</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-09 09:41:26 -0700</bug_when>
    <thetext>CCing loader folks so they see your patch and my comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153701</commentid>
    <comment_count>5</comment_count>
      <attachid>40936</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-09 09:43:16 -0700</bug_when>
    <thetext>Comment on attachment 40936
Patch v1

&gt; +void HistoryController::setCurrent(HistoryItem* item)
&gt; +{
&gt; +    m_current = item;
&gt; +}

I applaud the aim of brevity, and leaving out things that are unnecessary or determined by context.

But even given that I don&apos;t think these function and data member names are clear enough when they contain adjectives like &quot;current&quot; and &quot;provisional&quot; but no nouns. I think you need a noun like &quot;item&quot; or &quot;location&quot;, otherwise it&apos;s just too hard to read. Maybe we can come up with another creative way to make this brief. Is there a good single word for &quot;current item&quot;?

Many of the calls do include the phrase &quot;current item&quot;, so I think just restoring the word &quot;item&quot; is the easiest way to do it.

I also don&apos;t think that &quot;provisional&quot; is really a history concept -- but I suppose there&apos;s no simple way to avoid that, though.

&gt; +void HistoryController::clearPrevious()
&gt; +{
&gt; +    m_previous = 0;
&gt; +}

This seems a bit too low-level to be a good abstraction. Maybe a different name would work better? Maybe this is something we can improve after the classes are split?

One of the problems with the name is that it does not &quot;clear the previous item&quot;, it &quot;clears the pointer to the previous item&quot;, which does not quite seem to be the same thing. That&apos;s a problem with using &quot;clear&quot; as a synonym for &quot;set to zero&quot;.

I was going to set this to review-, but Eric already set it to review+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153704</commentid>
    <comment_count>6</comment_count>
      <attachid>40936</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-09 09:51:48 -0700</bug_when>
    <thetext>Comment on attachment 40936
Patch v1

You should feel welcome to set it to r-. :)  I kinda view any r- as trumping an r+. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153705</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-09 09:55:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; You should feel welcome to set it to r-. :)  I kinda view any r- as trumping an
&gt; r+. :)

I trust Adam to read our feedback and do the right thing. I don&apos;t think the numeric sign of the review matters much in this case :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153706</commentid>
    <comment_count>8</comment_count>
      <attachid>40936</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-10-09 09:55:51 -0700</bug_when>
    <thetext>Comment on attachment 40936
Patch v1

I&apos;m not going to be as forgiving as Eric (who r+&apos;ed) or Darin (who noted his objections and intention to r-, but didn&apos;t change the flag)

I think the brevity is too much and hurts future readability.  Please address Darin&apos;s comments.  

Otherwise, looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153707</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-10-09 09:56:17 -0700</bug_when>
    <thetext>And of course the switch to r- happened while I was reviewing myself.  *sigh*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153708</commentid>
    <comment_count>10</comment_count>
      <attachid>40936</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 09:57:07 -0700</bug_when>
    <thetext>Comment on attachment 40936
Patch v1

&gt; Maybe we can come up with another creative way to make
&gt; this brief. Is there a good single word for &quot;current item&quot;?

I&apos;ll change this to m_currentItem.

&gt; + HistoryController::clearPrevious
&gt;
&gt; This seems a bit too low-level to be a good abstraction. Maybe a different name
&gt; would work better? Maybe this is something we can improve after the classes are
&gt; split?

Yeah, I&apos;d like to remove the setCurrent / etc methods, but that required me to
tackle loadItem, which I wanted to defer.  I can change this to
&quot;updateForFrameLoadCompleted&quot; since it&apos;s only ever called at that time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153709</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 09:57:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; When does the Frame -&gt; FrameLoader connection break?

As far as I know, this connection never breaks.  FrameLoader is just a
component of Frame that&apos;s broken into it&apos;s own object.

&gt; What about FrameLoader -&gt; DocumentLoader?  Could those broken connections cause
&gt; new NULL pointer derefs with this change?

If these cases exist, then they would already be bugs.  I haven&apos;t changed
anything here.

&gt; We need a LOG macro that knows how to handle %S for String or something:
&gt; LOG(PageCache, &quot;Not restoring page for %s from back/forward cache because cache
&gt; entry has expired&quot;, history()-&gt;provisional()-&gt;url().string().ascii().data());

We should handle this in a separate bug.

&gt; Some places, like in:
&gt; 4253 void HistoryController::updateForStandardLoad()
&gt; 
&gt; grab m_frame-&gt;loader() a zillion times.  Seems that HistoryController should
&gt; have a frameLoader() method do that that?  And maybe a documentLoader() method?
&gt; frameLoaderClient() too?  Or in updateForStandardLoad we could use a
&gt; frameLoader local variable...

We can do this, but I&apos;d prefer to it in another patch.

&gt; HistoryController still grabs at FrameLoader a lot.  I wonder if it makes more
&gt; sense for it to have an m_frameLoader instead of an m_frame.  Certainly if
&gt; m_frame ever lost its loader() pointer HistoryController would be *very*
&gt; unhappy.

We can do that, but then it will ask for m_loader-&gt;frame()-&gt;page(), which seems
like the same thing but backwards.

&gt; Yeah, it&apos;s a little strange that HistoryController has an m_frame pointer, but
&gt; that Frame does not have a HistoryController pointer:

I considered putting the HistoryController on Frame, but it&apos;s used almost
exclusively by the FrameLoader.  It seems like more a part of FrameLoader than
of Frame, but these things are hard to tell because the objects all have the
same lifetime.

&gt; I think my primary concern with this patch is the History -&gt;
&gt; m_frame, Frame -&gt; FrameLoader, FrameLoader -&gt; History triangle.  Seems like
&gt; History wants to be either tied to FrameLoader or Frame, but not in a triangle
&gt; like this.

We can paper over this by changing the names of the accessors, but the code is
going to do the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153710</commentid>
    <comment_count>12</comment_count>
      <attachid>40952</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 10:15:07 -0700</bug_when>
    <thetext>Created attachment 40952
HistoryController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153711</commentid>
    <comment_count>13</comment_count>
      <attachid>40952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-09 10:24:10 -0700</bug_when>
    <thetext>Comment on attachment 40952
HistoryController

&gt; -PassRefPtr&lt;HistoryItem&gt; FrameLoader::createHistoryItem(bool useOriginal)
&gt; +PassRefPtr&lt;HistoryItem&gt; HistoryController::createHistoryItem(bool useOriginal)

Elsewhere you removed the word &quot;history&quot; from the phrase &quot;history item&quot; since this is the history controller. I think you should do that here too. Except maybe there&apos;s ambiguity with back/forward item?

&gt; -PassRefPtr&lt;HistoryItem&gt; FrameLoader::createHistoryItemTree(Frame* targetFrame, bool clipAtTarget)
&gt; +PassRefPtr&lt;HistoryItem&gt; HistoryController::createHistoryItemTree(Frame* targetFrame, bool clipAtTarget)

Ditto.

You can consider in some cases including the entire class as a member of the owner class. The reason we don&apos;t do that in Frame itself to avoid header dependencies -- it&apos;s probably OK to have a few more memory blocks allocated to avoid recompiling every files that includes FrameLoader.h if HistoryController.h changes. But if we plan to have FrameLoader.h include HistoryController.h then I think there&apos;s no reason to use a separate memory block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153715</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 10:52:14 -0700</bug_when>
    <thetext>&gt; Elsewhere you removed the word &quot;history&quot; from the phrase &quot;history item&quot; since
&gt; this is the history controller. I think you should do that here too. Except
&gt; maybe there&apos;s ambiguity with back/forward item?

Will do.

&gt; You can consider in some cases including the entire class as a member of the
&gt; owner class.

I did this originally, but I ran into costness problems.  For example, the history access can&apos;t be const any more, but it&apos;s called from some const methods.  I can fix that with const_cast or mutable, but I wasn&apos;t sure which was the less of the two evils.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153719</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-09 10:58:08 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I can fix that with const_cast or mutable, but I wasn&apos;t sure which
&gt; was the less of the two evils.

mutable is</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153720</commentid>
    <comment_count>16</comment_count>
      <attachid>40955</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 11:05:43 -0700</bug_when>
    <thetext>Created attachment 40955
HistoryController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153721</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 11:06:48 -0700</bug_when>
    <thetext>I need to get on a train, but I&apos;ve tried to address all your feedback in the above patch.  I also noticed that some of the methods could be made private, so I did that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153832</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-10-09 19:27:30 -0700</bug_when>
    <thetext>Committed r49413: &lt;http://trac.webkit.org/changeset/49413&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40936</attachid>
            <date>2009-10-09 01:08:05 -0700</date>
            <delta_ts>2009-10-09 10:15:03 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-30246-20091009010803.patch</filename>
            <type>text/plain</type>
            <size>61755</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmMxN2VlZi4uZWE1MmZmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAwOS0xMC0wOSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBIaXN0b3J5Q29udHJvbGxlciBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjQ2CisK
KyAgICAgICAgSGlzdG9yeUNvbnRyb2xsZXIgaXMgaW4gY2hhcmdlIG9mIG1hbmFnaW5nIHRoZSBj
dXJyZW50IC8gcHJldmlvdXMgLworICAgICAgICBwcm92aXNpb25hbCBIaXN0b3J5SXRlbXMuICBU
aGUgc3BsaXQgaXNuJ3QgcGVyZmVjdCwgYnV0IGl0J3MgYSBwbGFjZSB0bworICAgICAgICBzdGFy
dC4gIEknbGwgbW92ZSBIaXN0b3J5Q29udHJvbGxlciBpbnRvIGl0cyBvd24gZmlsZSBpbiBhbm90
aGVyIHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6
Okhpc3RvcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVy
Ojp+SGlzdG9yeUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbG9zZVVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpzZXRQcm92aXNpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OnNjcm9sbFRvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmRpZEZpcnN0TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rv
cnlDb250cm9sbGVyOjpjbGVhclByZXZpb3VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpmcmFtZUxvYWRDb21wbGV0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6
OmRldGFjaEZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnJlY2Vp
dmVkTWFpblJlc291cmNlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmNv
bnRpbnVlRnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFmdGVyTmF2aWdhdGlvblBvbGljeSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6YWRkSGlzdG9yeUl0ZW1Gb3JGcmFn
bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZFByb3Zpc2lv
bmFsSXRlbUZyb21DYWNoZWRQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpz
aG91bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5
Q29udHJvbGxlcjo6Y3JlYXRlSGlzdG9yeUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNoZWNrRGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5Q29udHJvbGxlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVIaXN0b3J5SXRlbVRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVTY3JvbGxQb3Np
dGlvbkFuZFZpZXdTdGF0ZVRvSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJv
bGxlcjo6cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjppbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpzYXZlRG9jdW1lbnRTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZEl0ZW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3Rv
cnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0
b3J5Q29udHJvbGxlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclN0YW5kYXJkTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVs
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JSZWRp
cmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlRm9yQW5jaG9yU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6Okhp
c3RvcnlDb250cm9sbGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6c2V0Q3VycmVudFRpdGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpkaWRDaGFuZ2VUaXRsZSk6CisgICAgICAgICogbG9hZGVyL0Zy
YW1lTG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6Y3VycmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6cHJvdmlzaW9uYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnBvbGljeUNoZWNrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXI6Omhpc3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXI6OmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpOgorICAgICAgICAqIHBhZ2UvUGFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpnb1RvSXRlbSk6CisKIDIwMDktMTAtMDgg
IEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNv
cmUvV2ViQ29yZS5iYXNlLmV4cAppbmRleCBmOWUxNTZlLi5iOWNlYzQ5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBA
IC0xNjIsMTUgKzE2MiwxMSBAQCBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTRzdG9wQWxsTG9h
ZGVyc0VOU18xNERhdGFiYXNlUG9saWN5RQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjE2ZGV0
YWNoRnJvbVBhcmVudEV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZsb2FkRnJhbWVSZXF1
ZXN0RVJLTlNfMTZGcmFtZUxvYWRSZXF1ZXN0RWJiTjNXVEYxMFBhc3NSZWZQdHJJTlNfNUV2ZW50
RUVFTlM1X0lOU185Rm9ybVN0YXRlRUVFCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMTdzdG9w
Rm9yVXNlckNhbmNlbEViCi1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMThjdXJyZW50SGlzdG9y
eUl0ZW1FdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIxbG9hZFVSTEludG9DaGlsZEZyYW1l
RVJLTlNfNEtVUkxFUktOU182U3RyaW5nRVBOU181RnJhbWVFCi1fX1pON1dlYkNvcmUxMUZyYW1l
TG9hZGVyMjFzZXRDdXJyZW50SGlzdG9yeUl0ZW1FTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFIaXN0
b3J5SXRlbUVFRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIyZmluZEZyYW1lRm9yTmF2aWdh
dGlvbkVSS05TXzEyQXRvbWljU3RyaW5nRQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIzaXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmVFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjIzdGltZU9m
TGFzdENvbXBsZXRlZExvYWRFdgogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjI2cmVsb2FkV2l0
aE92ZXJyaWRlRW5jb2RpbmdFUktOU182U3RyaW5nRQotX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjI2c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGVFdgotX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRl
cjM2c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtRVBOU18xMUhpc3RvcnlJdGVt
RQogX19aTjdXZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RF
UktOU18xNFN1YnN0aXR1dGVEYXRhRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVS
S05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfNlN0cmluZ0ViCiBfX1pON1dlYkNvcmUxMUZyYW1l
TG9hZGVyNGxvYWRFUktOU18xNVJlc291cmNlUmVxdWVzdEViCkBAIC0zODgsNiArMzg0LDcgQEAg
X19aTjdXZWJDb3JlMTZ0aHJlYWRHbG9iYWxEYXRhRXYKIF9fWk43V2ViQ29yZTE3Q3JlZGVudGlh
bFN0b3JhZ2UzZ2V0RVJLTlNfMTVQcm90ZWN0aW9uU3BhY2VFCiBfX1pON1dlYkNvcmUxN0RPTUlt
cGxlbWVudGF0aW9uMTRpc1RleHRNSU1FVHlwZUVSS05TXzZTdHJpbmdFCiBfX1pON1dlYkNvcmUx
N0dseXBoUGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291bnRFdgorX19aTjdXZWJDb3JlMTdI
aXN0b3J5Q29udHJvbGxlcjI2c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGVFdgogX19aTjdXZWJD
b3JlMTdIVE1MUGx1Z0luRWxlbWVudDExZ2V0TlBPYmplY3RFdgogX19aTjdXZWJDb3JlMTdlcXVh
bElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjdXZWJDb3JlMThkZXByZWNh
dGVkUGFyc2VVUkxFUktOU182U3RyaW5nRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDEwZGI4
N2YuLmExMGQ3ODUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAor
KysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTE2MywxMCArMTYzLDIwIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5SZWZlclRvUGFyZW50RnJhbWVFbmNvZGluZyhjb25zdCBG
cmFtZSogZnJhbWUsIGNvbnN0IEZyYW1lCiAgICAgcmV0dXJuIHBhcmVudEZyYW1lICYmIHBhcmVu
dEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MoZnJhbWUtPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkpOwogfQogCitIaXN0b3J5Q29udHJvbGxlcjo6SGlz
dG9yeUNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30K
KworSGlzdG9yeUNvbnRyb2xsZXI6On5IaXN0b3J5Q29udHJvbGxlcigpCit7Cit9CisKIEZyYW1l
TG9hZGVyOjpGcmFtZUxvYWRlcihGcmFtZSogZnJhbWUsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGll
bnQpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwg
bV9wb2xpY3lDaGVja2VyKGZyYW1lKQorICAgICwgbV9wb2xpY3lDaGVja2VyKG5ldyBQb2xpY3lD
aGVja2VyKGZyYW1lKSkKKyAgICAsIG1faGlzdG9yeShuZXcgSGlzdG9yeUNvbnRyb2xsZXIoZnJh
bWUpKQogICAgICwgbV9zdGF0ZShGcmFtZVN0YXRlQ29tbWl0dGVkUGFnZSkKICAgICAsIG1fbG9h
ZFR5cGUoRnJhbWVMb2FkVHlwZVN0YW5kYXJkKQogICAgICwgbV9kZWxlZ2F0ZUlzSGFuZGxpbmdQ
cm92aXNpb25hbExvYWRFcnJvcihmYWxzZSkKQEAgLTU2Myw3ICs1NzMsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpzdG9wKCkKIAogYm9vbCBGcmFtZUxvYWRlcjo6Y2xvc2VVUkwoKQogewotICAgIHNh
dmVEb2N1bWVudFN0YXRlKCk7CisgICAgaGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRTdGF0ZSgpOwog
ICAgIAogICAgIC8vIFNob3VsZCBvbmx5IHNlbmQgdGhlIHBhZ2VoaWRlIGV2ZW50IGhlcmUgaWYg
dGhlIGN1cnJlbnQgZG9jdW1lbnQgZXhpc3RzIGFuZCBoYXMgbm90IGJlZW4gcGxhY2VkIGluIHRo
ZSBwYWdlIGNhY2hlLiAgICAKICAgICBEb2N1bWVudCogY3VycmVudERvY3VtZW50ID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKQEAgLTgyNiw3ICs4MzYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpiZWdp
bihjb25zdCBLVVJMJiB1cmwsIGJvb2wgZGlzcGF0Y2gsIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4p
CiAgICAgICAgICAgICBkb2N1bWVudC0+cGFyc2VETlNQcmVmZXRjaENvbnRyb2xIZWFkZXIoZG5z
UHJlZmV0Y2hDb250cm9sKTsKICAgICB9CiAKLSAgICByZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwor
ICAgIGhpc3RvcnkoKS0+cmVzdG9yZURvY3VtZW50U3RhdGUoKTsKIAogICAgIGRvY3VtZW50LT5p
bXBsaWNpdE9wZW4oKTsKICAgICAKQEAgLTEwMTMsMTMgKzEwMjMsMTMgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6Y29tbWl0SWNvblVSTFRvSWNvbkRhdGFiYXNlKGNvbnN0IEtVUkwmIGljb24pCiAgICAg
aWNvbkRhdGFiYXNlKCktPnNldEljb25VUkxGb3JQYWdlVVJMKGljb24uc3RyaW5nKCksIG9yaWdp
bmFsUmVxdWVzdFVSTCgpLnN0cmluZygpKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6cmVzdG9y
ZURvY3VtZW50U3RhdGUoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZURvY3VtZW50
U3RhdGUoKQogewogICAgIERvY3VtZW50KiBkb2MgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAg
ICAgICAKICAgICBIaXN0b3J5SXRlbSogaXRlbVRvUmVzdG9yZSA9IDA7CiAgICAgCi0gICAgc3dp
dGNoIChsb2FkVHlwZSgpKSB7CisgICAgc3dpdGNoIChtX2ZyYW1lLT5sb2FkZXIoKS0+bG9hZFR5
cGUoKSkgewogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWxvYWQ6CiAgICAgICAgIGNhc2Ug
RnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW46CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlw
ZVNhbWU6CkBAIC0xMDMxLDcgKzEwNDEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9j
dW1lbnRTdGF0ZSgpCiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2Fy
ZDoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2VkQmFja0Zvcndh
cmRMaXN0OgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVTdGFuZGFyZDoKLSAgICAgICAgICAg
IGl0ZW1Ub1Jlc3RvcmUgPSBtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKTsgCisgICAgICAgICAg
ICBpdGVtVG9SZXN0b3JlID0gbV9jdXJyZW50LmdldCgpOyAKICAgICB9CiAgICAgCiAgICAgaWYg
KCFpdGVtVG9SZXN0b3JlKQpAQCAtMTIwMiwxMSArMTIxMiwyMSBAQCBLVVJMIEZyYW1lTG9hZGVy
Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1cm4gbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKIH0KIAordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
c2V0Q3VycmVudChIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBtX2N1cnJlbnQgPSBpdGVtOwor
fQorCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzZXRQcm92aXNpb25hbChIaXN0b3J5SXRlbSog
aXRlbSkKK3sKKyAgICBtX3Byb3Zpc2lvbmFsID0gaXRlbTsKK30KKwogdm9pZCBGcmFtZUxvYWRl
cjo6bG9hZFVSTEludG9DaGlsZEZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBy
ZWZlcmVyLCBGcmFtZSogY2hpbGRGcmFtZSkKIHsKICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7CiAK
LSAgICBIaXN0b3J5SXRlbSogcGFyZW50SXRlbSA9IGN1cnJlbnRIaXN0b3J5SXRlbSgpOworICAg
IEhpc3RvcnlJdGVtKiBwYXJlbnRJdGVtID0gaGlzdG9yeSgpLT5jdXJyZW50KCk7CiAgICAgRnJh
bWVMb2FkVHlwZSBsb2FkVHlwZSA9IHRoaXMtPmxvYWRUeXBlKCk7CiAgICAgRnJhbWVMb2FkVHlw
ZSBjaGlsZExvYWRUeXBlID0gRnJhbWVMb2FkVHlwZVJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3
YXJkTGlzdDsKIApAQCAtMTIyMiw3ICsxMjQyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZFVS
TEludG9DaGlsZEZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcmVyLAog
ICAgICAgICAgICAgLy8gdGhpcyBpcyBuZWVkZWQgaXMgUmFkYXIgMzIxMzU1Ni4KICAgICAgICAg
ICAgIHdvcmtpbmdVUkwgPSBLVVJMKFBhcnNlZFVSTFN0cmluZywgY2hpbGRJdGVtLT5vcmlnaW5h
bFVSTFN0cmluZygpKTsKICAgICAgICAgICAgIGNoaWxkTG9hZFR5cGUgPSBsb2FkVHlwZTsKLSAg
ICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5tX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0g
PSBjaGlsZEl0ZW07CisgICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5zZXRQcm92aXNpb25hbChjaGlsZEl0ZW0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ2
LDcgKzE1NjYsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhp
c0ZyYW1lKCkKICAgICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdv
cmtlcnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICNlbmRpZgogICAgICAgICAmJiAhbV9mcmFtZS0+
ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCi0gICAgICAgICYmIG1fY3VycmVudEhpc3Rv
cnlJdGVtCisgICAgICAgICYmIGhpc3RvcnkoKS0+Y3VycmVudCgpCiAgICAgICAgICYmICFtX3F1
aWNrUmVkaXJlY3RDb21pbmcKICAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmlzTG9hZGlu
Z0luQVBJU2Vuc2UoKQogICAgICAgICAmJiAhbV9kb2N1bWVudExvYWRlci0+aXNTdG9wcGluZygp
CkBAIC0xNjk3LDcgKzE3MTcsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpsb2dDYW5DYWNoZUZyYW1l
RGVjaXNpb24oaW50IGluZGVudExldmVsKQogI2VuZGlmCiAgICAgICAgIGlmIChtX2ZyYW1lLT5k
b2N1bWVudCgpLT51c2luZ0dlb2xvY2F0aW9uKCkpCiAgICAgICAgICAgICB7IFBDTE9HKCIgICAt
RnJhbWUgdXNlcyBHZW9sb2NhdGlvbiIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KLSAgICAgICAg
aWYgKCFtX2N1cnJlbnRIaXN0b3J5SXRlbSkKKyAgICAgICAgaWYgKCFoaXN0b3J5KCktPmN1cnJl
bnQoKSkKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1ObyBjdXJyZW50IGhpc3RvcnkgaXRlbSIp
OyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KICAgICAgICAgaWYgKG1fcXVpY2tSZWRpcmVjdENvbWlu
ZykKICAgICAgICAgICAgIHsgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsg
Y2Fubm90Q2FjaGUgPSB0cnVlOyB9CkBAIC0xNzc1LDcgKzE3OTUsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpzY3JvbGxUb0FuY2hvcihjb25zdCBLVVJMJiB1cmwpCiAgICAgfQogICAgIAogICAgIG1f
VVJMID0gdXJsOwotICAgIHVwZGF0ZUhpc3RvcnlGb3JBbmNob3JTY3JvbGwoKTsKKyAgICBoaXN0
b3J5KCktPnVwZGF0ZUZvckFuY2hvclNjcm9sbCgpOwogCiAgICAgLy8gSWYgd2Ugd2VyZSBpbiB0
aGUgYXV0b3Njcm9sbC9wYW5TY3JvbGwgbW9kZSB3ZSB3YW50IHRvIHN0b3AgaXQgYmVmb3JlIGZv
bGxvd2luZyB0aGUgbGluayB0byB0aGUgYW5jaG9yCiAgICAgbV9mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPnN0b3BBdXRvc2Nyb2xsVGltZXIoKTsKQEAgLTI0MTgsNyArMjQzOCw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IHBy
cENhY2hlZFBhZ2UpCiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBjYWNoZSB0
aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFjay9mb3J3YXJk
IGNhY2hlLgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSB3ZSBrbm93IGZv
ciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBiZSBsb2FkZWQuCi0gICAgY2FjaGVQ
YWdlRm9ySGlzdG9yeUl0ZW0obV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgIGNhY2hl
UGFnZUZvckhpc3RvcnlJdGVtKGhpc3RvcnkoKS0+Y3VycmVudCgpKTsKICAgICAKICAgICBpZiAo
bV9sb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVwbGFjZSkKICAgICAgICAgY2xvc2VPbGREYXRh
U291cmNlcygpOwpAQCAtMjQ1Miw3ICsyNDcyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0
UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVkUGFnZSkKICAg
ICBMT0coTG9hZGluZywgIldlYkNvcmVMb2FkaW5nICVzOiBGaW5pc2hlZCBjb21taXR0aW5nIHBy
b3Zpc2lvbmFsIGxvYWQgdG8gVVJMICVzIiwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbV9VUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBp
ZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQgJiYgbV9kb2N1bWVudExvYWRl
ci0+aXNDbGllbnRSZWRpcmVjdCgpKQotICAgICAgICB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVk
aXJlY3QoKTsKKyAgICAgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpOwog
CiAgICAgaWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKSB7CiAgICAgICAgIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CkBAIC0yNDc1LDcgKzI0OTUsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNo
ZWRQYWdlPiBwcnBDYWNoZWRQYWdlKQogICAgICAgICAgICAgc2VuZFJlbWFpbmluZ0RlbGVnYXRl
TWVzc2FnZXMoaWRlbnRpZmllciwgcmVzcG9uc2UsIHN0YXRpY19jYXN0PGludD4ocmVzcG9uc2Uu
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpLCBlcnJvcik7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOwor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGhpc3RvcnkoKS0+Y3VycmVudCgpKTsKIAogICAg
ICAgICBtX2RvY3VtZW50TG9hZGVyLT5zZXRQcmltYXJ5TG9hZENvbXBsZXRlKHRydWUpOwogCkBA
IC0yNDkzLDcgKzI1MTMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp0cmFuc2l0aW9uVG9Db21taXR0
ZWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2NsaWVudC0+c2V0Q29waWVzT25TY3JvbGwoKTsKLSAgICB1cGRhdGVIaXN0b3J5Rm9y
Q29tbWl0KCk7CisgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JDb21taXQoKTsKIAogICAgIC8vIFRo
ZSBjYWxsIHRvIGNsb3NlVVJMKCkgaW52b2tlcyB0aGUgdW5sb2FkIGV2ZW50IGhhbmRsZXIsIHdo
aWNoIGNhbiBleGVjdXRlIGFyYml0cmFyeQogICAgIC8vIEphdmFTY3JpcHQuIElmIHRoZSBzY3Jp
cHQgaW5pdGlhdGVzIGEgbmV3IGxvYWQsIHdlIG5lZWQgdG8gYWJhbmRvbiB0aGUgY3VycmVudCBs
b2FkLApAQCAtMjUyNSw3ICsyNTQ1LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRv
Q29tbWl0dGVkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKICAgICAgICAgY2Fz
ZSBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkOgogICAgICAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgaWYgKHBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUhpc3RvcnlGb3JCYWNr
Rm9yd2FyZE5hdmlnYXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSgpLT51cGRh
dGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBD
cmVhdGUgYSBkb2N1bWVudCB2aWV3IGZvciB0aGlzIGRvY3VtZW50LCBvciB1c2VkIHRoZSBjYWNo
ZWQgdmlldy4KICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFBhZ2UpIHsKQEAgLTI1NDMs
MTIgKzI1NjMsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKFBh
c3NSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKICAgICAgICAgY2FzZSBGcmFtZUxvYWRU
eXBlUmVsb2FkRnJvbU9yaWdpbjoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlU2FtZToKICAg
ICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVwbGFjZToKLSAgICAgICAgICAgIHVwZGF0ZUhpc3Rv
cnlGb3JSZWxvYWQoKTsKKyAgICAgICAgICAgIGhpc3RvcnkoKS0+dXBkYXRlRm9yUmVsb2FkKCk7
CiAgICAgICAgICAgICBtX2NsaWVudC0+dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgp
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlU3RhbmRh
cmQ6Ci0gICAgICAgICAgICB1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhcmRMb2FkKCk7CisgICAgICAg
ICAgICBoaXN0b3J5KCktPnVwZGF0ZUZvclN0YW5kYXJkTG9hZCgpOwogI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgogICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGFkZGVk
IGZvciBhIExlb3BhcmQgcGVyZm9ybWFuY2UgaW1wb3J2ZW1lbnQuIFdlIGRlY2lkZWQgdG8gCiAg
ICAgICAgICAgICAvLyBpZmRlZiBpdCB0byBmaXggY29ycmVjdG5lc3MgaXNzdWVzIG9uIFRpZ2Vy
IGRvY3VtZW50ZWQgaW4gPHJkYXI6Ly9wcm9ibGVtLzU0NDE4MjM+LgpAQCAtMjU1OSw3ICsyNTc5
LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKFBhc3NSZWZQdHI8
Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgRnJhbWVMb2FkVHlwZVJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoKLSAgICAg
ICAgICAgIHVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3Qo
KTsKKyAgICAgICAgICAgIGhpc3RvcnkoKS0+dXBkYXRlRm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFj
a0ZvcndhcmRMaXN0KCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+dHJhbnNpdGlvblRvQ29tbWl0
dGVkRm9yTmV3UGFnZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTI5MDgsNyArMjkyOCw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKCkKICAg
ICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbTsKICAgICAgICAgICAgIGlmIChQYWdl
KiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIGlmIChpc0JhY2tGb3J3
YXJkTG9hZFR5cGUobG9hZFR5cGUoKSkgJiYgbV9mcmFtZSA9PSBwYWdlLT5tYWluRnJhbWUoKSkK
LSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG1fY3VycmVudEhpc3RvcnlJdGVtOworICAgICAg
ICAgICAgICAgICAgICBpdGVtID0gaGlzdG9yeSgpLT5jdXJyZW50KCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBib29sIHNob3VsZFJlc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGlm
ICghKHBkbC0+aXNMb2FkaW5nSW5BUElTZW5zZSgpICYmICFwZGwtPmlzU3RvcHBpbmcoKSkpIHsK
QEAgLTI5NTcsNyArMjk3Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRl
Rm9yVGhpc0ZyYW1lKCkKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGhhZCBhIHNjcm9sbCBw
b2ludCwgc2Nyb2xsIHRvIGl0LCBvdmVycmlkaW5nIHRoZSBhbmNob3IgcG9pbnQgaWYgYW55Lgog
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAg
ICAgICAgaWYgKChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkgfHwgbV9sb2FkVHlw
ZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IG1fbG9hZFR5cGUgPT0gRnJhbWVMb2FkVHlwZVJl
bG9hZEZyb21PcmlnaW4pICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaGlzdG9yeSgpLT5yZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsK
IAogICAgICAgICAgICAgaWYgKG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCB8fCAhbV9j
b21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMzAxOCw3ICszMDM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6ZGlkRmlyc3RMYXlvdXQoKQog
ewogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICBpZiAoaXNC
YWNrRm9yd2FyZExvYWRUeXBlKG1fbG9hZFR5cGUpICYmIHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgp
KQotICAgICAgICAgICAgcmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7CisgICAg
ICAgICAgICBoaXN0b3J5KCktPnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOwog
CiAgICAgbV9maXJzdExheW91dERvbmUgPSB0cnVlOwogICAgIG1fY2xpZW50LT5kaXNwYXRjaERp
ZEZpcnN0TGF5b3V0KCk7CkBAIC0zMDI5LDYgKzMwNDksMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hE
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKIH0KIAordm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6Y2xlYXJQcmV2aW91cygpCit7CisgICAgbV9wcmV2aW91cyA9IDA7Cit9CisKIHZvaWQg
RnJhbWVMb2FkZXI6OmZyYW1lTG9hZENvbXBsZXRlZCgpCiB7CiAgICAgLy8gTm90ZTogQ2FuIGJl
IGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KQEAgLTMwMzcsNyArMzA2Miw3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmZyYW1lTG9hZENvbXBsZXRlZCgpCiAKICAgICAvLyBFdmVuIGlmIGFscmVhZHkgY29t
cGxldGUsIHdlIG1pZ2h0IGhhdmUgc2V0IGEgcHJldmlvdXMgaXRlbSBvbiBhIGZyYW1lIHRoYXQK
ICAgICAvLyBkaWRuJ3QgZG8gYW55IGRhdGEgbG9hZGluZyBvbiB0aGUgcGFzdCB0cmFuc2FjdGlv
bi4gTWFrZSBzdXJlIHRvIGNsZWFyIHRoZXNlIG91dC4KLSAgICBtX3ByZXZpb3VzSGlzdG9yeUl0
ZW0gPSAwOworICAgIGhpc3RvcnkoKS0+Y2xlYXJQcmV2aW91cygpOwogCiAgICAgLy8gQWZ0ZXIg
YSBjYW5jZWxlZCBwcm92aXNpb25hbCBsb2FkLCBmaXJzdExheW91dERvbmUgaXMgZmFsc2UuCiAg
ICAgLy8gUmVzZXQgaXQgdG8gdHJ1ZSBpZiB3ZSdyZSBkaXNwbGF5aW5nIGEgcGFnZS4KQEAgLTMx
MzgsNyArMzE2Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRldGFjaEZyb21QYXJlbnQoKQogCiAg
ICAgY2xvc2VVUkwoKTsKICAgICBzdG9wQWxsTG9hZGVycygpOwotICAgIHNhdmVTY3JvbGxQb3Np
dGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShjdXJyZW50SGlzdG9yeUl0ZW0oKSk7CisgICAgaGlzdG9y
eSgpLT5zYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oaGlzdG9yeSgpLT5jdXJy
ZW50KCkpOwogICAgIGRldGFjaENoaWxkcmVuKCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpA
QCAtMzM4MCw3ICszNDA1LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRNYWluUmVzb3Vy
Y2VFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgYm9vbCBpc0MKICAgICBSZWZQdHI8
RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxv
YWRlciA9IGFjdGl2ZURvY3VtZW50TG9hZGVyKCk7Ci0gICAgCisKICAgICBpZiAoaXNDb21wbGV0
ZSkgewogICAgICAgICAvLyBGSVhNRTogRG9uJ3Qgd2FudCB0byBkbyB0aGlzIGlmIGFuIGVudGly
ZWx5IG5ldyBsb2FkIGlzIGdvaW5nLCBzbyBzaG91bGQgY2hlY2sKICAgICAgICAgLy8gdGhhdCBi
b3RoIGRhdGEgc291cmNlcyBvbiB0aGUgZnJhbWUgYXJlIGVpdGhlciB0aGlzIG9yIG5pbC4KQEAg
LTMzODgsNyArMzQxMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkTWFpblJlc291cmNl
RXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGJvb2wgaXNDCiAgICAgICAgIGlmICht
X2NsaWVudC0+c2hvdWxkRmFsbEJhY2soZXJyb3IpKQogICAgICAgICAgICAgaGFuZGxlRmFsbGJh
Y2tDb250ZW50KCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG1fc3RhdGUgPT0gRnJhbWVTdGF0
ZVByb3Zpc2lvbmFsICYmIG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcikgewogICAgICAgICBp
ZiAobV9zdWJtaXR0ZWRGb3JtVVJMID09IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+b3Jp
Z2luYWxSZXF1ZXN0Q29weSgpLnVybCgpKQogICAgICAgICAgICAgbV9zdWJtaXR0ZWRGb3JtVVJM
ID0gS1VSTCgpOwpAQCAtMzM5Niw3ICszNDIxLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2
ZWRNYWluUmVzb3VyY2VFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgYm9vbCBpc0MK
ICAgICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBtYWRlIGEgcGFnZSBjYWNoZSBpdGVtLCBidXQgbm93
IHdlJ3JlIGJhaWxpbmcgb3V0IGR1ZSB0byBhbiBlcnJvciBiZWZvcmUgd2UgZXZlcgogICAgICAg
ICAvLyB0cmFuc2l0aW9uZWQgdG8gdGhlIG5ldyBwYWdlIChiZWZvcmUgV2ViRnJhbWVTdGF0ZSA9
PSBjb21taXQpLiAgVGhlIGdvYWwgaGVyZSBpcyB0byByZXN0b3JlIGFueSBzdGF0ZQogICAgICAg
ICAvLyBzbyB0aGF0IHRoZSBleGlzdGluZyB2aWV3ICh0aGF0IHdlbmV2ZXIgZ290IGZhciBlbm91
Z2ggdG8gcmVwbGFjZSkgY2FuIGNvbnRpbnVlIGJlaW5nIHVzZWQuCi0gICAgICAgIGludmFsaWRh
dGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKTsKKyAgICAgICAgaGlzdG9yeSgpLT5pbnZhbGlkYXRl
Q3VycmVudEl0ZW1DYWNoZWRQYWdlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIGNsaWVu
dFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZCBoZXJlIHNvIHRoYXQgdGhlIGZyYW1lIGxvYWQg
ZGVsZWdhdGUgaXMgbm90aWZpZWQgdGhhdCB0aGUgcmVkaXJlY3QncwogICAgICAgICAvLyBzdGF0
dXMgaGFzIGNoYW5nZWQsIGlmIHRoZXJlIHdhcyBhIHJlZGlyZWN0LiBUaGUgZnJhbWUgbG9hZCBk
ZWxlZ2F0ZSBtYXkgaGF2ZSBzYXZlZCBzb21lIHN0YXRlIGFib3V0CkBAIC0zNDA2LDggKzM0MzEs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJl
c291cmNlRXJyb3ImIGVycm9yLCBib29sIGlzQwogICAgICAgICBpZiAobV9zZW50UmVkaXJlY3RO
b3RpZmljYXRpb24pCiAgICAgICAgICAgICBjbGllbnRSZWRpcmVjdENhbmNlbGxlZE9yRmluaXNo
ZWQoZmFsc2UpOwogICAgIH0KLSAgICAKLSAgICAKKwogICAgIGxvYWRlci0+bWFpblJlY2VpdmVk
RXJyb3IoZXJyb3IsIGlzQ29tcGxldGUpOwogfQogCkBAIC0zNDQxLDcgKzM0NjUsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5
KGNvbnN0IFJlc291cmNlUmVxdQogICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgc2F2ZWQgYXdh
eSB0aGUgc2Nyb2xsIGFuZCBkb2Mgc3RhdGUgZm9yIHRoZSBsb25nIHNsb3cgbG9hZCwKICAgICAg
ICAgLy8gYnV0IGl0J3Mgbm90IGFuIG9idmlvdXMgY2FzZS4KIAotICAgICAgICBhZGRIaXN0b3J5
SXRlbUZvckZyYWdtZW50U2Nyb2xsKCk7CisgICAgICAgIGhpc3RvcnkoKS0+YWRkSGlzdG9yeUl0
ZW1Gb3JGcmFnbWVudFNjcm9sbCgpOwogICAgIH0KICAgICAKICAgICBzY3JvbGxUb0FuY2hvcih1
cmwpOwpAQCAtMzQ5MCw3ICszNTE0LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2Fk
QWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAv
LyB0aHJvdWdoIHRoaXMgbWV0aG9kIGFscmVhZHksIG5lc3RlZDsgb3RoZXJ3aXNlLCBwb2xpY3lE
YXRhU291cmNlIHNob3VsZCBzdGlsbCBiZSBzZXQuCiAgICAgQVNTRVJUKG1fcG9saWN5RG9jdW1l
bnRMb2FkZXIgfHwgIW1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlci0+dW5yZWFjaGFibGVVUkwo
KS5pc0VtcHR5KCkpOwogCi0gICAgYm9vbCBpc1RhcmdldEl0ZW0gPSBtX3Byb3Zpc2lvbmFsSGlz
dG9yeUl0ZW0gPyBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0tPmlzVGFyZ2V0SXRlbSgpIDogZmFs
c2U7CisgICAgYm9vbCBpc1RhcmdldEl0ZW0gPSBoaXN0b3J5KCktPnByb3Zpc2lvbmFsKCkgPyBo
aXN0b3J5KCktPnByb3Zpc2lvbmFsKCktPmlzVGFyZ2V0SXRlbSgpIDogZmFsc2U7CiAKICAgICAv
LyBUd28gcmVhc29ucyB3ZSBjYW4ndCBjb250aW51ZToKICAgICAvLyAgICAxKSBOYXZpZ2F0aW9u
IHBvbGljeSBkZWxlZ2F0ZSBzYWlkIHdlIGNhbid0IHNvIHJlcXVlc3QgaXMgbmlsLiBBIHByaW1h
cnkgY2FzZSBvZiB0aGlzIApAQCAtMzUxMyw3ICszNTM3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IFBhc3MKICAgICAgICAgaWYgKChpc1RhcmdldEl0ZW0gfHwgaXNMb2FkaW5nTWFpbkZyYW1lKCkp
ICYmIGlzQmFja0ZvcndhcmRMb2FkVHlwZShwb2xpY3lDaGVja2VyKCktPmxvYWRUeXBlKCkpKQog
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAg
ICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0gcGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKEhpc3RvcnlJdGVtKiByZXNldEl0ZW0gPSBtYWluRnJhbWUtPmxvYWRlcigpLT5t
X2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5
SXRlbSogcmVzZXRJdGVtID0gbWFpbkZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmdvVG9J
dGVtKHJlc2V0SXRlbSk7CiAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEdsb2Jh
bEhpc3RvcnlJdGVtKCghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSkgPyAwIDogcmVzZXRJdGVtKTsKQEAgLTM2NzAsMTQgKzM2OTQsMTQgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6c2hvdWxkSW50ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29uc3QgU3RyaW5n
JiBjb250ZW50LCBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6
OmFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKQordm9pZCBIaXN0b3J5Q29udHJvbGxl
cjo6YWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCgpCiB7CiAgICAgYWRkQmFja0Zvcndh
cmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6bG9h
ZFByb3Zpc2lvbmFsSXRlbUZyb21DYWNoZWRQYWdlKCkKIHsKLSAgICBSZWZQdHI8Q2FjaGVkUGFn
ZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQobV9wcm92aXNpb25hbEhpc3RvcnlJdGVt
LmdldCgpKTsKKyAgICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgp
LT5nZXQoaGlzdG9yeSgpLT5wcm92aXNpb25hbCgpKTsKICAgICBpZiAoIWNhY2hlZFBhZ2UgfHwg
IWNhY2hlZFBhZ2UtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzcy
MSwxNCArMzc0NSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKCkKIAogYm9vbCBG
cmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYgdXJs
KSBjb25zdAogewotICAgIGlmICghbV9jdXJyZW50SGlzdG9yeUl0ZW0pCisgICAgaWYgKCFoaXN0
b3J5KCktPmN1cnJlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB1cmwg
PT0gbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnVybCgpIHx8IHVybCA9PSBtX2N1cnJlbnRIaXN0b3J5
SXRlbS0+b3JpZ2luYWxVUkwoKTsKKyAgICByZXR1cm4gdXJsID09IGhpc3RvcnkoKS0+Y3VycmVu
dCgpLT51cmwoKSB8fCB1cmwgPT0gaGlzdG9yeSgpLT5jdXJyZW50KCktPm9yaWdpbmFsVVJMKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5
SXRlbShib29sIHVzZU9yaWdpbmFsKQorUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlzdG9yeUNv
bnRyb2xsZXI6OmNyZWF0ZUhpc3RvcnlJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiB7Ci0gICAgRG9j
dW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IGRvY3VtZW50TG9hZGVyKCk7CisgICAgRG9jdW1lbnRM
b2FkZXIqIGRvY0xvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwog
ICAgIAogICAgIEtVUkwgdW5yZWFjaGFibGVVUkwgPSBkb2NMb2FkZXIgPyBkb2NMb2FkZXItPnVu
cmVhY2hhYmxlVVJMKCkgOiBLVVJMKCk7CiAgICAgCkBAIC0zNzc3LDEzICszODAxLDI1IEBAIFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbShib29s
IHVzZU9yaWdpbmFsKQogICAgIH0KICAgICAKICAgICAvLyBTZXQgdGhlIGl0ZW0gZm9yIHdoaWNo
IHdlIHdpbGwgc2F2ZSBkb2N1bWVudCBzdGF0ZQotICAgIG1fcHJldmlvdXNIaXN0b3J5SXRlbSA9
IG1fY3VycmVudEhpc3RvcnlJdGVtOwotICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gaXRlbTsK
KyAgICBtX3ByZXZpb3VzID0gbV9jdXJyZW50OworICAgIG1fY3VycmVudCA9IGl0ZW07CiAgICAg
CiAgICAgcmV0dXJuIGl0ZW0ucmVsZWFzZSgpOwogfQorICAgIAordm9pZCBGcmFtZUxvYWRlcjo6
Y2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkKK3sKKyAgICBQYWdlKiBwYWdlID0gbV9m
cmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmVudHJpZXMoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBtX2RpZFBlcmZvcm1GaXJzdE5hdmln
YXRpb24gPSB0cnVlOworICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlv
bigpOworICAgIH0KK30KIAotdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xp
cHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6YWRkQmFj
a0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogewogICAgIC8vIEluIHRo
ZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBhYm91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdlIHN0b3Jl
IGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1pcnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKICAgICAvLyBU
aGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFyZ2V0IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlvbiBpcyBk
ZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0SXRlbSIuICAKQEAgLTM3OTQsNDEgKzM4MzAsMzggQEAg
dm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KGJvb2wg
ZG9DbGlwKQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGRvY3Vt
ZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSogbWFpbkZyYW1lID0gcGFnZS0+bWFpbkZyYW1l
KCk7CiAgICAgQVNTRVJUKG1haW5GcmFtZSk7CiAgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVy
ID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKIAotICAgIGlmICghZnJhbWVMb2FkZXItPm1fZGlkUGVy
Zm9ybUZpcnN0TmF2aWdhdGlvbiAmJiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW50cmllcygp
LnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5tX2RpZFBlcmZvcm1GaXJzdE5h
dmlnYXRpb24gPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdh
dGlvbigpOwotICAgIH0KKyAgICBmcmFtZUxvYWRlci0+Y2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZp
Z2F0aW9uKCk7CiAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBmcmFtZUxvYWRlci0+
Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7Ci0gICAgTE9HKEJhY2tGb3J3
YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0gJXAgZm9y
IGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZyYW1lTG9h
ZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShtX2ZyYW1lLCBkb0NsaXApOwor
ICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2FyZCAtIEFkZGluZyBiYWNrZm9y
d2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCksIG1fZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAg
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmFkZEl0ZW0oaXRlbSk7CiB9CiAKLVBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbVRyZWUoRnJhbWUqIHRh
cmdldEZyYW1lLCBib29sIGNsaXBBdFRhcmdldCkKK1Bhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhp
c3RvcnlDb250cm9sbGVyOjpjcmVhdGVIaXN0b3J5SXRlbVRyZWUoRnJhbWUqIHRhcmdldEZyYW1l
LCBib29sIGNsaXBBdFRhcmdldCkKIHsKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGJmSXRlbSA9
IGNyZWF0ZUhpc3RvcnlJdGVtKG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkgPyB0cnVlIDogZmFs
c2UpOwotICAgIGlmIChtX3ByZXZpb3VzSGlzdG9yeUl0ZW0pCi0gICAgICAgIHNhdmVTY3JvbGxQ
b3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX3ByZXZpb3VzSGlzdG9yeUl0ZW0uZ2V0KCkpOwor
ICAgIGlmIChtX3ByZXZpb3VzKQorICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0obV9wcmV2aW91cy5nZXQoKSk7CiAgICAgaWYgKCEoY2xpcEF0VGFyZ2V0ICYmIG1f
ZnJhbWUgPT0gdGFyZ2V0RnJhbWUpKSB7CiAgICAgICAgIC8vIHNhdmUgZnJhbWUgc3RhdGUgZm9y
IGl0ZW1zIHRoYXQgYXJlbid0IGxvYWRpbmcgKGtodG1sIGRvZXNuJ3Qgc2F2ZSB0aG9zZSkKICAg
ICAgICAgc2F2ZURvY3VtZW50U3RhdGUoKTsKICAgICAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBt
X2ZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUo
KS0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgRnJhbWVMb2FkZXIqIGNoaWxkTG9hZGVy
ID0gY2hpbGQtPmxvYWRlcigpOwogICAgICAgICAgICAgYm9vbCBoYXNDaGlsZExvYWRlZCA9IGNo
aWxkTG9hZGVyLT5mcmFtZUhhc0xvYWRlZCgpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IC8vIElmIHRoZSBjaGlsZCBpcyBhIGZyYW1lIGNvcnJlc3BvbmRpbmcgdG8gYW4gPG9iamVjdD4g
ZWxlbWVudCB0aGF0IG5ldmVyIGxvYWRlZCwKICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQg
dG8gY3JlYXRlIGEgaGlzdG9yeSBpdGVtLCBiZWNhdXNlIHRoYXQgY2F1c2VzIGZhbGxiYWNrIGNv
bnRlbnQKICAgICAgICAgICAgIC8vIHRvIGJlIGlnbm9yZWQgb24gcmVsb2FkLgogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoISghaGFzQ2hpbGRMb2FkZWQgJiYgY2hpbGRMb2FkZXItPmlz
SG9zdGVkQnlPYmplY3RFbGVtZW50KCkpKQotICAgICAgICAgICAgICAgIGJmSXRlbS0+YWRkQ2hp
bGRJdGVtKGNoaWxkTG9hZGVyLT5jcmVhdGVIaXN0b3J5SXRlbVRyZWUodGFyZ2V0RnJhbWUsIGNs
aXBBdFRhcmdldCkpOworICAgICAgICAgICAgICAgIGJmSXRlbS0+YWRkQ2hpbGRJdGVtKGNoaWxk
TG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUhpc3RvcnlJdGVtVHJlZSh0YXJnZXRGcmFtZSwgY2xp
cEF0VGFyZ2V0KSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKG1fZnJhbWUgPT0gdGFyZ2V0
RnJhbWUpCkBAIC0zODQ0LDE0ICszODc3LDE0IEBAIEZyYW1lKiBGcmFtZUxvYWRlcjo6ZmluZEZy
YW1lRm9yTmF2aWdhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgcmV0dXJuIGZy
YW1lOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzYXZl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAg
ICAgaWYgKCFpdGVtIHx8ICFtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgaXRlbS0+c2V0U2Nyb2xsUG9pbnQobV9mcmFtZS0+dmlldygpLT5zY3JvbGxQb3Np
dGlvbigpKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ3JlYXQgdG8gd29yayBvdXQgYSB3
YXkgdG8gcHV0IHRoaXMgY29kZSBpbiBXZWJDb3JlIGluc3RlYWQgb2YgY2FsbGluZyB0aHJvdWdo
IHRvIHRoZSBjbGllbnQuCi0gICAgbV9jbGllbnQtPnNhdmVWaWV3U3RhdGVUb0l0ZW0oaXRlbSk7
CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5zYXZlVmlld1N0YXRlVG9JdGVtKGl0
ZW0pOwogfQogCiAvKgpAQCAtMzg2NSwzNCArMzg5OCwzNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpz
YXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAg
MikgSWYgdGhlIGxheW91dCBoYXBwZW5zIGFmdGVyIHRoZSBsb2FkIGNvbXBsZXRlcywgdGhlIGF0
dGVtcHQgdG8gcmVzdG9yZSBhdCBsb2FkIGNvbXBsZXRpb24gdGltZSBzaWxlbnRseQogIGZhaWxz
LiAgV2UgdGhlbiBzdWNjZXNzZnVsbHkgcmVzdG9yZSBpdCB3aGVuIHRoZSBsYXlvdXQgaGFwcGVu
cy4KICovCi12b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGUoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmll
d1N0YXRlKCkKIHsKLSAgICBpZiAoIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKQor
ICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9h
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9jdXJyZW50SGlzdG9yeUl0ZW0p
OworICAgIEFTU0VSVChtX2N1cnJlbnQpOwogICAgIAogICAgIC8vIEZJWE1FOiBBcyB0aGUgQVNT
RVJUIGF0dGVzdHMsIGl0IHNlZW1zIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIGN1cnJlbnRJdGVt
IGhlcmUuCiAgICAgLy8gT25lIGNvdW50ZXJleGFtcGxlIGlzIDxyZGFyOi8vcHJvYmxlbS80OTE3
MjkwPgogICAgIC8vIEZvciBub3csIHRvIGNvdmVyIHRoaXMgaXNzdWUgaW4gcmVsZWFzZSBidWls
ZHMsIHRoZXJlIGlzIG5vIHRlY2huaWNhbCBoYXJtIHRvIHJldHVybmluZwogICAgIC8vIGVhcmx5
IGFuZCBmcm9tIGEgdXNlciBzdGFuZHBvaW50IC0gYXMgaW4gdGhlIGFib3ZlIHJhZGFyIC0gdGhl
IHByZXZpb3VzIHBhZ2UgbG9hZCBmYWlsZWQgCiAgICAgLy8gc28gdGhlcmUgKmlzKiBubyBzY3Jv
bGwgb3IgdmlldyBzdGF0ZSB0byByZXN0b3JlIQotICAgIGlmICghbV9jdXJyZW50SGlzdG9yeUl0
ZW0pCisgICAgaWYgKCFtX2N1cnJlbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgZ3JlYXQgdG8gd29yayBvdXQgYSB3YXkgdG8gcHV0IHRoaXMgY29k
ZSBpbiBXZWJDb3JlIGluc3RlYWQgb2YgY2FsbGluZwogICAgIC8vIHRocm91Z2ggdG8gdGhlIGNs
aWVudC4gSXQncyBjdXJyZW50bHkgdXNlZCBvbmx5IGZvciB0aGUgUERGIHZpZXcgb24gTWFjLgot
ICAgIG1fY2xpZW50LT5yZXN0b3JlVmlld1N0YXRlKCk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCkt
PmNsaWVudCgpLT5yZXN0b3JlVmlld1N0YXRlKCk7CiAgICAgCiAgICAgaWYgKEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgaWYgKCF2aWV3LT53YXNTY3JvbGxlZEJ5
VXNlcigpKQotICAgICAgICAgICAgdmlldy0+c2V0U2Nyb2xsUG9zaXRpb24obV9jdXJyZW50SGlz
dG9yeUl0ZW0tPnNjcm9sbFBvaW50KCkpOworICAgICAgICAgICAgdmlldy0+c2V0U2Nyb2xsUG9z
aXRpb24obV9jdXJyZW50LT5zY3JvbGxQb2ludCgpKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6
aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVy
OjppbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKCkKIHsKICAgICAvLyBXaGVuIHdlIGFy
ZSBwcmUtY29tbWl0LCB0aGUgY3VycmVudEl0ZW0gaXMgd2hlcmUgdGhlIHBhZ2VDYWNoZSBkYXRh
IHJlc2lkZXMgICAgCi0gICAgQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5n
ZXQobV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgIENhY2hlZFBhZ2UqIGNhY2hlZFBh
Z2UgPSBwYWdlQ2FjaGUoKS0+Z2V0KGN1cnJlbnQoKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBhIGdyb3Rlc3F1ZSBoYWNrIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNDA1OTA1OT4gQ3Jhc2gg
aW4gUmVuZGVyRmxvdzo6ZGV0YWNoCiAgICAgLy8gU29tZWhvdyB0aGUgUGFnZVN0YXRlIG9iamVj
dCBpcyBub3QgcHJvcGVybHkgdXBkYXRlZCwgYW5kIGlzIGhvbGRpbmcgb250byBhIHN0YWxlIGRv
Y3VtZW50LgpAQCAtMzkwNSwxMiArMzkzOCwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjppbnZhbGlk
YXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKCkKICAgICB9CiAgICAgCiAgICAgaWYgKGNhY2hlZFBh
Z2UpCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0
KCkpOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGN1cnJlbnQoKSk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXI6OnNhdmVEb2N1bWVudFN0YXRlKCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnNhdmVEb2N1bWVudFN0YXRlKCkKIHsKLSAgICBpZiAobV9jcmVhdGluZ0luaXRpYWxFbXB0eURv
Y3VtZW50KQorICAgIC8vIEZJWE1FOiBSZWFkaW5nIHRoaXMgYml0IG9mIEZyYW1lTG9hZGVyIHN0
YXRlIGhlcmUgaXMgdW5mb3J0dW5hdGUuICBJIG5lZWQgdG8gc3R1ZHkKKyAgICAvLyB0aGlzIG1v
cmUgdG8gc2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkZXBlbmRlbmN5LgorICAgIGlmIChtX2Zy
YW1lLT5sb2FkZXIoKS0+Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGb3IgYSBzdGFuZGFyZCBwYWdlIGxvYWQsIHdlIHdpbGwgaGF2ZSBh
IHByZXZpb3VzIGl0ZW0gc2V0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KQEAgLTM5MjQsNyArMzk1
OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNhdmVEb2N1bWVudFN0YXRlKCkKICAgICAvLyB0aGF0
IHByZXZpb3VzSXRlbSBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgYSBwYWdlIHRyYW5zaXRpb24u
ICBXZSBsZXZlcmFnZSB0aGUKICAgICAvLyBjaGVja0xvYWRDb21wbGV0ZSByZWN1cnNpb24gdG8g
YWNoaWV2ZSB0aGlzIGdvYWwuCiAKLSAgICBIaXN0b3J5SXRlbSogaXRlbSA9IG1fcHJldmlvdXNI
aXN0b3J5SXRlbSA/IG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQoKSA6IG1fY3VycmVudEhpc3Rv
cnlJdGVtLmdldCgpOworICAgIEhpc3RvcnlJdGVtKiBpdGVtID0gbV9wcmV2aW91cyA/IG1fcHJl
dmlvdXMuZ2V0KCkgOiBtX2N1cnJlbnQuZ2V0KCk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTM5MzgsNiArMzk3Myw5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNhdmVEb2N1
bWVudFN0YXRlKCkKIH0KIAogLy8gTG9hZHMgY29udGVudCBpbnRvIHRoaXMgZnJhbWUsIGFzIHNw
ZWNpZmllZCBieSBoaXN0b3J5IGl0ZW0KKy8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBy
ZWFsbHkgYmUgc3BsaXQgaW50byBhIGNvdXBsZSBwaWVjZXMsIHNvbWUgb2YKKy8vIHdoaWNoIHNo
b3VsZCBiZSBtZXRob2RzIG9mIEhpc3RvcnlDb250cm9sbGVyIGFuZCBzb21lIG9mIHdoaWNoIHNo
b3VsZCBiZQorLy8gbWV0aG9kcyBvZiBGcmFtZUxvYWRlci4KIHZvaWQgRnJhbWVMb2FkZXI6Omxv
YWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogewogICAg
IGlmICghbV9mcmFtZS0+cGFnZSgpKQpAQCAtMzk1Niw3ICszOTk0LDcgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUp
CiAgICAgLy8gY2hlY2sgZm9yIGFsbCB0aGF0IGFzIGFuIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9u
LgogICAgIC8vIFdlIGFsc28gZG8gbm90IGRvIGFuY2hvci1zdHlsZSBuYXZpZ2F0aW9uIGlmIHdl
J3JlIHBvc3RpbmcgYSBmb3JtIG9yIG5hdmlnYXRpbmcgZnJvbQogICAgIC8vIGEgcGFnZSB0aGF0
IHdhcyByZXN1bHRlZCBmcm9tIGEgZm9ybSBwb3N0LgotICAgIGJvb2wgc2hvdWxkU2Nyb2xsID0g
IWZvcm1EYXRhICYmICEobV9jdXJyZW50SGlzdG9yeUl0ZW0gJiYgbV9jdXJyZW50SGlzdG9yeUl0
ZW0tPmZvcm1EYXRhKCkpICYmIHVybHNNYXRjaEl0ZW0oaXRlbSk7CisgICAgYm9vbCBzaG91bGRT
Y3JvbGwgPSAhZm9ybURhdGEgJiYgIShoaXN0b3J5KCktPmN1cnJlbnQoKSAmJiBoaXN0b3J5KCkt
PmN1cnJlbnQoKS0+Zm9ybURhdGEoKSkgJiYgaGlzdG9yeSgpLT51cmxzTWF0Y2hJdGVtKGl0ZW0p
OwogCiAjaWYgRU5BQkxFKFdNTCkKICAgICAvLyBBbGwgV01MIGRlY2tzIHNob3VsZCBnbyB0aHJv
dWdoIHRoZSByZWFsIGxvYWQgbWVjaGFuaXNtLCBub3QgdGhlIHNjcm9sbC10by1hbmNob3IgY29k
ZQpAQCAtMzk2NiwxMiArNDAwNCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0
b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKIAogICAgIGlmIChzaG91bGRT
Y3JvbGwpIHsKICAgICAgICAgLy8gTXVzdCBkbyB0aGlzIG1haW50ZW5hbmNlIGhlcmUsIHNpbmNl
IHdlIGRvbid0IGdvIHRocm91Z2ggYSByZWFsIHBhZ2UgcmVsb2FkCi0gICAgICAgIHNhdmVTY3Jv
bGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7
CisgICAgICAgIGhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVt
KGhpc3RvcnkoKS0+Y3VycmVudCgpKTsKIAogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpKQogICAgICAgICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVzZXIo
ZmFsc2UpOwogCi0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAg
aGlzdG9yeSgpLT5zZXRDdXJyZW50KGl0ZW0pOwogCiAgICAgICAgIC8vIEZJWE1FOiBGb3JtIHN0
YXRlIG1pZ2h0IG5lZWQgdG8gYmUgc2F2ZWQgaGVyZSB0b28uCiAKQEAgLTM5ODAsNyArNDAxOCw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlKQogICAgICAgICBzY3JvbGxUb0FuY2hvcihpdGVtLT51cmwoKSk7CiAg
ICAgCiAgICAgICAgIC8vIG11c3QgZG8gdGhpcyBtYWludGVuYW5jZSBoZXJlLCBzaW5jZSB3ZSBk
b24ndCBnbyB0aHJvdWdoIGEgcmVhbCBwYWdlIHJlbG9hZAotICAgICAgICByZXN0b3JlU2Nyb2xs
UG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKKyAgICAgICAgaGlzdG9yeSgpLT5yZXN0b3JlU2Nyb2xs
UG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZha2UgdGhlIFVS
TCBjaGFuZ2UgYnkgdXBkYXRpbmcgdGhlIGRhdGEgc291cmNlJ3MgcmVxdWVzdC4gIFRoaXMgd2ls
bCBubyBsb25nZXIKICAgICAgICAgLy8gYmUgbmVjZXNzYXJ5IGlmIHdlIGRvIHRoZSBiZXR0ZXIg
Zml4IGRlc2NyaWJlZCBhYm92ZS4KQEAgLTM5OTIsNyArNDAzMCw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQog
ICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0ZW1z
IGFzIGNoaWxkIGZyYW1lcyBsb2FkCi0gICAgICAgIG1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbSA9
IGl0ZW07CisgICAgICAgIGhpc3RvcnkoKS0+c2V0UHJvdmlzaW9uYWwoaXRlbSk7CiAKICAgICAg
ICAgYm9vbCBpblBhZ2VDYWNoZSA9IGZhbHNlOwogICAgICAgICAKQEAgLTQwMDksNyArNDA0Nyw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxv
YWRUeXBlIGxvYWRUeXBlKQogICAgICAgICAgICAgICAgIGxvYWRXaXRoRG9jdW1lbnRMb2FkZXIo
Y2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5cGUsIDApOyAgIAogICAgICAgICAg
ICAgICAgIGluUGFnZUNhY2hlID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBi
YWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIG1fcHJv
dmlzaW9uYWxIaXN0b3J5SXRlbS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZy
b20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBo
aXN0b3J5KCktPnByb3Zpc2lvbmFsKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
ICAgICAgICAgICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGl0ZW0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC00MDg1LDkgKzQxMjMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2Fk
SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKIH0KIAogLy8g
V2FsayB0aGUgZnJhbWUgdHJlZSBhbmQgZW5zdXJlIHRoYXQgdGhlIFVSTHMgbWF0Y2ggdGhlIFVS
THMgaW4gdGhlIGl0ZW0uCi1ib29sIEZyYW1lTG9hZGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKSBjb25zdAorYm9vbCBIaXN0b3J5Q29udHJvbGxlcjo6dXJsc01hdGNoSXRlbShI
aXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIHsKLSAgICBjb25zdCBLVVJMJiBjdXJyZW50VVJMID0g
ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7CisgICAgY29uc3QgS1VSTCYgY3VycmVudFVSTCA9IG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKTsKICAgICBpZiAoIWVxdWFs
SWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIoY3VycmVudFVSTCwgaXRlbS0+dXJsKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQwOTYsNyArNDEzNCw3IEBAIGJvb2wgRnJhbWVMb2Fk
ZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAgdW5zaWduZWQg
c2l6ZSA9IGNoaWxkSXRlbXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgRnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCkt
PmNoaWxkKGNoaWxkSXRlbXNbaV0tPnRhcmdldCgpKTsKLSAgICAgICAgaWYgKGNoaWxkRnJhbWUg
JiYgIWNoaWxkRnJhbWUtPmxvYWRlcigpLT51cmxzTWF0Y2hJdGVtKGNoaWxkSXRlbXNbaV0uZ2V0
KCkpKQorICAgICAgICBpZiAoY2hpbGRGcmFtZSAmJiAhY2hpbGRGcmFtZS0+bG9hZGVyKCktPmhp
c3RvcnkoKS0+dXJsc01hdGNoSXRlbShjaGlsZEl0ZW1zW2ldLmdldCgpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTQxMDUsNyArNDE0Myw3IEBAIGJvb2wgRnJhbWVM
b2FkZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiAKIC8vIE1haW4g
ZnVubmVsIGZvciBuYXZpZ2F0aW5nIHRvIGEgcHJldmlvdXMgbG9jYXRpb24gKGJhY2svZm9yd2Fy
ZCwgbm9uLXNlYXJjaCBzbmFwLWJhY2spCiAvLyBUaGlzIGluY2x1ZGVzIHJlY3Vyc2lvbiB0byBo
YW5kbGUgbG9hZGluZyBpbnRvIGZyYW1lc2V0cyBwcm9wZXJseQotdm9pZCBGcmFtZUxvYWRlcjo6
Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBG
cmFtZUxvYWRUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFtX2ZyYW1lLT50cmVlKCktPnBhcmVu
dCgpKTsKICAgICAKQEAgLTQxMTYsNyArNDE1NCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9J
dGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIW1fY2xpZW50LT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkp
CisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnNob3VsZEdvVG9IaXN0b3J5
SXRlbSh0YXJnZXRJdGVtKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2V0IHRoZSBCRiBj
dXJzb3IgYmVmb3JlIGNvbW1pdCwgd2hpY2ggbGV0cyB0aGUgdXNlciBxdWlja2x5IGNsaWNrIGJh
Y2svZm9yd2FyZCBhZ2Fpbi4KQEAgLTQxMzQsMTYgKzQxNzIsMTYgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkK
IC8vIHRyYWNraW5nIHdoZXRoZXIgZWFjaCBmcmFtZSBhbHJlYWR5IGhhcyB0aGUgY29udGVudCB0
aGUgaXRlbSByZXF1ZXN0cy4gIElmIHRoZXJlIGlzCiAvLyBhIG1hdGNoIChieSBVUkwpLCB3ZSBq
dXN0IHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uIGFuZCByZWN1cnNlLiAgT3RoZXJ3aXNlIHdlIG11
c3QKIC8vIHJlbG9hZCB0aGF0IGZyYW1lLCBhbmQgYWxsIGl0cyBraWRzLgotdm9pZCBGcmFtZUxv
YWRlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBm
cm9tSXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVj
dXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwg
RnJhbWVMb2FkVHlwZSB0eXBlKQogewogICAgIEFTU0VSVChpdGVtKTsKICAgICBBU1NFUlQoZnJv
bUl0ZW0pOwotICAgIAorCiAgICAgS1VSTCBpdGVtVVJMID0gaXRlbS0+dXJsKCk7CiAgICAgS1VS
TCBjdXJyZW50VVJMOwotICAgIGlmIChkb2N1bWVudExvYWRlcigpKQotICAgICAgICBjdXJyZW50
VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7Ci0gICAgCisgICAgaWYgKG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpKQorICAgICAgICBjdXJyZW50VVJMID0gbV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpOworCiAgICAgLy8gQWx3YXlzIHJlbG9h
ZCB0aGUgdGFyZ2V0IGZyYW1lIG9mIHRoZSBpdGVtIHdlJ3JlIGdvaW5nIHRvLiAgVGhpcyBlbnN1
cmVzIHRoYXQgd2Ugd2lsbAogICAgIC8vIGRvIC1zb21lLSBsb2FkIGZvciB0aGUgdHJhbnNpdGlv
biwgd2hpY2ggbWVhbnMgYSBwcm9wZXIgbm90aWZpY2F0aW9uIHdpbGwgYmUgcG9zdGVkCiAgICAg
Ly8gdG8gdGhlIGFwcC4KQEAgLTQxNTcsMTQgKzQxOTUsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRl
bSwgRnIKICAgICB7CiAgICAgICAgIC8vIFRoaXMgY29udGVudCBpcyBnb29kLCBzbyBsZWF2ZSBp
dCBhbG9uZSBhbmQgbG9vayBmb3IgY2hpbGRyZW4gdGhhdCBuZWVkIHJlbG9hZGluZwogICAgICAg
ICAvLyBTYXZlIGZvcm0gc3RhdGUgKHdvcmtzIGZyb20gY3VycmVudEl0ZW0sIHNpbmNlIHByZXZJ
dGVtIGlzIG5pbCkKLSAgICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzSGlzdG9yeUl0ZW0pOworICAg
ICAgICBBU1NFUlQoIW1fcHJldmlvdXMpOwogICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOwot
ICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SGlz
dG9yeUl0ZW0uZ2V0KCkpOworICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVU
b0l0ZW0obV9jdXJyZW50LmdldCgpKTsKIAogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpKQogICAgICAgICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVzZXIo
ZmFsc2UpOwogCi0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAg
bV9jdXJyZW50ID0gaXRlbTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgLy8gUmVzdG9yZSBm
b3JtIHN0YXRlICh3b3JrcyBmcm9tIGN1cnJlbnRJdGVtKQogICAgICAgICByZXN0b3JlRG9jdW1l
bnRTdGF0ZSgpOwpAQCAtNDE4MSwxNiArNDIxOSwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWN1
cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBG
cgogICAgICAgICAgICAgQVNTRVJUKGZyb21DaGlsZEl0ZW0gfHwgZnJvbUl0ZW0tPmlzVGFyZ2V0
SXRlbSgpKTsKICAgICAgICAgICAgIEZyYW1lKiBjaGlsZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgp
LT5jaGlsZChjaGlsZEZyYW1lTmFtZSk7CiAgICAgICAgICAgICBBU1NFUlQoY2hpbGRGcmFtZSk7
Ci0gICAgICAgICAgICBjaGlsZEZyYW1lLT5sb2FkZXIoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hp
bGRJdGVtc1tpXS5nZXQoKSwgZnJvbUNoaWxkSXRlbSwgdHlwZSk7CisgICAgICAgICAgICBjaGls
ZEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5yZWN1cnNpdmVHb1RvSXRlbShjaGlsZEl0ZW1z
W2ldLmdldCgpLCBmcm9tQ2hpbGRJdGVtLCB0eXBlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIGxvYWRJdGVtKGl0ZW0sIHR5cGUpOworICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+bG9hZEl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgfQogfQogCiAvLyBoZWxwZXIgbWV0aG9kIHRo
YXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdWJmcmFtZXMgZGVzY3JpYmVkIGJ5IHRoZSBpdGVt
J3Mgc3ViaXRlbXMKIC8vIG1hdGNoIG91ciBvd24gY3VycmVudCBmcmFtZXNldAotYm9vbCBGcmFt
ZUxvYWRlcjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0Citi
b29sIEhpc3RvcnlDb250cm9sbGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSog
aXRlbSkgY29uc3QKIHsKICAgICBjb25zdCBIaXN0b3J5SXRlbVZlY3RvciYgY2hpbGRJdGVtcyA9
IGl0ZW0tPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkSXRlbXMuc2l6ZSgpICE9IG1fZnJhbWUt
PnRyZWUoKS0+Y2hpbGRDb3VudCgpKQpAQCAtNDIwOCw2MSArNDI0Niw2MSBAQCBib29sIEZyYW1l
TG9hZGVyOjpjaGlsZEZyYW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKIAog
Ly8gVGhlcmUgYXJlIDMgdGhpbmdzIHlvdSBtaWdodCB0aGluayBvZiBhcyAiaGlzdG9yeSIsIGFs
bCBvZiB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGVzZSBmdW5jdGlvbnMuCiAvLwotLy8gICAgIDEp
IEJhY2svZm9yd2FyZDogVGhlIG1fY3VycmVudEhpc3RvcnlJdGVtIGlzIHBhcnQgb2YgdGhpcyBt
ZWNoYW5pc20uCisvLyAgICAgMSkgQmFjay9mb3J3YXJkOiBUaGUgbV9jdXJyZW50IGlzIHBhcnQg
b2YgdGhpcyBtZWNoYW5pc20uCiAvLyAgICAgMikgR2xvYmFsIGhpc3Rvcnk6IEhhbmRsZWQgYnkg
dGhlIGNsaWVudC4KIC8vICAgICAzKSBWaXNpdGVkIGxpbmtzOiBIYW5kbGVkIGJ5IHRoZSBQYWdl
R3JvdXAuCiAKLXZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQo
KQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yU3RhbmRhcmRMb2FkKCkKIHsKLSAg
ICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBTdGFu
ZGFyZCBMb2FkIGluIGZyYW1lICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0
aW5nIEhpc3RvcnkgZm9yIFN0YW5kYXJkIExvYWQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwog
CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKICAgICBib29s
IG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFi
bGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVy
bEZvckhpc3RvcnkoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gbV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKIAotICAgIGlmICghZG9j
dW1lbnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7CisgICAgaWYgKCFtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7CiAgICAgICAg
IGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFkZEJhY2tGb3J3YXJk
SXRlbUNsaXBwZWRBdFRhcmdldCh0cnVlKTsKICAgICAgICAgICAgIGlmICghbmVlZFByaXZhY3kp
IHsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotICAg
ICAgICAgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPnNldERpZENyZWF0ZUdsb2JhbEhpc3RvcnlF
bnRyeSh0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudExvYWRlci0+dW5yZWFj
aGFibGVVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRh
dGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICAgICAgICAgIG1fZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAg
ICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5zZXREaWRDcmVhdGVHbG9i
YWxIaXN0b3J5RW50cnkodHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9iYWxI
aXN0b3J5UmVkaXJlY3RMaW5rcygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xv
YmFsSGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmN1cnJlbnRJdGVtKCkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkb2N1bWVudExvYWRl
cigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiBtX2N1cnJlbnRIaXN0b3J5SXRlbSkg
ewotICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJMKGRvY3VtZW50TG9hZGVyKCkt
PnVybCgpKTsKLSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJvbVJl
cXVlc3QoZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsKKyAgICB9IGVsc2UgaWYgKG1fZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHko
KSAmJiBtX2N1cnJlbnQpIHsKKyAgICAgICAgbV9jdXJyZW50LT5zZXRVUkwobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKKyAgICAgICAgbV9jdXJyZW50LT5zZXRG
b3JtSW5mb0Zyb21SZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCkpOwogICAgIH0KIAogICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYgIW5l
ZWRQcml2YWN5KSB7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQog
ICAgICAgICAgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhoaXN0b3J5VVJMKTsKIAot
ICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRy
eSgpICYmIGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICF1
cmwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlR2xvYmFsSGlzdG9y
eVJlZGlyZWN0TGlua3MoKTsKKyAgICAgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYgbV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmICFt
X2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOwog
ICAgIH0KIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckNsaWVudFJlZGly
ZWN0KCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCkK
IHsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKGRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAg
IExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGNsaWVu
dCByZWRpcmVjdCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQor
ICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZv
ciBjbGllbnQgcmVkaXJlY3QgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogCiAgICAgLy8gQ2xl
YXIgb3V0IGZvcm0gZGF0YSBzbyB3ZSBkb24ndCB0cnkgdG8gcmVzdG9yZSBpdCBpbnRvIHRoZSBp
bmNvbWluZyBwYWdlLiAgTXVzdCBoYXBwZW4gYWZ0ZXIKICAgICAvLyB3ZWJjb3JlIGhhcyBjbG9z
ZWQgdGhlIFVSTCBhbmQgc2F2ZWQgYXdheSB0aGUgZm9ybSBzdGF0ZS4KLSAgICBpZiAobV9jdXJy
ZW50SGlzdG9yeUl0ZW0pIHsKLSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPmNsZWFyRG9j
dW1lbnRTdGF0ZSgpOwotICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+Y2xlYXJTY3JvbGxQ
b2ludCgpOworICAgIGlmIChtX2N1cnJlbnQpIHsKKyAgICAgICAgbV9jdXJyZW50LT5jbGVhckRv
Y3VtZW50U3RhdGUoKTsKKyAgICAgICAgbV9jdXJyZW50LT5jbGVhclNjcm9sbFBvaW50KCk7CiAg
ICAgfQogCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGluZ3MoKTsKICAg
ICBib29sIG5lZWRQcml2YWN5ID0gIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCk7Ci0gICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGRvY3VtZW50TG9hZGVy
KCktPnVybEZvckhpc3RvcnkoKTsKKyAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gbV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKTsKIAogICAgIGlm
ICghaGlzdG9yeVVSTC5pc0VtcHR5KCkgJiYgIW5lZWRQcml2YWN5KSB7CiAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQpAQCAtNDI3MCwxMDMgKzQzMDgsMTA0IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JDbGllbnRSZWRpcmVjdCgpCiAgICAgfQog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0
aW9uKCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdh
dGlvbigpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVudExvYWRlcigpKQot
ICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZv
ciBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbiBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCkt
PnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpKQorICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRh
dGluZyBIaXN0b3J5IGZvciBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbiBpbiBmcmFtZSAlcyIsIG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkp
OwogI2VuZGlmCiAKICAgICAvLyBNdXN0IGdyYWIgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9u
IGJlZm9yZSBkaXN0dXJiaW5nIGl0Ci0gICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRl
VG9JdGVtKG1fcHJldmlvdXNIaXN0b3J5SXRlbS5nZXQoKSk7CisgICAgc2F2ZVNjcm9sbFBvc2l0
aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fcHJldmlvdXMuZ2V0KCkpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6
OnVwZGF0ZUZvclJlbG9hZCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVu
dExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGlu
ZyBIaXN0b3J5IGZvciByZWxvYWQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRs
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRM
b2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcg
SGlzdG9yeSBmb3IgcmVsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAotICAgIGlmICht
X2N1cnJlbnRIaXN0b3J5SXRlbSkgewotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fY3Vy
cmVudEhpc3RvcnlJdGVtLmdldCgpKTsKKyAgICBpZiAobV9jdXJyZW50KSB7CisgICAgICAgIHBh
Z2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50LmdldCgpKTsKICAgICAKLSAgICAgICAgaWYgKGxv
YWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCBsb2FkVHlwZSgpID09IEZyYW1lTG9h
ZFR5cGVSZWxvYWRGcm9tT3JpZ2luKQotICAgICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5k
Vmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsKKyAgICAgICAgaWYg
KG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwg
bV9mcmFtZS0+bG9hZGVyKCktPmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21P
cmlnaW4pCisgICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0o
bV9jdXJyZW50LmdldCgpKTsKICAgICAKICAgICAgICAgLy8gU29tZXRpbWVzIGxvYWRpbmcgYSBw
YWdlIGFnYWluIGxlYWRzIHRvIGEgZGlmZmVyZW50IHJlc3VsdCBiZWNhdXNlIG9mIGNvb2tpZXMu
IEJ1Z3ppbGxhIDQwNzIKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxl
VVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVS
TChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOworICAgICAgICBpZiAobV9mcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgbV9jdXJyZW50LT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnJlcXVlc3RVUkwoKSk7CiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1
cGRhdGVIaXN0b3J5Rm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KCkKK3ZvaWQg
SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJk
TGlzdCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVudExvYWRlcigpKQot
ICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZv
ciByZWRpcmVjdCBsb2FkIGluIGZyYW1lICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVy
KCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3Rv
cnkgZm9yIHJlZGlyZWN0IGxvYWQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9j
dW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIAogICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVk
UHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgp
OwotICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JI
aXN0b3J5KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKLSAgICBpZiAoZG9jdW1lbnRM
b2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50SGlz
dG9yeUl0ZW0gJiYgIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICBpZiAobV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgeworICAg
ICAgICBpZiAoIW1fY3VycmVudCAmJiAhbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewogICAg
ICAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGFk
ZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRhcmdldCh0cnVlKTsKICAgICAgICAgICAgICAgICBp
ZiAoIW5lZWRQcml2YWN5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVH
bG9iYWxIaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnRMb2FkZXItPnNl
dERpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZG9jdW1lbnRMb2FkZXItPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExp
bmtzKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0RGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgcGFnZS0+c2V0
R2xvYmFsSGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCktPmN1cnJlbnRJdGVtKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm
IChtX2N1cnJlbnRIaXN0b3J5SXRlbSkgewotICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0
ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT51cmwoKSk7Ci0gICAgICAgICAgICBtX2N1cnJl
bnRIaXN0b3J5SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCkpOworICAgICAgICBpZiAobV9jdXJyZW50KSB7CisgICAgICAgICAgICBtX2N1cnJl
bnQtPnNldFVSTChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwor
ICAgICAgICAgICAgbV9jdXJyZW50LT5zZXRGb3JtSW5mb0Zyb21SZXF1ZXN0KG1fZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKTsKLSAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+
bV9jdXJyZW50SGlzdG9yeUl0ZW0pCi0gICAgICAgICAgICBwYXJlbnRGcmFtZS0+bG9hZGVyKCkt
Pm1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRDaGlsZEl0ZW0oY3JlYXRlSGlzdG9yeUl0ZW0odHJ1
ZSkpOworICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmxvYWRlcigpLT5o
aXN0b3J5KCktPm1fY3VycmVudCkKKyAgICAgICAgICAgIHBhcmVudEZyYW1lLT5sb2FkZXIoKS0+
aGlzdG9yeSgpLT5tX2N1cnJlbnQtPnNldENoaWxkSXRlbShjcmVhdGVIaXN0b3J5SXRlbSh0cnVl
KSk7CiAgICAgfQogCiAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZh
Y3kpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAg
ICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOwogCi0gICAgICAg
IGlmICghbV9kb2N1bWVudExvYWRlci0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYg
ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgIXVybCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJl
Y3RMaW5rcygpOworICAgICAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgIW1fZnJhbWUt
PmxvYWRlcigpLT51cmwoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CiAgICAgfQog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCkKK3ZvaWQgSGlz
dG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1pdCgpCiB7CisgICAgRnJhbWVMb2FkZXIqIGZy
YW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlm
IChkb2N1bWVudExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5
OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjb21taXQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRl
cigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1l
bnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRp
bmcgSGlzdG9yeSBmb3IgY29tbWl0IGluIGZyYW1lICVzIiwgZnJhbWVMb2FkZXItPmRvY3VtZW50
TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKLSAgICBGcmFtZUxvYWRU
eXBlIHR5cGUgPSBsb2FkVHlwZSgpOworICAgIEZyYW1lTG9hZFR5cGUgdHlwZSA9IGZyYW1lTG9h
ZGVyLT5sb2FkVHlwZSgpOwogICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgfHwK
LSAgICAgICAgKCh0eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgdHlwZSA9PSBGcmFtZUxv
YWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgJiYgIXByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+
dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICgodHlwZSA9PSBGcmFtZUxv
YWRUeXBlUmVsb2FkIHx8IHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYm
ICFmcmFtZUxvYWRlci0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVS
TCgpLmlzRW1wdHkoKSkpIHsKICAgICAgICAgLy8gT25jZSBjb21taXR0ZWQsIHdlIHdhbnQgdG8g
dXNlIGN1cnJlbnQgaXRlbSBmb3Igc2F2aW5nIERvY1N0YXRlLCBhbmQKICAgICAgICAgLy8gdGhl
IHByb3Zpc2lvbmFsIGl0ZW0gZm9yIHJlc3RvcmluZyBzdGF0ZS4KICAgICAgICAgLy8gTm90ZSBw
cmV2aW91c0l0ZW0gbXVzdCBiZSBzZXQgYmVmb3JlIHdlIGNsb3NlIHRoZSBVUkwsIHdoaWNoIHdp
bGwKICAgICAgICAgLy8gaGFwcGVuIHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIG1hZGUgbm9uLXBy
b3Zpc2lvbmFsIGJlbG93Ci0gICAgICAgIG1fcHJldmlvdXNIaXN0b3J5SXRlbSA9IG1fY3VycmVu
dEhpc3RvcnlJdGVtOwotICAgICAgICBBU1NFUlQobV9wcm92aXNpb25hbEhpc3RvcnlJdGVtKTsK
LSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0gPSBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW07
Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbSA9IDA7CisgICAgICAgIG1fcHJldmlv
dXMgPSBtX2N1cnJlbnQ7CisgICAgICAgIEFTU0VSVChtX3Byb3Zpc2lvbmFsKTsKKyAgICAgICAg
bV9jdXJyZW50ID0gbV9wcm92aXNpb25hbDsKKyAgICAgICAgbV9wcm92aXNpb25hbCA9IDA7CiAg
ICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQW5jaG9yU2Nyb2xs
KCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckFuY2hvclNjcm9sbCgpCiB7Ci0g
ICAgaWYgKG1fVVJMLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnVybCgp
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
bV9mcmFtZS0+c2V0dGluZ3MoKTsKQEAgLTQzNzcsMjkgKzQ0MTYsMTkgQEAgdm9pZCBGcmFtZUxv
YWRlcjo6dXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpCiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fVVJMKTsK
KyAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fZnJhbWUtPmxvYWRlcigpLT51cmwo
KSk7CiB9CiAKIC8vIFdhbGsgdGhlIGZyYW1lIHRyZWUsIHRlbGxpbmcgYWxsIGZyYW1lcyB0byBz
YXZlIHRoZWlyIGZvcm0gc3RhdGUgaW50byB0aGVpciBjdXJyZW50CiAvLyBoaXN0b3J5IGl0ZW0u
Ci12b2lkIEZyYW1lTG9hZGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCiB7CiAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQobV9mcmFtZSkpIHsKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zYXZlRG9j
dW1lbnRTdGF0ZSgpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNhdmVTY3JvbGxQb3NpdGlv
bkFuZFZpZXdTdGF0ZVRvSXRlbShmcmFtZS0+bG9hZGVyKCktPmN1cnJlbnRIaXN0b3J5SXRlbSgp
KTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudFN0YXRl
KCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlU2Nyb2xsUG9zaXRp
b25BbmRWaWV3U3RhdGVUb0l0ZW0oZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnQo
KSk7CiAgICAgfQogfQogCi1IaXN0b3J5SXRlbSogRnJhbWVMb2FkZXI6OmN1cnJlbnRIaXN0b3J5
SXRlbSgpCi17Ci0gICAgcmV0dXJuIG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpOwotfQotCi12
b2lkIEZyYW1lTG9hZGVyOjpzZXRDdXJyZW50SGlzdG9yeUl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSkKLXsKLSAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbSA9IGl0ZW07Ci19Ci0KIHZv
aWQgRnJhbWVMb2FkZXI6OnNldE1haW5Eb2N1bWVudEVycm9yKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIG1fY2xpZW50LT5zZXRNYWlu
RG9jdW1lbnRFcnJvcihsb2FkZXIsIGVycm9yKTsKQEAgLTQ1MzcsMTQgKzQ1NjYsMTkgQEAgUGFz
c1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyOjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0
IEludFNpemUmIHNpemUsIEhUTUwKICAgICByZXR1cm4gd2lkZ2V0OwogfQogCit2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjpzZXRDdXJyZW50VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAg
ICBpZiAobV9jdXJyZW50KQorICAgICAgICBtX2N1cnJlbnQtPnNldFRpdGxlKHRpdGxlKTsKK30K
Kwogdm9pZCBGcmFtZUxvYWRlcjo6ZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKIHsKICAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVGl0bGUobG9hZGVyKTsKIAogICAgIGlmIChs
b2FkZXIgPT0gbV9kb2N1bWVudExvYWRlcikgewogICAgICAgICAvLyBNdXN0IHVwZGF0ZSB0aGUg
ZW50cmllcyBpbiB0aGUgYmFjay1mb3J3YXJkIGxpc3QgdG9vLgotICAgICAgICBpZiAobV9jdXJy
ZW50SGlzdG9yeUl0ZW0pCi0gICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VGl0
bGUobG9hZGVyLT50aXRsZSgpKTsKKyAgICAgICAgaGlzdG9yeSgpLT5zZXRDdXJyZW50VGl0bGUo
bG9hZGVyLT50aXRsZSgpKTsKICAgICAgICAgLy8gVGhpcyBtdXN0IGdvIHRocm91Z2ggdGhlIFdl
YkZyYW1lIGJlY2F1c2UgaXQgaGFzIHRoZSByaWdodCBub3Rpb24gb2YgdGhlIGN1cnJlbnQgYi9m
IGl0ZW0uCiAgICAgICAgIG1fY2xpZW50LT5zZXRUaXRsZShsb2FkZXItPnRpdGxlKCksIGxvYWRl
ci0+dXJsRm9ySGlzdG9yeSgpKTsKICAgICAgICAgbV9jbGllbnQtPnNldE1haW5GcmFtZURvY3Vt
ZW50UmVhZHkodHJ1ZSk7IC8vIHVwZGF0ZSBvYnNlcnZlcnMgd2l0aCBuZXcgRE9NRG9jdW1lbnQK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCmluZGV4IDg5N2ZiMDguLjFkMTRlNDMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
aApAQCAtNzksNiArNzksNTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgYm9vbCBpc0Jh
Y2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSk7CiAKKyAgICBjbGFzcyBIaXN0b3J5Q29u
dHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBIaXN0
b3J5Q29udHJvbGxlcihGcmFtZSopOworICAgICAgICB+SGlzdG9yeUNvbnRyb2xsZXIoKTsKKwor
ICAgICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVIaXN0b3J5SXRlbShib29sIHVz
ZU9yaWdpbmFsKTsKKyAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSGlzdG9y
eUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRUYXJnZXQpOworCisgICAg
ICAgIHZvaWQgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVt
Kik7CisgICAgICAgIHZvaWQgcmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7CisK
KyAgICAgICAgdm9pZCBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0Ns
aXApOworICAgICAgICB2b2lkIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKKwor
ICAgICAgICB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7CisgICAgICAgIHZvaWQgc2F2ZURvY3Vt
ZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAgICAgICAgdm9pZCByZXN0b3JlRG9jdW1lbnRTdGF0ZSgp
OworCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpOworCisg
ICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICAg
ICAgdm9pZCByZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJh
bWVMb2FkVHlwZSk7CisKKyAgICAgICAgYm9vbCB1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikg
Y29uc3Q7CisgICAgICAgIGJvb2wgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBj
b25zdDsKKworICAgICAgICB2b2lkIHVwZGF0ZUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpOwor
ICAgICAgICB2b2lkIHVwZGF0ZUZvclJlbG9hZCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvclN0
YW5kYXJkTG9hZCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJh
Y2tGb3J3YXJkTGlzdCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvckNsaWVudFJlZGlyZWN0KCk7
CisgICAgICAgIHZvaWQgdXBkYXRlRm9yQ29tbWl0KCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9y
QW5jaG9yU2Nyb2xsKCk7CisKKyAgICAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnQoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnQuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRDdXJyZW50KEhpc3Rv
cnlJdGVtKik7CisgICAgICAgIHZvaWQgc2V0Q3VycmVudFRpdGxlKGNvbnN0IFN0cmluZyYpOwor
CisgICAgICAgIEhpc3RvcnlJdGVtKiBwcm92aXNpb25hbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
dmlzaW9uYWwuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRQcm92aXNpb25hbChIaXN0b3J5SXRl
bSopOworCisgICAgICAgIHZvaWQgY2xlYXJQcmV2aW91cygpOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBtX2N1
cnJlbnQ7CisgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91czsKKyAgICAgICAg
UmVmUHRyPEhpc3RvcnlJdGVtPiBtX3Byb3Zpc2lvbmFsOworICAgIH07CisKICAgICBjbGFzcyBG
cmFtZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBG
cmFtZUxvYWRlcihGcmFtZSosIEZyYW1lTG9hZGVyQ2xpZW50Kik7CkBAIC04OCw3ICsxMzksOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIFBvbGljeUNoZWNrZXIqIHBvbGljeUNoZWNrZXIo
KSB7IHJldHVybiAmbV9wb2xpY3lDaGVja2VyOyB9CisgICAgICAgIFBvbGljeUNoZWNrZXIqIHBv
bGljeUNoZWNrZXIoKSBjb25zdCB7IHJldHVybiBtX3BvbGljeUNoZWNrZXIuZ2V0KCk7IH0KKyAg
ICAgICAgSGlzdG9yeUNvbnRyb2xsZXIqIGhpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2hpc3Rv
cnkuZ2V0KCk7IH0KIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29vbCwgcGVvcGxl
LiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyB0aGF0IGFsbCBzdGFydCBs
b2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0byBjb25zb2xpZGF0ZSB0aGVzZSBpbnRv
IGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQgdHJ5IHRvIHJldXNlIG1vcmUgb2YKQEAg
LTI1NSw3ICszMDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBkaXNw
YXRjaFdpbmRvd09iamVjdEF2YWlsYWJsZSgpOwogICAgICAgICB2b2lkIGRpc3BhdGNoRG9jdW1l
bnRFbGVtZW50QXZhaWxhYmxlKCk7Ci0gICAgICAgIHZvaWQgcmVzdG9yZURvY3VtZW50U3RhdGUo
KTsKIAogICAgICAgICAvLyBNaXhlZCBjb250ZW50IHJlbGF0ZWQgZnVuY3Rpb25zLgogICAgICAg
ICBzdGF0aWMgYm9vbCBpc01peGVkQ29udGVudChTZWN1cml0eU9yaWdpbiogY29udGV4dCwgY29u
c3QgS1VSTCYpOwpAQCAtMjg2LDYgKzMzNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKICAgICAgICAgdm9pZCBjaGVja0NvbXBsZXRlZCgp
OwogCisgICAgICAgIHZvaWQgY2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCk7CisKICAg
ICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCByZXF1ZXN0T2Jq
ZWN0KFJlbmRlclBhcnQqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmcmFtZU5hbWUsCkBAIC0zMDAsMTQgKzM1Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdl
Pik7CiAgICAgICAgIGJvb2wgaXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2UoKSBjb25zdCB7IHJldHVy
biBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsgfQogCi0gICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKLSAgICAgICAgdm9pZCBzYXZlRG9jdW1lbnRBbmRT
Y3JvbGxTdGF0ZSgpOwotCi0gICAgICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SGlzdG9yeUl0ZW0o
KTsKLSAgICAgICAgdm9pZCBzZXRDdXJyZW50SGlzdG9yeUl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5
SXRlbT4pOwotCiAgICAgICAgIGJvb2wgY29tbWl0dGluZ0ZpcnN0UmVhbExvYWQoKSBjb25zdCB7
IHJldHVybiAhbV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50ICYmICFtX2NvbW1pdHRlZEZp
cnN0UmVhbERvY3VtZW50TG9hZDsgfQogICAgICAgICBib29sIGNvbW1pdHRlZEZpcnN0UmVhbERv
Y3VtZW50TG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRM
b2FkOyB9CisgICAgICAgIGJvb2wgY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudDsgfQogCiAgICAgICAgIHZv
aWQgaWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgpOwogCkBAIC0zMjgsNiArMzc2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGFsbENoaWxkcmVuQXJlQ29tcGxldGUoKSBj
b25zdDsgLy8gaW1tZWRpYXRlIGNoaWxkcmVuLCBub3QgYWxsIGRlc2NlbmRhbnRzCiAgICAgICAg
IHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3VibGUg
ZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIHZvaWQgY2xpZW50
UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2FuY2VsV2l0aExvYWRJblByb2dyZXNz
KTsKKyAgICAgICAgdm9pZCBsb2FkSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9hZFR5cGUpOwog
CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHB1YmxpYyBiZWNhdXNlIHRoaXMgYXN5bmNocm9u
b3VzIGNhbGxiYWNrIGZyb20gdGhlIEZyYW1lTG9hZGVyQ2xpZW50CiAgICAgICAgIC8vIHVzZXMg
dGhlIHBvbGljeSBtYWNoaW5lcnkgKGFuZCB0aGVyZWZvcmUgaXMgY2FsbGVkIHZpYSB0aGUgUG9s
aWN5Q2hlY2tlcikuICBPbmNlIHdlCkBAIC0zMzUsMzIgKzM4NCwxMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0Rm9ybSgpOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlSGlz
dG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xpcEF0
VGFyZ2V0KTsKLQogICAgICAgICBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUo
KTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24o
KTsKICAgICAgICAgYm9vbCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oaW50IGluZGVudExldmVs
KTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFy
Z2V0KGJvb2wgZG9DbGlwKTsKLSAgICAgICAgdm9pZCByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGUoKTsKLSAgICAgICAgdm9pZCBzYXZlRG9jdW1lbnRTdGF0ZSgpOwotICAgICAgICB2
b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7Ci0gICAgICAgIGJvb2wg
dXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OwotICAgICAgICB2b2lkIGludmFsaWRh
dGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKTsKLSAgICAgICAgdm9pZCByZWN1cnNpdmVHb1RvSXRl
bShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7Ci0gICAgICAgIGJv
b2wgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKLQotICAgICAgICB2
b2lkIHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKLSAgICAgICAgdm9p
ZCB1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlSGlzdG9yeUZv
clN0YW5kYXJkTG9hZCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JSZWRpcmVjdFdp
dGhMb2NrZWRCYWNrRm9yd2FyZExpc3QoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9y
Q2xpZW50UmVkaXJlY3QoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpOwotCiAgICAgICAg
IHZvaWQgY2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwogCiAgICAgICAgIHZv
aWQgc3RhcnRlZCgpOwpAQCAtNDAxLDcgKzQzMCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkQ29udGludWUpOwogCiAgICAgICAgIGJv
b2wgc2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBGcmFtZUxvYWRU
eXBlLCBjb25zdCBLVVJMJik7Ci0gICAgICAgIHZvaWQgYWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVu
dFNjcm9sbCgpOwogCiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUo
KTsKIApAQCAtNDY3LDEyICs0OTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IGJvb2wgc2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0Owog
Ci0gICAgICAgIHZvaWQgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3Rv
cnlJdGVtKik7Ci0KICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIEZyYW1lTG9hZGVy
Q2xpZW50KiBtX2NsaWVudDsKIAotICAgICAgICBQb2xpY3lDaGVja2VyIG1fcG9saWN5Q2hlY2tl
cjsKKyAgICAgICAgT3duUHRyPFBvbGljeUNoZWNrZXI+IG1fcG9saWN5Q2hlY2tlcjsKKyAgICAg
ICAgT3duUHRyPEhpc3RvcnlDb250cm9sbGVyPiBtX2hpc3Rvcnk7CiAKICAgICAgICAgRnJhbWVT
dGF0ZSBtX3N0YXRlOwogICAgICAgICBGcmFtZUxvYWRUeXBlIG1fbG9hZFR5cGU7CkBAIC01MzQs
MTAgKzU2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2lzRGlzcGxh
eWluZ0luaXRpYWxFbXB0eURvY3VtZW50OwogICAgICAgICBib29sIG1fY29tbWl0dGVkRmlyc3RS
ZWFsRG9jdW1lbnRMb2FkOwogCi0gICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9jdXJyZW50
SGlzdG9yeUl0ZW07Ci0gICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2aW91c0hpc3Rv
cnlJdGVtOwotICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fcHJvdmlzaW9uYWxIaXN0b3J5
SXRlbTsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgbV9kaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9u
OwogICAgICAgICBib29sIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlOwogICAgICAgICAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRl
eCAzOTdjYjcyLi42OWRhYzc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBQYWdlOjpn
b1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgICAgICBk
YXRhYmFzZVBvbGljeSA9IERhdGFiYXNlUG9saWN5Q29udGludWU7CiAjZW5kaWYKICAgICBtX21h
aW5GcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKGRhdGFiYXNlUG9saWN5KTsKLSAgICBt
X21haW5GcmFtZS0+bG9hZGVyKCktPmdvVG9JdGVtKGl0ZW0sIHR5cGUpOworICAgIG1fbWFpbkZy
YW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5nb1RvSXRlbShpdGVtLCB0eXBlKTsKIH0KIAogaW50
IFBhZ2U6OmdldEhpc3RvcnlMZW5ndGgoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VM
b2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1YjRlNmY4Li5lYzc3ZDc2IDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE3IEBACisyMDA5LTEwLTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFjdG9y
IEhpc3RvcnlDb250cm9sbGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyNDYKKworICAgICAgICBVcGRhdGUgQVBJ
IGNhbGwuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKToKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2xvYWRCYWNr
Rm9yd2FyZExpc3RGcm9tT3RoZXJWaWV3Ol0pOgorCiAyMDA5LTEwLTA4ICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpp
bmRleCBmY2RkNTRkLi41ZTUxODgxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTk4OCw3ICs5ODgsNyBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQog
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKCkKIHsKLSAgICBI
aXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIo
KS0+Y3VycmVudEhpc3RvcnlJdGVtKCk7CisgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRJdGVtID0g
Y29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudCgpOwog
ICAgIEFTU0VSVChjdXJyZW50SXRlbSk7CiAKICAgICAvLyBGSVhNRTogQXMgdGhlIEFTU0VSVCBh
dHRlc3RzLCBpdCBzZWVtcyB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBjdXJyZW50SXRlbSBoZXJl
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAzNjk5M2VlLi43ZDNlYjg0IDEwMDY0NAotLS0gYS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVh
cmRvd25FbmFibGVkKCkKICAgICAgICAgICAgIC8vIElmIHRoaXMgaXRlbSBpcyBzaG93aW5nICwg
c2F2ZSBhd2F5IGl0cyBjdXJyZW50IHNjcm9sbCBhbmQgZm9ybSBzdGF0ZSwKICAgICAgICAgICAg
IC8vIHNpbmNlIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxvYWRpbmcgYW5kIGl0IGlz
IG5vcm1hbGx5IG5vdCBzYXZlZAogICAgICAgICAgICAgLy8gdW50aWwgd2UgbGVhdmUgdGhhdCBw
YWdlLgotICAgICAgICAgICAgb3RoZXJWaWV3LT5fcHJpdmF0ZS0+cGFnZS0+bWFpbkZyYW1lKCkt
PmxvYWRlcigpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICAgICAgb3Ro
ZXJWaWV3LT5fcHJpdmF0ZS0+cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCkt
PnNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRy
PEhpc3RvcnlJdGVtPiBuZXdJdGVtID0gb3RoZXJCYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4
KGkpLT5jb3B5KCk7CiAgICAgICAgIGlmIChpID09IDApIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBhZDBkNTIzLi4xNTllMzE3
IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTEwLTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmFjdG9yIEhpc3RvcnlDb250cm9sbGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyNDYKKworICAgICAgICBV
cGRhdGUgQVBJIGNhbGwuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXc6OmxvYWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJWaWV3KToKKwogMjAwOS0xMC0wOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
U2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1dlYktpdC93aW4v
V2ViVmlldy5jcHAKaW5kZXggM2UxM2QwYS4uMDk2MDFiMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC00ODE1LDcgKzQ4
MTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmxvYWRCYWNrRm9yd2Fy
ZExpc3RGcm9tT3RoZXJWaWV3KAogICAgICAgICAgICAgLy8gSWYgdGhpcyBpdGVtIGlzIHNob3dp
bmcgLCBzYXZlIGF3YXkgaXRzIGN1cnJlbnQgc2Nyb2xsIGFuZCBmb3JtIHN0YXRlLAogICAgICAg
ICAgICAgLy8gc2luY2UgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgbG9hZGluZyBhbmQg
aXQgaXMgbm9ybWFsbHkgbm90IHNhdmVkCiAgICAgICAgICAgICAvLyB1bnRpbCB3ZSBsZWF2ZSB0
aGF0IHBhZ2UuCi0gICAgICAgICAgICBvdGhlcldlYlZpZXctPm1fcGFnZS0+bWFpbkZyYW1lKCkt
PmxvYWRlcigpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICAgICAgb3Ro
ZXJXZWJWaWV3LT5tX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZl
RG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOwogICAgICAgICB9CiAgICAgICAgIFJlZlB0cjxIaXN0
b3J5SXRlbT4gbmV3SXRlbSA9IG90aGVyQmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpKS0+
Y29weSgpOwogICAgICAgICBpZiAoIWkp
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40952</attachid>
            <date>2009-10-09 10:15:07 -0700</date>
            <delta_ts>2009-10-09 11:05:38 -0700</delta_ts>
            <desc>HistoryController</desc>
            <filename>bug-30246-20091009101506.patch</filename>
            <type>text/plain</type>
            <size>62281</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmMxN2VlZi4uOTYwMTU2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAwOS0xMC0wOSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBIaXN0b3J5Q29udHJvbGxlciBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjQ2CisK
KyAgICAgICAgSGlzdG9yeUNvbnRyb2xsZXIgaXMgaW4gY2hhcmdlIG9mIG1hbmFnaW5nIHRoZSBj
dXJyZW50IC8gcHJldmlvdXMgLworICAgICAgICBwcm92aXNpb25hbCBIaXN0b3J5SXRlbXMuICBU
aGUgc3BsaXQgaXNuJ3QgcGVyZmVjdCwgYnV0IGl0J3MgYSBwbGFjZSB0bworICAgICAgICBzdGFy
dC4gIEknbGwgbW92ZSBIaXN0b3J5Q29udHJvbGxlciBpbnRvIGl0cyBvd24gZmlsZSBpbiBhbm90
aGVyIHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6
Okhpc3RvcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVy
Ojp+SGlzdG9yeUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbG9zZVVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5Q29udHJvbGxlcjo6c2V0UHJvdmlzaW9uYWxJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGlkRmlyc3RMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckZyYW1lTG9hZENvbXBsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZnJhbWVMb2FkQ29tcGxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9u
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRl
ck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6
OmFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUhpc3RvcnlJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmFkZEJhY2tGb3J3YXJk
SXRlbUNsaXBwZWRBdFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250
cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1
cnJlbnRJdGVtQ2FjaGVkUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6c2F2ZURvY3VtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omxv
YWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmNoaWxkRnJhbWVzTWF0Y2hJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JTdGFuZGFy
ZExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRh
dGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNv
bnRyb2xsZXI6OnVwZGF0ZUZvclJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckFuY2hvclNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Ny
b2xsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJl
bnRJdGVtVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZENoYW5nZVRp
dGxlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlDb250cm9sbGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlD
b250cm9sbGVyOjpwcm92aXNpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
cG9saWN5Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGlzdG9yeSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1
bWVudCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OmdvVG9JdGVtKToKKwogMjAwOS0xMC0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGY5ZTE1
NmUuLmI5Y2VjNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTE2MiwxNSArMTYyLDExIEBAIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxNHN0b3BBbGxMb2FkZXJzRU5TXzE0RGF0YWJhc2VQb2xpY3lFCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZkZXRhY2hGcm9tUGFyZW50RXYKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxNmxvYWRGcmFtZVJlcXVlc3RFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFYmJO
M1dURjEwUGFzc1JlZlB0cklOU181RXZlbnRFRUVOUzVfSU5TXzlGb3JtU3RhdGVFRUUKIF9fWk43
V2ViQ29yZTExRnJhbWVMb2FkZXIxN3N0b3BGb3JVc2VyQ2FuY2VsRWIKLV9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxOGN1cnJlbnRIaXN0b3J5SXRlbUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMjFsb2FkVVJMSW50b0NoaWxkRnJhbWVFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzVG
cmFtZUUKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyMXNldEN1cnJlbnRIaXN0b3J5SXRlbUVO
M1dURjEwUGFzc1JlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFCiBfX1pON1dlYkNvcmUxMUZyYW1l
TG9hZGVyMjJmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uRVJLTlNfMTJBdG9taWNTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMjNpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CiBfX1pON1dl
YkNvcmUxMUZyYW1lTG9hZGVyMjN0aW1lT2ZMYXN0Q29tcGxldGVkTG9hZEV2CiBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyMjZyZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZ0VSS05TXzZTdHJpbmdF
Ci1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMjZzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZUV2
Ci1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMzZzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxv
YWRFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzE0U3Vic3RpdHV0ZURhdGFFYgogX19aTjdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU182U3Ry
aW5nRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1
ZXN0RWIKQEAgLTM4OCw2ICszODQsNyBAQCBfX1pON1dlYkNvcmUxNnRocmVhZEdsb2JhbERhdGFF
dgogX19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTNnZXRFUktOU18xNVByb3RlY3Rpb25T
cGFjZUUKIF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1JTUVUeXBlRVJL
TlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRyZWVHbHlwaFBh
Z2VDb3VudEV2CitfX1pON1dlYkNvcmUxN0hpc3RvcnlDb250cm9sbGVyMjZzYXZlRG9jdW1lbnRB
bmRTY3JvbGxTdGF0ZUV2CiBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9i
amVjdEV2CiBfX1pON1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0ltcGxF
UzFfCiBfX1pON1dlYkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05TXzZTdHJpbmdFCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggMTBkYjg3Zi4uZTQ1NDNkMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtMTYzLDEwICsxNjMsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9Q
YXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUKICAgICBy
ZXR1cm4gcGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9
CiAKK0hpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCisg
ICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitIaXN0b3J5Q29udHJvbGxlcjo6fkhpc3RvcnlD
b250cm9sbGVyKCkKK3sKK30KKwogRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFt
ZSwgRnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX3BvbGljeUNoZWNrZXIoZnJhbWUpCisgICAgLCBt
X3BvbGljeUNoZWNrZXIobmV3IFBvbGljeUNoZWNrZXIoZnJhbWUpKQorICAgICwgbV9oaXN0b3J5
KG5ldyBIaXN0b3J5Q29udHJvbGxlcihmcmFtZSkpCiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVD
b21taXR0ZWRQYWdlKQogICAgICwgbV9sb2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAg
ICAgLCBtX2RlbGVnYXRlSXNIYW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQpAQCAt
NTYzLDcgKzU3Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogCiBib29sIEZyYW1lTG9h
ZGVyOjpjbG9zZVVSTCgpCiB7Ci0gICAgc2F2ZURvY3VtZW50U3RhdGUoKTsKKyAgICBoaXN0b3J5
KCktPnNhdmVEb2N1bWVudFN0YXRlKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIG9ubHkgc2VuZCB0
aGUgcGFnZWhpZGUgZXZlbnQgaGVyZSBpZiB0aGUgY3VycmVudCBkb2N1bWVudCBleGlzdHMgYW5k
IGhhcyBub3QgYmVlbiBwbGFjZWQgaW4gdGhlIHBhZ2UgY2FjaGUuICAgIAogICAgIERvY3VtZW50
KiBjdXJyZW50RG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwpAQCAtODI2LDcgKzgzNiw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCwgYm9vbCBkaXNwYXRj
aCwgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICAgICAgICAgIGRvY3VtZW50LT5wYXJzZURO
U1ByZWZldGNoQ29udHJvbEhlYWRlcihkbnNQcmVmZXRjaENvbnRyb2wpOwogICAgIH0KIAotICAg
IHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CisgICAgaGlzdG9yeSgpLT5yZXN0b3JlRG9jdW1lbnRT
dGF0ZSgpOwogCiAgICAgZG9jdW1lbnQtPmltcGxpY2l0T3BlbigpOwogICAgIApAQCAtMTAxMywx
MyArMTAyMywxMyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRJY29uVVJMVG9JY29uRGF0YWJh
c2UoY29uc3QgS1VSTCYgaWNvbikKICAgICBpY29uRGF0YWJhc2UoKS0+c2V0SWNvblVSTEZvclBh
Z2VVUkwoaWNvbi5zdHJpbmcoKSwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkuc3RyaW5nKCkpOwogfQog
Ci12b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit2b2lkIEhpc3RvcnlD
b250cm9sbGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCiB7CiAgICAgRG9jdW1lbnQqIGRvYyA9
IG1fZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIAogICAgIEhpc3RvcnlJdGVtKiBpdGVtVG9S
ZXN0b3JlID0gMDsKICAgICAKLSAgICBzd2l0Y2ggKGxvYWRUeXBlKCkpIHsKKyAgICBzd2l0Y2gg
KG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZVJlbG9hZDoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbjoK
ICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlU2FtZToKQEAgLTEwMzEsNyArMTA0MSw3IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKICAgICAgICAgY2FzZSBGcmFt
ZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVS
ZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3Q6CiAgICAgICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZVN0YW5kYXJkOgotICAgICAgICAgICAgaXRlbVRvUmVzdG9yZSA9IG1fY3VycmVudEhpc3Rv
cnlJdGVtLmdldCgpOyAKKyAgICAgICAgICAgIGl0ZW1Ub1Jlc3RvcmUgPSBtX2N1cnJlbnRJdGVt
LmdldCgpOyAKICAgICB9CiAgICAgCiAgICAgaWYgKCFpdGVtVG9SZXN0b3JlKQpAQCAtMTIwMiwx
MSArMTIxMiwyMSBAQCBLVVJMIEZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcm
IHVybCkKICAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsK
IH0KIAordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2V0Q3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0q
IGl0ZW0pCit7CisgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW07Cit9CisKK3ZvaWQgSGlzdG9yeUNv
bnRyb2xsZXI6OnNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBt
X3Byb3Zpc2lvbmFsSXRlbSA9IGl0ZW07Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJ
bnRvQ2hpbGRGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJh
bWUqIGNoaWxkRnJhbWUpCiB7CiAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwogCi0gICAgSGlzdG9y
eUl0ZW0qIHBhcmVudEl0ZW0gPSBjdXJyZW50SGlzdG9yeUl0ZW0oKTsKKyAgICBIaXN0b3J5SXRl
bSogcGFyZW50SXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKICAgICBGcmFtZUxvYWRU
eXBlIGxvYWRUeXBlID0gdGhpcy0+bG9hZFR5cGUoKTsKICAgICBGcmFtZUxvYWRUeXBlIGNoaWxk
TG9hZFR5cGUgPSBGcmFtZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0
OwogCkBAIC0xMjIyLDcgKzEyNDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0No
aWxkRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIsCiAgICAgICAg
ICAgICAvLyB0aGlzIGlzIG5lZWRlZCBpcyBSYWRhciAzMjEzNTU2LgogICAgICAgICAgICAgd29y
a2luZ1VSTCA9IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBjaGlsZEl0ZW0tPm9yaWdpbmFsVVJMU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY2hpbGRMb2FkVHlwZSA9IGxvYWRUeXBlOwotICAgICAgICAg
ICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPm1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbSA9IGNoaWxk
SXRlbTsKKyAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNldFBy
b3Zpc2lvbmFsSXRlbShjaGlsZEl0ZW0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ2LDcg
KzE1NjYsNyBAQCBib29sIEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0Zy
YW1lKCkKICAgICAgICAgJiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtl
cnMobV9mcmFtZS0+ZG9jdW1lbnQoKSkKICNlbmRpZgogICAgICAgICAmJiAhbV9mcmFtZS0+ZG9j
dW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpCi0gICAgICAgICYmIG1fY3VycmVudEhpc3RvcnlJ
dGVtCisgICAgICAgICYmIGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQogICAgICAgICAmJiAhbV9x
dWlja1JlZGlyZWN0Q29taW5nCiAgICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRp
bmdJbkFQSVNlbnNlKCkKICAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmco
KQpAQCAtMTY5Nyw3ICsxNzE3LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFt
ZURlY2lzaW9uKGludCBpbmRlbnRMZXZlbCkKICNlbmRpZgogICAgICAgICBpZiAobV9mcmFtZS0+
ZG9jdW1lbnQoKS0+dXNpbmdHZW9sb2NhdGlvbigpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAg
LUZyYW1lIHVzZXMgR2VvbG9jYXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAg
IGlmICghbV9jdXJyZW50SGlzdG9yeUl0ZW0pCisgICAgICAgIGlmICghaGlzdG9yeSgpLT5jdXJy
ZW50SXRlbSgpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBp
dGVtIik7IGNhbm5vdENhY2hlID0gdHJ1ZTsgfQogICAgICAgICBpZiAobV9xdWlja1JlZGlyZWN0
Q29taW5nKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWlu
ZyIpOyBjYW5ub3RDYWNoZSA9IHRydWU7IH0KQEAgLTE3NzUsNyArMTc5NSw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OnNjcm9sbFRvQW5jaG9yKGNvbnN0IEtVUkwmIHVybCkKICAgICB9CiAgICAgCiAg
ICAgbV9VUkwgPSB1cmw7Ci0gICAgdXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpOworICAg
IGhpc3RvcnkoKS0+dXBkYXRlRm9yQW5jaG9yU2Nyb2xsKCk7CiAKICAgICAvLyBJZiB3ZSB3ZXJl
IGluIHRoZSBhdXRvc2Nyb2xsL3BhblNjcm9sbCBtb2RlIHdlIHdhbnQgdG8gc3RvcCBpdCBiZWZv
cmUgZm9sbG93aW5nIHRoZSBsaW5rIHRvIHRoZSBhbmNob3IKICAgICBtX2ZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c3RvcEF1dG9zY3JvbGxUaW1lcigpOwpAQCAtMjQxOCw3ICsyNDM4LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFn
ZT4gcHJwQ2FjaGVkUGFnZSkKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNh
Y2hlIHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2Zv
cndhcmQgY2FjaGUuCiAgICAgLy8gV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtu
b3cgZm9yIHN1cmUgdGhhdCBhIG5ldyBwYWdlIGlzIGFib3V0IHRvIGJlIGxvYWRlZC4KLSAgICBj
YWNoZVBhZ2VGb3JIaXN0b3J5SXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7CisgICAg
Y2FjaGVQYWdlRm9ySGlzdG9yeUl0ZW0oaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKICAgICAK
ICAgICBpZiAobV9sb2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVwbGFjZSkKICAgICAgICAgY2xv
c2VPbGREYXRhU291cmNlcygpOwpAQCAtMjQ1Miw3ICsyNDcyLDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVk
UGFnZSkKICAgICBMT0coTG9hZGluZywgIldlYkNvcmVMb2FkaW5nICVzOiBGaW5pc2hlZCBjb21t
aXR0aW5nIHByb3Zpc2lvbmFsIGxvYWQgdG8gVVJMICVzIiwgbV9mcmFtZS0+dHJlZSgpLT5uYW1l
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9VUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAKICAgICBpZiAobV9sb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQgJiYgbV9kb2N1
bWVudExvYWRlci0+aXNDbGllbnRSZWRpcmVjdCgpKQotICAgICAgICB1cGRhdGVIaXN0b3J5Rm9y
Q2xpZW50UmVkaXJlY3QoKTsKKyAgICAgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JDbGllbnRSZWRp
cmVjdCgpOwogCiAgICAgaWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKSB7CiAgICAgICAgIG1f
ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CkBAIC0yNDc1LDcg
KzI0OTUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1Jl
ZlB0cjxDYWNoZWRQYWdlPiBwcnBDYWNoZWRQYWdlKQogICAgICAgICAgICAgc2VuZFJlbWFpbmlu
Z0RlbGVnYXRlTWVzc2FnZXMoaWRlbnRpZmllciwgcmVzcG9uc2UsIHN0YXRpY19jYXN0PGludD4o
cmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpLCBlcnJvcik7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0ZW0u
Z2V0KCkpOworICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGhpc3RvcnkoKS0+Y3VycmVudEl0
ZW0oKSk7CiAKICAgICAgICAgbV9kb2N1bWVudExvYWRlci0+c2V0UHJpbWFyeUxvYWRDb21wbGV0
ZSh0cnVlKTsKIApAQCAtMjQ5Myw3ICsyNTEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNp
dGlvblRvQ29tbWl0dGVkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9jbGllbnQtPnNldENvcGllc09uU2Nyb2xsKCk7Ci0gICAgdXBk
YXRlSGlzdG9yeUZvckNvbW1pdCgpOworICAgIGhpc3RvcnkoKS0+dXBkYXRlRm9yQ29tbWl0KCk7
CiAKICAgICAvLyBUaGUgY2FsbCB0byBjbG9zZVVSTCgpIGludm9rZXMgdGhlIHVubG9hZCBldmVu
dCBoYW5kbGVyLCB3aGljaCBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkKICAgICAvLyBKYXZhU2NyaXB0
LiBJZiB0aGUgc2NyaXB0IGluaXRpYXRlcyBhIG5ldyBsb2FkLCB3ZSBuZWVkIHRvIGFiYW5kb24g
dGhlIGN1cnJlbnQgbG9hZCwKQEAgLTI1MjUsNyArMjU0NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2Up
CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZDoKICAgICAgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIGlm
IChwYWdlLT5iYWNrRm9yd2FyZExpc3QoKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVI
aXN0b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGhp
c3RvcnkoKS0+dXBkYXRlRm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CiAKICAgICAgICAgICAg
ICAgICAgICAgLy8gQ3JlYXRlIGEgZG9jdW1lbnQgdmlldyBmb3IgdGhpcyBkb2N1bWVudCwgb3Ig
dXNlZCB0aGUgY2FjaGVkIHZpZXcuCiAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRQYWdl
KSB7CkBAIC0yNTQzLDEyICsyNTYzLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25U
b0NvbW1pdHRlZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgIGNh
c2UgRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW46CiAgICAgICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZVNhbWU6CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVJlcGxhY2U6Ci0gICAgICAgICAg
ICB1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCk7CisgICAgICAgICAgICBoaXN0b3J5KCktPnVwZGF0
ZUZvclJlbG9hZCgpOwogICAgICAgICAgICAgbV9jbGllbnQtPnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZEZvck5ld1BhZ2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRnJhbWVM
b2FkVHlwZVN0YW5kYXJkOgotICAgICAgICAgICAgdXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9h
ZCgpOworICAgICAgICAgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JTdGFuZGFyZExvYWQoKTsKICNp
Zm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgb3Jp
Z2luYWxseSBhZGRlZCBmb3IgYSBMZW9wYXJkIHBlcmZvcm1hbmNlIGltcG9ydmVtZW50LiBXZSBk
ZWNpZGVkIHRvIAogICAgICAgICAgICAgLy8gaWZkZWYgaXQgdG8gZml4IGNvcnJlY3RuZXNzIGlz
c3VlcyBvbiBUaWdlciBkb2N1bWVudGVkIGluIDxyZGFyOi8vcHJvYmxlbS81NDQxODIzPi4KQEAg
LTI1NTksNyArMjU3OSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3Q6Ci0gICAgICAgICAgICB1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFj
a0ZvcndhcmRMaXN0KCk7CisgICAgICAgICAgICBoaXN0b3J5KCktPnVwZGF0ZUZvclJlZGlyZWN0
V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdCgpOwogICAgICAgICAgICAgbV9jbGllbnQtPnRyYW5z
aXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0y
OTA4LDcgKzI5MjgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRo
aXNGcmFtZSgpCiAgICAgICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW07CiAgICAgICAg
ICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICBp
ZiAoaXNCYWNrRm9yd2FyZExvYWRUeXBlKGxvYWRUeXBlKCkpICYmIG1fZnJhbWUgPT0gcGFnZS0+
bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBtX2N1cnJlbnRIaXN0b3J5
SXRlbTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0o
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzZXQgPSB0cnVl
OwogICAgICAgICAgICAgaWYgKCEocGRsLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkgJiYgIXBkbC0+
aXNTdG9wcGluZygpKSkgewpAQCAtMjk1Nyw3ICsyOTc3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y2hlY2tMb2FkQ29tcGxldGVGb3JUaGlzRnJhbWUoKQogICAgICAgICAgICAgLy8gSWYgdGhlIHVz
ZXIgaGFkIGEgc2Nyb2xsIHBvaW50LCBzY3JvbGwgdG8gaXQsIG92ZXJyaWRpbmcgdGhlIGFuY2hv
ciBwb2ludCBpZiBhbnkuCiAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBh
Z2UoKSkKICAgICAgICAgICAgICAgICBpZiAoKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRU
eXBlKSB8fCBtX2xvYWRUeXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgbV9sb2FkVHlwZSA9
PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0
ZSgpOworICAgICAgICAgICAgICAgICAgICBoaXN0b3J5KCktPnJlc3RvcmVTY3JvbGxQb3NpdGlv
bkFuZFZpZXdTdGF0ZSgpOwogCiAgICAgICAgICAgICBpZiAobV9jcmVhdGluZ0luaXRpYWxFbXB0
eURvY3VtZW50IHx8ICFtX2NvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zMDE4LDcgKzMwMzgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpk
aWRGaXJzdExheW91dCgpCiB7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkp
CiAgICAgICAgIGlmIChpc0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkgJiYgcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCkpCi0gICAgICAgICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGUoKTsKKyAgICAgICAgICAgIGhpc3RvcnkoKS0+cmVzdG9yZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlKCk7CiAKICAgICBtX2ZpcnN0TGF5b3V0RG9uZSA9IHRydWU7CiAgICAgbV9j
bGllbnQtPmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKTsKQEAgLTMwMjksMTUgKzMwNDksMjAgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKIH0KIAor
dm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVkKCkKK3sK
KyAgICAvLyBFdmVuIGlmIGFscmVhZHkgY29tcGxldGUsIHdlIG1pZ2h0IGhhdmUgc2V0IGEgcHJl
dmlvdXMgaXRlbSBvbiBhIGZyYW1lIHRoYXQKKyAgICAvLyBkaWRuJ3QgZG8gYW55IGRhdGEgbG9h
ZGluZyBvbiB0aGUgcGFzdCB0cmFuc2FjdGlvbi4gTWFrZSBzdXJlIHRvIGNsZWFyIHRoZXNlIG91
dC4KKyAgICBtX3ByZXZpb3VzSXRlbSA9IDA7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmZyYW1l
TG9hZENvbXBsZXRlZCgpCiB7CiAgICAgLy8gTm90ZTogQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcy4KIAogICAgIG1fY2xpZW50LT5mcmFtZUxvYWRDb21wbGV0ZWQoKTsKIAotICAgIC8vIEV2
ZW4gaWYgYWxyZWFkeSBjb21wbGV0ZSwgd2UgbWlnaHQgaGF2ZSBzZXQgYSBwcmV2aW91cyBpdGVt
IG9uIGEgZnJhbWUgdGhhdAotICAgIC8vIGRpZG4ndCBkbyBhbnkgZGF0YSBsb2FkaW5nIG9uIHRo
ZSBwYXN0IHRyYW5zYWN0aW9uLiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlc2Ugb3V0LgotICAgIG1f
cHJldmlvdXNIaXN0b3J5SXRlbSA9IDA7CisgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JGcmFtZUxv
YWRDb21wbGV0ZWQoKTsKIAogICAgIC8vIEFmdGVyIGEgY2FuY2VsZWQgcHJvdmlzaW9uYWwgbG9h
ZCwgZmlyc3RMYXlvdXREb25lIGlzIGZhbHNlLgogICAgIC8vIFJlc2V0IGl0IHRvIHRydWUgaWYg
d2UncmUgZGlzcGxheWluZyBhIHBhZ2UuCkBAIC0zMTM4LDcgKzMxNjMsNyBAQCB2b2lkIEZyYW1l
TG9hZGVyOjpkZXRhY2hGcm9tUGFyZW50KCkKIAogICAgIGNsb3NlVVJMKCk7CiAgICAgc3RvcEFs
bExvYWRlcnMoKTsKLSAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oY3Vy
cmVudEhpc3RvcnlJdGVtKCkpOworICAgIGhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5k
Vmlld1N0YXRlVG9JdGVtKGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CiAgICAgZGV0YWNoQ2hp
bGRyZW4oKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCkBAIC0zMzgwLDcgKzM0MDUsNyBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yLCBib29sIGlzQwogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1l
KTsKIAogICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gYWN0aXZlRG9jdW1lbnRM
b2FkZXIoKTsKLSAgICAKKwogICAgIGlmIChpc0NvbXBsZXRlKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBEb24ndCB3YW50IHRvIGRvIHRoaXMgaWYgYW4gZW50aXJlbHkgbmV3IGxvYWQgaXMgZ29pbmcs
IHNvIHNob3VsZCBjaGVjawogICAgICAgICAvLyB0aGF0IGJvdGggZGF0YSBzb3VyY2VzIG9uIHRo
ZSBmcmFtZSBhcmUgZWl0aGVyIHRoaXMgb3IgbmlsLgpAQCAtMzM4OCw3ICszNDEzLDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRNYWluUmVzb3VyY2VFcnJvcihjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvciwgYm9vbCBpc0MKICAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRGYWxsQmFj
ayhlcnJvcikpCiAgICAgICAgICAgICBoYW5kbGVGYWxsYmFja0NvbnRlbnQoKTsKICAgICB9Ci0g
ICAgCisKICAgICBpZiAobV9zdGF0ZSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgJiYgbV9wcm92
aXNpb25hbERvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1VUkwg
PT0gbV9wcm92aXNpb25hbERvY3VtZW50TG9hZGVyLT5vcmlnaW5hbFJlcXVlc3RDb3B5KCkudXJs
KCkpCiAgICAgICAgICAgICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CkBAIC0zMzk2LDcg
KzM0MjEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNv
bnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBib29sIGlzQwogICAgICAgICAvLyBXZSBtaWdodCBo
YXZlIG1hZGUgYSBwYWdlIGNhY2hlIGl0ZW0sIGJ1dCBub3cgd2UncmUgYmFpbGluZyBvdXQgZHVl
IHRvIGFuIGVycm9yIGJlZm9yZSB3ZSBldmVyCiAgICAgICAgIC8vIHRyYW5zaXRpb25lZCB0byB0
aGUgbmV3IHBhZ2UgKGJlZm9yZSBXZWJGcmFtZVN0YXRlID09IGNvbW1pdCkuICBUaGUgZ29hbCBo
ZXJlIGlzIHRvIHJlc3RvcmUgYW55IHN0YXRlCiAgICAgICAgIC8vIHNvIHRoYXQgdGhlIGV4aXN0
aW5nIHZpZXcgKHRoYXQgd2VuZXZlciBnb3QgZmFyIGVub3VnaCB0byByZXBsYWNlKSBjYW4gY29u
dGludWUgYmVpbmcgdXNlZC4KLSAgICAgICAgaW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFn
ZSgpOworICAgICAgICBoaXN0b3J5KCktPmludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2Uo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZp
bmlzaGVkIGhlcmUgc28gdGhhdCB0aGUgZnJhbWUgbG9hZCBkZWxlZ2F0ZSBpcyBub3RpZmllZCB0
aGF0IHRoZSByZWRpcmVjdCdzCiAgICAgICAgIC8vIHN0YXR1cyBoYXMgY2hhbmdlZCwgaWYgdGhl
cmUgd2FzIGEgcmVkaXJlY3QuIFRoZSBmcmFtZSBsb2FkIGRlbGVnYXRlIG1heSBoYXZlIHNhdmVk
IHNvbWUgc3RhdGUgYWJvdXQKQEAgLTM0MDYsOCArMzQzMSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnJlY2VpdmVkTWFpblJlc291cmNlRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGJv
b2wgaXNDCiAgICAgICAgIGlmIChtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlvbikKICAgICAgICAg
ICAgIGNsaWVudFJlZGlyZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChmYWxzZSk7CiAgICAgfQotICAg
IAotICAgIAorCiAgICAgbG9hZGVyLT5tYWluUmVjZWl2ZWRFcnJvcihlcnJvciwgaXNDb21wbGV0
ZSk7CiB9CiAKQEAgLTM0NDEsNyArMzQ2NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVl
RnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1CiAg
ICAgICAgIC8vIHdlIGhhdmUgYWxyZWFkeSBzYXZlZCBhd2F5IHRoZSBzY3JvbGwgYW5kIGRvYyBz
dGF0ZSBmb3IgdGhlIGxvbmcgc2xvdyBsb2FkLAogICAgICAgICAvLyBidXQgaXQncyBub3QgYW4g
b2J2aW91cyBjYXNlLgogCi0gICAgICAgIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwo
KTsKKyAgICAgICAgaGlzdG9yeSgpLT5hZGRIaXN0b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCk7
CiAgICAgfQogICAgIAogICAgIHNjcm9sbFRvQW5jaG9yKHVybCk7CkBAIC0zNDkwLDcgKzM1MTQs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmlnYXRpb25Qb2xpY3ko
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzcwogICAgIC8vIHRocm91Z2ggdGhpcyBtZXRob2Qg
YWxyZWFkeSwgbmVzdGVkOyBvdGhlcndpc2UsIHBvbGljeURhdGFTb3VyY2Ugc2hvdWxkIHN0aWxs
IGJlIHNldC4KICAgICBBU1NFUlQobV9wb2xpY3lEb2N1bWVudExvYWRlciB8fCAhbV9wcm92aXNp
b25hbERvY3VtZW50TG9hZGVyLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSk7CiAKLSAgICBi
b29sIGlzVGFyZ2V0SXRlbSA9IG1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbSA/IG1fcHJvdmlzaW9u
YWxIaXN0b3J5SXRlbS0+aXNUYXJnZXRJdGVtKCkgOiBmYWxzZTsKKyAgICBib29sIGlzVGFyZ2V0
SXRlbSA9IGhpc3RvcnkoKS0+cHJvdmlzaW9uYWxJdGVtKCkgPyBoaXN0b3J5KCktPnByb3Zpc2lv
bmFsSXRlbSgpLT5pc1RhcmdldEl0ZW0oKSA6IGZhbHNlOwogCiAgICAgLy8gVHdvIHJlYXNvbnMg
d2UgY2FuJ3QgY29udGludWU6CiAgICAgLy8gICAgMSkgTmF2aWdhdGlvbiBwb2xpY3kgZGVsZWdh
dGUgc2FpZCB3ZSBjYW4ndCBzbyByZXF1ZXN0IGlzIG5pbC4gQSBwcmltYXJ5IGNhc2Ugb2YgdGhp
cyAKQEAgLTM1MTMsNyArMzUzNyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlTG9hZEFm
dGVyTmF2aWdhdGlvblBvbGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBQYXNzCiAgICAgICAg
IGlmICgoaXNUYXJnZXRJdGVtIHx8IGlzTG9hZGluZ01haW5GcmFtZSgpKSAmJiBpc0JhY2tGb3J3
YXJkTG9hZFR5cGUocG9saWN5Q2hlY2tlcigpLT5sb2FkVHlwZSgpKSkKICAgICAgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgICAgICAgICAgRnJhbWUq
IG1haW5GcmFtZSA9IHBhZ2UtPm1haW5GcmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChIaXN0
b3J5SXRlbSogcmVzZXRJdGVtID0gbWFpbkZyYW1lLT5sb2FkZXIoKS0+bV9jdXJyZW50SGlzdG9y
eUl0ZW0uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIHJlc2V0SXRl
bSA9IG1haW5GcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSkgewogICAg
ICAgICAgICAgICAgICAgICBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Z29Ub0l0ZW0ocmVzZXRJ
dGVtKTsKICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+
c2V0dGluZ3MoKTsKICAgICAgICAgICAgICAgICAgICAgcGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0
ZW0oKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSA/IDAg
OiByZXNldEl0ZW0pOwpAQCAtMzY3MCwxNCArMzY5NCwxNCBAQCBib29sIEZyYW1lTG9hZGVyOjpz
aG91bGRJbnRlcnJ1cHRMb2FkRm9yWEZyYW1lT3B0aW9ucyhjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6YWRkSGlzdG9y
eUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjphZGRIaXN0
b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCkKIHsKICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlw
cGVkQXRUYXJnZXQoZmFsc2UpOwogfQogCiBib29sIEZyYW1lTG9hZGVyOjpsb2FkUHJvdmlzaW9u
YWxJdGVtRnJvbUNhY2hlZFBhZ2UoKQogewotICAgIFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQ
YWdlID0gcGFnZUNhY2hlKCktPmdldChtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0uZ2V0KCkpOwor
ICAgIFJlZlB0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChoaXN0
b3J5KCktPnByb3Zpc2lvbmFsSXRlbSgpKTsKICAgICBpZiAoIWNhY2hlZFBhZ2UgfHwgIWNhY2hl
ZFBhZ2UtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzcyMSwxNCAr
Mzc0NSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpwYWdlSGlkZGVuKCkKIAogYm9vbCBGcmFtZUxv
YWRlcjo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYgdXJsKSBjb25z
dAogewotICAgIGlmICghbV9jdXJyZW50SGlzdG9yeUl0ZW0pCisgICAgaWYgKCFoaXN0b3J5KCkt
PmN1cnJlbnRJdGVtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdXJsID09
IG1fY3VycmVudEhpc3RvcnlJdGVtLT51cmwoKSB8fCB1cmwgPT0gbV9jdXJyZW50SGlzdG9yeUl0
ZW0tPm9yaWdpbmFsVVJMKCk7CisgICAgcmV0dXJuIHVybCA9PSBoaXN0b3J5KCktPmN1cnJlbnRJ
dGVtKCktPnVybCgpIHx8IHVybCA9PSBoaXN0b3J5KCktPmN1cnJlbnRJdGVtKCktPm9yaWdpbmFs
VVJMKCk7CiB9CiAKLVBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVI
aXN0b3J5SXRlbShib29sIHVzZU9yaWdpbmFsKQorUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlz
dG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUhpc3RvcnlJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiB7Ci0g
ICAgRG9jdW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IGRvY3VtZW50TG9hZGVyKCk7CisgICAgRG9j
dW1lbnRMb2FkZXIqIGRvY0xvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpOwogICAgIAogICAgIEtVUkwgdW5yZWFjaGFibGVVUkwgPSBkb2NMb2FkZXIgPyBkb2NMb2Fk
ZXItPnVucmVhY2hhYmxlVVJMKCkgOiBLVVJMKCk7CiAgICAgCkBAIC0zNzc3LDEzICszODAxLDI1
IEBAIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRl
bShib29sIHVzZU9yaWdpbmFsKQogICAgIH0KICAgICAKICAgICAvLyBTZXQgdGhlIGl0ZW0gZm9y
IHdoaWNoIHdlIHdpbGwgc2F2ZSBkb2N1bWVudCBzdGF0ZQotICAgIG1fcHJldmlvdXNIaXN0b3J5
SXRlbSA9IG1fY3VycmVudEhpc3RvcnlJdGVtOwotICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0g
aXRlbTsKKyAgICBtX3ByZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07CisgICAgbV9jdXJyZW50
SXRlbSA9IGl0ZW07CiAgICAgCiAgICAgcmV0dXJuIGl0ZW0ucmVsZWFzZSgpOwogfQorICAgIAor
dm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkKK3sKKyAg
ICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuOwogCi12b2lkIEZyYW1lTG9hZGVyOjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRU
YXJnZXQoYm9vbCBkb0NsaXApCisgICAgaWYgKCFtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24g
JiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVudHJpZXMoKS5zaXplKCkgPT0gMSkgeworICAg
ICAgICBtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICBtX2NsaWVu
dC0+ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpOworICAgIH0KK30KKwordm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlw
KQogewogICAgIC8vIEluIHRoZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBhYm91dCBhIHBhZ2Ugd2l0
aCBmcmFtZXMsIHdlIHN0b3JlIGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1pcnJvcnMgdGhlIGZyYW1l
IHRyZWUuICAKICAgICAvLyBUaGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFyZ2V0IG9mIHRoZSB1c2Vy
J3MgbmF2aWdhdGlvbiBpcyBkZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0SXRlbSIuICAKQEAgLTM3
OTQsNDEgKzM4MzAsMzggQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xp
cHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkp
CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0
b3J5KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSogbWFpbkZyYW1l
ID0gcGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgQVNTRVJUKG1haW5GcmFtZSk7CiAgICAgRnJhbWVM
b2FkZXIqIGZyYW1lTG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKIAotICAgIGlmICghZnJh
bWVMb2FkZXItPm1fZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbiAmJiBwYWdlLT5iYWNrRm9yd2Fy
ZExpc3QoKS0+ZW50cmllcygpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5t
X2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+ZGlk
UGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpOwotICAgIH0KKyAgICBmcmFtZUxvYWRlci0+Y2hlY2tE
aWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCk7CiAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0
ZW0gPSBmcmFtZUxvYWRlci0+Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7
Ci0gICAgTE9HKEJhY2tGb3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tm
b3J3YXJkIGl0ZW0gJXAgZm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIo
KS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gaXRlbSA9IGZyYW1lTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUhpc3RvcnlJdGVtVHJlZSht
X2ZyYW1lLCBkb0NsaXApOworICAgIExPRyhCYWNrRm9yd2FyZCwgIldlYkNvcmVCYWNrRm9yd2Fy
ZCAtIEFkZGluZyBiYWNrZm9yd2FyZCBpdGVtICVwIGZvciBmcmFtZSAlcyIsIGl0ZW0uZ2V0KCks
IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwoKS5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CiAgICAgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmFkZEl0ZW0oaXRlbSk7
CiB9CiAKLVBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5
SXRlbVRyZWUoRnJhbWUqIHRhcmdldEZyYW1lLCBib29sIGNsaXBBdFRhcmdldCkKK1Bhc3NSZWZQ
dHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250cm9sbGVyOjpjcmVhdGVIaXN0b3J5SXRlbVRyZWUo
RnJhbWUqIHRhcmdldEZyYW1lLCBib29sIGNsaXBBdFRhcmdldCkKIHsKICAgICBSZWZQdHI8SGlz
dG9yeUl0ZW0+IGJmSXRlbSA9IGNyZWF0ZUhpc3RvcnlJdGVtKG1fZnJhbWUtPnRyZWUoKS0+cGFy
ZW50KCkgPyB0cnVlIDogZmFsc2UpOwotICAgIGlmIChtX3ByZXZpb3VzSGlzdG9yeUl0ZW0pCi0g
ICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX3ByZXZpb3VzSGlz
dG9yeUl0ZW0uZ2V0KCkpOworICAgIGlmIChtX3ByZXZpb3VzSXRlbSkKKyAgICAgICAgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fcHJldmlvdXNJdGVtLmdldCgpKTsKICAg
ICBpZiAoIShjbGlwQXRUYXJnZXQgJiYgbV9mcmFtZSA9PSB0YXJnZXRGcmFtZSkpIHsKICAgICAg
ICAgLy8gc2F2ZSBmcmFtZSBzdGF0ZSBmb3IgaXRlbXMgdGhhdCBhcmVuJ3QgbG9hZGluZyAoa2h0
bWwgZG9lc24ndCBzYXZlIHRob3NlKQogICAgICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOwogICAg
ICAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAg
ICBGcmFtZUxvYWRlciogY2hpbGRMb2FkZXIgPSBjaGlsZC0+bG9hZGVyKCk7CiAgICAgICAgICAg
ICBib29sIGhhc0NoaWxkTG9hZGVkID0gY2hpbGRMb2FkZXItPmZyYW1lSGFzTG9hZGVkKCk7Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gSWYgdGhlIGNoaWxkIGlzIGEgZnJhbWUgY29y
cmVzcG9uZGluZyB0byBhbiA8b2JqZWN0PiBlbGVtZW50IHRoYXQgbmV2ZXIgbG9hZGVkLAogICAg
ICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBoaXN0b3J5IGl0ZW0sIGJlY2F1
c2UgdGhhdCBjYXVzZXMgZmFsbGJhY2sgY29udGVudAogICAgICAgICAgICAgLy8gdG8gYmUgaWdu
b3JlZCBvbiByZWxvYWQuCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghKCFoYXNDaGls
ZExvYWRlZCAmJiBjaGlsZExvYWRlci0+aXNIb3N0ZWRCeU9iamVjdEVsZW1lbnQoKSkpCi0gICAg
ICAgICAgICAgICAgYmZJdGVtLT5hZGRDaGlsZEl0ZW0oY2hpbGRMb2FkZXItPmNyZWF0ZUhpc3Rv
cnlJdGVtVHJlZSh0YXJnZXRGcmFtZSwgY2xpcEF0VGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
YmZJdGVtLT5hZGRDaGlsZEl0ZW0oY2hpbGRMb2FkZXItPmhpc3RvcnkoKS0+Y3JlYXRlSGlzdG9y
eUl0ZW1UcmVlKHRhcmdldEZyYW1lLCBjbGlwQXRUYXJnZXQpKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBpZiAobV9mcmFtZSA9PSB0YXJnZXRGcmFtZSkKQEAgLTM4NDQsMTQgKzM4NzcsMTQgQEAg
RnJhbWUqIEZyYW1lTG9hZGVyOjpmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKICAgICByZXR1cm4gZnJhbWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnNh
dmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRl
bShIaXN0b3J5SXRlbSogaXRlbSkKIHsKICAgICBpZiAoIWl0ZW0gfHwgIW1fZnJhbWUtPnZpZXco
KSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBpdGVtLT5zZXRTY3JvbGxQb2ludCht
X2ZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBncmVhdCB0byB3b3JrIG91dCBhIHdheSB0byBwdXQgdGhpcyBjb2RlIGluIFdlYkNvcmUg
aW5zdGVhZCBvZiBjYWxsaW5nIHRocm91Z2ggdG8gdGhlIGNsaWVudC4KLSAgICBtX2NsaWVudC0+
c2F2ZVZpZXdTdGF0ZVRvSXRlbShpdGVtKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPnNhdmVWaWV3U3RhdGVUb0l0ZW0oaXRlbSk7CiB9CiAKIC8qCkBAIC0zODY1LDM0ICszODk4
LDM0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRv
SXRlbShIaXN0b3J5SXRlbSogaXRlbSkKICAyKSBJZiB0aGUgbGF5b3V0IGhhcHBlbnMgYWZ0ZXIg
dGhlIGxvYWQgY29tcGxldGVzLCB0aGUgYXR0ZW1wdCB0byByZXN0b3JlIGF0IGxvYWQgY29tcGxl
dGlvbiB0aW1lIHNpbGVudGx5CiAgZmFpbHMuICBXZSB0aGVuIHN1Y2Nlc3NmdWxseSByZXN0b3Jl
IGl0IHdoZW4gdGhlIGxheW91dCBoYXBwZW5zLgogKi8KLXZvaWQgRnJhbWVMb2FkZXI6OnJlc3Rv
cmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpy
ZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQogewotICAgIGlmICghbV9jb21taXR0
ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQpCisgICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+Y29t
bWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFT
U0VSVChtX2N1cnJlbnRIaXN0b3J5SXRlbSk7CisgICAgQVNTRVJUKG1fY3VycmVudEl0ZW0pOwog
ICAgIAogICAgIC8vIEZJWE1FOiBBcyB0aGUgQVNTRVJUIGF0dGVzdHMsIGl0IHNlZW1zIHdlIHNo
b3VsZCBhbHdheXMgaGF2ZSBhIGN1cnJlbnRJdGVtIGhlcmUuCiAgICAgLy8gT25lIGNvdW50ZXJl
eGFtcGxlIGlzIDxyZGFyOi8vcHJvYmxlbS80OTE3MjkwPgogICAgIC8vIEZvciBub3csIHRvIGNv
dmVyIHRoaXMgaXNzdWUgaW4gcmVsZWFzZSBidWlsZHMsIHRoZXJlIGlzIG5vIHRlY2huaWNhbCBo
YXJtIHRvIHJldHVybmluZwogICAgIC8vIGVhcmx5IGFuZCBmcm9tIGEgdXNlciBzdGFuZHBvaW50
IC0gYXMgaW4gdGhlIGFib3ZlIHJhZGFyIC0gdGhlIHByZXZpb3VzIHBhZ2UgbG9hZCBmYWlsZWQg
CiAgICAgLy8gc28gdGhlcmUgKmlzKiBubyBzY3JvbGwgb3IgdmlldyBzdGF0ZSB0byByZXN0b3Jl
IQotICAgIGlmICghbV9jdXJyZW50SGlzdG9yeUl0ZW0pCisgICAgaWYgKCFtX2N1cnJlbnRJdGVt
KQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGdyZWF0
IHRvIHdvcmsgb3V0IGEgd2F5IHRvIHB1dCB0aGlzIGNvZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9m
IGNhbGxpbmcKICAgICAvLyB0aHJvdWdoIHRvIHRoZSBjbGllbnQuIEl0J3MgY3VycmVudGx5IHVz
ZWQgb25seSBmb3IgdGhlIFBERiB2aWV3IG9uIE1hYy4KLSAgICBtX2NsaWVudC0+cmVzdG9yZVZp
ZXdTdGF0ZSgpOworICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZpZXdT
dGF0ZSgpOwogICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkp
CiAgICAgICAgIGlmICghdmlldy0+d2FzU2Nyb2xsZWRCeVVzZXIoKSkKLSAgICAgICAgICAgIHZp
ZXctPnNldFNjcm9sbFBvc2l0aW9uKG1fY3VycmVudEhpc3RvcnlJdGVtLT5zY3JvbGxQb2ludCgp
KTsKKyAgICAgICAgICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKG1fY3VycmVudEl0ZW0tPnNj
cm9sbFBvaW50KCkpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjppbnZhbGlkYXRlQ3VycmVudEl0
ZW1DYWNoZWRQYWdlKCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRhdGVDdXJyZW50
SXRlbUNhY2hlZFBhZ2UoKQogewogICAgIC8vIFdoZW4gd2UgYXJlIHByZS1jb21taXQsIHRoZSBj
dXJyZW50SXRlbSBpcyB3aGVyZSB0aGUgcGFnZUNhY2hlIGRhdGEgcmVzaWRlcyAgICAKLSAgICBD
YWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gcGFnZUNhY2hlKCktPmdldChtX2N1cnJlbnRIaXN0b3J5
SXRlbS5nZXQoKSk7CisgICAgQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5n
ZXQoY3VycmVudEl0ZW0oKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGdyb3Rlc3F1ZSBo
YWNrIHRvIGZpeCA8cmRhcjovL3Byb2JsZW0vNDA1OTA1OT4gQ3Jhc2ggaW4gUmVuZGVyRmxvdzo6
ZGV0YWNoCiAgICAgLy8gU29tZWhvdyB0aGUgUGFnZVN0YXRlIG9iamVjdCBpcyBub3QgcHJvcGVy
bHkgdXBkYXRlZCwgYW5kIGlzIGhvbGRpbmcgb250byBhIHN0YWxlIGRvY3VtZW50LgpAQCAtMzkw
NSwxMiArMzkzOCwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjppbnZhbGlkYXRlQ3VycmVudEl0ZW1D
YWNoZWRQYWdlKCkKICAgICB9CiAgICAgCiAgICAgaWYgKGNhY2hlZFBhZ2UpCi0gICAgICAgIHBh
Z2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgICAgICBw
YWdlQ2FjaGUoKS0+cmVtb3ZlKGN1cnJlbnRJdGVtKCkpOwogfQogCi12b2lkIEZyYW1lTG9hZGVy
OjpzYXZlRG9jdW1lbnRTdGF0ZSgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpzYXZlRG9jdW1l
bnRTdGF0ZSgpCiB7Ci0gICAgaWYgKG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudCkKKyAg
ICAvLyBGSVhNRTogUmVhZGluZyB0aGlzIGJpdCBvZiBGcmFtZUxvYWRlciBzdGF0ZSBoZXJlIGlz
IHVuZm9ydHVuYXRlLiAgSSBuZWVkIHRvIHN0dWR5CisgICAgLy8gdGhpcyBtb3JlIHRvIHNlZSBp
ZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgZGVwZW5kZW5jeS4KKyAgICBpZiAobV9mcmFtZS0+bG9hZGVy
KCktPmNyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRm9yIGEgc3RhbmRhcmQgcGFnZSBsb2FkLCB3ZSB3aWxsIGhhdmUgYSBwcmV2aW91cyBp
dGVtIHNldCwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvCkBAIC0zOTI0LDcgKzM5NTksNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpzYXZlRG9jdW1lbnRTdGF0ZSgpCiAgICAgLy8gdGhhdCBwcmV2aW91c0l0
ZW0gYmUgY2xlYXJlZCBhdCB0aGUgZW5kIG9mIGEgcGFnZSB0cmFuc2l0aW9uLiAgV2UgbGV2ZXJh
Z2UgdGhlCiAgICAgLy8gY2hlY2tMb2FkQ29tcGxldGUgcmVjdXJzaW9uIHRvIGFjaGlldmUgdGhp
cyBnb2FsLgogCi0gICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBtX3ByZXZpb3VzSGlzdG9yeUl0ZW0g
PyBtX3ByZXZpb3VzSGlzdG9yeUl0ZW0uZ2V0KCkgOiBtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQo
KTsKKyAgICBIaXN0b3J5SXRlbSogaXRlbSA9IG1fcHJldmlvdXNJdGVtID8gbV9wcmV2aW91c0l0
ZW0uZ2V0KCkgOiBtX2N1cnJlbnRJdGVtLmdldCgpOwogICAgIGlmICghaXRlbSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0zOTM4LDYgKzM5NzMsOSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzYXZlRG9j
dW1lbnRTdGF0ZSgpCiB9CiAKIC8vIExvYWRzIGNvbnRlbnQgaW50byB0aGlzIGZyYW1lLCBhcyBz
cGVjaWZpZWQgYnkgaGlzdG9yeSBpdGVtCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQg
cmVhbGx5IGJlIHNwbGl0IGludG8gYSBjb3VwbGUgcGllY2VzLCBzb21lIG9mCisvLyB3aGljaCBz
aG91bGQgYmUgbWV0aG9kcyBvZiBIaXN0b3J5Q29udHJvbGxlciBhbmQgc29tZSBvZiB3aGljaCBz
aG91bGQgYmUKKy8vIG1ldGhvZHMgb2YgRnJhbWVMb2FkZXIuCiB2b2lkIEZyYW1lTG9hZGVyOjps
b2FkSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKIHsKICAg
ICBpZiAoIW1fZnJhbWUtPnBhZ2UoKSkKQEAgLTM5NTYsNyArMzk5NCw3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBl
KQogICAgIC8vIGNoZWNrIGZvciBhbGwgdGhhdCBhcyBhbiBhZGRpdGlvbmFsIG9wdGltaXphdGlv
bi4KICAgICAvLyBXZSBhbHNvIGRvIG5vdCBkbyBhbmNob3Itc3R5bGUgbmF2aWdhdGlvbiBpZiB3
ZSdyZSBwb3N0aW5nIGEgZm9ybSBvciBuYXZpZ2F0aW5nIGZyb20KICAgICAvLyBhIHBhZ2UgdGhh
dCB3YXMgcmVzdWx0ZWQgZnJvbSBhIGZvcm0gcG9zdC4KLSAgICBib29sIHNob3VsZFNjcm9sbCA9
ICFmb3JtRGF0YSAmJiAhKG1fY3VycmVudEhpc3RvcnlJdGVtICYmIG1fY3VycmVudEhpc3RvcnlJ
dGVtLT5mb3JtRGF0YSgpKSAmJiB1cmxzTWF0Y2hJdGVtKGl0ZW0pOworICAgIGJvb2wgc2hvdWxk
U2Nyb2xsID0gIWZvcm1EYXRhICYmICEoaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpICYmIGhpc3Rv
cnkoKS0+Y3VycmVudEl0ZW0oKS0+Zm9ybURhdGEoKSkgJiYgaGlzdG9yeSgpLT51cmxzTWF0Y2hJ
dGVtKGl0ZW0pOwogCiAjaWYgRU5BQkxFKFdNTCkKICAgICAvLyBBbGwgV01MIGRlY2tzIHNob3Vs
ZCBnbyB0aHJvdWdoIHRoZSByZWFsIGxvYWQgbWVjaGFuaXNtLCBub3QgdGhlIHNjcm9sbC10by1h
bmNob3IgY29kZQpAQCAtMzk2NiwxMiArNDAwNCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2Fk
SXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKIAogICAgIGlm
IChzaG91bGRTY3JvbGwpIHsKICAgICAgICAgLy8gTXVzdCBkbyB0aGlzIG1haW50ZW5hbmNlIGhl
cmUsIHNpbmNlIHdlIGRvbid0IGdvIHRocm91Z2ggYSByZWFsIHBhZ2UgcmVsb2FkCi0gICAgICAg
IHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRIaXN0b3J5SXRl
bS5nZXQoKSk7CisgICAgICAgIGhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0
YXRlVG9JdGVtKGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CiAKICAgICAgICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAgICAgIHZpZXctPnNldFdhc1Nj
cm9sbGVkQnlVc2VyKGZhbHNlKTsKIAotICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbSA9IGl0
ZW07CisgICAgICAgIGhpc3RvcnkoKS0+c2V0Q3VycmVudEl0ZW0oaXRlbSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IEZvcm0gc3RhdGUgbWlnaHQgbmVlZCB0byBiZSBzYXZlZCBoZXJlIHRvby4KIApA
QCAtMzk4MCw3ICs0MDE4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0
ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUpCiAgICAgICAgIHNjcm9sbFRvQW5jaG9y
KGl0ZW0tPnVybCgpKTsKICAgICAKICAgICAgICAgLy8gbXVzdCBkbyB0aGlzIG1haW50ZW5hbmNl
IGhlcmUsIHNpbmNlIHdlIGRvbid0IGdvIHRocm91Z2ggYSByZWFsIHBhZ2UgcmVsb2FkCi0gICAg
ICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOworICAgICAgICBoaXN0b3J5
KCktPnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOwogICAgICAgICAKICAgICAg
ICAgLy8gRmFrZSB0aGUgVVJMIGNoYW5nZSBieSB1cGRhdGluZyB0aGUgZGF0YSBzb3VyY2UncyBy
ZXF1ZXN0LiAgVGhpcyB3aWxsIG5vIGxvbmdlcgogICAgICAgICAvLyBiZSBuZWNlc3NhcnkgaWYg
d2UgZG8gdGhlIGJldHRlciBmaXggZGVzY3JpYmVkIGFib3ZlLgpAQCAtMzk5Miw3ICs0MDMwLDcg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9h
ZFR5cGUgbG9hZFR5cGUpCiAgICAgICAgIG1fY2xpZW50LT5kaWRGaW5pc2hMb2FkKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNhbiB0cmF2ZXJz
ZSBhbnkgY2hpbGQgaXRlbXMgYXMgY2hpbGQgZnJhbWVzIGxvYWQKLSAgICAgICAgbV9wcm92aXNp
b25hbEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAgaGlzdG9yeSgpLT5zZXRQcm92aXNpb25h
bEl0ZW0oaXRlbSk7CiAKICAgICAgICAgYm9vbCBpblBhZ2VDYWNoZSA9IGZhbHNlOwogICAgICAg
ICAKQEAgLTQwMDksNyArNDA0Nyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogICAgICAgICAgICAgICAgIGxv
YWRXaXRoRG9jdW1lbnRMb2FkZXIoY2FjaGVkUGFnZS0+ZG9jdW1lbnRMb2FkZXIoKSwgbG9hZFR5
cGUsIDApOyAgIAogICAgICAgICAgICAgICAgIGluUGFnZUNhY2hlID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3Jp
bmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRy
eSBoYXMgZXhwaXJlZCIsIG1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbS0+dXJsKCkuc3RyaW5nKCku
YXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVz
dG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUg
ZW50cnkgaGFzIGV4cGlyZWQiLCBoaXN0b3J5KCktPnByb3Zpc2lvbmFsSXRlbSgpLT51cmwoKS5z
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgcGFnZUNhY2hlKCktPnJl
bW92ZShpdGVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDA4NSw5ICs0MTIzLDkg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9h
ZFR5cGUgbG9hZFR5cGUpCiB9CiAKIC8vIFdhbGsgdGhlIGZyYW1lIHRyZWUgYW5kIGVuc3VyZSB0
aGF0IHRoZSBVUkxzIG1hdGNoIHRoZSBVUkxzIGluIHRoZSBpdGVtLgotYm9vbCBGcmFtZUxvYWRl
cjo6dXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKK2Jvb2wgSGlzdG9yeUNv
bnRyb2xsZXI6OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB7Ci0gICAg
Y29uc3QgS1VSTCYgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybCgpOworICAgIGNv
bnN0IEtVUkwmIGN1cnJlbnRVUkwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+dXJsKCk7CiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKGN1cnJl
bnRVUkwsIGl0ZW0tPnVybCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MDk2LDcg
KzQxMzQsNyBAQCBib29sIEZyYW1lTG9hZGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBp
dGVtKSBjb25zdAogICAgIHVuc2lnbmVkIHNpemUgPSBjaGlsZEl0ZW1zLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEZyYW1lKiBjaGls
ZEZyYW1lID0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZChjaGlsZEl0ZW1zW2ldLT50YXJnZXQoKSk7
Ci0gICAgICAgIGlmIChjaGlsZEZyYW1lICYmICFjaGlsZEZyYW1lLT5sb2FkZXIoKS0+dXJsc01h
dGNoSXRlbShjaGlsZEl0ZW1zW2ldLmdldCgpKSkKKyAgICAgICAgaWYgKGNoaWxkRnJhbWUgJiYg
IWNoaWxkRnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnVybHNNYXRjaEl0ZW0oY2hpbGRJdGVt
c1tpXS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC00MTA1
LDcgKzQxNDMsNyBAQCBib29sIEZyYW1lTG9hZGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVt
KiBpdGVtKSBjb25zdAogCiAvLyBNYWluIGZ1bm5lbCBmb3IgbmF2aWdhdGluZyB0byBhIHByZXZp
b3VzIGxvY2F0aW9uIChiYWNrL2ZvcndhcmQsIG5vbi1zZWFyY2ggc25hcC1iYWNrKQogLy8gVGhp
cyBpbmNsdWRlcyByZWN1cnNpb24gdG8gaGFuZGxlIGxvYWRpbmcgaW50byBmcmFtZXNldHMgcHJv
cGVybHkKLXZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJdGVt
LCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbShI
aXN0b3J5SXRlbSogdGFyZ2V0SXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogewogICAgIEFTU0VS
VCghbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSk7CiAgICAgCkBAIC00MTE2LDcgKzQxNTQsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSwgRnJh
bWVMb2FkVHlwZSB0eXBlKQogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX2NsaWVudC0+c2hvdWxkR29U
b0hpc3RvcnlJdGVtKHRhcmdldEl0ZW0pKQorICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5zaG91bGRHb1RvSGlzdG9yeUl0ZW0odGFyZ2V0SXRlbSkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFNldCB0aGUgQkYgY3Vyc29yIGJlZm9yZSBjb21taXQsIHdoaWNoIGxldHMg
dGhlIHVzZXIgcXVpY2tseSBjbGljayBiYWNrL2ZvcndhcmQgYWdhaW4uCkBAIC00MTM0LDE2ICs0
MTcyLDE2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmdvVG9JdGVtKEhpc3RvcnlJdGVtKiB0YXJnZXRJ
dGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAvLyB0cmFja2luZyB3aGV0aGVyIGVhY2ggZnJhbWUg
YWxyZWFkeSBoYXMgdGhlIGNvbnRlbnQgdGhlIGl0ZW0gcmVxdWVzdHMuICBJZiB0aGVyZSBpcwog
Ly8gYSBtYXRjaCAoYnkgVVJMKSwgd2UganVzdCByZXN0b3JlIHNjcm9sbCBwb3NpdGlvbiBhbmQg
cmVjdXJzZS4gIE90aGVyd2lzZSB3ZSBtdXN0CiAvLyByZWxvYWQgdGhhdCBmcmFtZSwgYW5kIGFs
bCBpdHMga2lkcy4KLXZvaWQgRnJhbWVMb2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiBpdGVt
LCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBBU1NF
UlQoaXRlbSk7CiAgICAgQVNTRVJUKGZyb21JdGVtKTsKLSAgICAKKwogICAgIEtVUkwgaXRlbVVS
TCA9IGl0ZW0tPnVybCgpOwogICAgIEtVUkwgY3VycmVudFVSTDsKLSAgICBpZiAoZG9jdW1lbnRM
b2FkZXIoKSkKLSAgICAgICAgY3VycmVudFVSTCA9IGRvY3VtZW50TG9hZGVyKCktPnVybCgpOwot
ICAgIAorICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAg
ICAgY3VycmVudFVSTCA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmwo
KTsKKwogICAgIC8vIEFsd2F5cyByZWxvYWQgdGhlIHRhcmdldCBmcmFtZSBvZiB0aGUgaXRlbSB3
ZSdyZSBnb2luZyB0by4gIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdpbGwKICAgICAvLyBkbyAtc29t
ZS0gbG9hZCBmb3IgdGhlIHRyYW5zaXRpb24sIHdoaWNoIG1lYW5zIGEgcHJvcGVyIG5vdGlmaWNh
dGlvbiB3aWxsIGJlIHBvc3RlZAogICAgIC8vIHRvIHRoZSBhcHAuCkBAIC00MTU3LDE0ICs0MTk1
LDE0IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiBp
dGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyCiAgICAgewogICAgICAgICAvLyBUaGlzIGNv
bnRlbnQgaXMgZ29vZCwgc28gbGVhdmUgaXQgYWxvbmUgYW5kIGxvb2sgZm9yIGNoaWxkcmVuIHRo
YXQgbmVlZCByZWxvYWRpbmcKICAgICAgICAgLy8gU2F2ZSBmb3JtIHN0YXRlICh3b3JrcyBmcm9t
IGN1cnJlbnRJdGVtLCBzaW5jZSBwcmV2SXRlbSBpcyBuaWwpCi0gICAgICAgIEFTU0VSVCghbV9w
cmV2aW91c0hpc3RvcnlJdGVtKTsKKyAgICAgICAgQVNTRVJUKCFtX3ByZXZpb3VzSXRlbSk7CiAg
ICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFu
ZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7CisgICAgICAgIHNh
dmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgpKTsK
IAogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQogICAgICAg
ICAgICAgdmlldy0+c2V0V2FzU2Nyb2xsZWRCeVVzZXIoZmFsc2UpOwogCi0gICAgICAgIG1fY3Vy
cmVudEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW07CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgIC8vIFJlc3RvcmUgZm9ybSBzdGF0ZSAod29ya3MgZnJv
bSBjdXJyZW50SXRlbSkKICAgICAgICAgcmVzdG9yZURvY3VtZW50U3RhdGUoKTsKQEAgLTQxODEs
MTYgKzQyMTksMTYgQEAgdm9pZCBGcmFtZUxvYWRlcjo6cmVjdXJzaXZlR29Ub0l0ZW0oSGlzdG9y
eUl0ZW0qIGl0ZW0sIEhpc3RvcnlJdGVtKiBmcm9tSXRlbSwgRnIKICAgICAgICAgICAgIEFTU0VS
VChmcm9tQ2hpbGRJdGVtIHx8IGZyb21JdGVtLT5pc1RhcmdldEl0ZW0oKSk7CiAgICAgICAgICAg
ICBGcmFtZSogY2hpbGRGcmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGRGcmFtZU5h
bWUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwotICAgICAgICAgICAgY2hpbGRG
cmFtZS0+bG9hZGVyKCktPnJlY3Vyc2l2ZUdvVG9JdGVtKGNoaWxkSXRlbXNbaV0uZ2V0KCksIGZy
b21DaGlsZEl0ZW0sIHR5cGUpOworICAgICAgICAgICAgY2hpbGRGcmFtZS0+bG9hZGVyKCktPmhp
c3RvcnkoKS0+cmVjdXJzaXZlR29Ub0l0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSwgZnJvbUNoaWxk
SXRlbSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBsb2FkSXRlbShp
dGVtLCB0eXBlKTsKKyAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmxvYWRJdGVtKGl0ZW0sIHR5
cGUpOwogICAgIH0KIH0KIAogLy8gaGVscGVyIG1ldGhvZCB0aGF0IGRldGVybWluZXMgd2hldGhl
ciB0aGUgc3ViZnJhbWVzIGRlc2NyaWJlZCBieSB0aGUgaXRlbSdzIHN1Yml0ZW1zCiAvLyBtYXRj
aCBvdXIgb3duIGN1cnJlbnQgZnJhbWVzZXQKLWJvb2wgRnJhbWVMb2FkZXI6OmNoaWxkRnJhbWVz
TWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAorYm9vbCBIaXN0b3J5Q29udHJvbGxl
cjo6Y2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiB7CiAgICAg
Y29uc3QgSGlzdG9yeUl0ZW1WZWN0b3ImIGNoaWxkSXRlbXMgPSBpdGVtLT5jaGlsZHJlbigpOwog
ICAgIGlmIChjaGlsZEl0ZW1zLnNpemUoKSAhPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQo
KSkKQEAgLTQyMDgsNjEgKzQyNDYsNjMgQEAgYm9vbCBGcmFtZUxvYWRlcjo6Y2hpbGRGcmFtZXNN
YXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiAKIC8vIFRoZXJlIGFyZSAzIHRoaW5n
cyB5b3UgbWlnaHQgdGhpbmsgb2YgYXMgImhpc3RvcnkiLCBhbGwgb2Ygd2hpY2ggYXJlIGhhbmRs
ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLgogLy8KLS8vICAgICAxKSBCYWNrL2ZvcndhcmQ6IFRoZSBt
X2N1cnJlbnRIaXN0b3J5SXRlbSBpcyBwYXJ0IG9mIHRoaXMgbWVjaGFuaXNtLgorLy8gICAgIDEp
IEJhY2svZm9yd2FyZDogVGhlIG1fY3VycmVudEl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hhbmlz
bS4KIC8vICAgICAyKSBHbG9iYWwgaGlzdG9yeTogSGFuZGxlZCBieSB0aGUgY2xpZW50LgogLy8g
ICAgIDMpIFZpc2l0ZWQgbGlua3M6IEhhbmRsZWQgYnkgdGhlIFBhZ2VHcm91cC4KIAotdm9pZCBG
cmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpCit2b2lkIEhpc3RvcnlD
b250cm9sbGVyOjp1cGRhdGVGb3JTdGFuZGFyZExvYWQoKQogewotICAgIExPRyhIaXN0b3J5LCAi
V2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIFN0YW5kYXJkIExvYWQgaW4gZnJh
bWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3Ig
U3RhbmRhcmQgTG9hZCBpbiBmcmFtZSAlcyIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLT51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBGcmFtZUxvYWRl
ciogZnJhbWVMb2FkZXIgPSBtX2ZyYW1lLT5sb2FkZXIoKTsKIAogICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVkUHJpdmFjeSA9ICFzZXR0
aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGNvbnN0IEtV
UkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CisgICAg
Y29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT51
cmxGb3JIaXN0b3J5KCk7CiAKLSAgICBpZiAoIWRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVk
aXJlY3QoKSkgeworICAgIGlmICghZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xp
ZW50UmVkaXJlY3QoKSkgewogICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CiAgICAg
ICAgICAgICBpZiAoIW5lZWRQcml2YWN5KSB7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnVw
ZGF0ZUdsb2JhbEhpc3RvcnkoKTsKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50TG9hZGVyLT5z
ZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1fZG9jdW1lbnRMb2FkZXItPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsK
KyAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3Rv
cnkoKTsKKyAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0
RGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KHRydWUpOworICAgICAgICAgICAgICAgIGlmIChm
cmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFs
SGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIHBhZ2UtPnNldEds
b2JhbEhpc3RvcnlJdGVtKG5lZWRQcml2YWN5ID8gMCA6IHBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgp
LT5jdXJyZW50SXRlbSgpKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRMb2Fk
ZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgbV9jdXJyZW50SGlzdG9yeUl0ZW0p
IHsKLSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigp
LT51cmwoKSk7Ci0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRGb3JtSW5mb0Zyb21S
ZXF1ZXN0KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKSk7CisgICAgfSBlbHNlIGlmIChmcmFt
ZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYg
bV9jdXJyZW50SXRlbSkgeworICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRVUkwoZnJhbWVMb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCktPnVybCgpKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0
Rm9ybUluZm9Gcm9tUmVxdWVzdChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVz
dCgpKTsKICAgICB9CiAKICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpICYmICFuZWVkUHJp
dmFjeSkgewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAg
ICAgICAgIHBhZ2UtPmdyb3VwKCkuYWRkVmlzaXRlZExpbmsoaGlzdG9yeVVSTCk7CiAKLSAgICAg
ICAgaWYgKCFtX2RvY3VtZW50TG9hZGVyLT5kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoKSAm
JiBkb2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiAhdXJsKCku
aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRp
cmVjdExpbmtzKCk7CisgICAgICAgIGlmICghZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkt
PmRpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSgpICYmIGZyYW1lTG9hZGVyLT5kb2N1bWVudExv
YWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSAmJiAhZnJhbWVMb2FkZXItPnVybCgp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGZyYW1lTG9hZGVyLT5jbGllbnQoKS0+dXBkYXRlR2xv
YmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICB9CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6
OnVwZGF0ZUhpc3RvcnlGb3JDbGllbnRSZWRpcmVjdCgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVy
Ojp1cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlm
IChkb2N1bWVudExvYWRlcigpKQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5
OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjbGllbnQgcmVkaXJlY3QgaW4gZnJhbWUgJXMiLCBkb2N1
bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3Jl
SGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY2xpZW50IHJlZGlyZWN0IGluIGZyYW1lICVz
IiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRh
dGEoKSk7CiAjZW5kaWYKIAogICAgIC8vIENsZWFyIG91dCBmb3JtIGRhdGEgc28gd2UgZG9uJ3Qg
dHJ5IHRvIHJlc3RvcmUgaXQgaW50byB0aGUgaW5jb21pbmcgcGFnZS4gIE11c3QgaGFwcGVuIGFm
dGVyCiAgICAgLy8gd2ViY29yZSBoYXMgY2xvc2VkIHRoZSBVUkwgYW5kIHNhdmVkIGF3YXkgdGhl
IGZvcm0gc3RhdGUuCi0gICAgaWYgKG1fY3VycmVudEhpc3RvcnlJdGVtKSB7Ci0gICAgICAgIG1f
Y3VycmVudEhpc3RvcnlJdGVtLT5jbGVhckRvY3VtZW50U3RhdGUoKTsKLSAgICAgICAgbV9jdXJy
ZW50SGlzdG9yeUl0ZW0tPmNsZWFyU2Nyb2xsUG9pbnQoKTsKKyAgICBpZiAobV9jdXJyZW50SXRl
bSkgeworICAgICAgICBtX2N1cnJlbnRJdGVtLT5jbGVhckRvY3VtZW50U3RhdGUoKTsKKyAgICAg
ICAgbV9jdXJyZW50SXRlbS0+Y2xlYXJTY3JvbGxQb2ludCgpOwogICAgIH0KIAogICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgYm9vbCBuZWVkUHJpdmFj
eSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAg
IGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5
KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKICAgICBpZiAoIWhpc3RvcnlVUkwuaXNF
bXB0eSgpICYmICFuZWVkUHJpdmFjeSkgewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKSkKQEAgLTQyNzAsMTAzICs0MzEwLDEwNCBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1
cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKQogICAgIH0KIH0KIAotdm9pZCBGcmFtZUxv
YWRlcjo6dXBkYXRlSGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpCit2b2lkIEhpc3Rv
cnlDb250cm9sbGVyOjp1cGRhdGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQogewogI2lmICFM
T0dfRElTQUJMRUQKLSAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3Rv
cnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgYmFjay9mb3J3YXJkIG5h
dmlnYXRpb24gaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAg
ICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3Ig
YmFjay9mb3J3YXJkIG5hdmlnYXRpb24gaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogCiAgICAg
Ly8gTXVzdCBncmFiIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBiZWZvcmUgZGlzdHVyYmlu
ZyBpdAotICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX3ByZXZpb3Vz
SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRv
SXRlbShtX3ByZXZpb3VzSXRlbS5nZXQoKSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0
ZUhpc3RvcnlGb3JSZWxvYWQoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVs
b2FkKCkKIHsKICNpZiAhTE9HX0RJU0FCTEVECi0gICAgaWYgKGRvY3VtZW50TG9hZGVyKCkpCi0g
ICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9y
IHJlbG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpKQorICAg
ICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBy
ZWxvYWQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+
dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogCi0gICAgaWYgKG1fY3VycmVudEhpc3Rv
cnlJdGVtKSB7Ci0gICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0
ZW0uZ2V0KCkpOworICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7CisgICAgICAgIHBhZ2VDYWNoZSgp
LT5yZW1vdmUobV9jdXJyZW50SXRlbS5nZXQoKSk7CiAgICAgCi0gICAgICAgIGlmIChsb2FkVHlw
ZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgbG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBl
UmVsb2FkRnJvbU9yaWdpbikKLSAgICAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdT
dGF0ZVRvSXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7CisgICAgICAgIGlmIChtX2Zy
YW1lLT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IG1fZnJh
bWUtPmxvYWRlcigpLT5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGVSZWxvYWRGcm9tT3JpZ2lu
KQorICAgICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3Vy
cmVudEl0ZW0uZ2V0KCkpOwogICAgIAogICAgICAgICAvLyBTb21ldGltZXMgbG9hZGluZyBhIHBh
Z2UgYWdhaW4gbGVhZHMgdG8gYSBkaWZmZXJlbnQgcmVzdWx0IGJlY2F1c2Ugb2YgY29va2llcy4g
QnVnemlsbGEgNDA3MgotICAgICAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVV
UkwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0VVJM
KGRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3RVUkwoKSk7CisgICAgICAgIGlmIChtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRVUkwobV9mcmFtZS0+bG9hZGVyKCktPmRvY3Vt
ZW50TG9hZGVyKCktPnJlcXVlc3RVUkwoKSk7CiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVy
Ojp1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KCkKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3
YXJkTGlzdCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVudExvYWRlcigp
KQotICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5
IGZvciByZWRpcmVjdCBsb2FkIGluIGZyYW1lICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9h
ZGVyKCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhp
c3RvcnkgZm9yIHJlZGlyZWN0IGxvYWQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIAog
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgYm9vbCBu
ZWVkUHJpdmFjeSA9ICFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCgpOwotICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmxG
b3JIaXN0b3J5KCk7CisgICAgY29uc3QgS1VSTCYgaGlzdG9yeVVSTCA9IG1fZnJhbWUtPmxvYWRl
cigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCk7CiAKLSAgICBpZiAoZG9jdW1l
bnRMb2FkZXIoKS0+aXNDbGllbnRSZWRpcmVjdCgpKSB7Ci0gICAgICAgIGlmICghbV9jdXJyZW50
SGlzdG9yeUl0ZW0gJiYgIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICBpZiAobV9m
cmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewor
ICAgICAgICBpZiAoIW1fY3VycmVudEl0ZW0gJiYgIW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkp
IHsKICAgICAgICAgICAgIGlmICghaGlzdG9yeVVSTC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQodHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgewotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+
dXBkYXRlR2xvYmFsSGlzdG9yeSgpOwotICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50TG9h
ZGVyLT5zZXREaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2RvY3VtZW50TG9hZGVyLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcygpOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPnVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnNldERpZENyZWF0ZUdsb2JhbEhpc3RvcnlF
bnRyeSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+dXBkYXRlR2xvYmFsSGlz
dG9yeVJlZGlyZWN0TGlua3MoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
aWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIHBh
Z2UtPnNldEdsb2JhbEhpc3RvcnlJdGVtKG5lZWRQcml2YWN5ID8gMCA6IHBhZ2UtPmJhY2tGb3J3
YXJkTGlzdCgpLT5jdXJyZW50SXRlbSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBpZiAobV9jdXJyZW50SGlzdG9yeUl0ZW0pIHsKLSAgICAgICAgICAgIG1fY3VycmVudEhp
c3RvcnlJdGVtLT5zZXRVUkwoZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkpOwotICAgICAgICAgICAg
bV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldEZvcm1JbmZvRnJvbVJlcXVlc3QoZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVxdWVzdCgpKTsKKyAgICAgICAgaWYgKG1fY3VycmVudEl0ZW0pIHsKKyAgICAgICAg
ICAgIG1fY3VycmVudEl0ZW0tPnNldFVSTChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkpOworICAgICAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0Rm9ybUluZm9Gcm9t
UmVxdWVzdChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpKTsK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9IG1f
ZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnRGcmFtZSAmJiBwYXJl
bnRGcmFtZS0+bG9hZGVyKCktPm1fY3VycmVudEhpc3RvcnlJdGVtKQotICAgICAgICAgICAgcGFy
ZW50RnJhbWUtPmxvYWRlcigpLT5tX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0Q2hpbGRJdGVtKGNy
ZWF0ZUhpc3RvcnlJdGVtKHRydWUpKTsKKyAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVu
dEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5tX2N1cnJlbnRJdGVtKQorICAgICAgICAgICAg
cGFyZW50RnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPm1fY3VycmVudEl0ZW0tPnNldENoaWxk
SXRlbShjcmVhdGVIaXN0b3J5SXRlbSh0cnVlKSk7CiAgICAgfQogCiAgICAgaWYgKCFoaXN0b3J5
VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRM
aW5rKGhpc3RvcnlVUkwpOwogCi0gICAgICAgIGlmICghbV9kb2N1bWVudExvYWRlci0+ZGlkQ3Jl
YXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYgZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVV
UkwoKS5pc0VtcHR5KCkgJiYgIXVybCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY2xpZW50
LT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJlY3RMaW5rcygpOworICAgICAgICBpZiAoIW1fZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5kaWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50
cnkoKSAmJiBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVV
UkwoKS5pc0VtcHR5KCkgJiYgIW1fZnJhbWUtPmxvYWRlcigpLT51cmwoKS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhpc3Rv
cnlSZWRpcmVjdExpbmtzKCk7CiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVI
aXN0b3J5Rm9yQ29tbWl0KCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNvbW1p
dCgpCiB7CisgICAgRnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7
CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVudExvYWRlcigpKQotICAgICAgICBM
T0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBjb21taXQg
aW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGlmIChmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgTE9HKEhpc3Rv
cnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY29tbWl0IGluIGZyYW1l
ICVzIiwgZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEo
KSk7CiAjZW5kaWYKLSAgICBGcmFtZUxvYWRUeXBlIHR5cGUgPSBsb2FkVHlwZSgpOworICAgIEZy
YW1lTG9hZFR5cGUgdHlwZSA9IGZyYW1lTG9hZGVyLT5sb2FkVHlwZSgpOwogICAgIGlmIChpc0Jh
Y2tGb3J3YXJkTG9hZFR5cGUodHlwZSkgfHwKLSAgICAgICAgKCh0eXBlID09IEZyYW1lTG9hZFR5
cGVSZWxvYWQgfHwgdHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikgJiYgIXBy
b3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7
CisgICAgICAgICgodHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IHR5cGUgPT0gRnJhbWVM
b2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYmICFmcmFtZUxvYWRlci0+cHJvdmlzaW9uYWxEb2N1
bWVudExvYWRlcigpLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkpIHsKICAgICAgICAgLy8g
T25jZSBjb21taXR0ZWQsIHdlIHdhbnQgdG8gdXNlIGN1cnJlbnQgaXRlbSBmb3Igc2F2aW5nIERv
Y1N0YXRlLCBhbmQKICAgICAgICAgLy8gdGhlIHByb3Zpc2lvbmFsIGl0ZW0gZm9yIHJlc3Rvcmlu
ZyBzdGF0ZS4KICAgICAgICAgLy8gTm90ZSBwcmV2aW91c0l0ZW0gbXVzdCBiZSBzZXQgYmVmb3Jl
IHdlIGNsb3NlIHRoZSBVUkwsIHdoaWNoIHdpbGwKICAgICAgICAgLy8gaGFwcGVuIHdoZW4gdGhl
IGRhdGEgc291cmNlIGlzIG1hZGUgbm9uLXByb3Zpc2lvbmFsIGJlbG93Ci0gICAgICAgIG1fcHJl
dmlvdXNIaXN0b3J5SXRlbSA9IG1fY3VycmVudEhpc3RvcnlJdGVtOwotICAgICAgICBBU1NFUlQo
bV9wcm92aXNpb25hbEhpc3RvcnlJdGVtKTsKLSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0g
PSBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW07Ci0gICAgICAgIG1fcHJvdmlzaW9uYWxIaXN0b3J5
SXRlbSA9IDA7CisgICAgICAgIG1fcHJldmlvdXNJdGVtID0gbV9jdXJyZW50SXRlbTsKKyAgICAg
ICAgQVNTRVJUKG1fcHJvdmlzaW9uYWxJdGVtKTsKKyAgICAgICAgbV9jdXJyZW50SXRlbSA9IG1f
cHJvdmlzaW9uYWxJdGVtOworICAgICAgICBtX3Byb3Zpc2lvbmFsSXRlbSA9IDA7CiAgICAgfQog
fQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVIaXN0b3J5Rm9yQW5jaG9yU2Nyb2xsKCkKK3Zv
aWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckFuY2hvclNjcm9sbCgpCiB7Ci0gICAgaWYg
KG1fVVJMLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPnVybCgpLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFt
ZS0+c2V0dGluZ3MoKTsKQEAgLTQzNzcsMjkgKzQ0MTgsMTkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
dXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fVVJMKTsKKyAgICBw
YWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKSk7CiB9
CiAKIC8vIFdhbGsgdGhlIGZyYW1lIHRyZWUsIHRlbGxpbmcgYWxsIGZyYW1lcyB0byBzYXZlIHRo
ZWlyIGZvcm0gc3RhdGUgaW50byB0aGVpciBjdXJyZW50CiAvLyBoaXN0b3J5IGl0ZW0uCi12b2lk
IEZyYW1lTG9hZGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCit2b2lkIEhpc3RvcnlD
b250cm9sbGVyOjpzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpCiB7CiAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtX2ZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQobV9mcmFtZSkpIHsKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zYXZlRG9jdW1lbnRT
dGF0ZSgpOwotICAgICAgICBmcmFtZS0+bG9hZGVyKCktPnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZp
ZXdTdGF0ZVRvSXRlbShmcmFtZS0+bG9hZGVyKCktPmN1cnJlbnRIaXN0b3J5SXRlbSgpKTsKKyAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVEb2N1bWVudFN0YXRlKCk7Cisg
ICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVUb0l0ZW0oZnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkp
OwogICAgIH0KIH0KIAotSGlzdG9yeUl0ZW0qIEZyYW1lTG9hZGVyOjpjdXJyZW50SGlzdG9yeUl0
ZW0oKQotewotICAgIHJldHVybiBtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlcjo6c2V0Q3VycmVudEhpc3RvcnlJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0
ZW0+IGl0ZW0pCi17Ci0gICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0gPSBpdGVtOwotfQotCiB2b2lk
IEZyYW1lTG9hZGVyOjpzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciogbG9hZGVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBtX2NsaWVudC0+c2V0TWFpbkRv
Y3VtZW50RXJyb3IobG9hZGVyLCBlcnJvcik7CkBAIC00NTM3LDE0ICs0NTY4LDE5IEBAIFBhc3NS
ZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlcjo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJ
bnRTaXplJiBzaXplLCBIVE1MCiAgICAgcmV0dXJuIHdpZGdldDsKIH0KIAordm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6c2V0Q3VycmVudEl0ZW1UaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKQorewor
ICAgIGlmIChtX2N1cnJlbnRJdGVtKQorICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRUaXRsZSh0
aXRsZSk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCiB7CiAgICAgbV9jbGllbnQtPmRpZENoYW5nZVRpdGxlKGxvYWRlcik7CiAK
ICAgICBpZiAobG9hZGVyID09IG1fZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgLy8gTXVzdCB1
cGRhdGUgdGhlIGVudHJpZXMgaW4gdGhlIGJhY2stZm9yd2FyZCBsaXN0IHRvby4KLSAgICAgICAg
aWYgKG1fY3VycmVudEhpc3RvcnlJdGVtKQotICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0
ZW0tPnNldFRpdGxlKGxvYWRlci0+dGl0bGUoKSk7CisgICAgICAgIGhpc3RvcnkoKS0+c2V0Q3Vy
cmVudEl0ZW1UaXRsZShsb2FkZXItPnRpdGxlKCkpOwogICAgICAgICAvLyBUaGlzIG11c3QgZ28g
dGhyb3VnaCB0aGUgV2ViRnJhbWUgYmVjYXVzZSBpdCBoYXMgdGhlIHJpZ2h0IG5vdGlvbiBvZiB0
aGUgY3VycmVudCBiL2YgaXRlbS4KICAgICAgICAgbV9jbGllbnQtPnNldFRpdGxlKGxvYWRlci0+
dGl0bGUoKSwgbG9hZGVyLT51cmxGb3JIaXN0b3J5KCkpOwogICAgICAgICBtX2NsaWVudC0+c2V0
TWFpbkZyYW1lRG9jdW1lbnRSZWFkeSh0cnVlKTsgLy8gdXBkYXRlIG9ic2VydmVycyB3aXRoIG5l
dyBET01Eb2N1bWVudApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaCBi
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKaW5kZXggODk3ZmIwOC4uY2RhN2MyYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAorKysgYi9XZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCkBAIC03OSw2ICs3OSw1NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBib29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBlKTsKIAorICAgIGNs
YXNzIEhpc3RvcnlDb250cm9sbGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEhpc3RvcnlDb250cm9sbGVyKEZyYW1lKik7CisgICAgICAgIH5IaXN0b3J5Q29u
dHJvbGxlcigpOworCisgICAgICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGNyZWF0ZUhpc3Rv
cnlJdGVtKGJvb2wgdXNlT3JpZ2luYWwpOworICAgICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVt
PiBjcmVhdGVIaXN0b3J5SXRlbVRyZWUoRnJhbWUqIHRhcmdldEZyYW1lLCBib29sIGNsaXBBdFRh
cmdldCk7CisKKyAgICAgICAgdm9pZCBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0
ZW0oSGlzdG9yeUl0ZW0qKTsKKyAgICAgICAgdm9pZCByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGUoKTsKKworICAgICAgICB2b2lkIGFkZEJhY2tGb3J3YXJkSXRlbUNsaXBwZWRBdFRh
cmdldChib29sIGRvQ2xpcCk7CisgICAgICAgIHZvaWQgYWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVu
dFNjcm9sbCgpOworCisgICAgICAgIHZvaWQgc2F2ZURvY3VtZW50U3RhdGUoKTsKKyAgICAgICAg
dm9pZCBzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICB2b2lkIHJlc3RvcmVE
b2N1bWVudFN0YXRlKCk7CisKKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNo
ZWRQYWdlKCk7CisKKyAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9h
ZFR5cGUpOworICAgICAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVtKiwgSGlz
dG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKworICAgICAgICBib29sIHVybHNNYXRjaEl0ZW0o
SGlzdG9yeUl0ZW0qKSBjb25zdDsKKyAgICAgICAgYm9vbCBjaGlsZEZyYW1lc01hdGNoSXRlbShI
aXN0b3J5SXRlbSopIGNvbnN0OworCisgICAgICAgIHZvaWQgdXBkYXRlRm9yQmFja0ZvcndhcmRO
YXZpZ2F0aW9uKCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9yUmVsb2FkKCk7CisgICAgICAgIHZv
aWQgdXBkYXRlRm9yU3RhbmRhcmRMb2FkKCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9yUmVkaXJl
Y3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KCk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9yQ2xp
ZW50UmVkaXJlY3QoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JDb21taXQoKTsKKyAgICAgICAg
dm9pZCB1cGRhdGVGb3JBbmNob3JTY3JvbGwoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JGcmFt
ZUxvYWRDb21wbGV0ZWQoKTsKKworICAgICAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRJdGVtLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0Q3Vy
cmVudEl0ZW0oSGlzdG9yeUl0ZW0qKTsKKyAgICAgICAgdm9pZCBzZXRDdXJyZW50SXRlbVRpdGxl
KGNvbnN0IFN0cmluZyYpOworCisgICAgICAgIEhpc3RvcnlJdGVtKiBwcm92aXNpb25hbEl0ZW0o
KSBjb25zdCB7IHJldHVybiBtX3Byb3Zpc2lvbmFsSXRlbS5nZXQoKTsgfQorICAgICAgICB2b2lk
IHNldFByb3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSopOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgRnJhbWUqIG1fZnJhbWU7CisKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBtX2N1cnJl
bnRJdGVtOworICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fcHJldmlvdXNJdGVtOworICAg
ICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fcHJvdmlzaW9uYWxJdGVtOworICAgIH07CisKICAg
ICBjbGFzcyBGcmFtZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgog
ICAgICAgICBGcmFtZUxvYWRlcihGcmFtZSosIEZyYW1lTG9hZGVyQ2xpZW50Kik7CkBAIC04OCw3
ICsxMzgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRnJhbWUqIGZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIFBvbGljeUNoZWNrZXIqIHBvbGlj
eUNoZWNrZXIoKSB7IHJldHVybiAmbV9wb2xpY3lDaGVja2VyOyB9CisgICAgICAgIFBvbGljeUNo
ZWNrZXIqIHBvbGljeUNoZWNrZXIoKSBjb25zdCB7IHJldHVybiBtX3BvbGljeUNoZWNrZXIuZ2V0
KCk7IH0KKyAgICAgICAgSGlzdG9yeUNvbnRyb2xsZXIqIGhpc3RvcnkoKSBjb25zdCB7IHJldHVy
biBtX2hpc3RvcnkuZ2V0KCk7IH0KIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgY29v
bCwgcGVvcGxlLiBUaGVyZSBhcmUgdG9vIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyB0aGF0IGFs
bCBzdGFydCBsb2Fkcy4KICAgICAgICAgLy8gV2Ugc2hvdWxkIGFpbSB0byBjb25zb2xpZGF0ZSB0
aGVzZSBpbnRvIGEgc21hbGxlciBzZXQgb2YgZnVuY3Rpb25zLCBhbmQgdHJ5IHRvIHJldXNlIG1v
cmUgb2YKQEAgLTI1NSw3ICszMDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCBkaXNwYXRjaFdpbmRvd09iamVjdEF2YWlsYWJsZSgpOwogICAgICAgICB2b2lkIGRpc3Bh
dGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7Ci0gICAgICAgIHZvaWQgcmVzdG9yZURvY3Vt
ZW50U3RhdGUoKTsKIAogICAgICAgICAvLyBNaXhlZCBjb250ZW50IHJlbGF0ZWQgZnVuY3Rpb25z
LgogICAgICAgICBzdGF0aWMgYm9vbCBpc01peGVkQ29udGVudChTZWN1cml0eU9yaWdpbiogY29u
dGV4dCwgY29uc3QgS1VSTCYpOwpAQCAtMjg2LDYgKzMzNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBmaW5pc2hlZFBhcnNpbmcoKTsKICAgICAgICAgdm9pZCBjaGVja0Nv
bXBsZXRlZCgpOwogCisgICAgICAgIHZvaWQgY2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9u
KCk7CisKICAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Q7CiAKICAgICAgICAgYm9vbCBy
ZXF1ZXN0T2JqZWN0KFJlbmRlclBhcnQqIGZyYW1lLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmcmFtZU5hbWUsCkBAIC0zMDAsMTQgKzM1Miw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxD
YWNoZWRQYWdlPik7CiAgICAgICAgIGJvb2wgaXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZTsgfQogCi0gICAgICAgIHZvaWQgZ29U
b0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKLSAgICAgICAgdm9pZCBzYXZlRG9j
dW1lbnRBbmRTY3JvbGxTdGF0ZSgpOwotCi0gICAgICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SGlz
dG9yeUl0ZW0oKTsKLSAgICAgICAgdm9pZCBzZXRDdXJyZW50SGlzdG9yeUl0ZW0oUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4pOwotCiAgICAgICAgIGJvb2wgY29tbWl0dGluZ0ZpcnN0UmVhbExvYWQo
KSBjb25zdCB7IHJldHVybiAhbV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50ICYmICFtX2Nv
bW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZDsgfQogICAgICAgICBib29sIGNvbW1pdHRlZEZp
cnN0UmVhbERvY3VtZW50TG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWl0dGVkRmlyc3RSZWFs
RG9jdW1lbnRMb2FkOyB9CisgICAgICAgIGJvb2wgY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVudDsgfQogCiAg
ICAgICAgIHZvaWQgaWNvbkxvYWREZWNpc2lvbkF2YWlsYWJsZSgpOwogCkBAIC0zMjgsNiArMzc1
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGFsbENoaWxkcmVuQXJlQ29t
cGxldGUoKSBjb25zdDsgLy8gaW1tZWRpYXRlIGNoaWxkcmVuLCBub3QgYWxsIGRlc2NlbmRhbnRz
CiAgICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5
LCBkb3VibGUgZmlyZURhdGUsIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCk7CiAgICAgICAgIHZv
aWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2FuY2VsV2l0aExvYWRJ
blByb2dyZXNzKTsKKyAgICAgICAgdm9pZCBsb2FkSXRlbShIaXN0b3J5SXRlbSosIEZyYW1lTG9h
ZFR5cGUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHB1YmxpYyBiZWNhdXNlIHRoaXMg
YXN5bmNocm9ub3VzIGNhbGxiYWNrIGZyb20gdGhlIEZyYW1lTG9hZGVyQ2xpZW50CiAgICAgICAg
IC8vIHVzZXMgdGhlIHBvbGljeSBtYWNoaW5lcnkgKGFuZCB0aGVyZWZvcmUgaXMgY2FsbGVkIHZp
YSB0aGUgUG9saWN5Q2hlY2tlcikuICBPbmNlIHdlCkBAIC0zMzUsMzIgKzM4MywxMiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY29udGludWVMb2FkQWZ0ZXJXaWxsU3VibWl0
Rm9ybSgpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4g
Y3JlYXRlSGlzdG9yeUl0ZW0oYm9vbCB1c2VPcmlnaW5hbCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IGNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJv
b2wgY2xpcEF0VGFyZ2V0KTsKLQogICAgICAgICBib29sIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdU
aGlzRnJhbWUoKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHZvaWQgbG9nQ2FuQ2FjaGVQYWdl
RGVjaXNpb24oKTsKICAgICAgICAgYm9vbCBsb2dDYW5DYWNoZUZyYW1lRGVjaXNpb24oaW50IGlu
ZGVudExldmVsKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgYWRkQmFja0ZvcndhcmRJdGVtQ2xp
cHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKTsKLSAgICAgICAgdm9pZCByZXN0b3JlU2Nyb2xsUG9z
aXRpb25BbmRWaWV3U3RhdGUoKTsKLSAgICAgICAgdm9pZCBzYXZlRG9jdW1lbnRTdGF0ZSgpOwot
ICAgICAgICB2b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7Ci0gICAg
ICAgIGJvb2wgdXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OwotICAgICAgICB2b2lk
IGludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKTsKLSAgICAgICAgdm9pZCByZWN1cnNp
dmVHb1RvSXRlbShIaXN0b3J5SXRlbSosIEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7Ci0g
ICAgICAgIGJvb2wgY2hpbGRGcmFtZXNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKLQot
ICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKLSAg
ICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCk7Ci0gICAgICAgIHZvaWQgdXBkYXRl
SGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JS
ZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3QoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVI
aXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9y
Q29tbWl0KCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpOwot
CiAgICAgICAgIHZvaWQgY2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopOwogCiAg
ICAgICAgIHZvaWQgc3RhcnRlZCgpOwpAQCAtNDAxLDcgKzQyOSw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCBjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9u
UG9saWN5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGJvb2wgc2hvdWxkQ29udGludWUpOwogCiAg
ICAgICAgIGJvb2wgc2hvdWxkU2Nyb2xsVG9BbmNob3IoYm9vbCBpc0Zvcm1TdWJtaXNzaW9uLCBG
cmFtZUxvYWRUeXBlLCBjb25zdCBLVVJMJik7Ci0gICAgICAgIHZvaWQgYWRkSGlzdG9yeUl0ZW1G
b3JGcmFnbWVudFNjcm9sbCgpOwogCiAgICAgICAgIHZvaWQgY2hlY2tMb2FkQ29tcGxldGVGb3JU
aGlzRnJhbWUoKTsKIApAQCAtNDY3LDEyICs0OTQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIGJvb2wgc2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYp
IGNvbnN0OwogCi0gICAgICAgIHZvaWQgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9J
dGVtKEhpc3RvcnlJdGVtKik7Ci0KICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIEZy
YW1lTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKIAotICAgICAgICBQb2xpY3lDaGVja2VyIG1fcG9s
aWN5Q2hlY2tlcjsKKyAgICAgICAgT3duUHRyPFBvbGljeUNoZWNrZXI+IG1fcG9saWN5Q2hlY2tl
cjsKKyAgICAgICAgT3duUHRyPEhpc3RvcnlDb250cm9sbGVyPiBtX2hpc3Rvcnk7CiAKICAgICAg
ICAgRnJhbWVTdGF0ZSBtX3N0YXRlOwogICAgICAgICBGcmFtZUxvYWRUeXBlIG1fbG9hZFR5cGU7
CkBAIC01MzQsMTAgKzU2MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBt
X2lzRGlzcGxheWluZ0luaXRpYWxFbXB0eURvY3VtZW50OwogICAgICAgICBib29sIG1fY29tbWl0
dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2FkOwogCi0gICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4g
bV9jdXJyZW50SGlzdG9yeUl0ZW07Ci0gICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcmV2
aW91c0hpc3RvcnlJdGVtOwotICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fcHJvdmlzaW9u
YWxIaXN0b3J5SXRlbTsKLSAgICAgICAgCiAgICAgICAgIGJvb2wgbV9kaWRQZXJmb3JtRmlyc3RO
YXZpZ2F0aW9uOwogICAgICAgICBib29sIG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlOwogICAgICAg
ICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCAzOTdjYjcyLi42OWRhYzc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yODksNyArMjg5LDcgQEAgdm9p
ZCBQYWdlOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSB0eXBlKQog
ICAgICAgICBkYXRhYmFzZVBvbGljeSA9IERhdGFiYXNlUG9saWN5Q29udGludWU7CiAjZW5kaWYK
ICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKGRhdGFiYXNlUG9saWN5
KTsKLSAgICBtX21haW5GcmFtZS0+bG9hZGVyKCktPmdvVG9JdGVtKGl0ZW0sIHR5cGUpOworICAg
IG1fbWFpbkZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5nb1RvSXRlbShpdGVtLCB0eXBlKTsK
IH0KIAogaW50IFBhZ2U6OmdldEhpc3RvcnlMZW5ndGgoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA1YjRlNmY4Li5lYzc3ZDc2
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTEwLTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRmFjdG9yIEhpc3RvcnlDb250cm9sbGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyNDYKKworICAgICAgICBV
cGRhdGUgQVBJIGNhbGwuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5tbToKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0
YXRlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
X2xvYWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJWaWV3Ol0pOgorCiAyMDA5LTEwLTA4ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9h
ZGVyQ2xpZW50Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5tbQppbmRleCBmY2RkNTRkLi5iYzZjOGY0IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTk4OCw3ICs5ODgsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVt
KiBpdGVtKQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKCkK
IHsKLSAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkp
LT5sb2FkZXIoKS0+Y3VycmVudEhpc3RvcnlJdGVtKCk7CisgICAgSGlzdG9yeUl0ZW0qIGN1cnJl
bnRJdGVtID0gY29yZShtX3dlYkZyYW1lLmdldCgpKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3Vy
cmVudEl0ZW0oKTsKICAgICBBU1NFUlQoY3VycmVudEl0ZW0pOwogCiAgICAgLy8gRklYTUU6IEFz
IHRoZSBBU1NFUlQgYXR0ZXN0cywgaXQgc2VlbXMgd2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgY3Vy
cmVudEl0ZW0gaGVyZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggMzY5OTNlZS4uN2QzZWI4NCAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTExODcsNyArMTE4Nyw3IEBAIHN0YXRpYyBib29sIGZh
c3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAgICAgICAgICAgICAvLyBJZiB0aGlzIGl0ZW0g
aXMgc2hvd2luZyAsIHNhdmUgYXdheSBpdHMgY3VycmVudCBzY3JvbGwgYW5kIGZvcm0gc3RhdGUs
CiAgICAgICAgICAgICAvLyBzaW5jZSB0aGF0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzaW5jZSBsb2Fk
aW5nIGFuZCBpdCBpcyBub3JtYWxseSBub3Qgc2F2ZWQKICAgICAgICAgICAgIC8vIHVudGlsIHdl
IGxlYXZlIHRoYXQgcGFnZS4KLSAgICAgICAgICAgIG90aGVyVmlldy0+X3ByaXZhdGUtPnBhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAg
ICAgICAgICAgIG90aGVyVmlldy0+X3ByaXZhdGUtPnBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIo
KS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOwogICAgICAgICB9CiAg
ICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbmV3SXRlbSA9IG90aGVyQmFja0ZvcndhcmRMaXN0
LT5pdGVtQXRJbmRleChpKS0+Y29weSgpOwogICAgICAgICBpZiAoaSA9PSAwKSAKZGlmZiAtLWdp
dCBhL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYWQw
ZDUyMy4uMTU5ZTMxNyAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0xMC0wOSAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEZhY3RvciBIaXN0b3J5Q29udHJvbGxlciBvdXQgb2YgRnJhbWVMb2Fk
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjQ2
CisKKyAgICAgICAgVXBkYXRlIEFQSSBjYWxsLgorCisgICAgICAgICogV2ViVmlldy5jcHA6Cisg
ICAgICAgIChXZWJWaWV3Ojpsb2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVyVmlldyk6CisKIDIw
MDktMTAtMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vV2ViVmlldy5jcHAg
Yi9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4IDNlMTNkMGEuLjA5NjAxYjEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC93aW4vV2ViVmlldy5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApA
QCAtNDgxNSw3ICs0ODE1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojps
b2FkQmFja0ZvcndhcmRMaXN0RnJvbU90aGVyVmlldygKICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXRlbSBpcyBzaG93aW5nICwgc2F2ZSBhd2F5IGl0cyBjdXJyZW50IHNjcm9sbCBhbmQgZm9ybSBz
dGF0ZSwKICAgICAgICAgICAgIC8vIHNpbmNlIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNl
IGxvYWRpbmcgYW5kIGl0IGlzIG5vcm1hbGx5IG5vdCBzYXZlZAogICAgICAgICAgICAgLy8gdW50
aWwgd2UgbGVhdmUgdGhhdCBwYWdlLgotICAgICAgICAgICAgb3RoZXJXZWJWaWV3LT5tX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAg
ICAgICAgICAgIG90aGVyV2ViVmlldy0+bV9wYWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmhp
c3RvcnkoKS0+c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKICAgICAgICAgfQogICAgICAg
ICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG5ld0l0ZW0gPSBvdGhlckJhY2tGb3J3YXJkTGlzdC0+aXRl
bUF0SW5kZXgoaSktPmNvcHkoKTsKICAgICAgICAgaWYgKCFpKQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40955</attachid>
            <date>2009-10-09 11:05:43 -0700</date>
            <delta_ts>2009-10-09 11:05:43 -0700</delta_ts>
            <desc>HistoryController</desc>
            <filename>bug-30246-20091009110541.patch</filename>
            <type>text/plain</type>
            <size>62433</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmMxN2VlZi4uOTYwMTU2NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MyBAQAorMjAwOS0xMC0wOSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZhY3RvciBIaXN0b3J5Q29udHJvbGxlciBvdXQgb2YgRnJhbWVMb2FkZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwMjQ2CisK
KyAgICAgICAgSGlzdG9yeUNvbnRyb2xsZXIgaXMgaW4gY2hhcmdlIG9mIG1hbmFnaW5nIHRoZSBj
dXJyZW50IC8gcHJldmlvdXMgLworICAgICAgICBwcm92aXNpb25hbCBIaXN0b3J5SXRlbXMuICBU
aGUgc3BsaXQgaXNuJ3QgcGVyZmVjdCwgYnV0IGl0J3MgYSBwbGFjZSB0bworICAgICAgICBzdGFy
dC4gIEknbGwgbW92ZSBIaXN0b3J5Q29udHJvbGxlciBpbnRvIGl0cyBvd24gZmlsZSBpbiBhbm90
aGVyIHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBsb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6
Okhpc3RvcnlDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVy
Ojp+SGlzdG9yeUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OkZy
YW1lTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjbG9zZVVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okhpc3RvcnlDb250cm9sbGVyOjpzZXRDdXJyZW50SXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpIaXN0b3J5Q29udHJvbGxlcjo6c2V0UHJvdmlzaW9uYWxJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXI6OmNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbik6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGlkRmlyc3RMYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckZyYW1lTG9hZENvbXBsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZnJhbWVMb2FkQ29tcGxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkZXRhY2hGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUZyYWdtZW50U2Nyb2xsQWZ0ZXJOYXZpZ2F0aW9u
UG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRl
ck5hdmlnYXRpb25Qb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6
OmFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXI6OmxvYWRQcm92aXNpb25hbEl0ZW1Gcm9tQ2FjaGVkUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUhpc3RvcnlJdGVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmFkZEJhY2tGb3J3YXJk
SXRlbUNsaXBwZWRBdFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250
cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1
cnJlbnRJdGVtQ2FjaGVkUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxl
cjo6c2F2ZURvY3VtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6Omxv
YWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cmxzTWF0Y2hJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjpnb1RvSXRlbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6cmVjdXJzaXZlR29Ub0l0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OmNoaWxkRnJhbWVzTWF0Y2hJdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JTdGFuZGFy
ZExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckNs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRh
dGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNv
bnRyb2xsZXI6OnVwZGF0ZUZvclJlbG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvckFuY2hvclNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50QW5kU2Ny
b2xsU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnNldEN1cnJl
bnRJdGVtVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmRpZENoYW5nZVRp
dGxlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
Okhpc3RvcnlDb250cm9sbGVyOjpjdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlD
b250cm9sbGVyOjpwcm92aXNpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6
cG9saWN5Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6aGlzdG9yeSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1
bWVudCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6
OmdvVG9JdGVtKToKKwogMjAwOS0xMC0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGY5ZTE1
NmUuLmI5Y2VjNDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAgLTE2MiwxNSArMTYyLDExIEBAIF9fWk43V2ViQ29y
ZTExRnJhbWVMb2FkZXIxNHN0b3BBbGxMb2FkZXJzRU5TXzE0RGF0YWJhc2VQb2xpY3lFCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMTZkZXRhY2hGcm9tUGFyZW50RXYKIF9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxNmxvYWRGcmFtZVJlcXVlc3RFUktOU18xNkZyYW1lTG9hZFJlcXVlc3RFYmJO
M1dURjEwUGFzc1JlZlB0cklOU181RXZlbnRFRUVOUzVfSU5TXzlGb3JtU3RhdGVFRUUKIF9fWk43
V2ViQ29yZTExRnJhbWVMb2FkZXIxN3N0b3BGb3JVc2VyQ2FuY2VsRWIKLV9fWk43V2ViQ29yZTEx
RnJhbWVMb2FkZXIxOGN1cnJlbnRIaXN0b3J5SXRlbUV2CiBfX1pON1dlYkNvcmUxMUZyYW1lTG9h
ZGVyMjFsb2FkVVJMSW50b0NoaWxkRnJhbWVFUktOU180S1VSTEVSS05TXzZTdHJpbmdFUE5TXzVG
cmFtZUUKLV9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXIyMXNldEN1cnJlbnRIaXN0b3J5SXRlbUVO
M1dURjEwUGFzc1JlZlB0cklOU18xMUhpc3RvcnlJdGVtRUVFCiBfX1pON1dlYkNvcmUxMUZyYW1l
TG9hZGVyMjJmaW5kRnJhbWVGb3JOYXZpZ2F0aW9uRVJLTlNfMTJBdG9taWNTdHJpbmdFCiBfX1pO
N1dlYkNvcmUxMUZyYW1lTG9hZGVyMjNpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZUV2CiBfX1pON1dl
YkNvcmUxMUZyYW1lTG9hZGVyMjN0aW1lT2ZMYXN0Q29tcGxldGVkTG9hZEV2CiBfX1pON1dlYkNv
cmUxMUZyYW1lTG9hZGVyMjZyZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZ0VSS05TXzZTdHJpbmdF
Ci1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMjZzYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZUV2
Ci1fX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyMzZzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW1FUE5TXzExSGlzdG9yeUl0ZW1FCiBfX1pON1dlYkNvcmUxMUZyYW1lTG9hZGVyNGxv
YWRFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzE0U3Vic3RpdHV0ZURhdGFFYgogX19aTjdX
ZWJDb3JlMTFGcmFtZUxvYWRlcjRsb2FkRVJLTlNfMTVSZXNvdXJjZVJlcXVlc3RFUktOU182U3Ry
aW5nRWIKIF9fWk43V2ViQ29yZTExRnJhbWVMb2FkZXI0bG9hZEVSS05TXzE1UmVzb3VyY2VSZXF1
ZXN0RWIKQEAgLTM4OCw2ICszODQsNyBAQCBfX1pON1dlYkNvcmUxNnRocmVhZEdsb2JhbERhdGFF
dgogX19aTjdXZWJDb3JlMTdDcmVkZW50aWFsU3RvcmFnZTNnZXRFUktOU18xNVByb3RlY3Rpb25T
cGFjZUUKIF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24xNGlzVGV4dE1JTUVUeXBlRVJL
TlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJlZU5vZGUxOHRyZWVHbHlwaFBh
Z2VDb3VudEV2CitfX1pON1dlYkNvcmUxN0hpc3RvcnlDb250cm9sbGVyMjZzYXZlRG9jdW1lbnRB
bmRTY3JvbGxTdGF0ZUV2CiBfX1pON1dlYkNvcmUxN0hUTUxQbHVnSW5FbGVtZW50MTFnZXROUE9i
amVjdEV2CiBfX1pON1dlYkNvcmUxN2VxdWFsSWdub3JpbmdDYXNlRVBOU18xMFN0cmluZ0ltcGxF
UzFfCiBfX1pON1dlYkNvcmUxOGRlcHJlY2F0ZWRQYXJzZVVSTEVSS05TXzZTdHJpbmdFCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9G
cmFtZUxvYWRlci5jcHAKaW5kZXggMTBkYjg3Zi4uMzY5MDlkNCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcApAQCAtMTYzLDEwICsxNjMsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGNhblJlZmVyVG9Q
YXJlbnRGcmFtZUVuY29kaW5nKGNvbnN0IEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWUKICAgICBy
ZXR1cm4gcGFyZW50RnJhbWUgJiYgcGFyZW50RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2VzcyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiB9
CiAKK0hpc3RvcnlDb250cm9sbGVyOjpIaXN0b3J5Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCisg
ICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitIaXN0b3J5Q29udHJvbGxlcjo6fkhpc3RvcnlD
b250cm9sbGVyKCkKK3sKK30KKwogRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFt
ZSwgRnJhbWVMb2FkZXJDbGllbnQqIGNsaWVudCkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3BvbGljeUNoZWNrZXIoZnJhbWUpCisgICAgLCBt
X2hpc3RvcnkoZnJhbWUpCiAgICAgLCBtX3N0YXRlKEZyYW1lU3RhdGVDb21taXR0ZWRQYWdlKQog
ICAgICwgbV9sb2FkVHlwZShGcmFtZUxvYWRUeXBlU3RhbmRhcmQpCiAgICAgLCBtX2RlbGVnYXRl
SXNIYW5kbGluZ1Byb3Zpc2lvbmFsTG9hZEVycm9yKGZhbHNlKQpAQCAtNTYzLDcgKzU3Myw3IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OnN0b3AoKQogCiBib29sIEZyYW1lTG9hZGVyOjpjbG9zZVVSTCgp
CiB7Ci0gICAgc2F2ZURvY3VtZW50U3RhdGUoKTsKKyAgICBoaXN0b3J5KCktPnNhdmVEb2N1bWVu
dFN0YXRlKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIG9ubHkgc2VuZCB0aGUgcGFnZWhpZGUgZXZl
bnQgaGVyZSBpZiB0aGUgY3VycmVudCBkb2N1bWVudCBleGlzdHMgYW5kIGhhcyBub3QgYmVlbiBw
bGFjZWQgaW4gdGhlIHBhZ2UgY2FjaGUuICAgIAogICAgIERvY3VtZW50KiBjdXJyZW50RG9jdW1l
bnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwpAQCAtODI2LDcgKzgzNiw3IEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmJlZ2luKGNvbnN0IEtVUkwmIHVybCwgYm9vbCBkaXNwYXRjaCwgU2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKICAgICAgICAgICAgIGRvY3VtZW50LT5wYXJzZUROU1ByZWZldGNoQ29udHJv
bEhlYWRlcihkbnNQcmVmZXRjaENvbnRyb2wpOwogICAgIH0KIAotICAgIHJlc3RvcmVEb2N1bWVu
dFN0YXRlKCk7CisgICAgaGlzdG9yeSgpLT5yZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwogCiAgICAg
ZG9jdW1lbnQtPmltcGxpY2l0T3BlbigpOwogICAgIApAQCAtMTAxMywxMyArMTAyMywxMyBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpjb21taXRJY29uVVJMVG9JY29uRGF0YWJhc2UoY29uc3QgS1VSTCYg
aWNvbikKICAgICBpY29uRGF0YWJhc2UoKS0+c2V0SWNvblVSTEZvclBhZ2VVUkwoaWNvbi5zdHJp
bmcoKSwgb3JpZ2luYWxSZXF1ZXN0VVJMKCkuc3RyaW5nKCkpOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0
b3JlRG9jdW1lbnRTdGF0ZSgpCiB7CiAgICAgRG9jdW1lbnQqIGRvYyA9IG1fZnJhbWUtPmRvY3Vt
ZW50KCk7CiAgICAgICAgIAogICAgIEhpc3RvcnlJdGVtKiBpdGVtVG9SZXN0b3JlID0gMDsKICAg
ICAKLSAgICBzd2l0Y2ggKGxvYWRUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUtPmxvYWRl
cigpLT5sb2FkVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVJlbG9hZDoKICAg
ICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbjoKICAgICAgICAgY2FzZSBG
cmFtZUxvYWRUeXBlU2FtZToKQEAgLTEwMzEsNyArMTA0MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OnJlc3RvcmVEb2N1bWVudFN0YXRlKCkKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlSW5kZXhl
ZEJhY2tGb3J3YXJkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGVSZWRpcmVjdFdpdGhMb2Nr
ZWRCYWNrRm9yd2FyZExpc3Q6CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVN0YW5kYXJkOgot
ICAgICAgICAgICAgaXRlbVRvUmVzdG9yZSA9IG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpOyAK
KyAgICAgICAgICAgIGl0ZW1Ub1Jlc3RvcmUgPSBtX2N1cnJlbnRJdGVtLmdldCgpOyAKICAgICB9
CiAgICAgCiAgICAgaWYgKCFpdGVtVG9SZXN0b3JlKQpAQCAtMTIwMiwxMSArMTIxMiwyMSBAQCBL
VVJMIEZyYW1lTG9hZGVyOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkKICAgICByZXR1
cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKTsKIH0KIAordm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6c2V0Q3VycmVudEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAg
bV9jdXJyZW50SXRlbSA9IGl0ZW07Cit9CisKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnNldFBy
b3Zpc2lvbmFsSXRlbShIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBtX3Byb3Zpc2lvbmFsSXRl
bSA9IGl0ZW07Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRVUkxJbnRvQ2hpbGRGcmFtZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJlciwgRnJhbWUqIGNoaWxkRnJhbWUp
CiB7CiAgICAgQVNTRVJUKGNoaWxkRnJhbWUpOwogCi0gICAgSGlzdG9yeUl0ZW0qIHBhcmVudEl0
ZW0gPSBjdXJyZW50SGlzdG9yeUl0ZW0oKTsKKyAgICBIaXN0b3J5SXRlbSogcGFyZW50SXRlbSA9
IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKICAgICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0g
dGhpcy0+bG9hZFR5cGUoKTsKICAgICBGcmFtZUxvYWRUeXBlIGNoaWxkTG9hZFR5cGUgPSBGcmFt
ZUxvYWRUeXBlUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0OwogCkBAIC0xMjIyLDcg
KzEyNDIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkVVJMSW50b0NoaWxkRnJhbWUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVyZXIsCiAgICAgICAgICAgICAvLyB0aGlzIGlz
IG5lZWRlZCBpcyBSYWRhciAzMjEzNTU2LgogICAgICAgICAgICAgd29ya2luZ1VSTCA9IEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBjaGlsZEl0ZW0tPm9yaWdpbmFsVVJMU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY2hpbGRMb2FkVHlwZSA9IGxvYWRUeXBlOwotICAgICAgICAgICAgY2hpbGRGcmFtZS0+
bG9hZGVyKCktPm1fcHJvdmlzaW9uYWxIaXN0b3J5SXRlbSA9IGNoaWxkSXRlbTsKKyAgICAgICAg
ICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPnNldFByb3Zpc2lvbmFsSXRlbShj
aGlsZEl0ZW0pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTQ2LDcgKzE1NjYsNyBAQCBib29s
IEZyYW1lTG9hZGVyOjpjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCkKICAgICAgICAg
JiYgIVNoYXJlZFdvcmtlclJlcG9zaXRvcnk6Omhhc1NoYXJlZFdvcmtlcnMobV9mcmFtZS0+ZG9j
dW1lbnQoKSkKICNlbmRpZgogICAgICAgICAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNpbmdH
ZW9sb2NhdGlvbigpCi0gICAgICAgICYmIG1fY3VycmVudEhpc3RvcnlJdGVtCisgICAgICAgICYm
IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKQogICAgICAgICAmJiAhbV9xdWlja1JlZGlyZWN0Q29t
aW5nCiAgICAgICAgICYmICFtX2RvY3VtZW50TG9hZGVyLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkK
ICAgICAgICAgJiYgIW1fZG9jdW1lbnRMb2FkZXItPmlzU3RvcHBpbmcoKQpAQCAtMTY5Nyw3ICsx
NzE3LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6bG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKGludCBp
bmRlbnRMZXZlbCkKICNlbmRpZgogICAgICAgICBpZiAobV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXNp
bmdHZW9sb2NhdGlvbigpKQogICAgICAgICAgICAgeyBQQ0xPRygiICAgLUZyYW1lIHVzZXMgR2Vv
bG9jYXRpb24iKTsgY2Fubm90Q2FjaGUgPSB0cnVlOyB9Ci0gICAgICAgIGlmICghbV9jdXJyZW50
SGlzdG9yeUl0ZW0pCisgICAgICAgIGlmICghaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKQogICAg
ICAgICAgICAgeyBQQ0xPRygiICAgLU5vIGN1cnJlbnQgaGlzdG9yeSBpdGVtIik7IGNhbm5vdENh
Y2hlID0gdHJ1ZTsgfQogICAgICAgICBpZiAobV9xdWlja1JlZGlyZWN0Q29taW5nKQogICAgICAg
ICAgICAgeyBQQ0xPRygiICAgLVF1aWNrIHJlZGlyZWN0IGlzIGNvbWluZyIpOyBjYW5ub3RDYWNo
ZSA9IHRydWU7IH0KQEAgLTE3NzUsNyArMTc5NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnNjcm9s
bFRvQW5jaG9yKGNvbnN0IEtVUkwmIHVybCkKICAgICB9CiAgICAgCiAgICAgbV9VUkwgPSB1cmw7
Ci0gICAgdXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpOworICAgIGhpc3RvcnkoKS0+dXBk
YXRlRm9yQW5jaG9yU2Nyb2xsKCk7CiAKICAgICAvLyBJZiB3ZSB3ZXJlIGluIHRoZSBhdXRvc2Ny
b2xsL3BhblNjcm9sbCBtb2RlIHdlIHdhbnQgdG8gc3RvcCBpdCBiZWZvcmUgZm9sbG93aW5nIHRo
ZSBsaW5rIHRvIHRoZSBhbmNob3IKICAgICBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c3RvcEF1
dG9zY3JvbGxUaW1lcigpOwpAQCAtMjQxOCw3ICsyNDM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y29tbWl0UHJvdmlzaW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVkUGFn
ZSkKIAogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNhY2hlIHRoZSBwYWdlIHdl
IGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAg
ICAgLy8gV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtub3cgZm9yIHN1cmUgdGhh
dCBhIG5ldyBwYWdlIGlzIGFib3V0IHRvIGJlIGxvYWRlZC4KLSAgICBjYWNoZVBhZ2VGb3JIaXN0
b3J5SXRlbShtX2N1cnJlbnRIaXN0b3J5SXRlbS5nZXQoKSk7CisgICAgY2FjaGVQYWdlRm9ySGlz
dG9yeUl0ZW0oaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKICAgICAKICAgICBpZiAobV9sb2Fk
VHlwZSAhPSBGcmFtZUxvYWRUeXBlUmVwbGFjZSkKICAgICAgICAgY2xvc2VPbGREYXRhU291cmNl
cygpOwpAQCAtMjQ1Miw3ICsyNDcyLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gcHJwQ2FjaGVkUGFnZSkKICAgICBMT0co
TG9hZGluZywgIldlYkNvcmVMb2FkaW5nICVzOiBGaW5pc2hlZCBjb21taXR0aW5nIHByb3Zpc2lv
bmFsIGxvYWQgdG8gVVJMICVzIiwgbV9mcmFtZS0+dHJlZSgpLT5uYW1lKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgbV9VUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpZiAobV9s
b2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlU3RhbmRhcmQgJiYgbV9kb2N1bWVudExvYWRlci0+aXND
bGllbnRSZWRpcmVjdCgpKQotICAgICAgICB1cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3Qo
KTsKKyAgICAgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpOwogCiAgICAg
aWYgKG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlKSB7CiAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50
KCktPmRvY3VtZW50RGlkQmVjb21lQWN0aXZlKCk7CkBAIC0yNDc1LDcgKzI0OTUsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoUGFzc1JlZlB0cjxDYWNoZWRQYWdl
PiBwcnBDYWNoZWRQYWdlKQogICAgICAgICAgICAgc2VuZFJlbWFpbmluZ0RlbGVnYXRlTWVzc2Fn
ZXMoaWRlbnRpZmllciwgcmVzcG9uc2UsIHN0YXRpY19jYXN0PGludD4ocmVzcG9uc2UuZXhwZWN0
ZWRDb250ZW50TGVuZ3RoKCkpLCBlcnJvcik7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IHBhZ2VDYWNoZSgpLT5yZW1vdmUobV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgICAg
ICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CiAKICAgICAg
ICAgbV9kb2N1bWVudExvYWRlci0+c2V0UHJpbWFyeUxvYWRDb21wbGV0ZSh0cnVlKTsKIApAQCAt
MjQ5Myw3ICsyNTEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29tbWl0dGVk
KFBhc3NSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgbV9jbGllbnQtPnNldENvcGllc09uU2Nyb2xsKCk7Ci0gICAgdXBkYXRlSGlzdG9yeUZvckNv
bW1pdCgpOworICAgIGhpc3RvcnkoKS0+dXBkYXRlRm9yQ29tbWl0KCk7CiAKICAgICAvLyBUaGUg
Y2FsbCB0byBjbG9zZVVSTCgpIGludm9rZXMgdGhlIHVubG9hZCBldmVudCBoYW5kbGVyLCB3aGlj
aCBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkKICAgICAvLyBKYXZhU2NyaXB0LiBJZiB0aGUgc2NyaXB0
IGluaXRpYXRlcyBhIG5ldyBsb2FkLCB3ZSBuZWVkIHRvIGFiYW5kb24gdGhlIGN1cnJlbnQgbG9h
ZCwKQEAgLTI1MjUsNyArMjU0NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0Nv
bW1pdHRlZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgIGNhc2Ug
RnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZDoKICAgICAgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gbV9mcmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgICAgIGlmIChwYWdlLT5iYWNrRm9y
d2FyZExpc3QoKSkgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVIaXN0b3J5Rm9yQmFja0Zv
cndhcmROYXZpZ2F0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGhpc3RvcnkoKS0+dXBkYXRl
Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ3Jl
YXRlIGEgZG9jdW1lbnQgdmlldyBmb3IgdGhpcyBkb2N1bWVudCwgb3IgdXNlZCB0aGUgY2FjaGVk
IHZpZXcuCiAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRQYWdlKSB7CkBAIC0yNTQzLDEy
ICsyNTYzLDEyIEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZChQYXNz
UmVmUHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlw
ZVJlbG9hZEZyb21PcmlnaW46CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVNhbWU6CiAgICAg
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZVJlcGxhY2U6Ci0gICAgICAgICAgICB1cGRhdGVIaXN0b3J5
Rm9yUmVsb2FkKCk7CisgICAgICAgICAgICBoaXN0b3J5KCktPnVwZGF0ZUZvclJlbG9hZCgpOwog
ICAgICAgICAgICAgbV9jbGllbnQtPnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZVN0YW5kYXJk
OgotICAgICAgICAgICAgdXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpOworICAgICAgICAg
ICAgaGlzdG9yeSgpLT51cGRhdGVGb3JTdGFuZGFyZExvYWQoKTsKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKICAgICAgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSBhZGRlZCBm
b3IgYSBMZW9wYXJkIHBlcmZvcm1hbmNlIGltcG9ydmVtZW50LiBXZSBkZWNpZGVkIHRvIAogICAg
ICAgICAgICAgLy8gaWZkZWYgaXQgdG8gZml4IGNvcnJlY3RuZXNzIGlzc3VlcyBvbiBUaWdlciBk
b2N1bWVudGVkIGluIDxyZGFyOi8vcHJvYmxlbS81NDQxODIzPi4KQEAgLTI1NTksNyArMjU3OSw3
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZChQYXNzUmVmUHRyPENh
Y2hlZFBhZ2U+IGNhY2hlZFBhZ2UpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNl
IEZyYW1lTG9hZFR5cGVSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3Q6Ci0gICAgICAg
ICAgICB1cGRhdGVIaXN0b3J5Rm9yUmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0KCk7
CisgICAgICAgICAgICBoaXN0b3J5KCktPnVwZGF0ZUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tG
b3J3YXJkTGlzdCgpOwogICAgICAgICAgICAgbV9jbGllbnQtPnRyYW5zaXRpb25Ub0NvbW1pdHRl
ZEZvck5ld1BhZ2UoKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yOTA4LDcgKzI5MjgsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSgpCiAgICAg
ICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW07CiAgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICBpZiAoaXNCYWNrRm9yd2Fy
ZExvYWRUeXBlKGxvYWRUeXBlKCkpICYmIG1fZnJhbWUgPT0gcGFnZS0+bWFpbkZyYW1lKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBtX2N1cnJlbnRIaXN0b3J5SXRlbTsKKyAgICAgICAg
ICAgICAgICAgICAgaXRlbSA9IGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKTsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkUmVzZXQgPSB0cnVlOwogICAgICAgICAgICAg
aWYgKCEocGRsLT5pc0xvYWRpbmdJbkFQSVNlbnNlKCkgJiYgIXBkbC0+aXNTdG9wcGluZygpKSkg
ewpAQCAtMjk1Nyw3ICsyOTc3LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxl
dGVGb3JUaGlzRnJhbWUoKQogICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgaGFkIGEgc2Nyb2xs
IHBvaW50LCBzY3JvbGwgdG8gaXQsIG92ZXJyaWRpbmcgdGhlIGFuY2hvciBwb2ludCBpZiBhbnku
CiAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICBpZiAoKGlzQmFja0ZvcndhcmRMb2FkVHlwZShtX2xvYWRUeXBlKSB8fCBtX2xvYWRU
eXBlID09IEZyYW1lTG9hZFR5cGVSZWxvYWQgfHwgbV9sb2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBl
UmVsb2FkRnJvbU9yaWdpbikgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOworICAgICAgICAg
ICAgICAgICAgICBoaXN0b3J5KCktPnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgp
OwogCiAgICAgICAgICAgICBpZiAobV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50IHx8ICFt
X2NvbW1pdHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCkKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0zMDE4LDcgKzMwMzgsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkaWRGaXJzdExheW91dCgp
CiB7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAgIGlmIChp
c0JhY2tGb3J3YXJkTG9hZFR5cGUobV9sb2FkVHlwZSkgJiYgcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCkpCi0gICAgICAgICAgICByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKKyAg
ICAgICAgICAgIGhpc3RvcnkoKS0+cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCk7
CiAKICAgICBtX2ZpcnN0TGF5b3V0RG9uZSA9IHRydWU7CiAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkRmlyc3RMYXlvdXQoKTsKQEAgLTMwMjksMTUgKzMwNDksMjAgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKICAgICBtX2NsaWVudC0+ZGlzcGF0
Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKIH0KIAordm9pZCBIaXN0b3J5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yRnJhbWVMb2FkQ29tcGxldGVkKCkKK3sKKyAgICAvLyBFdmVuIGlm
IGFscmVhZHkgY29tcGxldGUsIHdlIG1pZ2h0IGhhdmUgc2V0IGEgcHJldmlvdXMgaXRlbSBvbiBh
IGZyYW1lIHRoYXQKKyAgICAvLyBkaWRuJ3QgZG8gYW55IGRhdGEgbG9hZGluZyBvbiB0aGUgcGFz
dCB0cmFuc2FjdGlvbi4gTWFrZSBzdXJlIHRvIGNsZWFyIHRoZXNlIG91dC4KKyAgICBtX3ByZXZp
b3VzSXRlbSA9IDA7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmZyYW1lTG9hZENvbXBsZXRlZCgp
CiB7CiAgICAgLy8gTm90ZTogQ2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4KIAogICAgIG1f
Y2xpZW50LT5mcmFtZUxvYWRDb21wbGV0ZWQoKTsKIAotICAgIC8vIEV2ZW4gaWYgYWxyZWFkeSBj
b21wbGV0ZSwgd2UgbWlnaHQgaGF2ZSBzZXQgYSBwcmV2aW91cyBpdGVtIG9uIGEgZnJhbWUgdGhh
dAotICAgIC8vIGRpZG4ndCBkbyBhbnkgZGF0YSBsb2FkaW5nIG9uIHRoZSBwYXN0IHRyYW5zYWN0
aW9uLiBNYWtlIHN1cmUgdG8gY2xlYXIgdGhlc2Ugb3V0LgotICAgIG1fcHJldmlvdXNIaXN0b3J5
SXRlbSA9IDA7CisgICAgaGlzdG9yeSgpLT51cGRhdGVGb3JGcmFtZUxvYWRDb21wbGV0ZWQoKTsK
IAogICAgIC8vIEFmdGVyIGEgY2FuY2VsZWQgcHJvdmlzaW9uYWwgbG9hZCwgZmlyc3RMYXlvdXRE
b25lIGlzIGZhbHNlLgogICAgIC8vIFJlc2V0IGl0IHRvIHRydWUgaWYgd2UncmUgZGlzcGxheWlu
ZyBhIHBhZ2UuCkBAIC0zMTM4LDcgKzMxNjMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpkZXRhY2hG
cm9tUGFyZW50KCkKIAogICAgIGNsb3NlVVJMKCk7CiAgICAgc3RvcEFsbExvYWRlcnMoKTsKLSAg
ICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oY3VycmVudEhpc3RvcnlJdGVt
KCkpOworICAgIGhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVt
KGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSk7CiAgICAgZGV0YWNoQ2hpbGRyZW4oKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpCkBAIC0zMzgwLDcgKzM0MDUsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
OjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yLCBi
b29sIGlzQwogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKIAogICAgIFJlZlB0
cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gYWN0aXZlRG9jdW1lbnRMb2FkZXIoKTsKLSAgICAK
KwogICAgIGlmIChpc0NvbXBsZXRlKSB7CiAgICAgICAgIC8vIEZJWE1FOiBEb24ndCB3YW50IHRv
IGRvIHRoaXMgaWYgYW4gZW50aXJlbHkgbmV3IGxvYWQgaXMgZ29pbmcsIHNvIHNob3VsZCBjaGVj
awogICAgICAgICAvLyB0aGF0IGJvdGggZGF0YSBzb3VyY2VzIG9uIHRoZSBmcmFtZSBhcmUgZWl0
aGVyIHRoaXMgb3IgbmlsLgpAQCAtMzM4OCw3ICszNDEzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6
cmVjZWl2ZWRNYWluUmVzb3VyY2VFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgYm9v
bCBpc0MKICAgICAgICAgaWYgKG1fY2xpZW50LT5zaG91bGRGYWxsQmFjayhlcnJvcikpCiAgICAg
ICAgICAgICBoYW5kbGVGYWxsYmFja0NvbnRlbnQoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
bV9zdGF0ZSA9PSBGcmFtZVN0YXRlUHJvdmlzaW9uYWwgJiYgbV9wcm92aXNpb25hbERvY3VtZW50
TG9hZGVyKSB7CiAgICAgICAgIGlmIChtX3N1Ym1pdHRlZEZvcm1VUkwgPT0gbV9wcm92aXNpb25h
bERvY3VtZW50TG9hZGVyLT5vcmlnaW5hbFJlcXVlc3RDb3B5KCkudXJsKCkpCiAgICAgICAgICAg
ICBtX3N1Ym1pdHRlZEZvcm1VUkwgPSBLVVJMKCk7CkBAIC0zMzk2LDcgKzM0MjEsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyOjpyZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJy
b3ImIGVycm9yLCBib29sIGlzQwogICAgICAgICAvLyBXZSBtaWdodCBoYXZlIG1hZGUgYSBwYWdl
IGNhY2hlIGl0ZW0sIGJ1dCBub3cgd2UncmUgYmFpbGluZyBvdXQgZHVlIHRvIGFuIGVycm9yIGJl
Zm9yZSB3ZSBldmVyCiAgICAgICAgIC8vIHRyYW5zaXRpb25lZCB0byB0aGUgbmV3IHBhZ2UgKGJl
Zm9yZSBXZWJGcmFtZVN0YXRlID09IGNvbW1pdCkuICBUaGUgZ29hbCBoZXJlIGlzIHRvIHJlc3Rv
cmUgYW55IHN0YXRlCiAgICAgICAgIC8vIHNvIHRoYXQgdGhlIGV4aXN0aW5nIHZpZXcgKHRoYXQg
d2VuZXZlciBnb3QgZmFyIGVub3VnaCB0byByZXBsYWNlKSBjYW4gY29udGludWUgYmVpbmcgdXNl
ZC4KLSAgICAgICAgaW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpOworICAgICAgICBo
aXN0b3J5KCktPmludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIENhbGwgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkIGhlcmUgc28g
dGhhdCB0aGUgZnJhbWUgbG9hZCBkZWxlZ2F0ZSBpcyBub3RpZmllZCB0aGF0IHRoZSByZWRpcmVj
dCdzCiAgICAgICAgIC8vIHN0YXR1cyBoYXMgY2hhbmdlZCwgaWYgdGhlcmUgd2FzIGEgcmVkaXJl
Y3QuIFRoZSBmcmFtZSBsb2FkIGRlbGVnYXRlIG1heSBoYXZlIHNhdmVkIHNvbWUgc3RhdGUgYWJv
dXQKQEAgLTM0MDYsOCArMzQzMSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY2VpdmVkTWFpblJl
c291cmNlRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IsIGJvb2wgaXNDCiAgICAgICAg
IGlmIChtX3NlbnRSZWRpcmVjdE5vdGlmaWNhdGlvbikKICAgICAgICAgICAgIGNsaWVudFJlZGly
ZWN0Q2FuY2VsbGVkT3JGaW5pc2hlZChmYWxzZSk7CiAgICAgfQotICAgIAotICAgIAorCiAgICAg
bG9hZGVyLT5tYWluUmVjZWl2ZWRFcnJvcihlcnJvciwgaXNDb21wbGV0ZSk7CiB9CiAKQEAgLTM0
NDEsNyArMzQ2NSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbnRpbnVlRnJhZ21lbnRTY3JvbGxB
ZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1CiAgICAgICAgIC8vIHdlIGhh
dmUgYWxyZWFkeSBzYXZlZCBhd2F5IHRoZSBzY3JvbGwgYW5kIGRvYyBzdGF0ZSBmb3IgdGhlIGxv
bmcgc2xvdyBsb2FkLAogICAgICAgICAvLyBidXQgaXQncyBub3QgYW4gb2J2aW91cyBjYXNlLgog
Ci0gICAgICAgIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKKyAgICAgICAgaGlz
dG9yeSgpLT51cGRhdGVCYWNrRm9yd2FyZExpc3RGb3JGcmFnbWVudFNjcm9sbCgpOwogICAgIH0K
ICAgICAKICAgICBzY3JvbGxUb0FuY2hvcih1cmwpOwpAQCAtMzQ5MCw3ICszNTE0LDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6Y29udGludWVMb2FkQWZ0ZXJOYXZpZ2F0aW9uUG9saWN5KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIFBhc3MKICAgICAvLyB0aHJvdWdoIHRoaXMgbWV0aG9kIGFscmVhZHks
IG5lc3RlZDsgb3RoZXJ3aXNlLCBwb2xpY3lEYXRhU291cmNlIHNob3VsZCBzdGlsbCBiZSBzZXQu
CiAgICAgQVNTRVJUKG1fcG9saWN5RG9jdW1lbnRMb2FkZXIgfHwgIW1fcHJvdmlzaW9uYWxEb2N1
bWVudExvYWRlci0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpOwogCi0gICAgYm9vbCBpc1Rh
cmdldEl0ZW0gPSBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0gPyBtX3Byb3Zpc2lvbmFsSGlzdG9y
eUl0ZW0tPmlzVGFyZ2V0SXRlbSgpIDogZmFsc2U7CisgICAgYm9vbCBpc1RhcmdldEl0ZW0gPSBo
aXN0b3J5KCktPnByb3Zpc2lvbmFsSXRlbSgpID8gaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0o
KS0+aXNUYXJnZXRJdGVtKCkgOiBmYWxzZTsKIAogICAgIC8vIFR3byByZWFzb25zIHdlIGNhbid0
IGNvbnRpbnVlOgogICAgIC8vICAgIDEpIE5hdmlnYXRpb24gcG9saWN5IGRlbGVnYXRlIHNhaWQg
d2UgY2FuJ3Qgc28gcmVxdWVzdCBpcyBuaWwuIEEgcHJpbWFyeSBjYXNlIG9mIHRoaXMgCkBAIC0z
NTEzLDcgKzM1MzcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb250aW51ZUxvYWRBZnRlck5hdmln
YXRpb25Qb2xpY3koY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUGFzcwogICAgICAgICBpZiAoKGlz
VGFyZ2V0SXRlbSB8fCBpc0xvYWRpbmdNYWluRnJhbWUoKSkgJiYgaXNCYWNrRm9yd2FyZExvYWRU
eXBlKHBvbGljeUNoZWNrZXIoKS0+bG9hZFR5cGUoKSkpCiAgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICAgICAgICAgIEZyYW1lKiBtYWluRnJh
bWUgPSBwYWdlLT5tYWluRnJhbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeUl0ZW0q
IHJlc2V0SXRlbSA9IG1haW5GcmFtZS0+bG9hZGVyKCktPm1fY3VycmVudEhpc3RvcnlJdGVtLmdl
dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlJdGVtKiByZXNldEl0ZW0gPSBtYWlu
RnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmdvVG9JdGVtKHJlc2V0SXRlbSk7CiAg
ICAgICAgICAgICAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdz
KCk7CiAgICAgICAgICAgICAgICAgICAgIHBhZ2UtPnNldEdsb2JhbEhpc3RvcnlJdGVtKCghc2V0
dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgPyAwIDogcmVzZXRJ
dGVtKTsKQEAgLTM2NzAsMTQgKzM2OTQsMTQgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hvdWxkSW50
ZXJydXB0TG9hZEZvclhGcmFtZU9wdGlvbnMoY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb24KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXI6OmFkZEhpc3RvcnlJdGVtRm9y
RnJhZ21lbnRTY3JvbGwoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlQmFja0Zvcndh
cmRMaXN0Rm9yRnJhZ21lbnRTY3JvbGwoKQogewotICAgIGFkZEJhY2tGb3J3YXJkSXRlbUNsaXBw
ZWRBdFRhcmdldChmYWxzZSk7CisgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFy
Z2V0KGZhbHNlKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlcjo6bG9hZFByb3Zpc2lvbmFsSXRlbUZy
b21DYWNoZWRQYWdlKCkKIHsKLSAgICBSZWZQdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBh
Z2VDYWNoZSgpLT5nZXQobV9wcm92aXNpb25hbEhpc3RvcnlJdGVtLmdldCgpKTsKKyAgICBSZWZQ
dHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQoaGlzdG9yeSgpLT5w
cm92aXNpb25hbEl0ZW0oKSk7CiAgICAgaWYgKCFjYWNoZWRQYWdlIHx8ICFjYWNoZWRQYWdlLT5k
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM3MjEsMTQgKzM3NDUsMTQg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6cGFnZUhpZGRlbigpCiAKIGJvb2wgRnJhbWVMb2FkZXI6OnNo
b3VsZFRyZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1fY3VycmVudEhpc3RvcnlJdGVtKQorICAgIGlmICghaGlzdG9yeSgpLT5jdXJyZW50
SXRlbSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHVybCA9PSBtX2N1cnJl
bnRIaXN0b3J5SXRlbS0+dXJsKCkgfHwgdXJsID09IG1fY3VycmVudEhpc3RvcnlJdGVtLT5vcmln
aW5hbFVSTCgpOworICAgIHJldHVybiB1cmwgPT0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpLT51
cmwoKSB8fCB1cmwgPT0gaGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpLT5vcmlnaW5hbFVSTCgpOwog
fQogCi1QYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFtZUxvYWRlcjo6Y3JlYXRlSGlzdG9yeUl0
ZW0oYm9vbCB1c2VPcmlnaW5hbCkKK1Bhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IEhpc3RvcnlDb250
cm9sbGVyOjpjcmVhdGVJdGVtKGJvb2wgdXNlT3JpZ2luYWwpCiB7Ci0gICAgRG9jdW1lbnRMb2Fk
ZXIqIGRvY0xvYWRlciA9IGRvY3VtZW50TG9hZGVyKCk7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRv
Y0xvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpOwogICAgIAogICAg
IEtVUkwgdW5yZWFjaGFibGVVUkwgPSBkb2NMb2FkZXIgPyBkb2NMb2FkZXItPnVucmVhY2hhYmxl
VVJMKCkgOiBLVVJMKCk7CiAgICAgCkBAIC0zNzc3LDEzICszODAxLDI1IEBAIFBhc3NSZWZQdHI8
SGlzdG9yeUl0ZW0+IEZyYW1lTG9hZGVyOjpjcmVhdGVIaXN0b3J5SXRlbShib29sIHVzZU9yaWdp
bmFsKQogICAgIH0KICAgICAKICAgICAvLyBTZXQgdGhlIGl0ZW0gZm9yIHdoaWNoIHdlIHdpbGwg
c2F2ZSBkb2N1bWVudCBzdGF0ZQotICAgIG1fcHJldmlvdXNIaXN0b3J5SXRlbSA9IG1fY3VycmVu
dEhpc3RvcnlJdGVtOwotICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICBtX3By
ZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07CisgICAgbV9jdXJyZW50SXRlbSA9IGl0ZW07CiAg
ICAgCiAgICAgcmV0dXJuIGl0ZW0ucmVsZWFzZSgpOwogfQorICAgIAordm9pZCBGcmFtZUxvYWRl
cjo6Y2hlY2tEaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkKK3sKKyAgICBQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lk
IEZyYW1lTG9hZGVyOjphZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQoYm9vbCBkb0Ns
aXApCisgICAgaWYgKCFtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24gJiYgcGFnZS0+YmFja0Zv
cndhcmRMaXN0KCktPmVudHJpZXMoKS5zaXplKCkgPT0gMSkgeworICAgICAgICBtX2RpZFBlcmZv
cm1GaXJzdE5hdmlnYXRpb24gPSB0cnVlOworICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZp
cnN0TmF2aWdhdGlvbigpOworICAgIH0KK30KKwordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBk
YXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KGJvb2wgZG9DbGlwKQogewogICAgIC8v
IEluIHRoZSBjYXNlIG9mIHNhdmluZyBzdGF0ZSBhYm91dCBhIHBhZ2Ugd2l0aCBmcmFtZXMsIHdl
IHN0b3JlIGEgdHJlZSBvZiBpdGVtcyB0aGF0IG1pcnJvcnMgdGhlIGZyYW1lIHRyZWUuICAKICAg
ICAvLyBUaGUgaXRlbSB0aGF0IHdhcyB0aGUgdGFyZ2V0IG9mIHRoZSB1c2VyJ3MgbmF2aWdhdGlv
biBpcyBkZXNpZ25hdGVkIGFzIHRoZSAidGFyZ2V0SXRlbSIuICAKQEAgLTM3OTQsNDEgKzM4MzAs
MzggQEAgdm9pZCBGcmFtZUxvYWRlcjo6YWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0
KGJvb2wgZG9DbGlwKQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGRvY3VtZW50TG9hZGVyKCktPnVybEZvckhpc3RvcnkoKS5pc0VtcHR5KCkpCisgICAgaWYgKG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT51cmxGb3JIaXN0b3J5KCkuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZSogbWFpbkZyYW1lID0gcGFnZS0+bWFp
bkZyYW1lKCk7CiAgICAgQVNTRVJUKG1haW5GcmFtZSk7CiAgICAgRnJhbWVMb2FkZXIqIGZyYW1l
TG9hZGVyID0gbWFpbkZyYW1lLT5sb2FkZXIoKTsKIAotICAgIGlmICghZnJhbWVMb2FkZXItPm1f
ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbiAmJiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+ZW50
cmllcygpLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGZyYW1lTG9hZGVyLT5tX2RpZFBlcmZvcm1G
aXJzdE5hdmlnYXRpb24gPSB0cnVlOwotICAgICAgICBtX2NsaWVudC0+ZGlkUGVyZm9ybUZpcnN0
TmF2aWdhdGlvbigpOwotICAgIH0KKyAgICBmcmFtZUxvYWRlci0+Y2hlY2tEaWRQZXJmb3JtRmly
c3ROYXZpZ2F0aW9uKCk7CiAKLSAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBmcmFtZUxv
YWRlci0+Y3JlYXRlSGlzdG9yeUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7Ci0gICAgTE9HKEJh
Y2tGb3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3YXJkIGl0ZW0g
JXAgZm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGZy
YW1lTG9hZGVyLT5oaXN0b3J5KCktPmNyZWF0ZUl0ZW1UcmVlKG1fZnJhbWUsIGRvQ2xpcCk7Cisg
ICAgTE9HKEJhY2tGb3J3YXJkLCAiV2ViQ29yZUJhY2tGb3J3YXJkIC0gQWRkaW5nIGJhY2tmb3J3
YXJkIGl0ZW0gJXAgZm9yIGZyYW1lICVzIiwgaXRlbS5nZXQoKSwgbV9mcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCktPnVybCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICBw
YWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YWRkSXRlbShpdGVtKTsKIH0KIAotUGFzc1JlZlB0cjxI
aXN0b3J5SXRlbT4gRnJhbWVMb2FkZXI6OmNyZWF0ZUhpc3RvcnlJdGVtVHJlZShGcmFtZSogdGFy
Z2V0RnJhbWUsIGJvb2wgY2xpcEF0VGFyZ2V0KQorUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gSGlz
dG9yeUNvbnRyb2xsZXI6OmNyZWF0ZUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBj
bGlwQXRUYXJnZXQpCiB7Ci0gICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBiZkl0ZW0gPSBjcmVhdGVI
aXN0b3J5SXRlbShtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpID8gdHJ1ZSA6IGZhbHNlKTsKLSAg
ICBpZiAobV9wcmV2aW91c0hpc3RvcnlJdGVtKQotICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25B
bmRWaWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0hpc3RvcnlJdGVtLmdldCgpKTsKKyAgICBSZWZQ
dHI8SGlzdG9yeUl0ZW0+IGJmSXRlbSA9IGNyZWF0ZUl0ZW0obV9mcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKSA/IHRydWUgOiBmYWxzZSk7CisgICAgaWYgKG1fcHJldmlvdXNJdGVtKQorICAgICAgICBz
YXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0l0ZW0uZ2V0KCkp
OwogICAgIGlmICghKGNsaXBBdFRhcmdldCAmJiBtX2ZyYW1lID09IHRhcmdldEZyYW1lKSkgewog
ICAgICAgICAvLyBzYXZlIGZyYW1lIHN0YXRlIGZvciBpdGVtcyB0aGF0IGFyZW4ndCBsb2FkaW5n
IChraHRtbCBkb2Vzbid0IHNhdmUgdGhvc2UpCiAgICAgICAgIHNhdmVEb2N1bWVudFN0YXRlKCk7
CiAgICAgICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS0+dHJlZSgpLT5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCktPm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgICAgIEZyYW1lTG9hZGVyKiBjaGlsZExvYWRlciA9IGNoaWxkLT5sb2FkZXIoKTsKICAgICAg
ICAgICAgIGJvb2wgaGFzQ2hpbGRMb2FkZWQgPSBjaGlsZExvYWRlci0+ZnJhbWVIYXNMb2FkZWQo
KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBmcmFt
ZSBjb3JyZXNwb25kaW5nIHRvIGFuIDxvYmplY3Q+IGVsZW1lbnQgdGhhdCBuZXZlciBsb2FkZWQs
CiAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhIGhpc3RvcnkgaXRlbSwg
YmVjYXVzZSB0aGF0IGNhdXNlcyBmYWxsYmFjayBjb250ZW50CiAgICAgICAgICAgICAvLyB0byBi
ZSBpZ25vcmVkIG9uIHJlbG9hZC4KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCEoIWhh
c0NoaWxkTG9hZGVkICYmIGNoaWxkTG9hZGVyLT5pc0hvc3RlZEJ5T2JqZWN0RWxlbWVudCgpKSkK
LSAgICAgICAgICAgICAgICBiZkl0ZW0tPmFkZENoaWxkSXRlbShjaGlsZExvYWRlci0+Y3JlYXRl
SGlzdG9yeUl0ZW1UcmVlKHRhcmdldEZyYW1lLCBjbGlwQXRUYXJnZXQpKTsKKyAgICAgICAgICAg
ICAgICBiZkl0ZW0tPmFkZENoaWxkSXRlbShjaGlsZExvYWRlci0+aGlzdG9yeSgpLT5jcmVhdGVJ
dGVtVHJlZSh0YXJnZXRGcmFtZSwgY2xpcEF0VGFyZ2V0KSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgaWYgKG1fZnJhbWUgPT0gdGFyZ2V0RnJhbWUpCkBAIC0zODQ0LDE0ICszODc3LDE0IEBAIEZy
YW1lKiBGcmFtZUxvYWRlcjo6ZmluZEZyYW1lRm9yTmF2aWdhdGlvbihjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCiAgICAgcmV0dXJuIGZyYW1lOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjpzYXZl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0o
SGlzdG9yeUl0ZW0qIGl0ZW0pCiB7CiAgICAgaWYgKCFpdGVtIHx8ICFtX2ZyYW1lLT52aWV3KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgaXRlbS0+c2V0U2Nyb2xsUG9pbnQobV9m
cmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAvLyBGSVhNRTogSXQgd291bGQg
YmUgZ3JlYXQgdG8gd29yayBvdXQgYSB3YXkgdG8gcHV0IHRoaXMgY29kZSBpbiBXZWJDb3JlIGlu
c3RlYWQgb2YgY2FsbGluZyB0aHJvdWdoIHRvIHRoZSBjbGllbnQuCi0gICAgbV9jbGllbnQtPnNh
dmVWaWV3U3RhdGVUb0l0ZW0oaXRlbSk7CisgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5zYXZlVmlld1N0YXRlVG9JdGVtKGl0ZW0pOwogfQogCiAvKgpAQCAtMzg2NSwzNCArMzg5OCwz
NCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAgMikgSWYgdGhlIGxheW91dCBoYXBwZW5zIGFmdGVyIHRo
ZSBsb2FkIGNvbXBsZXRlcywgdGhlIGF0dGVtcHQgdG8gcmVzdG9yZSBhdCBsb2FkIGNvbXBsZXRp
b24gdGltZSBzaWxlbnRseQogIGZhaWxzLiAgV2UgdGhlbiBzdWNjZXNzZnVsbHkgcmVzdG9yZSBp
dCB3aGVuIHRoZSBsYXlvdXQgaGFwcGVucy4KICovCi12b2lkIEZyYW1lTG9hZGVyOjpyZXN0b3Jl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVz
dG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCkKIHsKLSAgICBpZiAoIW1fY29tbWl0dGVk
Rmlyc3RSZWFsRG9jdW1lbnRMb2FkKQorICAgIGlmICghbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1p
dHRlZEZpcnN0UmVhbERvY3VtZW50TG9hZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQobV9jdXJyZW50SGlzdG9yeUl0ZW0pOworICAgIEFTU0VSVChtX2N1cnJlbnRJdGVtKTsKICAg
ICAKICAgICAvLyBGSVhNRTogQXMgdGhlIEFTU0VSVCBhdHRlc3RzLCBpdCBzZWVtcyB3ZSBzaG91
bGQgYWx3YXlzIGhhdmUgYSBjdXJyZW50SXRlbSBoZXJlLgogICAgIC8vIE9uZSBjb3VudGVyZXhh
bXBsZSBpcyA8cmRhcjovL3Byb2JsZW0vNDkxNzI5MD4KICAgICAvLyBGb3Igbm93LCB0byBjb3Zl
ciB0aGlzIGlzc3VlIGluIHJlbGVhc2UgYnVpbGRzLCB0aGVyZSBpcyBubyB0ZWNobmljYWwgaGFy
bSB0byByZXR1cm5pbmcKICAgICAvLyBlYXJseSBhbmQgZnJvbSBhIHVzZXIgc3RhbmRwb2ludCAt
IGFzIGluIHRoZSBhYm92ZSByYWRhciAtIHRoZSBwcmV2aW91cyBwYWdlIGxvYWQgZmFpbGVkIAog
ICAgIC8vIHNvIHRoZXJlICppcyogbm8gc2Nyb2xsIG9yIHZpZXcgc3RhdGUgdG8gcmVzdG9yZSEK
LSAgICBpZiAoIW1fY3VycmVudEhpc3RvcnlJdGVtKQorICAgIGlmICghbV9jdXJyZW50SXRlbSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBncmVhdCB0
byB3b3JrIG91dCBhIHdheSB0byBwdXQgdGhpcyBjb2RlIGluIFdlYkNvcmUgaW5zdGVhZCBvZiBj
YWxsaW5nCiAgICAgLy8gdGhyb3VnaCB0byB0aGUgY2xpZW50LiBJdCdzIGN1cnJlbnRseSB1c2Vk
IG9ubHkgZm9yIHRoZSBQREYgdmlldyBvbiBNYWMuCi0gICAgbV9jbGllbnQtPnJlc3RvcmVWaWV3
U3RhdGUoKTsKKyAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnJlc3RvcmVWaWV3U3Rh
dGUoKTsKICAgICAKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQog
ICAgICAgICBpZiAoIXZpZXctPndhc1Njcm9sbGVkQnlVc2VyKCkpCi0gICAgICAgICAgICB2aWV3
LT5zZXRTY3JvbGxQb3NpdGlvbihtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2Nyb2xsUG9pbnQoKSk7
CisgICAgICAgICAgICB2aWV3LT5zZXRTY3JvbGxQb3NpdGlvbihtX2N1cnJlbnRJdGVtLT5zY3Jv
bGxQb2ludCgpKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVt
Q2FjaGVkUGFnZSgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjppbnZhbGlkYXRlQ3VycmVudEl0
ZW1DYWNoZWRQYWdlKCkKIHsKICAgICAvLyBXaGVuIHdlIGFyZSBwcmUtY29tbWl0LCB0aGUgY3Vy
cmVudEl0ZW0gaXMgd2hlcmUgdGhlIHBhZ2VDYWNoZSBkYXRhIHJlc2lkZXMgICAgCi0gICAgQ2Fj
aGVkUGFnZSogY2FjaGVkUGFnZSA9IHBhZ2VDYWNoZSgpLT5nZXQobV9jdXJyZW50SGlzdG9yeUl0
ZW0uZ2V0KCkpOworICAgIENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBwYWdlQ2FjaGUoKS0+Z2V0
KGN1cnJlbnRJdGVtKCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBncm90ZXNxdWUgaGFj
ayB0byBmaXggPHJkYXI6Ly9wcm9ibGVtLzQwNTkwNTk+IENyYXNoIGluIFJlbmRlckZsb3c6OmRl
dGFjaAogICAgIC8vIFNvbWVob3cgdGhlIFBhZ2VTdGF0ZSBvYmplY3QgaXMgbm90IHByb3Blcmx5
IHVwZGF0ZWQsIGFuZCBpcyBob2xkaW5nIG9udG8gYSBzdGFsZSBkb2N1bWVudC4KQEAgLTM5MDUs
MTIgKzM5MzgsMTQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2Fj
aGVkUGFnZSgpCiAgICAgfQogICAgIAogICAgIGlmIChjYWNoZWRQYWdlKQotICAgICAgICBwYWdl
Q2FjaGUoKS0+cmVtb3ZlKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsKKyAgICAgICAgcGFn
ZUNhY2hlKCktPnJlbW92ZShjdXJyZW50SXRlbSgpKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6
c2F2ZURvY3VtZW50U3RhdGUoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6c2F2ZURvY3VtZW50
U3RhdGUoKQogewotICAgIGlmIChtX2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQpCisgICAg
Ly8gRklYTUU6IFJlYWRpbmcgdGhpcyBiaXQgb2YgRnJhbWVMb2FkZXIgc3RhdGUgaGVyZSBpcyB1
bmZvcnR1bmF0ZS4gIEkgbmVlZCB0byBzdHVkeQorICAgIC8vIHRoaXMgbW9yZSB0byBzZWUgaWYg
d2UgY2FuIHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kuCisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigp
LT5jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZvciBhIHN0YW5kYXJkIHBhZ2UgbG9hZCwgd2Ugd2lsbCBoYXZlIGEgcHJldmlvdXMgaXRl
bSBzZXQsIHdoaWNoIHdpbGwgYmUgdXNlZCB0bwpAQCAtMzkyNCw3ICszOTU5LDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6c2F2ZURvY3VtZW50U3RhdGUoKQogICAgIC8vIHRoYXQgcHJldmlvdXNJdGVt
IGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiBhIHBhZ2UgdHJhbnNpdGlvbi4gIFdlIGxldmVyYWdl
IHRoZQogICAgIC8vIGNoZWNrTG9hZENvbXBsZXRlIHJlY3Vyc2lvbiB0byBhY2hpZXZlIHRoaXMg
Z29hbC4KIAotICAgIEhpc3RvcnlJdGVtKiBpdGVtID0gbV9wcmV2aW91c0hpc3RvcnlJdGVtID8g
bV9wcmV2aW91c0hpc3RvcnlJdGVtLmdldCgpIDogbV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCk7
CisgICAgSGlzdG9yeUl0ZW0qIGl0ZW0gPSBtX3ByZXZpb3VzSXRlbSA/IG1fcHJldmlvdXNJdGVt
LmdldCgpIDogbV9jdXJyZW50SXRlbS5nZXQoKTsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMzkzOCw2ICszOTczLDkgQEAgdm9pZCBGcmFtZUxvYWRlcjo6c2F2ZURvY3Vt
ZW50U3RhdGUoKQogfQogCiAvLyBMb2FkcyBjb250ZW50IGludG8gdGhpcyBmcmFtZSwgYXMgc3Bl
Y2lmaWVkIGJ5IGhpc3RvcnkgaXRlbQorLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJl
YWxseSBiZSBzcGxpdCBpbnRvIGEgY291cGxlIHBpZWNlcywgc29tZSBvZgorLy8gd2hpY2ggc2hv
dWxkIGJlIG1ldGhvZHMgb2YgSGlzdG9yeUNvbnRyb2xsZXIgYW5kIHNvbWUgb2Ygd2hpY2ggc2hv
dWxkIGJlCisvLyBtZXRob2RzIG9mIEZyYW1lTG9hZGVyLgogdm9pZCBGcmFtZUxvYWRlcjo6bG9h
ZEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUpCiB7CiAgICAg
aWYgKCFtX2ZyYW1lLT5wYWdlKCkpCkBAIC0zOTU2LDcgKzM5OTQsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpsb2FkSXRlbShIaXN0b3J5SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkK
ICAgICAvLyBjaGVjayBmb3IgYWxsIHRoYXQgYXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24u
CiAgICAgLy8gV2UgYWxzbyBkbyBub3QgZG8gYW5jaG9yLXN0eWxlIG5hdmlnYXRpb24gaWYgd2Un
cmUgcG9zdGluZyBhIGZvcm0gb3IgbmF2aWdhdGluZyBmcm9tCiAgICAgLy8gYSBwYWdlIHRoYXQg
d2FzIHJlc3VsdGVkIGZyb20gYSBmb3JtIHBvc3QuCi0gICAgYm9vbCBzaG91bGRTY3JvbGwgPSAh
Zm9ybURhdGEgJiYgIShtX2N1cnJlbnRIaXN0b3J5SXRlbSAmJiBtX2N1cnJlbnRIaXN0b3J5SXRl
bS0+Zm9ybURhdGEoKSkgJiYgdXJsc01hdGNoSXRlbShpdGVtKTsKKyAgICBib29sIHNob3VsZFNj
cm9sbCA9ICFmb3JtRGF0YSAmJiAhKGhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKSAmJiBoaXN0b3J5
KCktPmN1cnJlbnRJdGVtKCktPmZvcm1EYXRhKCkpICYmIGhpc3RvcnkoKS0+dXJsc01hdGNoSXRl
bShpdGVtKTsKIAogI2lmIEVOQUJMRShXTUwpCiAgICAgLy8gQWxsIFdNTCBkZWNrcyBzaG91bGQg
Z28gdGhyb3VnaCB0aGUgcmVhbCBsb2FkIG1lY2hhbmlzbSwgbm90IHRoZSBzY3JvbGwtdG8tYW5j
aG9yIGNvZGUKQEAgLTM5NjYsMTIgKzQwMDQsMTIgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0
ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hZFR5cGUpCiAKICAgICBpZiAo
c2hvdWxkU2Nyb2xsKSB7CiAgICAgICAgIC8vIE11c3QgZG8gdGhpcyBtYWludGVuYW5jZSBoZXJl
LCBzaW5jZSB3ZSBkb24ndCBnbyB0aHJvdWdoIGEgcmVhbCBwYWdlIHJlbG9hZAotICAgICAgICBz
YXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SGlzdG9yeUl0ZW0u
Z2V0KCkpOworICAgICAgICBoaXN0b3J5KCktPnNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0
ZVRvSXRlbShoaXN0b3J5KCktPmN1cnJlbnRJdGVtKCkpOwogCiAgICAgICAgIGlmIChGcmFtZVZp
ZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpCiAgICAgICAgICAgICB2aWV3LT5zZXRXYXNTY3Jv
bGxlZEJ5VXNlcihmYWxzZSk7CiAKLSAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0gPSBpdGVt
OworICAgICAgICBoaXN0b3J5KCktPnNldEN1cnJlbnRJdGVtKGl0ZW0pOwogCiAgICAgICAgIC8v
IEZJWE1FOiBGb3JtIHN0YXRlIG1pZ2h0IG5lZWQgdG8gYmUgc2F2ZWQgaGVyZSB0b28uCiAKQEAg
LTM5ODAsNyArNDAxOCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVt
KiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlKQogICAgICAgICBzY3JvbGxUb0FuY2hvcihp
dGVtLT51cmwoKSk7CiAgICAgCiAgICAgICAgIC8vIG11c3QgZG8gdGhpcyBtYWludGVuYW5jZSBo
ZXJlLCBzaW5jZSB3ZSBkb24ndCBnbyB0aHJvdWdoIGEgcmVhbCBwYWdlIHJlbG9hZAotICAgICAg
ICByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKKyAgICAgICAgaGlzdG9yeSgp
LT5yZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEZha2UgdGhlIFVSTCBjaGFuZ2UgYnkgdXBkYXRpbmcgdGhlIGRhdGEgc291cmNlJ3MgcmVx
dWVzdC4gIFRoaXMgd2lsbCBubyBsb25nZXIKICAgICAgICAgLy8gYmUgbmVjZXNzYXJ5IGlmIHdl
IGRvIHRoZSBiZXR0ZXIgZml4IGRlc2NyaWJlZCBhYm92ZS4KQEAgLTM5OTIsNyArNDAzMCw3IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRU
eXBlIGxvYWRUeXBlKQogICAgICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2Ug
YW55IGNoaWxkIGl0ZW1zIGFzIGNoaWxkIGZyYW1lcyBsb2FkCi0gICAgICAgIG1fcHJvdmlzaW9u
YWxIaXN0b3J5SXRlbSA9IGl0ZW07CisgICAgICAgIGhpc3RvcnkoKS0+c2V0UHJvdmlzaW9uYWxJ
dGVtKGl0ZW0pOwogCiAgICAgICAgIGJvb2wgaW5QYWdlQ2FjaGUgPSBmYWxzZTsKICAgICAgICAg
CkBAIC00MDA5LDcgKzQwNDcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkSXRlbShIaXN0b3J5
SXRlbSogaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSkKICAgICAgICAgICAgICAgICBsb2Fk
V2l0aERvY3VtZW50TG9hZGVyKGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCksIGxvYWRUeXBl
LCAwKTsgICAKICAgICAgICAgICAgICAgICBpblBhZ2VDYWNoZSA9IHRydWU7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5n
IHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJkIGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkg
aGFzIGV4cGlyZWQiLCBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0tPnVybCgpLnN0cmluZygpLmFz
Y2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3Rv
cmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVu
dHJ5IGhhcyBleHBpcmVkIiwgaGlzdG9yeSgpLT5wcm92aXNpb25hbEl0ZW0oKS0+dXJsKCkuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1v
dmUoaXRlbSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQwODUsOSArNDEyMyw5IEBA
IHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRU
eXBlIGxvYWRUeXBlKQogfQogCiAvLyBXYWxrIHRoZSBmcmFtZSB0cmVlIGFuZCBlbnN1cmUgdGhh
dCB0aGUgVVJMcyBtYXRjaCB0aGUgVVJMcyBpbiB0aGUgaXRlbS4KLWJvb2wgRnJhbWVMb2FkZXI6
OnVybHNNYXRjaEl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0Citib29sIEhpc3RvcnlDb250
cm9sbGVyOjp1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogewotICAgIGNv
bnN0IEtVUkwmIGN1cnJlbnRVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmwoKTsKKyAgICBjb25z
dCBLVVJMJiBjdXJyZW50VVJMID0gbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PnVybCgpOwogICAgIGlmICghZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcihjdXJyZW50
VVJMLCBpdGVtLT51cmwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDA5Niw3ICs0
MTM0LDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6dXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSogaXRl
bSkgY29uc3QKICAgICB1bnNpZ25lZCBzaXplID0gY2hpbGRJdGVtcy5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBGcmFtZSogY2hpbGRG
cmFtZSA9IG1fZnJhbWUtPnRyZWUoKS0+Y2hpbGQoY2hpbGRJdGVtc1tpXS0+dGFyZ2V0KCkpOwot
ICAgICAgICBpZiAoY2hpbGRGcmFtZSAmJiAhY2hpbGRGcmFtZS0+bG9hZGVyKCktPnVybHNNYXRj
aEl0ZW0oY2hpbGRJdGVtc1tpXS5nZXQoKSkpCisgICAgICAgIGlmIChjaGlsZEZyYW1lICYmICFj
aGlsZEZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT51cmxzTWF0Y2hJdGVtKGNoaWxkSXRlbXNb
aV0uZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNDEwNSw3
ICs0MTQzLDcgQEAgYm9vbCBGcmFtZUxvYWRlcjo6dXJsc01hdGNoSXRlbShIaXN0b3J5SXRlbSog
aXRlbSkgY29uc3QKIAogLy8gTWFpbiBmdW5uZWwgZm9yIG5hdmlnYXRpbmcgdG8gYSBwcmV2aW91
cyBsb2NhdGlvbiAoYmFjay9mb3J3YXJkLCBub24tc2VhcmNoIHNuYXAtYmFjaykKIC8vIFRoaXMg
aW5jbHVkZXMgcmVjdXJzaW9uIHRvIGhhbmRsZSBsb2FkaW5nIGludG8gZnJhbWVzZXRzIHByb3Bl
cmx5Ci12b2lkIEZyYW1lTG9hZGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRlbSwg
RnJhbWVMb2FkVHlwZSB0eXBlKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6Z29Ub0l0ZW0oSGlz
dG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1lTG9hZFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQo
IW1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpOwogICAgIApAQCAtNDExNiw3ICs0MTU0LDcgQEAg
dm9pZCBGcmFtZUxvYWRlcjo6Z29Ub0l0ZW0oSGlzdG9yeUl0ZW0qIHRhcmdldEl0ZW0sIEZyYW1l
TG9hZFR5cGUgdHlwZSkKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgIGlm
ICghcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghbV9jbGllbnQtPnNob3VsZEdvVG9I
aXN0b3J5SXRlbSh0YXJnZXRJdGVtKSkKKyAgICBpZiAoIW1fZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+c2hvdWxkR29Ub0hpc3RvcnlJdGVtKHRhcmdldEl0ZW0pKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBTZXQgdGhlIEJGIGN1cnNvciBiZWZvcmUgY29tbWl0LCB3aGljaCBsZXRzIHRo
ZSB1c2VyIHF1aWNrbHkgY2xpY2sgYmFjay9mb3J3YXJkIGFnYWluLgpAQCAtNDEzNCwxNiArNDE3
MiwxNiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpnb1RvSXRlbShIaXN0b3J5SXRlbSogdGFyZ2V0SXRl
bSwgRnJhbWVMb2FkVHlwZSB0eXBlKQogLy8gdHJhY2tpbmcgd2hldGhlciBlYWNoIGZyYW1lIGFs
cmVhZHkgaGFzIHRoZSBjb250ZW50IHRoZSBpdGVtIHJlcXVlc3RzLiAgSWYgdGhlcmUgaXMKIC8v
IGEgbWF0Y2ggKGJ5IFVSTCksIHdlIGp1c3QgcmVzdG9yZSBzY3JvbGwgcG9zaXRpb24gYW5kIHJl
Y3Vyc2UuICBPdGhlcndpc2Ugd2UgbXVzdAogLy8gcmVsb2FkIHRoYXQgZnJhbWUsIGFuZCBhbGwg
aXRzIGtpZHMuCi12b2lkIEZyYW1lTG9hZGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRl
bSogaXRlbSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCit2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRlbSwg
SGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJU
KGl0ZW0pOwogICAgIEFTU0VSVChmcm9tSXRlbSk7Ci0gICAgCisKICAgICBLVVJMIGl0ZW1VUkwg
PSBpdGVtLT51cmwoKTsKICAgICBLVVJMIGN1cnJlbnRVUkw7Ci0gICAgaWYgKGRvY3VtZW50TG9h
ZGVyKCkpCi0gICAgICAgIGN1cnJlbnRVUkwgPSBkb2N1bWVudExvYWRlcigpLT51cmwoKTsKLSAg
ICAKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAg
IGN1cnJlbnRVUkwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCk7
CisKICAgICAvLyBBbHdheXMgcmVsb2FkIHRoZSB0YXJnZXQgZnJhbWUgb2YgdGhlIGl0ZW0gd2Un
cmUgZ29pbmcgdG8uICBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsCiAgICAgLy8gZG8gLXNvbWUt
IGxvYWQgZm9yIHRoZSB0cmFuc2l0aW9uLCB3aGljaCBtZWFucyBhIHByb3BlciBub3RpZmljYXRp
b24gd2lsbCBiZSBwb3N0ZWQKICAgICAvLyB0byB0aGUgYXBwLgpAQCAtNDE1NywxNCArNDE5NSwx
NCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpyZWN1cnNpdmVHb1RvSXRlbShIaXN0b3J5SXRlbSogaXRl
bSwgSGlzdG9yeUl0ZW0qIGZyb21JdGVtLCBGcgogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb250
ZW50IGlzIGdvb2QsIHNvIGxlYXZlIGl0IGFsb25lIGFuZCBsb29rIGZvciBjaGlsZHJlbiB0aGF0
IG5lZWQgcmVsb2FkaW5nCiAgICAgICAgIC8vIFNhdmUgZm9ybSBzdGF0ZSAod29ya3MgZnJvbSBj
dXJyZW50SXRlbSwgc2luY2UgcHJldkl0ZW0gaXMgbmlsKQotICAgICAgICBBU1NFUlQoIW1fcHJl
dmlvdXNIaXN0b3J5SXRlbSk7CisgICAgICAgIEFTU0VSVCghbV9wcmV2aW91c0l0ZW0pOwogICAg
ICAgICBzYXZlRG9jdW1lbnRTdGF0ZSgpOwotICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRW
aWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgICAgICBzYXZl
U2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CiAK
ICAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKICAgICAgICAg
ICAgIHZpZXctPnNldFdhc1Njcm9sbGVkQnlVc2VyKGZhbHNlKTsKIAotICAgICAgICBtX2N1cnJl
bnRIaXN0b3J5SXRlbSA9IGl0ZW07CisgICAgICAgIG1fY3VycmVudEl0ZW0gPSBpdGVtOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAvLyBSZXN0b3JlIGZvcm0gc3RhdGUgKHdvcmtzIGZyb20g
Y3VycmVudEl0ZW0pCiAgICAgICAgIHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CkBAIC00MTgxLDE2
ICs0MjE5LDE2IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtLCBIaXN0b3J5SXRlbSogZnJvbUl0ZW0sIEZyCiAgICAgICAgICAgICBBU1NFUlQo
ZnJvbUNoaWxkSXRlbSB8fCBmcm9tSXRlbS0+aXNUYXJnZXRJdGVtKCkpOwogICAgICAgICAgICAg
RnJhbWUqIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPmNoaWxkKGNoaWxkRnJhbWVOYW1l
KTsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKLSAgICAgICAgICAgIGNoaWxkRnJh
bWUtPmxvYWRlcigpLT5yZWN1cnNpdmVHb1RvSXRlbShjaGlsZEl0ZW1zW2ldLmdldCgpLCBmcm9t
Q2hpbGRJdGVtLCB0eXBlKTsKKyAgICAgICAgICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5oaXN0
b3J5KCktPnJlY3Vyc2l2ZUdvVG9JdGVtKGNoaWxkSXRlbXNbaV0uZ2V0KCksIGZyb21DaGlsZEl0
ZW0sIHR5cGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbG9hZEl0ZW0oaXRl
bSwgdHlwZSk7CisgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5sb2FkSXRlbShpdGVtLCB0eXBl
KTsKICAgICB9CiB9CiAKIC8vIGhlbHBlciBtZXRob2QgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIg
dGhlIHN1YmZyYW1lcyBkZXNjcmliZWQgYnkgdGhlIGl0ZW0ncyBzdWJpdGVtcwogLy8gbWF0Y2gg
b3VyIG93biBjdXJyZW50IGZyYW1lc2V0Ci1ib29sIEZyYW1lTG9hZGVyOjpjaGlsZEZyYW1lc01h
dGNoSXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKK2Jvb2wgSGlzdG9yeUNvbnRyb2xsZXI6
OmNoaWxkRnJhbWVzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogewogICAgIGNv
bnN0IEhpc3RvcnlJdGVtVmVjdG9yJiBjaGlsZEl0ZW1zID0gaXRlbS0+Y2hpbGRyZW4oKTsKICAg
ICBpZiAoY2hpbGRJdGVtcy5zaXplKCkgIT0gbV9mcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCkp
CkBAIC00MjA4LDYxICs0MjQ2LDYzIEBAIGJvb2wgRnJhbWVMb2FkZXI6OmNoaWxkRnJhbWVzTWF0
Y2hJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogCiAvLyBUaGVyZSBhcmUgMyB0aGluZ3Mg
eW91IG1pZ2h0IHRoaW5rIG9mIGFzICJoaXN0b3J5IiwgYWxsIG9mIHdoaWNoIGFyZSBoYW5kbGVk
IGJ5IHRoZXNlIGZ1bmN0aW9ucy4KIC8vCi0vLyAgICAgMSkgQmFjay9mb3J3YXJkOiBUaGUgbV9j
dXJyZW50SGlzdG9yeUl0ZW0gaXMgcGFydCBvZiB0aGlzIG1lY2hhbmlzbS4KKy8vICAgICAxKSBC
YWNrL2ZvcndhcmQ6IFRoZSBtX2N1cnJlbnRJdGVtIGlzIHBhcnQgb2YgdGhpcyBtZWNoYW5pc20u
CiAvLyAgICAgMikgR2xvYmFsIGhpc3Rvcnk6IEhhbmRsZWQgYnkgdGhlIGNsaWVudC4KIC8vICAg
ICAzKSBWaXNpdGVkIGxpbmtzOiBIYW5kbGVkIGJ5IHRoZSBQYWdlR3JvdXAuCiAKLXZvaWQgRnJh
bWVMb2FkZXI6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKQordm9pZCBIaXN0b3J5Q29u
dHJvbGxlcjo6dXBkYXRlRm9yU3RhbmRhcmRMb2FkKCkKIHsKLSAgICBMT0coSGlzdG9yeSwgIldl
YkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBTdGFuZGFyZCBMb2FkIGluIGZyYW1l
ICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIFN0
YW5kYXJkIExvYWQgaW4gZnJhbWUgJXMiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgRnJhbWVMb2FkZXIq
IGZyYW1lTG9hZGVyID0gbV9mcmFtZS0+bG9hZGVyKCk7CiAKICAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIGJvb2wgbmVlZFByaXZhY3kgPSAhc2V0dGlu
Z3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBjb25zdCBLVVJM
JiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOworICAgIGNv
bnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJs
Rm9ySGlzdG9yeSgpOwogCi0gICAgaWYgKCFkb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGly
ZWN0KCkpIHsKKyAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5pc0NsaWVu
dFJlZGlyZWN0KCkpIHsKICAgICAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KHRydWUpOworICAgICAg
ICAgICAgdXBkYXRlQmFja0ZvcndhcmRMaXN0Q2xpcHBlZEF0VGFyZ2V0KHRydWUpOwogICAgICAg
ICAgICAgaWYgKCFuZWVkUHJpdmFjeSkgewotICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRh
dGVHbG9iYWxIaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgbV9kb2N1bWVudExvYWRlci0+c2V0
RGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KHRydWUpOwotICAgICAgICAgICAgICAgIGlmICht
X2RvY3VtZW50TG9hZGVyLT51bnJlYWNoYWJsZVVSTCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7Cisg
ICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5
KCk7CisgICAgICAgICAgICAgICAgZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnNldERp
ZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJh
bWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2JhbEhp
c3RvcnlSZWRpcmVjdExpbmtzKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5zZXRHbG9i
YWxIaXN0b3J5SXRlbShuZWVkUHJpdmFjeSA/IDAgOiBwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+
Y3VycmVudEl0ZW0oKSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRvY3VtZW50TG9hZGVy
KCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmIG1fY3VycmVudEhpc3RvcnlJdGVtKSB7
Ci0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRVUkwoZG9jdW1lbnRMb2FkZXIoKS0+
dXJsKCkpOwotICAgICAgICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVx
dWVzdChkb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkpOworICAgIH0gZWxzZSBpZiAoZnJhbWVM
b2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpICYmIG1f
Y3VycmVudEl0ZW0pIHsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VVJMKGZyYW1lTG9hZGVy
LT5kb2N1bWVudExvYWRlcigpLT51cmwoKSk7CisgICAgICAgIG1fY3VycmVudEl0ZW0tPnNldEZv
cm1JbmZvRnJvbVJlcXVlc3QoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3Qo
KSk7CiAgICAgfQogCiAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1wdHkoKSAmJiAhbmVlZFByaXZh
Y3kpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCiAgICAgICAg
ICAgICBwYWdlLT5ncm91cCgpLmFkZFZpc2l0ZWRMaW5rKGhpc3RvcnlVUkwpOwogCi0gICAgICAg
IGlmICghbV9kb2N1bWVudExvYWRlci0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkgJiYg
ZG9jdW1lbnRMb2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgIXVybCgpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVHbG9iYWxIaXN0b3J5UmVkaXJl
Y3RMaW5rcygpOworICAgICAgICBpZiAoIWZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT5k
aWRDcmVhdGVHbG9iYWxIaXN0b3J5RW50cnkoKSAmJiBmcmFtZUxvYWRlci0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkgJiYgIWZyYW1lTG9hZGVyLT51cmwoKS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBmcmFtZUxvYWRlci0+Y2xpZW50KCktPnVwZGF0ZUdsb2Jh
bEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CiAgICAgfQogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1
cGRhdGVIaXN0b3J5Rm9yQ2xpZW50UmVkaXJlY3QoKQordm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6
dXBkYXRlRm9yQ2xpZW50UmVkaXJlY3QoKQogewogI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAo
ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTog
VXBkYXRpbmcgSGlzdG9yeSBmb3IgY2xpZW50IHJlZGlyZWN0IGluIGZyYW1lICVzIiwgZG9jdW1l
bnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhp
c3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGNsaWVudCByZWRpcmVjdCBpbiBmcmFtZSAlcyIs
IG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRh
KCkpOwogI2VuZGlmCiAKICAgICAvLyBDbGVhciBvdXQgZm9ybSBkYXRhIHNvIHdlIGRvbid0IHRy
eSB0byByZXN0b3JlIGl0IGludG8gdGhlIGluY29taW5nIHBhZ2UuICBNdXN0IGhhcHBlbiBhZnRl
cgogICAgIC8vIHdlYmNvcmUgaGFzIGNsb3NlZCB0aGUgVVJMIGFuZCBzYXZlZCBhd2F5IHRoZSBm
b3JtIHN0YXRlLgotICAgIGlmIChtX2N1cnJlbnRIaXN0b3J5SXRlbSkgewotICAgICAgICBtX2N1
cnJlbnRIaXN0b3J5SXRlbS0+Y2xlYXJEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIG1fY3VycmVu
dEhpc3RvcnlJdGVtLT5jbGVhclNjcm9sbFBvaW50KCk7CisgICAgaWYgKG1fY3VycmVudEl0ZW0p
IHsKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+Y2xlYXJEb2N1bWVudFN0YXRlKCk7CisgICAgICAg
IG1fY3VycmVudEl0ZW0tPmNsZWFyU2Nyb2xsUG9pbnQoKTsKICAgICB9CiAKICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIGJvb2wgbmVlZFByaXZhY3kg
PSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBj
b25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgp
OworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOwogCiAgICAgaWYgKCFoaXN0b3J5VVJMLmlzRW1w
dHkoKSAmJiAhbmVlZFByaXZhY3kpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1l
LT5wYWdlKCkpCkBAIC00MjcwLDEwMyArNDMxMCwxMDQgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dXBk
YXRlSGlzdG9yeUZvckNsaWVudFJlZGlyZWN0KCkKICAgICB9CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXI6OnVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQordm9pZCBIaXN0b3J5
Q29udHJvbGxlcjo6dXBkYXRlRm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCkKIHsKICNpZiAhTE9H
X0RJU0FCTEVECi0gICAgaWYgKGRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgIExPRyhIaXN0b3J5
LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJhY2svZm9yd2FyZCBuYXZp
Z2F0aW9uIGluIGZyYW1lICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgIExPRyhIaXN0b3J5LCAiV2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGJh
Y2svZm9yd2FyZCBuYXZpZ2F0aW9uIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAogICAgIC8v
IE11c3QgZ3JhYiB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gYmVmb3JlIGRpc3R1cmJpbmcg
aXQKLSAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9wcmV2aW91c0hp
c3RvcnlJdGVtLmdldCgpKTsKKyAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0
ZW0obV9wcmV2aW91c0l0ZW0uZ2V0KCkpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyOjp1cGRhdGVI
aXN0b3J5Rm9yUmVsb2FkKCkKK3ZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVwZGF0ZUZvclJlbG9h
ZCgpCiB7CiAjaWYgIUxPR19ESVNBQkxFRAotICAgIGlmIChkb2N1bWVudExvYWRlcigpKQotICAg
ICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0b3J5IGZvciBy
ZWxvYWQgaW4gZnJhbWUgJXMiLCBkb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGlmIChtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAg
ICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgcmVs
b2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnRp
dGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKIAotICAgIGlmIChtX2N1cnJlbnRIaXN0b3J5
SXRlbSkgewotICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fY3VycmVudEhpc3RvcnlJdGVt
LmdldCgpKTsKKyAgICBpZiAobV9jdXJyZW50SXRlbSkgeworICAgICAgICBwYWdlQ2FjaGUoKS0+
cmVtb3ZlKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwogICAgIAotICAgICAgICBpZiAobG9hZFR5cGUo
KSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkIHx8IGxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJl
bG9hZEZyb21PcmlnaW4pCi0gICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0obV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCkpOworICAgICAgICBpZiAobV9mcmFt
ZS0+bG9hZGVyKCktPmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCBtX2ZyYW1l
LT5sb2FkZXIoKS0+bG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlUmVsb2FkRnJvbU9yaWdpbikK
KyAgICAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShtX2N1cnJl
bnRJdGVtLmdldCgpKTsKICAgICAKICAgICAgICAgLy8gU29tZXRpbWVzIGxvYWRpbmcgYSBwYWdl
IGFnYWluIGxlYWRzIHRvIGEgZGlmZmVyZW50IHJlc3VsdCBiZWNhdXNlIG9mIGNvb2tpZXMuIEJ1
Z3ppbGxhIDQwNzIKLSAgICAgICAgaWYgKGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJM
KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jdXJyZW50SGlzdG9yeUl0ZW0tPnNldFVSTChk
b2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOworICAgICAgICBpZiAobV9mcmFtZS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VVJMKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5yZXF1ZXN0VVJMKCkpOwogICAgIH0KIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6
dXBkYXRlSGlzdG9yeUZvclJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdCgpCit2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3QoKQogewogI2lmICFMT0dfRElTQUJMRUQKLSAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKSkK
LSAgICAgICAgTE9HKEhpc3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBm
b3IgcmVkaXJlY3QgbG9hZCBpbiBmcmFtZSAlcyIsIGRvY3VtZW50TG9hZGVyKCktPnRpdGxlKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpKQorICAgICAgICBMT0coSGlzdG9yeSwgIldlYkNvcmVIaXN0b3J5OiBVcGRhdGluZyBIaXN0
b3J5IGZvciByZWRpcmVjdCBsb2FkIGluIGZyYW1lICVzIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAKICAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwogICAgIGJvb2wgbmVl
ZFByaXZhY3kgPSAhc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQo
KTsKLSAgICBjb25zdCBLVVJMJiBoaXN0b3J5VVJMID0gZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9y
SGlzdG9yeSgpOworICAgIGNvbnN0IEtVUkwmIGhpc3RvcnlVUkwgPSBtX2ZyYW1lLT5sb2FkZXIo
KS0+ZG9jdW1lbnRMb2FkZXIoKS0+dXJsRm9ySGlzdG9yeSgpOwogCi0gICAgaWYgKGRvY3VtZW50
TG9hZGVyKCktPmlzQ2xpZW50UmVkaXJlY3QoKSkgewotICAgICAgICBpZiAoIW1fY3VycmVudEhp
c3RvcnlJdGVtICYmICFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgaWYgKG1fZnJh
bWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5pc0NsaWVudFJlZGlyZWN0KCkpIHsKKyAg
ICAgICAgaWYgKCFtX2N1cnJlbnRJdGVtICYmICFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7
CiAgICAgICAgICAgICBpZiAoIWhpc3RvcnlVUkwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgYWRkQmFja0ZvcndhcmRJdGVtQ2xpcHBlZEF0VGFyZ2V0KHRydWUpOworICAgICAgICAgICAg
ICAgIHVwZGF0ZUJhY2tGb3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldCh0cnVlKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW5lZWRQcml2YWN5KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50
LT51cGRhdGVHbG9iYWxIaXN0b3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnRM
b2FkZXItPnNldERpZENyZWF0ZUdsb2JhbEhpc3RvcnlFbnRyeSh0cnVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXItPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZUdsb2JhbEhpc3RvcnlS
ZWRpcmVjdExpbmtzKCk7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+dXBkYXRlR2xvYmFsSGlzdG9yeSgpOworICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+c2V0RGlkQ3JlYXRlR2xvYmFsSGlzdG9y
eUVudHJ5KHRydWUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS0+bG9hZGVyKCkt
PmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9iYWxI
aXN0b3J5UmVkaXJlY3RMaW5rcygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAg
cGFnZS0+c2V0R2xvYmFsSGlzdG9yeUl0ZW0obmVlZFByaXZhY3kgPyAwIDogcGFnZS0+YmFja0Zv
cndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRIaXN0b3J5SXRlbSkgewotICAgICAgICAgICAgbV9jdXJyZW50
SGlzdG9yeUl0ZW0tPnNldFVSTChkb2N1bWVudExvYWRlcigpLT51cmwoKSk7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRIaXN0b3J5SXRlbS0+c2V0Rm9ybUluZm9Gcm9tUmVxdWVzdChkb2N1bWVudExv
YWRlcigpLT5yZXF1ZXN0KCkpOworICAgICAgICBpZiAobV9jdXJyZW50SXRlbSkgeworICAgICAg
ICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VVJMKG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLT51cmwoKSk7CisgICAgICAgICAgICBtX2N1cnJlbnRJdGVtLT5zZXRGb3JtSW5mb0Zy
b21SZXF1ZXN0KG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRnJhbWUqIHBhcmVudEZyYW1lID0g
bV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBh
cmVudEZyYW1lLT5sb2FkZXIoKS0+bV9jdXJyZW50SGlzdG9yeUl0ZW0pCi0gICAgICAgICAgICBw
YXJlbnRGcmFtZS0+bG9hZGVyKCktPm1fY3VycmVudEhpc3RvcnlJdGVtLT5zZXRDaGlsZEl0ZW0o
Y3JlYXRlSGlzdG9yeUl0ZW0odHJ1ZSkpOworICAgICAgICBpZiAocGFyZW50RnJhbWUgJiYgcGFy
ZW50RnJhbWUtPmxvYWRlcigpLT5oaXN0b3J5KCktPm1fY3VycmVudEl0ZW0pCisgICAgICAgICAg
ICBwYXJlbnRGcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+bV9jdXJyZW50SXRlbS0+c2V0Q2hp
bGRJdGVtKGNyZWF0ZUl0ZW0odHJ1ZSkpOwogICAgIH0KIAogICAgIGlmICghaGlzdG9yeVVSTC5p
c0VtcHR5KCkgJiYgIW5lZWRQcml2YWN5KSB7CiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9m
cmFtZS0+cGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayho
aXN0b3J5VVJMKTsKIAotICAgICAgICBpZiAoIW1fZG9jdW1lbnRMb2FkZXItPmRpZENyZWF0ZUds
b2JhbEhpc3RvcnlFbnRyeSgpICYmIGRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCku
aXNFbXB0eSgpICYmICF1cmwoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NsaWVudC0+dXBk
YXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKKyAgICAgICAgaWYgKCFtX2ZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+ZGlkQ3JlYXRlR2xvYmFsSGlzdG9yeUVudHJ5KCkg
JiYgbV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCku
aXNFbXB0eSgpICYmICFtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT51cGRhdGVHbG9iYWxIaXN0b3J5UmVk
aXJlY3RMaW5rcygpOwogICAgIH0KIH0KIAotdm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9y
eUZvckNvbW1pdCgpCit2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JDb21taXQoKQog
eworICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmxvYWRlcigpOwogI2lm
ICFMT0dfRElTQUJMRUQKLSAgICBpZiAoZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgTE9HKEhp
c3RvcnksICJXZWJDb3JlSGlzdG9yeTogVXBkYXRpbmcgSGlzdG9yeSBmb3IgY29tbWl0IGluIGZy
YW1lICVzIiwgZG9jdW1lbnRMb2FkZXIoKS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAoZnJhbWVMb2FkZXItPmRvY3VtZW50TG9hZGVyKCkpCisgICAgICAgIExPRyhIaXN0b3J5LCAi
V2ViQ29yZUhpc3Rvcnk6IFVwZGF0aW5nIEhpc3RvcnkgZm9yIGNvbW1pdCBpbiBmcmFtZSAlcyIs
IGZyYW1lTG9hZGVyLT5kb2N1bWVudExvYWRlcigpLT50aXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwog
I2VuZGlmCi0gICAgRnJhbWVMb2FkVHlwZSB0eXBlID0gbG9hZFR5cGUoKTsKKyAgICBGcmFtZUxv
YWRUeXBlIHR5cGUgPSBmcmFtZUxvYWRlci0+bG9hZFR5cGUoKTsKICAgICBpZiAoaXNCYWNrRm9y
d2FyZExvYWRUeXBlKHR5cGUpIHx8Ci0gICAgICAgICgodHlwZSA9PSBGcmFtZUxvYWRUeXBlUmVs
b2FkIHx8IHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZEZyb21PcmlnaW4pICYmICFwcm92aXNp
b25hbERvY3VtZW50TG9hZGVyKCktPnVucmVhY2hhYmxlVVJMKCkuaXNFbXB0eSgpKSkgeworICAg
ICAgICAoKHR5cGUgPT0gRnJhbWVMb2FkVHlwZVJlbG9hZCB8fCB0eXBlID09IEZyYW1lTG9hZFR5
cGVSZWxvYWRGcm9tT3JpZ2luKSAmJiAhZnJhbWVMb2FkZXItPnByb3Zpc2lvbmFsRG9jdW1lbnRM
b2FkZXIoKS0+dW5yZWFjaGFibGVVUkwoKS5pc0VtcHR5KCkpKSB7CiAgICAgICAgIC8vIE9uY2Ug
Y29tbWl0dGVkLCB3ZSB3YW50IHRvIHVzZSBjdXJyZW50IGl0ZW0gZm9yIHNhdmluZyBEb2NTdGF0
ZSwgYW5kCiAgICAgICAgIC8vIHRoZSBwcm92aXNpb25hbCBpdGVtIGZvciByZXN0b3Jpbmcgc3Rh
dGUuCiAgICAgICAgIC8vIE5vdGUgcHJldmlvdXNJdGVtIG11c3QgYmUgc2V0IGJlZm9yZSB3ZSBj
bG9zZSB0aGUgVVJMLCB3aGljaCB3aWxsCiAgICAgICAgIC8vIGhhcHBlbiB3aGVuIHRoZSBkYXRh
IHNvdXJjZSBpcyBtYWRlIG5vbi1wcm92aXNpb25hbCBiZWxvdwotICAgICAgICBtX3ByZXZpb3Vz
SGlzdG9yeUl0ZW0gPSBtX2N1cnJlbnRIaXN0b3J5SXRlbTsKLSAgICAgICAgQVNTRVJUKG1fcHJv
dmlzaW9uYWxIaXN0b3J5SXRlbSk7Ci0gICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gbV9w
cm92aXNpb25hbEhpc3RvcnlJdGVtOwotICAgICAgICBtX3Byb3Zpc2lvbmFsSGlzdG9yeUl0ZW0g
PSAwOworICAgICAgICBtX3ByZXZpb3VzSXRlbSA9IG1fY3VycmVudEl0ZW07CisgICAgICAgIEFT
U0VSVChtX3Byb3Zpc2lvbmFsSXRlbSk7CisgICAgICAgIG1fY3VycmVudEl0ZW0gPSBtX3Byb3Zp
c2lvbmFsSXRlbTsKKyAgICAgICAgbV9wcm92aXNpb25hbEl0ZW0gPSAwOwogICAgIH0KIH0KIAot
dm9pZCBGcmFtZUxvYWRlcjo6dXBkYXRlSGlzdG9yeUZvckFuY2hvclNjcm9sbCgpCit2b2lkIEhp
c3RvcnlDb250cm9sbGVyOjp1cGRhdGVGb3JBbmNob3JTY3JvbGwoKQogewotICAgIGlmIChtX1VS
TC5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnJhbWUtPmxvYWRlcigpLT51cmwoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNl
dHRpbmdzKCk7CkBAIC00Mzc3LDI5ICs0NDE4LDE5IEBAIHZvaWQgRnJhbWVMb2FkZXI6OnVwZGF0
ZUhpc3RvcnlGb3JBbmNob3JTY3JvbGwoKQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgcGFnZS0+Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhtX1VSTCk7CisgICAgcGFnZS0+
Z3JvdXAoKS5hZGRWaXNpdGVkTGluayhtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkpOwogfQogCiAv
LyBXYWxrIHRoZSBmcmFtZSB0cmVlLCB0ZWxsaW5nIGFsbCBmcmFtZXMgdG8gc2F2ZSB0aGVpciBm
b3JtIHN0YXRlIGludG8gdGhlaXIgY3VycmVudAogLy8gaGlzdG9yeSBpdGVtLgotdm9pZCBGcmFt
ZUxvYWRlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQordm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6c2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKQogewogICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gbV9mcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0
KG1fZnJhbWUpKSB7Ci0gICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2F2ZURvY3VtZW50U3RhdGUo
KTsKLSAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5zYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0oZnJhbWUtPmxvYWRlcigpLT5jdXJyZW50SGlzdG9yeUl0ZW0oKSk7CisgICAgICAg
IGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+c2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0
YXRlVG9JdGVtKGZyYW1lLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpKTsKICAg
ICB9CiB9CiAKLUhpc3RvcnlJdGVtKiBGcmFtZUxvYWRlcjo6Y3VycmVudEhpc3RvcnlJdGVtKCkK
LXsKLSAgICByZXR1cm4gbV9jdXJyZW50SGlzdG9yeUl0ZW0uZ2V0KCk7Ci19Ci0KLXZvaWQgRnJh
bWVMb2FkZXI6OnNldEN1cnJlbnRIaXN0b3J5SXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBp
dGVtKQotewotICAgIG1fY3VycmVudEhpc3RvcnlJdGVtID0gaXRlbTsKLX0KLQogdm9pZCBGcmFt
ZUxvYWRlcjo6c2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgbV9jbGllbnQtPnNldE1haW5Eb2N1bWVu
dEVycm9yKGxvYWRlciwgZXJyb3IpOwpAQCAtNDUzNywxNCArNDU2OCwxOSBAQCBQYXNzUmVmUHRy
PFdpZGdldD4gRnJhbWVMb2FkZXI6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgSFRNTAogICAgIHJldHVybiB3aWRnZXQ7CiB9CiAKK3ZvaWQgSGlzdG9yeUNvbnRy
b2xsZXI6OnNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBp
ZiAobV9jdXJyZW50SXRlbSkKKyAgICAgICAgbV9jdXJyZW50SXRlbS0+c2V0VGl0bGUodGl0bGUp
OworfQorCiB2b2lkIEZyYW1lTG9hZGVyOjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciog
bG9hZGVyKQogewogICAgIG1fY2xpZW50LT5kaWRDaGFuZ2VUaXRsZShsb2FkZXIpOwogCiAgICAg
aWYgKGxvYWRlciA9PSBtX2RvY3VtZW50TG9hZGVyKSB7CiAgICAgICAgIC8vIE11c3QgdXBkYXRl
IHRoZSBlbnRyaWVzIGluIHRoZSBiYWNrLWZvcndhcmQgbGlzdCB0b28uCi0gICAgICAgIGlmICht
X2N1cnJlbnRIaXN0b3J5SXRlbSkKLSAgICAgICAgICAgIG1fY3VycmVudEhpc3RvcnlJdGVtLT5z
ZXRUaXRsZShsb2FkZXItPnRpdGxlKCkpOworICAgICAgICBoaXN0b3J5KCktPnNldEN1cnJlbnRJ
dGVtVGl0bGUobG9hZGVyLT50aXRsZSgpKTsKICAgICAgICAgLy8gVGhpcyBtdXN0IGdvIHRocm91
Z2ggdGhlIFdlYkZyYW1lIGJlY2F1c2UgaXQgaGFzIHRoZSByaWdodCBub3Rpb24gb2YgdGhlIGN1
cnJlbnQgYi9mIGl0ZW0uCiAgICAgICAgIG1fY2xpZW50LT5zZXRUaXRsZShsb2FkZXItPnRpdGxl
KCksIGxvYWRlci0+dXJsRm9ySGlzdG9yeSgpKTsKICAgICAgICAgbV9jbGllbnQtPnNldE1haW5G
cmFtZURvY3VtZW50UmVhZHkodHJ1ZSk7IC8vIHVwZGF0ZSBvYnNlcnZlcnMgd2l0aCBuZXcgRE9N
RG9jdW1lbnQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmggYi9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCmluZGV4IDg5N2ZiMDguLjQ2NjZhMGQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuaApAQCAtNzksNiArNzksNTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Ym9vbCBpc0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSk7CiAKKyAgICBjbGFzcyBI
aXN0b3J5Q29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAg
ICAgICBIaXN0b3J5Q29udHJvbGxlcihGcmFtZSopOworICAgICAgICB+SGlzdG9yeUNvbnRyb2xs
ZXIoKTsKKworICAgICAgICB2b2lkIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZVRvSXRl
bShIaXN0b3J5SXRlbSopOworICAgICAgICB2b2lkIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZp
ZXdTdGF0ZSgpOworCisgICAgICAgIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRMaXN0Rm9yRnJhZ21l
bnRTY3JvbGwoKTsKKworICAgICAgICB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7CisgICAgICAg
IHZvaWQgc2F2ZURvY3VtZW50QW5kU2Nyb2xsU3RhdGUoKTsKKyAgICAgICAgdm9pZCByZXN0b3Jl
RG9jdW1lbnRTdGF0ZSgpOworCisgICAgICAgIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2Fj
aGVkUGFnZSgpOworCisgICAgICAgIHZvaWQgZ29Ub0l0ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxv
YWRUeXBlKTsKKyAgICAgICAgYm9vbCB1cmxzTWF0Y2hJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7
CisKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKKyAgICAg
ICAgdm9pZCB1cGRhdGVGb3JSZWxvYWQoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JTdGFuZGFy
ZExvYWQoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9y
d2FyZExpc3QoKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGb3JDbGllbnRSZWRpcmVjdCgpOworICAg
ICAgICB2b2lkIHVwZGF0ZUZvckNvbW1pdCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvckFuY2hv
clNjcm9sbCgpOworICAgICAgICB2b2lkIHVwZGF0ZUZvckZyYW1lTG9hZENvbXBsZXRlZCgpOwor
CisgICAgICAgIEhpc3RvcnlJdGVtKiBjdXJyZW50SXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudEl0ZW0uZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRDdXJyZW50SXRlbShIaXN0b3J5SXRl
bSopOworICAgICAgICB2b2lkIHNldEN1cnJlbnRJdGVtVGl0bGUoY29uc3QgU3RyaW5nJik7CisK
KyAgICAgICAgSGlzdG9yeUl0ZW0qIHByb3Zpc2lvbmFsSXRlbSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvdmlzaW9uYWxJdGVtLmdldCgpOyB9CisgICAgICAgIHZvaWQgc2V0UHJvdmlzaW9uYWxJdGVt
KEhpc3RvcnlJdGVtKik7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQYXNzUmVmUHRyPEhpc3Rv
cnlJdGVtPiBjcmVhdGVJdGVtKGJvb2wgdXNlT3JpZ2luYWwpOworICAgICAgICBQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBjcmVhdGVJdGVtVHJlZShGcmFtZSogdGFyZ2V0RnJhbWUsIGJvb2wgY2xp
cEF0VGFyZ2V0KTsKKworICAgICAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJdGVt
KiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKKyAgICAgICAgYm9vbCBjaGlsZEZyYW1l
c01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OworICAgICAgICB2b2lkIHVwZGF0ZUJhY2tG
b3J3YXJkTGlzdENsaXBwZWRBdFRhcmdldChib29sIGRvQ2xpcCk7CisKKyAgICAgICAgRnJhbWUq
IG1fZnJhbWU7CisKKyAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBtX2N1cnJlbnRJdGVtOwor
ICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IG1fcHJldmlvdXNJdGVtOworICAgICAgICBSZWZQ
dHI8SGlzdG9yeUl0ZW0+IG1fcHJvdmlzaW9uYWxJdGVtOworICAgIH07CisKICAgICBjbGFzcyBG
cmFtZUxvYWRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgogICAgICAgICBG
cmFtZUxvYWRlcihGcmFtZSosIEZyYW1lTG9hZGVyQ2xpZW50Kik7CkBAIC04OCw3ICsxMzgsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQogCi0gICAgICAgIFBvbGljeUNoZWNrZXIqIHBvbGljeUNoZWNrZXIo
KSB7IHJldHVybiAmbV9wb2xpY3lDaGVja2VyOyB9CisgICAgICAgIFBvbGljeUNoZWNrZXIqIHBv
bGljeUNoZWNrZXIoKSBjb25zdCB7IHJldHVybiAmbV9wb2xpY3lDaGVja2VyOyB9CisgICAgICAg
IEhpc3RvcnlDb250cm9sbGVyKiBoaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gJm1faGlzdG9yeTsg
fQogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBjb29sLCBwZW9wbGUuIFRoZXJlIGFy
ZSB0b28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIHRoYXQgYWxsIHN0YXJ0IGxvYWRzLgogICAg
ICAgICAvLyBXZSBzaG91bGQgYWltIHRvIGNvbnNvbGlkYXRlIHRoZXNlIGludG8gYSBzbWFsbGVy
IHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0cnkgdG8gcmV1c2UgbW9yZSBvZgpAQCAtMjU1LDcgKzMw
Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRpc3BhdGNoV2luZG93
T2JqZWN0QXZhaWxhYmxlKCk7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRB
dmFpbGFibGUoKTsKLSAgICAgICAgdm9pZCByZXN0b3JlRG9jdW1lbnRTdGF0ZSgpOwogCiAgICAg
ICAgIC8vIE1peGVkIGNvbnRlbnQgcmVsYXRlZCBmdW5jdGlvbnMuCiAgICAgICAgIHN0YXRpYyBi
b29sIGlzTWl4ZWRDb250ZW50KFNlY3VyaXR5T3JpZ2luKiBjb250ZXh0LCBjb25zdCBLVVJMJik7
CkBAIC0yODYsNiArMzM2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGZp
bmlzaGVkUGFyc2luZygpOwogICAgICAgICB2b2lkIGNoZWNrQ29tcGxldGVkKCk7CiAKKyAgICAg
ICAgdm9pZCBjaGVja0RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKTsKKwogICAgICAgICBib29s
IGlzQ29tcGxldGUoKSBjb25zdDsKIAogICAgICAgICBib29sIHJlcXVlc3RPYmplY3QoUmVuZGVy
UGFydCogZnJhbWUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBBdG9taWNTdHJpbmcmIGZyYW1l
TmFtZSwKQEAgLTMwMCwxNCArMzUyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGNvbW1pdFByb3Zpc2lvbmFsTG9hZChQYXNzUmVmUHRyPENhY2hlZFBhZ2U+KTsKICAgICAg
ICAgYm9vbCBpc0xvYWRpbmdGcm9tQ2FjaGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZGlu
Z0Zyb21DYWNoZWRQYWdlOyB9CiAKLSAgICAgICAgdm9pZCBnb1RvSXRlbShIaXN0b3J5SXRlbSos
IEZyYW1lTG9hZFR5cGUpOwotICAgICAgICB2b2lkIHNhdmVEb2N1bWVudEFuZFNjcm9sbFN0YXRl
KCk7Ci0KLSAgICAgICAgSGlzdG9yeUl0ZW0qIGN1cnJlbnRIaXN0b3J5SXRlbSgpOwotICAgICAg
ICB2b2lkIHNldEN1cnJlbnRIaXN0b3J5SXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPik7Ci0K
ICAgICAgICAgYm9vbCBjb21taXR0aW5nRmlyc3RSZWFsTG9hZCgpIGNvbnN0IHsgcmV0dXJuICFt
X2NyZWF0aW5nSW5pdGlhbEVtcHR5RG9jdW1lbnQgJiYgIW1fY29tbWl0dGVkRmlyc3RSZWFsRG9j
dW1lbnRMb2FkOyB9CiAgICAgICAgIGJvb2wgY29tbWl0dGVkRmlyc3RSZWFsRG9jdW1lbnRMb2Fk
KCkgY29uc3QgeyByZXR1cm4gbV9jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVudExvYWQ7IH0KKyAg
ICAgICAgYm9vbCBjcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jcmVhdGluZ0luaXRpYWxFbXB0eURvY3VtZW50OyB9CiAKICAgICAgICAgdm9pZCBpY29uTG9h
ZERlY2lzaW9uQXZhaWxhYmxlKCk7CiAKQEAgLTMyOCw2ICszNzUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgYWxsQ2hpbGRyZW5BcmVDb21wbGV0ZSgpIGNvbnN0OyAvLyBp
bW1lZGlhdGUgY2hpbGRyZW4sIG5vdCBhbGwgZGVzY2VuZGFudHMKICAgICAgICAgdm9pZCBjbGll
bnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwg
Ym9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENh
bmNlbGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MpOworICAgICAg
ICB2b2lkIGxvYWRJdGVtKEhpc3RvcnlJdGVtKiwgRnJhbWVMb2FkVHlwZSk7CiAKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgcHVibGljIGJlY2F1c2UgdGhpcyBhc3luY2hyb25vdXMgY2FsbGJh
Y2sgZnJvbSB0aGUgRnJhbWVMb2FkZXJDbGllbnQKICAgICAgICAgLy8gdXNlcyB0aGUgcG9saWN5
IG1hY2hpbmVyeSAoYW5kIHRoZXJlZm9yZSBpcyBjYWxsZWQgdmlhIHRoZSBQb2xpY3lDaGVja2Vy
KS4gIE9uY2Ugd2UKQEAgLTMzNSwzMiArMzgzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBjb250aW51ZUxvYWRBZnRlcldpbGxTdWJtaXRGb3JtKCk7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGVIaXN0b3J5SXRlbShi
b29sIHVzZU9yaWdpbmFsKTsKLSAgICAgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRl
SGlzdG9yeUl0ZW1UcmVlKEZyYW1lKiB0YXJnZXRGcmFtZSwgYm9vbCBjbGlwQXRUYXJnZXQpOwot
CiAgICAgICAgIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZSgpOwogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgdm9pZCBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigpOwogICAgICAg
ICBib29sIGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbihpbnQgaW5kZW50TGV2ZWwpOwogI2VuZGlm
CiAKLSAgICAgICAgdm9pZCBhZGRCYWNrRm9yd2FyZEl0ZW1DbGlwcGVkQXRUYXJnZXQoYm9vbCBk
b0NsaXApOwotICAgICAgICB2b2lkIHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgp
OwotICAgICAgICB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7Ci0gICAgICAgIHZvaWQgbG9hZEl0
ZW0oSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKLSAgICAgICAgYm9vbCB1cmxzTWF0Y2hJ
dGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRJ
dGVtQ2FjaGVkUGFnZSgpOwotICAgICAgICB2b2lkIHJlY3Vyc2l2ZUdvVG9JdGVtKEhpc3RvcnlJ
dGVtKiwgSGlzdG9yeUl0ZW0qLCBGcmFtZUxvYWRUeXBlKTsKLSAgICAgICAgYm9vbCBjaGlsZEZy
YW1lc01hdGNoSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OwotCi0gICAgICAgIHZvaWQgdXBkYXRl
SGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpOwotICAgICAgICB2b2lkIHVwZGF0ZUhp
c3RvcnlGb3JSZWxvYWQoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yU3RhbmRhcmRM
b2FkKCk7Ci0gICAgICAgIHZvaWQgdXBkYXRlSGlzdG9yeUZvclJlZGlyZWN0V2l0aExvY2tlZEJh
Y2tGb3J3YXJkTGlzdCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JDbGllbnRSZWRp
cmVjdCgpOwotICAgICAgICB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JDb21taXQoKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVIaXN0b3J5Rm9yQW5jaG9yU2Nyb2xsKCk7Ci0KICAgICAgICAgdm9pZCBjaGVj
a1RpbWVyRmlyZWQoVGltZXI8RnJhbWVMb2FkZXI+Kik7CiAKICAgICAgICAgdm9pZCBzdGFydGVk
KCk7CkBAIC00MDEsNyArNDI5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGNvbnRpbnVlRnJhZ21lbnRTY3JvbGxBZnRlck5hdmlnYXRpb25Qb2xpY3koY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgYm9vbCBzaG91bGRDb250aW51ZSk7CiAKICAgICAgICAgYm9vbCBzaG91bGRT
Y3JvbGxUb0FuY2hvcihib29sIGlzRm9ybVN1Ym1pc3Npb24sIEZyYW1lTG9hZFR5cGUsIGNvbnN0
IEtVUkwmKTsKLSAgICAgICAgdm9pZCBhZGRIaXN0b3J5SXRlbUZvckZyYWdtZW50U2Nyb2xsKCk7
CiAKICAgICAgICAgdm9pZCBjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSgpOwogCkBAIC00
NjcsMTIgKzQ5NCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgYm9vbCBzaG91
bGRUcmVhdFVSTEFzU2FtZUFzQ3VycmVudChjb25zdCBLVVJMJikgY29uc3Q7CiAKLSAgICAgICAg
dm9pZCBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKTsK
LQogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgRnJhbWVMb2FkZXJDbGllbnQqIG1f
Y2xpZW50OwogCi0gICAgICAgIFBvbGljeUNoZWNrZXIgbV9wb2xpY3lDaGVja2VyOworICAgICAg
ICBtdXRhYmxlIFBvbGljeUNoZWNrZXIgbV9wb2xpY3lDaGVja2VyOworICAgICAgICBtdXRhYmxl
IEhpc3RvcnlDb250cm9sbGVyIG1faGlzdG9yeTsKIAogICAgICAgICBGcmFtZVN0YXRlIG1fc3Rh
dGU7CiAgICAgICAgIEZyYW1lTG9hZFR5cGUgbV9sb2FkVHlwZTsKQEAgLTUzNCwxMCArNTYwLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1faXNEaXNwbGF5aW5nSW5pdGlh
bEVtcHR5RG9jdW1lbnQ7CiAgICAgICAgIGJvb2wgbV9jb21taXR0ZWRGaXJzdFJlYWxEb2N1bWVu
dExvYWQ7CiAKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBtX2N1cnJlbnRIaXN0b3J5SXRl
bTsKLSAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBtX3ByZXZpb3VzSGlzdG9yeUl0ZW07Ci0g
ICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gbV9wcm92aXNpb25hbEhpc3RvcnlJdGVtOwotICAg
ICAgICAKICAgICAgICAgYm9vbCBtX2RpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb247CiAgICAgICAg
IGJvb2wgbV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2U7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDM5N2NiNzIu
LjY5ZGFjNzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIFBhZ2U6OmdvVG9JdGVtKEhp
c3RvcnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgICAgIGRhdGFiYXNlUG9s
aWN5ID0gRGF0YWJhc2VQb2xpY3lDb250aW51ZTsKICNlbmRpZgogICAgIG1fbWFpbkZyYW1lLT5s
b2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoZGF0YWJhc2VQb2xpY3kpOwotICAgIG1fbWFpbkZyYW1l
LT5sb2FkZXIoKS0+Z29Ub0l0ZW0oaXRlbSwgdHlwZSk7CisgICAgbV9tYWluRnJhbWUtPmxvYWRl
cigpLT5oaXN0b3J5KCktPmdvVG9JdGVtKGl0ZW0sIHR5cGUpOwogfQogCiBpbnQgUGFnZTo6Z2V0
SGlzdG9yeUxlbmd0aCgpCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCmluZGV4IDViNGU2ZjguLmVjNzdkNzYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMDktMTAtMDkgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGYWN0b3IgSGlzdG9yeUNv
bnRyb2xsZXIgb3V0IG9mIEZyYW1lTG9hZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zMDI0NgorCisgICAgICAgIFVwZGF0ZSBBUEkgY2FsbC4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAgICAg
ICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUpOgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfbG9hZEJhY2tGb3J3YXJkTGlz
dEZyb21PdGhlclZpZXc6XSk6CisKIDIwMDktMTAtMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0gYi9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IGZjZGQ1
NGQuLmJjNmM4ZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5tbQpAQCAtOTg4LDcgKzk4OCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OnNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAKIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUoKQogewotICAgIEhpc3RvcnlJdGVt
KiBjdXJyZW50SXRlbSA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigpLT5jdXJyZW50
SGlzdG9yeUl0ZW0oKTsKKyAgICBIaXN0b3J5SXRlbSogY3VycmVudEl0ZW0gPSBjb3JlKG1fd2Vi
RnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5jdXJyZW50SXRlbSgpOwogICAgIEFT
U0VSVChjdXJyZW50SXRlbSk7CiAKICAgICAvLyBGSVhNRTogQXMgdGhlIEFTU0VSVCBhdHRlc3Rz
LCBpdCBzZWVtcyB3ZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBjdXJyZW50SXRlbSBoZXJlLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQppbmRleCAzNjk5M2VlLi43ZDNlYjg0IDEwMDY0NAotLS0gYS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQpAQCAtMTE4Nyw3ICsxMTg3LDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25F
bmFibGVkKCkKICAgICAgICAgICAgIC8vIElmIHRoaXMgaXRlbSBpcyBzaG93aW5nICwgc2F2ZSBh
d2F5IGl0cyBjdXJyZW50IHNjcm9sbCBhbmQgZm9ybSBzdGF0ZSwKICAgICAgICAgICAgIC8vIHNp
bmNlIHRoYXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIGxvYWRpbmcgYW5kIGl0IGlzIG5vcm1h
bGx5IG5vdCBzYXZlZAogICAgICAgICAgICAgLy8gdW50aWwgd2UgbGVhdmUgdGhhdCBwYWdlLgot
ICAgICAgICAgICAgb3RoZXJWaWV3LT5fcHJpdmF0ZS0+cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICAgICAgb3RoZXJWaWV3
LT5fcHJpdmF0ZS0+cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPnNhdmVE
b2N1bWVudEFuZFNjcm9sbFN0YXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBuZXdJdGVtID0gb3RoZXJCYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGkpLT5j
b3B5KCk7CiAgICAgICAgIGlmIChpID09IDApIApkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBhZDBkNTIzLi4xNTllMzE3IDEwMDY0
NAotLS0gYS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9XZWJLaXQvd2luL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDA5LTEwLTA5ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmFj
dG9yIEhpc3RvcnlDb250cm9sbGVyIG91dCBvZiBGcmFtZUxvYWRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAyNDYKKworICAgICAgICBVcGRhdGUg
QVBJIGNhbGwuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omxv
YWRCYWNrRm9yd2FyZExpc3RGcm9tT3RoZXJWaWV3KToKKwogMjAwOS0xMC0wOCAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1dlYktpdC93aW4vV2ViVmll
dy5jcHAKaW5kZXggM2UxM2QwYS4uMDk2MDFiMSAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAorKysgYi9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBAIC00ODE1LDcgKzQ4MTUsNyBA
QCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OmxvYWRCYWNrRm9yd2FyZExpc3RG
cm9tT3RoZXJWaWV3KAogICAgICAgICAgICAgLy8gSWYgdGhpcyBpdGVtIGlzIHNob3dpbmcgLCBz
YXZlIGF3YXkgaXRzIGN1cnJlbnQgc2Nyb2xsIGFuZCBmb3JtIHN0YXRlLAogICAgICAgICAgICAg
Ly8gc2luY2UgdGhhdCBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgbG9hZGluZyBhbmQgaXQgaXMg
bm9ybWFsbHkgbm90IHNhdmVkCiAgICAgICAgICAgICAvLyB1bnRpbCB3ZSBsZWF2ZSB0aGF0IHBh
Z2UuCi0gICAgICAgICAgICBvdGhlcldlYlZpZXctPm1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRl
cigpLT5zYXZlRG9jdW1lbnRBbmRTY3JvbGxTdGF0ZSgpOworICAgICAgICAgICAgb3RoZXJXZWJW
aWV3LT5tX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgpLT5zYXZlRG9jdW1l
bnRBbmRTY3JvbGxTdGF0ZSgpOwogICAgICAgICB9CiAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gbmV3SXRlbSA9IG90aGVyQmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpKS0+Y29weSgp
OwogICAgICAgICBpZiAoIWkp
</data>

          </attachment>
      

    </bug>

</bugzilla>