<?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>77383</bug_id>
          
          <creation_ts>2012-01-30 16:28:14 -0800</creation_ts>
          <short_desc>Add a different didFirstVisuallNonEmptyLayout heuristic to experiment with</short_desc>
          <delta_ts>2012-07-19 16:51:53 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>abarth</cc>
    
    <cc>bdakin</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>545573</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-30 16:28:14 -0800</bug_when>
    <thetext>This bug tracks adding WebKit2 api to count relevant RenderObjects. Patch forthcoming.

&lt;rdar://problem/10709560&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545601</commentid>
    <comment_count>1</comment_count>
      <attachid>124631</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-30 16:47:04 -0800</bug_when>
    <thetext>Created attachment 124631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546272</commentid>
    <comment_count>2</comment_count>
      <attachid>124779</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-31 11:15:04 -0800</bug_when>
    <thetext>Created attachment 124779
Patch again

Don&apos;t know why the bots didn&apos;t like that last patch. Here&apos;s a new one on an updated tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546274</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 11:17:11 -0800</bug_when>
    <thetext>Attachment 124779 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   516488a..35bf539  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 106369 = 516488acc916a40a28a51c73fcf5ad5640b39f3d
r106370 = a323c82f735dd9f8795f6bcd8849a4085284c855
r106371 = f2b568786583ff10720556051ed600931eb5c982
r106372 = 35bf53917ffea9b99274893b132819d2a8add71f
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546295</commentid>
    <comment_count>4</comment_count>
      <attachid>124785</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-31 11:36:56 -0800</bug_when>
    <thetext>Created attachment 124785
Another try for the bots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546300</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 11:39:17 -0800</bug_when>
    <thetext>Attachment 124785 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebCore/WebCore.exp.in
Auto-merging Source/WebKit/mac/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit/mac/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546708</commentid>
    <comment_count>6</comment_count>
      <attachid>124865</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-31 18:19:18 -0800</bug_when>
    <thetext>Created attachment 124865
New patch that implements didNewFirstVisuallyNonEmptyLayout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546709</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 18:20:44 -0800</bug_when>
    <thetext>Attachment 124865 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/page/Page.h:357:  The parameter name &quot;threshold&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546712</commentid>
    <comment_count>8</comment_count>
      <attachid>124865</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-31 18:29:13 -0800</bug_when>
    <thetext>Comment on attachment 124865
New patch that implements didNewFirstVisuallyNonEmptyLayout

Attachment 124865 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11387265</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546743</commentid>
    <comment_count>9</comment_count>
      <attachid>124865</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-01-31 19:33:02 -0800</bug_when>
    <thetext>Comment on attachment 124865
New patch that implements didNewFirstVisuallyNonEmptyLayout

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

This obviously needs to have tests.

&gt; Source/WebCore/ChangeLog:11
&gt; +        This patch adds a new heuristic called didNewFirstVisuallNonEmptyLayout and 

Typo: Visuall -&gt; Visually

&gt; Source/WebCore/ChangeLog:27
&gt; +        Start counting relevant painted RenderObjects on the page once the first 
&gt; +        layout is complete.

Why do we only start counting once the first layout is complete?

&gt; Source/WebCore/page/Page.cpp:1102
&gt; +    if (m_relevantPaintedRenderObjects.size() == (int)gPaintedObjectCounterThreshold) {

This should use a static_cast.

&gt; Source/WebCore/page/Page.h:479
&gt; +        HashSet&lt;RenderObject*&gt; m_relevantPaintedRenderObjects;
&gt; +        bool m_isCountingRepaintedObjects;

Since the other layout heuristic stuff is on FrameView, FrameView seems like a better place for this than Page.

&gt; Source/WebCore/rendering/InlineBox.cpp:224
&gt; +    if (RenderView* view = renderer()-&gt;view()) {
&gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; +                if (Page* page = frame-&gt;page())
&gt; +                    page-&gt;addRelevantRepaintedObject(renderer());
&gt; +            }
&gt; +        }
&gt; +    }

This should have a comment explaining what it is doing.  I though you only wanted to do this when until the threshold is hit, but this looks like it is always happening. Even if you are early returning in the Page call, this set of operations seems unnecessary to do a lot of the time.  Since this logic is repeated so much, it should probably be refactored to be in one place.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:507
&gt; +    if (RenderView* view = renderer()-&gt;view()) {
&gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; +                if (Page* page = frame-&gt;page())
&gt; +                    page-&gt;addRelevantRepaintedObject(renderer());
&gt; +            }
&gt; +        }
&gt; +    }

Same comment as above.

&gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:178
&gt; +    if (RenderView* view = this-&gt;view()) {
&gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; +            if (Frame* frame = this-&gt;frame()) {
&gt; +                if (Page* page = frame-&gt;page())
&gt; +                    page-&gt;addRelevantRepaintedObject(this);
&gt; +            }
&gt; +        }
&gt; +    }

Same comment...

&gt; Source/WebKit2/UIProcess/API/C/WKPage.h:64
&gt;  typedef void (*WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback)(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo);
&gt; +typedef void (*WKPageDidNewFirstVisuallyNonEmptyLayoutCallback)(WKPageRef page, WKTypeRef userData, const void *clientInfo);

It seems oddly inconsistent not have this take a frame.

&gt; Source/WebKit2/UIProcess/API/C/WKPage.h:89
&gt; +    WKPageDidNewFirstVisuallyNonEmptyLayoutCallback                     didNewFirstVisuallyNonEmptyLayout;

This can&apos;t go in the middle, as that will break nightlies.  You need to put it at the end and make sure the version number is bumped from the last shipping release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546782</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-01-31 21:30:10 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 124865 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124865&amp;action=review
&gt; 
&gt; This obviously needs to have tests.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        This patch adds a new heuristic called didNewFirstVisuallNonEmptyLayout and 
&gt; 
&gt; Typo: Visuall -&gt; Visually
&gt; 

Will fix.

&gt; &gt; Source/WebCore/ChangeLog:27
&gt; &gt; +        Start counting relevant painted RenderObjects on the page once the first 
&gt; &gt; +        layout is complete.
&gt; 
&gt; Why do we only start counting once the first layout is complete?
&gt; 

This can obviously be changed to be somewhere else. I was assuming that nothing meaningful would be painted until after the first layout, but if you disagree, then I am more than happy to find a new place.

&gt; &gt; Source/WebCore/page/Page.cpp:1102
&gt; &gt; +    if (m_relevantPaintedRenderObjects.size() == (int)gPaintedObjectCounterThreshold) {
&gt; 
&gt; This should use a static_cast.
&gt; 

Will change.

&gt; &gt; Source/WebCore/page/Page.h:479
&gt; &gt; +        HashSet&lt;RenderObject*&gt; m_relevantPaintedRenderObjects;
&gt; &gt; +        bool m_isCountingRepaintedObjects;
&gt; 
&gt; Since the other layout heuristic stuff is on FrameView, FrameView seems like a better place for this than Page.
&gt; 

I disagree. I don&apos;t think this heuristic makes sense per-frame. I think it makes sense only for the page as a whole, and since we don&apos;t have a class that represents the main frame or main FrameView, I think Page makes the most sense.

&gt; &gt; Source/WebCore/rendering/InlineBox.cpp:224
&gt; &gt; +    if (RenderView* view = renderer()-&gt;view()) {
&gt; &gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; &gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; &gt; +                if (Page* page = frame-&gt;page())
&gt; &gt; +                    page-&gt;addRelevantRepaintedObject(renderer());
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; This should have a comment explaining what it is doing.  I though you only wanted to do this when until the threshold is hit, but this looks like it is always happening. Even if you are early returning in the Page call, this set of operations seems unnecessary to do a lot of the time.  Since this logic is repeated so much, it should probably be refactored to be in one place.
&gt; 

I considered adding this logic to the addRelevantRepaintedObject(), and I probably should have. I will change that.

&gt; &gt; Source/WebCore/rendering/InlineTextBox.cpp:507
&gt; &gt; +    if (RenderView* view = renderer()-&gt;view()) {
&gt; &gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; &gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; &gt; +                if (Page* page = frame-&gt;page())
&gt; &gt; +                    page-&gt;addRelevantRepaintedObject(renderer());
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Same comment as above.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderEmbeddedObject.cpp:178
&gt; &gt; +    if (RenderView* view = this-&gt;view()) {
&gt; &gt; +        if (paintInfo.rect.intersects(view-&gt;viewRect())) {
&gt; &gt; +            if (Frame* frame = this-&gt;frame()) {
&gt; &gt; +                if (Page* page = frame-&gt;page())
&gt; &gt; +                    page-&gt;addRelevantRepaintedObject(this);
&gt; &gt; +            }
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Same comment...
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/WKPage.h:64
&gt; &gt;  typedef void (*WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback)(WKPageRef page, WKFrameRef frame, WKTypeRef userData, const void *clientInfo);
&gt; &gt; +typedef void (*WKPageDidNewFirstVisuallyNonEmptyLayoutCallback)(WKPageRef page, WKTypeRef userData, const void *clientInfo);
&gt; 
&gt; It seems oddly inconsistent not have this take a frame.
&gt; 

There are existing members of the client that do not take frames, and as I explained above, I really do not think that this heuristic makes sense per-frame. It&apos;s a Page-level concept.

&gt; &gt; Source/WebKit2/UIProcess/API/C/WKPage.h:89
&gt; &gt; +    WKPageDidNewFirstVisuallyNonEmptyLayoutCallback                     didNewFirstVisuallyNonEmptyLayout;
&gt; 
&gt; This can&apos;t go in the middle, as that will break nightlies.  You need to put it at the end and make sure the version number is bumped from the last shipping release.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547219</commentid>
    <comment_count>11</comment_count>
      <attachid>124973</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-02-01 11:11:39 -0800</bug_when>
    <thetext>Created attachment 124973
New patch that addresses most of Sam&apos;s comments

This patch addresses most of Sam&apos;s comments. I will work on tests this afternoon, and I kept the stuff on Page rather than moving it to FrameView since I think it&apos;s a Page-level concept.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547221</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 11:13:43 -0800</bug_when>
    <thetext>Attachment 124973 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/page/Page.h:357:  The parameter name &quot;threshold&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Tools/WebKitTestRunner/TestController.cpp:392:  One space before end of line comments  [whitespace/comments] [5]
Tools/WebKitTestRunner/TestController.cpp:393:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 3 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547237</commentid>
    <comment_count>13</comment_count>
      <attachid>124973</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-02-01 11:32:05 -0800</bug_when>
    <thetext>Comment on attachment 124973
New patch that addresses most of Sam&apos;s comments

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

This still needs tests, and I would like a follow up that rationalizes that we don&apos;t want to track layouts (first, firstVisuallyNonEmpty, firstNewFirstVisuallyNonEmpty) at the frame level anymore, and therefore should not have a frame in their API.

&gt; Source/WebCore/page/Page.h:358
&gt; +        void setPaintedObjectsCounterThreshold(uint64_t threshold);
&gt; +        void startCountingRepaintedObjects();

Should these mention the word &quot;relevant&quot;?

&gt; Source/WebCore/page/Page.h:479
&gt; +        bool m_isCountingRepaintedObjects;

Should this mention the word &quot;relevant&quot;?

&gt; Source/WebKit2/UIProcess/API/C/WKPage.h:111
&gt; +    WKPageDidNewFirstVisuallyNonEmptyLayoutCallback                     didNewFirstVisuallyNonEmptyLayout;

Please put a comment here about merging this with FirstVisuallyNonEmptyLayout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547344</commentid>
    <comment_count>14</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-02-01 13:54:09 -0800</bug_when>
    <thetext>I addressed Sam&apos;s remaining comments and checked in the patch: http://trac.webkit.org/changeset/106492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674074</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-07-19 16:51:53 -0700</bug_when>
    <thetext>This patch landed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124631</attachid>
            <date>2012-01-30 16:47:04 -0800</date>
            <delta_ts>2012-01-31 11:15:04 -0800</delta_ts>
            <desc>Patch </desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>28533</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjI5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIFdlYktpdDIgQVBJIHRvIGNvdW50
IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IENocm9tZUNsaWVudCBmdW5jdGlvbiBpcyBjYWxs
ZWQgd2hlbiB0aGUgcGFpbnRlZCBvYmplY3RzIGNvdW50ZXIgaGl0cyB0aGUgCisgICAgICAgIGRl
c2lnbmF0ZWQgdGhyZXNob2xkLiAKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAg
ICAgICAoQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFp
bnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xkKToKKworICAgICAgICBJZiBhIHRocmVz
aG9sZCBpcyBzZXQsIFBhZ2Uga2VlcHMgYSBIYXNoU2V0IG9mIHJlbGV2YW50IFJlbmRlck9iamVj
dHMgdW50aWwgCisgICAgICAgIHRoZSB0aHJlc2hvbGQgaXMgbWV0LiBPbmNlIGl0IGlzIG1ldCwg
UGFnZSBjYWxscyB0aGUgbmV3IENocm9tZUNsaWVudCAKKyAgICAgICAgZnVuY3Rpb25zLgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVz
aG9sZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9iamVj
dCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgVGhlc2UgUmVuZGVyT2JqZWN0
cyBhcmUgdGhlIG9uZXMgdGhhdCB0aGlzIGFwaSBjdXJyZW50bHkgY29uc2lkZXIgdG8gYmUgCisg
ICAgICAgIHJlbGV2YW50LiBJZiB0aGVpciByZXBhaW50IHJlY3RzIGludGVyc2VjdCB3aXRoIHRo
ZSB2aWV3UmVjdCwgdGhlbiB0aGV5IGFyZSAKKyAgICAgICAgYWRkZWQgdG8gdGhlIHJlbGV2YW50
IG9iamVjdHMgc2V0IG9uIHRoZSBQYWdlLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWlu
dFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxh
Y2VkOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6cGFpbnRSZXBsYWNlZCk6CisKIDIwMTItMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggaW4gcHJldmlvdXNMaW5lUG9zaXRpb24gd2hl
biBtb3ZpbmcgaW50byBhIHJvb3QgaW5saW5lIGJveCB3aXRob3V0IGxlYXZlcwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxMDYyNzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNiArMzI1LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnVuTW9k
YWxEaWFsb2dEdXJpbmdQYWdlRGlzbWlzc2FsKGNvbnN0IERpYWxvZ1R5cGUmLCBjb25zdCBTdHJp
bmcmIGRpYWxvZ01lc3NhZ2UsIEZyYW1lTG9hZGVyOjpQYWdlRGlzbWlzc2FsVHlwZSkgY29uc3Qg
eyBVTlVTRURfUEFSQU0oZGlhbG9nTWVzc2FnZSk7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpID0gMDsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNo
b2xkKCkgeyB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbWFnZUNocm9t
ZUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cAkocmV2aXNpb24gMTA2MjcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBh
Z2VDbGllbnRzKQogICAgICwgbV92aXNpYmlsaXR5U3RhdGUoUGFnZVZpc2liaWxpdHlTdGF0ZVZp
c2libGUpCiAjZW5kaWYKICAgICAsIG1fZGlzcGxheUlEKDApCisgICAgLCBtX3BhaW50ZWRPYmpl
Y3RzQ291bnRlclRocmVzaG9sZCgwKQogewogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAg
YWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkBAIC0xMDgwLDYgKzEwODEsMjcgQEAgUGFn
ZVZpc2liaWxpdHlTdGF0ZSBQYWdlOjp2aXNpYmlsaXR5U3RhdAogfQogI2VuZGlmCiAKK3ZvaWQg
UGFnZTo6c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKHVpbnQ2NF90IHRo
cmVzaG9sZCkKK3sKKyAgICBtX3BhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCA9IHRocmVz
aG9sZDsKKyAgICBtX3JlbGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHMuY2xlYXIoKTsKK30KKwor
dm9pZCBQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqIG9iamVj
dCkKK3sKKyAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGlmIHRoZXJlIGlzIG5v
IGNvdW50ZXIgdGhyZXNob2xkLgorICAgIGlmICghbV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVsZXZhbnRQYWludGVkUmVuZGVyT2Jq
ZWN0cy5hZGQob2JqZWN0KTsKKworICAgIGlmIChtX3JlbGV2YW50UGFpbnRlZFJlbmRlck9iamVj
dHMuc2l6ZSgpID09IChpbnQpbV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQpIHsKKyAg
ICAgICAgbV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQgPSAwOworICAgICAgICBtX3Jl
bGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHMuY2xlYXIoKTsKKyAgICAgICAgY2hyb21lKCktPmNs
aWVudCgpLT5wYWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJlc2hvbGQoKTsKKyAgICB9Cit9
CisKIFBhZ2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xpZW50cygpCiAgICAgOiBjaHJvbWVDbGllbnQo
MCkKICAgICAsIGNvbnRleHRNZW51Q2xpZW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNp
b24gMTA2MjcwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBvaW50ZXJM
b2NrQ29udHJvbGxlcjsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgUmFu
Z2U7CisgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIFJlbmRlclRoZW1lOwogICAg
IGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAgICAgY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CkBAIC0z
NTIsNiArMzUzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICAgICAgICAgUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0K
KworICAgICAgICB2b2lkIHN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZCh1
aW50NjRfdCB0aHJlc2hvbGQpOworICAgICAgICB2b2lkIGFkZFJlbGV2YW50UmVwYWludGVkT2Jq
ZWN0KFJlbmRlck9iamVjdCopOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lk
IGluaXRHcm91cCgpOwpAQCAtNDY5LDYgKzQ3Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUGFnZVZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsKICNlbmRpZgogICAg
ICAgICBQbGF0Zm9ybURpc3BsYXlJRCBtX2Rpc3BsYXlJRDsKKworICAgICAgICB1aW50NjRfdCBt
X3BhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZDsKKyAgICAgICAgSGFzaFNldDxSZW5kZXJP
YmplY3QqPiBtX3JlbGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHM7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5j
cHAJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMSArMjAsMTQgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJbmxpbmVCb3guaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKKyNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXJl
bmEuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
ICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yMTEsNiAr
MjE0LDE1IEBAIHZvaWQgSW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW4KICAgICBp
ZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgKHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJW
aWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmlldygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8u
cmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJh
bWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQ
YWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRk
UmVsZXZhbnRSZXBhaW50ZWRPYmplY3QocmVuZGVyZXIoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gcGFpbnRPZmZzZXQ7
CiAgICAgaWYgKHBhcmVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSAvLyBGYXN0ZXIgdGhhbiBjYWxsaW5nIGNvbnRhaW5pbmdCbG9jaygpLgog
ICAgICAgICBjaGlsZFBvaW50ID0gcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZsaXBG
b3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLCBjaGlsZFBvaW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJl
dmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1
YnlSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJSdWJ5VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CkBAIC00OTYsNiArNDk3LDE1IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWkKICAgICAgICAgLy8gV2hlbiBvbmx5IHBhaW50aW5nIHRoZSBzZWxlY3Rpb24sIGRvbid0
IGJvdGhlciB0byBwYWludCBpZiB0aGVyZSBpcyBub25lLgogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKSkgeworICAgICAgICBp
ZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJlbmRlcmVyKCktPmZyYW1lKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAg
ICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHJlbmRlcmVyKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9U
cnVuY2F0aW9uKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKS0+
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICE9IGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkgewogICAgICAgICAgICAgLy8gTWFrZSB0aGUgdmlzaWJsZSBmcmFnbWVudCBvZiB0ZXh0
IGh1ZyB0aGUgZWRnZSBjbG9zZXN0IHRvIHRoZSByZXN0IG9mIHRoZSBydW4gYnkgbW92aW5nIHRo
ZSBvcmlnaW4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVt
YmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTA2MjcwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYg
KzE2NywxNSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAg
ZmxvYXQgdGV4dFdpZHRoOwogICAgIGlmICghZ2V0UmVwbGFjZW1lbnRUZXh0R2VvbWV0cnkocGFp
bnRPZmZzZXQsIGNvbnRlbnRSZWN0LCBwYXRoLCByZXBsYWNlbWVudFRleHRSZWN0LCBmb250LCBy
dW4sIHRleHRXaWR0aCkpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChSZW5kZXJWaWV3KiB2
aWV3ID0gdGhpcy0+dmlldygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNl
Y3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUt
PnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRP
YmplY3QodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAgICBjb250
ZXh0LT5jbGlwKGNvbnRlbnRSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTAgKzI4LDEyIEBACiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtNTYsNiAr
NTgsMTUgQEAgYm9vbCBSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xheWVyKCkgYwogCiB2b2lk
IFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKKyAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IHRoaXMtPnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0
cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2Jq
ZWN0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgTGF5b3V0
UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICByZWN0Lm1vdmVCeShwYWludE9mZnNl
dCk7CiAgICAgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBzdHlsZSgpLT5pbWFnZVJlbmRlcmlu
ZygpID09IEltYWdlUmVuZGVyaW5nT3B0aW1pemVDb250cmFzdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTA2MjcwKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4
LDYgKzMyOCwxNSBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAg
ICAgICAgIGlmICghaW1nIHx8IGltZy0+aXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkgeworICAgICAgICBpZiAo
cGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2Ut
PmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAoc3R5bGUoKS0+aGln
aGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0b1BvaW50KHBhaW50T2Zm
c2V0IC0gbG9jYXRpb24oKSksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCShyZXZpc2lvbiAxMDYyNzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTgsNiArOTgsMTYgQEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50UmVwbGFjZWQo
UGFpbnRJbgogICAgIC8vIERlbGVnYXRlIHBhaW50aW5nIG9mIGNvbnRlbnQgaW4gcmVnaW9uIHRv
IFJlbmRlckZsb3dUaHJlYWQuCiAgICAgaWYgKCFtX2Zsb3dUaHJlYWQgfHwgIWlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3
KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1Jl
Y3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIG1fZmxvd1RocmVhZC0+cGFpbnRJ
bnRvUmVnaW9uKHBhaW50SW5mbywgdGhpcywgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsg
Ym9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkpKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAxMDYyNzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
MywxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxhY2VkLmgi
CiAKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkxheW91dFJlcGFpbnRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTEzNSw2ICsxMzcsMTUgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQo
UGFpbnRJbmZvJiBwYQogICAgICAgICBkcmF3U2VsZWN0aW9uVGludCA9IGZhbHNlOwogICAgIH0K
IAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CisgICAgICAgIGlm
IChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAg
IGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFn
ZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKICAgICBib29sIGNvbXBsZXRlbHlDbGlwcGVkT3V0ID0gZmFsc2U7CiAg
ICAgaWYgKHN0eWxlKCktPmhhc0JvcmRlclJhZGl1cygpKSB7CiAgICAgICAgIExheW91dFJlY3Qg
Ym9yZGVyUmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludE9mZnNldCwgc2l6ZSgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gMTA2
MjcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEzIEBACiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogCkBAIC0yMDcsNiArMjA5LDE1IEBAIHZvaWQgUmVuZGVyVmlkZW86
OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgcmV0dXJuOwogICAgIHJlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygp
KSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0
KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoZGlzcGxheWluZ1Bvc3RlcikK
ICAgICAgICAgcGFpbnRJbnRvUmVjdChwYWludEluZm8uY29udGV4dCwgcmVjdCk7CiAgICAgZWxz
ZSBpZiAoZG9jdW1lbnQoKS0+dmlldygpICYmIGRvY3VtZW50KCktPnZpZXcoKS0+cGFpbnRCZWhh
dmlvcigpICYgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGluZ0xheWVycykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNp
b24gMTA2MjcwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSwxNSBAQCB2b2lkIFJlbmRlclNWR1Jv
b3Q6OnBhaW50UmVwbGFjZWQoUGFpbnRJCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCisg
ICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBh
aW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5h
ZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKwogICAgIC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBQYWludEluZm8gYmVjYXVzZSBh
cHBseVRyYW5zZm9ybSB3aWxsIG1vZGlmeSB0aGUgZGFtYWdlIHJlY3QuCiAgICAgUGFpbnRJbmZv
IGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CiAgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+
c2F2ZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2MzAwKQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTItMDEtMzAg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM4MworICAgICAgICBBZGQgV2ViS2l0MiBBUEkg
dG8gY291bnQgcmVsZXZhbnQgUmVuZGVyT2JqZWN0cworICAgICAgICAtYW5kIGNvcnJlc3BvbmRp
bmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDcwOTU2MD4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG5ldyBXZWJMb2FkZXIgY2xpZW50
IGZ1bmN0aW9ucyBpcyBjYWxsZWQgd2hlbiB0aGUgcGFpbnRlZCBvYmplY3RzIAorICAgICAgICBj
b3VudGVyIGhhcyBoaXQgdGhlIGRlc2lnbmF0ZWQgdGhyZXNob2xkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTG9hZGVyQ2xpZW50OjpkaWRIaXRQYWludGVkT2Jq
ZWN0c0NvdW50ZXJUaHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJMb2FkZXJDbGllbnQpOgorCisg
ICAgICAgIFRoZSBuZWNlc3NhcnkgbWFjaGluZXJ5IHRvIHBhc3MgdGhlIHBhaW50ZWRPYmplY3Rz
Q291bnRlckRpZEhpdFRocmVzaG9sZCAKKyAgICAgICAgbWVzc2FnZSBmcm9tIFdlYkNvcmUgdGhy
b3VnaCB0aGUgY2hyb21lIGNsaWVudCBhbGwgdGhlIHdheSB0byB0aGUgd2ViIGxvYWRlciAKKyAg
ICAgICAgY2xpZW50LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRo
cmVzaG9sZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVu
dDo6cGFpbnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xkKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudCk6CisKKyAgICAgICAgVGhpcyBuZXcgYnVuZGxl
IGFwaSBhbGxvd3MgY2xpZW50cyB0byBzcGVjaWZ5IGEgdGhyZXNob2xkIGZvciB0aGUgcGFpbnRl
ZCAKKyAgICAgICAgb2JqZWN0cyBjb3VudGVyLiBTcGVjaWZ5aW5nIGEgdGhyZXNob2xkIHdpbGwg
Y2F1c2UgdGhlIGNvdW50ZXIgdG8gc3RhcnQgCisgICAgICAgIGNvdW50aW5nLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcDoKKyAgICAg
ICAgKFdLQnVuZGxlUGFnZVN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VQ
cml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzdGFydFBhaW50ZWRPYmplY3RzQ291bnRlcldpdGhUaHJl
c2hvbGQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oOgorICAgICAgICAoV2ViUGFnZSk6CisKIDIwMTItMDEtMzAgIEpvY2VseW4gVHVy
Y290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIERpc2Nv
bm5lY3QgdGhlIExheWVyVHJlZUhvc3QgZnJvbSBsYXllcnMgd2hlbiB0aGV5IGdldCByZW1vdmVk
IGZyb20gdGhlaXIgcGFyZW50LgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxv
YWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1
LDE0IEBAIHZvaWQgV2ViTG9hZGVyQ2xpZW50OjpkaWREZXRlY3RYU1NGb3JGcmEKICAgICBtX2Ns
aWVudC5kaWREZXRlY3RYU1NGb3JGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQ
SSh1c2VyRGF0YSksIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYkxvYWRlckNs
aWVudDo6ZGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKFdlYlBhZ2VQcm94eSog
cGFnZSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRo
cmVzaG9sZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkSGl0UGFpbnRlZE9i
amVjdHNDb3VudGVyVGhyZXNob2xkKHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsK
K30KKwogYm9vbCBXZWJMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VJbkZyYW1lKFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUs
IFdlYlByb3RlY3Rpb25TcGFjZSogcHJvdGVjdGlvblNwYWNlKQogewogICAgIGlmICghbV9jbGll
bnQuY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUluRnJhbWUpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxMDYy
NzApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGlzcGxheUlu
c2VjdXJlQ29udGVudEZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElP
YmplY3QqKTsKICAgICB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKFdlYlBhZ2VQ
cm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKICAgICB2b2lkIGRpZERldGVjdFhT
U0ZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKKwor
ICAgIHZvaWQgZGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKFdlYlBhZ2VQcm94
eSopOwogICAgIAogICAgIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFj
ZUluRnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYlByb3RlY3Rpb25TcGFj
ZSopOwogICAgIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShX
ZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eSopOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJl
dmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjY3LDYgKzE2NjcsMTEgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZEZpbmlzaFByb2dyZXNzKCkKICAgICBtX2xvYWRlckNsaWVudC5kaWRGaW5pc2hQcm9n
cmVzcyh0aGlzKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnBhaW50ZWRPYmplY3RzQ291bnRl
ckRpZEhpdFRocmVzaG9sZCgpCit7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkSGl0UGFpbnRlZE9i
amVjdHNDb3VudGVyVGhyZXNob2xkKHRoaXMpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiB1bnJlYWNoYWJsZVVSTCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiBhcmd1bWVudHMpCiB7CiAgICAgY2xlYXJQZW5kaW5nQVBJUmVxdWVzdFVSTCgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTA2
MjcwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NjMsNiArNjYzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFN0YXJ0UHJv
Z3Jlc3MoKTsKICAgICB2b2lkIGRpZENoYW5nZVByb2dyZXNzKGRvdWJsZSk7CiAgICAgdm9pZCBk
aWRGaW5pc2hQcm9ncmVzcygpOworCisgICAgdm9pZCBwYWludGVkT2JqZWN0c0NvdW50ZXJEaWRI
aXRUaHJlc2hvbGQoKTsKICAgICAKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24odWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5cGUsIHVpbnQzMl90
IG1vZGlmaWVycywgaW50MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiwgdWludDY0X3QgbGlzdGVuZXJJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwg
Ym9vbCYgcmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHVpbnQ2NF90JiBwb2xpY3lBY3Rpb24sIHVpbnQ2
NF90JiBkb3dubG9hZElEKTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlv
bih1aW50NjRfdCBmcmFtZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9k
aWZpZXJzLCBpbnQzMl90IG1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlzdGVuZXJJRCwgQ29yZUlQ
Qzo6QXJndW1lbnREZWNvZGVyKik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTExNCw2ICsxMTQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERp
ZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCiAgICAgRGlkRGV0ZWN0WFNT
Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlRW5jb2RlciB1c2VyRGF0YSkKICAgICBEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJh
bWUodWludDY0X3QgZnJhbWVJRCwgdWludDMyX3QgdHlwZSwgV1RGOjpTdHJpbmcgdXJsLCBXZWJL
aXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIFBhaW50
ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9sZCgpCiAKICAgICBGcmFtZURpZEJlY29tZUZy
YW1lU2V0KHVpbnQ2NF90IGZyYW1lSUQsIGJvb2wgdmFsdWUpCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiAr
NjUsNyBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRSZW1vdmVGcmFtZUZyb21ICiB0eXBlZGVm
IHZvaWQgKCpXS1BhZ2VEaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWVDYWxsYmFjayko
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRSdW5JbnNlY3Vy
ZUNvbnRlbnRGb3JGcmFtZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYg
dm9pZCAoKldLUGFnZURpZERldGVjdFhTU0ZvckZyYW1lQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdl
LCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVu
dEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVy
VGhyZXNob2xkKShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBl
ZGVmIGJvb2wgKCpXS1BhZ2VDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5G
cmFtZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tQcm90ZWN0
aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5
cGVkZWYgdm9pZCAoKldLUGFnZURpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJh
bWVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0
Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJ
dGVtLCBXS0FycmF5UmVmIHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CkBA
IC0xMDYsNiArMTA3LDggQEAgc3RydWN0IFdLUGFnZUxvYWRlckNsaWVudCB7CiAKICAgICAvLyBW
ZXJzaW9uIDEKICAgICBXS1BhZ2VEaWREZXRlY3RYU1NGb3JGcmFtZUNhbGxiYWNrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZERldGVjdFhTU0ZvckZyYW1lOworCisgICAgV0tQ
YWdlRGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkICAgICAgICAgICAgICAgICAg
ICAgICAgICBkaWRIaXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQ7CiB9OwogdHlwZWRl
ZiBzdHJ1Y3QgV0tQYWdlTG9hZGVyQ2xpZW50IFdLUGFnZUxvYWRlckNsaWVudDsKIApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTA2MjcwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDExIEBAIHVpbnQ2NF90IFdLQnVuZGxlUGFn
ZUdldFJlbmRlclRyZWVTaXplKFcKICAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJU
cmVlU2l6ZSgpOwogfQogCit2b2lkIFdLQnVuZGxlUGFnZVN0YXJ0UGFpbnRlZE9iamVjdHNDb3Vu
dGVyV2l0aFRocmVzaG9sZChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgdWludDY0X3QgdGhyZXNob2xk
KQoreworICAgIHRvSW1wbChwYWdlKS0+c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhy
ZXNob2xkKHRocmVzaG9sZCk7Cit9CisKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWlu
dHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIGJvb2wgdHJhY2tSZXBhaW50cykKIHsKICAgICB0
b0ltcGwocGFnZVJlZiktPnNldFRyYWNrc1JlcGFpbnRzKHRyYWNrUmVwYWludHMpOwpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VQcml2YXRlLmgJKHJldmlzaW9uIDEwNjI3MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIFdLX0VYUE9S
VCB2b2lkIFdLQnVuZGxlUGFnZVNpbXVsYXRlTW91c2UKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdL
QnVuZGxlUGFnZUdldFJlbmRlclRyZWVTaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsKIAorV0tf
RVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhy
ZXNob2xkKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCB1aW50NjRfdCB0aHJlc2hvbGQpOworCiBXS19F
WFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgYm9vbCB0cmFja1JlcGFpbnRzKTsKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlUGFnZUlz
VHJhY2tpbmdSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiBXS19FWFBPUlQgdm9pZCBX
S0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAxMDYyNzApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4Myw0ICs3ODMsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bnVt
V2hlZWxFdmVudEhhbmRsCiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
Ok51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQoY291bnQpKTsKIH0KIAordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OnBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9sZCgpCit7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhaW50ZWRPYmplY3RzQ291bnRl
ckRpZEhpdFRocmVzaG9sZCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyMCw2ICsyMjAsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJi
ZXJCYW5kSW5EaXJlY3Rpb24oV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCBPVkVSUklE
RTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1
bnNpZ25lZCkgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50ZWRPYmplY3Rz
Q291bnRlckRpZEhpdFRocmVzaG9sZCgpIE9WRVJSSURFOwogCiAgICAgU3RyaW5nIG1fY2FjaGVk
VG9vbFRpcDsKICAgICBtdXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRGcmFtZVNldExh
cmdlc3RGcmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDYgKzQ4NywxMyBA
QCB1aW50NjRfdCBXZWJQYWdlOjpyZW5kZXJUcmVlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHNp
emU7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhy
ZXNob2xkKHVpbnQ2NF90IHRocmVzaG9sZCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcGFnZS0+c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNo
b2xkKHRocmVzaG9sZCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0VHJhY2tzUmVwYWludHMoYm9v
bCB0cmFja1JlcGFpbnRzKQogewogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtYWluRnJhbWVW
aWV3KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDEwNjI3MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgcmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oKSBjb25zdDsKICAg
ICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRQYWludGVk
T2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKHVpbnQ2NF90KTsKIAogICAgIHZvaWQgc2V0VHJh
Y2tzUmVwYWludHMoYm9vbCk7CiAgICAgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBjb25zdDsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwNjMwMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDEyLTAxLTMwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAg
ICAgICAgQWRkIFdlYktpdDIgQVBJIHRvIGNvdW50IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAg
ICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1
NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2Vi
S2l0MidzIFdlYkxvYWRlckNsaWVudCBoYXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGFj
Y291bnRlZCBmb3IuCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250
cm9sbGVyLm06CisgICAgICAgICgtW0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyIGF3YWtlRnJvbU5p
Yl0pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisKIDIwMTItMDEtMzAgIE9q
YW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBQYXJzaW5nIHRlc3RfZXhw
ZWNhdGlvbnMudHh0ICsgU2tpcHBlZCBsaXN0cyB0YWtlcyB0b28gbG9uZwpJbmRleDogVG9vbHMv
TWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHJldmlzaW9u
IDEwNjI3MCkKKysrIFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxl
ci5tCSh3b3JraW5nIGNvcHkpCkBAIC02MDgsNiArNjA4LDcgQEAgLSAodm9pZClhd2FrZUZyb21O
aWIKICAgICAgICAgMCwgLy8gc2hvdWxkR29Ub0JhY2tGb3J3YXJkSXRlbQogICAgICAgICAwLCAg
Ly8gZGlkRmFpbFRvSW5pdGlhbGl6ZVBsdWdpbgogICAgICAgICBkaWREZXRlY3RYU1NGb3JGcmFt
ZSwKKyAgICAgICAgMCwgLy8gZGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkCiAg
ICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KF93ZWJWaWV3LnBhZ2VSZWYsICZs
b2FkQ2xpZW50KTsKICAgICAKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxMDYyNzApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5LDcgKzM4OSw4IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICAgICAgMCwgLy8gZGlkQ2hh
bmdlQmFja0ZvcndhcmRMaXN0CiAgICAgICAgIDAsIC8vIHNob3VsZEdvVG9CYWNrRm9yd2FyZExp
c3RJdGVtCiAgICAgICAgIDAsIC8vIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lCi0gICAg
ICAgIDAgIC8vIGRpZERldGVjdFhTU0ZvckZyYW1lCisgICAgICAgIDAsIC8vIGRpZERldGVjdFhT
U0ZvckZyYW1lCisgICAgICAgIDAgIC8vIGRpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVz
aG9sZAogICAgIH07CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudChtX21haW5XZWJWaWV3
LT5wYWdlKCksICZwYWdlTG9hZGVyQ2xpZW50KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124779</attachid>
            <date>2012-01-31 11:15:04 -0800</date>
            <delta_ts>2012-01-31 11:36:56 -0800</delta_ts>
            <desc>Patch again</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>28331</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIFdlYktpdDIgQVBJIHRvIGNvdW50
IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IENocm9tZUNsaWVudCBmdW5jdGlvbiBpcyBjYWxs
ZWQgd2hlbiB0aGUgcGFpbnRlZCBvYmplY3RzIGNvdW50ZXIgaGl0cyB0aGUgCisgICAgICAgIGRl
c2lnbmF0ZWQgdGhyZXNob2xkLiAKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAg
ICAgICAoQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFp
bnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xkKToKKworICAgICAgICBJZiBhIHRocmVz
aG9sZCBpcyBzZXQsIFBhZ2Uga2VlcHMgYSBIYXNoU2V0IG9mIHJlbGV2YW50IFJlbmRlck9iamVj
dHMgdW50aWwgCisgICAgICAgIHRoZSB0aHJlc2hvbGQgaXMgbWV0LiBPbmNlIGl0IGlzIG1ldCwg
UGFnZSBjYWxscyB0aGUgbmV3IENocm9tZUNsaWVudCAKKyAgICAgICAgZnVuY3Rpb25zLgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVz
aG9sZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9iamVj
dCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgVGhlc2UgUmVuZGVyT2JqZWN0
cyBhcmUgdGhlIG9uZXMgdGhhdCB0aGlzIGFwaSBjdXJyZW50bHkgY29uc2lkZXIgdG8gYmUgCisg
ICAgICAgIHJlbGV2YW50LiBJZiB0aGVpciByZXBhaW50IHJlY3RzIGludGVyc2VjdCB3aXRoIHRo
ZSB2aWV3UmVjdCwgdGhlbiB0aGV5IGFyZSAKKyAgICAgICAgYWRkZWQgdG8gdGhlIHJlbGV2YW50
IG9iamVjdHMgc2V0IG9uIHRoZSBQYWdlLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWlu
dFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxh
Y2VkOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6cGFpbnRSZXBsYWNlZCk6CisKIDIwMTItMDEtMzEgIEFsZXhpcyBNZW5hcmQgIDxhbGV4
aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBpbmNsdWRlIGNs
ZWFudXAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDEwNjM2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyNSw2ICszMjUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRSdW5Nb2RhbERpYWxvZ0R1cmluZ1BhZ2VEaXNtaXNzYWwoY29uc3QgRGlhbG9n
VHlwZSYsIGNvbnN0IFN0cmluZyYgZGlhbG9nTWVzc2FnZSwgRnJhbWVMb2FkZXI6OlBhZ2VEaXNt
aXNzYWxUeXBlKSBjb25zdCB7IFVOVVNFRF9QQVJBTShkaWFsb2dNZXNzYWdlKTsgcmV0dXJuIHRy
dWU7IH0KIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdl
ZCh1bnNpZ25lZCkgPSAwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludGVkT2JqZWN0c0Nv
dW50ZXJEaWRIaXRUaHJlc2hvbGQoKSB7IH0KICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1NWR0ltYWdlQ2hyb21lQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDcgQEAgUGFnZTo6UGFn
ZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAgICAgLCBtX3Zpc2liaWxpdHlTdGF0ZShQYWdl
VmlzaWJpbGl0eVN0YXRlVmlzaWJsZSkKICNlbmRpZgogICAgICwgbV9kaXNwbGF5SUQoMCkKKyAg
ICAsIG1fcGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKDApCiB7CiAgICAgaWYgKCFhbGxQ
YWdlcykgewogICAgICAgICBhbGxQYWdlcyA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKQEAgLTEwODAs
NiArMTA4MSwyNyBAQCBQYWdlVmlzaWJpbGl0eVN0YXRlIFBhZ2U6OnZpc2liaWxpdHlTdGF0CiB9
CiAjZW5kaWYKIAordm9pZCBQYWdlOjpzdGFydFBhaW50ZWRPYmplY3RzQ291bnRlcldpdGhUaHJl
c2hvbGQodWludDY0X3QgdGhyZXNob2xkKQoreworICAgIG1fcGFpbnRlZE9iamVjdHNDb3VudGVy
VGhyZXNob2xkID0gdGhyZXNob2xkOworICAgIG1fcmVsZXZhbnRQYWludGVkUmVuZGVyT2JqZWN0
cy5jbGVhcigpOworfQorCit2b2lkIFBhZ2U6OmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KFJl
bmRlck9iamVjdCogb2JqZWN0KQoreworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhp
bmcgaWYgdGhlcmUgaXMgbm8gY291bnRlciB0aHJlc2hvbGQuCisgICAgaWYgKCFtX3BhaW50ZWRP
YmplY3RzQ291bnRlclRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWxldmFu
dFBhaW50ZWRSZW5kZXJPYmplY3RzLmFkZChvYmplY3QpOworCisgICAgaWYgKG1fcmVsZXZhbnRQ
YWludGVkUmVuZGVyT2JqZWN0cy5zaXplKCkgPT0gKGludCltX3BhaW50ZWRPYmplY3RzQ291bnRl
clRocmVzaG9sZCkgeworICAgICAgICBtX3BhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCA9
IDA7CisgICAgICAgIG1fcmVsZXZhbnRQYWludGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpOworICAg
ICAgICBjaHJvbWUoKS0+Y2xpZW50KCktPnBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVz
aG9sZCgpOworICAgIH0KK30KKwogUGFnZTo6UGFnZUNsaWVudHM6OlBhZ2VDbGllbnRzKCkKICAg
ICA6IGNocm9tZUNsaWVudCgwKQogICAgICwgY29udGV4dE1lbnVDbGllbnQoMCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgUG9pbnRlckxvY2tDb250cm9sbGVyOwogICAgIGNsYXNzIFByb2dyZXNzVHJhY2tl
cjsKICAgICBjbGFzcyBSYW5nZTsKKyAgICBjbGFzcyBSZW5kZXJPYmplY3Q7CiAgICAgY2xhc3Mg
UmVuZGVyVGhlbWU7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKICAgICBjbGFzcyBTY3Jv
bGxhYmxlQXJlYTsKQEAgLTM1Miw2ICszNTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5k
aWYKIAogICAgICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCB7IHJldHVy
biBtX2Rpc3BsYXlJRDsgfQorCisgICAgICAgIHZvaWQgc3RhcnRQYWludGVkT2JqZWN0c0NvdW50
ZXJXaXRoVGhyZXNob2xkKHVpbnQ2NF90IHRocmVzaG9sZCk7CisgICAgICAgIHZvaWQgYWRkUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QoUmVuZGVyT2JqZWN0Kik7CiAgICAgICAgIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHZvaWQgaW5pdEdyb3VwKCk7CkBAIC00NjksNiArNDczLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBQYWdlVmlzaWJpbGl0eVN0YXRlIG1fdmlzaWJpbGl0eVN0
YXRlOwogI2VuZGlmCiAgICAgICAgIFBsYXRmb3JtRGlzcGxheUlEIG1fZGlzcGxheUlEOworCisg
ICAgICAgIHVpbnQ2NF90IG1fcGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkOworICAgICAg
ICBIYXNoU2V0PFJlbmRlck9iamVjdCo+IG1fcmVsZXZhbnRQYWludGVkUmVuZGVyT2JqZWN0czsK
ICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDExICsyMCwxNCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZUJveC5oIgogCisjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5l
Rmxvd0JveC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNp
bmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKIAogI2lmbmRlZiBO
REVCVUcKQEAgLTIxMSw2ICsyMTQsMTUgQEAgdm9pZCBJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpbnRJbgogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdChyZW5k
ZXJlcigpKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCkpIHsKKyAgICAg
ICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAg
ICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChyZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIExheW91dFBvaW50IGNoaWxkUG9p
bnQgPSBwYWludE9mZnNldDsKICAgICBpZiAocGFyZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8vIEZhc3RlciB0aGFuIGNhbGxpbmcgY29u
dGFpbmluZ0Jsb2NrKCkuCiAgICAgICAgIGNoaWxkUG9pbnQgPSByZW5kZXJlcigpLT5jb250YWlu
aW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQodG9SZW5kZXJCb3gocmVuZGVy
ZXIoKSksIGNoaWxkUG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclJ1YnlUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIlRleHQuaCIKQEAgLTQ5Niw2ICs0OTcsMTUgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICAvLyBXaGVuIG9ubHkgcGFpbnRpbmcgdGhl
IHNlbGVjdGlvbiwgZG9uJ3QgYm90aGVyIHRvIHBhaW50IGlmIHRoZXJlIGlzIG5vbmUuCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVyZXIoKS0+dmll
dygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdS
ZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJh
bWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkK
KyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QocmVu
ZGVyZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAobV90
cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCktPmNv
bnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgIT0gaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHRoZSB2aXNpYmxl
IGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIHJlc3Qgb2YgdGhl
IHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjcsNiArMTY3LDE1IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBh
aW50UmVwbGFjZWQKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFnZXRSZXBsYWNlbWVu
dFRleHRHZW9tZXRyeShwYWludE9mZnNldCwgY29udGVudFJlY3QsIHBhdGgsIHJlcGxhY2VtZW50
VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKICAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBhaW50
SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRS
ZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNv
bnRleHQpOwogICAgIGNvbnRleHQtPmNsaXAoY29udGVudFJlY3QpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNpb24gMTA2MzY4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogCkBAIC01Niw2ICs1OCwxNSBAQCBib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVz
TGF5ZXIoKSBjCiAKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogeworICAgIGlm
IChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CisgICAgICAgIGlmIChwYWludElu
Zm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdl
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwogICAgIHJlY3Qu
bW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IHN0eWxl
KCktPmltYWdlUmVuZGVyaW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRpbWl6ZUNvbnRyYXN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAx
MDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDE1IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVw
bGFjZWQoUGFpbnRJbmYKICAgICAgICAgaWYgKCFpbWcgfHwgaW1nLT5pc051bGwoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygp
KSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0
KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0
KHRvUG9pbnQocGFpbnRPZmZzZXQgLSBsb2NhdGlvbigpKSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCks
IHRydWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJ
KHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDE1IEBAIHZvaWQgUmVuZGVyUmVn
aW9uOjpwYWludFJlcGxhY2VkKFBhaW50SW4KICAgICBpZiAoIW1fZmxvd1RocmVhZCB8fCAhaXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRo
aXMtPnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3
LT52aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkp
CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRo
aXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAjaWZuZGVmIE5ERUJVRwog
ICAgIG1faW5zaWRlUmVnaW9uUGFpbnQgPSB0cnVlOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyUmVwbGFjZWQuaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTM1LDYgKzEzNywxNSBAQCB2b2lkIFJlbmRlclJl
cGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0g
ZmFsc2U7CiAgICAgfQogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkp
IHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3Qo
KSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAg
ICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgY29tcGxldGVseUNsaXBwZWRP
dXQgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKICAgICAg
ICAgTGF5b3V0UmVjdCBib3JkZXJSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3RlZFBhaW50T2Zmc2V0
LCBzaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3Bw
CShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlk
ZW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTMgQEAKICNpbmNsdWRlICJSZW5k
ZXJWaWRlby5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNs
dWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKQEAgLTIwNyw2ICsyMDksMTUgQEAgdm9p
ZCBSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICByZXR1cm47CiAg
ICAgcmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcg
PSB0aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHMo
dmlldy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlz
LT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVj
dCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChkaXNw
bGF5aW5nUG9zdGVyKQogICAgICAgICBwYWludEludG9SZWN0KHBhaW50SW5mby5jb250ZXh0LCBy
ZWN0KTsKICAgICBlbHNlIGlmIChkb2N1bWVudCgpLT52aWV3KCkgJiYgZG9jdW1lbnQoKS0+dmll
dygpLT5wYWludEJlaGF2aW9yKCkgJiBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jv
b3QuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDE1IEBAIHZv
aWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQYWludEkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkgewor
ICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkg
eworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLy8gTWFrZSBhIGNvcHkgb2YgdGhlIFBhaW50
SW5mbyBiZWNhdXNlIGFwcGx5VHJhbnNmb3JtIHdpbGwgbW9kaWZ5IHRoZSBkYW1hZ2UgcmVjdC4K
ICAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICBjaGlsZFBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDYzNjgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OCBA
QAorMjAxMi0wMS0zMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzgzCisgICAgICAgIEFk
ZCBXZWJLaXQyIEFQSSB0byBjb3VudCByZWxldmFudCBSZW5kZXJPYmplY3RzCisgICAgICAgIC1h
bmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNzA5NTYwPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IFdl
YkxvYWRlciBjbGllbnQgZnVuY3Rpb25zIGlzIGNhbGxlZCB3aGVuIHRoZSBwYWludGVkIG9iamVj
dHMgCisgICAgICAgIGNvdW50ZXIgaGFzIGhpdCB0aGUgZGVzaWduYXRlZCB0aHJlc2hvbGQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJMb2FkZXJDbGllbnQ6OmRp
ZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCk6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkxvYWRl
ckNsaWVudCk6CisKKyAgICAgICAgVGhlIG5lY2Vzc2FyeSBtYWNoaW5lcnkgdG8gcGFzcyB0aGUg
cGFpbnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xkIAorICAgICAgICBtZXNzYWdlIGZy
b20gV2ViQ29yZSB0aHJvdWdoIHRoZSBjaHJvbWUgY2xpZW50IGFsbCB0aGUgd2F5IHRvIHRoZSB3
ZWIgbG9hZGVyIAorICAgICAgICBjbGllbnQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGFpbnRlZE9iamVjdHND
b3VudGVyRGlkSGl0VGhyZXNob2xkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFnZVByb3h5KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpwYWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJlc2hvbGQpOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50KToKKworICAgICAgICBU
aGlzIG5ldyBidW5kbGUgYXBpIGFsbG93cyBjbGllbnRzIHRvIHNwZWNpZnkgYSB0aHJlc2hvbGQg
Zm9yIHRoZSBwYWludGVkIAorICAgICAgICBvYmplY3RzIGNvdW50ZXIuIFNwZWNpZnlpbmcgYSB0
aHJlc2hvbGQgd2lsbCBjYXVzZSB0aGUgY291bnRlciB0byBzdGFydCAKKyAgICAgICAgY291bnRp
bmcuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2UuY3BwOgorICAgICAgICAoV0tCdW5kbGVQYWdlU3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJX
aXRoVGhyZXNob2xkKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZVByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHND
b3VudGVyV2l0aFRocmVzaG9sZCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJQYWdlKToKKwogMjAxMi0wMS0z
MSAgQWxsYW4gU2FuZGZlbGQgSmVuc2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KIAogICAg
ICAgICBFbnN1cmUgdGlsZXMgYXJlIHJlcGFpbnRlZCB3aGVuIHNjcm9sbGluZyB1c2luZyBtb3Vz
ZSB3aGVlbC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMb2FkZXJDbGll
bnQuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
TG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxNCBAQCB2b2lk
IFdlYkxvYWRlckNsaWVudDo6ZGlkRGV0ZWN0WFNTRm9yRnJhCiAgICAgbV9jbGllbnQuZGlkRGV0
ZWN0WFNTRm9yRnJhbWUodG9BUEkocGFnZSksIHRvQVBJKGZyYW1lKSwgdG9BUEkodXNlckRhdGEp
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKIH0KIAordm9pZCBXZWJMb2FkZXJDbGllbnQ6OmRpZEhp
dFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZChXZWJQYWdlUHJveHkqIHBhZ2UpCit7Cisg
ICAgaWYgKCFtX2NsaWVudC5kaWRIaXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmRpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRl
clRocmVzaG9sZCh0b0FQSShwYWdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKIGJvb2wg
V2ViTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5G
cmFtZShXZWJQYWdlUHJveHkqIHBhZ2UsIFdlYkZyYW1lUHJveHkqIGZyYW1lLCBXZWJQcm90ZWN0
aW9uU3BhY2UqIHByb3RlY3Rpb25TcGFjZSkKIHsKICAgICBpZiAoIW1fY2xpZW50LmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VJbkZyYW1lKQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERpc3BsYXlJbnNlY3VyZUNvbnRl
bnRGb3JGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CiAg
ICAgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJG
cmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CiAgICAgdm9pZCBkaWREZXRlY3RYU1NGb3JGcmFtZShX
ZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CisKKyAgICB2b2lkIGRp
ZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZChXZWJQYWdlUHJveHkqKTsKICAgICAK
ICAgICBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VJbkZyYW1lKFdl
YlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBXZWJQcm90ZWN0aW9uU3BhY2UqKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUoV2ViUGFnZVByb3h5
KiwgV2ViRnJhbWVQcm94eSosIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxMDYz
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY2Nyw2ICsxNjY3LDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5p
c2hQcm9ncmVzcygpCiAgICAgbV9sb2FkZXJDbGllbnQuZGlkRmluaXNoUHJvZ3Jlc3ModGhpcyk7
CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwYWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJl
c2hvbGQoKQoreworICAgIG1fbG9hZGVyQ2xpZW50LmRpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRl
clRocmVzaG9sZCh0aGlzKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmRpZFN0YXJ0UHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgdW5yZWFjaGFibGVVUkwsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJn
dW1lbnRzKQogewogICAgIGNsZWFyUGVuZGluZ0FQSVJlcXVlc3RVUkwoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYzLDYgKzY2Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRTdGFydFByb2dyZXNzKCk7CiAg
ICAgdm9pZCBkaWRDaGFuZ2VQcm9ncmVzcyhkb3VibGUpOwogICAgIHZvaWQgZGlkRmluaXNoUHJv
Z3Jlc3MoKTsKKworICAgIHZvaWQgcGFpbnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xk
KCk7CiAgICAgCiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQzMl90IG5hdmlnYXRpb25UeXBlLCB1aW50MzJfdCBtb2RpZmllcnMs
IGludDMyX3QgbW91c2VCdXR0b24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIHVp
bnQ2NF90IGxpc3RlbmVySUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIGJvb2wmIHJlY2Vp
dmVkUG9saWN5QWN0aW9uLCB1aW50NjRfdCYgcG9saWN5QWN0aW9uLCB1aW50NjRfdCYgZG93bmxv
YWRJRCk7CiAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24odWludDY0X3Qg
ZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50
MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
U3RyaW5nJiBmcmFtZU5hbWUsIHVpbnQ2NF90IGxpc3RlbmVySUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQs
NiArMTE0LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRSdW5JbnNlY3Vy
ZUNvbnRlbnRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQogICAgIERpZERldGVjdFhTU0ZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIg
dXNlckRhdGEpCiAgICAgRGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQzMl90IHR5cGUsIFdURjo6U3RyaW5nIHVybCwgV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKKyAgICBQYWludGVkT2JqZWN0c0Nv
dW50ZXJEaWRIaXRUaHJlc2hvbGQoKQogCiAgICAgRnJhbWVEaWRCZWNvbWVGcmFtZVNldCh1aW50
NjRfdCBmcmFtZUlELCBib29sIHZhbHVlKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLUGFnZS5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgdHlw
ZWRlZiB2b2lkICgqV0tQYWdlRGlkUmVtb3ZlRnJhbWVGcm9tSAogdHlwZWRlZiB2b2lkICgqV0tQ
YWdlRGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lQ2FsbGJhY2spKFdLUGFnZVJlZiBw
YWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkUnVuSW5zZWN1cmVDb250ZW50Rm9y
RnJhbWVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJl
ZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS1Bh
Z2VEaWREZXRlY3RYU1NGb3JGcmFtZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJl
ZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5
cGVkZWYgdm9pZCAoKldLUGFnZURpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCko
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiBib29sICgq
V0tQYWdlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUluRnJhbWVDYWxsYmFj
aykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLUHJvdGVjdGlvblNwYWNlUmVm
IHByb3RlY3Rpb25TcGFjZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQg
KCpXS1BhZ2VEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1lQ2FsbGJhY2sp
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUmVmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsK
IHR5cGVkZWYgdm9pZCAoKldLUGFnZURpZENoYW5nZUJhY2tGb3J3YXJkTGlzdENhbGxiYWNrKShX
S1BhZ2VSZWYgcGFnZSwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmIGFkZGVkSXRlbSwgV0tBcnJh
eVJlZiByZW1vdmVkSXRlbXMsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwpAQCAtMTA2LDYgKzEw
Nyw4IEBAIHN0cnVjdCBXS1BhZ2VMb2FkZXJDbGllbnQgewogCiAgICAgLy8gVmVyc2lvbiAxCiAg
ICAgV0tQYWdlRGlkRGV0ZWN0WFNTRm9yRnJhbWVDYWxsYmFjayAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWREZXRlY3RYU1NGb3JGcmFtZTsKKworICAgIFdLUGFnZURpZEhpdFBh
aW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgZGlk
SGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkOwogfTsKIHR5cGVkZWYgc3RydWN0IFdL
UGFnZUxvYWRlckNsaWVudCBXS1BhZ2VMb2FkZXJDbGllbnQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI4LDYgKzMyOCwxMSBAQCB1aW50NjRfdCBXS0J1bmRsZVBhZ2VHZXRSZW5kZXJU
cmVlU2l6ZShXCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+cmVuZGVyVHJlZVNpemUoKTsK
IH0KIAordm9pZCBXS0J1bmRsZVBhZ2VTdGFydFBhaW50ZWRPYmplY3RzQ291bnRlcldpdGhUaHJl
c2hvbGQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIHVpbnQ2NF90IHRocmVzaG9sZCkKK3sKKyAgICB0
b0ltcGwocGFnZSktPnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZCh0aHJl
c2hvbGQpOworfQorCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRzKFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBib29sIHRyYWNrUmVwYWludHMpCiB7CiAgICAgdG9JbXBsKHBhZ2VS
ZWYpLT5zZXRUcmFja3NSZXBhaW50cyh0cmFja1JlcGFpbnRzKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlUHJpdmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZVByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBXS19FWFBPUlQgdm9pZCBXS0J1
bmRsZVBhZ2VTaW11bGF0ZU1vdXNlCiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS0J1bmRsZVBhZ2VH
ZXRSZW5kZXJUcmVlU2l6ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiAKK1dLX0VYUE9SVCB2b2lk
IFdLQnVuZGxlUGFnZVN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZChXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgdWludDY0X3QgdGhyZXNob2xkKTsKKwogV0tfRVhQT1JUIHZvaWQg
V0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGJvb2wg
dHJhY2tSZXBhaW50cyk7CiBXS19FWFBPUlQgYm9vbCBXS0J1bmRsZVBhZ2VJc1RyYWNraW5nUmVw
YWludHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpOwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdl
UmVzZXRUcmFja2VkUmVwYWludHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03ODMsNCArNzgzLDkgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om51bVdoZWVsRXZlbnRI
YW5kbAogICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpOdW1XaGVlbEV2
ZW50SGFuZGxlcnNDaGFuZ2VkKGNvdW50KSk7CiB9CiAKK3ZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpw
YWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJlc2hvbGQoKQoreworICAgIG1fcGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJl
c2hvbGQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNiAr
MjIwLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGly
ZWN0aW9uKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbikgY29uc3QgT1ZFUlJJREU7CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIG51bVdoZWVsRXZlbnRIYW5kbGVyc0NoYW5nZWQodW5zaWduZWQpIE9W
RVJSSURFOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBwYWludGVkT2JqZWN0c0NvdW50ZXJEaWRI
aXRUaHJlc2hvbGQoKSBPVkVSUklERTsKIAogICAgIFN0cmluZyBtX2NhY2hlZFRvb2xUaXA7CiAg
ICAgbXV0YWJsZSBSZWZQdHI8V2ViRnJhbWU+IG1fY2FjaGVkRnJhbWVTZXRMYXJnZXN0RnJhbWU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Nyw2ICs0ODcsMTMgQEAgdWludDY0X3Qg
V2ViUGFnZTo6cmVuZGVyVHJlZVNpemUoKSBjb25zdAogICAgIHJldHVybiBzaXplOwogfQogCit2
b2lkIFdlYlBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZCh1aW50
NjRfdCB0aHJlc2hvbGQpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3BhZ2UtPnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZCh0aHJlc2hv
bGQpOworfQorCiB2b2lkIFdlYlBhZ2U6OnNldFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tSZXBh
aW50cykKIHsKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbWFpbkZyYW1lVmlldygpKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lv
biAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDcgQEAgcHVibGljOgogCiAgICAgU3RyaW5n
IHJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkgY29uc3Q7CiAgICAgdWludDY0X3Qg
cmVuZGVyVHJlZVNpemUoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0UGFpbnRlZE9iamVjdHNDb3Vu
dGVyV2l0aFRocmVzaG9sZCh1aW50NjRfdCk7CiAKICAgICB2b2lkIHNldFRyYWNrc1JlcGFpbnRz
KGJvb2wpOwogICAgIGJvb2wgaXNUcmFja2luZ1JlcGFpbnRzKCkgY29uc3Q7CkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDYz
NjgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAor
MjAxMi0wMS0zMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MzgzCisgICAgICAgIEFkZCBX
ZWJLaXQyIEFQSSB0byBjb3VudCByZWxldmFudCBSZW5kZXJPYmplY3RzCisgICAgICAgIC1hbmQg
Y29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNzA5NTYwPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDIncyBXZWJM
b2FkZXJDbGllbnQgaGFzIGEgbmV3IGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBhY2NvdW50ZWQgZm9y
LgorICAgICAgICAqIE1pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgor
ICAgICAgICAoLVtCcm93c2VyV2luZG93Q29udHJvbGxlciBhd2FrZUZyb21OaWJdKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorCiAyMDEyLTAxLTMxICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGRlcml2ZWQgc291
cmNlcywgdXNlIHRoZSBzYW1lIGNvbXBpbGVyIHRoYXQgaXMgdXNlZCB0byBjb21waWxlIFdlYktp
dFRlc3RSdW5uZXIuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0Nv
bnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3Nlcldp
bmRvd0NvbnRyb2xsZXIubQkocmV2aXNpb24gMTA2MzY4KQorKysgVG9vbHMvTWluaUJyb3dzZXIv
bWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29weSkKQEAgLTYwOCw2ICs2
MDgsNyBAQCAtICh2b2lkKWF3YWtlRnJvbU5pYgogICAgICAgICAwLCAvLyBzaG91bGRHb1RvQmFj
a0ZvcndhcmRJdGVtCiAgICAgICAgIDAsICAvLyBkaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luCiAg
ICAgICAgIGRpZERldGVjdFhTU0ZvckZyYW1lLAorICAgICAgICAwLCAvLyBkaWRIaXRQYWludGVk
T2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJD
bGllbnQoX3dlYlZpZXcucGFnZVJlZiwgJmxvYWRDbGllbnQpOwogICAgIApJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysr
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODksNyArMzg5LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQg
YXJnYwogICAgICAgICAwLCAvLyBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QKICAgICAgICAgMCwg
Ly8gc2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICAgICAgMCwgLy8gZGlkUnVuSW5z
ZWN1cmVDb250ZW50Rm9yRnJhbWUKLSAgICAgICAgMCAgLy8gZGlkRGV0ZWN0WFNTRm9yRnJhbWUK
KyAgICAgICAgMCwgLy8gZGlkRGV0ZWN0WFNTRm9yRnJhbWUKKyAgICAgICAgMCAgLy8gZGlkSGl0
UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkCiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdl
TG9hZGVyQ2xpZW50KG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgJnBhZ2VMb2FkZXJDbGllbnQpOwog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124785</attachid>
            <date>2012-01-31 11:36:56 -0800</date>
            <delta_ts>2012-01-31 18:19:18 -0800</delta_ts>
            <desc>Another try for the bots</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>28954</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIFdlYktpdDIgQVBJIHRvIGNvdW50
IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IENocm9tZUNsaWVudCBmdW5jdGlvbiBpcyBjYWxs
ZWQgd2hlbiB0aGUgcGFpbnRlZCBvYmplY3RzIGNvdW50ZXIgaGl0cyB0aGUgCisgICAgICAgIGRl
c2lnbmF0ZWQgdGhyZXNob2xkLiAKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAg
ICAgICAoQ2hyb21lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6cGFp
bnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xkKToKKworICAgICAgICBJZiBhIHRocmVz
aG9sZCBpcyBzZXQsIFBhZ2Uga2VlcHMgYSBIYXNoU2V0IG9mIHJlbGV2YW50IFJlbmRlck9iamVj
dHMgdW50aWwgCisgICAgICAgIHRoZSB0aHJlc2hvbGQgaXMgbWV0LiBPbmNlIGl0IGlzIG1ldCwg
UGFnZSBjYWxscyB0aGUgbmV3IENocm9tZUNsaWVudCAKKyAgICAgICAgZnVuY3Rpb25zLgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVz
aG9sZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9iamVj
dCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisKKyAgICAgICAgVGhlc2UgUmVuZGVyT2JqZWN0
cyBhcmUgdGhlIG9uZXMgdGhhdCB0aGlzIGFwaSBjdXJyZW50bHkgY29uc2lkZXIgdG8gYmUgCisg
ICAgICAgIHJlbGV2YW50LiBJZiB0aGVpciByZXBhaW50IHJlY3RzIGludGVyc2VjdCB3aXRoIHRo
ZSB2aWV3UmVjdCwgdGhlbiB0aGV5IGFyZSAKKyAgICAgICAgYWRkZWQgdG8gdGhlIHJlbGV2YW50
IG9iamVjdHMgc2V0IG9uIHRoZSBQYWdlLgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpwYWludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWlu
dFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxh
Y2VkOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
Um9vdDo6cGFpbnRSZXBsYWNlZCk6CisKIDIwMTItMDEtMzEgIEFsZXhpcyBNZW5hcmQgIDxhbGV4
aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBpbmNsdWRlIGNs
ZWFudXAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc3OSw2ICs3Nzks
NyBAQCBfX1pON1dlYkNvcmU0UGFnZTMxc2V0Q3VzdG9tSFRNTFRva2VuaXplCiBfX1pON1dlYkNv
cmU0UGFnZTMxc2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheUVkCiBfX1pON1dlYkNvcmU0
UGFnZTMyc2V0TWVtb3J5Q2FjaGVDbGllbnRDYWxsc0VuYWJsZWRFYgogX19aTjdXZWJDb3JlNFBh
Z2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlvbk1vZGVFYgorX19aTjdXZWJDb3Jl
NFBhZ2UzOXN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9sZEV5CiBfX1pON1dl
YkNvcmU0UGFnZTZnb0JhY2tFdgogX19aTjdXZWJDb3JlNFBhZ2U4Z29Ub0l0ZW1FUE5TXzExSGlz
dG9yeUl0ZW1FTlNfMTNGcmFtZUxvYWRUeXBlRQogX19aTjdXZWJDb3JlNFBhZ2U5Z29Gb3J3YXJk
RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTA2MzY4KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzI1LDYgKzMyNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZFJ1bk1vZGFsRGlhbG9nRHVyaW5nUGFnZURpc21pc3NhbChjb25zdCBEaWFsb2dUeXBl
JiwgY29uc3QgU3RyaW5nJiBkaWFsb2dNZXNzYWdlLCBGcmFtZUxvYWRlcjo6UGFnZURpc21pc3Nh
bFR5cGUpIGNvbnN0IHsgVU5VU0VEX1BBUkFNKGRpYWxvZ01lc3NhZ2UpOyByZXR1cm4gdHJ1ZTsg
fQogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBudW1XaGVlbEV2ZW50SGFuZGxlcnNDaGFuZ2VkKHVu
c2lnbmVkKSA9IDA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50ZWRPYmplY3RzQ291bnRl
ckRpZEhpdFRocmVzaG9sZCgpIHsgfQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlz
U1ZHSW1hZ2VDaHJvbWVDbGllbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYsNyBAQCBQYWdlOjpQYWdlKFBh
Z2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICAgICAsIG1fdmlzaWJpbGl0eVN0YXRlKFBhZ2VWaXNp
YmlsaXR5U3RhdGVWaXNpYmxlKQogI2VuZGlmCiAgICAgLCBtX2Rpc3BsYXlJRCgwKQorICAgICwg
bV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQoMCkKIHsKICAgICBpZiAoIWFsbFBhZ2Vz
KSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3IEhhc2hTZXQ8UGFnZSo+OwpAQCAtMTA4MCw2ICsx
MDgxLDI3IEBAIFBhZ2VWaXNpYmlsaXR5U3RhdGUgUGFnZTo6dmlzaWJpbGl0eVN0YXQKIH0KICNl
bmRpZgogCit2b2lkIFBhZ2U6OnN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9s
ZCh1aW50NjRfdCB0aHJlc2hvbGQpCit7CisgICAgbV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQgPSB0aHJlc2hvbGQ7CisgICAgbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgUGFnZTo6YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QoUmVuZGVy
T2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBp
ZiB0aGVyZSBpcyBubyBjb3VudGVyIHRocmVzaG9sZC4KKyAgICBpZiAoIW1fcGFpbnRlZE9iamVj
dHNDb3VudGVyVGhyZXNob2xkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3JlbGV2YW50UGFp
bnRlZFJlbmRlck9iamVjdHMuYWRkKG9iamVjdCk7CisKKyAgICBpZiAobV9yZWxldmFudFBhaW50
ZWRSZW5kZXJPYmplY3RzLnNpemUoKSA9PSAoaW50KW1fcGFpbnRlZE9iamVjdHNDb3VudGVyVGhy
ZXNob2xkKSB7CisgICAgICAgIG1fcGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkID0gMDsK
KyAgICAgICAgbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzLmNsZWFyKCk7CisgICAgICAg
IGNocm9tZSgpLT5jbGllbnQoKS0+cGFpbnRlZE9iamVjdHNDb3VudGVyRGlkSGl0VGhyZXNob2xk
KCk7CisgICAgfQorfQorCiBQYWdlOjpQYWdlQ2xpZW50czo6UGFnZUNsaWVudHMoKQogICAgIDog
Y2hyb21lQ2xpZW50KDApCiAgICAgLCBjb250ZXh0TWVudUNsaWVudCgwKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBQb2ludGVyTG9ja0NvbnRyb2xsZXI7CiAgICAgY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwog
ICAgIGNsYXNzIFJhbmdlOworICAgIGNsYXNzIFJlbmRlck9iamVjdDsKICAgICBjbGFzcyBSZW5k
ZXJUaGVtZTsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFi
bGVBcmVhOwpAQCAtMzUyLDYgKzM1Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgog
CiAgICAgICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcGxheUlEOyB9CisKKyAgICAgICAgdm9pZCBzdGFydFBhaW50ZWRPYmplY3RzQ291bnRlcldp
dGhUaHJlc2hvbGQodWludDY0X3QgdGhyZXNob2xkKTsKKyAgICAgICAgdm9pZCBhZGRSZWxldmFu
dFJlcGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBpbml0R3JvdXAoKTsKQEAgLTQ2OSw2ICs0NzMsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIFBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7
CiAjZW5kaWYKICAgICAgICAgUGxhdGZvcm1EaXNwbGF5SUQgbV9kaXNwbGF5SUQ7CisKKyAgICAg
ICAgdWludDY0X3QgbV9wYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQ7CisgICAgICAgIEhh
c2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVCb3guY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTEgKzIwLDE0IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5lQm94LmgiCiAKKyNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVGbG93
Qm94LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1
ZGUgIlJlbmRlckFyZW5hLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5oIgogCiAjaWZuZGVmIE5ERUJV
RwpAQCAtMjExLDYgKzIxNCwxNSBAQCB2b2lkIElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWludEluCiAgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVy
KCkpIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKSkgeworICAgICAgICBp
ZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJlbmRlcmVyKCktPmZyYW1lKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAg
ICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHJlbmRlcmVyKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgTGF5b3V0UG9pbnQgY2hpbGRQb2ludCA9
IHBhaW50T2Zmc2V0OwogICAgIGlmIChwYXJlbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgLy8gRmFzdGVyIHRoYW4gY2FsbGluZyBjb250YWlu
aW5nQmxvY2soKS4KICAgICAgICAgY2hpbGRQb2ludCA9IHJlbmRlcmVyKCktPmNvbnRhaW5pbmdC
bG9jaygpLT5mbGlwRm9yV3JpdGluZ01vZGVGb3JDaGlsZCh0b1JlbmRlckJveChyZW5kZXJlcigp
KSwgY2hpbGRQb2ludCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJSdWJ5UnVuLmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieVRleHQuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiVGV4dC5oIgpAQCAtNDk2LDYgKzQ5NywxNSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIC8vIFdoZW4gb25seSBwYWludGluZyB0aGUgc2Vs
ZWN0aW9uLCBkb24ndCBib3RoZXIgdG8gcGFpbnQgaWYgdGhlcmUgaXMgbm9uZS4KICAgICAgICAg
cmV0dXJuOwogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCkp
IHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3Qo
KSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAg
ICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChyZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChtX3RydW5j
YXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewogICAgICAgICBpZiAocmVuZGVyZXIoKS0+Y29udGFp
bmluZ0Jsb2NrKCktPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAhPSBpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHZpc2libGUgZnJh
Z21lbnQgb2YgdGV4dCBodWcgdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgcmVzdCBvZiB0aGUgcnVu
IGJ5IG1vdmluZyB0aGUgb3JpZ2luCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Nyw2ICsxNjcsMTUgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRS
ZXBsYWNlZAogICAgIGZsb2F0IHRleHRXaWR0aDsKICAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4
dEdlb21ldHJ5KHBhaW50T2Zmc2V0LCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0
UmVjdCwgZm9udCwgcnVuLCB0ZXh0V2lkdGgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
UmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZv
LnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSog
cGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2
YW50UmVwYWludGVkT2JqZWN0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4
dCk7CiAgICAgY29udGV4dC0+Y2xpcChjb250ZW50UmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CiAKQEAgLTU2LDYgKzU4LDE1IEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNMYXll
cigpIGMKIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CisgICAgaWYgKFJl
bmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5y
ZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFu
dFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KwogICAgIExheW91dFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgcmVjdC5tb3Zl
QnkocGFpbnRPZmZzZXQpOwogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gc3R5bGUoKS0+
aW1hZ2VSZW5kZXJpbmcoKSA9PSBJbWFnZVJlbmRlcmluZ09wdGltaXplQ29udHJhc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDEwNjM2
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyOCw2ICszMjgsMTUgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNl
ZChQYWludEluZgogICAgICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsK
KyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkp
IHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAg
ICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgaWYg
KHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQodG9Q
b2ludChwYWludE9mZnNldCAtIGxvY2F0aW9uKCkpLCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2
aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTUgQEAgdm9pZCBSZW5kZXJSZWdpb246
OnBhaW50UmVwbGFjZWQoUGFpbnRJbgogICAgIGlmICghbV9mbG93VGhyZWFkIHx8ICFpc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+
dmlldygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZp
ZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUo
KSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICNpZm5kZWYgTkRFQlVHCiAgICAg
bV9pbnNpZGVSZWdpb25QYWludCA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJS
ZXBsYWNlZC5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xMzUsNiArMTM3LDE1IEBAIHZvaWQgUmVuZGVyUmVwbGFj
ZWQ6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgZHJhd1NlbGVjdGlvblRpbnQgPSBmYWxz
ZTsKICAgICB9CiAKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkgewor
ICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkg
eworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICAg
ICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRoaXMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBjb21wbGV0ZWx5Q2xpcHBlZE91dCA9
IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXJSYWRpdXMoKSkgewogICAgICAgICBM
YXlvdXRSZWN0IGJvcmRlclJlY3QgPSBMYXlvdXRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNp
emUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJl
dmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgIlJlbmRlclZp
ZGVvLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtMjA3LDYgKzIwOSwxNSBAQCB2b2lkIFJl
bmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgIHJldHVybjsKICAgICBy
ZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRo
aXMtPnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3
LT52aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZy
YW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkp
CisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRo
aXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKGRpc3BsYXlp
bmdQb3N0ZXIpCiAgICAgICAgIHBhaW50SW50b1JlY3QocGFpbnRJbmZvLmNvbnRleHQsIHJlY3Qp
OwogICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPnZpZXcoKSAmJiBkb2N1bWVudCgpLT52aWV3KCkt
PnBhaW50QmVoYXZpb3IoKSAmIFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5j
cHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUsMTUgQEAgdm9pZCBS
ZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CisgICAg
ICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZv
IGJlY2F1c2UgYXBwbHlUcmFuc2Zvcm0gd2lsbCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgogICAg
IFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOwogICAgIGNoaWxkUGFpbnRJbmZv
LmNvbnRleHQtPnNhdmUoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisy
MDEyLTAxLTMwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIFdl
YktpdDIgQVBJIHRvIGNvdW50IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAgICAgICAgLWFuZCBj
b3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgV2ViTG9h
ZGVyIGNsaWVudCBmdW5jdGlvbnMgaXMgY2FsbGVkIHdoZW4gdGhlIHBhaW50ZWQgb2JqZWN0cyAK
KyAgICAgICAgY291bnRlciBoYXMgaGl0IHRoZSBkZXNpZ25hdGVkIHRocmVzaG9sZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlckNsaWVudDo6ZGlkSGl0
UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViTG9hZGVyQ2xp
ZW50KToKKworICAgICAgICBUaGUgbmVjZXNzYXJ5IG1hY2hpbmVyeSB0byBwYXNzIHRoZSBwYWlu
dGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJlc2hvbGQgCisgICAgICAgIG1lc3NhZ2UgZnJvbSBX
ZWJDb3JlIHRocm91Z2ggdGhlIGNocm9tZSBjbGllbnQgYWxsIHRoZSB3YXkgdG8gdGhlIHdlYiBs
b2FkZXIgCisgICAgICAgIGNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwYWludGVkT2JqZWN0c0NvdW50
ZXJEaWRIaXRUaHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJQYWdlUHJveHkpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJD
aHJvbWVDbGllbnQ6OnBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9sZCk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQpOgorCisgICAgICAgIFRoaXMg
bmV3IGJ1bmRsZSBhcGkgYWxsb3dzIGNsaWVudHMgdG8gc3BlY2lmeSBhIHRocmVzaG9sZCBmb3Ig
dGhlIHBhaW50ZWQgCisgICAgICAgIG9iamVjdHMgY291bnRlci4gU3BlY2lmeWluZyBhIHRocmVz
aG9sZCB3aWxsIGNhdXNlIHRoZSBjb3VudGVyIHRvIHN0YXJ0IAorICAgICAgICBjb3VudGluZy4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VTdGFydFBhaW50ZWRPYmplY3RzQ291bnRlcldpdGhU
aHJlc2hvbGQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRQYWludGVkT2JqZWN0c0NvdW50
ZXJXaXRoVGhyZXNob2xkKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYlBhZ2UpOgorCiAyMDEyLTAxLTMxICBB
bGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IEVuc3VyZSB0aWxlcyBhcmUgcmVwYWludGVkIHdoZW4gc2Nyb2xsaW5nIHVzaW5nIG1vdXNlIHdo
ZWVsLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMb2Fk
ZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDE0IEBAIHZvaWQgV2Vi
TG9hZGVyQ2xpZW50OjpkaWREZXRlY3RYU1NGb3JGcmEKICAgICBtX2NsaWVudC5kaWREZXRlY3RY
U1NGb3JGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJhbWUpLCB0b0FQSSh1c2VyRGF0YSksIG1f
Y2xpZW50LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYkxvYWRlckNsaWVudDo6ZGlkSGl0UGFp
bnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBp
ZiAoIW1fY2xpZW50LmRpZEhpdFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhy
ZXNob2xkKHRvQVBJKHBhZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwogYm9vbCBXZWJM
b2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VJbkZyYW1l
KFdlYlBhZ2VQcm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIFdlYlByb3RlY3Rpb25T
cGFjZSogcHJvdGVjdGlvblNwYWNlKQogewogICAgIGlmICghbV9jbGllbnQuY2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUluRnJhbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDYgKzY0LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZv
ckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKICAgICB2
b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1l
UHJveHkqLCBBUElPYmplY3QqKTsKICAgICB2b2lkIGRpZERldGVjdFhTU0ZvckZyYW1lKFdlYlBh
Z2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKKworICAgIHZvaWQgZGlkSGl0
UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKFdlYlBhZ2VQcm94eSopOwogICAgIAogICAg
IGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUluRnJhbWUoV2ViUGFn
ZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIFdlYlByb3RlY3Rpb25TcGFjZSopOwogICAgIHZvaWQg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXZWJQYWdlUHJveHkqLCBX
ZWJGcmFtZVByb3h5KiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDEwNjM2OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjY3LDYgKzE2NjcsMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaFBy
b2dyZXNzKCkKICAgICBtX2xvYWRlckNsaWVudC5kaWRGaW5pc2hQcm9ncmVzcyh0aGlzKTsKIH0K
IAordm9pZCBXZWJQYWdlUHJveHk6OnBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9s
ZCgpCit7CisgICAgbV9sb2FkZXJDbGllbnQuZGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhy
ZXNob2xkKHRoaXMpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiB1bnJlYWNoYWJsZVVSTCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBhcmd1bWVu
dHMpCiB7CiAgICAgY2xlYXJQZW5kaW5nQVBJUmVxdWVzdFVSTCgpOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NjMs
NiArNjYzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGRpZFN0YXJ0UHJvZ3Jlc3MoKTsKICAgICB2
b2lkIGRpZENoYW5nZVByb2dyZXNzKGRvdWJsZSk7CiAgICAgdm9pZCBkaWRGaW5pc2hQcm9ncmVz
cygpOworCisgICAgdm9pZCBwYWludGVkT2JqZWN0c0NvdW50ZXJEaWRIaXRUaHJlc2hvbGQoKTsK
ICAgICAKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24odWludDY0X3Qg
ZnJhbWVJRCwgdWludDMyX3QgbmF2aWdhdGlvblR5cGUsIHVpbnQzMl90IG1vZGlmaWVycywgaW50
MzJfdCBtb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgdWludDY0
X3QgbGlzdGVuZXJJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgYm9vbCYgcmVjZWl2ZWRQ
b2xpY3lBY3Rpb24sIHVpbnQ2NF90JiBwb2xpY3lBY3Rpb24sIHVpbnQ2NF90JiBkb3dubG9hZElE
KTsKICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbih1aW50NjRfdCBmcmFt
ZUlELCB1aW50MzJfdCBuYXZpZ2F0aW9uVHlwZSwgdWludDMyX3QgbW9kaWZpZXJzLCBpbnQzMl90
IG1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJp
bmcmIGZyYW1lTmFtZSwgdWludDY0X3QgbGlzdGVuZXJJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsx
MTQsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFJ1bkluc2VjdXJlQ29u
dGVudEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCiAgICAgRGlkRGV0ZWN0WFNTRm9yRnJhbWUodWludDY0
X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2Vy
RGF0YSkKICAgICBEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgdWludDMyX3QgdHlwZSwgV1RGOjpTdHJpbmcgdXJsLCBXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIFBhaW50ZWRPYmplY3RzQ291bnRl
ckRpZEhpdFRocmVzaG9sZCgpCiAKICAgICBGcmFtZURpZEJlY29tZUZyYW1lU2V0KHVpbnQ2NF90
IGZyYW1lSUQsIGJvb2wgdmFsdWUpCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tQYWdlLmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCB0eXBlZGVm
IHZvaWQgKCpXS1BhZ2VEaWRSZW1vdmVGcmFtZUZyb21ICiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VE
aWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFt
ZUNhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVz
ZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldLUGFnZURp
ZERldGVjdFhTU0ZvckZyYW1lQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZy
YW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRl
ZiB2b2lkICgqV0tQYWdlRGlkSGl0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKShXS1Bh
Z2VSZWYgcGFnZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIGJvb2wgKCpXS1Bh
Z2VDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlSW5GcmFtZUNhbGxiYWNrKShX
S1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tQcm90ZWN0aW9uU3BhY2VSZWYgcHJv
dGVjdGlvblNwYWNlLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldL
UGFnZURpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWVDYWxsYmFjaykoV0tQ
YWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VS
ZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlw
ZWRlZiB2b2lkICgqV0tQYWdlRGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2spKFdLUGFn
ZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWRkZWRJdGVtLCBXS0FycmF5UmVm
IHJlbW92ZWRJdGVtcywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CkBAIC0xMDYsNiArMTA3LDgg
QEAgc3RydWN0IFdLUGFnZUxvYWRlckNsaWVudCB7CiAKICAgICAvLyBWZXJzaW9uIDEKICAgICBX
S1BhZ2VEaWREZXRlY3RYU1NGb3JGcmFtZUNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZERldGVjdFhTU0ZvckZyYW1lOworCisgICAgV0tQYWdlRGlkSGl0UGFpbnRl
ZE9iamVjdHNDb3VudGVyVGhyZXNob2xkICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRIaXRQ
YWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQ7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgV0tQYWdl
TG9hZGVyQ2xpZW50IFdLUGFnZUxvYWRlckNsaWVudDsKIApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVQYWdlLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjgsNiArMzI4LDExIEBAIHVpbnQ2NF90IFdLQnVuZGxlUGFnZUdldFJlbmRlclRyZWVT
aXplKFcKICAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5yZW5kZXJUcmVlU2l6ZSgpOwogfQog
Cit2b2lkIFdLQnVuZGxlUGFnZVN0YXJ0UGFpbnRlZE9iamVjdHNDb3VudGVyV2l0aFRocmVzaG9s
ZChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgdWludDY0X3QgdGhyZXNob2xkKQoreworICAgIHRvSW1w
bChwYWdlKS0+c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKHRocmVzaG9s
ZCk7Cit9CisKIHZvaWQgV0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMoV0tCdW5kbGVQYWdl
UmVmIHBhZ2VSZWYsIGJvb2wgdHJhY2tSZXBhaW50cykKIHsKICAgICB0b0ltcGwocGFnZVJlZikt
PnNldFRyYWNrc1JlcGFpbnRzKHRyYWNrUmVwYWludHMpOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2VQcml2YXRlLmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlUHJpdmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxl
UGFnZVNpbXVsYXRlTW91c2UKIAogV0tfRVhQT1JUIHVpbnQ2NF90IFdLQnVuZGxlUGFnZUdldFJl
bmRlclRyZWVTaXplKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsKIAorV0tfRVhQT1JUIHZvaWQgV0tC
dW5kbGVQYWdlU3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKFdLQnVuZGxl
UGFnZVJlZiBwYWdlLCB1aW50NjRfdCB0aHJlc2hvbGQpOworCiBXS19FWFBPUlQgdm9pZCBXS0J1
bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgYm9vbCB0cmFj
a1JlcGFpbnRzKTsKIFdLX0VYUE9SVCBib29sIFdLQnVuZGxlUGFnZUlzVHJhY2tpbmdSZXBhaW50
cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiBXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VSZXNl
dFRyYWNrZWRSZXBhaW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc4Myw0ICs3ODMsOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bnVtV2hlZWxFdmVudEhhbmRs
CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok51bVdoZWVsRXZlbnRI
YW5kbGVyc0NoYW5nZWQoY291bnQpKTsKIH0KIAordm9pZCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50
ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9sZCgpCit7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRocmVzaG9s
ZCgpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw2ICsyMjAs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rp
b24oV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uKSBjb25zdCBPVkVSUklERTsKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgbnVtV2hlZWxFdmVudEhhbmRsZXJzQ2hhbmdlZCh1bnNpZ25lZCkgT1ZFUlJJ
REU7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBhaW50ZWRPYmplY3RzQ291bnRlckRpZEhpdFRo
cmVzaG9sZCgpIE9WRVJSSURFOwogCiAgICAgU3RyaW5nIG1fY2FjaGVkVG9vbFRpcDsKICAgICBt
dXRhYmxlIFJlZlB0cjxXZWJGcmFtZT4gbV9jYWNoZWRGcmFtZVNldExhcmdlc3RGcmFtZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJl
dmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDYgKzQ4NywxMyBAQCB1aW50NjRfdCBXZWJQ
YWdlOjpyZW5kZXJUcmVlU2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHNpemU7CiB9CiAKK3ZvaWQg
V2ViUGFnZTo6c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKHVpbnQ2NF90
IHRocmVzaG9sZCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
cGFnZS0+c3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJXaXRoVGhyZXNob2xkKHRocmVzaG9sZCk7
Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0VHJhY2tzUmVwYWludHMoYm9vbCB0cmFja1JlcGFpbnRz
KQogewogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtYWluRnJhbWVWaWV3KCkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDEw
NjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgcmVu
ZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oKSBjb25zdDsKICAgICB1aW50NjRfdCByZW5k
ZXJUcmVlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRQYWludGVkT2JqZWN0c0NvdW50ZXJX
aXRoVGhyZXNob2xkKHVpbnQ2NF90KTsKIAogICAgIHZvaWQgc2V0VHJhY2tzUmVwYWludHMoYm9v
bCk7CiAgICAgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBjb25zdDsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjM2OCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDEy
LTAxLTMwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIFdlYktp
dDIgQVBJIHRvIGNvdW50IHJlbGV2YW50IFJlbmRlck9iamVjdHMKKyAgICAgICAgLWFuZCBjb3Jy
ZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MidzIFdlYkxvYWRl
ckNsaWVudCBoYXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGFjY291bnRlZCBmb3IuCisg
ICAgICAgICogTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm06CisgICAg
ICAgICgtW0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyIGF3YWtlRnJvbU5pYl0pOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisKIDIwMTItMDEtMzEgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBXaGVuIGdlbmVyYXRpbmcgZGVyaXZlZCBzb3VyY2Vz
LCB1c2UgdGhlIHNhbWUgY29tcGlsZXIgdGhhdCBpcyB1c2VkIHRvIGNvbXBpbGUgV2ViS2l0VGVz
dFJ1bm5lci4KSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJv
bGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93
Q29udHJvbGxlci5tCShyZXZpc2lvbiAxMDYzNjgpCisrKyBUb29scy9NaW5pQnJvd3Nlci9tYWMv
QnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpAQCAtNjA4LDYgKzYwOCw3
IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAgICAgIDAsIC8vIHNob3VsZEdvVG9CYWNrRm9y
d2FyZEl0ZW0KICAgICAgICAgMCwgIC8vIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4KICAgICAg
ICAgZGlkRGV0ZWN0WFNTRm9yRnJhbWUsCisgICAgICAgIDAsIC8vIGRpZEhpdFBhaW50ZWRPYmpl
Y3RzQ291bnRlclRocmVzaG9sZAogICAgIH07CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVu
dChfd2ViVmlldy5wYWdlUmVmLCAmbG9hZENsaWVudCk7CiAgICAgCkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4OSw3ICszODksOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdj
CiAgICAgICAgIDAsIC8vIGRpZENoYW5nZUJhY2tGb3J3YXJkTGlzdAogICAgICAgICAwLCAvLyBz
aG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbQogICAgICAgICAwLCAvLyBkaWRSdW5JbnNlY3Vy
ZUNvbnRlbnRGb3JGcmFtZQotICAgICAgICAwICAvLyBkaWREZXRlY3RYU1NGb3JGcmFtZQorICAg
ICAgICAwLCAvLyBkaWREZXRlY3RYU1NGb3JGcmFtZQorICAgICAgICAwICAvLyBkaWRIaXRQYWlu
dGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VMb2Fk
ZXJDbGllbnQobV9tYWluV2ViVmlldy0+cGFnZSgpLCAmcGFnZUxvYWRlckNsaWVudCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124865</attachid>
            <date>2012-01-31 18:19:18 -0800</date>
            <delta_ts>2012-02-01 11:11:39 -0800</delta_ts>
            <desc>New patch that implements didNewFirstVisuallyNonEmptyLayout</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>33775</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAxLTMxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIGEgZGlmZmVyZW50IGRpZEZpcnN0
VmlzdWFsbE5vbkVtcHR5TGF5b3V0IGhldXJpc3RpYyB0byBleHBlcmltZW50IHdpdGgKKyAgICAg
ICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdv
YWwgaXMgdG8gcmUtdmFtcCBkaWRGaXJzdFZpc3VhbGxOb25FbXB0eUxheW91dCB0byBiZSBtb3Jl
IGFjY3VyYXRlLiAKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIGEgbmV3IGhldXJpc3RpYyBjYWxs
ZWQgZGlkTmV3Rmlyc3RWaXN1YWxsTm9uRW1wdHlMYXlvdXQgYW5kIAorICAgICAgICBsZWF2ZXMg
dGhlIG9sZCBvbmUgZm9yIHRoZSB0aW1lIGJlaW5nLiBUaGF0IGlzIHRlbXBvcmFyeS4KKworICAg
ICAgICBUaGUgaGV1cmlzdGljIGZvciBkaWROZXdGaXJzdFZpc3VhbGxOb25FbXB0eUxheW91dCBp
cyB0byBjb3VudCByZWxldmFudCAKKyAgICAgICAgcGFpbnRlZCBSZW5kZXJPYmplY3RzIG9uIFBh
Z2UuCisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhy
ZXNob2xkKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmFkZFJlbGV2YW50UmVwYWludGVkT2Jq
ZWN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzdGFydENvdW50aW5nUmVwYWludGVk
T2JqZWN0cyk6CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKKyAgICAgICAgU3RhcnQgY291
bnRpbmcgcmVsZXZhbnQgcGFpbnRlZCBSZW5kZXJPYmplY3RzIG9uIHRoZSBwYWdlIG9uY2UgdGhl
IGZpcnN0IAorICAgICAgICBsYXlvdXQgaXMgY29tcGxldGUuCisgICAgICAgICogcGFnZS9GcmFt
ZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91
dFRhc2tzKToKKworICAgICAgICBNYWNoaW5lcnkgZm9yIGZpcmluZyBkaWROZXdGaXJzdFZpc3Vh
bGxOb25FbXB0eUxheW91dC4KKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbXB0eUZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZE5ld0ZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpkaWROZXdGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyLmg6CisgICAgICAgIChGcmFtZUxvYWRlcik6CisgICAgICAgICogbG9hZGVyL0ZyYW1l
TG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOgorCisgICAgICAgIFRoZXNl
IFJlbmRlck9iamVjdHMgYXJlIHRoZSBvbmVzIHRoYXQgdGhpcyBhcGkgY3VycmVudGx5IGNvbnNp
ZGVyIHRvIGJlIAorICAgICAgICByZWxldmFudC4gSWYgdGhlaXIgcmVwYWludCByZWN0cyBpbnRl
cnNlY3Qgd2l0aCB0aGUgdmlld1JlY3QsIHRoZW4gdGhleSBhcmUgCisgICAgICAgIGFkZGVkIHRv
IHRoZSByZWxldmFudCBvYmplY3RzIHNldCBvbiB0aGUgUGFnZS4KKyAgICAgICAgKiByZW5kZXJp
bmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6cGFpbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBh
aW50UmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnBhaW50UmVwbGFjZWQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRl
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR1Jvb3Q6OnBhaW50UmVwbGFjZWQpOgorCiAyMDEyLTAxLTMxICBBZGFtIEts
ZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlv
biBzaG91bGQgbm90IGJlIGEgQ29udGFpbmVyTm9kZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NzgsNiArNzc4LDcgQEAgX19aTjdXZWJDb3JlNFBhZ2UyN3NldEphdmFT
Y3JpcHRVUkxzQXJlQQogX19aTjdXZWJDb3JlNFBhZ2UzMXNldEN1c3RvbUhUTUxUb2tlbml6ZXJD
aHVua1NpemVFaQogX19aTjdXZWJDb3JlNFBhZ2UzMXNldEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1l
RGVsYXlFZAogX19aTjdXZWJDb3JlNFBhZ2UzMnNldE1lbW9yeUNhY2hlQ2xpZW50Q2FsbHNFbmFi
bGVkRWIKK19fWk43V2ViQ29yZTRQYWdlMzNzZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hv
bGRFeQogX19aTjdXZWJDb3JlNFBhZ2UzN3NldEluTG93UXVhbGl0eUltYWdlSW50ZXJwb2xhdGlv
bk1vZGVFYgogX19aTjdXZWJDb3JlNFBhZ2U2Z29CYWNrRXYKIF9fWk43V2ViQ29yZTRQYWdlOGdv
VG9JdGVtRVBOU18xMUhpc3RvcnlJdGVtRU5TXzEzRnJhbWVMb2FkVHlwZUUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXQoKSB7IH0KIAogICAgIHZpcnR1YWwgRnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBO
YXZpZ2F0aW9uQWN0aW9uJikgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFNob3coKSB7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2
aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM5OSw2ICsyMzk5LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmRp
ZEZpcnN0VmlzdWFsbHlOb25FbXAKICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXQoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlcjo6ZGlkTmV3Rmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKK3sKKyAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWROZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKK30KKwogdm9pZCBGcmFtZUxvYWRlcjo6ZnJh
bWVMb2FkQ29tcGxldGVkKCkKIHsKICAgICAvLyBOb3RlOiBDYW4gYmUgY2FsbGVkIG11bHRpcGxl
IHRpbWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDEw
NjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDExIEBAIHB1YmxpYzoKICAgICBDYWNoZVBvbGljeSBzdWJyZXNv
dXJjZUNhY2hlUG9saWN5KCkgY29uc3Q7CiAKICAgICB2b2lkIGRpZEZpcnN0TGF5b3V0KCk7CisK
KyAgICAvLyBGSVhNRTogZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkgYW5kIGRpZE5l
d0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpIHNob3VsZCBiZSBtZXJnZWQuCisgICAgLy8g
VGhlIG9ubHkgcmVhc29uIGZvciBib3RoIHRvIGV4aXN0IGlzIHRvIGV4cGVyaW1lbnQgd2l0aCBk
aWZmZXJlbnQgaGV1cmlzdGljcyBmb3IgdGhlIHRpbWUgYmVpbmcuCiAgICAgdm9pZCBkaWRGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKKyAgICB2b2lkIGRpZE5ld0ZpcnN0VmlzdWFsbHlO
b25FbXB0eUxheW91dCgpOwogCiAgICAgdm9pZCBsb2FkZWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShDYWNoZWRSZXNvdXJjZSopOwogICAgIHZvaWQgdGVsbENsaWVudEFib3V0UGFzdE1lbW9yeUNh
Y2hlTG9hZHMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDYgKzE2MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaXJzdExheW91dCgp
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWROZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkTGF5b3V0KCkgeyB9CiAKICAgICAgICAgdmlydHVhbCBGcmFtZSogZGlzcGF0Y2hDcmVh
dGVQYWdlKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyODAsNiArMjI4MCw4IEBAIHZvaWQgRnJh
bWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKCkKICAgICAgICAgaWYgKG1fZmlyc3RMYXlv
dXRDYWxsYmFja1BlbmRpbmcpIHsKICAgICAgICAgICAgIG1fZmlyc3RMYXlvdXRDYWxsYmFja1Bl
bmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5kaWRGaXJzdExh
eW91dCgpOworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICAgICAgcGFnZS0+c3RhcnRDb3VudGluZ1JlcGFpbnRlZE9iamVjdHMoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGFsd2F5cyBzZW5kIHRoaXMgZXZl
bnR1YWxseS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDYgKzE4Niw3
IEBAIFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogICAgICwgbV92aXNpYmls
aXR5U3RhdGUoUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUpCiAjZW5kaWYKICAgICAsIG1fZGlz
cGxheUlEKDApCisgICAgLCBtX2lzQ291bnRpbmdSZXBhaW50ZWRPYmplY3RzKGZhbHNlKQogewog
ICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdl
Kj47CkBAIC0xMDgwLDYgKzEwODEsMzIgQEAgUGFnZVZpc2liaWxpdHlTdGF0ZSBQYWdlOjp2aXNp
YmlsaXR5U3RhdAogfQogI2VuZGlmCiAKK3N0YXRpYyB1aW50NjRfdCBnUGFpbnRlZE9iamVjdENv
dW50ZXJUaHJlc2hvbGQgPSAwOworCit2b2lkIFBhZ2U6OnNldFBhaW50ZWRPYmplY3RzQ291bnRl
clRocmVzaG9sZCh1aW50NjRfdCB0aHJlc2hvbGQpCit7CisgICAgZ1BhaW50ZWRPYmplY3RDb3Vu
dGVyVGhyZXNob2xkID0gdGhyZXNob2xkOworfQorCit2b2lkIFBhZ2U6OmFkZFJlbGV2YW50UmVw
YWludGVkT2JqZWN0KFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY291bnRlciB0aHJlc2hvbGQuCisgICAg
aWYgKCFnUGFpbnRlZE9iamVjdENvdW50ZXJUaHJlc2hvbGQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9pc0NvdW50aW5nUmVwYWludGVkT2JqZWN0cykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzLmFkZChvYmplY3QpOworCisgICAg
aWYgKG1fcmVsZXZhbnRQYWludGVkUmVuZGVyT2JqZWN0cy5zaXplKCkgPT0gKGludClnUGFpbnRl
ZE9iamVjdENvdW50ZXJUaHJlc2hvbGQpIHsKKyAgICAgICAgbV9pc0NvdW50aW5nUmVwYWludGVk
T2JqZWN0cyA9IGZhbHNlOworICAgICAgICBtX3JlbGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHMu
Y2xlYXIoKTsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpKQorICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5kaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQo
KTsKKyAgICB9Cit9CisKIFBhZ2U6OlBhZ2VDbGllbnRzOjpQYWdlQ2xpZW50cygpCiAgICAgOiBj
aHJvbWVDbGllbnQoMCkKICAgICAsIGNvbnRleHRNZW51Q2xpZW50KDApCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIFBvaW50ZXJMb2NrQ29udHJvbGxlcjsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAg
ICAgY2xhc3MgUmFuZ2U7CisgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIFJlbmRl
clRoZW1lOwogICAgIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAgICAgY2xhc3MgU2Nyb2xsYWJs
ZUFyZWE7CkBAIC0zNTIsNiArMzUzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgog
CiAgICAgICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlzcGxheUlEOyB9CisKKyAgICAgICAgdm9pZCBzZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQodWludDY0X3QgdGhyZXNob2xkKTsKKyAgICAgICAgdm9pZCBzdGFydENvdW50aW5nUmVw
YWludGVkT2JqZWN0cygpIHsgbV9pc0NvdW50aW5nUmVwYWludGVkT2JqZWN0cyA9IHRydWU7IH0K
KyAgICAgICAgdm9pZCBhZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChSZW5kZXJPYmplY3QqKTsK
ICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0R3JvdXAoKTsKQEAgLTQ2
OSw2ICs0NzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhZ2VWaXNpYmlsaXR5
U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICAgICAgUGxhdGZvcm1EaXNwbGF5
SUQgbV9kaXNwbGF5SUQ7CisKKyAgICAgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPiBtX3JlbGV2
YW50UGFpbnRlZFJlbmRlck9iamVjdHM7CisgICAgICAgIGJvb2wgbV9pc0NvdW50aW5nUmVwYWlu
dGVkT2JqZWN0czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDExICsyMCwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklubGluZUJveC5o
IgogCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2Nr
LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIK
IAogI2lmbmRlZiBOREVCVUcKQEAgLTIxMSw2ICsyMTQsMTUgQEAgdm9pZCBJbmxpbmVCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbgogICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdChyZW5kZXJlcigpKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3
KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1Jl
Y3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFt
ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQor
ICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdChyZW5k
ZXJlcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIExheW91dFBv
aW50IGNoaWxkUG9pbnQgPSBwYWludE9mZnNldDsKICAgICBpZiAocGFyZW50KCktPnJlbmRlcmVy
KCktPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIC8vIEZhc3RlciB0aGFu
IGNhbGxpbmcgY29udGFpbmluZ0Jsb2NrKCkuCiAgICAgICAgIGNoaWxkUG9pbnQgPSByZW5kZXJl
cigpLT5jb250YWluaW5nQmxvY2soKS0+ZmxpcEZvcldyaXRpbmdNb2RlRm9yQ2hpbGQodG9SZW5k
ZXJCb3gocmVuZGVyZXIoKSksIGNoaWxkUG9pbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclJ1
YnlUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTQ5Niw2ICs0OTcsMTUgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICAvLyBXaGVuIG9ubHkg
cGFpbnRpbmcgdGhlIHNlbGVjdGlvbiwgZG9uJ3QgYm90aGVyIHRvIHBhaW50IGlmIHRoZXJlIGlz
IG5vbmUuCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gcmVu
ZGVyZXIoKS0+dmlldygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3Rz
KHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcmVu
ZGVyZXIoKS0+ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50
ZWRPYmplY3QocmVuZGVyZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKICAgICAgICAgaWYgKHJl
bmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgIT0gaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBNYWtl
IHRoZSB2aXNpYmxlIGZyYWdtZW50IG9mIHRleHQgaHVnIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhl
IHJlc3Qgb2YgdGhlIHJ1biBieSBtb3ZpbmcgdGhlIG9yaWdpbgpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAx
MDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDE1IEBAIHZvaWQgUmVuZGVyRW1iZWRk
ZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBmbG9hdCB0ZXh0V2lkdGg7CiAgICAgaWYgKCFn
ZXRSZXBsYWNlbWVudFRleHRHZW9tZXRyeShwYWludE9mZnNldCwgY29udGVudFJlY3QsIHBhdGgs
IHJlcGxhY2VtZW50VGV4dFJlY3QsIGZvbnQsIHJ1biwgdGV4dFdpZHRoKSkKICAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKKyAgICAg
ICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAg
ICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmNvbnRleHQpOwogICAgIGNvbnRleHQtPmNsaXAoY29udGVudFJlY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2
aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52
YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogCkBAIC01Niw2ICs1OCwxNSBAQCBib29sIFJlbmRlckhUTUxDYW52
YXM6OnJlcXVpcmVzTGF5ZXIoKSBjCiAKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBs
YWNlZChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQogeworICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpKSB7CisgICAgICAg
IGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZpZXctPnZpZXdSZWN0KCkpKSB7CisgICAg
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICAgICAg
cGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QodGhpcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgp
OwogICAgIHJlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKICAgICBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IHN0eWxlKCktPmltYWdlUmVuZGVyaW5nKCkgPT0gSW1hZ2VSZW5kZXJpbmdPcHRpbWl6
ZUNvbnRyYXN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNiArMzI4LDE1IEBAIHZvaWQgUmVuZGVySW1h
Z2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgaWYgKCFpbWcgfHwgaW1nLT5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0g
dGhpcy0+dmlldygpKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKHZp
ZXctPnZpZXdSZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKSkgeworICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3Qo
dGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICNpZiBQTEFURk9STShN
QUMpCiAgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFp
bnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgICAgIHBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KHRvUG9pbnQocGFpbnRPZmZzZXQgLSBsb2NhdGlvbigpKSwgc3R5bGUoKS0+
aGlnaGxpZ2h0KCksIHRydWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDE1IEBAIHZv
aWQgUmVuZGVyUmVnaW9uOjpwYWludFJlcGxhY2VkKFBhaW50SW4KICAgICBpZiAoIW1fZmxvd1Ro
cmVhZCB8fCAhaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoUmVuZGVyVmll
dyogdmlldyA9IHRoaXMtPnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50
ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZy
YW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWlu
dGVkT2JqZWN0KHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAjaWZu
ZGVmIE5ERUJVRwogICAgIG1faW5zaWRlUmVnaW9uUGFpbnQgPSB0cnVlOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9u
IDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyUmVwbGFjZWQuaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTM1LDYgKzEzNywxNSBAQCB2
b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAgIGRyYXdTZWxl
Y3Rpb25UaW50ID0gZmFsc2U7CiAgICAgfQogCisgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSB0
aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0LmludGVyc2VjdHModmll
dy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5m
cmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
KQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0
aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgY29tcGxl
dGVseUNsaXBwZWRPdXQgPSBmYWxzZTsKICAgICBpZiAoc3R5bGUoKS0+aGFzQm9yZGVyUmFkaXVz
KCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBib3JkZXJSZWN0ID0gTGF5b3V0UmVjdChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBzaXplKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZGVvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlkZW8uY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksMTMgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWRlby5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1l
bnQuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKQEAgLTIwNyw2ICsy
MDksMTUgQEAgdm9pZCBSZW5kZXJWaWRlbzo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAg
ICByZXR1cm47CiAgICAgcmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogCisgICAgaWYgKFJlbmRl
clZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKHBhaW50SW5mby5yZWN0
LmludGVyc2VjdHModmlldy0+dmlld1JlY3QoKSkpIHsKKyAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJl
cGFpbnRlZE9iamVjdCh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwog
ICAgIGlmIChkaXNwbGF5aW5nUG9zdGVyKQogICAgICAgICBwYWludEludG9SZWN0KHBhaW50SW5m
by5jb250ZXh0LCByZWN0KTsKICAgICBlbHNlIGlmIChkb2N1bWVudCgpLT52aWV3KCkgJiYgZG9j
dW1lbnQoKS0+dmlldygpLT5wYWludEJlaGF2aW9yKCkgJiBQYWludEJlaGF2aW9yRmxhdHRlbkNv
bXBvc2l0aW5nTGF5ZXJzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiAr
MjQ1LDE1IEBAIHZvaWQgUmVuZGVyU1ZHUm9vdDo6cGFpbnRSZXBsYWNlZChQYWludEkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMt
PnZpZXcoKSkgeworICAgICAgICBpZiAocGFpbnRJbmZvLnJlY3QuaW50ZXJzZWN0cyh2aWV3LT52
aWV3UmVjdCgpKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRoaXMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLy8gTWFrZSBhIGNvcHkg
b2YgdGhlIFBhaW50SW5mbyBiZWNhdXNlIGFwcGx5VHJhbnNmb3JtIHdpbGwgbW9kaWZ5IHRoZSBk
YW1hZ2UgcmVjdC4KICAgICBQYWludEluZm8gY2hpbGRQYWludEluZm8ocGFpbnRJbmZvKTsKICAg
ICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMDY0MTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0MiBAQAorMjAxMi0wMS0zMSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3Mzgz
CisgICAgICAgIEFkZCBhIGRpZmZlcmVudCBkaWRGaXJzdFZpc3VhbGxOb25FbXB0eUxheW91dCBo
ZXVyaXN0aWMgdG8gZXhwZXJpbWVudCB3aXRoCisgICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0K
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNzA5NTYwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hY2hpbmVyeSBmb3IgZGlkTmV3Rmlyc3RWaXN1
YWxsTm9uRW1wdHlMYXlvdXQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJMb2FkZXJDbGllbnQ6OmRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaDoK
KyAgICAgICAgKFdlYkxvYWRlckNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkTmV3Rmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAoV2ViUGFnZVByb3h5KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJGcmFtZUxvYWRl
ckNsaWVudCk6CisKKyAgICAgICAgVGhpcyB0ZW1wb3JhcnkgQVBJIGFsbG93cyB0aGUgY2xpZW50
IHRvIHNwZWNpZnkgdGhlIHRocmVzaG9sZCBmb3IgdGhlIHBhaW50ZWQgCisgICAgICAgIG9iamVj
dHMgY291bnRlciBvbiBQYWdlLiBUaGlzIGlzIHRlbXBvcmFyeS4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXS0J1
bmRsZVBhZ2VTZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6c2V0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAg
KFdlYlBhZ2UpOgorCiAyMDEyLTAxLTMxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIFBsdWdpblByb2Nlc3Mgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHJlbW90
ZSBvcGVuIGFuZCBzYXZlIHBhbmVscwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkxvYWRlckNsaWVudC5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiAr
MTIzLDE0IEBAIHZvaWQgV2ViTG9hZGVyQ2xpZW50OjpkaWRGaXJzdFZpc3VhbGx5Tm8KICAgICBt
X2NsaWVudC5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSh0b0FQSShwYWdl
KSwgdG9BUEkoZnJhbWUpLCB0b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmNsaWVudEluZm8pOwog
fQogCit2b2lkIFdlYkxvYWRlckNsaWVudDo6ZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0KFdlYlBhZ2VQcm94eSogcGFnZSwgQVBJT2JqZWN0KiB1c2VyRGF0YSkKK3sKKyAgICBpZiAo
IW1fY2xpZW50LmRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jbGllbnQuZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KHRv
QVBJKHBhZ2UpLCB0b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCiB2
b2lkIFdlYkxvYWRlckNsaWVudDo6ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KFdlYlBhZ2VQ
cm94eSogcGFnZSwgV2ViRnJhbWVQcm94eSogZnJhbWUsIEFQSU9iamVjdCogdXNlckRhdGEpCiB7
CiAgICAgaWYgKCFtX2NsaWVudC5kaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxMDYz
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDcgKzU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFNhbWVEb2N1
bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgU2Ft
ZURvY3VtZW50TmF2aWdhdGlvblR5cGUsIEFQSU9iamVjdCopOwogICAgIHZvaWQgZGlkUmVjZWl2
ZVRpdGxlRm9yRnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJiwgV2ViRnJhbWVQcm94
eSosIEFQSU9iamVjdCopOwogICAgIHZvaWQgZGlkRmlyc3RMYXlvdXRGb3JGcmFtZShXZWJQYWdl
UHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CisgICAgLy8gRklYTUU6IGRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lIGFuZCBkaWROZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQgc2hvdWxkIGJlIG1lcmdlZC4KKyAgICAvLyBUaGUgb25seSByZWFzb24g
Zm9yIGJvdGggdG8gZXhpc3QgaXMgdG8gZXhwZXJpbWVudCB3aXRoIGRpZmZlcmVudCBoZXVyaXN0
aWNzIGZvciB0aGUgdGltZSBiZWluZy4KICAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dEZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3Qq
KTsKKyAgICB2b2lkIGRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dChXZWJQYWdlUHJv
eHkqLCBBUElPYmplY3QqKTsKICAgICB2b2lkIGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShX
ZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJT2JqZWN0Kik7CiAgICAgdm9pZCBkaWRE
aXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94
eSosIEFQSU9iamVjdCopOwogICAgIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUo
V2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSU9iamVjdCopOwpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODY2LDYgKzE4NjYsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpcnN0VmlzdWFs
bHlOb25FbQogICAgIG1fbG9hZGVyQ2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckZyYW1lKHRoaXMsIGZyYW1lLCB1c2VyRGF0YS5nZXQoKSk7CiB9CiAKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMpCit7CisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7
CisgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2Rlcih1c2VyRGF0
YSwgbV9wcm9jZXNzLT5jb250ZXh0KCkpOworICAgIGlmICghYXJndW1lbnRzLT5kZWNvZGUobWVz
c2FnZURlY29kZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xvYWRlckNsaWVudC5kaWRO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQodGhpcywgdXNlckRhdGEuZ2V0KCkpOworfQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90
IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQogewogICAgIFJl
ZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRhOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NTUsNiArNjU1LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFN0cmluZyYsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlk
Rmlyc3RMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKICAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOworICAgIHZvaWQg
ZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOwogICAgIHZvaWQgZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHVpbnQ2NF90IGZyYW1l
SUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlkRGlzcGxheUluc2Vj
dXJlQ29udGVudEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOwogICAgIHZvaWQgZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDEw
NjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4JKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdl
UHJveHkgewogICAgIERpZEZpbmlzaExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJL
aXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQogICAgIERpZEZp
cnN0TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKICAgICBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRhKQorICAgIERpZE5ld0ZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dChXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJE
YXRhKQogICAgIERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIHVybCwgV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKICAgICBEaWRSZW1vdmVGcmFtZUZyb21I
aWVyYXJjaHkodWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNz
YWdlRW5jb2RlciB1c2VyRGF0YSkKICAgICBEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIFdURjo6U3RyaW5nIHVybCwgV1RGOjpTdHJpbmcgdW5yZWFjaGFi
bGVVUkwsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEp
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShyZXZpc2lvbiAx
MDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkU2FtZURv
Y3VtZW50TmF2aQogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWVD
YWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS0ZyYW1lUmVmIGZy
YW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRl
ZiB2b2lkICgqV0tQYWdlRGlkRmlyc3RMYXlvdXRGb3JGcmFtZUNhbGxiYWNrKShXS1BhZ2VSZWYg
cGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tUeXBlUmVmIHVzZXJEYXRhLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldLUGFnZURpZEZpcnN0VmlzdWFsbHlOb25FbXB0
eUxheW91dEZvckZyYW1lQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1l
LCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2
b2lkICgqV0tQYWdlRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2spKFdL
UGFnZVJlZiBwYWdlLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5Q2FsbGJh
Y2spKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEs
IGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudEZvckZyYW1lQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1l
UmVmIGZyYW1lLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwog
dHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWVDYWxsYmFj
aykoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLVHlwZVJlZiB1c2VyRGF0YSwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CkBAIC04NSw2ICs4Niw3IEBAIHN0cnVjdCBXS1BhZ2VM
b2FkZXJDbGllbnQgewogICAgIFdLUGFnZURpZFJlY2VpdmVUaXRsZUZvckZyYW1lQ2FsbGJhY2sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWU7CiAg
ICAgV0tQYWdlRGlkRmlyc3RMYXlvdXRGb3JGcmFtZUNhbGxiYWNrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaWRGaXJzdExheW91dEZvckZyYW1lOwogICAgIFdLUGFnZURpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lQ2FsbGJhY2sgICAgICAgICAgICAgICAgZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWU7CisgICAgV0tQYWdlRGlkTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICBkaWRO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQ7CiAgICAgV0tQYWdlRGlkUmVtb3ZlRnJhbWVG
cm9tSGllcmFyY2h5Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRSZW1vdmVG
cmFtZUZyb21IaWVyYXJjaHk7CiAgICAgV0tQYWdlRGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZv
ckZyYW1lQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICBkaWREaXNwbGF5SW5zZWN1cmVDb250
ZW50Rm9yRnJhbWU7CiAgICAgV0tQYWdlRGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWVDYWxs
YmFjayAgICAgICAgICAgICAgICAgICAgICAgICBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFt
ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2Mv
V0tCdW5kbGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMyOCwxMSBAQCB1aW50NjRfdCBX
S0J1bmRsZVBhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXCiAgICAgcmV0dXJuIHRvSW1wbChwYWdlUmVm
KS0+cmVuZGVyVHJlZVNpemUoKTsKIH0KIAordm9pZCBXS0J1bmRsZVBhZ2VTZXRQYWludGVkT2Jq
ZWN0c0NvdW50ZXJUaHJlc2hvbGQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIHVpbnQ2NF90IHRocmVz
aG9sZCkKK3sKKyAgICB0b0ltcGwocGFnZSktPnNldFBhaW50ZWRPYmplY3RzQ291bnRlclRocmVz
aG9sZCh0aHJlc2hvbGQpOworfQorCiB2b2lkIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRz
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBib29sIHRyYWNrUmVwYWludHMpCiB7CiAgICAgdG9J
bXBsKHBhZ2VSZWYpLT5zZXRUcmFja3NSZXBhaW50cyh0cmFja1JlcGFpbnRzKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oCShyZXZpc2lvbiAxMDYzNjgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOSBAQCBXS19FWFBPUlQg
dm9pZCBXS0J1bmRsZVBhZ2VTaW11bGF0ZU1vdXNlCiAKIFdLX0VYUE9SVCB1aW50NjRfdCBXS0J1
bmRsZVBhZ2VHZXRSZW5kZXJUcmVlU2l6ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiAKKy8vIEZJ
WE1FOiBUaGlzIGlzIHRlbXBvcmFyeS4gVWx0aW1hdGVseSBXZWJLaXQgc2hvdWxkIGNob29zZSB0
aGUgdGhyZXNob2xkIGl0c2VsZi4KK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldFBhaW50
ZWRPYmplY3RzQ291bnRlclRocmVzaG9sZChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgdWludDY0X3Qg
dGhyZXNob2xkKTsKKwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWlu
dHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIGJvb2wgdHJhY2tSZXBhaW50cyk7CiBXS19FWFBPUlQg
Ym9vbCBXS0J1bmRsZVBhZ2VJc1RyYWNraW5nUmVwYWludHMoV0tCdW5kbGVQYWdlUmVmIHBhZ2Up
OwogV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlUmVzZXRUcmFja2VkUmVwYWludHMoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAJ
KHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiAr
NTUyLDE4IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmkKICAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgSW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7CiB9CiAKK3ZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkKK3sK
KyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghd2ViUGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNlckRhdGE7CisK
KyAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dChJbmplY3Rl
ZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcih1c2VyRGF0YS5nZXQoKSkpKTsKK30KKwogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMYXlvdXQoKQogewogICAgIFdlYlBhZ2Uq
IHdlYlBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDYgKzkzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0
TGF5b3V0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkTGF5b3V0KCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFj
dGlvbiYpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODcsNiArNDg3
LDEzIEBAIHVpbnQ2NF90IFdlYlBhZ2U6OnJlbmRlclRyZWVTaXplKCkgY29uc3QKICAgICByZXR1
cm4gc2l6ZTsKIH0KIAordm9pZCBXZWJQYWdlOjpzZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJl
c2hvbGQodWludDY0X3QgdGhyZXNob2xkKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9wYWdlLT5zZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQodGhy
ZXNob2xkKTsKK30KKwogdm9pZCBXZWJQYWdlOjpzZXRUcmFja3NSZXBhaW50cyhib29sIHRyYWNr
UmVwYWludHMpCiB7CiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1haW5GcmFtZVZpZXcoKSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2
aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIHB1YmxpYzoKIAogICAgIFN0
cmluZyByZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpIGNvbnN0OwogICAgIHVpbnQ2
NF90IHJlbmRlclRyZWVTaXplKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYWludGVkT2JqZWN0c0Nv
dW50ZXJUaHJlc2hvbGQodWludDY0X3QpOwogCiAgICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhi
b29sKTsKICAgICBib29sIGlzVHJhY2tpbmdSZXBhaW50cygpIGNvbnN0OwpJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA2NDE5
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMDEtMzEgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM4MworICAgICAgICBBZGQgYSBk
aWZmZXJlbnQgZGlkRmlyc3RWaXN1YWxsTm9uRW1wdHlMYXlvdXQgaGV1cmlzdGljIHRvIGV4cGVy
aW1lbnQgd2l0aAorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8xMDcwOTU2MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWJLaXQyJ3MgV2ViTG9hZGVyQ2xpZW50IGhhcyBhIHRlbXBvcmFyeSBuZXcg
ZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGFjY291bnRlZCAKKyAgICAgICAgZm9yLgorICAgICAgICAq
IE1pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoLVtC
cm93c2VyV2luZG93Q29udHJvbGxlciBhd2FrZUZyb21OaWJdKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUpOgorCiAyMDEyLTAxLTMxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIG5yd3Q6IGZpeCB0aGUgbW9jayBwb3J0IHRvIHdvcmsgd2l0
aCBEcml2ZXJQcm94eSwgcmVmdGVzdHMKSW5kZXg6IFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93
c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL21h
Yy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCShyZXZpc2lvbiAxMDYzNjgpCisrKyBUb29scy9N
aW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpA
QCAtNTkzLDYgKzU5Myw3IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAgICAgIGRpZFJlY2Vp
dmVUaXRsZUZvckZyYW1lLAogICAgICAgICBkaWRGaXJzdExheW91dEZvckZyYW1lLAogICAgICAg
ICBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZSwKKyAgICAgICAgMCwgLy8g
ZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0CiAgICAgICAgIGRpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeSwKICAgICAgICAgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1l
LAogICAgICAgICBkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZSwKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc1LDYgKzM3NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFy
Z2MKICAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUKICAgICAgICAgMCwgLy8g
ZGlkRmlyc3RMYXlvdXRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JGcmFtZQorICAgICAgICAwLCAvLyBkaWROZXdGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXQKICAgICAgICAgMCwgLy8gZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5CiAg
ICAgICAgIDAsIC8vIGRpZEZhaWxUb0luaXRpYWxpemVQbHVnaW4KICAgICAgICAgMCwgLy8gZGlk
RGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lCg==
</data>
<flag name="review"
          id="126242"
          type_id="1"
          status="-"
          setter="sam"
    />
    <flag name="commit-queue"
          id="126243"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124973</attachid>
            <date>2012-02-01 11:11:39 -0800</date>
            <delta_ts>2012-02-01 11:32:05 -0800</delta_ts>
            <desc>New patch that addresses most of Sam&apos;s comments</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>31761</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEyLTAyLTAxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIGEgZGlmZmVyZW50IGRpZEZpcnN0
VmlzdWFsbE5vbkVtcHR5TGF5b3V0IGhldXJpc3RpYyB0byBleHBlcmltZW50IHdpdGgKKyAgICAg
ICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdv
YWwgaXMgdG8gcmUtdmFtcCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgdG8gYmUgbW9y
ZSBhY2N1cmF0ZS4gCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBoZXVyaXN0aWMgY2Fs
bGVkIGRpZE5ld0ZpcnN0VmlzdWFsbE5vbkVtcHR5TGF5b3V0IGFuZCAKKyAgICAgICAgbGVhdmVz
IHRoZSBvbGQgb25lIGZvciB0aGUgdGltZSBiZWluZy4gVGhhdCBpcyB0ZW1wb3JhcnkuCisKKyAg
ICAgICAgVGhlIGhldXJpc3RpYyBmb3IgZGlkTmV3Rmlyc3RWaXN1YWxsTm9uRW1wdHlMYXlvdXQg
aXMgdG8gY291bnQgcmVsZXZhbnQgCisgICAgICAgIHBhaW50ZWQgUmVuZGVyT2JqZWN0cyBvbiBQ
YWdlLgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnNldFBhaW50ZWRPYmplY3RzQ291bnRlclRo
cmVzaG9sZCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjphZGRSZWxldmFudFJlcGFpbnRlZE9i
amVjdCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3RhcnRDb3VudGluZ1JlcGFpbnRl
ZE9iamVjdHMpOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCisgICAgICAgIFN0YXJ0IGNv
dW50aW5nIHJlbGV2YW50IHBhaW50ZWQgUmVuZGVyT2JqZWN0cyBvbiB0aGUgcGFnZSBvbmNlIHRo
ZSBmaXJzdCAKKyAgICAgICAgbGF5b3V0IGlzIGNvbXBsZXRlLgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGVyZm9ybVBvc3RMYXlv
dXRUYXNrcyk6CisKKyAgICAgICAgTWFjaGluZXJ5IGZvciBmaXJpbmcgZGlkTmV3Rmlyc3RWaXN1
YWxsTm9uRW1wdHlMYXlvdXQuCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RW1wdHlGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWROZXdGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6ZGlkTmV3Rmlyc3RWaXN1YWxseU5v
bkVtcHR5TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlci5oOgorICAgICAgICAoRnJhbWVMb2FkZXIpOgorICAgICAgICAqIGxvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KToKKworICAgICAgICBUaGVz
ZSBSZW5kZXJPYmplY3RzIGFyZSB0aGUgb25lcyB0aGF0IHRoaXMgYXBpIGN1cnJlbnRseSBjb25z
aWRlciB0byBiZSAKKyAgICAgICAgcmVsZXZhbnQuIElmIHRoZWlyIHJlcGFpbnQgcmVjdHMgaW50
ZXJzZWN0IHdpdGggdGhlIHZpZXdSZWN0LCB0aGVuIHRoZXkgYXJlIAorICAgICAgICBhZGRlZCB0
byB0aGUgcmVsZXZhbnQgb2JqZWN0cyBzZXQgb24gdGhlIFBhZ2UuCisgICAgICAgICogcmVuZGVy
aW5nL0lubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVtYmVk
ZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVtYmVkZGVkT2JqZWN0Ojpw
YWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpwYWludFJlcGxhY2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVwbGFjZWQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlk
ZW8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlkZW86OnBhaW50UmVwbGFjZWQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKToKKwogMjAxMi0wMS0zMSAgQWRhbSBL
bGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24gc2hvdWxkIG5vdCBiZSBhIENvbnRhaW5lck5vZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29y
a2luZyBjb3B5KQpAQCAtNzc4LDYgKzc3OCw3IEBAIF9fWk43V2ViQ29yZTRQYWdlMjdzZXRKYXZh
U2NyaXB0VVJMc0FyZUEKIF9fWk43V2ViQ29yZTRQYWdlMzFzZXRDdXN0b21IVE1MVG9rZW5pemVy
Q2h1bmtTaXplRWkKIF9fWk43V2ViQ29yZTRQYWdlMzFzZXRDdXN0b21IVE1MVG9rZW5pemVyVGlt
ZURlbGF5RWQKIF9fWk43V2ViQ29yZTRQYWdlMzJzZXRNZW1vcnlDYWNoZUNsaWVudENhbGxzRW5h
YmxlZEViCitfX1pON1dlYkNvcmU0UGFnZTMzc2V0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNo
b2xkRXkKIF9fWk43V2ViQ29yZTRQYWdlMzdzZXRJbkxvd1F1YWxpdHlJbWFnZUludGVycG9sYXRp
b25Nb2RlRWIKIF9fWk43V2ViQ29yZTRQYWdlNmdvQmFja0V2CiBfX1pON1dlYkNvcmU0UGFnZThn
b1RvSXRlbUVQTlNfMTFIaXN0b3J5SXRlbUVOU18xM0ZyYW1lTG9hZFR5cGVFCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw2ICsy
OTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZCgp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0TGF5b3V0KCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkgeyB9
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0KCkgeyB9CiAKICAgICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3Qg
TmF2aWdhdGlvbkFjdGlvbiYpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hTaG93KCkgeyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOTksNiArMjM5OSwxMSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wCiAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KCk7CiB9CiAKK3ZvaWQgRnJhbWVMb2FkZXI6OmRpZE5ld0ZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dCgpCit7CisgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTmV3
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXI6OmZy
YW1lTG9hZENvbXBsZXRlZCgpCiB7CiAgICAgLy8gTm90ZTogQ2FuIGJlIGNhbGxlZCBtdWx0aXBs
ZSB0aW1lcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAx
MDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTc4LDcgKzE3OCwxMSBAQCBwdWJsaWM6CiAgICAgQ2FjaGVQb2xpY3kgc3VicmVz
b3VyY2VDYWNoZVBvbGljeSgpIGNvbnN0OwogCiAgICAgdm9pZCBkaWRGaXJzdExheW91dCgpOwor
CisgICAgLy8gRklYTUU6IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpIGFuZCBkaWRO
ZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKSBzaG91bGQgYmUgbWVyZ2VkLgorICAgIC8v
IFRoZSBvbmx5IHJlYXNvbiBmb3IgYm90aCB0byBleGlzdCBpcyB0byBleHBlcmltZW50IHdpdGgg
ZGlmZmVyZW50IGhldXJpc3RpY3MgZm9yIHRoZSB0aW1lIGJlaW5nLgogICAgIHZvaWQgZGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCk7CisgICAgdm9pZCBkaWROZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQoKTsKIAogICAgIHZvaWQgbG9hZGVkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2b2lkIHRlbGxDbGllbnRBYm91dFBhc3RNZW1vcnlD
YWNoZUxvYWRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw2ICsxNjEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTmV3Rmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCkgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZExheW91dCgpIHsgfQogCiAgICAgICAgIHZpcnR1YWwgRnJhbWUqIGRpc3BhdGNoQ3Jl
YXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgwLDYgKzIyODAsOCBAQCB2b2lkIEZy
YW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpCiAgICAgICAgIGlmIChtX2ZpcnN0TGF5
b3V0Q2FsbGJhY2tQZW5kaW5nKSB7CiAgICAgICAgICAgICBtX2ZpcnN0TGF5b3V0Q2FsbGJhY2tQ
ZW5kaW5nID0gZmFsc2U7CiAgICAgICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZGlkRmlyc3RM
YXlvdXQoKTsKKyAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQor
ICAgICAgICAgICAgICAgIHBhZ2UtPnN0YXJ0Q291bnRpbmdSZXBhaW50ZWRPYmplY3RzKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBhbHdheXMgc2VuZCB0aGlzIGV2
ZW50dWFsbHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw2ICsxODYs
NyBAQCBQYWdlOjpQYWdlKFBhZ2VDbGllbnRzJiBwYWdlQ2xpZW50cykKICAgICAsIG1fdmlzaWJp
bGl0eVN0YXRlKFBhZ2VWaXNpYmlsaXR5U3RhdGVWaXNpYmxlKQogI2VuZGlmCiAgICAgLCBtX2Rp
c3BsYXlJRCgwKQorICAgICwgbV9pc0NvdW50aW5nUmVwYWludGVkT2JqZWN0cyhmYWxzZSkKIHsK
ICAgICBpZiAoIWFsbFBhZ2VzKSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3IEhhc2hTZXQ8UGFn
ZSo+OwpAQCAtMTA4MCw2ICsxMDgxLDQ2IEBAIFBhZ2VWaXNpYmlsaXR5U3RhdGUgUGFnZTo6dmlz
aWJpbGl0eVN0YXQKIH0KICNlbmRpZgogCitzdGF0aWMgdWludDY0X3QgZ1BhaW50ZWRPYmplY3RD
b3VudGVyVGhyZXNob2xkID0gMDsKKwordm9pZCBQYWdlOjpzZXRQYWludGVkT2JqZWN0c0NvdW50
ZXJUaHJlc2hvbGQodWludDY0X3QgdGhyZXNob2xkKQoreworICAgIGdQYWludGVkT2JqZWN0Q291
bnRlclRocmVzaG9sZCA9IHRocmVzaG9sZDsKK30KKwordm9pZCBQYWdlOjpzdGFydENvdW50aW5n
UmVwYWludGVkT2JqZWN0cygpCit7CisgICAgbV9pc0NvdW50aW5nUmVwYWludGVkT2JqZWN0cyA9
IHRydWU7CisKKyAgICAvLyBDbGVhciB0aGUgSGFzaFNldCBpbiBjYXNlIHdlIGRpZG4ndCBoaXQg
dGhlIHRocmVzaG9sZCBsYXN0IHRpbWUuCisgICAgbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmpl
Y3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUGFnZTo6YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IEludFJlY3QmIG9iamVjdFBhaW50UmVjdCkKK3sK
KyAgICBpZiAoIW1faXNDb3VudGluZ1JlcGFpbnRlZE9iamVjdHMpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaWYgdGhlcmUgaXMgbm8gY291
bnRlciB0aHJlc2hvbGQuCisgICAgaWYgKCFnUGFpbnRlZE9iamVjdENvdW50ZXJUaHJlc2hvbGQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBvYmplY3RzIGFyZSBvbmx5IHJlbGV2YW50
IGlmIHRoZXkgYXJlIGJlaW5nIHBhaW50ZWQgd2l0aGluIHRoZSB2aWV3UmVjdCgpLgorICAgIGlm
IChSZW5kZXJWaWV3KiB2aWV3ID0gb2JqZWN0LT52aWV3KCkpIHsKKyAgICAgICAgaWYgKCFvYmpl
Y3RQYWludFJlY3QuaW50ZXJzZWN0cyh2aWV3LT52aWV3UmVjdCgpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3JlbGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHMuYWRkKG9i
amVjdCk7CisKKyAgICBpZiAobV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzLnNpemUoKSA9
PSBzdGF0aWNfY2FzdDxpbnQ+KGdQYWludGVkT2JqZWN0Q291bnRlclRocmVzaG9sZCkpIHsKKyAg
ICAgICAgbV9pc0NvdW50aW5nUmVwYWludGVkT2JqZWN0cyA9IGZhbHNlOworICAgICAgICBtX3Jl
bGV2YW50UGFpbnRlZFJlbmRlck9iamVjdHMuY2xlYXIoKTsKKyAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IG1haW5GcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5kaWROZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKKyAgICB9Cit9CisKIFBhZ2U6OlBhZ2VDbGll
bnRzOjpQYWdlQ2xpZW50cygpCiAgICAgOiBjaHJvbWVDbGllbnQoMCkKICAgICAsIGNvbnRleHRN
ZW51Q2xpZW50KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBvaW50ZXJMb2NrQ29udHJvbGxlcjsKICAg
ICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgUmFuZ2U7CisgICAgY2xhc3MgUmVu
ZGVyT2JqZWN0OwogICAgIGNsYXNzIFJlbmRlclRoZW1lOwogICAgIGNsYXNzIFZpc2libGVTZWxl
Y3Rpb247CiAgICAgY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CkBAIC0zNTIsNiArMzUzLDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAgICAgICAgIFBsYXRmb3JtRGlzcGxheUlEIGRp
c3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlEOyB9CisKKyAgICAgICAgdm9pZCBz
ZXRQYWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQodWludDY0X3QgdGhyZXNob2xkKTsKKyAg
ICAgICAgdm9pZCBzdGFydENvdW50aW5nUmVwYWludGVkT2JqZWN0cygpOworICAgICAgICB2b2lk
IGFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3Qm
IG9iamVjdFBhaW50UmVjdCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQg
aW5pdEdyb3VwKCk7CkBAIC00NjksNiArNDc0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBQYWdlVmlzaWJpbGl0eVN0YXRlIG1fdmlzaWJpbGl0eVN0YXRlOwogI2VuZGlmCiAgICAg
ICAgIFBsYXRmb3JtRGlzcGxheUlEIG1fZGlzcGxheUlEOworCisgICAgICAgIEhhc2hTZXQ8UmVu
ZGVyT2JqZWN0Kj4gbV9yZWxldmFudFBhaW50ZWRSZW5kZXJPYmplY3RzOworICAgICAgICBib29s
IG1faXNDb3VudGluZ1JlcGFpbnRlZE9iamVjdHM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJldmlz
aW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIklubGluZUJveC5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lRmxvd0JveC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJBcmVuYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCkBAIC0yMTEsNiArMjEzLDExIEBAIHZvaWQgSW5saW5lQm94
OjpwYWludChQYWludEluZm8mIHBhaW50SW4KICAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
Rm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFt
ZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAg
ICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHJlbmRlcmVyKCksIHBhaW50SW5m
by5yZWN0KTsKKyAgICB9CisKICAgICBMYXlvdXRQb2ludCBjaGlsZFBvaW50ID0gcGFpbnRPZmZz
ZXQ7CiAgICAgaWYgKHBhcmVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSAvLyBGYXN0ZXIgdGhhbiBjYWxsaW5nIGNvbnRhaW5pbmdCbG9jaygp
LgogICAgICAgICBjaGlsZFBvaW50ID0gcmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZs
aXBGb3JXcml0aW5nTW9kZUZvckNoaWxkKHRvUmVuZGVyQm94KHJlbmRlcmVyKCkpLCBjaGlsZFBv
aW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJ
KHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk2LDYgKzQ5NiwxMSBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIC8vIFdoZW4gb25seSBwYWludGlu
ZyB0aGUgc2VsZWN0aW9uLCBkb24ndCBib3RoZXIgdG8gcGFpbnQgaWYgdGhlcmUgaXMgbm9uZS4K
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJlbmRlcmVyKCktPmZy
YW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgcGFnZS0+YWRkUmVsZXZhbnRSZXBhaW50ZWRPYmplY3QocmVuZGVyZXIoKSwgcGFpbnRJ
bmZvLnJlY3QpOworICAgIH0KKwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlv
bikgewogICAgICAgICBpZiAocmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAhPSBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsK
ICAgICAgICAgICAgIC8vIE1ha2UgdGhlIHZpc2libGUgZnJhZ21lbnQgb2YgdGV4dCBodWcgdGhl
IGVkZ2UgY2xvc2VzdCB0byB0aGUgcmVzdCBvZiB0aGUgcnVuIGJ5IG1vdmluZyB0aGUgb3JpZ2lu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9i
amVjdC5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsMTEg
QEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIGZsb2F0IHRl
eHRXaWR0aDsKICAgICBpZiAoIWdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KHBhaW50T2Zmc2V0
LCBjb250ZW50UmVjdCwgcGF0aCwgcmVwbGFjZW1lbnRUZXh0UmVjdCwgZm9udCwgcnVuLCB0ZXh0
V2lkdGgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+
ZnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAg
ICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzLCBwYWludEluZm8u
cmVjdCk7CisgICAgfQogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqY29udGV4dCk7CiAgICAgY29udGV4dC0+Y2xpcChjb250ZW50UmVjdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lv
biAxMDYzNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAKQEAgLTU2LDYgKzU4LDExIEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6
cmVxdWlyZXNMYXllcigpIGMKIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRS
ZXBhaW50ZWRPYmplY3QodGhpcywgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KKwogICAgIExheW91
dFJlY3QgcmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7CiAgICAgcmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOwogICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gc3R5bGUoKS0+aW1hZ2VSZW5kZXJp
bmcoKSA9PSBJbWFnZVJlbmRlcmluZ09wdGltaXplQ29udHJhc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
OCw2ICszMjgsMTEgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgog
ICAgICAgICBpZiAoIWltZyB8fCBpbWctPmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+YWRkUmVsZXZhbnRS
ZXBhaW50ZWRPYmplY3QodGhpcywgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KKwogI2lmIFBMQVRG
T1JNKE1BQykKICAgICAgICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYm
ICFwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICAgICAgcGFp
bnRDdXN0b21IaWdobGlnaHQodG9Qb2ludChwYWludE9mZnNldCAtIGxvY2F0aW9uKCkpLCBzdHls
ZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQsMTEg
QEAgdm9pZCBSZW5kZXJSZWdpb246OnBhaW50UmVwbGFjZWQoUGFpbnRJbgogICAgIGlmICghbV9m
bG93VGhyZWFkIHx8ICFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChGcmFt
ZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0
KHRoaXMsIHBhaW50SW5mby5yZWN0KTsKKyAgICB9CisKICNpZm5kZWYgTkRFQlVHCiAgICAgbV9p
bnNpZGVSZWdpb25QYWludCA9IHRydWU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBs
YWNlZC5oIgogCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCkBAIC0xMzUsNiArMTM3LDExIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6
OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgZHJhd1NlbGVjdGlvblRpbnQgPSBmYWxzZTsK
ICAgICB9CiAKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5hZGRS
ZWxldmFudFJlcGFpbnRlZE9iamVjdCh0aGlzLCBwYWludEluZm8ucmVjdCk7CisgICAgfQorCiAg
ICAgYm9vbCBjb21wbGV0ZWx5Q2xpcHBlZE91dCA9IGZhbHNlOwogICAgIGlmIChzdHlsZSgpLT5o
YXNCb3JkZXJSYWRpdXMoKSkgewogICAgICAgICBMYXlvdXRSZWN0IGJvcmRlclJlY3QgPSBMYXlv
dXRSZWN0KGFkanVzdGVkUGFpbnRPZmZzZXQsIHNpemUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEx
ICsyOSwxMyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFZpZGVvRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
IApAQCAtMjA3LDYgKzIwOSwxMSBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mCiAgICAgICAgIHJldHVybjsKICAgICByZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAK
KyAgICBpZiAoRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKSkgeworICAgICAgICBpZiAoUGFn
ZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwYWdlLT5hZGRSZWxldmFudFJl
cGFpbnRlZE9iamVjdCh0aGlzLCBwYWludEluZm8ucmVjdCk7CisgICAgfQorCiAgICAgaWYgKGRp
c3BsYXlpbmdQb3N0ZXIpCiAgICAgICAgIHBhaW50SW50b1JlY3QocGFpbnRJbmZvLmNvbnRleHQs
IHJlY3QpOwogICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPnZpZXcoKSAmJiBkb2N1bWVudCgpLT52
aWV3KCktPnBhaW50QmVoYXZpb3IoKSAmIFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Um9vdC5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw2ICsyNDUsMTEgQEAg
dm9pZCBSZW5kZXJTVkdSb290OjpwYWludFJlcGxhY2VkKFBhaW50SQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIGlmIChGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpKSB7Cisg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2Ut
PmFkZFJlbGV2YW50UmVwYWludGVkT2JqZWN0KHRoaXMsIHBhaW50SW5mby5yZWN0KTsKKyAgICB9
CisKICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgUGFpbnRJbmZvIGJlY2F1c2UgYXBwbHlUcmFu
c2Zvcm0gd2lsbCBtb2RpZnkgdGhlIGRhbWFnZSByZWN0LgogICAgIFBhaW50SW5mbyBjaGlsZFBh
aW50SW5mbyhwYWludEluZm8pOwogICAgIGNoaWxkUGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQxOSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAyLTAxICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRkIGEgZGlmZmVyZW50IGRpZEZpcnN0
VmlzdWFsbE5vbkVtcHR5TGF5b3V0IGhldXJpc3RpYyB0byBleHBlcmltZW50IHdpdGgKKyAgICAg
ICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTA3MDk1NjA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFjaGlu
ZXJ5IGZvciBkaWROZXdGaXJzdFZpc3VhbGxOb25FbXB0eUxheW91dC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxvYWRlckNsaWVudDo6ZGlkTmV3Rmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYkxvYWRlckNsaWVudC5oOgorICAgICAgICAoV2ViTG9hZGVyQ2xpZW50KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpkaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJQ
YWdlUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCk6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50KToKKworICAgICAgICBUaGlzIHRlbXBvcmFy
eSBBUEkgYWxsb3dzIHRoZSBjbGllbnQgdG8gc3BlY2lmeSB0aGUgdGhyZXNob2xkIGZvciB0aGUg
cGFpbnRlZCAKKyAgICAgICAgb2JqZWN0cyBjb3VudGVyIG9uIFBhZ2UuIFRoaXMgaXMgdGVtcG9y
YXJ5LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlLmNwcDoKKyAgICAgICAgKFdLQnVuZGxlUGFnZVNldFBhaW50ZWRPYmplY3RzQ291bnRlclRo
cmVzaG9sZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVBhZ2VQcml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRQYWludGVkT2JqZWN0c0NvdW50ZXJU
aHJlc2hvbGQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViUGFnZSk6CisKIDIwMTItMDEtMzEgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUGx1Z2luUHJvY2VzcyBzaG91
bGQgYmUgYWJsZSB0byB1c2UgcmVtb3RlIG9wZW4gYW5kIHNhdmUgcGFuZWxzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTA2
MzY4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxvYWRlckNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTQgQEAgdm9pZCBXZWJMb2FkZXJDbGllbnQ6OmRp
ZEZpcnN0VmlzdWFsbHlObwogICAgIG1fY2xpZW50LmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvckZyYW1lKHRvQVBJKHBhZ2UpLCB0b0FQSShmcmFtZSksIHRvQVBJKHVzZXJEYXRhKSwg
bV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKK3ZvaWQgV2ViTG9hZGVyQ2xpZW50OjpkaWROZXdG
aXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoV2ViUGFnZVByb3h5KiBwYWdlLCBBUElPYmplY3Qq
IHVzZXJEYXRhKQoreworICAgIGlmICghbV9jbGllbnQuZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWROZXdGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQodG9BUEkocGFnZSksIHRvQVBJKHVzZXJEYXRhKSwgbV9jbGll
bnQuY2xpZW50SW5mbyk7Cit9CisKIHZvaWQgV2ViTG9hZGVyQ2xpZW50OjpkaWRSZW1vdmVGcmFt
ZUZyb21IaWVyYXJjaHkoV2ViUGFnZVByb3h5KiBwYWdlLCBXZWJGcmFtZVByb3h5KiBmcmFtZSwg
QVBJT2JqZWN0KiB1c2VyRGF0YSkKIHsKICAgICBpZiAoIW1fY2xpZW50LmRpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJMb2FkZXJD
bGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTG9hZGVy
Q2xpZW50LmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKFdlYlBhZ2VQcm94
eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3QqKTsKICAgICB2b2lkIGRpZFJ1bkluc2VjdXJl
Q29udGVudEZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUElPYmplY3Qq
KTsKICAgICB2b2lkIGRpZERldGVjdFhTU0ZvckZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1l
UHJveHkqLCBBUElPYmplY3QqKTsKKworICAgIC8vIEZJWE1FOiBkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JGcmFtZSBhbmQgZGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
IHNob3VsZCBiZSBtZXJnZWQuCisgICAgLy8gVGhlIG9ubHkgcmVhc29uIGZvciBib3RoIHRvIGV4
aXN0IGlzIHRvIGV4cGVyaW1lbnQgd2l0aCBkaWZmZXJlbnQgaGV1cmlzdGljcyBmb3IgdGhlIHRp
bWUgYmVpbmcuCisgICAgdm9pZCBkaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoV2Vi
UGFnZVByb3h5KiwgQVBJT2JqZWN0Kik7CiAgICAgCiAgICAgYm9vbCBjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlSW5GcmFtZShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5
KiwgV2ViUHJvdGVjdGlvblNwYWNlKik7CiAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VJbkZyYW1lKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NjYsNiArMTg2Niwx
NiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtCiAgICAgbV9sb2Fk
ZXJDbGllbnQuZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUodGhpcywgZnJh
bWUsIHVzZXJEYXRhLmdldCgpKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmRpZE5ld0ZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dChDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50
cykKK3sKKyAgICBSZWZQdHI8QVBJT2JqZWN0PiB1c2VyRGF0YTsKKyAgICBXZWJDb250ZXh0VXNl
ck1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VEZWNvZGVyKHVzZXJEYXRhLCBtX3Byb2Nlc3MtPmNvbnRl
eHQoKSk7CisgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShtZXNzYWdlRGVjb2RlcikpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbG9hZGVyQ2xpZW50LmRpZE5ld0ZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dCh0aGlzLCB1c2VyRGF0YS5nZXQoKSk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKiBhcmd1bWVudHMpCiB7CiAgICAgUmVmUHRyPEFQSU9iamVjdD4gdXNl
ckRhdGE7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZp
c2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY1NSw2ICs2NTUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlk
UmVjZWl2ZVRpdGxlRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCBkaWRGaXJzdExheW91dEZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQg
ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CisgICAgdm9pZCBkaWROZXdGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXQoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCBkaWRS
ZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkodWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CiAgICAgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUo
dWludDY0X3QgZnJhbWVJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCBk
aWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBDb3JlSVBDOjpB
cmd1bWVudERlY29kZXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDYgKzEwNiw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkRmlu
aXNoTG9hZEZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVV
c2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCiAgICAgRGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh1
aW50NjRfdCBmcmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVy
IHVzZXJEYXRhKQogICAgIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIg
dXNlckRhdGEpCisgICAgRGlkTmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgdXNlckRhdGEpCiAgICAgRGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJ
RCwgV1RGOjpTdHJpbmcgdXJsLCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNv
ZGVyIHVzZXJEYXRhKQogICAgIERpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeSh1aW50NjRfdCBm
cmFtZUlELCBXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyIHVzZXJEYXRh
KQogICAgIERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwg
V1RGOjpTdHJpbmcgdXJsLCBXVEY6OlN0cmluZyB1bnJlYWNoYWJsZVVSTCwgV2ViS2l0OjpJbmpl
Y3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlciB1c2VyRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsNyBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRSZWNlaXZlQXV0aGVudGljCiB0eXBlZGVm
IHZvaWQgKCpXS1BhZ2VEaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3RDYWxsYmFjaykoV0tQYWdlUmVm
IHBhZ2UsIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBhZGRlZEl0ZW0sIFdLQXJyYXlSZWYgcmVt
b3ZlZEl0ZW1zLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgYm9vbCAoKldLUGFn
ZVNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0
eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWRGYWlsVG9Jbml0aWFsaXplUGx1Z2luQ2FsbGJhY2spKFdL
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBtaW1lVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7Cit0eXBlZGVmIHZvaWQgKCpXS1BhZ2VEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS1BhZ2VMb2FkZXJDbGllbnQgewogICAgIGludCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVyc2lvbjsKQEAgLTEwNiw2ICsxMDcsOCBAQCBzdHJ1Y3QgV0tQYWdlTG9hZGVyQ2xp
ZW50IHsKIAogICAgIC8vIFZlcnNpb24gMQogICAgIFdLUGFnZURpZERldGVjdFhTU0ZvckZyYW1l
Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkRGV0ZWN0WFNTRm9y
RnJhbWU7CisKKyAgICBXS1BhZ2VEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRDYWxs
YmFjayAgICAgICAgICAgICAgICAgICAgIGRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dDsKIH07CiB0eXBlZGVmIHN0cnVjdCBXS1BhZ2VMb2FkZXJDbGllbnQgV0tQYWdlTG9hZGVyQ2xp
ZW50OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiAxMDYz
NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsMTEgQEAgdWludDY0
X3QgV0tCdW5kbGVQYWdlR2V0UmVuZGVyVHJlZVNpemUoVwogICAgIHJldHVybiB0b0ltcGwocGFn
ZVJlZiktPnJlbmRlclRyZWVTaXplKCk7CiB9CiAKK3ZvaWQgV0tCdW5kbGVQYWdlU2V0UGFpbnRl
ZE9iamVjdHNDb3VudGVyVGhyZXNob2xkKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCB1aW50NjRfdCB0
aHJlc2hvbGQpCit7CisgICAgdG9JbXBsKHBhZ2UpLT5zZXRQYWludGVkT2JqZWN0c0NvdW50ZXJU
aHJlc2hvbGQodGhyZXNob2xkKTsKK30KKwogdm9pZCBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBh
aW50cyhXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgYm9vbCB0cmFja1JlcGFpbnRzKQogewogICAg
IHRvSW1wbChwYWdlUmVmKS0+c2V0VHJhY2tzUmVwYWludHModHJhY2tSZXBhaW50cyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZVByaXZhdGUuaAkocmV2aXNpb24gMTA2MzY4
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVBhZ2VQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDkgQEAgV0tfRVhQ
T1JUIHZvaWQgV0tCdW5kbGVQYWdlU2ltdWxhdGVNb3VzZQogCiBXS19FWFBPUlQgdWludDY0X3Qg
V0tCdW5kbGVQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UpOwogCisv
LyBGSVhNRTogVGhpcyBpcyB0ZW1wb3JhcnkuIFVsdGltYXRlbHkgV2ViS2l0IHNob3VsZCBjaG9v
c2UgdGhlIHRocmVzaG9sZCBpdHNlbGYuCitXS19FWFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VTZXRQ
YWludGVkT2JqZWN0c0NvdW50ZXJUaHJlc2hvbGQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIHVpbnQ2
NF90IHRocmVzaG9sZCk7CisKIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVNldFRyYWNrc1Jl
cGFpbnRzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBib29sIHRyYWNrUmVwYWludHMpOwogV0tfRVhQ
T1JUIGJvb2wgV0tCdW5kbGVQYWdlSXNUcmFja2luZ1JlcGFpbnRzKFdLQnVuZGxlUGFnZVJlZiBw
YWdlKTsKIFdLX0VYUE9SVCB2b2lkIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJlcGFpbnRzKFdL
QnVuZGxlUGFnZVJlZiBwYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
Y3BwCShyZXZpc2lvbiAxMDYzNjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUy
LDYgKzU1MiwxOCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpCiAg
ICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdFZpc3VhbGx5
Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIEluamVjdGVkQnVuZGxl
VXNlck1lc3NhZ2VFbmNvZGVyKHVzZXJEYXRhLmdldCgpKSkpOwogfQogCit2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgp
Cit7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXdl
YlBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxBUElPYmplY3Q+IHVzZXJEYXRh
OworCisgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCisgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoSW5q
ZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXIodXNlckRhdGEuZ2V0KCkpKSk7Cit9CisKIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTGF5b3V0KCkKIHsKICAgICBXZWJQ
YWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuaAkocmV2aXNpb24gMTA2MzY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw2ICs5Myw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRG
aXJzdExheW91dCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZExheW91dCgpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IFdlYkNvcmU6Ok5hdmlnYXRp
b25BY3Rpb24mKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg3LDYg
KzQ4NywxMyBAQCB1aW50NjRfdCBXZWJQYWdlOjpyZW5kZXJUcmVlU2l6ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIHNpemU7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6c2V0UGFpbnRlZE9iamVjdHNDb3VudGVy
VGhyZXNob2xkKHVpbnQ2NF90IHRocmVzaG9sZCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fcGFnZS0+c2V0UGFpbnRlZE9iamVjdHNDb3VudGVyVGhyZXNob2xk
KHRocmVzaG9sZCk7Cit9CisKIHZvaWQgV2ViUGFnZTo6c2V0VHJhY2tzUmVwYWludHMoYm9vbCB0
cmFja1JlcGFpbnRzKQogewogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtYWluRnJhbWVWaWV3
KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJ
KHJldmlzaW9uIDEwNjM2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgcmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24oKSBjb25zdDsKICAgICB1
aW50NjRfdCByZW5kZXJUcmVlU2l6ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0UGFpbnRlZE9iamVj
dHNDb3VudGVyVGhyZXNob2xkKHVpbnQ2NF90KTsKIAogICAgIHZvaWQgc2V0VHJhY2tzUmVwYWlu
dHMoYm9vbCk7CiAgICAgYm9vbCBpc1RyYWNraW5nUmVwYWludHMoKSBjb25zdDsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEw
NjQxOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTAyLTAxICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczODMKKyAgICAgICAgQWRk
IGEgZGlmZmVyZW50IGRpZEZpcnN0VmlzdWFsbE5vbkVtcHR5TGF5b3V0IGhldXJpc3RpYyB0byBl
eHBlcmltZW50IHdpdGgKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTA3MDk1NjA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViS2l0MidzIFdlYkxvYWRlckNsaWVudCBoYXMgYSB0ZW1wb3Jhcnkg
bmV3IGZ1bmN0aW9uIHRoYXQgbXVzdCBiZSBhY2NvdW50ZWQgCisgICAgICAgIGZvci4KKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAgICAg
KC1bQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIgYXdha2VGcm9tTmliXSk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKwogMjAxMi0wMS0zMSAgRGlyayBQcmFua2UgIDxkcHJhbmtl
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBucnd0OiBmaXggdGhlIG1vY2sgcG9ydCB0byB3b3Jr
IHdpdGggRHJpdmVyUHJveHksIHJlZnRlc3RzCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMv
QnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nl
ci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkocmV2aXNpb24gMTA2MzY4KQorKysgVG9v
bHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29w
eSkKQEAgLTYwOCw2ICs2MDgsNyBAQCAtICh2b2lkKWF3YWtlRnJvbU5pYgogICAgICAgICAwLCAv
LyBzaG91bGRHb1RvQmFja0ZvcndhcmRJdGVtCiAgICAgICAgIDAsICAvLyBkaWRGYWlsVG9Jbml0
aWFsaXplUGx1Z2luCiAgICAgICAgIGRpZERldGVjdFhTU0ZvckZyYW1lLAorICAgICAgICAwLCAv
LyBkaWROZXdGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQKICAgICB9OwogICAgIFdLUGFnZVNl
dFBhZ2VMb2FkZXJDbGllbnQoX3dlYlZpZXcucGFnZVJlZiwgJmxvYWRDbGllbnQpOwogICAgIApJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDEwNjM2OCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZShpbnQgYXJnYwogICAgICAgICAwLCAvLyBkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QK
ICAgICAgICAgMCwgLy8gc2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0KICAgICAgICAgMCwg
Ly8gZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJhbWUKLSAgICAgICAgMCAgLy8gZGlkRGV0ZWN0
WFNTRm9yRnJhbWUKKyAgICAgICAgMCwgIC8vIGRpZERldGVjdFhTU0ZvckZyYW1lCisgICAgICAg
IDAgIC8vIGRpZE5ld0ZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dAogICAgIH07CiAgICAgV0tQ
YWdlU2V0UGFnZUxvYWRlckNsaWVudChtX21haW5XZWJWaWV3LT5wYWdlKCksICZwYWdlTG9hZGVy
Q2xpZW50KTsKIH0K
</data>
<flag name="review"
          id="126369"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>