<?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>4582</bug_id>
          
          <creation_ts>2005-08-22 03:54:56 -0700</creation_ts>
          <short_desc>Editing delegates need more selection state</short_desc>
          <delta_ts>2022-11-17 16:46:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Duncan Wilcox">duncan</reporter>
          <assigned_to name="Duncan Wilcox">duncan</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>17110</commentid>
    <comment_count>0</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-22 03:54:56 -0700</bug_when>
    <thetext>khtml::Selection can represent both selection range and selection direction, through m_start/m_end 
and m_base/m_extent positions. DOMRange instead only represents a range, and not a direction.

This is an issue when during a text selection done with a mouse drag, in response to a 
webView:shouldChangeSelectedDOMRange:toDOMRange:affinity:stillSelecting:, a delegate 
programmatically sets a new selection with -[WebView setSelectedDOMRange:affinity:].

If the mouse selection is backwards, the selection direction isn&apos;t preserved in its DOMRange 
incarnation, and the mouse selection basically doesn&apos;t work.

This is easy enough to test, create a cocoa app in xcode, replace main.m with the following code and 
add the WebKit.framework to the project:

----------
#import &lt;Cocoa/Cocoa.h&gt;
#import &lt;WebKit/WebKit.h&gt;

@interface Test : NSObject
@end

@implementation Test
- (BOOL)webView:(WebView *)webView shouldChangeSelectedDOMRange:(DOMRange *)currentRange 
toDOMRange:(DOMRange *)proposedRange affinity:(NSSelectionAffinity)selectionAffinity stillSelecting:
(BOOL)flag
{
    NSLog(@&quot;shouldChangeSelectedDOMRange: %ld-%ld&quot;, [proposedRange startOffset], [proposedRange 
endOffset]);
    [webView setSelectedDOMRange:proposedRange affinity:selectionAffinity];
    return NO;
}
@end

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Test *t = [[Test alloc] init];
    [NSApplication sharedApplication];
    NSRect contentRect = NSMakeRect(200, 180, 300, 300);
    NSRect wvRect = NSMakeRect(0, 0, 300, 300);
    NSWindow *w = [[NSWindow alloc] initWithContentRect:contentRect
        styleMask:NSMiniaturizableWindowMask | NSClosableWindowMask | NSTitledWindowMask
        backing:NSBackingStoreBuffered defer:NO];
    WebView *wv = [[WebView alloc] initWithFrame:wvRect];
    [[w contentView] addSubview:wv];
    [wv setEditable:YES];
    [wv setEditingDelegate:t];
    [[wv mainFrame] loadHTMLString:@&quot;&lt;html&gt;&lt;body&gt;&lt;p&gt;select me backwards! select me backwards! 
select me backwards!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;&quot; baseURL:nil];
    [w makeKeyAndOrderFront:nil];
    [NSApp run];
    return 0;
}
----------

With this app select text backwards and you&apos;ll see the selection sort of vanishing while you drag.

Also, with a word/line/paragraph granularity, m_start/m_end are expanded to the actual selection, 
while m_base/m_extent represent what the mouse actually dragged over. Not preserving this 
information through the delegate has other selection side effects.


The attached patch adds a WebSelection class that carries over all needed information, delegates 
methods are also replaced with new ones (the old ones are called for compatibility).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17111</commentid>
    <comment_count>1</comment_count>
      <attachid>3513</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-22 04:00:29 -0700</bug_when>
    <thetext>Created attachment 3513
patch

At this time I&apos;m submitting this patch for review to solicit comments, things
to look into:

- a few new APIs, do they look ok?

- I&apos;m not sure of the location of files (should WebSelection.* go in
WebCore/kwq/?)

- the other editing delegate callbacks might use WebSelection

- Darin mentioned that classes should be a thin Obj-C wrapper over a C++ class,
I suppose I can refactor that, but where would the C++ class go in the tree?

- would the C++ class contain a khtml::Selection? This would perhaps let us
improve the WebSelection API by making expandedRange read-only, update
automatically when changing baseRange and granularity (via the underlying
khtml::Selection)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17121</commentid>
    <comment_count>2</comment_count>
      <attachid>3513</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-22 08:17:25 -0700</bug_when>
    <thetext>Comment on attachment 3513
patch

Looks like a good direction, and pretty good patch. Here is a list of comments
based on my read-through of the patch:

1) Since &quot;Web&quot; is the prefix, analogous to &quot;NS&quot;, the functions to create
WebSelection can just be called, e.g., &quot;selectionWithBaseRange&quot; rather than
&quot;webSelectionWIthBaseRange&quot;.

2) I&apos;m not sure comfortable with the &quot;expanded range&quot; terminology -- &quot;expand
using granularity&quot; was an internal name until this point, and not an API
concept. How is this notion handled in NSTextView? Is there a better name for
this? Can this just be called the &quot;range&quot; without an adjective? Or will that be
even more confusing?

3) webSelectionWithBaseRange needs to autorelease its result.

4) The setBaseRange: method should use the &quot;retain before release&quot; idiom rather
that doing the &quot;!=&quot; comparison. Same for the other setter.

5) Please don&apos;t include commented-out printf statements.

6) I think the direction() method of khtml::Selection should be a boolean with
a descriptive name rather than having a special meaning for 0 vs. 1. Given the
name direction() it&apos;s not clear, for example, whether it would be 0 vs. 1 or -1
vs. 1 or something else.

7) The import of &quot;WebViewPrivate.h&quot; should not be right up against the
declaration that follows it (needs a blank line).

8) The WebEditingDelegatePendingPublic should be in a
WebEditingDelegateInternal.h header. The current patch has it appearing in two
places.

9) The big ? : expression in shouldChangeSelectionTo would be easier to read if
it was written as an if statement. Also, I&apos;d like to see the editingDelegate in
a local variable. Finally, if we&apos;re going to be doing one respondsToSelector
call, I suggest we do two and don&apos;t bother with the &quot;forwarder&quot;.

10) I don&apos;t like the idea that the WebSelection has a separate expanded range
and granularity. When it&apos;s created in any way expect when making it from a
khtml::Selection you can end up with an expanded range that is inconsistent
with the claimed granularity, such as in the calls that use unionDOMRange. Is
there something we can do to eliminate this? Or can you prove to me that it&apos;s
not a problem?

11) The &quot;shouldChangeSelectedRange&quot; code should be shared between the bridge
and WebView. In general, it&apos;s good to have the bridge call over to WebView
methods and remove bridge code.

12) This comment:

+// These replace setSelectedDOMRange:affinity: and selectedDOMRange, in
interface WebView (WebViewEditing)

is slightly misleading, since the old calls will continue to work,
selectionDOMRange (at least) is still useful, and the calls also replace the
ones that get/set affinity and granularity.

This looks to me like it&apos;s going to be a great change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17129</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-22 08:56:55 -0700</bug_when>
    <thetext>Duncan, I didn&apos;t see your questions in the bug, so let me answer those now:

&gt; a few new APIs, do they look ok?

Seem fine to me.

&gt; I&apos;m not sure of the location of files (should WebSelection.* go in WebCore/kwq/?)

WebSelection.* should be in WebView.subproj and should be in WebKit, not WebCore. But this does beg 
the question of how we can get selection information across the bridge, since we can&apos;t use 
WebSelection.

Maybe WebSelection needs to be handled like the DOM*.h headers; in WebCore, but then copied by 
WebKit.

The other option is to start using C++ classes in the bridge API and add some C++ code on the WebKit 
side. This is more forward-looking since we want to move code from WebKit to WebCore over time and 
have minimal Objective-C in WebCore.

This will require a bit of thought.

&gt; the other editing delegate callbacks might use WebSelection

Yes, I think we should do new versions of all APIs involving selections.

&gt; Darin mentioned that classes should be a thin Obj-C wrapper over a C++ class, I suppose I can 
refactor that, but where would the C++ class go in the tree?

The C++ class would go somewhere in KHTML. What I don&apos;t know is how we&apos;d handle this when 
bridging. Usually we have to figure out some Objective-C way of getting something over the bridge, 
since we don&apos;t like to use C++ for the interface between WebCore and WebKit. I think this is something 
we&apos;re going to have to change, and the issue is not specific to this patch.

&gt; Would the C++ class contain a khtml::Selection?

Probably not.

&gt; This would perhaps let us improve the WebSelection API by making expandedRange read-only, 
update automatically when changing baseRange and granularity (via the underlying
khtml::Selection)

I can see how this is desirable, but khtml::Selection comes with additional unwanted stuff. I think we&apos;d 
need to do some refactoring if we wanted to go in this direction.

Sorry that some of these is tentative; there are some tricky, albeit minor, design issues here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17173</commentid>
    <comment_count>4</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-23 00:49:13 -0700</bug_when>
    <thetext>I think I have addressed most issues in my tree. I think the following is the best way to address the API 
consistency issues you raise:

- extract the code that expands granularity in khtml::Selection::validate, into WebCore/khtml/editing/
granularity.cpp|h

- create a C++ class that would mirror WebSelection in WebCore/khtml/editing/webselection.cpp|h 

- have -[WebSelection setBaseRange] and -[WebSelection setGranularity] call into the granularity 
expansion code, so that the now read-only &apos;range&apos; property (previously expandedRange) correctly 
reflects selection and granularity

The only problem that&apos;s left is bridging, so I&apos;m stuck with your comment:

&gt; we don&apos;t like to use C++ for the interface between WebCore
&gt; and WebKit. I think this is something we&apos;re going to have to
&gt; change, and the issue is not specific to this patch.

Is avoiding C++ in WebKit a build/link/deployment/runtime issue? Should I build some bridging stuff in 
WebCore/kwq in the mean time?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17231</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-23 09:52:59 -0700</bug_when>
    <thetext>I like the suggested plan re: granularity.

One flaw in this is that as the document changes, an old WebSelection object may become invalid. For 
example, paragraph boundaries could change. I don&apos;t know how we should define this. We could make 
it so that it was illegal to use a WebSelection object after the document changed, but that would 
probably be too heavy handed. Or we could try to define exactly what happens to an outstanding 
WebSelection object when the document changes.

Avoiding C++ in WebKit was primarily an &quot;SPI stability&quot; issue. We used to use a lot of C++ in WebKit, 
and we had problems with Xcode&apos;s header dependency support. It was a great improvement when the 
interface became Objective-C-only. But that was in the distant past so it may no longer apply.

The new rule going forward should probably be something like &quot;WebKit gets code that&apos;s about bridging 
to Objective-C WebKit API, and WebCore gets all the rest of the code&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17350</commentid>
    <comment_count>6</comment_count>
      <attachid>3553</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-24 13:54:09 -0700</bug_when>
    <thetext>Created attachment 3553
patch

Regarding WebSelection becoming invalid, the same happens for a DOMRange, with
the difference that you might get a DOM exception with DOMRange only when using
against a WebView, whereas you might get a DOM exception with a WebSelection
simply by calling its range method (that combines baseRange, granularity with
the current document on the fly). Is this reasonable?

Regarding C++, I could either call C++ from WebKit or export WebSelection.h
from WebCore like DOM headers. I have chosen the latter because it seems
simpler until WebCore/kwq gets somehow refactored into WebKit, but I can change
it around if necessary.

I have held off extracting the khtml::Selection::validate code because there
doesn&apos;t seem to be much other code in khtml::Selection, so I&apos;m concerned that I
might be already using what you consider unwanted stuff, and khtml::Selection
would become sort of an empty shell.

So I&apos;m submitting this for some more feedback, I still need to create new
WebEditingDelegate methods that use WebSelection and I want to refactor
[WebCoreBridge setSelection:closeTyping:] that&apos;s duplicating work done in
SelectionData::range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17723</commentid>
    <comment_count>7</comment_count>
      <attachid>3553</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-08-26 19:46:25 -0700</bug_when>
    <thetext>Comment on attachment 3553
patch

Looking good.

Here&apos;s another round of comments:

A) Code inside the khtml namespace needn&apos;t specify khtml:: when using other
things in the same namespace, so remove all those khtml:: prefixes in the .cpp
files and the .h files.

B) The baseRange parameter should be:

    RangeImpl *baseRange

We use SharedPtr for member variables and return values, but not for
parameters.

C) It&apos;s more efficient to initialize variables with the right value than to
initialize them to false and then set them, so I&apos;d prefer that the constructors
not use the set functions, and instead initialize.

D) When checking a SharedPtr for null, it&apos;s better to use isNull() or notNull()
rather than get().

E) The formatting should not be:

    if(! xxx

instead it should be:

    if (!xxx

F) Should do &quot;using DOM::&quot; for identifiers you use at the top of the .cpp file
for any type you are using, and not use the DOM:: prefix at each use later on.
This does not apply to .h files.

G) In selectionWithBaseRange:

+    id sel = [[WebSelection alloc] init];

that variable should be of type WebSelection *, not id. Same for the other
creation function. Also, there&apos;s no need to check for nil because: 1) init
won&apos;t ever return nil in this case, since there&apos;s no error case, and 2)
dispatching against nil safely does nothing for all the methods you&apos;re calling.

H) The selectionWithXXX methods should be covers for initWithXXX methods that
do the actual work.

I) Besides the dealloc method, you also need a finalize method that does the
same thing, since WebKit works in both GC and non-GC modes. This is only needed
when there are non-ObjC deallocations, such as in the WebSelectionPrivate
class; the finalize methods don&apos;t need to make any calls to &quot;release&quot;.

J) I slightly prefer to leave out the parentheses on lines like this one:

+    data = new khtml::SelectionData();

K) For things internal to WebKit, we should use the term &quot;Internal&quot; rather than
&quot;Private&quot;. &quot;Private&quot; basically means &quot;private to the OS, not for use by
applications&quot;. Thus the WebSelectionPrivate.h header should be named
WebSelectionInternal. Also, the WebSelectionPrivate class, whatever its name,
should not be in the header because there&apos;s no use of it outside the
implementation file.

L) In Selection::baseRange, the code gets the extent and base and then checks
== with m_end. I think instead it should just get m_start and m_end, no?

M) I&apos;m a little disappointed that this patch adds copied and pasted code. I&apos;d
like to see this changed around so that the code is shared with the place it
was copied from.

N) m_baseIsStart ? true : false is pretty strange. Should just be
&quot;m_baseIsStart&quot;.

O) The use of &quot;deprecate&quot; is incorrect in this comment:

+// The following deprecate setSelectedDOMRange:affinity: and complement
selectedDOMRange and
+// selectionAffinity, in interface WebView (WebViewEditing)

It&apos;s true that the new methods supplant the old ones, but it&apos;s incorrect
grammar to say that a method &quot;deprecates&quot; another method. You should reword the
comment (and I&apos;m not really suggesting you use the word &quot;supplant&quot; :-).

P) Perhaps we should add a selectionDirection accessor to complement
selectionAffinity. It seems like the odd man out at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17820</commentid>
    <comment_count>8</comment_count>
      <attachid>3628</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-28 16:18:53 -0700</bug_when>
    <thetext>Created attachment 3628
patch

The WebSelectionInternal class (previously WebSelectionPrivate) is in the
header file because it is used in a few places to initialize a WebSelection
from a SelectionData (KWQKHTMLPart.mm, WebCoreBridge.mm).

The code in baseRange needs m_base/m_extent and not m_start/m_end, as the
latter are granularity-expanded (and toRange already returns those).
m_base/m_extent however might be backwards and need to be flipped. The check
against m_end was in fact incorrect, I replaced it with a check with
isForwardDirection().

In addition to selectionDirection I added selectionGranularity, which was also
missing. I have also added the other editing delegate WebSelection-based
methods and refactored some code as mentioned.

Hopefully this patch addresses all the outstanding issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17822</commentid>
    <comment_count>9</comment_count>
      <attachid>3629</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-28 16:53:02 -0700</bug_when>
    <thetext>Created attachment 3629
patch

Sorry, I hadn&apos;t correctly update the webcore xcode project after an update
conflict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17847</commentid>
    <comment_count>10</comment_count>
      <attachid>3629</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-08-29 02:29:09 -0700</bug_when>
    <thetext>Comment on attachment 3629
patch

Found a few problems I need to address.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18715</commentid>
    <comment_count>11</comment_count>
      <attachid>3766</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-09-04 17:06:06 -0700</bug_when>
    <thetext>Created attachment 3766
patch

This patch addresses all the outstanding issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18745</commentid>
    <comment_count>12</comment_count>
      <attachid>3766</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-05 09:32:24 -0700</bug_when>
    <thetext>Comment on attachment 3766
patch

Looks great; this is going to be an excellent improvement to the API. I have a
lot of comments.

--- Semantics

A) I&apos;m not sure I understand the rule about m_extended and the concept of how
SelectionData handles the extending. Why does a newly constructed SelectionData
have m_extended set to true? Is the base range passed in actually an
&quot;already-extended&quot; range? Is the fact that the extended range is computed at
the time you get the range a feature of the class, and if so, why do we ever
store the extended range, since that gives a different semantic? Can we do away
with m_extended entirely?

B) Reading the SelectionData code closely, it looks like the class will behave
differently if you pass in a &quot;detached&quot; range than if you pass in NULL for the
range. If you pass in a detached range, you&apos;ll actually get assertion failures
later in toSelection(). I think it&apos;s worth a bit more thought to make this edge
case more well defined. Are detached ranges allowed as parameters or not? If
not, lets assert when they are passed in. If so, then what&apos;s the behavior when
we have one.

C) The SelectionData constructors that take a RangeImpl * adopt that range.
That&apos;s different from what setBaseRange does. I&apos;m not sure the difference is a
good idea. Also, because of this subtlety, if we aren&apos;t going to change it, I
suggest marking the SelectionData constructor that takes just a RangeImpl *
explicit so it can&apos;t be used implicitly for type conversion.

D) Since SelectionData has to implement its own copy constructor, then it
either needs an implementation of the assignment operator, or to declare it and
not implement it. To be specific, the assignment operator would result in two
SelectionData objects that both hold a pointer to the same base range, while
the copy constructor would copy the base range.

E) I don&apos;t understand how the &quot;getDocument != NULL&quot; assertion inside
SelectionData::toSelection is guaranteed. It seems to me that we could easily
run into a situation where a selection object outlasts the document it was made
from, and thus we need defined behavior. We should only use ASSERT for things
we know will be true for some reason, for example because it&apos;s a caller
responsibility or an impossible situation prevented by the structure of the
code. Otherwise we have to consider the exceptional case and decide what our
behavior will be. And I think this is a case like that.

F) There&apos;s a difference between a function that returns a range that the caller
owns and can modify and a function that returns a range that you need to copy
if you want to modify it. We need to document which of these functions has
which semantic. This applies to both SelectionData and WebSelection because of
the nature of the DOMRange class.

--- Naming

G) It seems that khtml::SelectionData should really be named khtml::Selection
for the same reason that WebSelection has its name; we should look for another
name for the current khtml::Selection class and at least propose it at the time
of this patch. Actually doing the renaming could be postponed, but having a
planned new name for the classes might influence the names of some functions

H) As long as we&apos;re adding new source files, we should follow the new standard
of naming files after the classes in them in mixed case. I know the old code
doesn&apos;t match that, but we&apos;re planning on renaming the old files soonish. So it
should be &quot;SelectionData.h&quot; and &quot;SelectionData.cpp&quot;.

I) Do we really need the word &quot;Text&quot; in WebTextSelectionDirection and
WebTextSelectionGranularity? I think that these concepts apply equally well for
non-text selections in a WebView so we can probably just call them
WebSelectionDirection and WebSelectionGranularity.

--- Factoring and organization

J) Leaving the EDirection enum inside the Selection class creates a situation
where the SelectionData&apos;s header file has to include Selection&apos;s header file.
That&apos;s really unfortunate, since Selection is a more-complex class that has to
include many other headers. I think we&apos;d be way better off if we made a global
ESelectionDirection and put it in its own header file as with affinity.

If this is done, then the SelectionData header can get away with just
forward-declaring the Selection class. In fact, the only reason it needs to
declare it at all is the &quot;toSelection()&quot; function, and I don&apos;t think that needs
to be a member function since it can be implemented entirely with
SelectionData&apos;s public interface.

K) I don&apos;t think the setSelectionInPart function makes logical sense as a
member function of SelectionData. It makes sense to have the function, but
perhaps it should be either a free-standing function or a member of another
class. Same comment for WebSelection. In this case, we should let the method on
the bridge be the one that pulls the SelectionData out of the WebSelection and
calls the appropriate C++ and omit the -[WebSelection
_setSelectionInPart:closeTyping:] method.

--- Other code details

L) Since SelectionData is in the khtml namespace, it shouldn&apos;t use the khtml
prefix in the declaration of khtml::Selection for the return type of
toSelection().

M) I don&apos;t see the point in having a getter for SelectionData::extended() if
it&apos;s private. The class should just use the m_extended variable directly.

N) I don&apos;t understand the purpose of the line of code that says:

    class DOM::RangeImpl;

in the selectiondata.h header. I believe that this syntax does not work to
forward-delare a class. So either we&apos;re including a header that
forward-declares the class already and don&apos;t need this line, or we need to use
the syntax that does work for forward declaration which is this:

    namespace DOM {
	class RangeImpl;
    }

Same comment about &quot;class khtml::Selection&quot; inside selectiondata.cpp.

O) The include guard macro in selectiondata.h has the name WEBSELECTION_H in
it; needs to be fixed.

P) There&apos;s no need for selectiondata.h to include &quot;text_granularity.h&quot; if it&apos;s
also including &quot;selection.h&quot;. In general we&apos;d like the list of includes to be
minimal.

Q) This line of code:

    m_baseRange = baseRange ?
SharedPtr&lt;RangeImpl&gt;(baseRange-&gt;cloneRange(exceptioncode)) :
SharedPtr&lt;RangeImpl&gt;();

can be written as:

    m_baseRange = baseRange ? baseRange-&gt;cloneRange(exceptioncode) : NULL;

and I think it reads a little better. Don&apos;t you think?

Similarly, this:

    if (m_baseRange.isNull())
	return SharedPtr&lt;RangeImpl&gt;();

can be written as this:

    if (!m_baseRange)
	return NULL;

In general, the &quot;isNull()&quot; function is deprecated these days. Although if you
think it makes the code read better, then it&apos;s fine to keep using it.

R) We usually leave out the space in lines like this one:

    if (! rangeCollapsed)

and write them like this:

    if (!rangeCollapsed)

S) The WebSelection class needs a &quot;designated initializer&quot;. See the guidelines
at
&lt;http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaObjects/Article
s/ObjectCreation.html&gt;. I&apos;d suggest that all the other initializers call
initWithBaseRange:affinity:direction:granularity: and that one call [super
init] rather than [self init].

T) -[WebSelectionInternal init] should probably call [super init];

U) -[WebSelectionInternal finalize] needs to call [super finalize].

WebSelectionInternal.h should forward-declare khtml::SelectionData rather than
including the header.

V) This:

    SharedPtr&lt;RangeImpl&gt; i = makeRange(m_start, m_end);
    return i;

reads better as:

    return makeRange(m_start, m_end);

This:

    SelectionData sel(rangeOfContents(root).get());
    return part()-&gt;shouldEndEditing(sel);

reads better as:

    return part()-&gt;shouldEndEditing(rangeOfContents(root).get());

This:

    khtml::SelectionData sd = _part-&gt;selectionData();
    return [WebSelection _selectionWithSelectionData:&amp;sd];

reads better as:

    return [WebSelection _selectionWithSelectionData:&amp;_part-&gt;selectionData()];

W) Since the WebSelection private API is all Objective-C++, maybe the
SelectionData parameters should be const &amp; instead of const * typed to help
make it clearer that it&apos;s copying the data and not keeping a pointer.

X) We don&apos;t need to use WebDefaultEditingDelegate if we&apos;re doing explicit
respondsToSelector: checks. Instead it&apos;s fine to just have the callers return
YES. The reason WebDefaultEditingDelegate exists is for the
_editingDelegateForwarder technique, and if we aren&apos;t using that technique with
a particular method, then it&apos;s best to leave it out of the default delegate. I
think we will retire the forwarder technique soon; it doesn&apos;t save much code or
read particularly nicely and it&apos;s considerably slower than an explicit check
for the common case of a delegate that does not implement a particular method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18748</commentid>
    <comment_count>13</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-09-05 10:14:11 -0700</bug_when>
    <thetext>A) There are two different patterns of use of selections: programmatic for example via javascript, and 
with user interaction. Remember that the need to carry over state was needed for mouse-initiated 
selections being approved by the delegate. Now, the mouse handling needs the non-extended selection 
to work, while the javascript only seems to expose extended selection. I don&apos;t have a very deep 
understanding of visible positions and &lt;br&gt; handling related bugs, but re-extending a selection 
doesn&apos;t work well, even if the granularity is forced to character. In retrospect I suppose the m_extended 
flag should be explicitly set by the user, though the current implementation matches the usage in the 
codebase (bad excuse, I realize).

B) I think the behaviour should match the current implementation, so detached ranges shouldn&apos;t be 
allowed

I) Another bad excuse, WebSelectionDirection and WebSelectionGranularity are already taken, and have 
slightly different definitions, those need renaming too I suppose.

I&apos;ll work on the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19541</commentid>
    <comment_count>14</comment_count>
      <attachid>3881</attachid>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-09-12 14:52:19 -0700</bug_when>
    <thetext>Created attachment 3881
rename patch

First step: rename Selection to SelectionController, WebSelectionDirection to
WebBridgeSelectionDirection and WebSelectionGranularity to
WebBridgeSelectionGranularity.

The patch file doesn&apos;t mention that WebCore/khtml/editing/selection.* and
WebCore/ForwardingHeaders/editing/selection.h should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20289</commentid>
    <comment_count>15</comment_count>
      <attachid>3881</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-23 08:56:13 -0700</bug_when>
    <thetext>Comment on attachment 3881
rename patch

To avoid losing history, we probably want to copy the file on the server side
before landing this patch.

Otherwise, looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20413</commentid>
    <comment_count>16</comment_count>
      <attachid>3881</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-23 18:16:14 -0700</bug_when>
    <thetext>Comment on attachment 3881
rename patch

Removing the review+ flag from this patch now that it&apos;s landed so it doesn&apos;t
show up as &quot;needed but not yet landed&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23358</commentid>
    <comment_count>17</comment_count>
    <who name="David Harrison">harrison</who>
    <bug_when>2005-10-30 07:38:40 -0800</bug_when>
    <thetext>Please do re-think how extended vs non-extended is specified and used.  The current interface relies 
too heavily on the SelectionController creators knowing implicit differences between the constructors 
that accept baseRange, and the constructor and setBaseRange that do not.  Some more explicit control 
is appropriate.  

How about removing m_extended and renaming things so that callers can ask for the range() or the 
extendedRange()?  i.e. both are available, and the caller just needs to know which kind it wants.  Or is 
that knowledge only available to the code that constructs or sets up the SelectionController?

current name	        new name
-----------	        ----------
m_baseRange		m_range				-- member variable for RangeImpl *
setBaseRange()         setRange()			        -- sets m_range as specified, unmodified
baseRange()		range()				-- returns m_range unmodified
baseRange		range				-- param to constructors and setter
range()			extendedRange()		-- return extended range
m_extended		n/a					-- remove. call range() or extendedRange() instead

At the very least, the names baseRange, m_baseRange, and setBaseRange are a bit confusing because 
of the basePosition that&apos;s already part of the SelectionController.  Also, note that setBaseRange() 
ensures that range() always returns the unextended range, so it&apos;s a little misleading not to call it 
setRange() to begin with.

Also, do you have more comments on Darin&apos;s questions?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23359</commentid>
    <comment_count>18</comment_count>
    <who name="Duncan Wilcox">duncan</who>
    <bug_when>2005-10-30 09:10:39 -0800</bug_when>
    <thetext>David, thank you for your comments.

I haven&apos;t looked at this patch for a long time, a fresh look makes me realize that the &quot;m_extended&quot; flag 
really means &quot;don&apos;t touch the selection&quot;. Let me explain.

Extending a selection basically mean applying granularity to the current selection. A naive 
implementation might consider no extension equivalent to applying character granularity to a selection. 
This would make matters really simple, no need for m_extended trickery. Unfortunately quite a few 
layout tests fail (or failed when I did this in an inital test implementation), because sometimes ranges 
are modified by normalization. I haven&apos;t quite spotted what the issue is or how it might be solved.

In accordance with Darin&apos;s comments, the patch I have has a &quot;range()&quot; accessor that will return an 
extended range, while a &quot;baseRange()&quot; accessor will return the base range. Most of the time base range 
and extended range are exactly the same thing, they&apos;re only different when there&apos;s mouse interaction.

Finally, if you are referring to Darin&apos;s comments in #12 I have a patch against an old tree that addresses 
all the issues that I didn&apos;t answer right away. I need to update the patch (perhaps rebuild it from 
scratch). I hope to be able to work on it soon.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1913338</commentid>
    <comment_count>19</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-11-17 16:43:49 -0800</bug_when>
    <thetext>I am not sure these KHTML era patches will apply and bring any progression but I am going to tag few so they can confirm if something can be salvaged from these or we can mark it as &quot;RESOLVED WONTFIX&quot;. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3513</attachid>
            <date>2005-08-22 04:00:29 -0700</date>
            <delta_ts>2005-08-24 13:54:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection.txt</filename>
            <type>text/plain</type>
            <size>45323</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGt3cS9XZWJTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrd3EvV2ViU2Vs
ZWN0aW9uLmgKLS0tIGt3cS9XZWJTZWxlY3Rpb24uaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBrd3EvV2ViU2VsZWN0aW9uLmgJMjIgQXVnIDIwMDUgMTA6Mzc6MzggLTAwMDAKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitAY2xh
c3MgRE9NUmFuZ2U7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV2ViVGV4dFNlbGVjdEZvcndhcmQs
CisgICAgV2ViVGV4dFNlbGVjdEJhY2t3YXJkCit9IFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb247
CisKK3R5cGVkZWYgZW51bSB7CisgICAgV2ViVGV4dFNlbGVjdEJ5Q2hhcmFjdGVyLAorICAgIFdl
YlRleHRTZWxlY3RCeVdvcmQsCisgICAgV2ViVGV4dFNlbGVjdEJ5TGluZSwKKyAgICBXZWJUZXh0
U2VsZWN0QnlQYXJhZ3JhcGgKK30gV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5OworCitAaW50
ZXJmYWNlIFdlYlNlbGVjdGlvbiA6IE5TT2JqZWN0Cit7CisgICAgRE9NUmFuZ2UgKmJhc2VSYW5n
ZTsKKyAgICBET01SYW5nZSAqZXhwYW5kZWRSYW5nZTsKKyAgICBOU1NlbGVjdGlvbkFmZmluaXR5
IGFmZmluaXR5OworICAgIFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uOworICAg
IFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSBncmFudWxhcml0eTsKK30KKworKyAoaWQpd2Vi
U2VsZWN0aW9uV2l0aEJhc2VSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgZXhw
YW5kZWRSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25FeHBhbmRlZFJhbmdlIGFmZmluaXR5OihO
U1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjooV2ViVGV4dFNl
bGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlRleHRT
ZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eTsKKysgKGlkKXdlYlNlbGVj
dGlvbldpdGhSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eTsKKy0gKERPTVJhbmdlICopYmFzZVJhbmdl
OworLSAodm9pZClzZXRCYXNlUmFuZ2U6KERPTVJhbmdlICopbmV3QmFzZVJhbmdlOworLSAoRE9N
UmFuZ2UgKilleHBhbmRlZFJhbmdlOworLSAodm9pZClzZXRFeHBhbmRlZFJhbmdlOihET01SYW5n
ZSAqKW5ld0V4cGFuZGVkUmFuZ2U7CistIChOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5Owor
LSAodm9pZClzZXRBZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSluZXdBZmZpbml0eTsKKy0g
KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uOworLSAodm9pZClzZXREaXJlY3Rp
b246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pbmV3RGlyZWN0aW9uOworLSAoV2ViVGV4dFNl
bGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFyaXR5OworLSAodm9pZClzZXRHcmFudWxhcml0eToo
V2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KW5ld0dyYW51bGFyaXR5OworCitAZW5kCisKK0Bj
bGFzcyBXZWJWaWV3OworQGludGVyZmFjZSBOU09iamVjdCAoV2ViRWRpdGluZ0RlbGVnYXRlUGVu
ZGluZ1B1YmxpYykKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKiljdXJyZW50IHRvU2VsZWN0aW9uOihXZWJTZWxl
Y3Rpb24gKilwcm9wb3NlZCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnOworQGVuZAorCkluZGV4
OiBrd3EvV2ViU2VsZWN0aW9uLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3dxL1dlYlNlbGVjdGlv
bi5tCi0tLSBrd3EvV2ViU2VsZWN0aW9uLm0JMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg
a3dxL1dlYlNlbGVjdGlvbi5tCTIyIEF1ZyAyMDA1IDEwOjM3OjU1IC0wMDAwCkBAIC0wLDAgKzEs
MTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldlYlNlbGVjdGlvbi5oIgorCitAaW1wbGVt
ZW50YXRpb24gV2ViU2VsZWN0aW9uCisKKysgKGlkKXdlYlNlbGVjdGlvbldpdGhSYW5nZTooRE9N
UmFuZ2UgKilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eQoreworICAgIHJldHVybiBbV2ViU2VsZWN0aW9uIHdlYlNlbGVjdGlvbldp
dGhCYXNlUmFuZ2U6c2VsZWN0aW9uUmFuZ2UgZXhwYW5kZWRSYW5nZTpzZWxlY3Rpb25SYW5nZSBh
ZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQg
Z3JhbnVsYXJpdHk6V2ViVGV4dFNlbGVjdEJ5Q2hhcmFjdGVyXTsKK30KKworKyAoaWQpd2ViU2Vs
ZWN0aW9uV2l0aEJhc2VSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgZXhwYW5k
ZWRSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25FeHBhbmRlZFJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjooV2ViVGV4dFNlbGVj
dGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlRleHRTZWxl
Y3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQoreworICAgIGlkIHNlbCA9IFtb
V2ViU2VsZWN0aW9uIGFsbG9jXSBpbml0XTsKKyAgICBpZiAoc2VsKSB7CisgICAgICAgIFtzZWwg
c2V0QmFzZVJhbmdlOnNlbGVjdGlvbkJhc2VSYW5nZV07CisgICAgICAgIFtzZWwgc2V0RXhwYW5k
ZWRSYW5nZTpzZWxlY3Rpb25FeHBhbmRlZFJhbmdlXTsKKyAgICAgICAgW3NlbCBzZXRBZmZpbml0
eTpzZWxlY3Rpb25BZmZpbml0eV07CisgICAgICAgIFtzZWwgc2V0RGlyZWN0aW9uOnNlbGVjdGlv
bkRpcmVjdGlvbl07CisgICAgICAgIFtzZWwgc2V0R3JhbnVsYXJpdHk6c2VsZWN0aW9uR3JhbnVs
YXJpdHldOworICAgIH0KKworICAgIHJldHVybiBzZWw7Cit9CisKKy0gKERPTVJhbmdlICopYmFz
ZVJhbmdlCit7CisgICAgcmV0dXJuIGJhc2VSYW5nZTsgCit9CisKKy0gKHZvaWQpc2V0QmFzZVJh
bmdlOihET01SYW5nZSAqKW5ld0Jhc2VSYW5nZQoreworICAgIGlmIChiYXNlUmFuZ2UgIT0gbmV3
QmFzZVJhbmdlKSB7CisgICAgICAgIFtiYXNlUmFuZ2UgcmVsZWFzZV07CisgICAgICAgIGJhc2VS
YW5nZSA9IFtuZXdCYXNlUmFuZ2UgcmV0YWluXTsKKyAgICB9Cit9CisKKworLSAoRE9NUmFuZ2Ug
KilleHBhbmRlZFJhbmdlCit7CisgICAgcmV0dXJuIGV4cGFuZGVkUmFuZ2U7IAorfQorCistICh2
b2lkKXNldEV4cGFuZGVkUmFuZ2U6KERPTVJhbmdlICopbmV3RXhwYW5kZWRSYW5nZQoreworICAg
IGlmIChleHBhbmRlZFJhbmdlICE9IG5ld0V4cGFuZGVkUmFuZ2UpIHsKKyAgICAgICAgW2V4cGFu
ZGVkUmFuZ2UgcmVsZWFzZV07CisgICAgICAgIGV4cGFuZGVkUmFuZ2UgPSBbbmV3RXhwYW5kZWRS
YW5nZSByZXRhaW5dOworICAgIH0KK30KKworCistIChOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmlu
aXR5Cit7CisgICAgcmV0dXJuIGFmZmluaXR5OworfQorCistICh2b2lkKXNldEFmZmluaXR5OihO
U1NlbGVjdGlvbkFmZmluaXR5KW5ld0FmZmluaXR5Cit7CisgICAgYWZmaW5pdHkgPSBuZXdBZmZp
bml0eTsKK30KKworCistIChXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbgorewor
ICAgIHJldHVybiBkaXJlY3Rpb247Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uOihXZWJUZXh0
U2VsZWN0aW9uRGlyZWN0aW9uKW5ld0RpcmVjdGlvbgoreworICAgIGRpcmVjdGlvbiA9IG5ld0Rp
cmVjdGlvbjsKK30KKworCistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJp
dHkKK3sKKyAgICByZXR1cm4gZ3JhbnVsYXJpdHk7Cit9CisKKy0gKHZvaWQpc2V0R3JhbnVsYXJp
dHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSluZXdHcmFudWxhcml0eQoreworICAgIGdy
YW51bGFyaXR5ID0gbmV3R3JhbnVsYXJpdHk7Cit9CisKKworCistICh2b2lkKWRlYWxsb2MKK3sK
KyAgICBbYmFzZVJhbmdlIHJlbGVhc2VdOworICAgIFtleHBhbmRlZFJhbmdlIHJlbGVhc2VdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworQGVuZAorCisKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS5leHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgV2ViQ29yZS9XZWJD
b3JlLmV4cAotLS0gV2ViQ29yZS9XZWJDb3JlLmV4cAkzMCBKdWwgMjAwNSAwOTowNTowMSAtMDAw
MAkxLjQ0CisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwCTIyIEF1ZyAyMDA1IDExOjAwOjMwIC0wMDAw
CkBAIC0xMTcsNiArMTE3LDcgQEAKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVRleHRSZW5kZXJl
ckZhY3RvcnkKIC5vYmpjX2NsYXNzX25hbWVfV2ViQ29yZVZpZXdGYWN0b3J5CiAub2JqY19jbGFz
c19uYW1lX1dlYkRhc2hib2FyZFJlZ2lvbgorLm9iamNfY2xhc3NfbmFtZV9XZWJTZWxlY3Rpb24K
IF9XZWJDb3JlRWxlbWVudERPTU5vZGVLZXkKIF9XZWJDb3JlRWxlbWVudEZyYW1lS2V5CiBfV2Vi
Q29yZUVsZW1lbnRJbWFnZUFsdFN0cmluZ0tleQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjExCmRpZmYgLXAgLXUgLXIxLjExIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkx
NiBBdWcgMjAwNSAwNzozOTo0MCAtMDAwMAkxLjExCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkyMiBBdWcgMjAwNSAxMTowMDo1MCAtMDAwMApAQCAtMjM0Nyw2
ICsyMzQ3LDggQEAKIAkJQThDMEZGRkYwODk3MDFGQzAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3
NzA4OTcwMUY4MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSAqLzsgfTsKIAkJQThGRDhCODYw
ODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXgubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODVEN0E4QzA4NzlFQzY0MDA2QTkxNzIgLyogS1dRV01h
dHJpeC5tbSAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAwREMzNzA3IC8qIEtXUVdNYXRyaXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThE
MDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87IH07CisJCUFFMzM1NTA5MDhCOEFE
OTQwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1NTA3MDhCOEFEOTQwMEE4QUM0OSAvKiBXZWJTZWxlY3Rp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlB
RTMzNTUwQTA4QjhBRDk0MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTUwODA4QjhBRDk0MDBBOEFDNDkg
LyogV2ViU2VsZWN0aW9uLm0gKi87IH07CiAJCUJDMTc5ODkyMDg4RDk3NUYwMDYwNjhBNSAvKiBy
ZW5kZXJfdGhlbWVfbWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMxNzk4OEYwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZV9tYWMubW0g
Ki87IH07CiAJCUJDMTc5ODkzMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzk4OTAwODhE
OTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZS5jcHAgKi87IH07CiAJCUJDMTc5ODk0MDg4RDk3
NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkxMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhl
bWUuaCAqLzsgfTsKQEAgLTM3MTcsNiArMzcxOSw4IEBACiAJCUE4QzBGQjhDMDg5NzAxRjgwMEJB
NTExNCAvKiBLQ2FudmFzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
S0NhbnZhc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QzBGQjhEMDg5
NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBLQ2FudmFzVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4QzBGQjhFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBRTMzNTUwNzA4QjhBRDk0MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTZWxlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU1MDgwOEI4QUQ5NDAwQThBQzQ5IC8qIFdlYlNlbGVj
dGlvbi5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViU2VsZWN0aW9u
Lm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZGMjQ5MDZEMThBN0UwMDRBNkZB
MyAvKiB4c2xfc3R5bGVzaGVldGltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IHhzbF9zdHlsZXNoZWV0aW1wbC5jcHA7IHBhdGggPSB4c2wveHNsX3N0eWxlc2hl
ZXRpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwNkYyNEEwNkQxOEE3
RTAwNEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0geHNsX3N0eWxlc2hlZXRpbXBsLmg7IHBhdGggPSB4c2wveHNsX3N0eWxlc2hl
ZXRpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZGMjRCMDZEMThBN0Uw
MDRBNkZBMyAvKiB4c2x0X3Byb2Nlc3NvcmltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IHhzbHRfcHJvY2Vzc29yaW1wbC5jcHA7IHBhdGggPSB4c2wveHNsdF9w
cm9jZXNzb3JpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzMjIsNiAr
NjMyNiw4IEBACiAJCQkJRjU4Nzg1NTUwMkRFMzc1OTAxRUE0MTIyIC8qIFdlYkNvcmVWaWV3RmFj
dG9yeS5tICovLAogCQkJCTUxNTBDMkExMDcwMjYyOTAwMEFGNjQyQyAvKiBXZWJEYXNoYm9hcmRS
ZWdpb24uaCAqLywKIAkJCQk1MTUwQzJBNTA3MDI2Mjk4MDBBRjY0MkMgLyogV2ViRGFzaGJvYXJk
UmVnaW9uLm0gKi8sCisJCQkJQUUzMzU1MDcwOEI4QUQ5NDAwQThBQzQ5IC8qIFdlYlNlbGVjdGlv
bi5oICovLAorCQkJCUFFMzM1NTA4MDhCOEFEOTQwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubSAq
LywKIAkJCQlGNThFRjU4RTAyREZERkI3MDE4NjM1Q0EgLyogV2ViQ29yZS5leHAgKi8sCiAJCQkJ
RjU4RUY1OEQwMkRGREZCNzAxODYzNUNBIC8qIFdlYkNvcmUtdGVzdHMuZXhwICovLAogCQkJKTsK
QEAgLTY5MTQsNiArNjkyMCw3IEBACiAJCQkJQkMxNzk4OTQwODhEOTc1RjAwNjA2OEE1IC8qIHJl
bmRlcl90aGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzk4REEwODhEQTRGODAwNjA2OEE1
IC8qIHJlbmRlcl90aGVtZV9tYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRUQ4MDg5ODU4
MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUFFMzM1NTA5MDhCOEFEOTQwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpAQCAtOTIzMyw2ICs5MjQwLDcgQEAKIAkJCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUgLyog
cmVuZGVyX3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMTc5ODkzMDg4RDk3NUYw
MDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2RkVFRDkw
ODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUFFMzM1NTBBMDhCOEFEOTQwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zMzQKZGlmZiAtcCAtdSAtcjEuMzM0IFdlYkNvcmUva2h0bWwva2h0bWxf
cGFydC5jcHAKLS0tIFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAJMTQgQXVnIDIwMDUgMDk6
MTI6NDMgLTAwMDAJMS4zMzQKKysrIFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAJMjIgQXVn
IDIwMDUgMTE6MDA6NTIgLTAwMDAKQEAgLTQ5MDgsOSArNDkwOCwxMiBAQCB2b2lkIEtIVE1MUGFy
dDo6aGFuZGxlTW91c2VNb3ZlRXZlbnRTZWxlCiAgICAgfQogCiAgICAgc2VsLnNldEV4dGVudChw
b3MpOworLy9wcmludGYoInNlbGVjdGlvbjogJWxkLyVsZCAtPiAiLCBzZWwuc3RhcnQoKS5vZmZz
ZXQoKSwgc2VsLmVuZCgpLm9mZnNldCgpKTsKICAgICBpZiAoZC0+bV9zZWxlY3Rpb25HcmFudWxh
cml0eSAhPSBDSEFSQUNURVIpIHsKKy8vcHJpbnRmKCIoZXhwYW5kZWQpICIpOwogICAgICAgICBz
ZWwuZXhwYW5kVXNpbmdHcmFudWxhcml0eShkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KTsKICAg
ICB9CisvL3ByaW50ZigiJWxkLyVsZFxuIiwgc2VsLnN0YXJ0KCkub2Zmc2V0KCksIHNlbC5lbmQo
KS5vZmZzZXQoKSk7CiAKICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKICAg
ICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CkBAIC01MTYzLDcgKzUxNjYsNyBAQCB2b2lkIEtIVE1M
UGFydDo6c2VsZWN0QWxsKCkKIGJvb2wgS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uICZuZXdzZWxlY3Rpb24pIGNvbnN0CiB7CiAjaWYgQVBQTEVfQ0hBTkdF
UwotICAgIHJldHVybiBLV1EodGhpcyktPnNob3VsZENoYW5nZVNlbGVjdGlvbihkLT5tX3NlbGVj
dGlvbiwgbmV3c2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpLCBmYWxzZSk7
CisgICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld3NlbGVjdGlv
biwgbmV3c2VsZWN0aW9uLmVuZEFmZmluaXR5KCksIG5ld3NlbGVjdGlvbi5kaXJlY3Rpb24oKSwg
ZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSwgZmFsc2UpOwogI2Vsc2UKICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rp
b24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkwCmRpZmYgLXAgLXUgLXIxLjkwIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
c2VsZWN0aW9uLmNwcAk5IEp1bCAyMDA1IDIwOjE5OjA3IC0wMDAwCTEuOTAKKysrIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIyIEF1ZyAyMDA1IDExOjAwOjUzIC0wMDAwCkBA
IC02NjQsNiArNjY0LDc0IEBAIFNoYXJlZFB0cjxSYW5nZUltcGw+IFNlbGVjdGlvbjo6dG9SYW5n
ZSgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTaGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rp
b246OmJhc2VSYW5nZSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1
cm4gU2hhcmVkUHRyPFJhbmdlSW1wbD4oKTsKKworICAgIFBvc2l0aW9uIGZyb20gPSBtX2Jhc2U7
CisgICAgUG9zaXRpb24gdG8gPSBtX2V4dGVudDsKKworICAgIGlmIChmcm9tID09IG1fZW5kKSB7
CisgICAgICAgIGZyb20gPSBtX2V4dGVudDsKKyAgICAgICAgdG8gPSBtX2Jhc2U7CisgICAgfQor
CisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQKKyAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBj
b21tYW5kcyB3aGljaCBtb2RpZnkgdGhlIERPTS4KKyAgICAvLyBGYWlsaW5nIHRvIGNhbGwgdGhp
cyBjYW4gcmVzdWx0IGluIGVxdWl2YWxlbnRYWFhQb3NpdGlvbiBjYWxscyByZXR1cm5pbmcKKyAg
ICAvLyBpbmNvcnJlY3QgcmVzdWx0cy4KKyAgICBmcm9tLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+
dXBkYXRlTGF5b3V0KCk7CisKKyAgICBQb3NpdGlvbiBzLCBlOworICAgIGlmIChpc0NhcmV0KCkp
IHsKKyAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5n
ZSBzdGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1cyBtYXRjaAorICAgICAgICAvLyB0aGUgY29u
dmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1p
bmF0aW9ucyBiYXNlZAorICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2Fy
ZXQsIGlmIGFueS4gCisgICAgICAgIHMgPSBmcm9tLnVwc3RyZWFtKCkuZXF1aXZhbGVudFJhbmdl
Q29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAgICAgZSA9IHM7CisgICAgfQorICAgIGVsc2Ugewor
ICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHNlbGVjdCB0aGUgbWluaW11
bSByYW5nZSB0aGF0IGVuY29tcGFzc2VzIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIC8vIEFnYWlu
LCB0aGlzIGlzIHRvIG1hdGNoIHRoZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVk
LCB3aGljaCBtYWtlIHN0eWxlIAorICAgICAgICAvLyBkZXRlcm1pbmF0aW9ucyBiYXNlZCBvbiB0
aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWxlY3Rpb24uIAorICAgICAgICAvLyBGb3IgaW5z
dGFuY2UsIHRoaXMgb3BlcmF0aW9uIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAiWCIgc2Vs
ZWN0ZWQgYmVsb3cgaXMgdGhlIAorICAgICAgICAvLyBvbmx5IHRoaW5nIHNlbGVjdGVkLiBUaGUg
cmFuZ2Ugc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvICJsZWFrIiBvdXQgdG8gdGhlIGVuZCBvZiB0
aGUgCisgICAgICAgIC8vIHByZXZpb3VzIHRleHQgbm9kZSwgb3IgdG8gdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCB0ZXh0IG5vZGUsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgCisgICAgICAgIC8vIGRp
ZmZlcmVudCBzdHlsZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uIGEgdHJlYXN1cmUgbWFw
LCA8Yj5YPC9iPiBtYXJrcyB0aGUgc3BvdC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgIF4gc2VsZWN0ZWQKKyAgICAgICAgLy8KKyAgICAgICAgQVNTRVJUKGlzUmFuZ2UoKSk7Cisg
ICAgICAgIHMgPSBmcm9tLmRvd25zdHJlYW0oKTsKKyAgICAgICAgZSA9IHRvLnVwc3RyZWFtKCk7
CisgICAgICAgIGlmIChSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzLm5vZGUoKSwg
cy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpID4gMCkgeworICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KKyAgICAgICAgICAgIC8vIFRo
ZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFj
ZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KKyAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9
IHM7CisgICAgICAgICAgICBzID0gZTsKKyAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAgIH0K
KyAgICAgICAgcyA9IHMuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAg
ICAgZSA9IGUuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICB9CisKKyAg
ICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgU2hhcmVkUHRyPFJhbmdlSW1wbD4gcmVzdWx0
KG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmRvY1B0cigpKSk7CisgICAgcmVzdWx0LT5zZXRTdGFy
dChzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZXhjZXB0aW9uQ29kZSk7CisgICAgaWYgKGV4Y2VwdGlv
bkNvZGUpIHsKKyAgICAgICAgRVJST1IoIkV4Y2VwdGlvbiBzZXR0aW5nIFJhbmdlIHN0YXJ0IGZy
b20gU2VsZWN0aW9uOiAlZCIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICByZXR1cm4gU2hhcmVk
UHRyPFJhbmdlSW1wbD4oKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXRFbmQoZS5ub2RlKCksIGUu
b2Zmc2V0KCksIGV4Y2VwdGlvbkNvZGUpOworICAgIGlmIChleGNlcHRpb25Db2RlKSB7CisgICAg
ICAgIEVSUk9SKCJFeGNlcHRpb24gc2V0dGluZyBSYW5nZSBlbmQgZnJvbSBTZWxlY3Rpb246ICVk
IiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIHJldHVybiBTaGFyZWRQdHI8UmFuZ2VJbXBsPigp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFNlbGVjdGlvbjo6bGF5b3V0
KCkKIHsKICAgICBpZiAoaXNOb25lKCkgfHwgIW1fc3RhcnQubm9kZSgpLT5pbkRvY3VtZW50KCkg
fHwgIW1fZW5kLm5vZGUoKS0+aW5Eb2N1bWVudCgpKSB7CkluZGV4OiBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvc2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZm
IC1wIC11IC1yMS4zOSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgKLS0tIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaAkyMyBKdW4gMjAwNSAxOTo0Nzo0OCAtMDAwMAkx
LjM5CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgJMjIgQXVnIDIwMDUgMTE6
MDA6NTMgLTAwMDAKQEAgLTEwOSw4ICsxMDksMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJl
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gQ0FSRVQ7IH0KICAgICBib29sIGlzUmFuZ2Uo
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IFJBTkdFOyB9CiAgICAgYm9vbCBpc0NhcmV0T3JS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgIT0gTk9ORTsgfQorICAgIGludCBkaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJc1N0YXJ0ID8gMCA6IDE7IH0KIAogICAgIFNoYXJl
ZFB0cjxET006OlJhbmdlSW1wbD4gdG9SYW5nZSgpIGNvbnN0OworICAgIFNoYXJlZFB0cjxET006
OlJhbmdlSW1wbD4gYmFzZVJhbmdlKCkgY29uc3Q7CiAKICAgICB2b2lkIGRlYnVnUG9zaXRpb24o
KSBjb25zdDsKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVjdCAqciwg
Ym9vbCBzZWxlY3RlZCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjI2CmRpZmYgLXAgLXUgLXIxLjIyNiBXZWJDb3JlL2t3
cS9LV1FLSFRNTFBhcnQuaAotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgJMTcgQXVnIDIw
MDUgMjA6MTI6MTUgLTAwMDAJMS4yMjYKKysrIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCTIy
IEF1ZyAyMDA1IDExOjAwOjUzIC0wMDAwCkBAIC0zNDUsNyArMzQ1LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9uICZv
bGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdl
ZENvbnRlbnRzKCk7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uICZvbGRTZWxlY3Rpb24sIGNvbnN0IGtodG1sOjpTZWxlY3Rpb24gJm5ld1NlbGVjdGlv
biwga2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uICZuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGludCBkaXJl
Y3Rpb24sIGtodG1sOjpFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0
IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0
aW5nKGNvbnN0IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2t3cS9L
V1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NjEKZGlmZiAtcCAtdSAt
cjEuNjYxIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRS0hU
TUxQYXJ0Lm1tCTE3IEF1ZyAyMDA1IDIwOjEyOjE1IC0wMDAwCTEuNjYxCisrKyBXZWJDb3JlL2t3
cS9LV1FLSFRNTFBhcnQubW0JMjIgQXVnIDIwMDUgMTE6MDA6NTYgLTAwMDAKQEAgLTQ3LDYgKzQ3
LDcgQEAKICNpbXBvcnQgIldlYkNvcmVJbWFnZVJlbmRlcmVyLmgiCiAjaW1wb3J0ICJXZWJDb3Jl
Vmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkRhc2hib2FyZFJlZ2lvbi5oIgorI2ltcG9ydCAi
V2ViU2VsZWN0aW9uLmgiCiAKICNpbXBvcnQgImNzc19jb21wdXRlZHN0eWxlLmgiCiAjaW1wb3J0
ICJjc3NoZWxwZXIuaCIKQEAgLTQxMDIsMTIgKzQxMDMsMTUgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlYwogICAgIFtfYnJpZGdlIHJlc3BvbmRUb0NoYW5nZWRTZWxl
Y3Rpb25dOwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNv
bnN0IFNlbGVjdGlvbiAmb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rpb24gJm5ld1NlbGVjdGlv
biwga2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QK
K2Jvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNl
bGVjdGlvbiAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBpbnQgZGly
ZWN0aW9uLCBraHRtbDo6RVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzdGlsbFNl
bGVjdGluZykgY29uc3QKIHsKLSAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6b2xkU2VsZWN0aW9uLnRvUmFuZ2Uo
KS5nZXQoKV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9ET01SYW5n
ZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bmV3U2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKV0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eTpzdGF0aWNf
Y2FzdDxOU1NlbGVjdGlvbkFmZmluaXR5PihhZmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CisgICAgcmV0dXJu
IFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGlvblRvOgorICAgICAgICAgICAgW1dlYlNlbGVj
dGlvbiB3ZWJTZWxlY3Rpb25XaXRoQmFzZVJhbmdlOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpu
ZXdTZWxlY3Rpb24uYmFzZVJhbmdlKCkuZ2V0KCldCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGFuZGVkUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOm5ld1Nl
bGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWZmaW5pdHk6c3RhdGljX2Nhc3Q8TlNTZWxlY3Rpb25BZmZpbml0eT4oYWZm
aW5pdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rp
b246c3RhdGljX2Nhc3Q8V2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbj4oZGlyZWN0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5OnN0YXRpY19j
YXN0PFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpXQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CiAK
IHZvaWQgS1dRS0hUTUxQYXJ0OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpJbmRleDogV2Vi
Q29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQ1CmRp
ZmYgLXAgLXUgLXIxLjM0NSBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgKLS0tIFdlYkNvcmUv
a3dxL1dlYkNvcmVCcmlkZ2UuaAkxNyBBdWcgMjAwNSAyMDoxMjoxNSAtMDAwMAkxLjM0NQorKysg
V2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCTIyIEF1ZyAyMDA1IDExOjAwOjU2IC0wMDAwCkBA
IC02Miw2ICs2Miw3IEBAIHR5cGVkZWYga2h0bWw6OlJlbmRlclBhcnQgS0hUTUxSZW5kZXJQYXIK
IEBjbGFzcyBET01IVE1MVGV4dEFyZWFFbGVtZW50OwogQGNsYXNzIFdlYkNvcmVTZXR0aW5nczsK
IEBjbGFzcyBXZWJTY3JpcHRPYmplY3Q7CitAY2xhc3MgV2ViU2VsZWN0aW9uOwogCiBAcHJvdG9j
b2wgV2ViQ29yZURPTVRyZWVDb3BpZXI7CiBAcHJvdG9jb2wgV2ViQ29yZVJlbmRlclRyZWVDb3Bp
ZXI7CkBAIC0zMzcsNyArMzM4LDggQEAgdHlwZWRlZiBlbnVtCiAtIChOU1JlY3QpY2FyZXRSZWN0
QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5TU2Vs
ZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CiAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2U7CiAKLS0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFu
Z2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0
eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZzsKKy0gKHZvaWQpc2V0U2VsZWN0aW9uOihX
ZWJTZWxlY3Rpb24gKilzZWwgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmc7CistIChXZWJT
ZWxlY3Rpb24gKilzZWxlY3Rpb247CiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2U7CiAt
IChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5OwogCkBAIC0zODUsNiArMzg3
LDcgQEAgdHlwZWRlZiBlbnVtCiAtICh2b2lkKWFsdGVyQ3VycmVudFNlbGVjdGlvbjooV2ViU2Vs
ZWN0aW9uQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViU2VsZWN0aW9uRGlyZWN0
aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVs
YXJpdHk7CiAtIChET01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdl
YlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNlOihmbG9hdClk
aXN0YW5jZTsKIC0gKHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRl
cmF0aW9uKWFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5jZTooZmxvYXQpZGlzdGFuY2U7CistIChX
ZWJTZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uOwogLSAoV2ViU2VsZWN0aW9u
R3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7CiAtIChET01SYW5nZSAqKXNtYXJ0RGVs
ZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkQ2hhclJhbmdlOwog
LSAodm9pZClzbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBs
YWNpbmdSYW5nZTooRE9NUmFuZ2UgKiljaGFyUmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihO
U1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3Ry
aW5nOwpAQCAtNjIxLDcgKzYyNCw3IEBAIHR5cGVkZWYgZW51bQogLSAodm9pZClyZXNwb25kVG9D
aGFuZ2VkQ29udGVudHM7CiAtICh2b2lkKXNldElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZCBm
b3JWaWV3OihOU1ZpZXcgKil2aWV3OwogLSAoQk9PTClpc0VkaXRhYmxlOwotLSAoQk9PTClzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJh
bmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wp
c2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNlbGVjdGlvbiAqKXNlbCBzdGlsbFNlbGVjdGlu
ZzooQk9PTClmbGFnOwogLSAoQk9PTClzaG91bGRCZWdpbkVkaXRpbmc6KERPTVJhbmdlICopcmFu
Z2U7CiAtIChCT09MKXNob3VsZEVuZEVkaXRpbmc6KERPTVJhbmdlICopcmFuZ2U7CiAtIChCT09M
KWNhblBhc3RlOwpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40MDgKZGlmZiAtcCAtdSAtcjEuNDA4IFdlYkNvcmUva3dxL1dlYkNv
cmVCcmlkZ2UubW0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JOCBBdWcgMjAwNSAw
NDowNzo0NiAtMDAwMAkxLjQwOAorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQkyMiBB
dWcgMjAwNSAxMTowMDo1NyAtMDAwMApAQCAtODIsNiArODIsNyBAQAogI2ltcG9ydCAiV2ViQ29y
ZVRleHRSZW5kZXJlckZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgog
I2ltcG9ydCAiV2ViQ29yZVNldHRpbmdzLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rpb24uaCIKIAog
QGNsYXNzIE5TVmlldzsKIApAQCAtMTU3NiwxMCArMTU3NywxNiBAQCBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlNlbGVj
dGlvbkdyYW51bGFyaXR5PihfcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CiB9CiAKLS0g
KHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9z
ZVR5cGluZworLSAoV2ViU2VsZWN0aW9uRGlyZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbgogewot
ICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5lciA9IFtbcmFuZ2Ugc3RhcnRDb250YWluZXJdIF9u
b2RlSW1wbF07Ci0gICAgTm9kZUltcGwgKmVuZENvbnRhaW5lciA9IFtbcmFuZ2UgZW5kQ29udGFp
bmVyXSBfbm9kZUltcGxdOworICAgIGtodG1sOjpTZWxlY3Rpb24gc2VsID0gX3BhcnQtPnNlbGVj
dGlvbigpOworICAgIHJldHVybiBzZWwuYmFzZSgpID09IHNlbC5zdGFydCgpID8gV2ViU2VsZWN0
Rm9yd2FyZCA6IFdlYlNlbGVjdEJhY2t3YXJkOworfQorCistICh2b2lkKXNldFNlbGVjdGlvbjoo
V2ViU2VsZWN0aW9uICopc2VsIGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCit7CisgICAg
Tm9kZUltcGwgKnN0YXJ0Q29udGFpbmVyID0gW1tbc2VsIGJhc2VSYW5nZV0gc3RhcnRDb250YWlu
ZXJdIF9ub2RlSW1wbF07CisgICAgTm9kZUltcGwgKmVuZENvbnRhaW5lciA9IFtbW3NlbCBiYXNl
UmFuZ2VdIGVuZENvbnRhaW5lcl0gX25vZGVJbXBsXTsKICAgICBBU1NFUlQoc3RhcnRDb250YWlu
ZXIpOwogICAgIEFTU0VSVChlbmRDb250YWluZXIpOwogICAgIEFTU0VSVChzdGFydENvbnRhaW5l
ci0+Z2V0RG9jdW1lbnQoKSk7CkBAIC0xNTg3LDE2ICsxNTk0LDE2IEBAIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAKICAgICBfcGFydC0+eG1sRG9jSW1wbCgp
LT51cGRhdGVMYXlvdXQoKTsKIAotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHN0YXRpY19jYXN0
PEVBZmZpbml0eT4oc2VsZWN0aW9uQWZmaW5pdHkpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9
IHN0YXRpY19jYXN0PEVBZmZpbml0eT4oW3NlbCBhZmZpbml0eV0pOwogCi0gICAgYm9vbCByYW5n
ZUNvbGxhcHNlZCA9IFtyYW5nZSBjb2xsYXBzZWRdOworICAgIGJvb2wgcmFuZ2VDb2xsYXBzZWQg
PSBbW3NlbCBleHBhbmRlZFJhbmdlXSBjb2xsYXBzZWRdOwogICAgIGlmICghcmFuZ2VDb2xsYXBz
ZWQpCiAgICAgICAgIGFmZmluaXR5ID0gRE9XTlNUUkVBTTsKICAgICAKICAgICAvLyBXb3JrIGFy
b3VuZCBidWcgd2hlcmUgaXNSZW5kZXJlZENvbnRlbnQgcmV0dXJucyBmYWxzZSBmb3IgPGJyPiBl
bGVtZW50cyBhdCB0aGUgZW5kcyBvZiBsaW5lcy4KICAgICAvLyBJZiB0aGF0IGJ1ZyB3YXNuJ3Qg
YW4gaXNzdWUsIHdlIGNvdWxkIGp1c3QgbWFrZSB0aGUgcG9zaXRpb24gZnJvbSB0aGUgcmFuZ2Ug
ZGlyZWN0bHkuCi0gICAgUG9zaXRpb24gc3RhcnQoc3RhcnRDb250YWluZXIsIFtyYW5nZSBzdGFy
dE9mZnNldF0pOwotICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWluZXIsIFtyYW5nZSBlbmRPZmZz
ZXRdKTsKKyAgICBQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwgW1tzZWwgYmFzZVJhbmdl
XSBzdGFydE9mZnNldF0pOworICAgIFBvc2l0aW9uIGVuZChlbmRDb250YWluZXIsIFtbc2VsIGJh
c2VSYW5nZV0gZW5kT2Zmc2V0XSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChz
dGFydCwgYWZmaW5pdHkpOwogICAgIHN0YXJ0ID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50
KCk7CiAKQEAgLTE2MDcsNiArMTYxNCwxMSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAq
Zm9ybUVsZW1lbnRGCiAKICAgICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5p
dHk/CiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbihzdGFydCwgYWZmaW5pdHksIGVuZCwga2h0bWw6
OlNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBpZiAoW3NlbCBkaXJlY3Rpb25dID09IFdlYlRl
eHRTZWxlY3RCYWNrd2FyZCkgeworICAgICAgICBzZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudChz
ZWxlY3Rpb24uZXh0ZW50KCksIHNlbGVjdGlvbi5leHRlbnRBZmZpbml0eSgpLCBzZWxlY3Rpb24u
YmFzZSgpLCBzZWxlY3Rpb24uYmFzZUFmZmluaXR5KCkpOworICAgIH0KKyAgICBzZWxlY3Rpb24u
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShzdGF0aWNfY2FzdDxraHRtbDo6RVRleHRHcmFudWxhcml0
eT4oW3NlbCBncmFudWxhcml0eV0pKTsKKyAgICBfcGFydC0+c2V0U2VsZWN0aW9uR3JhbnVsYXJp
dHkoc3RhdGljX2Nhc3Q8a2h0bWw6OkVUZXh0R3JhbnVsYXJpdHk+KFtzZWwgZ3JhbnVsYXJpdHld
KSk7CiAgICAgX3BhcnQtPnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIGNsb3NlVHlwaW5nKTsKIH0K
IApAQCAtMTYxNSw2ICsxNjI3LDE3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3Jt
RWxlbWVudEYKICAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOl9wYXJ0LT5zZWxl
Y3Rpb24oKS50b1JhbmdlKCkuZ2V0KCldOwogfQogCistIChXZWJTZWxlY3Rpb24gKilzZWxlY3Rp
b24KK3sKKyAgICBXZWJTZWxlY3Rpb24gKnNlbCA9IFtbV2ViU2VsZWN0aW9uIGFsbG9jXSBpbml0
XTsKKyAgICBbc2VsIHNldEJhc2VSYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6X3BhcnQt
PnNlbGVjdGlvbigpLmJhc2VSYW5nZSgpLmdldCgpXV07CisgICAgW3NlbCBzZXRFeHBhbmRlZFJh
bmdlOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpfcGFydC0+c2VsZWN0aW9uKCkudG9SYW5nZSgp
LmdldCgpXV07CisgICAgW3NlbCBzZXRBZmZpbml0eTpbc2VsZiBzZWxlY3Rpb25BZmZpbml0eV1d
OworICAgIFtzZWwgc2V0RGlyZWN0aW9uOnN0YXRpY19jYXN0PFdlYlRleHRTZWxlY3Rpb25EaXJl
Y3Rpb24+KFtzZWxmIHNlbGVjdGlvbkRpcmVjdGlvbl0pXTsKKyAgICBbc2VsIHNldEdyYW51bGFy
aXR5OnN0YXRpY19jYXN0PFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eT4oW3NlbGYgc2VsZWN0
aW9uR3JhbnVsYXJpdHldKV07CisgICAgcmV0dXJuIFtzZWwgYXV0b3JlbGVhc2VdOworfQorCiAt
IChOU1JhbmdlKWNvbnZlcnRUb05TUmFuZ2U6KERPTTo6UmFuZ2VJbXBsICopcmFuZ2UKIHsKICAg
ICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5pc0RldGFjaGVkKCkpIHsKSW5kZXg6IFdlYktpdC9XZWJD
b3JlU3VwcG9ydC5zdWJwcm9qL1dlYkJyaWRnZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJCcmlkZ2UubSx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zNjgKZGlmZiAtcCAtdSAtcjEuMzY4IFdlYktpdC9XZWJDb3JlU3VwcG9y
dC5zdWJwcm9qL1dlYkJyaWRnZS5tCi0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9X
ZWJCcmlkZ2UubQkxNyBBdWcgMjAwNSAyMDoxMDo1OSAtMDAwMAkxLjM2OAorKysgV2ViS2l0L1dl
YkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0JMjIgQXVnIDIwMDUgMTE6MDE6MzYgLTAw
MDAKQEAgLTE0NjQsOSArMTQ2NCw5IEBAIHN0YXRpYyBpZCA8V2ViRm9ybURlbGVnYXRlPiBmb3Jt
RGVsZWdhdGUKICAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gaXNFZGl0YWJsZV07CiB9CiAK
LS0gKEJPT0wpc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50
UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZs
YWcKKy0gKEJPT0wpc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNlbGVjdGlvbiAqKXNlbCBz
dGlsbFNlbGVjdGluZzooQk9PTClmbGFnCiB7Ci0gICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXdd
IF9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOmN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOnBy
b3Bvc2VkUmFuZ2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6Zmxh
Z107CisgICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rpb25U
bzpzZWwgc3RpbGxTZWxlY3Rpbmc6ZmxhZ107CiB9CiAKIC0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0
aW5nOihET01SYW5nZSAqKXJhbmdlCkluZGV4OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRl
ZmF1bHRFZGl0aW5nRGVsZWdhdGUubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
S2l0L1dlYlZpZXcuc3VicHJvai9XZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IFdlYktpdC9XZWJWaWV3LnN1YnByb2ov
V2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCi0tLSBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dl
YkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUubQk1IEp1biAyMDA1IDE3OjU0OjQ2IC0wMDAwCTEuOAor
KysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0JMjIg
QXVnIDIwMDUgMTE6MDE6MzYgLTAwMDAKQEAgLTM0LDYgKzM0LDEzIEBACiAjaW1wb3J0IDxXZWJL
aXQvV2ViRWRpdGluZ0RlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlldy5oPgogCisK
KyNpbXBvcnQgIldlYlZpZXdQcml2YXRlLmgiCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJFZGl0
aW5nRGVsZWdhdGVQZW5kaW5nUHVibGljKQorLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2Vi
VmlldyBzaG91bGRDaGFuZ2VTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKWN1cnJlbnQgdG9TZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbiAqKXByb3Bvc2VkIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7
CitAZW5kCisKKwogQGltcGxlbWVudGF0aW9uIFdlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUKIAog
c3RhdGljIFdlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgKnNoYXJlZERlbGVnYXRlID0gbmlsOwpA
QCAtNzYsNiArODMsMTEgQEAgc3RhdGljIFdlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgKnNoYXJl
ZAogICAgIHJldHVybiBZRVM7CiB9CiAKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZp
ZXcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKiljdXJyZW50IHRvU2VsZWN0
aW9uOihXZWJTZWxlY3Rpb24gKilwcm9wb3NlZCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCit7
CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmll
dyBzaG91bGRBcHBseVN0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgdG9FbGVt
ZW50c0luRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICByZXR1cm4gWUVTOwpJbmRl
eDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNDY1CmRpZmYgLXAgLXUgLXIxLjQ2NSBXZWJLaXQvV2ViVmlldy5z
dWJwcm9qL1dlYkhUTUxWaWV3Lm0KLS0tIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZp
ZXcubQkxNyBBdWcgMjAwNSAwMToyOToxMCAtMDAwMAkxLjQ2NQorKysgV2ViS2l0L1dlYlZpZXcu
c3VicHJvai9XZWJIVE1MVmlldy5tCTIyIEF1ZyAyMDA1IDExOjAxOjM5IC0wMDAwCkBAIC02OSw2
ICs2OSw4IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogCisjaW1wb3J0IDxXZWJDb3JlL1dlYlNlbGVjdGlvbi5o
PgorCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CiAKIC8vIEluY2x1ZGVkIHNv
IHVzYWdlIG9mIF9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0ciB3aWxsIGNvbXBpbGUK
QEAgLTQ4NCw2ICs0ODYsMTEgQEAgdm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5j
UHRyKAogICAgIHJldHVybiBbW3NlbGYgX2JyaWRnZV0gc2VsZWN0ZWRET01SYW5nZV07CiB9CiAK
Ky0gKFdlYlNlbGVjdGlvbiAqKV9zZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gW1tzZWxmIF9icmlk
Z2VdIHNlbGVjdGlvbl07Cit9CisKIC0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlCiB7CiAgICAgaWYgKHJhbmdlID09IG5pbCB8fCBbcmFuZ2UgY29sbGFwc2VkXSkK
QEAgLTUyNiwxNSArNTMzLDE1IEBAIHZvaWQgKl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVu
Y1B0cigKIAogICAgIHN3aXRjaCAoZGVsZXRpb25BY3Rpb24pIHsKICAgICAgICAgY2FzZSBkZWxl
dGVTZWxlY3Rpb25BY3Rpb246Ci0gICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFu
Z2U6cmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBp
bmc6WUVTXTsKKyAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24g
d2ViU2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyYW5nZSBleHBhbmRlZFJhbmdlOnJhbmdlIGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0
Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VU
eXBpbmc6WUVTXTsKICAgICAgICAgICAgIFticmlkZ2UgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0
RGVsZXRlOnNtYXJ0RGVsZXRlXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGRl
bGV0ZUtleUFjdGlvbjoKLSAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpy
YW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpO
T107CisgICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHdlYlNl
bGVjdGlvbldpdGhCYXNlUmFuZ2U6cmFuZ2UgZXhwYW5kZWRSYW5nZTpyYW5nZSBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndh
cmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5n
Ok5PXTsKICAgICAgICAgICAgIFticmlkZ2UgZGVsZXRlS2V5UHJlc3NlZFdpdGhTbWFydERlbGV0
ZTpzbWFydERlbGV0ZV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBmb3J3YXJk
RGVsZXRlS2V5QWN0aW9uOgotICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdl
OnJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5n
Ok5PXTsKKyAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gd2Vi
U2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyYW5nZSBleHBhbmRlZFJhbmdlOnJhbmdlIGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9y
d2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBp
bmc6Tk9dOwogICAgICAgICAgICAgW2JyaWRnZSBmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZFdpdGhT
bWFydERlbGV0ZTpzbWFydERlbGV0ZV07CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0z
MzAwLDEyICszMzA3LDIwIEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7
CiAgICAgW1tzZWxmIF9icmlkZ2VdIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWFdOwogfQog
CistIChCT09MKXNob3VsZENoYW5nZVNlbGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKiluZXdTZWxl
Y3Rpb24gc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZworeworICAgIFdlYkJyaWRnZSAqYnJpZGdl
ID0gW3NlbGYgX2JyaWRnZV07CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKKyAgICByZXR1cm4gKFt3ZWJWaWV3IGVkaXRpbmdEZWxlZ2F0ZV0gJiYgW1t3ZWJWaWV3IGVk
aXRpbmdEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbjp0b1NlbGVjdGlvbjpzdGlsbFNlbGVjdGluZzopXSkgPworICAgICAg
ICBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNo
b3VsZENoYW5nZVNlbGVjdGlvbjpbc2VsZiBfc2VsZWN0aW9uXSB0b1NlbGVjdGlvbjpuZXdTZWxl
Y3Rpb24gc3RpbGxTZWxlY3Rpbmc6ZmxhZ10gOgorICAgICAgICBbW3dlYlZpZXcgX2VkaXRpbmdE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6W1tzZWxmIF9zZWxlY3Rpb25dIGV4cGFuZGVkUmFuZ2VdIHRvRE9NUmFuZ2U6W25ld1Nl
bGVjdGlvbiBleHBhbmRlZFJhbmdlXSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5
XSBzdGlsbFNlbGVjdGluZzpmbGFnXTsKK30KKwogLSAodm9pZClfYWx0ZXJDdXJyZW50U2VsZWN0
aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJTZWxl
Y3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJTZWxlY3Rpb25HcmFudWxh
cml0eSlncmFudWxhcml0eQogewogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRn
ZV07CiAgICAgRE9NUmFuZ2UgKnByb3Bvc2VkUmFuZ2UgPSBbYnJpZGdlIHJhbmdlQnlBbHRlcmlu
Z0N1cnJlbnRTZWxlY3Rpb246YWx0ZXJhdGlvbiBkaXJlY3Rpb246ZGlyZWN0aW9uIGdyYW51bGFy
aXR5OmdyYW51bGFyaXR5XTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXdd
OwotICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3
ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2Vd
IHRvRE9NUmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmlu
aXR5XSBzdGlsbFNlbGVjdGluZzpOT10pIHsKKyAgICBpZiAoW3NlbGYgc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uVG86W1dlYlNlbGVjdGlvbiB3ZWJTZWxlY3Rpb25XaXRoUmFuZ2U6cHJvcG9zZWRSYW5n
ZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XV0gc3RpbGxTZWxlY3Rpbmc6Tk9d
KSB7CiAgICAgICAgIFticmlkZ2UgYWx0ZXJDdXJyZW50U2VsZWN0aW9uOmFsdGVyYXRpb24gZGly
ZWN0aW9uOmRpcmVjdGlvbiBncmFudWxhcml0eTpncmFudWxhcml0eV07CiAgICAgfQogfQpAQCAt
MzMxNCw4ICszMzI5LDcgQEAgc3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsK
IHsKICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwogICAgIERPTVJhbmdl
ICpwcm9wb3NlZFJhbmdlID0gW2JyaWRnZSByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9u
OmFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5jZTp2ZXJ0aWNhbERpc3RhbmNlXTsKLSAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlmIChbW3dlYlZpZXcgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVk
RE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIHRvRE9NUmFuZ2U6cHJvcG9zZWRSYW5nZSBh
ZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpOT10pIHsK
KyAgICBpZiAoW3NlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dlYlNlbGVjdGlvbiB3ZWJT
ZWxlY3Rpb25XaXRoUmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlv
bkFmZmluaXR5XV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CiAgICAgICAgIFticmlkZ2UgYWx0ZXJD
dXJyZW50U2VsZWN0aW9uOmFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5jZTp2ZXJ0aWNhbERpc3Rh
bmNlXTsKICAgICB9CiB9CkBAIC0zNTI3LDkgKzM1NDEsOCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcg
Kmxhc3RIaXRWaWV3ID0gbmlsOwogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRn
ZV07CiAgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2JyaWRnZSByYW5nZUJ5RXhwYW5kaW5nU2VsZWN0
aW9uV2l0aEdyYW51bGFyaXR5OmdyYW51bGFyaXR5XTsKICAgICBpZiAocmFuZ2UgJiYgIVtyYW5n
ZSBjb2xsYXBzZWRdKSB7Ci0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmll
d107Ci0gICAgICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVk
UmFuZ2VdIHRvRE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0
eV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7Ci0gICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVk
RE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0eV0gY2xvc2VU
eXBpbmc6WUVTXTsKKyAgICAgICAgaWYgKFtzZWxmIHNob3VsZENoYW5nZVNlbGVjdGlvblRvOltX
ZWJTZWxlY3Rpb24gd2ViU2VsZWN0aW9uV2l0aFJhbmdlOnJhbmdlIGFmZmluaXR5OlticmlkZ2Ug
c2VsZWN0aW9uQWZmaW5pdHldXSBzdGlsbFNlbGVjdGluZzpOT10pIHsKKyAgICAgICAgICAgIFti
cmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gd2ViU2VsZWN0aW9uV2l0aEJhc2VSYW5n
ZTpyYW5nZSBleHBhbmRlZFJhbmdlOnJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZm
aW5pdHldIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdl
IHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6WUVTXTsKICAgICAgICAgfQogICAg
IH0KIH0KQEAgLTQ1MzUsNyArNDU0OCw4IEBAIHN0YXRpYyBET01SYW5nZSAqdW5pb25ET01SYW5n
ZXMoRE9NUmFuZ2UKICAgICB9CiAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IFtzZWxmIF9zZWxl
Y3RlZFJhbmdlXTsKICAgICBOU19EVVJJTkcKLSAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERP
TVJhbmdlOnVuaW9uRE9NUmFuZ2VzKG1hcmssIHNlbGVjdGlvbikgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICAgICAgRE9NUmFuZ2Ug
KnIgPSB1bmlvbkRPTVJhbmdlcyhtYXJrLCBzZWxlY3Rpb24pOworICAgICAgICBbYnJpZGdlIHNl
dFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHdlYlNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6ciBleHBh
bmRlZFJhbmdlOnIgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0
aW9uOldlYlRleHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3Jh
bnVsYXJpdHldXSBjbG9zZVR5cGluZzpZRVNdOwogICAgIE5TX0hBTkRMRVIKICAgICAgICAgTlNC
ZWVwKCk7CiAgICAgTlNfRU5ESEFORExFUgpAQCAtNDU1MSw3ICs0NTY1LDcgQEAgc3RhdGljIERP
TVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZQogICAgIH0KICAgICBET01SYW5nZSAqc2Vs
ZWN0aW9uID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwogICAgIE5TX0RVUklORwotICAgICAgICBb
YnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6bWFyayBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpZRVNdOworICAgICAgICBbYnJpZGdlIHNldFNlbGVj
dGlvbjpbV2ViU2VsZWN0aW9uIHdlYlNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6bWFyayBleHBhbmRl
ZFJhbmdlOm1hcmsgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0
aW9uOldlYlRleHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3Jh
bnVsYXJpdHldXSBjbG9zZVR5cGluZzpZRVNdOwogICAgIE5TX0hBTkRMRVIKICAgICAgICAgTlNC
ZWVwKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ1NzQsMTEgKzQ1ODgsMTAgQEAgc3RhdGljIERP
TVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZQogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIE5TU3RyaW5nICp0cmFuc3Bvc2VkID0gW1tjaGFyYWN0ZXJzIHN1YnN0cmluZ0Zyb21JbmRl
eDoxXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpbY2hhcmFjdGVycyBzdWJzdHJpbmdUb0luZGV4
OjFdXTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlmICgh
W1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSB0b0RPTVJhbmdl
OnIgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6
Tk9dKSB7CisgICAgaWYgKCFbc2VsZiBzaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0
aW9uIHdlYlNlbGVjdGlvbldpdGhSYW5nZTpyIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlE
b3duc3RyZWFtXSBzdGlsbFNlbGVjdGluZzpOT10pIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpZRVNdOworICAgIFticmlkZ2Ugc2V0U2VsZWN0
aW9uOltXZWJTZWxlY3Rpb24gd2ViU2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyIGV4cGFuZGVkUmFu
Z2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBkaXJlY3Rpb246V2Vi
VGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxlY3Rpb25HcmFudWxhcml0
eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6dHJhbnNwb3NlZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlw
ZWRdKSB7CiAgICAgICAgIFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRyYW5zcG9z
ZWQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOk5PXTsKICAgICB9CkBAIC00OTY2
LDcgKzQ5NzksNyBAQCBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAg
IGlmIChbc2VsZiBoYXNNYXJrZWRUZXh0XSkgewogICAgICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9
IFtzZWxmIF9icmlkZ2VdOwogICAgICAgICBET01SYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2Jy
aWRnZSBtYXJrZWRUZXh0RE9NUmFuZ2VdOwotICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9N
UmFuZ2U6bWFya2VkVGV4dFJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIGNsb3NlVHlwaW5nOk5PXTsKKyAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNl
bGVjdGlvbiB3ZWJTZWxlY3Rpb25XaXRoQmFzZVJhbmdlOm1hcmtlZFRleHRSYW5nZSBleHBhbmRl
ZFJhbmdlOm1hcmtlZFRleHRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0
cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBz
ZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOk5PXTsKICAgICB9CiB9CiAKQEAgLTQ5
ODYsNyArNDk5OSw3IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAg
ICAgW3NlbGVjdGVkUmFuZ2Ugc2V0U3RhcnQ6W21hcmtlZFRleHRSYW5nZSBzdGFydENvbnRhaW5l
cl0gOnNlbGVjdGlvblN0YXJ0XTsKICAgICBbc2VsZWN0ZWRSYW5nZSBzZXRFbmQ6W21hcmtlZFRl
eHRSYW5nZSBzdGFydENvbnRhaW5lcl0gOnNlbGVjdGlvbkVuZF07CiAKLSAgICBbYnJpZGdlIHNl
dFNlbGVjdGVkRE9NUmFuZ2U6c2VsZWN0ZWRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246
W1dlYlNlbGVjdGlvbiB3ZWJTZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnNlbGVjdGVkUmFuZ2UgZXhw
YW5kZWRSYW5nZTpzZWxlY3RlZFJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdl
IHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6Tk9dOwogfQogCiAtICh2b2lkKV9l
eHRyYWN0QXR0cmlidXRlczooTlNBcnJheSAqKilhIHJhbmdlczooTlNBcnJheSAqKilyIGZyb21B
dHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcKQEAgLTUxOTEsNyAr
NTIwNCw5IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAgICAgLy8g
YWJsZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCiAgICAgV2ViQnJpZGdlICpicmlk
Z2UgPSBbX3ZpZXcgX2JyaWRnZV07CiAgICAgTlNTdHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vi
c3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0aF07Ci0gICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5P
XTsKKyAgICBpZiAoW192aWV3IF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4
dCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgeworICAgICAgICBbYnJp
ZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllF
UyBzbWFydFJlcGxhY2U6Tk9dOworICAgIH0KIH0KIAogLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5T
VGV4dFZpZXdfS2V5QmluZGluZy5tCkBAIC01MzQ0LDcgKzUzNTksOSBAQCBzdGF0aWMgTlNBcnJh
eSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogCiAgICAgICAgIGlmIChyZXZlcnRDaGFuZ2UpIHsK
ICAgICAgICAgICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW192aWV3IF9icmlkZ2VdOwotICAgICAg
ICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNl
bGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAgICAgICAgICAgaWYgKFtf
dmlldyBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBnaXZl
bkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgeworICAgICAgICAgICAgICAgIFti
cmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBs
YWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChnb0xlZnQpIHsKICAgICAgICAgICAgIFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsK
ICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dl
YlZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMDMKZGlmZiAtcCAtdSAtcjEuMzAzIFdl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCi0tLSBXZWJLaXQvV2ViVmlldy5zdWJwcm9q
L1dlYlZpZXcubQkyMCBBdWcgMjAwNSAxNjoyNzozOSAtMDAwMAkxLjMwMworKysgV2ViS2l0L1dl
YlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JMjIgQXVnIDIwMDUgMTE6MDE6NDEgLTAwMDAKQEAgLTg2
LDYgKzg2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUVuY29kaW5ncy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XZWJDb3JlU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViU2VsZWN0aW9uLmg+CiAKICNpbXBvcnQgPEZvdW5k
YXRpb24vTlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgpA
QCAtMjU3Myw2ICsyNTc0LDIzIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2Vi
RnJhbWUKICAgICBbc2VsZiBfcGVyZm9ybVRleHRTaXppbmdTZWxlY3RvcjpAc2VsZWN0b3IoX21h
a2VUZXh0U3RhbmRhcmRTaXplOikgd2l0aE9iamVjdDpzZW5kZXIgb25UcmFja2luZ0RvY3M6bm90
QWxyZWFkeVN0YW5kYXJkIHNlbEZvck5vblRyYWNraW5nRG9jczpAc2VsZWN0b3IoX2Nhbk1ha2VU
ZXh0U3RhbmRhcmRTaXplKSBuZXdTY2FsZUZhY3RvcjoxLjBdOwogfQogCistICh2b2lkKXNldFNl
bGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgaWYgKFtzZWxlY3Rpb24g
YmFzZVJhbmdlXSA9PSBuaWwpIHsKKyAgICAgICAgW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9y
TWFpbkZyYW1lXSBkZXNlbGVjdFRleHRdOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERlcml2
ZSB0aGUgYnJpZGdlIHRvIHVzZSBmcm9tIHRoZSByYW5nZSBwYXNzZWQgaW4uCisgICAgICAgIC8v
IFVzaW5nIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lIGNvdWxkIGdpdmUgdXMgYSBkaWZm
ZXJlbnQgZG9jdW1lbnQgdGhhbgorICAgICAgICAvLyB0aGUgb25lIHRoZSByYW5nZSB1c2VzLgor
ICAgICAgICBbW1tbc2VsZWN0aW9uIGJhc2VSYW5nZV0gc3RhcnRDb250YWluZXJdIF9icmlkZ2Vd
IHNldFNlbGVjdGlvbjpzZWxlY3Rpb24gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICB9Cit9CisKKy0g
KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBbW3NlbGYgX2JyaWRnZUZv
clNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVjdGlvbl07Cit9CisKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdQcmludGluZ1ByaXZhdGUpCkBAIC0yNzEwLDkgKzI3Mjgs
MTEgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAgIHJldHVy
biBbYnJpZGdlIGVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDpbc2VsZiBjb252ZXJ0UG9pbnQ6cG9p
bnQgdG9WaWV3OltbW2JyaWRnZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddXV07
CiB9CiAKLS0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICop
Y3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0
eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzoo
Qk9PTClmbGFnOworLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNlbGVjdGlv
biAqKXNlbCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBf
ZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpjdXJyZW50UmFuZ2UgdG9ET01SYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmluaXR5
OnNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAgIHJldHVybiBbc2Vs
ZiBlZGl0aW5nRGVsZWdhdGVdICYmIFtbc2VsZiBlZGl0aW5nRGVsZWdhdGVdIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRDaGFuZ2VTZWxlY3Rpb246dG9TZWxlY3Rp
b246c3RpbGxTZWxlY3Rpbmc6KV0gPworICAgICAgICBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGlvbjpbc2VsZiBzZWxlY3Rp
b25dIHRvU2VsZWN0aW9uOnNlbCBzdGlsbFNlbGVjdGluZzpmbGFnXSA6CisgICAgICAgIFtbc2Vs
ZiBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZTpbc2VsZiBzZWxlY3RlZERPTVJhbmdlXSB0b0RPTVJhbmdlOltzZWwgZXhw
YW5kZWRSYW5nZV0gYWZmaW5pdHk6W3NlbCBhZmZpbml0eV0gc3RpbGxTZWxlY3Rpbmc6ZmxhZ107
CiB9CiAKIC0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKQEAgLTI3MzMsMTkgKzI3NTMsMTIgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRG
cmFtZShXZWJGcmFtZQogCiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKIHsK
LSAgICBpZiAocmFuZ2UgPT0gbmlsKSB7Ci0gICAgICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0
ZWRPck1haW5GcmFtZV0gZGVzZWxlY3RUZXh0XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBE
ZXJpdmUgdGhlIGJyaWRnZSB0byB1c2UgZnJvbSB0aGUgcmFuZ2UgcGFzc2VkIGluLgotICAgICAg
ICAvLyBVc2luZyBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZSBjb3VsZCBnaXZlIHVzIGEg
ZGlmZmVyZW50IGRvY3VtZW50IHRoYW4KLSAgICAgICAgLy8gdGhlIG9uZSB0aGUgcmFuZ2UgdXNl
cy4KLSAgICAgICAgW1tbcmFuZ2Ugc3RhcnRDb250YWluZXJdIF9icmlkZ2VdIHNldFNlbGVjdGVk
RE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgY2xvc2VUeXBpbmc6WUVT
XTsKLSAgICB9CisgICAgW3NlbGYgc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gd2ViU2VsZWN0
aW9uV2l0aEJhc2VSYW5nZTpyYW5nZSBleHBhbmRlZFJhbmdlOnJhbmdlIGFmZmluaXR5OnNlbGVj
dGlvbkFmZmluaXR5IGRpcmVjdGlvbjpbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJh
bWVdIHNlbGVjdGlvbkRpcmVjdGlvbl0gZ3JhbnVsYXJpdHk6W1tzZWxmIF9icmlkZ2VGb3JTZWxl
Y3RlZE9yTWFpbkZyYW1lXSBzZWxlY3Rpb25HcmFudWxhcml0eV1dXTsKIH0KIAogLSAoRE9NUmFu
Z2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlRm9yU2Vs
ZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0ZWRET01SYW5nZV07CisgICAgcmV0dXJuIFtbc2VsZiBz
ZWxlY3Rpb25dIGV4cGFuZGVkUmFuZ2VdOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNl
bGVjdGlvbkFmZmluaXR5CkluZGV4OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdJbnRl
cm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJw
cm9qL1dlYlZpZXdJbnRlcm5hbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXAg
LXUgLXIxLjIxIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld0ludGVybmFsLmgKLS0tIFdl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld0ludGVybmFsLmgJMTQgQXVnIDIwMDUgMDk6MTI6
NDggLTAwMDAJMS4yMQorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwu
aAkyMiBBdWcgMjAwNSAxMTowMTo0MSAtMDAwMApAQCAtMzIsNiArMzIsNyBAQAogCiBAY2xhc3Mg
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIEBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3Q7CitAY2xh
c3MgV2ViU2VsZWN0aW9uOwogCiBAcHJvdG9jb2wgV2ViRG9jdW1lbnREcmFnZ2luZzsKIApAQCAt
MTIyLDcgKzEyMyw3IEBACiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0VkaXRpbmdFeHRy
YXMpCiAtIChCT09MKV9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6KE5TRXZlbnQgKilldmVudDsK
LS0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVu
dFJhbmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClm
bGFnOworLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNlbGVjdGlvbiAqKXNl
bCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnOwogLSAoQk9PTClfc2hvdWxkQmVnaW5FZGl0aW5n
SW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKIC0gKEJPT0wpX3Nob3VsZEVuZEVkaXRpbmdJ
bkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwogLSAoQk9PTClfY2FuUGFzdGU7CkluZGV4OiBX
ZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNDcKZGlmZiAtcCAtdSAtcjEuMTQ3IFdlYktpdC9XZWJWaWV3
LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJW
aWV3UHJpdmF0ZS5oCTIwIEF1ZyAyMDA1IDE2OjI3OjM5IC0wMDAwCTEuMTQ3CisrKyBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgJMjIgQXVnIDIwMDUgMTE6MDE6NDEgLTAw
MDAKQEAgLTMzLDYgKzMzLDcgQEAKIEBjbGFzcyBXZWJGcmFtZTsKIEBjbGFzcyBXZWJQcmVmZXJl
bmNlczsKIEBjbGFzcyBXZWJDb3JlU2V0dGluZ3M7CitAY2xhc3MgV2ViU2VsZWN0aW9uOwogCiBA
cHJvdG9jb2wgV2ViRm9ybURlbGVnYXRlOwogCkBAIC05MCw2ICs5MSwxMCBAQCB0eXBlZGVmIGVu
dW0gewogLy8gbWVldHMgdGhlc2UgY3JpdGVyaWEuCiAtIChXZWJGcmFtZSAqKXNlbGVjdGVkRnJh
bWU7CiAKKy8vIFRoZXNlIHJlcGxhY2Ugc2V0U2VsZWN0ZWRET01SYW5nZTphZmZpbml0eTogYW5k
IHNlbGVjdGVkRE9NUmFuZ2UsIGluIGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3RWRpdGluZykK
Ky0gKHZvaWQpc2V0U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChXZWJT
ZWxlY3Rpb24gKilzZWxlY3Rpb247CisKIEBlbmQKIAogQGludGVyZmFjZSBXZWJWaWV3IChXZWJQ
cml2YXRlKQo=
</data>
<flag name="review"
          id="422"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3553</attachid>
            <date>2005-08-24 13:54:09 -0700</date>
            <delta_ts>2005-08-28 16:18:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection.txt</filename>
            <type>text/plain</type>
            <size>65367</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zZWxl
Y3Rpb25kYXRhLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbmRhdGEuY3BwCTI0IEF1ZyAyMDA1IDA5OjU2OjU0IC0wMDAwCkBAIC0wLDAgKzEs
MTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJzZWxlY3Rpb25kYXRhLmgiCisjaW5jbHVk
ZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgor
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24u
aCIKKyNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAia2h0bWxfcGFydC5o
IgorCisjaWYgQVBQTEVfQ0hBTkdFUworI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNlbHNl
CisjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCisjZW5kaWYKKwor
bmFtZXNwYWNlIGtodG1sIHsKKworU2VsZWN0aW9uRGF0YTo6U2VsZWN0aW9uRGF0YSgpCisgOiBt
X2FmZmluaXR5KERPV05TVFJFQU0pLCBtX2RpcmVjdGlvbihraHRtbDo6U2VsZWN0aW9uOjpGT1JX
QVJEKSwgbV9ncmFudWxhcml0eShDSEFSQUNURVIpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNl
bGVjdGlvbkRhdGEoU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBiYXNlUmFuZ2UsIGtodG1sOjpF
QWZmaW5pdHkgYWZmaW5pdHksIGtodG1sOjpTZWxlY3Rpb246OkVEaXJlY3Rpb24gZGlyZWN0aW9u
LCBraHRtbDo6RVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKKyA6IG1fYWZmaW5pdHkoRE9X
TlNUUkVBTSksIG1fZGlyZWN0aW9uKGtodG1sOjpTZWxlY3Rpb246OkZPUldBUkQpLCBtX2dyYW51
bGFyaXR5KENIQVJBQ1RFUikKK3sKKyAgICBzZXRCYXNlUmFuZ2UoYmFzZVJhbmdlKTsKKyAgICBz
ZXRBZmZpbml0eShhZmZpbml0eSk7CisgICAgc2V0RGlyZWN0aW9uKGRpcmVjdGlvbik7CisgICAg
c2V0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOworfQorCitTZWxlY3Rpb25EYXRhOjpTZWxlY3Rp
b25EYXRhKGNvbnN0IFNlbGVjdGlvbkRhdGEgJmNvcHkpCisgOiBtX2FmZmluaXR5KERPV05TVFJF
QU0pLCBtX2RpcmVjdGlvbihraHRtbDo6U2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFudWxhcml0
eShDSEFSQUNURVIpCit7CisgICAgc2V0QmFzZVJhbmdlKGNvcHkuYmFzZVJhbmdlKCkpOworICAg
IHNldEFmZmluaXR5KGNvcHkuYWZmaW5pdHkoKSk7CisgICAgc2V0RGlyZWN0aW9uKGNvcHkuZGly
ZWN0aW9uKCkpOworICAgIHNldEdyYW51bGFyaXR5KGNvcHkuZ3JhbnVsYXJpdHkoKSk7Cit9CisK
K1NoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gU2VsZWN0aW9uRGF0YTo6YmFzZVJhbmdlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9iYXNlUmFuZ2U7Cit9CisKK3ZvaWQgU2VsZWN0aW9uRGF0YTo6
c2V0QmFzZVJhbmdlKFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gYmFzZVJhbmdlKQoreworICAg
IGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICBtX2Jhc2VSYW5nZSA9IGJhc2VSYW5nZS5nZXQo
KSA/IFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4oYmFzZVJhbmdlLT5jbG9uZVJhbmdlKGV4Y2Vw
dGlvbmNvZGUpKSA6IFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4oKTsKK30KKworU2hhcmVkUHRy
PERPTTo6UmFuZ2VJbXBsPiBTZWxlY3Rpb25EYXRhOjpyYW5nZSgpIGNvbnN0Cit7CisgICAgaWYo
ISBtX2Jhc2VSYW5nZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxET006OlJhbmdl
SW1wbD4oKTsKKworICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICBET006Ok5vZGVJbXBs
ICpzdGFydENvbnRhaW5lciA9IG1fYmFzZVJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb25j
b2RlKTsKKyAgICBET006Ok5vZGVJbXBsICplbmRDb250YWluZXIgPSBtX2Jhc2VSYW5nZS0+ZW5k
Q29udGFpbmVyKGV4Y2VwdGlvbmNvZGUpOworICAgIEFTU0VSVChzdGFydENvbnRhaW5lcik7Cisg
ICAgQVNTRVJUKGVuZENvbnRhaW5lcik7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyLT5nZXRE
b2N1bWVudCgpKTsKKyAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmdldERvY3VtZW50KCkgPT0g
ZW5kQ29udGFpbmVyLT5nZXREb2N1bWVudCgpKTsKKworICAgIHN0YXJ0Q29udGFpbmVyLT5nZXRE
b2N1bWVudCgpLT5wYXJ0KCktPnhtbERvY0ltcGwoKS0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICBF
QWZmaW5pdHkgYWZmaW5pdHkgPSBtX2FmZmluaXR5OworICAgIGJvb2wgcmFuZ2VDb2xsYXBzZWQg
PSBtX2Jhc2VSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbmNvZGUpOworICAgIGlmICghIHJhbmdl
Q29sbGFwc2VkKQorICAgICAgICBhZmZpbml0eSA9IERPV05TVFJFQU07CisKKyAgICAvLyBXb3Jr
IGFyb3VuZCBidWcgd2hlcmUgaXNSZW5kZXJlZENvbnRlbnQgcmV0dXJucyBmYWxzZSBmb3IgPGJy
PiBlbGVtZW50cyBhdCB0aGUgZW5kcyBvZiBsaW5lcy4KKyAgICAvLyBJZiB0aGF0IGJ1ZyB3YXNu
J3QgYW4gaXNzdWUsIHdlIGNvdWxkIGp1c3QgbWFrZSB0aGUgcG9zaXRpb24gZnJvbSB0aGUgcmFu
Z2UgZGlyZWN0bHkuCisgICAgRE9NOjpQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwgbV9i
YXNlUmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbmNvZGUpKTsKKyAgICBET006OlBvc2l0aW9u
IGVuZChlbmRDb250YWluZXIsIG1fYmFzZVJhbmdlLT5lbmRPZmZzZXQoZXhjZXB0aW9uY29kZSkp
OworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQoc3RhcnQsIG1fYWZmaW5pdHkpOwor
ICAgIHN0YXJ0ID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7CisKKyAgICBpZiAocmFu
Z2VDb2xsYXBzZWQpIHsKKyAgICAgICAgc2V0QWZmaW5pdHlVc2luZ0xpbmVQb3NpdGlvbih2aXNp
YmxlU3RhcnQpOworICAgICAgICBhZmZpbml0eSA9IHZpc2libGVTdGFydC5hZmZpbml0eSgpOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KKyAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uKHN0YXJ0LCBtX2FmZmluaXR5LCBlbmQsIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKG1fZGlyZWN0aW9uID09IGtodG1sOjpTZWxlY3Rp
b246OkJBQ0tXQVJEKSB7CisgICAgICAgIHNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KHNlbGVj
dGlvbi5leHRlbnQoKSwgc2VsZWN0aW9uLmV4dGVudEFmZmluaXR5KCksIHNlbGVjdGlvbi5iYXNl
KCksIHNlbGVjdGlvbi5iYXNlQWZmaW5pdHkoKSk7CisgICAgfQorICAgIHNlbGVjdGlvbi5leHBh
bmRVc2luZ0dyYW51bGFyaXR5KG1fZ3JhbnVsYXJpdHkpOworCisgICAgcmV0dXJuIHNlbGVjdGlv
bi50b1JhbmdlKCk7Cit9CisKKwora2h0bWw6OkVBZmZpbml0eSBTZWxlY3Rpb25EYXRhOjphZmZp
bml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYWZmaW5pdHk7Cit9CisKK3ZvaWQgU2VsZWN0
aW9uRGF0YTo6c2V0QWZmaW5pdHkoa2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSkKK3sKKyAgICBt
X2FmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKKwora2h0bWw6OlNlbGVjdGlvbjo6RURpcmVjdGlv
biBTZWxlY3Rpb25EYXRhOjpkaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RpcmVj
dGlvbjsKK30KKwordm9pZCBTZWxlY3Rpb25EYXRhOjpzZXREaXJlY3Rpb24oa2h0bWw6OlNlbGVj
dGlvbjo6RURpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgbV9kaXJlY3Rpb24gPSBkaXJlY3Rp
b247Cit9CisKKwora2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgU2VsZWN0aW9uRGF0YTo6Z3JhbnVs
YXJpdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2dyYW51bGFyaXR5OworfQorCit2b2lkIFNl
bGVjdGlvbkRhdGE6OnNldEdyYW51bGFyaXR5KGtodG1sOjpFVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQoreworICAgIG1fZ3JhbnVsYXJpdHkgPSBncmFudWxhcml0eTsKK30KKworfSAvLyBu
YW1lc3BhY2Uga2h0bWwKKwpJbmRleDoga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmgKLS0tIGtodG1s
L2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGto
dG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5oCTI0IEF1ZyAyMDA1IDA5OjUxOjUwIC0wMDAwCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLSFRNTF9FRElUSU5HX1dFQlNF
TEVDVElPTl9ICisjZGVmaW5lIEtIVE1MX0VESVRJTkdfV0VCU0VMRUNUSU9OX0gKKworI2luY2x1
ZGUgInRleHRfYWZmaW5pdHkuaCIKKyNpbmNsdWRlICJ0ZXh0X2dyYW51bGFyaXR5LmgiCisjaW5j
bHVkZSAic2VsZWN0aW9uLmgiCisKK2NsYXNzIERPTTo6UmFuZ2VJbXBsOworCituYW1lc3BhY2Ug
a2h0bWwgeworCitjbGFzcyBTZWxlY3Rpb25EYXRhCit7CitwdWJsaWM6CisgICAgU2VsZWN0aW9u
RGF0YSgpOworICAgIFNlbGVjdGlvbkRhdGEoU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBiYXNl
UmFuZ2UsIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGtodG1sOjpTZWxlY3Rpb246OkVEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBraHRtbDo6RVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Cisg
ICAgU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rpb25EYXRhICZjb3B5KTsKKworICAgIFNoYXJl
ZFB0cjxET006OlJhbmdlSW1wbD4gYmFzZVJhbmdlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYXNl
UmFuZ2UoU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBiYXNlUmFuZ2UpOworICAgIFNoYXJlZFB0
cjxET006OlJhbmdlSW1wbD4gcmFuZ2UoKSBjb25zdDsKKyAgICBraHRtbDo6RUFmZmluaXR5IGFm
ZmluaXR5KCkgY29uc3Q7CisgICAgdm9pZCBzZXRBZmZpbml0eShraHRtbDo6RUFmZmluaXR5IGFm
ZmluaXR5KTsKKyAgICBraHRtbDo6U2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNv
bnN0OworICAgIHZvaWQgc2V0RGlyZWN0aW9uKGtodG1sOjpTZWxlY3Rpb246OkVEaXJlY3Rpb24g
ZGlyZWN0aW9uKTsKKyAgICBraHRtbDo6RVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNv
bnN0OworICAgIHZvaWQgc2V0R3JhbnVsYXJpdHkoa2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpOworCitwcml2YXRlOgorCisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBt
X2Jhc2VSYW5nZTsKKyAgICBraHRtbDo6RUFmZmluaXR5IG1fYWZmaW5pdHk7CisgICAga2h0bWw6
OlNlbGVjdGlvbjo6RURpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBraHRtbDo6RVRleHRHcmFu
dWxhcml0eSBtX2dyYW51bGFyaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2Uga2h0bWwKKworI2Vu
ZGlmIC8vIEtIVE1MX0VESVRJTkdfU0VMRUNUSU9OX0gKKwpJbmRleDoga3dxL1dlYlNlbGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGt3cS9XZWJTZWxlY3Rpb24uaAotLS0ga3dxL1dlYlNl
bGVjdGlvbi5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt3cS9XZWJTZWxlY3Rpb24u
aAkyNCBBdWcgMjAwNSAwNTowMzo0MSAtMDAwMApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisKK0BjbGFzcyBET01SYW5nZTsKK0BjbGFzcyBX
ZWJTZWxlY3Rpb25Qcml2YXRlOworCit0eXBlZGVmIGVudW0geworICAgIFdlYlRleHRTZWxlY3RG
b3J3YXJkLAorICAgIFdlYlRleHRTZWxlY3RCYWNrd2FyZAorfSBXZWJUZXh0U2VsZWN0aW9uRGly
ZWN0aW9uOworCit0eXBlZGVmIGVudW0geworICAgIFdlYlRleHRTZWxlY3RCeUNoYXJhY3RlciwK
KyAgICBXZWJUZXh0U2VsZWN0QnlXb3JkLAorICAgIFdlYlRleHRTZWxlY3RCeUxpbmUsCisgICAg
V2ViVGV4dFNlbGVjdEJ5UGFyYWdyYXBoCit9IFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eTsK
KworQGludGVyZmFjZSBXZWJTZWxlY3Rpb24gOiBOU09iamVjdAoreworICAgIFdlYlNlbGVjdGlv
blByaXZhdGUgKl9wcml2YXRlOworfQorCisrIChpZClzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOihE
T01SYW5nZSAqKXNlbGVjdGlvbkJhc2VSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0
eSlzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24p
c2VsZWN0aW9uRGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJp
dHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7CisrIChpZClzZWxlY3Rpb25XaXRoUmFuZ2U6KERPTVJh
bmdlICopc2VsZWN0aW9uUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0
aW9uQWZmaW5pdHk7CistIChET01SYW5nZSAqKWJhc2VSYW5nZTsKKy0gKHZvaWQpc2V0QmFzZVJh
bmdlOihET01SYW5nZSAqKW5ld0Jhc2VSYW5nZTsKKy0gKERPTVJhbmdlICopcmFuZ2U7CistIChO
U1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5OworLSAodm9pZClzZXRBZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSluZXdBZmZpbml0eTsKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24p
ZGlyZWN0aW9uOworLSAodm9pZClzZXREaXJlY3Rpb246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rp
b24pbmV3RGlyZWN0aW9uOworLSAoV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFy
aXR5OworLSAodm9pZClzZXRHcmFudWxhcml0eTooV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5
KW5ld0dyYW51bGFyaXR5OworCitAZW5kCisKSW5kZXg6IGt3cS9XZWJTZWxlY3Rpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga3dxL1dlYlNlbGVjdGlvbi5tbQotLS0ga3dxL1dlYlNlbGVjdGlv
bi5tbQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrd3EvV2ViU2VsZWN0aW9uLm1tCTI0
IEF1ZyAyMDA1IDA5OjU4OjEzIC0wMDAwCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgIldlYlNlbGVjdGlvbi5oIgorI2ltcG9ydCAiV2ViU2VsZWN0aW9uUHJpdmF0ZS5o
IgorI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKyNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKwor
I2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgorCitAaW1wbGVtZW50YXRpb24gV2ViU2Vs
ZWN0aW9uCisKKysgKGlkKXNlbGVjdGlvbldpdGhSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25S
YW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQorewor
ICAgIHJldHVybiBbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6c2VsZWN0aW9u
UmFuZ2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOldlYlRleHRTZWxlY3RG
b3J3YXJkIGdyYW51bGFyaXR5OldlYlRleHRTZWxlY3RCeUNoYXJhY3Rlcl07Cit9CisKKysgKGlk
KXNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0aW9uQmFzZVJhbmdlIGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjoo
V2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb24gZ3JhbnVsYXJpdHk6
KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQoreworICAg
IGlkIHNlbCA9IFtbV2ViU2VsZWN0aW9uIGFsbG9jXSBpbml0XTsKKyAgICBpZiAoc2VsKSB7Cisg
ICAgICAgIFtzZWwgc2V0QmFzZVJhbmdlOnNlbGVjdGlvbkJhc2VSYW5nZV07CisgICAgICAgIFtz
ZWwgc2V0QWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHldOworICAgICAgICBbc2VsIHNldERpcmVj
dGlvbjpzZWxlY3Rpb25EaXJlY3Rpb25dOworICAgICAgICBbc2VsIHNldEdyYW51bGFyaXR5OnNl
bGVjdGlvbkdyYW51bGFyaXR5XTsKKyAgICB9CisgICAgcmV0dXJuIFtzZWwgYXV0b3JlbGVhc2Vd
OworfQorCisrIChpZClfc2VsZWN0aW9uV2l0aFNlbGVjdGlvbkRhdGE6KGNvbnN0IGtodG1sOjpT
ZWxlY3Rpb25EYXRhICopZGF0YQoreworICAgIGlkIHNlbCA9IFtbV2ViU2VsZWN0aW9uIGFsbG9j
XSBpbml0XTsKKyAgICBbc2VsIF9zZXRTZWxlY3Rpb25EYXRhOmRhdGFdOworICAgIHJldHVybiBb
c2VsIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdAoreworICAgIF9wcml2YXRlID0gW1tX
ZWJTZWxlY3Rpb25Qcml2YXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKwor
LSAodm9pZClkZWFsbG9jCit7CisgICAgW19wcml2YXRlIHJlbGVhc2VdOworICAgIFtzdXBlciBk
ZWFsbG9jXTsKK30KKworLSAoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilfc2VsZWN0aW9u
RGF0YQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9
IE5VTEwpOworICAgIHJldHVybiBbX3ByaXZhdGUgZGF0YV07Cit9CisKKy0gKHZvaWQpX3NldFNl
bGVjdGlvbkRhdGE6KGNvbnN0IGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0YQoreworICAgIEFT
U0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgICoo
W19wcml2YXRlIGRhdGFdKSA9ICpkYXRhOworfQorCistIChET01SYW5nZSAqKWJhc2VSYW5nZQor
eworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwp
OworICAgIHJldHVybiBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6W19wcml2YXRlIGRhdGFdLT5i
YXNlUmFuZ2UoKS5nZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0QmFzZVJhbmdlOihET01SYW5nZSAq
KW5ld0Jhc2VSYW5nZQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRl
IGRhdGFdICE9IE5VTEwpOworICAgIFtfcHJpdmF0ZSBkYXRhXS0+c2V0QmFzZVJhbmdlKGtodG1s
OjpTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+KFtuZXdCYXNlUmFuZ2UgX3JhbmdlSW1wbF0pKTsK
K30KKworCistIChET01SYW5nZSAqKXJhbmdlCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5p
bCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIFtET01SYW5nZSBfcmFu
Z2VXaXRoSW1wbDpbX3ByaXZhdGUgZGF0YV0tPnJhbmdlKCkuZ2V0KCldOworfQorCisKKy0gKE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUgIT0gbmls
ICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TlNT
ZWxlY3Rpb25BZmZpbml0eT4oW19wcml2YXRlIGRhdGFdLT5hZmZpbml0eSgpKTsKK30KKworLSAo
dm9pZClzZXRBZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSluZXdBZmZpbml0eQoreworICAg
IEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAg
IFtfcHJpdmF0ZSBkYXRhXS0+c2V0QWZmaW5pdHkoc3RhdGljX2Nhc3Q8a2h0bWw6OkVBZmZpbml0
eT4obmV3QWZmaW5pdHkpKTsKK30KKworCistIChXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKWRp
cmVjdGlvbgoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFd
ICE9IE5VTEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJUZXh0U2VsZWN0aW9uRGlyZWN0
aW9uPihbX3ByaXZhdGUgZGF0YV0tPmRpcmVjdGlvbigpKTsKK30KKworLSAodm9pZClzZXREaXJl
Y3Rpb246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pbmV3RGlyZWN0aW9uCit7CisgICAgQVNT
RVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgW19w
cml2YXRlIGRhdGFdLT5zZXREaXJlY3Rpb24oc3RhdGljX2Nhc3Q8a2h0bWw6OlNlbGVjdGlvbjo6
RURpcmVjdGlvbj4obmV3RGlyZWN0aW9uKSk7Cit9CisKKworLSAoV2ViVGV4dFNlbGVjdGlvbkdy
YW51bGFyaXR5KWdyYW51bGFyaXR5Cit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBb
X3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlRleHRT
ZWxlY3Rpb25HcmFudWxhcml0eT4oW19wcml2YXRlIGRhdGFdLT5ncmFudWxhcml0eSgpKTsKK30K
KworLSAodm9pZClzZXRHcmFudWxhcml0eTooV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KW5l
d0dyYW51bGFyaXR5Cit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUg
ZGF0YV0gIT0gTlVMTCk7CisgICAgW19wcml2YXRlIGRhdGFdLT5zZXRHcmFudWxhcml0eShzdGF0
aWNfY2FzdDxraHRtbDo6RVRleHRHcmFudWxhcml0eT4obmV3R3JhbnVsYXJpdHkpKTsKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViU2VsZWN0aW9uUHJpdmF0ZQorCistIChpZClpbml0
Cit7CisgICAgZGF0YSA9IG5ldyBraHRtbDo6U2VsZWN0aW9uRGF0YSgpOworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBkZWxldGUgZGF0YTsKKyAgICBbc3Vw
ZXIgZGVhbGxvY107Cit9CisKKy0gKGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0YQoreworICAg
IHJldHVybiBkYXRhOworfQorCitAZW5kCisKSW5kZXg6IGt3cS9XZWJTZWxlY3Rpb25Qcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpkaWZmIC1OcHUga3dxL1dlYlNlbGVjdGlvblByaXZhdGUuaAotLS0ga3dx
L1dlYlNlbGVjdGlvblByaXZhdGUuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrd3Ev
V2ViU2VsZWN0aW9uUHJpdmF0ZS5oCTI0IEF1ZyAyMDA1IDA1OjMwOjIxIC0wMDAwCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW5jbHVk
ZSAic2VsZWN0aW9uZGF0YS5oIgorCitAaW50ZXJmYWNlIFdlYlNlbGVjdGlvbiAoV2ViU2VsZWN0
aW9uUHJpdmF0ZUFjY2Vzc29ycykKKworKyAoaWQpX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRh
Oihjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAqKWRhdGE7CistIChjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uRGF0YSAqKV9zZWxlY3Rpb25EYXRhOworLSAodm9pZClfc2V0U2VsZWN0aW9uRGF0YToo
Y29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhOworCitAZW5kCisKK0BpbnRlcmZhY2Ug
V2ViU2VsZWN0aW9uUHJpdmF0ZSA6IE5TT2JqZWN0Cit7CisgICAga2h0bWw6OlNlbGVjdGlvbkRh
dGEgKmRhdGE7Cit9CisKKy0gKGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0YTsKKworQGVuZAor
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL1dlYkNvcmUuZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRpZmYgLXAg
LXUgLXIxLjQ0IFdlYkNvcmUvV2ViQ29yZS5leHAKLS0tIFdlYkNvcmUvV2ViQ29yZS5leHAJMzAg
SnVsIDIwMDUgMDk6MDU6MDEgLTAwMDAJMS40NAorKysgV2ViQ29yZS9XZWJDb3JlLmV4cAkyNCBB
dWcgMjAwNSAyMDo1MTo0MCAtMDAwMApAQCAtMTE3LDYgKzExNyw3IEBACiAub2JqY19jbGFzc19u
YW1lX1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5CiAub2JqY19jbGFzc19uYW1lX1dlYkNvcmVW
aWV3RmFjdG9yeQogLm9iamNfY2xhc3NfbmFtZV9XZWJEYXNoYm9hcmRSZWdpb24KKy5vYmpjX2Ns
YXNzX25hbWVfV2ViU2VsZWN0aW9uCiBfV2ViQ29yZUVsZW1lbnRET01Ob2RlS2V5CiBfV2ViQ29y
ZUVsZW1lbnRGcmFtZUtleQogX1dlYkNvcmVFbGVtZW50SW1hZ2VBbHRTdHJpbmdLZXkKSW5kZXg6
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJMjIgQXVnIDIwMDUgMTg6MTM6NDUgLTAwMDAJMS4xMgorKysg
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjQgQXVnIDIwMDUgMjA6
NTI6MDEgLTAwMDAKQEAgLTIzNDcsNiArMjM0NywxNiBAQAogCQlBOEMwRkZGRjA4OTcwMUZDMDBC
QTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFydHpTdXBwb3J0
Lm1tICovOyB9OwogCQlBOEZEOEI4NjA4N0NCNDRDMDBEQzM3MDcgLyogS1dRV01hdHJpeC5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThDMDg3
OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4Lm1tICovOyB9OwogCQlBOEZEOEI4NzA4N0NCNDU3
MDBEQzM3MDcgLyogS1dRV01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdNYXRyaXguaCAq
LzsgfTsKKwkJQUUzMzU1QjYwOEJCOEI2MzAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU1QjQwOEJC
OEI2MzAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuY3BwICovOyB9OworCQlBRTMzNTVCNzA4QkI4
QjYzMDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU1QjUwOEJCOEI2MzAwQThBQzQ5IC8qIHNlbGVjdGlv
bmRhdGEuaCAqLzsgfTsKKwkJQUUzMzU1QjgwOEJCOEJCMzAwQThBQzQ5IC8qIHNlbGVjdGlvbmRh
dGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUz
MzU1QjQwOEJCOEI2MzAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuY3BwICovOyB9OworCQlBRTMz
NTVCQTA4QkI4QkMzMDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU1QjUwOEJCOEI2MzAwQThBQzQ5IC8q
IHNlbGVjdGlvbmRhdGEuaCAqLzsgfTsKKwkJQUUzMzU1RkIwOEJDMzY2NjAwQThBQzQ5IC8qIFdl
YlNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUUzMzU1RjgwOEJDMzY2NjAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oICovOyB9OworCQlB
RTMzNTVGQzA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU1RjkwOEJDMzY2NjAwQThBQzQ5
IC8qIFdlYlNlbGVjdGlvbi5tbSAqLzsgfTsKKwkJQUUzMzU1RkQwOEJDMzY2NjAwQThBQzQ5IC8q
IFdlYlNlbGVjdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFFMzM1NUZBMDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25Qcml2
YXRlLmggKi87IH07CisJCUFFMzM1NUZFMDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1NUY4
MDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCAqLzsgfTsKKwkJQUUzMzU1RkYwOEJD
MzY2NjAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1NUY5MDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxl
Y3Rpb24ubW0gKi87IH07CisJCUFFMzM1NjAwMDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxlY3Rp
b25Qcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRTMzNTVGQTA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uUHJpdmF0ZS5oICovOyB9
OwogCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lX21hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODhGMDg4RDk3
NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWVfbWFjLm1tICovOyB9OwogCQlCQzE3OTg5MzA4OEQ5
NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkwMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJf
dGhlbWUuY3BwICovOyB9OwogCQlCQzE3OTg5NDA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3Ro
ZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE3
OTg5MTA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmggKi87IH07CkBAIC0zNzE3LDYg
KzM3MjcsMTEgQEAKIAkJQThDMEZCOEMwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEZCOEQwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52
YXNWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNW
aWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEZCOEUwODk3MDFGODAw
QkE1MTE0IC8qIEtDYW52YXNWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtDYW52YXNWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1NUI0MDhC
QjhCNjMwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBzZWxlY3Rpb25kYXRhLmNwcDsgcGF0aCA9IGVkaXRpbmcvc2VsZWN0
aW9uZGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1NUI1MDhCQjhC
NjMwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBzZWxlY3Rpb25kYXRhLmg7IHBhdGggPSBlZGl0aW5nL3NlbGVjdGlvbmRhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU1RjgwOEJDMzY2NjAwQThBQzQ5IC8q
IFdlYlNlbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2Vs
ZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1NUY5MDhCQzM2NjYw
MEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViU2VsZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBRTMzNTVGQTA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VsZWN0aW9uUHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzA2RjI0OTA2RDE4QTdFMDA0QTZGQTMgLyogeHNs
X3N0eWxlc2hlZXRpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSB4c2xfc3R5bGVzaGVldGltcGwuY3BwOyBwYXRoID0geHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZGMjRBMDZEMThBN0UwMDRBNkZB
MyAvKiB4c2xfc3R5bGVzaGVldGltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IHhzbF9zdHlsZXNoZWV0aW1wbC5oOyBwYXRoID0geHNsL3hzbF9zdHlsZXNoZWV0aW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzA2RjI0QjA2RDE4QTdFMDA0QTZGQTMg
LyogeHNsdF9wcm9jZXNzb3JpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSB4c2x0X3Byb2Nlc3NvcmltcGwuY3BwOyBwYXRoID0geHNsL3hzbHRfcHJvY2Vzc29y
aW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODg1LDYgKzU5MDAsOCBA
QAogCQkJCTkzNzhEOUY5MDc2NDBBNDYwMDRCOTdCRiAvKiBtYXJrdXAuY3BwICovLAogCQkJCTkz
QUJFMDY3MDcwMjg1RjYwMEJEOTFGOSAvKiBzZWxlY3Rpb24uaCAqLywKIAkJCQk5M0FCRTA2NjA3
MDI4NUY2MDBCRDkxRjkgLyogc2VsZWN0aW9uLmNwcCAqLywKKwkJCQlBRTMzNTVCNTA4QkI4QjYz
MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5oICovLAorCQkJCUFFMzM1NUI0MDhCQjhCNjMwMEE4
QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmNwcCAqLywKIAkJCQlCRUNFNjdCRDA3MDg3QjI1MDAwN0Mx
NEIgLyogdGV4dF9hZmZpbml0eS5oICovLAogCQkJCTkzMkI5ODM0MDcwMjk3REMwMDMyODA0RiAv
KiB0ZXh0X2dyYW51bGFyaXR5LmggKi8sCiAJCQkJOTNBQkUwNjkwNzAyODVGNjAwQkQ5MUY5IC8q
IHZpc2libGVfcG9zaXRpb24uaCAqLywKQEAgLTYzMjIsNiArNjMzOSw5IEBACiAJCQkJRjU4Nzg1
NTUwMkRFMzc1OTAxRUE0MTIyIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tICovLAogCQkJCTUxNTBD
MkExMDcwMjYyOTAwMEFGNjQyQyAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCAqLywKIAkJCQk1MTUw
QzJBNTA3MDI2Mjk4MDBBRjY0MkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gKi8sCisJCQkJQUUz
MzU1RjgwOEJDMzY2NjAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oICovLAorCQkJCUFFMzM1NUY5
MDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gKi8sCisJCQkJQUUzMzU1RkEwOEJD
MzY2NjAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvblByaXZhdGUuaCAqLywKIAkJCQlGNThFRjU4RTAy
REZERkI3MDE4NjM1Q0EgLyogV2ViQ29yZS5leHAgKi8sCiAJCQkJRjU4RUY1OEQwMkRGREZCNzAx
ODYzNUNBIC8qIFdlYkNvcmUtdGVzdHMuZXhwICovLAogCQkJKTsKQEAgLTY5MTQsNiArNjkzNCw5
IEBACiAJCQkJQkMxNzk4OTQwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxNzk4REEwODhEQTRGODAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZV9t
YWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRUQ4MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJD
b3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1NUI3MDhCQjhCNjMw
MEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRTMzNTVGQjA4
QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRTMz
NTVGRDA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC03ODMxLDYgKzc4NTQsOSBAQAogCQkJCUE4QzAwNUY4MDg5NzRGMDEwMEJBNTExNCAv
KiBLRE9NQ2FjaGVkT2JqZWN0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTZGRUVEQTA4
OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODEwRTM5NTA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQUUzMzU1QkEwOEJCOEJDMzAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEu
aCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1NUZFMDhCQzM2NjYwMEE4QUM0OSAvKiBXZWJTZWxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1NjAwMDhCQzM2NjYwMEE4QUM0OSAvKiBX
ZWJTZWxlY3Rpb25Qcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTkyMzMsNiArOTI1OSw4IEBA
CiAJCQkJQkMxNzk4OTIwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZV9tYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCQzE3OTg5MzA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1l
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNkZFRUQ5MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJD
b3JlU2NyaXB0RGVidWdnZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlBRTMzNTVCNjA4QkI4QjYz
MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRTMzNTVG
QzA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0x
MDAzNiw2ICsxMDA2NCw4IEBACiAJCQkJQThDMDA1RjYwODk3NEVGNzAwQkE1MTE0IC8qIEtET01D
YWNoZWRTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNkZFRURCMDg5ODU4MjMw
MEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
ODEwRTM5NjA4QTQxNjBGMDAzMzNEOTggLyogS0NhbnZhc1RyZWVEZWJ1Zy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBRTMzNTVCODA4QkI4QkIzMDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlBRTMzNTVGRjA4QkMzNjY2MDBBOEFDNDkgLyogV2ViU2VsZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzNApkaWZmIC1wIC11IC1yMS4zMzQgV2ViQ29y
ZS9raHRtbC9raHRtbF9wYXJ0LmNwcAotLS0gV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcAkx
NCBBdWcgMjAwNSAwOToxMjo0MyAtMDAwMAkxLjMzNAorKysgV2ViQ29yZS9raHRtbC9raHRtbF9w
YXJ0LmNwcAkyNCBBdWcgMjAwNSAyMDo1MjowNCAtMDAwMApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgImVkaXRpbmcvbWFya3VwLmgiCiAjaW5jbHVkZSAiZWRpdGluZy9odG1sZWRpdGluZy5o
IgogI2luY2x1ZGUgImVkaXRpbmcvc2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiZWRpdGluZy9zZWxl
Y3Rpb25kYXRhLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2libGVf
dW5pdHMuaCIKQEAgLTUxNjMsNyArNTE2NCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RBbGwo
KQogYm9vbCBLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24g
Jm5ld3NlbGVjdGlvbikgY29uc3QKIHsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgcmV0dXJuIEtX
USh0aGlzKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rp
b24sIG5ld3NlbGVjdGlvbi5zdGFydEFmZmluaXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gS1dR
KHRoaXMpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlvbkRhdGEobmV3c2Vs
ZWN0aW9uLmJhc2VSYW5nZSgpLCBuZXdzZWxlY3Rpb24uZW5kQWZmaW5pdHkoKSwgbmV3c2VsZWN0
aW9uLmlzRm9yd2FyZFNlbGVjdGlvbigpID8ga2h0bWw6OlNlbGVjdGlvbjo6Rk9SV0FSRCA6IGto
dG1sOjpTZWxlY3Rpb246OkJBQ0tXQVJELCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KSwgZmFs
c2UpOwogI2Vsc2UKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjkwCmRpZmYgLXAgLXUgLXIxLjkwIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk5IEp1bCAyMDA1IDIwOjE5
OjA3IC0wMDAwCTEuOTAKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTI0
IEF1ZyAyMDA1IDIwOjUyOjA0IC0wMDAwCkBAIC02NjQsNiArNjY0LDc0IEBAIFNoYXJlZFB0cjxS
YW5nZUltcGw+IFNlbGVjdGlvbjo6dG9SYW5nZSgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitT
aGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb246OmJhc2VSYW5nZSgpIGNvbnN0Cit7CisgICAg
aWYgKGlzTm9uZSgpKQorICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFJhbmdlSW1wbD4oKTsKKwor
ICAgIFBvc2l0aW9uIGZyb20gPSBtX2Jhc2U7CisgICAgUG9zaXRpb24gdG8gPSBtX2V4dGVudDsK
KworICAgIGlmIChmcm9tID09IG1fZW5kKSB7CisgICAgICAgIGZyb20gPSBtX2V4dGVudDsKKyAg
ICAgICAgdG8gPSBtX2Jhc2U7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4g
dXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKKyAgICAvLyBpbiB0
aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3aGljaCBtb2RpZnkgdGhlIERPTS4K
KyAgICAvLyBGYWlsaW5nIHRvIGNhbGwgdGhpcyBjYW4gcmVzdWx0IGluIGVxdWl2YWxlbnRYWFhQ
b3NpdGlvbiBjYWxscyByZXR1cm5pbmcKKyAgICAvLyBpbmNvcnJlY3QgcmVzdWx0cy4KKyAgICBm
cm9tLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CisKKyAgICBQb3NpdGlv
biBzLCBlOworICAgIGlmIChpc0NhcmV0KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlv
biBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5nZSBzdGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1
cyBtYXRjaAorICAgICAgICAvLyB0aGUgY29udmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3Rl
ZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1pbmF0aW9ucyBiYXNlZAorICAgICAgICAvLyBvbiB0
aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2FyZXQsIGlmIGFueS4gCisgICAgICAgIHMgPSBmcm9t
LnVwc3RyZWFtKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAgICAg
ZSA9IHM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlz
IGEgcmFuZ2UsIHNlbGVjdCB0aGUgbWluaW11bSByYW5nZSB0aGF0IGVuY29tcGFzc2VzIHRoZSBz
ZWxlY3Rpb24uCisgICAgICAgIC8vIEFnYWluLCB0aGlzIGlzIHRvIG1hdGNoIHRoZSBjb252ZW50
aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBtYWtlIHN0eWxlIAorICAgICAgICAv
LyBkZXRlcm1pbmF0aW9ucyBiYXNlZCBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWxl
Y3Rpb24uIAorICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIHRoaXMgb3BlcmF0aW9uIGhlbHBzIHRv
IG1ha2Ugc3VyZSB0aGF0IHRoZSAiWCIgc2VsZWN0ZWQgYmVsb3cgaXMgdGhlIAorICAgICAgICAv
LyBvbmx5IHRoaW5nIHNlbGVjdGVkLiBUaGUgcmFuZ2Ugc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRv
ICJsZWFrIiBvdXQgdG8gdGhlIGVuZCBvZiB0aGUgCisgICAgICAgIC8vIHByZXZpb3VzIHRleHQg
bm9kZSwgb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCB0ZXh0IG5vZGUsIGVhY2ggb2Yg
d2hpY2ggaGFzIGEgCisgICAgICAgIC8vIGRpZmZlcmVudCBzdHlsZS4KKyAgICAgICAgLy8gCisg
ICAgICAgIC8vIE9uIGEgdHJlYXN1cmUgbWFwLCA8Yj5YPC9iPiBtYXJrcyB0aGUgc3BvdC4KKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF4gc2VsZWN0ZWQKKyAgICAgICAgLy8KKyAg
ICAgICAgQVNTRVJUKGlzUmFuZ2UoKSk7CisgICAgICAgIHMgPSBmcm9tLmRvd25zdHJlYW0oKTsK
KyAgICAgICAgZSA9IHRvLnVwc3RyZWFtKCk7CisgICAgICAgIGlmIChSYW5nZUltcGw6OmNvbXBh
cmVCb3VuZGFyeVBvaW50cyhzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0
KCkpID4gMCkgeworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUg
dGhlIGVuZC4KKyAgICAgICAgICAgIC8vIFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBz
dGFydCBpZiBjb2xsYXBzZWQgd2hpdGVzcGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4K
KyAgICAgICAgICAgIFBvc2l0aW9uIHRtcCA9IHM7CisgICAgICAgICAgICBzID0gZTsKKyAgICAg
ICAgICAgIGUgPSB0bXA7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHMuZXF1aXZhbGVudFJhbmdl
Q29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAgICAgZSA9IGUuZXF1aXZhbGVudFJhbmdlQ29tcGxp
YW50UG9zaXRpb24oKTsKKyAgICB9CisKKyAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAg
U2hhcmVkUHRyPFJhbmdlSW1wbD4gcmVzdWx0KG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmRvY1B0
cigpKSk7CisgICAgcmVzdWx0LT5zZXRTdGFydChzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZXhjZXB0
aW9uQ29kZSk7CisgICAgaWYgKGV4Y2VwdGlvbkNvZGUpIHsKKyAgICAgICAgRVJST1IoIkV4Y2Vw
dGlvbiBzZXR0aW5nIFJhbmdlIHN0YXJ0IGZyb20gU2VsZWN0aW9uOiAlZCIsIGV4Y2VwdGlvbkNv
ZGUpOworICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFJhbmdlSW1wbD4oKTsKKyAgICB9CisgICAg
cmVzdWx0LT5zZXRFbmQoZS5ub2RlKCksIGUub2Zmc2V0KCksIGV4Y2VwdGlvbkNvZGUpOworICAg
IGlmIChleGNlcHRpb25Db2RlKSB7CisgICAgICAgIEVSUk9SKCJFeGNlcHRpb24gc2V0dGluZyBS
YW5nZSBlbmQgZnJvbSBTZWxlY3Rpb246ICVkIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIHJl
dHVybiBTaGFyZWRQdHI8UmFuZ2VJbXBsPigpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB2b2lkIFNlbGVjdGlvbjo6bGF5b3V0KCkKIHsKICAgICBpZiAoaXNOb25lKCkgfHwgIW1f
c3RhcnQubm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fZW5kLm5vZGUoKS0+aW5Eb2N1bWVudCgp
KSB7CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC1wIC11IC1yMS4zOSBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvc2VsZWN0aW9uLmgKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaAky
MyBKdW4gMjAwNSAxOTo0Nzo0OCAtMDAwMAkxLjM5CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcv
c2VsZWN0aW9uLmgJMjQgQXVnIDIwMDUgMjA6NTI6MDQgLTAwMDAKQEAgLTEwOSw4ICsxMDksMTAg
QEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0g
Q0FSRVQ7IH0KICAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IFJB
TkdFOyB9CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkg
IT0gTk9ORTsgfQorICAgIGJvb2wgaXNGb3J3YXJkU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9iYXNlSXNTdGFydCA/IHRydWUgOiBmYWxzZTsgfQogCiAgICAgU2hhcmVkUHRyPERPTTo6UmFu
Z2VJbXBsPiB0b1JhbmdlKCkgY29uc3Q7CisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBi
YXNlUmFuZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgZGVidWdQb3NpdGlvbigpIGNvbnN0OwogICAg
IHZvaWQgZGVidWdSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0ICpyLCBib29sIHNlbGVjdGVk
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yMjYKZGlmZiAtcCAtdSAtcjEuMjI2IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFy
dC5oCi0tLSBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAkxNyBBdWcgMjAwNSAyMDoxMjoxNSAt
MDAwMAkxLjIyNgorKysgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgJMjQgQXVnIDIwMDUgMjA6
NTI6MDUgLTAwMDAKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFz
cyBSZW5kZXJPYmplY3Q7CiAgICAgY2xhc3MgUmVuZGVyU3R5bGU7CiAgICAgY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uOworICAgIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiAgICAgc3RydWN0IERhc2hib2Fy
ZFJlZ2lvblZhbHVlOwogfQogCkBAIC0zNDUsNyArMzQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9uICZvbGRTZWxl
Y3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpOwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCk7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9u
ICZvbGRTZWxlY3Rpb24sIGNvbnN0IGtodG1sOjpTZWxlY3Rpb24gJm5ld1NlbGVjdGlvbiwga2h0
bWw6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9u
RGF0YSAmc2VsLCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0
OwogCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS42NjIKZGlmZiAtcCAtdSAtcjEuNjYyIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5t
bQotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTIzIEF1ZyAyMDA1IDE4OjMyOjUwIC0w
MDAwCTEuNjYyCisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JMjQgQXVnIDIwMDUgMjA6
NTI6MDcgLTAwMDAKQEAgLTQ3LDYgKzQ3LDggQEAKICNpbXBvcnQgIldlYkNvcmVJbWFnZVJlbmRl
cmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKICNpbXBvcnQgIldlYkRhc2hi
b2FyZFJlZ2lvbi5oIgorI2ltcG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJTZWxl
Y3Rpb25Qcml2YXRlLmgiCiAKICNpbXBvcnQgImNzc19jb21wdXRlZHN0eWxlLmgiCiAjaW1wb3J0
ICJjc3NoZWxwZXIuaCIKQEAgLTcwLDYgKzcyLDcgQEAKICNpbXBvcnQgInJlbmRlcl90ZXh0Lmgi
CiAjaW1wb3J0ICJyZW5kZXJfdGhlbWUuaCIKICNpbXBvcnQgInNlbGVjdGlvbi5oIgorI2ltcG9y
dCAic2VsZWN0aW9uZGF0YS5oIgogI2ltcG9ydCAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2ltcG9y
dCAidmlzaWJsZV90ZXh0LmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC00MTA0LDEy
ICs0MTA3LDkgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlYwogICAg
IFtfYnJpZGdlIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb25dOwogfQogCi1ib29sIEtXUUtIVE1M
UGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmb2xkU2VsZWN0aW9u
LCBjb25zdCBTZWxlY3Rpb24gJm5ld1NlbGVjdGlvbiwga2h0bWw6OkVBZmZpbml0eSBhZmZpbml0
eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QKK2Jvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgJnNlbCwgYm9vbCBzdGls
bFNlbGVjdGluZykgY29uc3QKIHsKLSAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6b2xkU2VsZWN0aW9uLnRvUmFu
Z2UoKS5nZXQoKV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9ET01S
YW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bmV3U2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQo
KV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eTpzdGF0
aWNfY2FzdDxOU1NlbGVjdGlvbkFmZmluaXR5PihhZmZpbml0eSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CisgICAgcmV0
dXJuIFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gX3NlbGVj
dGlvbldpdGhTZWxlY3Rpb25EYXRhOiZzZWxdIHN0aWxsU2VsZWN0aW5nOnN0aWxsU2VsZWN0aW5n
XTsKIH0KIAogdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCklu
ZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4zNDUKZGlmZiAtcCAtdSAtcjEuMzQ1IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaAotLS0g
V2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCTE3IEF1ZyAyMDA1IDIwOjEyOjE1IC0wMDAwCTEu
MzQ1CisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgJMjQgQXVnIDIwMDUgMjA6NTI6MDgg
LTAwMDAKQEAgLTYyLDYgKzYyLDcgQEAgdHlwZWRlZiBraHRtbDo6UmVuZGVyUGFydCBLSFRNTFJl
bmRlclBhcgogQGNsYXNzIERPTUhUTUxUZXh0QXJlYUVsZW1lbnQ7CiBAY2xhc3MgV2ViQ29yZVNl
dHRpbmdzOwogQGNsYXNzIFdlYlNjcmlwdE9iamVjdDsKK0BjbGFzcyBXZWJTZWxlY3Rpb247CiAK
IEBwcm90b2NvbCBXZWJDb3JlRE9NVHJlZUNvcGllcjsKIEBwcm90b2NvbCBXZWJDb3JlUmVuZGVy
VHJlZUNvcGllcjsKQEAgLTMzNyw3ICszMzgsOCBAQCB0eXBlZGVmIGVudW0KIC0gKE5TUmVjdClj
YXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50KW9mZnNldCBhZmZpbml0
eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKIAotLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdl
OihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlv
bkFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nOworLSAodm9pZClzZXRTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZzsK
Ky0gKFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01S
YW5nZTsKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHk7CiAKQEAgLTM4
NSw2ICszODcsNyBAQCB0eXBlZGVmIGVudW0KIC0gKHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0aW9u
OihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJTZWxlY3Rp
b25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJTZWxlY3Rpb25HcmFudWxhcml0
eSlncmFudWxhcml0eTsKIC0gKERPTVJhbmdlICopcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVj
dGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJhdGlvbilhbHRlcmF0aW9uIHZlcnRpY2FsRGlzdGFuY2U6
KGZsb2F0KWRpc3RhbmNlOwogLSAodm9pZClhbHRlckN1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVj
dGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNlOihmbG9hdClkaXN0YW5j
ZTsKKy0gKFdlYlNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb247CiAtIChXZWJT
ZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eTsKIC0gKERPTVJhbmdlICop
c21hcnREZWxldGVSYW5nZUZvclByb3Bvc2VkUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRDaGFy
UmFuZ2U7CiAtICh2b2lkKXNtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3RlU3Ry
aW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKWNoYXJSYW5nZVRvUmVwbGFjZSBiZWZvcmVT
dHJpbmc6KE5TU3RyaW5nICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiop
YWZ0ZXJTdHJpbmc7CkBAIC02MjEsNyArNjI0LDcgQEAgdHlwZWRlZiBlbnVtCiAtICh2b2lkKXJl
c3BvbmRUb0NoYW5nZWRDb250ZW50czsKIC0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1Nl
bGVjdGVkIGZvclZpZXc6KE5TVmlldyAqKXZpZXc7CiAtIChCT09MKWlzRWRpdGFibGU7Ci0tIChC
T09MKXNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJhbmdl
IHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rp
b25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnOwor
LSAoQk9PTClzaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzooV2ViU2VsZWN0aW9uICopc2VsIHN0aWxs
U2VsZWN0aW5nOihCT09MKWZsYWc7CiAtIChCT09MKXNob3VsZEJlZ2luRWRpdGluZzooRE9NUmFu
Z2UgKilyYW5nZTsKIC0gKEJPT0wpc2hvdWxkRW5kRWRpdGluZzooRE9NUmFuZ2UgKilyYW5nZTsK
IC0gKEJPT0wpY2FuUGFzdGU7CkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwOApkaWZmIC1wIC11IC1yMS40MDggV2ViQ29yZS9r
d3EvV2ViQ29yZUJyaWRnZS5tbQotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQk4IEF1
ZyAyMDA1IDA0OjA3OjQ2IC0wMDAwCTEuNDA4CisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdl
Lm1tCTI0IEF1ZyAyMDA1IDIwOjUyOjA5IC0wMDAwCkBAIC04Miw2ICs4Miw3IEBACiAjaW1wb3J0
ICJXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0
b3J5LmgiCiAjaW1wb3J0ICJXZWJDb3JlU2V0dGluZ3MuaCIKKyNpbXBvcnQgIldlYlNlbGVjdGlv
bi5oIgogCiBAY2xhc3MgTlNWaWV3OwogCkBAIC0xNTc2LDEwICsxNTc3LDE2IEBAIHN0YXRpYyBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViU2VsZWN0aW9uR3JhbnVsYXJpdHk+KF9wYXJ0LT5zZWxlY3Rpb25HcmFudWxhcml0eSgpKTsK
IH0KIAotLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmlu
aXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGNsb3NlVHlwaW5nOihC
T09MKWNsb3NlVHlwaW5nCistIChXZWJTZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0
aW9uCiB7Ci0gICAgTm9kZUltcGwgKnN0YXJ0Q29udGFpbmVyID0gW1tyYW5nZSBzdGFydENvbnRh
aW5lcl0gX25vZGVJbXBsXTsKLSAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyID0gW1tyYW5nZSBl
bmRDb250YWluZXJdIF9ub2RlSW1wbF07CisgICAga2h0bWw6OlNlbGVjdGlvbiBzZWwgPSBfcGFy
dC0+c2VsZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbC5iYXNlKCkgPT0gc2VsLnN0YXJ0KCkgPyBX
ZWJTZWxlY3RGb3J3YXJkIDogV2ViU2VsZWN0QmFja3dhcmQ7Cit9CisKKy0gKHZvaWQpc2V0U2Vs
ZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmcK
K3sKKyAgICBOb2RlSW1wbCAqc3RhcnRDb250YWluZXIgPSBbW1tzZWwgYmFzZVJhbmdlXSBzdGFy
dENvbnRhaW5lcl0gX25vZGVJbXBsXTsKKyAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyID0gW1tb
c2VsIGJhc2VSYW5nZV0gZW5kQ29udGFpbmVyXSBfbm9kZUltcGxdOwogICAgIEFTU0VSVChzdGFy
dENvbnRhaW5lcik7CiAgICAgQVNTRVJUKGVuZENvbnRhaW5lcik7CiAgICAgQVNTRVJUKHN0YXJ0
Q29udGFpbmVyLT5nZXREb2N1bWVudCgpKTsKQEAgLTE1ODcsMTYgKzE1OTQsMTYgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIAogICAgIF9wYXJ0LT54bWxE
b2NJbXBsKCktPnVwZGF0ZUxheW91dCgpOwogCi0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc3Rh
dGljX2Nhc3Q8RUFmZmluaXR5PihzZWxlY3Rpb25BZmZpbml0eSk7CisgICAgRUFmZmluaXR5IGFm
ZmluaXR5ID0gc3RhdGljX2Nhc3Q8RUFmZmluaXR5Pihbc2VsIGFmZmluaXR5XSk7CiAKLSAgICBi
b29sIHJhbmdlQ29sbGFwc2VkID0gW3JhbmdlIGNvbGxhcHNlZF07CisgICAgYm9vbCByYW5nZUNv
bGxhcHNlZCA9IFtbc2VsIGJhc2VSYW5nZV0gY29sbGFwc2VkXTsKICAgICBpZiAoIXJhbmdlQ29s
bGFwc2VkKQogICAgICAgICBhZmZpbml0eSA9IERPV05TVFJFQU07CiAgICAgCiAgICAgLy8gV29y
ayBhcm91bmQgYnVnIHdoZXJlIGlzUmVuZGVyZWRDb250ZW50IHJldHVybnMgZmFsc2UgZm9yIDxi
cj4gZWxlbWVudHMgYXQgdGhlIGVuZHMgb2YgbGluZXMuCiAgICAgLy8gSWYgdGhhdCBidWcgd2Fz
bid0IGFuIGlzc3VlLCB3ZSBjb3VsZCBqdXN0IG1ha2UgdGhlIHBvc2l0aW9uIGZyb20gdGhlIHJh
bmdlIGRpcmVjdGx5LgotICAgIFBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcmFuZ2Ug
c3RhcnRPZmZzZXRdKTsKLSAgICBQb3NpdGlvbiBlbmQoZW5kQ29udGFpbmVyLCBbcmFuZ2UgZW5k
T2Zmc2V0XSk7CisgICAgUG9zaXRpb24gc3RhcnQoc3RhcnRDb250YWluZXIsIFtbc2VsIGJhc2VS
YW5nZV0gc3RhcnRPZmZzZXRdKTsKKyAgICBQb3NpdGlvbiBlbmQoZW5kQ29udGFpbmVyLCBbW3Nl
bCBiYXNlUmFuZ2VdIGVuZE9mZnNldF0pOwogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3Rh
cnQoc3RhcnQsIGFmZmluaXR5KTsKICAgICBzdGFydCA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZh
bGVudCgpOwogCkBAIC0xNjA3LDYgKzE2MTQsMTEgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZvcm1FbGVtZW50RgogCiAgICAgLy8gRklYTUU6IENhbiB3ZSBwcm92aWRlIGV4dGVudEFm
ZmluaXR5PwogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24oc3RhcnQsIGFmZmluaXR5LCBlbmQsIGto
dG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKFtzZWwgZGlyZWN0aW9uXSA9PSBX
ZWJUZXh0U2VsZWN0QmFja3dhcmQpIHsKKyAgICAgICAgc2VsZWN0aW9uLnNldEJhc2VBbmRFeHRl
bnQoc2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24uZXh0ZW50QWZmaW5pdHkoKSwgc2VsZWN0
aW9uLmJhc2UoKSwgc2VsZWN0aW9uLmJhc2VBZmZpbml0eSgpKTsKKyAgICB9CisgICAgc2VsZWN0
aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8a2h0bWw6OkVUZXh0R3JhbnVs
YXJpdHk+KFtzZWwgZ3JhbnVsYXJpdHldKSk7CisgICAgX3BhcnQtPnNldFNlbGVjdGlvbkdyYW51
bGFyaXR5KHN0YXRpY19jYXN0PGtodG1sOjpFVGV4dEdyYW51bGFyaXR5Pihbc2VsIGdyYW51bGFy
aXR5XSkpOwogICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7
CiB9CiAKQEAgLTE2MTUsNiArMTYyNywxNiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAq
Zm9ybUVsZW1lbnRGCiAgICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpfcGFydC0+
c2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpXTsKIH0KIAorLSAoV2ViU2VsZWN0aW9uICopc2Vs
ZWN0aW9uCit7CisgICAgV2ViU2VsZWN0aW9uICpzZWwgPSBbW1dlYlNlbGVjdGlvbiBhbGxvY10g
aW5pdF07CisgICAgW3NlbCBzZXRCYXNlUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOl9w
YXJ0LT5zZWxlY3Rpb24oKS5iYXNlUmFuZ2UoKS5nZXQoKV1dOworICAgIFtzZWwgc2V0QWZmaW5p
dHk6W3NlbGYgc2VsZWN0aW9uQWZmaW5pdHldXTsKKyAgICBbc2VsIHNldERpcmVjdGlvbjpzdGF0
aWNfY2FzdDxXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uPihbc2VsZiBzZWxlY3Rpb25EaXJlY3Rp
b25dKV07CisgICAgW3NlbCBzZXRHcmFudWxhcml0eTpzdGF0aWNfY2FzdDxXZWJUZXh0U2VsZWN0
aW9uR3JhbnVsYXJpdHk+KFtzZWxmIHNlbGVjdGlvbkdyYW51bGFyaXR5XSldOworICAgIHJldHVy
biBbc2VsIGF1dG9yZWxlYXNlXTsKK30KKwogLSAoTlNSYW5nZSljb252ZXJ0VG9OU1JhbmdlOihE
T006OlJhbmdlSW1wbCAqKXJhbmdlCiB7CiAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+aXNEZXRh
Y2hlZCgpKSB7CkluZGV4OiBXZWJWaWV3LnN1YnByb2ovV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KZGlmZiAtTnB1IFdlYlZpZXcuc3VicHJvai9XZWJFZGl0aW5nRGVsZWdh
dGVQcml2YXRlLmgKLS0tIFdlYlZpZXcuc3VicHJvai9XZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRl
LmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgV2ViVmlldy5zdWJwcm9qL1dlYkVkaXRp
bmdEZWxlZ2F0ZVByaXZhdGUuaAkyNCBBdWcgMjAwNSAwNTo1Mjo1MyAtMDAwMApAQCAtMCwwICsx
LDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworQGNsYXNzIFdlYlZpZXc7CitAY2xhc3MgV2ViU2VsZWN0
aW9uOworCitAaW50ZXJmYWNlIE5TT2JqZWN0IChXZWJFZGl0aW5nRGVsZWdhdGVQZW5kaW5nUHVi
bGljKQorLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRDaGFuZ2VTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbiAqKWN1cnJlbnQgdG9TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAq
KXByb3Bvc2VkIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7CitAZW5kCisKSW5kZXg6IFdlYktp
dC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkJyaWRnZS5tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJCcmlkZ2UubSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zNjkKZGlmZiAtcCAtdSAtcjEuMzY5IFdlYktpdC9XZWJDb3Jl
U3VwcG9ydC5zdWJwcm9qL1dlYkJyaWRnZS5tCi0tLSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3Vi
cHJvai9XZWJCcmlkZ2UubQkyNCBBdWcgMjAwNSAwMDozNDo1NyAtMDAwMAkxLjM2OQorKysgV2Vi
S2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0JMjQgQXVnIDIwMDUgMjA6NTI6
MjUgLTAwMDAKQEAgLTE0NjQsOSArMTQ2NCw5IEBAIHN0YXRpYyBpZCA8V2ViRm9ybURlbGVnYXRl
PiBmb3JtRGVsZWdhdGUKICAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gaXNFZGl0YWJsZV07
CiB9CiAKLS0gKEJPT0wpc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilj
dXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5
OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihC
T09MKWZsYWcKKy0gKEJPT0wpc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNlbGVjdGlvbiAq
KXNlbCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCiB7Ci0gICAgcmV0dXJuIFtbX2ZyYW1lIHdl
YlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOmN1cnJlbnRSYW5nZSB0b0RPTVJh
bmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rp
bmc6ZmxhZ107CisgICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxl
Y3Rpb25UbzpzZWwgc3RpbGxTZWxlY3Rpbmc6ZmxhZ107CiB9CiAKIC0gKEJPT0wpc2hvdWxkQmVn
aW5FZGl0aW5nOihET01SYW5nZSAqKXJhbmdlCkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
CmRpZmYgLXAgLXUgLXIxLjUgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Ci0tLSBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMTYgQXVnIDIwMDUg
MTk6MDM6MzMgLTAwMDAJMS41CisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJMjQgQXVnIDIwMDUgMjA6NTI6MjcgLTAwMDAKQEAgLTI4Myw2ICsyODMsNyBAQAogCQk5
Mzk4MTEyQzA4MjRCRjAxMDA4REYwMzggLyogV2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzM4QzlFQTAzRkFEM0RGMDMy
MUZCRTAgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi87IH07CiAJCTkzOTgxMTJFMDgyNEJGMDEwMDhE
RjAzOCAvKiBsaWJpY3Vjb3JlLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNENjIzREQwNTFFNzkxRjAwMkY0N0REIC8qIGxpYmljdWNvcmUu
ZHlsaWIgKi87IH07CiAJCTkzOTgxMTJGMDgyNEJGMDEwMDhERjAzOCAvKiBTZWN1cml0eS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
MzBFODFFMDA1ODUzQUMwMDBBRDA4OTEgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9OworCQlB
RTMzNTYxQTA4QkM0MUQxMDBBOEFDNDkgLyogV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU2MTkwOEJD
NDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFRDZCRTJFNzA4OEMzMkI1MDA0
NERFREMgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFRDZCRTJFNTA4OEMzMkI1MDA0NERFREMgLyog
V2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmggKi87IH07CiAJCUVENkJFMkU4MDg4QzMyQjUw
MDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENkJFMkU2MDg4QzMyQjUwMDQ0REVEQyAv
KiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubSAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwpAQCAtNDk4LDYgKzQ5OSw3IEBACiAJCTlDRTFGOEEyMDJBNUM2RjMwRUNB
MkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5Q0UxRjhBMzAyQTVDNkYzMEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5kZXJlckZh
Y3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViSW1hZ2VSZW5k
ZXJlckZhY3RvcnkubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUNGMEUyNDkwMjEz
NjFCMDBFQ0ExNkVBIC8qIFdlYkZyYW1lUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJGcmFtZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQUUzMzU2MTkwOEJDNDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVkaXRpbmdEZWxlZ2F0ZVBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkUwN0NFQTcwNDc1MzhGMDAw
Q0EyODlDIC8qIFdlYkRhdGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRTA3Q0VBODA0
NzUzOEYwMDBDQTI4OUMgLyogV2ViRGF0YWJhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
b2JqYzsgcGF0aCA9IFdlYkRhdGFiYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJFMDdDRUE5MDQ3NTM4RjAwMENBMjg5QyAvKiBXZWJGaWxlRGF0YWJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZpbGVEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtODcxLDYgKzg3Myw3IEBACiAJCQkJMzk0NDYwNkIwMjBGNTBFRDBF
Q0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oICovLAogCQkJCTM5NDQ2MDZDMDIw
RjUwRUQwRUNBMTc2NyAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubSAqLywKIAkJCQlCRTRG
QkVDQjA2NTNERjQ3MDA1RURFMTUgLyogV2ViRWRpdGluZ0RlbGVnYXRlLmggKi8sCisJCQkJQUUz
MzU2MTkwOEJDNDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLywK
IAkJCQkyRDgxREFCMjAzRUIwQjJEMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlLmggKi8sCiAJ
CQkJMkQ4MURBQjMwM0VCMEIyRDAwQTgwMTY2IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tICovLAogCQkJ
CTUxNTJGQUU1MDMzRkM1MjIwMENBMkFDRCAvKiBXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oICovLApA
QCAtMTI1Nyw2ICsxMjYwLDcgQEAKIAkJCQk3RTZGRUYwMTA4OTg1QTNFMDBDNDRDM0YgLyogV2Vi
RGVmYXVsdFNjcmlwdERlYnVnRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRjA4
MDg5ODVBNzIwMEM0NEMzRiAvKiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3RTZGRUYwQTA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0
ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1NjFBMDhCQzQxRDEwMEE4QUM0OSAv
KiBXZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktp
dC9XZWJWaWV3LnN1YnByb2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0
aW5nRGVsZWdhdGUubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgg
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0KLS0tIFdl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCTUgSnVuIDIw
MDUgMTc6NTQ6NDYgLTAwMDAJMS44CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1
bHRFZGl0aW5nRGVsZWdhdGUubQkyNCBBdWcgMjAwNSAyMDo1MjoyOCAtMDAwMApAQCAtMzQsNiAr
MzQsOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYlZpZXcuaD4KIAorI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5o
IgorCiBAaW1wbGVtZW50YXRpb24gV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZQogCiBzdGF0aWMg
V2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSAqc2hhcmVkRGVsZWdhdGUgPSBuaWw7CkBAIC03Niw2
ICs3OCwxMSBAQCBzdGF0aWMgV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSAqc2hhcmVkCiAgICAg
cmV0dXJuIFlFUzsKIH0KIAorLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91
bGRDaGFuZ2VTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKWN1cnJlbnQgdG9TZWxlY3Rpb246KFdl
YlNlbGVjdGlvbiAqKXByb3Bvc2VkIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKK3sKKyAgICBy
ZXR1cm4gWUVTOworfQorCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3Vs
ZEFwcGx5U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB0b0VsZW1lbnRzSW5E
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIHJldHVybiBZRVM7CkluZGV4OiBXZWJL
aXQvV2ViVmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40NjUKZGlmZiAtcCAtdSAtcjEuNDY1IFdlYktpdC9XZWJWaWV3LnN1YnByb2ov
V2ViSFRNTFZpZXcubQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCTE3
IEF1ZyAyMDA1IDAxOjI5OjEwIC0wMDAwCTEuNDY1CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9q
L1dlYkhUTUxWaWV3Lm0JMjQgQXVnIDIwMDUgMjA6NTI6MzQgLTAwMDAKQEAgLTY5LDYgKzY5LDgg
QEAKICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0U3lz
dGVtSW50ZXJmYWNlLmg+CiAKKyNpbXBvcnQgPFdlYkNvcmUvV2ViU2VsZWN0aW9uLmg+CisKICNp
bXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KIAogLy8gSW5jbHVkZWQgc28gdXNhZ2Ug
b2YgX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyIHdpbGwgY29tcGlsZQpAQCAtNDg0
LDYgKzQ4NiwxMSBAQCB2b2lkICpfTlNTb2Z0TGlua2luZ0dldEZyYW1ld29ya0Z1bmNQdHIoCiAg
ICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBzZWxlY3RlZERPTVJhbmdlXTsKIH0KIAorLSAoV2Vi
U2VsZWN0aW9uICopX3NlbGVjdGlvbgoreworICAgIHJldHVybiBbW3NlbGYgX2JyaWRnZV0gc2Vs
ZWN0aW9uXTsKK30KKwogLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UKIHsKICAgICBpZiAocmFuZ2UgPT0gbmlsIHx8IFtyYW5nZSBjb2xsYXBzZWRdKQpAQCAtNTI2
LDE1ICs1MzMsMTUgQEAgdm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyKAog
CiAgICAgc3dpdGNoIChkZWxldGlvbkFjdGlvbikgewogICAgICAgICBjYXNlIGRlbGV0ZVNlbGVj
dGlvbkFjdGlvbjoKLSAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5n
ZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpZRVNd
OworICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rp
b25XaXRoQmFzZVJhbmdlOnJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNl
bGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6WUVTXTsKICAgICAgICAgICAgIFticmlk
Z2UgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlOnNtYXJ0RGVsZXRlXTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIGRlbGV0ZUtleUFjdGlvbjoKLSAgICAgICAgICAgIFti
cmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgICAgICAgICBbYnJpZGdlIHNldFNl
bGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6cmFuZ2UgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRleHRTZWxlY3RG
b3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9zZVR5
cGluZzpOT107CiAgICAgICAgICAgICBbYnJpZGdlIGRlbGV0ZUtleVByZXNzZWRXaXRoU21hcnRE
ZWxldGU6c21hcnREZWxldGVdOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZm9y
d2FyZERlbGV0ZUtleUFjdGlvbjoKLSAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01S
YW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5
cGluZzpOT107CisgICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9u
IHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0
eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRleHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5Olti
cmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9zZVR5cGluZzpOT107CiAgICAgICAgICAg
ICBbYnJpZGdlIGZvcndhcmREZWxldGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOnNtYXJ0RGVs
ZXRlXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTMzMDQsOCArMzMxMSw3IEBAIHN0
YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiB7CiAgICAgV2ViQnJpZGdlICpi
cmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKICAgICBET01SYW5nZSAqcHJvcG9zZWRSYW5nZSA9IFti
cmlkZ2UgcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjphbHRlcmF0aW9uIGRpcmVjdGlv
bjpkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6Z3JhbnVsYXJpdHldOwotICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpb
c2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmluaXR5Olti
cmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0aW9uIHNl
bGVjdGlvbldpdGhSYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9u
QWZmaW5pdHldXSBzdGlsbFNlbGVjdGluZzpOT10pIHsKICAgICAgICAgW2JyaWRnZSBhbHRlckN1
cnJlbnRTZWxlY3Rpb246YWx0ZXJhdGlvbiBkaXJlY3Rpb246ZGlyZWN0aW9uIGdyYW51bGFyaXR5
OmdyYW51bGFyaXR5XTsKICAgICB9CiB9CkBAIC0zMzE0LDggKzMzMjAsNyBAQCBzdGF0aWMgV2Vi
SFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogewogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0g
W3NlbGYgX2JyaWRnZV07CiAgICAgRE9NUmFuZ2UgKnByb3Bvc2VkUmFuZ2UgPSBbYnJpZGdlIHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246YWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNl
OnZlcnRpY2FsRGlzdGFuY2VdOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmll
d107Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5n
ZV0gdG9ET01SYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZm
aW5pdHldIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9z
aG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpw
cm9wb3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldXSBzdGlsbFNl
bGVjdGluZzpOT10pIHsKICAgICAgICAgW2JyaWRnZSBhbHRlckN1cnJlbnRTZWxlY3Rpb246YWx0
ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNlOnZlcnRpY2FsRGlzdGFuY2VdOwogICAgIH0KIH0KQEAg
LTM1MjcsOSArMzUzMiw4IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7
CiAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKICAgICBET01SYW5nZSAq
cmFuZ2UgPSBbYnJpZGdlIHJhbmdlQnlFeHBhbmRpbmdTZWxlY3Rpb25XaXRoR3JhbnVsYXJpdHk6
Z3JhbnVsYXJpdHldOwogICAgIGlmIChyYW5nZSAmJiAhW3JhbmdlIGNvbGxhcHNlZF0pIHsKLSAg
ICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgaWYgKFtb
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpy
YW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpO
T10pIHsKLSAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZp
bml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBjbG9zZVR5cGluZzpZRVNdOworICAgICAg
ICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dlYlNlbGVj
dGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25B
ZmZpbml0eV1dIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgICAgICAgICAgW2JyaWRnZSBzZXRT
ZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnJhbmdlIGFmZmlu
aXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9y
d2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBp
bmc6WUVTXTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ1MzUsNyArNDUzOSw4IEBAIHN0YXRp
YyBET01SYW5nZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UKICAgICB9CiAgICAgRE9NUmFuZ2Ug
KnNlbGVjdGlvbiA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKICAgICBOU19EVVJJTkcKLSAgICAg
ICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnVuaW9uRE9NUmFuZ2VzKG1hcmssIHNlbGVj
dGlvbikgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6
WUVTXTsKKyAgICAgICAgRE9NUmFuZ2UgKnIgPSB1bmlvbkRPTVJhbmdlcyhtYXJrLCBzZWxlY3Rp
b24pOworICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlv
bldpdGhCYXNlUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBk
aXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxlY3Rp
b25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAgTlNfSEFORExFUgogICAgICAg
ICBOU0JlZXAoKTsKICAgICBOU19FTkRIQU5ETEVSCkBAIC00NTUxLDcgKzQ1NTYsNyBAQCBzdGF0
aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2VzKERPTVJhbmdlCiAgICAgfQogICAgIERPTVJhbmdl
ICpzZWxlY3Rpb24gPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CiAgICAgTlNfRFVSSU5HCi0gICAg
ICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTptYXJrIGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOllFU107CisgICAgICAgIFticmlkZ2Ugc2V0
U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5nZTptYXJrIGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0
Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VU
eXBpbmc6WUVTXTsKICAgICBOU19IQU5ETEVSCiAgICAgICAgIE5TQmVlcCgpOwogICAgICAgICBy
ZXR1cm47CkBAIC00NTc0LDExICs0NTc5LDEwIEBAIHN0YXRpYyBET01SYW5nZSAqdW5pb25ET01S
YW5nZXMoRE9NUmFuZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBOU1N0cmluZyAqdHJh
bnNwb3NlZCA9IFtbY2hhcmFjdGVycyBzdWJzdHJpbmdGcm9tSW5kZXg6MV0gc3RyaW5nQnlBcHBl
bmRpbmdTdHJpbmc6W2NoYXJhY3RlcnMgc3Vic3RyaW5nVG9JbmRleDoxXV07Ci0gICAgV2ViVmll
dyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICBpZiAoIVtbd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRE
T01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpyIGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgIGlmICgh
W1tzZWxmIF93ZWJWaWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dlYlNlbGVjdGlvbiBz
ZWxlY3Rpb25XaXRoUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgW2Jy
aWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnIgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURv
d25zdHJlYW0gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2Vi
U2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJp
dHk6W2JyaWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAg
aWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dHJhbnNwb3NlZCBnaXZl
bkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWRdKSB7CiAgICAgICAgIFticmlkZ2UgcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnRyYW5zcG9zZWQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21h
cnRSZXBsYWNlOk5PXTsKICAgICB9CkBAIC00OTY2LDcgKzQ5NzAsNyBAQCBzdGF0aWMgTlNBcnJh
eSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAgIGlmIChbc2VsZiBoYXNNYXJrZWRUZXh0XSkg
ewogICAgICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwogICAgICAgICBE
T01SYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2JyaWRnZSBtYXJrZWRUZXh0RE9NUmFuZ2VdOwot
ICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6bWFya2VkVGV4dFJhbmdlIGFmZmlu
aXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOk5PXTsKKyAgICAg
ICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJh
bmdlOm1hcmtlZFRleHRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxl
Y3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOk5PXTsKICAgICB9CiB9CiAKQEAgLTQ5ODYs
NyArNDk5MCw3IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAgICAg
W3NlbGVjdGVkUmFuZ2Ugc2V0U3RhcnQ6W21hcmtlZFRleHRSYW5nZSBzdGFydENvbnRhaW5lcl0g
OnNlbGVjdGlvblN0YXJ0XTsKICAgICBbc2VsZWN0ZWRSYW5nZSBzZXRFbmQ6W21hcmtlZFRleHRS
YW5nZSBzdGFydENvbnRhaW5lcl0gOnNlbGVjdGlvbkVuZF07CiAKLSAgICBbYnJpZGdlIHNldFNl
bGVjdGVkRE9NUmFuZ2U6c2VsZWN0ZWRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dl
YlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnNlbGVjdGVkUmFuZ2UgYWZmaW5pdHk6
TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRleHRTZWxlY3RGb3J3
YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9zZVR5cGlu
ZzpOT107CiB9CiAKIC0gKHZvaWQpX2V4dHJhY3RBdHRyaWJ1dGVzOihOU0FycmF5ICoqKWEgcmFu
Z2VzOihOU0FycmF5ICoqKXIgZnJvbUF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmlu
ZyAqKXN0cmluZwpAQCAtNTE5MSw3ICs1MTk1LDkgQEAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0
cmlidXRlcyA9IG5pbDsKICAgICAvLyBhYmxlIHRvIHJldmVydCB0aGF0KS4gIE1pbWljIE5TVGV4
dC4KICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtfdmlldyBfYnJpZGdlXTsKICAgICBOU1N0cmlu
ZyAqbmV3VGV4dCA9IFttYXRjaCBzdWJzdHJpbmdGcm9tSW5kZXg6cHJlZml4TGVuZ3RoXTsKLSAg
ICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2Vt
ZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAgIGlmIChbX3ZpZXcgX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Q
YXN0ZWRdKSB7CisgICAgICAgIFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1Rl
eHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CisgICAgfQogfQogCiAv
LyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KQEAgLTUzNDQsNyAr
NTM1MCw5IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAKICAgICAg
ICAgaWYgKHJldmVydENoYW5nZSkgewogICAgICAgICAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBb
X3ZpZXcgX2JyaWRnZV07Ci0gICAgICAgICAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpO
T107CisgICAgICAgICAgICBpZiAoW192aWV3IF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQ6X29yaWdpbmFsU3RyaW5nIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRd
KSB7CisgICAgICAgICAgICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29y
aWdpbmFsU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGdvTGVmdCkgewogICAgICAgICAgICAgW192
aWV3IG1vdmVCYWNrd2FyZDpuaWxdOwogICAgICAgICB9IGVsc2UgewpJbmRleDogV2ViS2l0L1dl
YlZpZXcuc3VicHJvai9XZWJWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMw
NApkaWZmIC1wIC11IC1yMS4zMDQgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0KLS0t
IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCTIzIEF1ZyAyMDA1IDAxOjIyOjE2IC0w
MDAwCTEuMzA0CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQkyNCBBdWcgMjAw
NSAyMDo1MjozNiAtMDAwMApAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRvd25sb2FkLmg+CiAj
aW1wb3J0IDxXZWJLaXQvV2ViRWRpdGluZ0RlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2Vi
RWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZvcm1EZWxlZ2F0
ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUludGVybmFsLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViRnJhbWVWaWV3SW50ZXJuYWwuaD4KQEAgLTg2LDYgKzg3LDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZUVuY29kaW5ncy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
U2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZpZXcuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvV2ViU2VsZWN0aW9uLmg+CiAKICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0
aW9uLmg+CiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgpAQCAtMjU3Myw2ICsyNTc1LDIz
IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUKICAgICByZXR1cm4g
X3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGU7CiB9CiAKKy0gKHZvaWQpc2V0U2VsZWN0aW9u
OihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICBpZiAoW3NlbGVjdGlvbiBiYXNlUmFu
Z2VdID09IG5pbCkgeworICAgICAgICBbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJh
bWVdIGRlc2VsZWN0VGV4dF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRGVyaXZlIHRoZSBi
cmlkZ2UgdG8gdXNlIGZyb20gdGhlIHJhbmdlIHBhc3NlZCBpbi4KKyAgICAgICAgLy8gVXNpbmcg
X2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWUgY291bGQgZ2l2ZSB1cyBhIGRpZmZlcmVudCBk
b2N1bWVudCB0aGFuCisgICAgICAgIC8vIHRoZSBvbmUgdGhlIHJhbmdlIHVzZXMuCisgICAgICAg
IFtbW1tzZWxlY3Rpb24gYmFzZVJhbmdlXSBzdGFydENvbnRhaW5lcl0gX2JyaWRnZV0gc2V0U2Vs
ZWN0aW9uOnNlbGVjdGlvbiBjbG9zZVR5cGluZzpZRVNdOworICAgIH0KK30KKworLSAoV2ViU2Vs
ZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0
ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uXTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKQEAgLTI3MTAsOSArMjcyOSwxNiBAQCBz
dGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAgICAgcmV0dXJuIFticmlk
Z2UgZWRpdGFibGVET01SYW5nZUZvclBvaW50OltzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1Zp
ZXc6W1tbYnJpZGdlIHdlYkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld11dXTsKIH0KIAot
LSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50
UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZs
YWc7CistIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzooV2ViU2VsZWN0aW9uICopc2Vs
IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9lZGl0aW5n
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJh
bmdlOmN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6c2VsZWN0
aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6ZmxhZ107CisgICAgaWQgZGVsZWdhdGUgPSBbc2Vs
ZiBlZGl0aW5nRGVsZWdhdGVdOworICAgIGJvb2wgY2FuQ2hhbmdlID0gZmFsc2U7CisgICAgaWYg
KFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQ2hh
bmdlU2VsZWN0aW9uOnRvU2VsZWN0aW9uOnN0aWxsU2VsZWN0aW5nOildKSB7CisgICAgICAgIGNh
bkNoYW5nZSA9IFtkZWxlZ2F0ZSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uOltz
ZWxmIHNlbGVjdGlvbl0gdG9TZWxlY3Rpb246c2VsIHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAg
IH0gZWxzZSBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmll
dzpzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOnRvRE9NUmFuZ2U6YWZmaW5pdHk6c3RpbGxT
ZWxlY3Rpbmc6KV0pIHsKKyAgICAgICAgY2FuQ2hhbmdlID0gW2RlbGVnYXRlIHdlYlZpZXc6c2Vs
ZiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltzZWxmIHNlbGVjdGVkRE9NUmFuZ2VdIHRv
RE9NUmFuZ2U6W3NlbCByYW5nZV0gYWZmaW5pdHk6W3NlbCBhZmZpbml0eV0gc3RpbGxTZWxlY3Rp
bmc6ZmxhZ107CisgICAgfQorICAgIHJldHVybiBjYW5DaGFuZ2U7CiB9CiAKIC0gKEJPT0wpX3No
b3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTI3MzMsMTkg
KzI3NTksMTIgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogCiAt
ICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKIHsKLSAgICBpZiAocmFuZ2UgPT0g
bmlsKSB7Ci0gICAgICAgIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gZGVz
ZWxlY3RUZXh0XTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBEZXJpdmUgdGhlIGJyaWRnZSB0
byB1c2UgZnJvbSB0aGUgcmFuZ2UgcGFzc2VkIGluLgotICAgICAgICAvLyBVc2luZyBfYnJpZGdl
Rm9yU2VsZWN0ZWRPck1haW5GcmFtZSBjb3VsZCBnaXZlIHVzIGEgZGlmZmVyZW50IGRvY3VtZW50
IHRoYW4KLSAgICAgICAgLy8gdGhlIG9uZSB0aGUgcmFuZ2UgdXNlcy4KLSAgICAgICAgW1tbcmFu
Z2Ugc3RhcnRDb250YWluZXJdIF9icmlkZ2VdIHNldFNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgYWZm
aW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgY2xvc2VUeXBpbmc6WUVTXTsKLSAgICB9CisgICAgW3Nl
bGYgc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyYW5n
ZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246W1tzZWxmIF9icmlkZ2VGb3JT
ZWxlY3RlZE9yTWFpbkZyYW1lXSBzZWxlY3Rpb25EaXJlY3Rpb25dIGdyYW51bGFyaXR5Oltbc2Vs
ZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uR3JhbnVsYXJpdHldXV07
CiB9CiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIHJldHVybiBbW3Nl
bGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVjdGVkRE9NUmFuZ2VdOworICAg
IHJldHVybiBbW3NlbGYgc2VsZWN0aW9uXSByYW5nZV07CiB9CiAKIC0gKE5TU2VsZWN0aW9uQWZm
aW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2Vi
Vmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViVmlld0ludGVybmFsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEK
ZGlmZiAtcCAtdSAtcjEuMjEgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwu
aAotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwuaAkxNCBBdWcgMjAw
NSAwOToxMjo0OCAtMDAwMAkxLjIxCisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdJ
bnRlcm5hbC5oCTI0IEF1ZyAyMDA1IDIwOjUyOjM2IC0wMDAwCkBAIC0zMiw2ICszMiw3IEBACiAK
IEBjbGFzcyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogQGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlz
dDsKK0BjbGFzcyBXZWJTZWxlY3Rpb247CiAKIEBwcm90b2NvbCBXZWJEb2N1bWVudERyYWdnaW5n
OwogCkBAIC0xMjIsNyArMTIzLDcgQEAKIAogQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3RWRp
dGluZ0V4dHJhcykKIC0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDooTlNFdmVudCAq
KWV2ZW50OwotLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2Ug
KiljdXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmlu
aXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5n
OihCT09MKWZsYWc7CistIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzooV2ViU2VsZWN0
aW9uICopc2VsIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7CiAtIChCT09MKV9zaG91bGRCZWdp
bkVkaXRpbmdJbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwogLSAoQk9PTClfc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAtIChCT09MKV9jYW5QYXN0ZTsK
SW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0
ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0OApkaWZmIC1wIC11IC1yMS4xNDggV2ViS2l0
L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCi0tLSBXZWJLaXQvV2ViVmlldy5zdWJw
cm9qL1dlYlZpZXdQcml2YXRlLmgJMjMgQXVnIDIwMDUgMDE6MjI6MTYgLTAwMDAJMS4xNDgKKysr
IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAkyNCBBdWcgMjAwNSAyMDo1
MjozNyAtMDAwMApAQCAtMzMsNiArMzMsNyBAQAogQGNsYXNzIFdlYkZyYW1lOwogQGNsYXNzIFdl
YlByZWZlcmVuY2VzOwogQGNsYXNzIFdlYkNvcmVTZXR0aW5nczsKK0BjbGFzcyBXZWJTZWxlY3Rp
b247CiAKIEBwcm90b2NvbCBXZWJGb3JtRGVsZWdhdGU7CiAKQEAgLTEwNCw2ICsxMDUsMTEgQEAg
dHlwZWRlZiBlbnVtIHsKICovICAgIAogLSAoaWQpc2NyaXB0RGVidWdEZWxlZ2F0ZTsKIAorLy8g
VGhlIGZvbGxvd2luZyBkZXByZWNhdGUgc2V0U2VsZWN0ZWRET01SYW5nZTphZmZpbml0eTogYW5k
IGNvbXBsZW1lbnQgc2VsZWN0ZWRET01SYW5nZSBhbmQKKy8vIHNlbGVjdGlvbkFmZmluaXR5LCBp
biBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0VkaXRpbmcpCistICh2b2lkKXNldFNlbGVjdGlv
bjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoV2ViU2VsZWN0aW9uICopc2VsZWN0aW9u
OworCiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViUHJpdmF0ZSkK
</data>
<flag name="review"
          id="440"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3628</attachid>
            <date>2005-08-28 16:18:53 -0700</date>
            <delta_ts>2005-08-28 16:53:02 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection.txt</filename>
            <type>text/plain</type>
            <size>93087</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zZWxl
Y3Rpb25kYXRhLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbmRhdGEuY3BwCTI4IEF1ZyAyMDA1IDE1OjQyOjIzIC0wMDAwCkBAIC0wLDAgKzEs
MTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJzZWxlY3Rpb25kYXRhLmgiCisjaW5jbHVk
ZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgor
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24u
aCIKKyNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAia2h0bWxfcGFydC5o
IgorCisjaWYgQVBQTEVfQ0hBTkdFUworI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNlbHNl
CisjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCisjZW5kaWYKKwor
dXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBET006Ok5vZGVJbXBsOwordXNpbmcgRE9NOjpQ
b3NpdGlvbjsKK2NsYXNzIGtodG1sOjpTZWxlY3Rpb247CisKK25hbWVzcGFjZSBraHRtbCB7CisK
K1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEoKQorIDogbV9hZmZpbml0eShET1dOU1RSRUFN
KSwgbV9kaXJlY3Rpb24oU2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFudWxhcml0eShDSEFSQUNU
RVIpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEoUmFuZ2VJbXBsICpiYXNl
UmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlv
biwgRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKKyA6IG1fYmFzZVJhbmdlKGJhc2VSYW5n
ZSksIG1fYWZmaW5pdHkoYWZmaW5pdHkpLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pLCBtX2dyYW51
bGFyaXR5KGdyYW51bGFyaXR5KQoreworfQorCitTZWxlY3Rpb25EYXRhOjpTZWxlY3Rpb25EYXRh
KFJhbmdlSW1wbCAqYmFzZVJhbmdlKQorIDogbV9iYXNlUmFuZ2UoYmFzZVJhbmdlKSwgbV9hZmZp
bml0eShET1dOU1RSRUFNKSwgbV9kaXJlY3Rpb24oU2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFu
dWxhcml0eShDSEFSQUNURVIpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEo
Y29uc3QgU2VsZWN0aW9uRGF0YSAmY29weSkKKyA6IG1fYmFzZVJhbmdlKGNvcHkuYmFzZVJhbmdl
KCkpLCBtX2FmZmluaXR5KGNvcHkuYWZmaW5pdHkoKSksIG1fZGlyZWN0aW9uKGNvcHkuZGlyZWN0
aW9uKCkpLCBtX2dyYW51bGFyaXR5KGNvcHkuZ3JhbnVsYXJpdHkoKSkKK3sKK30KKworU2hhcmVk
UHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uRGF0YTo6YmFzZVJhbmdlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9iYXNlUmFuZ2U7Cit9CisKK3ZvaWQgU2VsZWN0aW9uRGF0YTo6c2V0QmFzZVJhbmdl
KFJhbmdlSW1wbCAqYmFzZVJhbmdlKQoreworICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAg
ICBtX2Jhc2VSYW5nZSA9IGJhc2VSYW5nZSA/IFNoYXJlZFB0cjxSYW5nZUltcGw+KGJhc2VSYW5n
ZS0+Y2xvbmVSYW5nZShleGNlcHRpb25jb2RlKSkgOiBTaGFyZWRQdHI8UmFuZ2VJbXBsPigpOwor
fQorCitTaGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25EYXRhOjpyYW5nZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fYmFzZVJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU2hhcmVkUHRy
PFJhbmdlSW1wbD4oKTsKKworICAgIHJldHVybiB0b1NlbGVjdGlvbigpLnRvUmFuZ2UoKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25EYXRhOjpzZXRTZWxlY3Rpb25JblBhcnQoS1dRS0hUTUxQYXJ0ICpw
YXJ0LCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIGlmIChtX2Jhc2VSYW5nZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0aW9uIHNlbCA9IHRvU2VsZWN0aW9uKCk7Cisg
ICAgcGFydC0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkoKSk7CisgICAgcGFy
dC0+c2V0U2VsZWN0aW9uKHNlbCwgY2xvc2VUeXBpbmcpOworfQorCitFQWZmaW5pdHkgU2VsZWN0
aW9uRGF0YTo6YWZmaW5pdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2FmZmluaXR5OworfQor
Cit2b2lkIFNlbGVjdGlvbkRhdGE6OnNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkKK3sK
KyAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKKworU2VsZWN0aW9uOjpFRGlyZWN0aW9u
IFNlbGVjdGlvbkRhdGE6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlyZWN0
aW9uOworfQorCit2b2lkIFNlbGVjdGlvbkRhdGE6OnNldERpcmVjdGlvbihTZWxlY3Rpb246OkVE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOworfQor
CisKK0VUZXh0R3JhbnVsYXJpdHkgU2VsZWN0aW9uRGF0YTo6Z3JhbnVsYXJpdHkoKSBjb25zdAor
eworICAgIHJldHVybiBtX2dyYW51bGFyaXR5OworfQorCit2b2lkIFNlbGVjdGlvbkRhdGE6OnNl
dEdyYW51bGFyaXR5KEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgbV9ncmFu
dWxhcml0eSA9IGdyYW51bGFyaXR5OworfQorCitTZWxlY3Rpb24gU2VsZWN0aW9uRGF0YTo6dG9T
ZWxlY3Rpb24oKSBjb25zdAoreworICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICBOb2Rl
SW1wbCAqc3RhcnRDb250YWluZXIgPSBtX2Jhc2VSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uY29kZSk7CisgICAgTm9kZUltcGwgKmVuZENvbnRhaW5lciA9IG1fYmFzZVJhbmdlLT5lbmRD
b250YWluZXIoZXhjZXB0aW9uY29kZSk7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyKTsKKyAg
ICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKKyAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmdldERv
Y3VtZW50KCkpOworICAgIEFTU0VSVChzdGFydENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSA9PSBl
bmRDb250YWluZXItPmdldERvY3VtZW50KCkpOworCisgICAgc3RhcnRDb250YWluZXItPmdldERv
Y3VtZW50KCktPnBhcnQoKS0+eG1sRG9jSW1wbCgpLT51cGRhdGVMYXlvdXQoKTsKKworICAgIEVB
ZmZpbml0eSBhZmZpbml0eSA9IG1fYWZmaW5pdHk7CisgICAgYm9vbCByYW5nZUNvbGxhcHNlZCA9
IG1fYmFzZVJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uY29kZSk7CisgICAgaWYgKCEgcmFuZ2VD
b2xsYXBzZWQpCisgICAgICAgIGFmZmluaXR5ID0gRE9XTlNUUkVBTTsKKworICAgIC8vIFdvcmsg
YXJvdW5kIGJ1ZyB3aGVyZSBpc1JlbmRlcmVkQ29udGVudCByZXR1cm5zIGZhbHNlIGZvciA8YnI+
IGVsZW1lbnRzIGF0IHRoZSBlbmRzIG9mIGxpbmVzLgorICAgIC8vIElmIHRoYXQgYnVnIHdhc24n
dCBhbiBpc3N1ZSwgd2UgY291bGQganVzdCBtYWtlIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSByYW5n
ZSBkaXJlY3RseS4KKyAgICBQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwgbV9iYXNlUmFu
Z2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbmNvZGUpKTsKKyAgICBQb3NpdGlvbiBlbmQoZW5kQ29u
dGFpbmVyLCBtX2Jhc2VSYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbmNvZGUpKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICBzdGFydCA9
IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpOworCisgICAgaWYgKHJhbmdlQ29sbGFwc2Vk
KSB7CisgICAgICAgIHNldEFmZmluaXR5VXNpbmdMaW5lUG9zaXRpb24odmlzaWJsZVN0YXJ0KTsK
KyAgICAgICAgYWZmaW5pdHkgPSB2aXNpYmxlU3RhcnQuYWZmaW5pdHkoKTsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/CisgICAgU2VsZWN0aW9u
IHNlbGVjdGlvbihzdGFydCwgbV9hZmZpbml0eSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7
CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFNlbGVjdGlvbjo6QkFDS1dBUkQpIHsKKyAgICAgICAg
c2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoc2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24u
ZXh0ZW50QWZmaW5pdHkoKSwgc2VsZWN0aW9uLmJhc2UoKSwgc2VsZWN0aW9uLmJhc2VBZmZpbml0
eSgpKTsKKyAgICB9CisgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9ncmFu
dWxhcml0eSk7CisKKyAgICByZXR1cm4gc2VsZWN0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBr
aHRtbAorCkluZGV4OiBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbmRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbmRhdGEuaAotLS0ga2h0bWwvZWRpdGluZy9z
ZWxlY3Rpb25kYXRhLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvZWRpdGlu
Zy9zZWxlY3Rpb25kYXRhLmgJMjggQXVnIDIwMDUgMTU6NDI6MjMgLTAwMDAKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtIVE1MX0VESVRJTkdfV0VCU0VMRUNUSU9OX0gK
KyNkZWZpbmUgS0hUTUxfRURJVElOR19XRUJTRUxFQ1RJT05fSAorCisjaW5jbHVkZSAidGV4dF9h
ZmZpbml0eS5oIgorI2luY2x1ZGUgInRleHRfZ3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJzZWxl
Y3Rpb24uaCIKKworY2xhc3MgS1dRS0hUTUxQYXJ0OworY2xhc3MgRE9NOjpSYW5nZUltcGw7CisK
K25hbWVzcGFjZSBraHRtbCB7CisKK2NsYXNzIFNlbGVjdGlvbkRhdGEKK3sKK3B1YmxpYzoKKyAg
ICBTZWxlY3Rpb25EYXRhKCk7CisgICAgU2VsZWN0aW9uRGF0YShET006OlJhbmdlSW1wbCAqYmFz
ZVJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNlbGVjdGlvbjo6RURpcmVjdGlvbiBkaXJlY3Rp
b24sIEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOworICAgIFNlbGVjdGlvbkRhdGEoRE9N
OjpSYW5nZUltcGwgKmJhc2VSYW5nZSk7CisgICAgU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rp
b25EYXRhICZjb3B5KTsKKworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gYmFzZVJhbmdl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYXNlUmFuZ2UoRE9NOjpSYW5nZUltcGwgKmJhc2VSYW5n
ZSk7CisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiByYW5nZSgpIGNvbnN0OworICAgIEVB
ZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0QWZmaW5pdHkoRUFmZmluaXR5
IGFmZmluaXR5KTsKKyAgICBTZWxlY3Rpb246OkVEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7
CisgICAgdm9pZCBzZXREaXJlY3Rpb24oU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbik7
CisgICAgRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0
R3JhbnVsYXJpdHkoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25JblBhcnQoS1dRS0hUTUxQYXJ0ICpwYXJ0LCBib29sIGNsb3NlVHlwaW5nKTsKKyAg
ICAKKworcHJpdmF0ZToKKworICAgIGtodG1sOjpTZWxlY3Rpb24gdG9TZWxlY3Rpb24oKSBjb25z
dDsKKworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbV9iYXNlUmFuZ2U7CisgICAgRUFm
ZmluaXR5IG1fYWZmaW5pdHk7CisgICAgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIG1fZGlyZWN0aW9u
OworICAgIEVUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIGtodG1sCisKKyNlbmRpZiAvLyBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisKSW5kZXg6
IGt3cS9XZWJTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrd3EvV2ViU2VsZWN0aW9u
LmgKLS0tIGt3cS9XZWJTZWxlY3Rpb24uaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBr
d3EvV2ViU2VsZWN0aW9uLmgJMjggQXVnIDIwMDUgMTA6MDQ6MzAgLTAwMDAKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitAY2xhc3MgRE9N
UmFuZ2U7CitAY2xhc3MgV2ViU2VsZWN0aW9uSW50ZXJuYWw7CisKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViVGV4dFNlbGVjdEZvcndhcmQsCisgICAgV2ViVGV4dFNlbGVjdEJhY2t3YXJkCit9IFdl
YlRleHRTZWxlY3Rpb25EaXJlY3Rpb247CisKK3R5cGVkZWYgZW51bSB7CisgICAgV2ViVGV4dFNl
bGVjdEJ5Q2hhcmFjdGVyLAorICAgIFdlYlRleHRTZWxlY3RCeVdvcmQsCisgICAgV2ViVGV4dFNl
bGVjdEJ5TGluZSwKKyAgICBXZWJUZXh0U2VsZWN0QnlQYXJhZ3JhcGgKK30gV2ViVGV4dFNlbGVj
dGlvbkdyYW51bGFyaXR5OworCitAaW50ZXJmYWNlIFdlYlNlbGVjdGlvbiA6IE5TT2JqZWN0Cit7
CisgICAgV2ViU2VsZWN0aW9uSW50ZXJuYWwgKl9wcml2YXRlOworfQorCisrIChpZClzZWxlY3Rp
b25XaXRoQmFzZVJhbmdlOihET01SYW5nZSAqKXNlbGVjdGlvbkJhc2VSYW5nZSBhZmZpbml0eToo
TlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246KFdlYlRleHRT
ZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJUZXh0
U2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7CisrIChpZClzZWxlY3Rp
b25XaXRoUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0aW9uUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHk7CistIChpZClpbml0V2l0aEJhc2VSYW5nZToo
RE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpc2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOihXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9u
KXNlbGVjdGlvbkRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFy
aXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5OworLSAoaWQpaW5pdFdpdGhSYW5nZTooRE9NUmFuZ2Ug
KilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25B
ZmZpbml0eTsKKy0gKERPTVJhbmdlICopYmFzZVJhbmdlOworLSAodm9pZClzZXRCYXNlUmFuZ2U6
KERPTVJhbmdlICopbmV3QmFzZVJhbmdlOworLSAoRE9NUmFuZ2UgKilyYW5nZTsKKy0gKE5TU2Vs
ZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CistICh2b2lkKXNldEFmZmluaXR5OihOU1NlbGVjdGlv
bkFmZmluaXR5KW5ld0FmZmluaXR5OworLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilkaXJl
Y3Rpb247CistICh2b2lkKXNldERpcmVjdGlvbjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilu
ZXdEaXJlY3Rpb247CistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7
CistICh2b2lkKXNldEdyYW51bGFyaXR5OihXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpbmV3
R3JhbnVsYXJpdHk7CisKK0BlbmQKKwpJbmRleDoga3dxL1dlYlNlbGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrd3EvV2ViU2VsZWN0aW9uLm1tCi0tLSBrd3EvV2ViU2VsZWN0aW9uLm1t
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt3cS9XZWJTZWxlY3Rpb24ubW0JMjggQXVn
IDIwMDUgMTM6MTE6MDEgLTAwMDAKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIgor
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKyNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKworI2lu
Y2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgorCitAaW1wbGVtZW50YXRpb24gV2ViU2VsZWN0
aW9uCisKKysgKGlkKXNlbGVjdGlvbldpdGhSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25SYW5n
ZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQoreworICAg
IHJldHVybiBbW1tXZWJTZWxlY3Rpb24gYWxsb2NdIGluaXRXaXRoUmFuZ2U6c2VsZWN0aW9uUmFu
Z2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHldIGF1dG9yZWxlYXNlXTsKK30KKworKyAoaWQp
c2VsZWN0aW9uV2l0aEJhc2VSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOihX
ZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbiBncmFudWxhcml0eToo
V2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5Cit7CisgICAg
cmV0dXJuIFtbW1dlYlNlbGVjdGlvbiBhbGxvY10gaW5pdFdpdGhCYXNlUmFuZ2U6c2VsZWN0aW9u
QmFzZVJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjpzZWxlY3Rpb25E
aXJlY3Rpb24gZ3JhbnVsYXJpdHk6c2VsZWN0aW9uR3JhbnVsYXJpdHldIGF1dG9yZWxlYXNlXTsK
K30KKworKyAoaWQpX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRhOihjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uRGF0YSAqKWRhdGEKK3sKKyAgICBXZWJTZWxlY3Rpb24gKnNlbCA9IFtbV2ViU2VsZWN0
aW9uIGFsbG9jXSBpbml0XTsKKyAgICBbc2VsIF9zZXRTZWxlY3Rpb25EYXRhOmRhdGFdOworICAg
IHJldHVybiBbc2VsIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdFdpdGhSYW5nZTooRE9N
UmFuZ2UgKilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eQoreworICAgIFtzZWxmIGluaXRdOworICAgIFtzZWxmIHNldEJhc2VSYW5n
ZTpzZWxlY3Rpb25SYW5nZV07CisgICAgW3NlbGYgc2V0QWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5p
dHldOworICAgIFtzZWxmIHNldERpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZF07CisgICAg
W3NlbGYgc2V0R3JhbnVsYXJpdHk6V2ViVGV4dFNlbGVjdEJ5Q2hhcmFjdGVyXTsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhCYXNlUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0
aW9uQmFzZVJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmlu
aXR5IGRpcmVjdGlvbjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rp
b24gZ3JhbnVsYXJpdHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFu
dWxhcml0eQoreworICAgIFtzZWxmIGluaXRdOworICAgIFtzZWxmIHNldEJhc2VSYW5nZTpzZWxl
Y3Rpb25CYXNlUmFuZ2VdOworICAgIFtzZWxmIHNldEFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5
XTsKKyAgICBbc2VsZiBzZXREaXJlY3Rpb246c2VsZWN0aW9uRGlyZWN0aW9uXTsKKyAgICBbc2Vs
ZiBzZXRHcmFudWxhcml0eTpzZWxlY3Rpb25HcmFudWxhcml0eV07CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBfcHJpdmF0ZSA9IFtbV2ViU2VsZWN0aW9uSW50ZXJu
YWwgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbX3ByaXZhdGUgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCist
IChjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAqKV9zZWxlY3Rpb25EYXRhCit7CisgICAgQVNT
RVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0
dXJuIFtfcHJpdmF0ZSBkYXRhXTsKK30KKworLSAodm9pZClfc2V0U2VsZWN0aW9uRGF0YTooY29u
c3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9
IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgKihbX3ByaXZhdGUgZGF0YV0p
ID0gKmRhdGE7Cit9CisKKy0gKERPTVJhbmdlICopYmFzZVJhbmdlCit7CisgICAgQVNTRVJUKF9w
cml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIFtE
T01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpbX3ByaXZhdGUgZGF0YV0tPmJhc2VSYW5nZSgpLmdldCgp
XTsKK30KKworLSAodm9pZClzZXRCYXNlUmFuZ2U6KERPTVJhbmdlICopbmV3QmFzZVJhbmdlCit7
CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7
CisgICAgW19wcml2YXRlIGRhdGFdLT5zZXRCYXNlUmFuZ2UoW25ld0Jhc2VSYW5nZSBfcmFuZ2VJ
bXBsXSk7Cit9CisKKworLSAoRE9NUmFuZ2UgKilyYW5nZQoreworICAgIEFTU0VSVChfcHJpdmF0
ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBbRE9NUmFu
Z2UgX3JhbmdlV2l0aEltcGw6W19wcml2YXRlIGRhdGFdLT5yYW5nZSgpLmdldCgpXTsKK30KKwor
LSAodm9pZClfc2V0U2VsZWN0aW9uSW5QYXJ0OihLV1FLSFRNTFBhcnQgKilwYXJ0IGNsb3NlVHlw
aW5nOihCT09MKWNsb3NlVHlwaW5nCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBb
X3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIFtfcHJpdmF0ZSBkYXRhXS0+c2V0
U2VsZWN0aW9uSW5QYXJ0KHBhcnQsIGNsb3NlVHlwaW5nKTsKK30KKworCistIChOU1NlbGVjdGlv
bkFmZmluaXR5KWFmZmluaXR5Cit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3By
aXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2VsZWN0aW9u
QWZmaW5pdHk+KFtfcHJpdmF0ZSBkYXRhXS0+YWZmaW5pdHkoKSk7Cit9CisKKy0gKHZvaWQpc2V0
QWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpbmV3QWZmaW5pdHkKK3sKKyAgICBBU1NFUlQo
X3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICBbX3ByaXZh
dGUgZGF0YV0tPnNldEFmZmluaXR5KHN0YXRpY19jYXN0PGtodG1sOjpFQWZmaW5pdHk+KG5ld0Fm
ZmluaXR5KSk7Cit9CisKKworLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24K
K3sKKyAgICBBU1NFUlQoX3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxM
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbj4oW19w
cml2YXRlIGRhdGFdLT5kaXJlY3Rpb24oKSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uOihX
ZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKW5ld0RpcmVjdGlvbgoreworICAgIEFTU0VSVChfcHJp
dmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIFtfcHJpdmF0ZSBk
YXRhXS0+c2V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PGtodG1sOjpTZWxlY3Rpb246OkVEaXJlY3Rp
b24+KG5ld0RpcmVjdGlvbikpOworfQorCisKKy0gKFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0
eSlncmFudWxhcml0eQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRl
IGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJUZXh0U2VsZWN0aW9u
R3JhbnVsYXJpdHk+KFtfcHJpdmF0ZSBkYXRhXS0+Z3JhbnVsYXJpdHkoKSk7Cit9CisKKy0gKHZv
aWQpc2V0R3JhbnVsYXJpdHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSluZXdHcmFudWxh
cml0eQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9
IE5VTEwpOworICAgIFtfcHJpdmF0ZSBkYXRhXS0+c2V0R3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8
a2h0bWw6OkVUZXh0R3JhbnVsYXJpdHk+KG5ld0dyYW51bGFyaXR5KSk7Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdlYlNlbGVjdGlvbkludGVybmFsCisKKy0gKGlkKWluaXQKK3sKKyAg
ICBkYXRhID0gbmV3IGtodG1sOjpTZWxlY3Rpb25EYXRhOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBkZWxldGUgZGF0YTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBkZWxldGUgZGF0YTsKK30KKworLSAo
a2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhCit7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0Bl
bmQKKwpJbmRleDoga3dxL1dlYlNlbGVjdGlvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga3dxL1dlYlNlbGVjdGlvbkludGVybmFsLmgKLS0tIGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5h
bC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5h
bC5oCTI4IEF1ZyAyMDA1IDEyOjUzOjM4IC0wMDAwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAic2VsZWN0aW9uZGF0YS5o
IgorCitAaW50ZXJmYWNlIFdlYlNlbGVjdGlvbiAoV2ViU2VsZWN0aW9uSW50ZXJuYWxBY2Nlc3Nv
cnMpCisKKysgKGlkKV9zZWxlY3Rpb25XaXRoU2VsZWN0aW9uRGF0YTooY29uc3Qga2h0bWw6OlNl
bGVjdGlvbkRhdGEgKilkYXRhOworLSAoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilfc2Vs
ZWN0aW9uRGF0YTsKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkRhdGE6KGNvbnN0IGtodG1sOjpTZWxl
Y3Rpb25EYXRhICopZGF0YTsKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkluUGFydDooS1dRS0hUTUxQ
YXJ0ICopcGFydCBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZzsKKworQGVuZAorCitAaW50
ZXJmYWNlIFdlYlNlbGVjdGlvbkludGVybmFsIDogTlNPYmplY3QKK3sKKyAgICBraHRtbDo6U2Vs
ZWN0aW9uRGF0YSAqZGF0YTsKK30KKworLSAoa2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhOwor
CitAZW5kCisKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS5leHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQK
ZGlmZiAtcCAtdSAtcjEuNDQgV2ViQ29yZS9XZWJDb3JlLmV4cAotLS0gV2ViQ29yZS9XZWJDb3Jl
LmV4cAkzMCBKdWwgMjAwNSAwOTowNTowMSAtMDAwMAkxLjQ0CisrKyBXZWJDb3JlL1dlYkNvcmUu
ZXhwCTI4IEF1ZyAyMDA1IDIzOjEyOjM5IC0wMDAwCkBAIC0xMTcsNiArMTE3LDcgQEAKIC5vYmpj
X2NsYXNzX25hbWVfV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkKIC5vYmpjX2NsYXNzX25hbWVf
V2ViQ29yZVZpZXdGYWN0b3J5CiAub2JqY19jbGFzc19uYW1lX1dlYkRhc2hib2FyZFJlZ2lvbgor
Lm9iamNfY2xhc3NfbmFtZV9XZWJTZWxlY3Rpb24KIF9XZWJDb3JlRWxlbWVudERPTU5vZGVLZXkK
IF9XZWJDb3JlRWxlbWVudEZyYW1lS2V5CiBfV2ViQ29yZUVsZW1lbnRJbWFnZUFsdFN0cmluZ0tl
eQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBBdWcgMjAwNSAyMjoyMToxMSAtMDAwMAkx
LjE1CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBBdWcg
MjAwNSAyMzoxMjo1NiAtMDAwMApAQCAtMTkzNCw2ICsxOTM0LDEyIEBACiAJCUE4Q0Q0NzdCMDhC
RjI1REIwMDUzMjk0MyAvKiBDb3VudGVyLmlkbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MUQ1ODM4MDhBRERGRjcwMDEzNkFDMSAvKiBDb3VudGVyLmlk
bCAqLzsgfTsKIAkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXgubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODVEN0E4QzA4NzlF
QzY0MDA2QTkxNzIgLyogS1dRV01hdHJpeC5tbSAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAw
REMzNzA3IC8qIEtXUVdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87
IH07CisJCUFFMzM1OTE5MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTE2MDhDMjdBRDkw
MEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRTMzNTkxQTA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUz
MzU5MTcwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSAqLzsgfTsKKwkJQUUzMzU5
MUIwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkxODA4QzI3QUQ5MDBBOEFD
NDkgLyogV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJQUUzMzU5MUMwOEMyN0FEOTAw
QThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUUzMzU5MTYwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFFMzM1
OTFEMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkxNzA4QzI3QUQ5MDBBOEFDNDkgLyog
V2ViU2VsZWN0aW9uLm1tICovOyB9OworCQlBRTMzNTkxRTA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFFMzM1OTE4MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5h
bC5oICovOyB9OwogCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lX21h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5
ODhGMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWVfbWFjLm1tICovOyB9OwogCQlCQzE3
OTg5MzA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkwMDg4RDk3NUYwMDYwNjhBNSAv
KiByZW5kZXJfdGhlbWUuY3BwICovOyB9OwogCQlCQzE3OTg5NDA4OEQ5NzVGMDA2MDY4QTUgLyog
cmVuZGVyX3RoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzE3OTg5MTA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmggKi87IH07CkBA
IC0yOTM3LDYgKzI5NDMsOSBAQAogCQlBOEMwRkI4QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZh
c1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNUeXBlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEMwRkI4RDA4OTcwMUY4MDBCQTUxMTQg
LyogS0NhbnZhc1ZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
S0NhbnZhc1ZpZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEMwRkI4RTA4
OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gS0NhbnZhc1ZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUz
MzU5MTYwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUFFMzM1OTE3MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2VsZWN0aW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRTMzNTkxODA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlNlbGVjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDZG
MjQ5MDZEMThBN0UwMDRBNkZBMyAvKiB4c2xfc3R5bGVzaGVldGltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHhzbF9zdHlsZXNoZWV0aW1wbC5jcHA7IHBhdGgg
PSB4c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMwNkYyNEEwNkQxOEE3RTAwNEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0geHNsX3N0eWxlc2hlZXRpbXBsLmg7IHBhdGgg
PSB4c2wveHNsX3N0eWxlc2hlZXRpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDMDZGMjRCMDZEMThBN0UwMDRBNkZBMyAvKiB4c2x0X3Byb2Nlc3NvcmltcGwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHhzbHRfcHJvY2Vzc29yaW1wbC5jcHA7
IHBhdGggPSB4c2wveHNsdF9wcm9jZXNzb3JpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTUxODYsNiArNTE5NSw5IEBACiAJCQkJRjU4Nzg1NTUwMkRFMzc1OTAxRUE0MTIy
IC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tICovLAogCQkJCTUxNTBDMkExMDcwMjYyOTAwMEFGNjQy
QyAvKiBXZWJEYXNoYm9hcmRSZWdpb24uaCAqLywKIAkJCQk1MTUwQzJBNTA3MDI2Mjk4MDBBRjY0
MkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gKi8sCisJCQkJQUUzMzU5MTYwOEMyN0FEOTAwQThB
QzQ5IC8qIFdlYlNlbGVjdGlvbi5oICovLAorCQkJCUFFMzM1OTE3MDhDMjdBRDkwMEE4QUM0OSAv
KiBXZWJTZWxlY3Rpb24ubW0gKi8sCisJCQkJQUUzMzU5MTgwOEMyN0FEOTAwQThBQzQ5IC8qIFdl
YlNlbGVjdGlvbkludGVybmFsLmggKi8sCiAJCQkJRjU4RUY1OEUwMkRGREZCNzAxODYzNUNBIC8q
IFdlYkNvcmUuZXhwICovLAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViQ29yZSBTUEkiOwpAQCAtNTc3
Nyw2ICs1Nzg5LDggQEAKIAkJCQlCQzE3OTg5NDA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3Ro
ZW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3OThEQTA4OERBNEY4MDA2MDY4QTUgLyogcmVu
ZGVyX3RoZW1lX21hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U2RkVFRDgwODk4NTgyMzAwQzQ0
QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUUzMzU5
MTkwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QUUzMzU5MUIwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbkludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTY0NDQsNiArNjQ1OCw4IEBACiAJCQkJQTg1NkU5RDYwOEI0NUIxRTAwNDJF
MzAzIC8qIGtkb214cGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDcwOEI0NUIxRTAw
NDJFMzAzIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDkwOEI0NUIx
RTAwNDJFMzAzIC8qIGV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1OTFDMDhD
MjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1
OTFFMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC03NzkxLDYgKzc4MDcsNyBAQAogCQkJCUJDMTc5ODkyMDg4RDk3NUYwMDYwNjhBNSAv
KiByZW5kZXJfdGhlbWVfbWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNzk4OTMwODhEOTc1
RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTZGRUVE
OTA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQUUzMzU5MUEwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtODQzMiw2ICs4NDQ5LDcgQEAKIAkJCQlBODU2RTlEODA4QjQ1QjFFMDA0
MkUzMDMgLyogZnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NTZFOURBMDhCNDVC
MUUwMDQyRTMwMyAvKiBleHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NTZFOUY5
MDhCNDYwOEYwMDQyRTMwMyAvKiB4cGF0aC55IGluIFNvdXJjZXMgKi8sCisJCQkJQUUzMzU5MUQw
OEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
V2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
MzYKZGlmZiAtcCAtdSAtcjEuMzM2IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIFdl
YkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAJMjUgQXVnIDIwMDUgMjM6MTM6NDAgLTAwMDAJMS4z
MzYKKysrIFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAJMjggQXVnIDIwMDUgMjM6MTI6NTkg
LTAwMDAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgogI2lu
Y2x1ZGUgImVkaXRpbmcvaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJlZGl0aW5nL3NlbGVjdGlv
bi5oIgorI2luY2x1ZGUgImVkaXRpbmcvc2VsZWN0aW9uZGF0YS5oIgogI2luY2x1ZGUgImVkaXRp
bmcvdmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0Lmgi
CiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3VuaXRzLmgiCkBAIC0xMzEsNiArMTMyLDcgQEAg
dXNpbmcga2h0bWw6OlJlbmRlck9iamVjdDsKIHVzaW5nIGtodG1sOjpSZW5kZXJUZXh0OwogdXNp
bmcga2h0bWw6OlJlbmRlcldpZGdldDsKIHVzaW5nIGtodG1sOjpTZWxlY3Rpb247Cit1c2luZyBr
aHRtbDo6U2VsZWN0aW9uRGF0YTsKIHVzaW5nIGtodG1sOjpUb2tlbml6ZXI7CiB1c2luZyBraHRt
bDo6VHlwaW5nQ29tbWFuZDsKIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247CkBAIC0yMzk2
LDcgKzIzOTgsNyBAQCBib29sIEtIVE1MUGFydDo6ZmluZFRleHROZXh0KCBjb25zdCBRU3RyCiAg
ICAgICAgICAgICAgICAgUG9zaXRpb24gcDEoZC0+bV9maW5kTm9kZSwgZC0+bV9maW5kUG9zKTsK
ICAgICAgICAgICAgICAgICBQb3NpdGlvbiBwMihkLT5tX2ZpbmROb2RlLCBkLT5tX2ZpbmRQb3Mg
KyBtYXRjaExlbik7CiAgICAgICAgICAgICAgICAgU2VsZWN0aW9uIHNlbCA9IFNlbGVjdGlvbihw
MSwga2h0bWw6OkRPV05TVFJFQU0sIHAyLCBraHRtbDo6U0VMX1BSRUZFUl9VUFNUUkVBTV9BRkZJ
TklUWSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwsIGQtPm1fc2Vs
ZWN0aW9uR3JhbnVsYXJpdHkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbihz
ZWwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTI0NjQsNiArMjQ2NiwxMSBAQCBjb25zdCBTZWxlY3Rpb24gJktIVE1MUGFydDo6c2VsZWN0aW9u
KCkgCiAgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uOwogfQogCitjb25zdCBTZWxlY3Rpb25EYXRh
IEtIVE1MUGFydDo6c2VsZWN0aW9uRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNlbGVjdGlv
bkRhdGEoZC0+bV9zZWxlY3Rpb24uYmFzZVJhbmdlKCkuZ2V0KCksIGQtPm1fc2VsZWN0aW9uLmVu
ZEFmZmluaXR5KCksIGQtPm1fc2VsZWN0aW9uLmlzRm9yd2FyZFNlbGVjdGlvbigpID8gU2VsZWN0
aW9uOjpGT1JXQVJEIDogU2VsZWN0aW9uOjpCQUNLV0FSRCwgZC0+bV9zZWxlY3Rpb25HcmFudWxh
cml0eSk7Cit9CisKIEVUZXh0R3JhbnVsYXJpdHkgS0hUTUxQYXJ0OjpzZWxlY3Rpb25HcmFudWxh
cml0eSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHk7CkBA
IC00NjA0LDcgKzQ2MTEsNyBAQCB2b2lkIEtIVE1MUGFydDo6c2VsZWN0Q2xvc2VzdFdvcmRGcm9t
TW91CiAgICAgICAgIGQtPm1fYmVnYW5TZWxlY3RpbmdUZXh0ID0gdHJ1ZTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24pKSB7CisgICAgaWYgKHNo
b3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24sIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkp
KSB7CiAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgICAgICBzdGFydEF1dG9T
Y3JvbGwoKTsKICAgICB9CkBAIC00NjQ0LDcgKzQ2NTEsNyBAQCB2b2lkIEtIVE1MUGFydDo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50VHJpCiAgICAgICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4
dCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsZWN0aW9uKSkgeworICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbGVjdGlvbiwgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSkpIHsKICAgICAgICAgICAgIHNl
dFNlbGVjdGlvbihzZWxlY3Rpb24pOwogICAgICAgICAgICAgc3RhcnRBdXRvU2Nyb2xsKCk7CiAg
ICAgICAgIH0KQEAgLTQ2OTgsNyArNDcwNSw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnRTaW4KICAgICAgICAgICAgICAgICBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5
ID0gQ0hBUkFDVEVSOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsLCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KSkgewogICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGlvbihzZWwpOwogICAgICAgICAgICAgICAgIHN0YXJ0QXV0b1Nj
cm9sbCgpOwogICAgICAgICAgICAgfQpAQCAtNDkxMiw3ICs0OTE5LDcgQEAgdm9pZCBLSFRNTFBh
cnQ6OmhhbmRsZU1vdXNlTW92ZUV2ZW50U2VsZQogICAgICAgICBzZWwuZXhwYW5kVXNpbmdHcmFu
dWxhcml0eShkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KTsKICAgICB9CiAKLSAgICBpZiAoc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKKyAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KHNlbCwgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9u
KHNlbCk7CiAgICAgfQogCkBAIC00OTg1LDggKzQ5OTIsOSBAQCB2b2lkIEtIVE1MUGFydDo6a2h0
bWxNb3VzZVJlbGVhc2VFdmVudCggCiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0g
bm9kZS0+cmVuZGVyZXIoKS0+cG9zaXRpb25Gb3JDb29yZGluYXRlcyhldmVudC0+eCgpLCBldmVu
dC0+eSgpKTsKICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocG9zKTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHsKLSAgICAgICAg
ICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgQ0hBUkFDVEVSKSkgeworICAgICAgICAgICAgc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbiwgQ0hBUkFDVEVSKTsKKyAgICAgICAgICAgIHNldFNlbGVjdGlvbkdyYW51bGFy
aXR5KENIQVJBQ1RFUik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUxNTQsMjcgKzUxNjIsMjcg
QEAgdm9pZCBLSFRNTFBhcnQ6OnNlbGVjdEFsbCgpCiAgICAgTm9kZUltcGwgKmRlID0gZC0+bV9k
b2MtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGludCBuID0gZGUgPyBkZS0+Y2hpbGROb2RlQ291
bnQoKSA6IDA7CiAgICAgU2VsZWN0aW9uIHNlbCA9IFNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24o
ZGUsIDAsIGtodG1sOjpET1dOU1RSRUFNKSwgVmlzaWJsZVBvc2l0aW9uKGRlLCBuLCBraHRtbDo6
RE9XTlNUUkVBTSkpOwotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsKSkgeworICAg
IGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsLCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5
KSkgewogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKICAgICB9CiAgICAgc2VsZWN0RnJhbWVF
bGVtZW50SW5QYXJlbnRJZkZ1bGx5U2VsZWN0ZWQoKTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJm5ld3NlbGVjdGlvbikgY29uc3QK
K2Jvb2wgS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZu
ZXdzZWxlY3Rpb24sIEVUZXh0R3JhbnVsYXJpdHkgc2VsZWN0aW9uR3JhbnVsYXJpdHkpIGNvbnN0
CiB7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIHJldHVybiBLV1EodGhpcyktPnNob3VsZENoYW5n
ZVNlbGVjdGlvbihkLT5tX3NlbGVjdGlvbiwgbmV3c2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24uc3Rh
cnRBZmZpbml0eSgpLCBmYWxzZSk7CisgICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKFNlbGVjdGlvbkRhdGEobmV3c2VsZWN0aW9uLmJhc2VSYW5nZSgpLmdldCgpLCBu
ZXdzZWxlY3Rpb24uZW5kQWZmaW5pdHkoKSwgbmV3c2VsZWN0aW9uLmlzRm9yd2FyZFNlbGVjdGlv
bigpID8gU2VsZWN0aW9uOjpGT1JXQVJEIDogU2VsZWN0aW9uOjpCQUNLV0FSRCwgc2VsZWN0aW9u
R3JhbnVsYXJpdHkpLCBmYWxzZSk7CiAjZWxzZQogICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiB9
CiAKLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpy
YW5nZSkgY29uc3QKK2Jvb2wgS0hUTUxQYXJ0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2Vs
ZWN0aW9uRGF0YSAmc2VsKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEtI
VE1MUGFydDo6c2hvdWxkRW5kRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25zdAor
Ym9vbCBLSFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2VsZWN0aW9uRGF0YSAmc2Vs
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTE5Myw3ICs1MjAxLDcgQEAgRWRp
dENvbW1hbmRQdHIgS0hUTUxQYXJ0OjpsYXN0RWRpdENvbW1hbgogCiB2b2lkIEtIVE1MUGFydDo6
YXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkKIHsKLSAgICBpZiAoc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSkpIHsKKyAgICBpZiAoc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSwgZC0+bV9zZWxlY3Rpb25HcmFudWxh
cml0eSkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSwgZmFs
c2UpOwogICAgIH0KIApAQCAtNTIyNyw3ICs1MjM1LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmFwcGxp
ZWRFZGl0aW5nKEVkaXRDb21tYQogCiB2b2lkIEtIVE1MUGFydDo6dW5hcHBsaWVkRWRpdGluZyhF
ZGl0Q29tbWFuZFB0ciAmY21kKQogewotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY21k
LnN0YXJ0aW5nU2VsZWN0aW9uKCkpKSB7CisgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihj
bWQuc3RhcnRpbmdTZWxlY3Rpb24oKSwgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSkpIHsKICAg
ICAgICAgc2V0U2VsZWN0aW9uKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpLCB0cnVlKTsKICAgICB9
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNTIzOSw3ICs1MjQ3LDcgQEAgdm9pZCBLSFRNTFBhcnQ6
OnVuYXBwbGllZEVkaXRpbmcoRWRpdENvbQogCiB2b2lkIEtIVE1MUGFydDo6cmVhcHBsaWVkRWRp
dGluZyhFZGl0Q29tbWFuZFB0ciAmY21kKQogewotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY21kLmVuZGluZ1NlbGVjdGlvbigpKSkgeworICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY21kLmVuZGluZ1NlbGVjdGlvbigpLCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KSkgewog
ICAgICAgICBzZXRTZWxlY3Rpb24oY21kLmVuZGluZ1NlbGVjdGlvbigpLCB0cnVlKTsKICAgICB9
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNTk4NSw3ICs1OTkzLDcgQEAgdm9pZCBLSFRNTFBhcnQ6
OnNlbGVjdEZyYW1lRWxlbWVudEluUGFyZQogICAgIFZpc2libGVQb3NpdGlvbiBhZnRlck93bmVy
RWxlbWVudChWaXNpYmxlUG9zaXRpb24ob3duZXJFbGVtZW50UGFyZW50LCBvd25lckVsZW1lbnRO
b2RlSW5kZXggKyAxLCBraHRtbDo6U0VMX1BSRUZFUl9VUFNUUkVBTV9BRkZJTklUWSkpOwogCiAg
ICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwgYW5kIHRoZW4gc2VsZWN0IGZyb20gYmVm
b3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KLSAgICBpZiAocGFyZW50LT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oU2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQp
KSkgeworICAgIGlmIChwYXJlbnQtPnNob3VsZENoYW5nZVNlbGVjdGlvbihTZWxlY3Rpb24oYmVm
b3JlT3duZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCksIGQtPm1fc2VsZWN0aW9uR3JhbnVs
YXJpdHkpKSB7CiAgICAgICAgIHBhcmVudFZpZXctPnNldEZvY3VzKCk7CiAgICAgICAgIHBhcmVu
dC0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihiZWZvcmVPd25lckVsZW1lbnQsIGFmdGVyT3duZXJF
bGVtZW50KSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEzNgpkaWZmIC1wIC11IC1yMS4xMzYgV2ViQ29yZS9raHRtbC9r
aHRtbF9wYXJ0LmgKLS0tIFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5oCTE0IEF1ZyAyMDA1IDA5
OjEyOjQzIC0wMDAwCTEuMTM2CisrKyBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuaAkyOCBBdWcg
MjAwNSAyMzoxMzowMCAtMDAwMApAQCAtODYsNiArODYsNyBAQCBuYW1lc3BhY2Uga2h0bWwKICAg
Y2xhc3MgUmVuZGVyUGFydE9iamVjdDsKICAgY2xhc3MgUmVuZGVyV2lkZ2V0OwogICBjbGFzcyBT
ZWxlY3Rpb247CisgIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiAgIGNsYXNzIFhNTFRva2VuaXplcjsK
IH0KIApAQCAtNjAyLDYgKzYwMywxMSBAQCBwdWJsaWM6CiAgIGNvbnN0IGtodG1sOjpTZWxlY3Rp
b24gJnNlbGVjdGlvbigpIGNvbnN0OwogCiAgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzZWxlY3Rp
b24gcGFydCBvZiB0aGUgSFRNTCwgcGFja2FnZWQgd2l0aCByZWxhdGVkIHNlbGVjdGlvbiBkYXRh
LgorICAgKi8KKyAgY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgc2VsZWN0aW9uRGF0YSgpIGNv
bnN0OworCisgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBncmFudWxhcml0eSBvZiB0aGUgc2VsZWN0
aW9uIChjaGFyYWN0ZXIsIHdvcmQsIGxpbmUsIHBhcmFncmFwaCkuCiAgICAqLwogICBraHRtbDo6
RVRleHRHcmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0OwpAQCAtNjI0LDcg
KzYzMCw3IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciBzZWxlY3Rpb24g
Y2FuIGJlIGNoYW5nZWQuCiAgICAqLwotICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25z
dCBraHRtbDo6U2VsZWN0aW9uICYpIGNvbnN0OworICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlv
bihjb25zdCBraHRtbDo6U2VsZWN0aW9uICYsIGtodG1sOjpFVGV4dEdyYW51bGFyaXR5IHNlbGVj
dGlvbkdyYW51bGFyaXR5KSBjb25zdDsKIAogICAvKioKICAgICogUmV0dXJucyBhIG1hcmssIHRv
IGJlIHVzZWQgYXMgZW1hY3MgdXNlcyBpdC4KQEAgLTcwNiwxMiArNzEyLDEyIEBAIHB1YmxpYzoK
ICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciBlZGl0aW5nIHNob3VsZCBlbmQgaW4gdGhlIGdp
dmVuIHJhbmdlCiAgICAqLwotICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0
IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OworICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0
aW5nKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25EYXRhICZzZWwpIGNvbnN0OwogCiAgIC8qKgogICAg
KiBSZXR1cm5zIHdoZXRoZXIgZWRpdGluZyBzaG91bGQgZW5kIGluIHRoZSBnaXZlbiByYW5nZQog
ICAgKi8KLSAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUlt
cGwgKikgY29uc3Q7CisgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IGtodG1s
OjpTZWxlY3Rpb25EYXRhICZzZWwpIGNvbnN0OwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBj
b250ZW50RWRpdGFibGUgIm92ZXJyaWRlIiB2YWx1ZSBmb3IgdGhlIHBhcnQKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45MQpkaWZmIC1wIC11IC1yMS45MSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0
aW9uLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAJMjUgQXVnIDIw
MDUgMTc6NDc6MDUgLTAwMDAJMS45MQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlv
bi5jcHAJMjggQXVnIDIwMDUgMjM6MTM6MDAgLTAwMDAKQEAgLTYwNiw2ICs2MDYsMjQgQEAgdm9p
ZCBTZWxlY3Rpb246OnNldE5lZWRzTGF5b3V0KGJvb2wgZmxhZwogCiBTaGFyZWRQdHI8UmFuZ2VJ
bXBsPiBTZWxlY3Rpb246OnRvUmFuZ2UoKSBjb25zdAogeworICAgIHJldHVybiBtYWtlUmFuZ2Uo
bV9zdGFydCwgbV9lbmQpOworfQorCitTaGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb246OmJh
c2VSYW5nZSgpIGNvbnN0Cit7CisgICAgUG9zaXRpb24gZnJvbSA9IG1fYmFzZTsKKyAgICBQb3Np
dGlvbiB0byA9IG1fZXh0ZW50OworCisgICAgaWYgKCEgaXNGb3J3YXJkU2VsZWN0aW9uKCkpIHsK
KyAgICAgICAgZnJvbSA9IG1fZXh0ZW50OworICAgICAgICB0byA9IG1fYmFzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbWFrZVJhbmdlKGZyb20sIHRvKTsKK30KKworU2hhcmVkUHRyPFJhbmdlSW1w
bD4gU2VsZWN0aW9uOjptYWtlUmFuZ2UoY29uc3QgUG9zaXRpb24gJmZyb20sIGNvbnN0IFBvc2l0
aW9uICZ0bykgY29uc3QKK3sKICAgICBpZiAoaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBTaGFy
ZWRQdHI8UmFuZ2VJbXBsPigpOwogCkBAIC02MTMsMTQgKzYzMSwxNCBAQCBTaGFyZWRQdHI8UmFu
Z2VJbXBsPiBTZWxlY3Rpb246OnRvUmFuZ2UoCiAgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5u
aW5nIGVkaXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCiAgICAgLy8gRmFpbGluZyB0
byBjYWxsIHRoaXMgY2FuIHJlc3VsdCBpbiBlcXVpdmFsZW50WFhYUG9zaXRpb24gY2FsbHMgcmV0
dXJuaW5nCiAgICAgLy8gaW5jb3JyZWN0IHJlc3VsdHMuCi0gICAgbV9zdGFydC5ub2RlKCktPmdl
dERvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOworICAgIGZyb20ubm9kZSgpLT5nZXREb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgIFBvc2l0aW9uIHMsIGU7CiAgICAgaWYgKGlzQ2Fy
ZXQoKSkgewogICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgY2FyZXQsIG1vdmUgdGhl
IHJhbmdlIHN0YXJ0IHVwc3RyZWFtLiBUaGlzIGhlbHBzIHVzIG1hdGNoCiAgICAgICAgIC8vIHRo
ZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3aGljaCBtYWtlIHN0eWxlIGRl
dGVybWluYXRpb25zIGJhc2VkCiAgICAgICAgIC8vIG9uIHRoZSBjaGFyYWN0ZXIgYmVmb3JlIHRo
ZSBjYXJldCwgaWYgYW55LiAKLSAgICAgICAgcyA9IG1fc3RhcnQudXBzdHJlYW0oKS5lcXVpdmFs
ZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOworICAgICAgICBzID0gZnJvbS51cHN0cmVhbSgp
LmVxdWl2YWxlbnRSYW5nZUNvbXBsaWFudFBvc2l0aW9uKCk7CiAgICAgICAgIGUgPSBzOwogICAg
IH0KICAgICBlbHNlIHsKQEAgLTYzNiw4ICs2NTQsOCBAQCBTaGFyZWRQdHI8UmFuZ2VJbXBsPiBT
ZWxlY3Rpb246OnRvUmFuZ2UoCiAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBeIHNl
bGVjdGVkCiAgICAgICAgIC8vCiAgICAgICAgIEFTU0VSVChpc1JhbmdlKCkpOwotICAgICAgICBz
ID0gbV9zdGFydC5kb3duc3RyZWFtKCk7Ci0gICAgICAgIGUgPSBtX2VuZC51cHN0cmVhbSgpOwor
ICAgICAgICBzID0gZnJvbS5kb3duc3RyZWFtKCk7CisgICAgICAgIGUgPSB0by51cHN0cmVhbSgp
OwogICAgICAgICBpZiAoUmFuZ2VJbXBsOjpjb21wYXJlQm91bmRhcnlQb2ludHMocy5ub2RlKCks
IHMub2Zmc2V0KCksIGUubm9kZSgpLCBlLm9mZnNldCgpKSA+IDApIHsKICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGUgc3RhcnQgaXMgYmVmb3JlIHRoZSBlbmQuCiAgICAgICAgICAgICAvLyBU
aGUgZW5kIGNhbiB3aW5kIHVwIGJlZm9yZSB0aGUgc3RhcnQgaWYgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UgaXMgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQuCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRp
bmcvc2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9zZWxlY3Rpb24uaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC1w
IC11IC1yMS4zOSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgKLS0tIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uaAkyMyBKdW4gMjAwNSAxOTo0Nzo0OCAtMDAwMAkxLjM5
CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgJMjggQXVnIDIwMDUgMjM6MTM6
MDAgLTAwMDAKQEAgLTEwOSw4ICsxMDksMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJldCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gQ0FSRVQ7IH0KICAgICBib29sIGlzUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBzdGF0ZSgpID09IFJBTkdFOyB9CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgIT0gTk9ORTsgfQorICAgIGJvb2wgaXNGb3J3YXJk
U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlSXNTdGFydDsgfQogCiAgICAgU2hhcmVk
UHRyPERPTTo6UmFuZ2VJbXBsPiB0b1JhbmdlKCkgY29uc3Q7CisgICAgU2hhcmVkUHRyPERPTTo6
UmFuZ2VJbXBsPiBiYXNlUmFuZ2UoKSBjb25zdDsKIAogICAgIHZvaWQgZGVidWdQb3NpdGlvbigp
IGNvbnN0OwogICAgIHZvaWQgZGVidWdSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0ICpyLCBi
b29sIHNlbGVjdGVkKSBjb25zdDsKQEAgLTEzNyw2ICsxMzksNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgbmVlZHNDYXJldFJlcGFpbnQoKTsKICAgICB2b2lkIHBhaW50Q2FyZXQoUVBhaW50ZXIgKnAs
IGNvbnN0IFFSZWN0ICZyZWN0KTsKICAgICBRUmVjdCBjYXJldFJlcGFpbnRSZWN0KCkgY29uc3Q7
CisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiBtYWtlUmFuZ2UoY29uc3QgUG9zaXRpb24g
JmZyb20sIGNvbnN0IFBvc2l0aW9uICZ0bykgY29uc3Q7CiAKICAgICBpbnQgeFBvc0ZvclZlcnRp
Y2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUsIGJvb2wgcmVjYWxjID0gZmFsc2UpIGNv
bnN0OwogCkluZGV4OiBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDgKZGlmZiAtcCAtdSAtcjEuMjQ4IFdlYkNvcmUva2h0
bWwveG1sL2RvbV9kb2NpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwu
Y3BwCTI1IEF1ZyAyMDA1IDE3OjQ3OjIwIC0wMDAwCTEuMjQ4CisrKyBXZWJDb3JlL2todG1sL3ht
bC9kb21fZG9jaW1wbC5jcHAJMjggQXVnIDIwMDUgMjM6MTM6MDIgLTAwMDAKQEAgLTU2LDYgKzU2
LDcgQEAKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIK
KyNpbmNsdWRlICJzZWxlY3Rpb25kYXRhLmgiCiAKICNpbmNsdWRlIDxrZ2xvYmFsc2V0dGluZ3Mu
aD4KICNpbmNsdWRlIDxrc3RyaW5naGFuZGxlci5oPgpAQCAtMjE1Miw3ICsyMTUzLDggQEAgYm9v
bCBEb2N1bWVudEltcGw6OnJlbGlucXVpc2hlc0VkaXRpbmdGbwogICAgIGlmICghcGFydCgpIHx8
ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFydCgpLT5zaG91
bGRFbmRFZGl0aW5nKHJhbmdlT2ZDb250ZW50cyhyb290KS5nZXQoKSk7CisgICAgU2VsZWN0aW9u
RGF0YSBzZWwocmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgpKTsKKyAgICByZXR1cm4gcGFydCgp
LT5zaG91bGRFbmRFZGl0aW5nKHNlbCk7CiB9CiAKIGJvb2wgRG9jdW1lbnRJbXBsOjphY2NlcHRz
RWRpdGluZ0ZvY3VzKE5vZGVJbXBsICpub2RlKQpAQCAtMjE2NCw3ICsyMTY2LDggQEAgYm9vbCBE
b2N1bWVudEltcGw6OmFjY2VwdHNFZGl0aW5nRm9jdXMoTgogICAgIGlmICghcGFydCgpIHx8ICFy
b290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFydCgpLT5zaG91bGRC
ZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgpKTsKKyAgICBTZWxlY3Rpb25E
YXRhIHNlbChyYW5nZU9mQ29udGVudHMocm9vdCkuZ2V0KCkpOworICAgIHJldHVybiBwYXJ0KCkt
PnNob3VsZEJlZ2luRWRpdGluZyhzZWwpOwogfQogCiBjb25zdCBRVmFsdWVMaXN0PERhc2hib2Fy
ZFJlZ2lvblZhbHVlPiAmIERvY3VtZW50SW1wbDo6ZGFzaGJvYXJkUmVnaW9ucygpIGNvbnN0Cklu
ZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MjI2CmRpZmYgLXAgLXUgLXIxLjIyNiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAotLS0gV2Vi
Q29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgJMTcgQXVnIDIwMDUgMjA6MTI6MTUgLTAwMDAJMS4yMjYK
KysrIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCTI4IEF1ZyAyMDA1IDIzOjEzOjAyIC0wMDAw
CkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyT2Jq
ZWN0OwogICAgIGNsYXNzIFJlbmRlclN0eWxlOwogICAgIGNsYXNzIFZpc2libGVQb3NpdGlvbjsK
KyAgICBjbGFzcyBTZWxlY3Rpb25EYXRhOwogICAgIHN0cnVjdCBEYXNoYm9hcmRSZWdpb25WYWx1
ZTsKIH0KIApAQCAtMzQ1LDkgKzM0Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmb2xkU2VsZWN0aW9uLCBib29s
IGNsb3NlVHlwaW5nKTsKICAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmb2xkU2VsZWN0
aW9uLCBjb25zdCBraHRtbDo6U2VsZWN0aW9uICZuZXdTZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5p
dHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwgKikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwgKikgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6
U2VsZWN0aW9uRGF0YSAmc2VsLCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25EYXRhICZz
ZWwpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0IGtodG1s
OjpTZWxlY3Rpb25EYXRhICZzZWwpIGNvbnN0OwogCiAgICAgS0pTOjpCaW5kaW5nczo6Um9vdE9i
amVjdCAqZXhlY3V0aW9uQ29udGV4dEZvckRPTSgpOwogICAgIEtKUzo6QmluZGluZ3M6OlJvb3RP
YmplY3QgKmJpbmRpbmdSb290T2JqZWN0KCk7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBh
cnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1M
UGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NjQKZGlmZiAtcCAtdSAtcjEuNjY0IFdl
YkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1t
CTI1IEF1ZyAyMDA1IDIzOjEzOjU3IC0wMDAwCTEuNjY0CisrKyBXZWJDb3JlL2t3cS9LV1FLSFRN
TFBhcnQubW0JMjggQXVnIDIwMDUgMjM6MTM6MDUgLTAwMDAKQEAgLTQ3LDYgKzQ3LDggQEAKICNp
bXBvcnQgIldlYkNvcmVJbWFnZVJlbmRlcmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3Rv
cnkuaCIKICNpbXBvcnQgIldlYkRhc2hib2FyZFJlZ2lvbi5oIgorI2ltcG9ydCAiV2ViU2VsZWN0
aW9uLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJjc3Nf
Y29tcHV0ZWRzdHlsZS5oIgogI2ltcG9ydCAiY3NzaGVscGVyLmgiCkBAIC03MCw2ICs3Miw3IEBA
CiAjaW1wb3J0ICJyZW5kZXJfdGV4dC5oIgogI2ltcG9ydCAicmVuZGVyX3RoZW1lLmgiCiAjaW1w
b3J0ICJzZWxlY3Rpb24uaCIKKyNpbXBvcnQgInNlbGVjdGlvbmRhdGEuaCIKICNpbXBvcnQgInZp
c2libGVfcG9zaXRpb24uaCIKICNpbXBvcnQgInZpc2libGVfdGV4dC5oIgogI2ltcG9ydCAidmlz
aWJsZV91bml0cy5oIgpAQCAtMTM4LDYgKzE0MSw3IEBAIHVzaW5nIGtodG1sOjp0aGVtZTsKIHVz
aW5nIGtodG1sOjpSZW5kZXJXaWRnZXQ7CiB1c2luZyBraHRtbDo6UmlnaHRXb3JkSWZPbkJvdW5k
YXJ5OwogdXNpbmcga2h0bWw6OlNlbGVjdGlvbjsKK3VzaW5nIGtodG1sOjpTZWxlY3Rpb25EYXRh
OwogdXNpbmcga2h0bWw6OlNFTEVDVF9FTEVNRU5UOwogdXNpbmcga2h0bWw6OnNldEVuZDsKIHVz
aW5nIGtodG1sOjpzZXRTdGFydDsKQEAgLTQxMDUsMTIgKzQxMDksOSBAQCB2b2lkIEtXUUtIVE1M
UGFydDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjCiAgICAgW19icmlkZ2UgcmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbl07CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY29uc3QgU2VsZWN0aW9uICZvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlvbiAmbmV3U2Vs
ZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBj
b25zdAorYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRt
bDo6U2VsZWN0aW9uRGF0YSAmc2VsLCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAogewotICAg
IHJldHVybiBbX2JyaWRnZSBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltET01SYW5nZSBf
cmFuZ2VXaXRoSW1wbDpvbGRTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RPTVJhbmdlOltET01SYW5nZSBfcmFuZ2VXaXRo
SW1wbDpuZXdTZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFmZmluaXR5OnN0YXRpY19jYXN0PE5TU2VsZWN0aW9uQWZmaW5p
dHk+KGFmZmluaXR5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsU2Vs
ZWN0aW5nOnN0aWxsU2VsZWN0aW5nXTsKKyAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uVG86W1dlYlNlbGVjdGlvbiBfc2VsZWN0aW9uV2l0aFNlbGVjdGlvbkRhdGE6JnNl
bF0gc3RpbGxTZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOwogfQogCiB2b2lkIEtXUUtIVE1MUGFy
dDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKQEAgLTQxMjgsMTYgKzQxMjksMTQgQEAgYm9v
bCBLV1FLSFRNTFBhcnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgYwogICAgIHJldHVybiBLSFRNTFBh
cnQ6OmlzQ29udGVudEVkaXRhYmxlKCkgfHwgW19icmlkZ2UgaXNFZGl0YWJsZV07CiB9CiAKLWJv
b2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpyYW5n
ZSkgY29uc3QKK2Jvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgU2Vs
ZWN0aW9uRGF0YSAmc2VsKSBjb25zdAogewotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgcmV0dXJu
IFtfYnJpZGdlIHNob3VsZEJlZ2luRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6Y29u
c3RfY2FzdDxSYW5nZUltcGwgKj4ocmFuZ2UpXV07CisgICAgcmV0dXJuIFtfYnJpZGdlIHNob3Vs
ZEJlZ2luRWRpdGluZzpbV2ViU2VsZWN0aW9uIF9zZWxlY3Rpb25XaXRoU2VsZWN0aW9uRGF0YTom
c2VsXV07CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFJh
bmdlSW1wbCAqcmFuZ2UpIGNvbnN0Citib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkRW5kRWRpdGlu
Zyhjb25zdCBTZWxlY3Rpb25EYXRhICZzZWwpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHJhbmdlKTsK
LSAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkRW5kRWRpdGluZzpbRE9NUmFuZ2UgX3JhbmdlV2l0
aEltcGw6Y29uc3RfY2FzdDxSYW5nZUltcGwgKj4ocmFuZ2UpXV07CisgICAgcmV0dXJuIFtfYnJp
ZGdlIHNob3VsZEVuZEVkaXRpbmc6W1dlYlNlbGVjdGlvbiBfc2VsZWN0aW9uV2l0aFNlbGVjdGlv
bkRhdGE6JnNlbF1dOwogfQogCiBzdGF0aWMgUVZhbHVlTGlzdDxLV1FLSFRNTFBhcnQ6Ok1hcmtl
ZFRleHRVbmRlcmxpbmU+IGNvbnZlcnRBdHRyaWJ1dGVzVG9VbmRlcmxpbmVzKGNvbnN0IERPTTo6
UmFuZ2VJbXBsICptYXJrZWRUZXh0UmFuZ2UsIE5TQXJyYXkgKmF0dHJpYnV0ZXMsIE5TQXJyYXkg
KnJhbmdlcykKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjM0NQpkaWZmIC1wIC11IC1yMS4zNDUgV2ViQ29yZS9rd3EvV2ViQ29yZUJy
aWRnZS5oCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgJMTcgQXVnIDIwMDUgMjA6MTI6
MTUgLTAwMDAJMS4zNDUKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaAkyOCBBdWcgMjAw
NSAyMzoxMzowNSAtMDAwMApAQCAtMjgsNiArMjgsNyBAQAogI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvbnBydW50aW1lLmg+CiAjaW1wb3J0IDxKYXZhVk0vam5pLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1dlYkNvcmVLZXlib2FyZEFjY2Vzcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJTZWxlY3Rpb24u
aD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAKQEAgLTMzNyw3ICszMzgsOCBAQCB0eXBlZGVmIGVu
dW0KIC0gKE5TUmVjdCljYXJldFJlY3RBdE5vZGU6KERPTU5vZGUgKilub2RlIG9mZnNldDooaW50
KW9mZnNldCBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eTsKIC0gKE5TUmVj
dClmaXJzdFJlY3RGb3JET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKIAotLSAodm9pZClzZXRT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFm
ZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nOwor
LSAodm9pZClzZXRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBjbG9zZVR5cGluZzooQk9P
TCljbG9zZVR5cGluZzsKKy0gKFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKIC0gKERPTVJhbmdl
ICopc2VsZWN0ZWRET01SYW5nZTsKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZm
aW5pdHk7CiAKQEAgLTM4NSw3ICszODcsOCBAQCB0eXBlZGVmIGVudW0KIC0gKHZvaWQpYWx0ZXJD
dXJyZW50U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0
aW9uOihXZWJTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJTZWxl
Y3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eTsKIC0gKERPTVJhbmdlICopcmFuZ2VCeUFsdGVy
aW5nQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJhdGlvbilhbHRlcmF0aW9uIHZl
cnRpY2FsRGlzdGFuY2U6KGZsb2F0KWRpc3RhbmNlOwogLSAodm9pZClhbHRlckN1cnJlbnRTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNl
OihmbG9hdClkaXN0YW5jZTsKLS0gKFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdy
YW51bGFyaXR5OworLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rp
b247CistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7
CiAtIChET01SYW5nZSAqKXNtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdlOihET01SYW5n
ZSAqKXByb3Bvc2VkQ2hhclJhbmdlOwogLSAodm9pZClzbWFydEluc2VydEZvclN0cmluZzooTlNT
dHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKiljaGFyUmFuZ2VU
b1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJp
bmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nOwogLSAoQk9PTCljYW5EZWxldGVSYW5nZTooRE9N
UmFuZ2UgKilyYW5nZTsKQEAgLTQxMSw3ICs0MTQsNyBAQCB0eXBlZGVmIGVudW0KIC0gKHZvaWQp
bW92ZVNlbGVjdGlvblRvRHJhZ0NhcmV0OihET01Eb2N1bWVudEZyYWdtZW50ICopc2VsZWN0aW9u
RnJhZ21lbnQgc21hcnRNb3ZlOihCT09MKXNtYXJ0TW92ZTsKIC0gKHZvaWQpbW92ZURyYWdDYXJl
dFRvUG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiAtICh2b2lkKXJlbW92ZURyYWdDYXJldDsKLS0gKERP
TVJhbmdlICopZHJhZ0NhcmV0RE9NUmFuZ2U7CistIChXZWJTZWxlY3Rpb24gKilkcmFnQ2FyZXRT
ZWxlY3Rpb247CiAtIChET01SYW5nZSAqKWVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDooTlNQb2lu
dClwb2ludDsKIAogLSAodm9pZClkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGU6KEJPT0wp
c21hcnREZWxldGU7CkBAIC02MjEsOSArNjI0LDkgQEAgdHlwZWRlZiBlbnVtCiAtICh2b2lkKXJl
c3BvbmRUb0NoYW5nZWRDb250ZW50czsKIC0gKHZvaWQpc2V0SXNTZWxlY3RlZDooQk9PTClpc1Nl
bGVjdGVkIGZvclZpZXc6KE5TVmlldyAqKXZpZXc7CiAtIChCT09MKWlzRWRpdGFibGU7Ci0tIChC
T09MKXNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJhbmdl
IHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rp
b25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnOwot
LSAoQk9PTClzaG91bGRCZWdpbkVkaXRpbmc6KERPTVJhbmdlICopcmFuZ2U7Ci0tIChCT09MKXNo
b3VsZEVuZEVkaXRpbmc6KERPTVJhbmdlICopcmFuZ2U7CistIChCT09MKXNob3VsZENoYW5nZVNl
bGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKilzZWwgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsK
Ky0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0aW5nOihXZWJTZWxlY3Rpb24gKilzZWw7CistIChCT09M
KXNob3VsZEVuZEVkaXRpbmc6KFdlYlNlbGVjdGlvbiAqKXNlbDsKIC0gKEJPT0wpY2FuUGFzdGU7
CiAKIC0gKE5TU3RyaW5nICopb3ZlcnJpZGVNZWRpYVR5cGU7CkluZGV4OiBXZWJDb3JlL2t3cS9X
ZWJDb3JlQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3
cS9XZWJDb3JlQnJpZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxMApkaWZmIC1wIC11
IC1yMS40MTAgV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0gV2ViQ29yZS9rd3EvV2Vi
Q29yZUJyaWRnZS5tbQkyNSBBdWcgMjAwNSAyMzoxMzo1OCAtMDAwMAkxLjQxMAorKysgV2ViQ29y
ZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQkyOCBBdWcgMjAwNSAyMzoxMzowNiAtMDAwMApAQCAtODIs
NiArODIsNyBAQAogI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkuaCIKICNpbXBv
cnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViQ29yZVNldHRpbmdzLmgiCisj
aW1wb3J0ICJXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIgogCiBAY2xhc3MgTlNWaWV3OwogCkBAIC0x
NTcxLDQ5ICsxNTcyLDMwIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKICAgICBbc2VsZiBlbnN1cmVTZWxlY3Rpb25WaXNpYmxlXTsKIH0KIAotLSAoV2ViU2VsZWN0
aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHkKKy0gKFdlYlRleHRTZWxlY3Rpb25H
cmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQogewotICAgIC8vIE5PVEU6IFRoZSBlbnVt
cyAqbXVzdCogbWF0Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVzIGRlY2xhcmVkIGluIGRvbV9zZWxl
Y3Rpb24uaAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJTZWxlY3Rpb25HcmFudWxhcml0eT4o
X3BhcnQtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkpOworICAgIHJldHVybiBbW3NlbGYgc2VsZWN0
aW9uXSBncmFudWxhcml0eV07CiB9CiAKLS0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9N
UmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZp
bml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZworLSAoV2ViVGV4dFNlbGVjdGlvbkRp
cmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb24KIHsKLSAgICBOb2RlSW1wbCAqc3RhcnRDb250YWlu
ZXIgPSBbW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBfbm9kZUltcGxdOwotICAgIE5vZGVJbXBsICpl
bmRDb250YWluZXIgPSBbW3JhbmdlIGVuZENvbnRhaW5lcl0gX25vZGVJbXBsXTsKLSAgICBBU1NF
UlQoc3RhcnRDb250YWluZXIpOwotICAgIEFTU0VSVChlbmRDb250YWluZXIpOwotICAgIEFTU0VS
VChzdGFydENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7Ci0gICAgQVNTRVJUKHN0YXJ0Q29udGFp
bmVyLT5nZXREb2N1bWVudCgpID09IGVuZENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7Ci0gICAg
Ci0gICAgX3BhcnQtPnhtbERvY0ltcGwoKS0+dXBkYXRlTGF5b3V0KCk7Ci0KLSAgICBFQWZmaW5p
dHkgYWZmaW5pdHkgPSBzdGF0aWNfY2FzdDxFQWZmaW5pdHk+KHNlbGVjdGlvbkFmZmluaXR5KTsK
KyAgICByZXR1cm4gW1tzZWxmIHNlbGVjdGlvbl0gZGlyZWN0aW9uXTsKK30KIAotICAgIGJvb2wg
cmFuZ2VDb2xsYXBzZWQgPSBbcmFuZ2UgY29sbGFwc2VkXTsKLSAgICBpZiAoIXJhbmdlQ29sbGFw
c2VkKQotICAgICAgICBhZmZpbml0eSA9IERPV05TVFJFQU07Ci0gICAgCi0gICAgLy8gV29yayBh
cm91bmQgYnVnIHdoZXJlIGlzUmVuZGVyZWRDb250ZW50IHJldHVybnMgZmFsc2UgZm9yIDxicj4g
ZWxlbWVudHMgYXQgdGhlIGVuZHMgb2YgbGluZXMuCi0gICAgLy8gSWYgdGhhdCBidWcgd2Fzbid0
IGFuIGlzc3VlLCB3ZSBjb3VsZCBqdXN0IG1ha2UgdGhlIHBvc2l0aW9uIGZyb20gdGhlIHJhbmdl
IGRpcmVjdGx5LgotICAgIFBvc2l0aW9uIHN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcmFuZ2Ugc3Rh
cnRPZmZzZXRdKTsKLSAgICBQb3NpdGlvbiBlbmQoZW5kQ29udGFpbmVyLCBbcmFuZ2UgZW5kT2Zm
c2V0XSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydChzdGFydCwgYWZmaW5pdHkp
OwotICAgIHN0YXJ0ID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCk7Ci0KLSAgICBpZiAo
cmFuZ2VDb2xsYXBzZWQpIHsKLSAgICAgICAgc2V0QWZmaW5pdHlVc2luZ0xpbmVQb3NpdGlvbih2
aXNpYmxlU3RhcnQpOwotICAgICAgICBhZmZpbml0eSA9IHZpc2libGVTdGFydC5hZmZpbml0eSgp
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8K
LSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uKHN0YXJ0LCBhZmZpbml0eSwgZW5kLCBraHRtbDo6U0VM
X0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBj
bG9zZVR5cGluZyk7CistICh2b2lkKXNldFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsIGNs
b3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCit7CisgICAgW3NlbCBfc2V0U2VsZWN0aW9uSW5Q
YXJ0Ol9wYXJ0IGNsb3NlVHlwaW5nOmNsb3NlVHlwaW5nXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilz
ZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpf
cGFydC0+c2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpXTsKKyAgICByZXR1cm4gW1tzZWxmIHNl
bGVjdGlvbl0gcmFuZ2VdOworfQorCistIChXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAg
ICBraHRtbDo6U2VsZWN0aW9uRGF0YSBzZCA9IF9wYXJ0LT5zZWxlY3Rpb25EYXRhKCk7CisgICAg
cmV0dXJuIFtXZWJTZWxlY3Rpb24gX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRhOiZzZF07CiB9
CiAKIC0gKE5TUmFuZ2UpY29udmVydFRvTlNSYW5nZTooRE9NOjpSYW5nZUltcGwgKilyYW5nZQpA
QCAtMTkzMyw5ICsxOTE1LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgIF9wYXJ0LT5zZXREcmFnQ2FyZXQoU2VsZWN0aW9uKCkpOwogfQogCi0tIChET01S
YW5nZSAqKWRyYWdDYXJldERPTVJhbmdlCistIChXZWJTZWxlY3Rpb24gKilkcmFnQ2FyZXRTZWxl
Y3Rpb24KIHsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOl9wYXJ0LT5kcmFn
Q2FyZXQoKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVybiBbV2ViU2VsZWN0aW9uIHNlbGVj
dGlvbldpdGhSYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6X3BhcnQtPmRyYWdDYXJldCgp
LnRvUmFuZ2UoKS5nZXQoKV0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1d
OwogfQogCiAtIChET01SYW5nZSAqKWVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDooTlNQb2ludClw
b2ludApJbmRleDogV2ViVmlldy5zdWJwcm9qL1dlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CmRpZmYgLU5wdSBXZWJWaWV3LnN1YnByb2ovV2ViRWRpdGluZ0RlbGVnYXRlUHJp
dmF0ZS5oCi0tLSBXZWJWaWV3LnN1YnByb2ovV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFdlYlZpZXcuc3VicHJvai9XZWJFZGl0aW5nRGVs
ZWdhdGVQcml2YXRlLmgJMjggQXVnIDIwMDUgMTU6MjU6NDUgLTAwMDAKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisKK0BjbGFzcyBXZWJWaWV3OworQGNsYXNzIFdlYlNlbGVjdGlvbjsK
KworQGludGVyZmFjZSBOU09iamVjdCAoV2ViRWRpdGluZ0RlbGVnYXRlUGVuZGluZ1B1YmxpYykK
Ky0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQmVnaW5FZGl0aW5nSW5T
ZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKEJPT0wpd2ViVmlldzooV2Vi
VmlldyAqKXdlYlZpZXcgc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24g
KilzZWxlY3Rpb247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZElu
c2VydE5vZGU6KERPTU5vZGUgKilub2RlIHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9u
ICopc2VsZWN0aW9uIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0g
KEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJp
bmcgKil0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uIGdp
dmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wpd2ViVmlldzoo
V2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkRGVsZXRlU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilz
ZWxlY3Rpb247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZENoYW5n
ZVNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopY3VycmVudCB0b1NlbGVjdGlvbjooV2ViU2VsZWN0
aW9uICopcHJvcG9zZWQgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wpd2ViVmll
dzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqKXN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0
aW9uOworQGVuZAorCkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJCcmlk
Z2UubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYkNvcmVTdXBwb3J0
LnN1YnByb2ovV2ViQnJpZGdlLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzY5CmRpZmYgLXAg
LXUgLXIxLjM2OSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJCcmlkZ2UubQotLS0g
V2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0JMjQgQXVnIDIwMDUgMDA6
MzQ6NTcgLTAwMDAJMS4zNjkKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkJy
aWRnZS5tCTI4IEF1ZyAyMDA1IDIzOjEzOjIzIC0wMDAwCkBAIC0xNDY0LDE5ICsxNDY0LDE5IEBA
IHN0YXRpYyBpZCA8V2ViRm9ybURlbGVnYXRlPiBmb3JtRGVsZWdhdGUKICAgICByZXR1cm4gW1tf
ZnJhbWUgd2ViVmlld10gaXNFZGl0YWJsZV07CiB9CiAKLS0gKEJPT0wpc2hvdWxkQ2hhbmdlU2Vs
ZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFu
Z2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlv
bkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWcKKy0gKEJPT0wpc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uVG86KFdlYlNlbGVjdGlvbiAqKXNlbCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFn
CiB7Ci0gICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOmN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6c2Vs
ZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6ZmxhZ107CisgICAgcmV0dXJuIFtbX2ZyYW1l
IHdlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpzZWwgc3RpbGxTZWxlY3Rpbmc6Zmxh
Z107CiB9CiAKLS0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0aW5nOihET01SYW5nZSAqKXJhbmdlCist
IChCT09MKXNob3VsZEJlZ2luRWRpdGluZzooV2ViU2VsZWN0aW9uICopc2VsCiB7Ci0gICAgcmV0
dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9zaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOnJhbmdl
XTsKKyAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZEJlZ2luRWRpdGluZ0luU2Vs
ZWN0aW9uOnNlbF07CiB9CiAKLS0gKEJPT0wpc2hvdWxkRW5kRWRpdGluZzooRE9NUmFuZ2UgKily
YW5nZQorLSAoQk9PTClzaG91bGRFbmRFZGl0aW5nOihXZWJTZWxlY3Rpb24gKilzZWwKIHsKLSAg
ICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOnJh
bmdlXTsKKyAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZEVuZEVkaXRpbmdJblNl
bGVjdGlvbjpzZWxdOwogfQogCiAtICh2b2lkKXdpbmRvd09iamVjdENsZWFyZWQKSW5kZXg6IFdl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBXZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkyNiBBdWcgMjAwNSAyMjowMjo1OCAtMDAwMAkxLjYKKysrIFdlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBBdWcgMjAwNSAyMzoxMzoyNSAtMDAwMApAQCAt
MjgzLDYgKzI4Myw3IEBACiAJCTkzOTgxMTJDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY3MzhDOUVBMDNGQUQzREYwMzIxRkJFMCAvKiBXZWJDb3JlLmZyYW1ld29yayAqLzsgfTsKIAkJ
OTM5ODExMkUwODI0QkYwMTAwOERGMDM4IC8qIGxpYmljdWNvcmUuZHlsaWIgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Q2MjNERDA1MUU3OTFGMDAy
RjQ3REQgLyogbGliaWN1Y29yZS5keWxpYiAqLzsgfTsKIAkJOTM5ODExMkYwODI0QkYwMTAwOERG
MDM4IC8qIFNlY3VyaXR5LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgzMEU4MUUwMDU4NTNBQzAwMEFEMDg5MSAvKiBTZWN1cml0eS5m
cmFtZXdvcmsgKi87IH07CisJCUFFMzM1NjFBMDhCQzQxRDEwMEE4QUM0OSAvKiBXZWJFZGl0aW5n
RGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRTMzNTYxOTA4QkM0MUQxMDBBOEFDNDkgLyogV2ViRWRpdGluZ0RlbGVnYXRlUHJp
dmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUVENkJFMkU3MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEVENkJFMkU1
MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCAqLzsgfTsK
IAkJRUQ2QkUyRTgwODhDMzJCNTAwNDRERURDIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJh
cy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRUQ2QkUy
RTYwODhDMzJCNTAwNDRERURDIC8qIFdlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5tICovOyB9
OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCkBAIC00OTgsNiArNDk5LDcgQEAKIAkJ
OUNFMUY4QTIwMkE1QzZGMzBFQ0EyQUNEIC8qIFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDRTFGOEEzMDJBNUM2RjMwRUNBMkFDRCAv
KiBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7
IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5Q0YwRTI0OTAyMTM2MUIwMEVDQTE2RUEgLyogV2ViRnJhbWVQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lUHJpdmF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBRTMzNTYxOTA4QkM0MUQxMDBBOEFDNDkgLyogV2ViRWRp
dGluZ0RlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCRTA3Q0VBNzA0NzUzOEYwMDBDQTI4OUMgLyogV2ViRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRhdGFiYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJFMDdDRUE4MDQ3NTM4RjAwMENBMjg5QyAvKiBXZWJEYXRhYmFzZS5tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViRGF0YWJhc2UubTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkUwN0NFQTkwNDc1MzhGMDAwQ0EyODlDIC8qIFdlYkZpbGVE
YXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRmlsZURhdGFi
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzEsNiArODczLDcgQEAKIAkJ
CQkzOTQ0NjA2QjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3Lmgg
Ki8sCiAJCQkJMzk0NDYwNkMwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxCYXJz
Vmlldy5tICovLAogCQkJCUJFNEZCRUNCMDY1M0RGNDcwMDVFREUxNSAvKiBXZWJFZGl0aW5nRGVs
ZWdhdGUuaCAqLywKKwkJCQlBRTMzNTYxOTA4QkM0MUQxMDBBOEFDNDkgLyogV2ViRWRpdGluZ0Rl
bGVnYXRlUHJpdmF0ZS5oICovLAogCQkJCTJEODFEQUIyMDNFQjBCMkQwMEE4MDE2NiAvKiBXZWJG
b3JtRGVsZWdhdGUuaCAqLywKIAkJCQkyRDgxREFCMzAzRUIwQjJEMDBBODAxNjYgLyogV2ViRm9y
bURlbGVnYXRlLm0gKi8sCiAJCQkJNTE1MkZBRTUwMzNGQzUyMjAwQ0EyQUNEIC8qIFdlYkZyYW1l
TG9hZERlbGVnYXRlLmggKi8sCkBAIC0xMjU3LDYgKzEyNjAsNyBAQAogCQkJCTdFNkZFRjAxMDg5
ODVBM0UwMEM0NEMzRiAvKiBXZWJEZWZhdWx0U2NyaXB0RGVidWdEZWxlZ2F0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0U2RkVGMDgwODk4NUE3MjAwQzQ0QzNGIC8qIFdlYlNjcmlwdERlYnVnRGVs
ZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRjBBMDg5ODVBNzIwMEM0NEMzRiAvKiBX
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUUzMzU2
MUEwOEJDNDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJEZWZhdWx0RWRpdGluZ0Rl
bGVnYXRlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1
YnByb2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjgKZGlmZiAtcCAtdSAtcjEuOCBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0
aW5nRGVsZWdhdGUubQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJEZWZhdWx0RWRpdGlu
Z0RlbGVnYXRlLm0JNSBKdW4gMjAwNSAxNzo1NDo0NiAtMDAwMAkxLjgKKysrIFdlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCTI4IEF1ZyAyMDA1IDIzOjEz
OjI2IC0wMDAwCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViRWRpdGluZ0Rl
bGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlldy5oPgogCisjaW1wb3J0ICJXZWJFZGl0
aW5nRGVsZWdhdGVQcml2YXRlLmgiCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJEZWZhdWx0RWRpdGlu
Z0RlbGVnYXRlCiAKIHN0YXRpYyBXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlICpzaGFyZWREZWxl
Z2F0ZSA9IG5pbDsKQEAgLTExNiw0ICsxMTgsNDAgQEAgc3RhdGljIFdlYkRlZmF1bHRFZGl0aW5n
RGVsZWdhdGUgKnNoYXJlZAogICAgIHJldHVybiBuaWw7CiB9CiAKKworLSAoQk9PTCl3ZWJWaWV3
OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRCZWdpbkVkaXRpbmdJblNlbGVjdGlvbjooV2ViU2Vs
ZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTCl3ZWJW
aWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rpb246KFdlYlNl
bGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpd2Vi
VmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTooRE9NTm9kZSAqKW5vZGUg
cmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24gZ2l2ZW5BY3Rpb246
KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAo
Qk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OihOU1N0cmlu
ZyAqKXRleHQgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24gZ2l2
ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGREZWxldGVTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBZRVM7Cit9CisK
Ky0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
OihXZWJTZWxlY3Rpb24gKiljdXJyZW50IHRvU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilwcm9w
b3NlZCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCit7CisgICAgcmV0dXJuIFlFUzsKK30KKwor
LSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRBcHBseVN0eWxlOihET01D
U1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOihXZWJTZWxl
Y3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gWUVTOworfQorCiBAZW5kCkluZGV4OiBX
ZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40NjYKZGlmZiAtcCAtdSAtcjEuNDY2IFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViSFRNTFZpZXcubQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5t
CTI3IEF1ZyAyMDA1IDAwOjAzOjQzIC0wMDAwCTEuNDY2CisrKyBXZWJLaXQvV2ViVmlldy5zdWJw
cm9qL1dlYkhUTUxWaWV3Lm0JMjggQXVnIDIwMDUgMjM6MTM6MzIgLTAwMDAKQEAgLTM2LDkgKzM2
LDExIEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViQ2xpcFZpZXcuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJEYXRhUHJvdG9jb2wuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJEYXRhU291cmNlUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViS2l0L1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJEb2N1bWVudEludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRE9NT3Bl
cmF0aW9uc1ByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJFZGl0aW5nRGVsZWdhdGUuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3SW50
ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmlld0ludGVybmFsLmg+CkBAIC02OSw2
ICs3MSw4IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdFN5c3RlbUludGVyZmFjZS5oPgogCisjaW1wb3J0IDxXZWJDb3JlL1dlYlNlbGVjdGlvbi5o
PgorCiAjaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CiAKIC8vIEluY2x1ZGVkIHNv
IHVzYWdlIG9mIF9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0ciB3aWxsIGNvbXBpbGUK
QEAgLTE3MiwxOCArMTc2LDIxIEBAIHZvaWQgKl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVu
Y1B0cigKIC0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzOwogLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRl
eHQgY2hvc2VQbGFpblRleHQ6KEJPT0wgKiljaG9zZVBsYWluVGV4dDsKIC0gKHZvaWQpX3Bhc3Rl
V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6
KEJPT0wpYWxsb3dQbGFpblRleHQ7Ci0tIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9N
RG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAq
KXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wp
X3Nob3VsZEFwcGx5U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB0b0VsZW1l
bnRzSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKEJPT0wpX3Nob3Vs
ZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdTZWxlY3Rpb246KFdlYlNlbGVj
dGlvbiAqKXNlbCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CistIChC
T09MKV9zaG91bGRJbnNlcnROb2RlOihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVw
bGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJ
bnNlcnRBY3Rpb24pYWN0aW9uOworLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURv
Y3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdTZWxlY3Rpb246KFdlYlNlbGVjdGlv
biAqKXNlbCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CiAtIChCT09M
KV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFj
dGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CiAtIChmbG9hdClfY2FsY3VsYXRlUHJp
bnRIZWlnaHQ7CiAtICh2b2lkKV91cGRhdGVUZXh0U2l6ZU11bHRpcGxpZXI7CiAtIChET01SYW5n
ZSAqKV9zZWxlY3RlZFJhbmdlOwotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2U7Ci0tICh2b2lkKV9kZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZSAKLSAgICAg
ICAgICAgIGtpbGxSaW5nOihCT09MKWtpbGxSaW5nIAotICAgICAgICAgICAgIHByZXBlbmQ6KEJP
T0wpcHJlcGVuZCAKLSAgICAgICBzbWFydERlbGV0ZU9LOihCT09MKXNtYXJ0RGVsZXRlT0sKLSAg
ICAgIGRlbGV0aW9uQWN0aW9uOihXZWJEZWxldGlvbkFjdGlvbilkZWxldGlvbkFjdGlvbjsKLS0g
KHZvaWQpX2RlbGV0ZVNlbGVjdGlvbjsKKy0gKFdlYlNlbGVjdGlvbiAqKV9zZWxlY3Rpb247Cist
ICh2b2lkKV9kZWxldGVTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCAKKyAgICAgICAgICAg
ICAgICBraWxsUmluZzooQk9PTClraWxsUmluZyAKKyAgICAgICAgICAgICAgICAgcHJlcGVuZDoo
Qk9PTClwcmVwZW5kIAorICAgICAgICAgICBzbWFydERlbGV0ZU9LOihCT09MKXNtYXJ0RGVsZXRl
T0sKKyAgICAgICAgICBkZWxldGlvbkFjdGlvbjooV2ViRGVsZXRpb25BY3Rpb24pZGVsZXRpb25B
Y3Rpb247CistICh2b2lkKV9kZWxldGVDdXJyZW50U2VsZWN0aW9uOwogLSAoQk9PTClfY2FuU21h
cnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CiAtIChO
U1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CiAtICh2b2lkKXVwZGF0
ZUZvY3VzU3RhdGU7CkBAIC00NDAsMjcgKzQ0Nyw2MyBAQCB2b2lkICpfTlNTb2Z0TGlua2luZ0dl
dEZyYW1ld29ya0Z1bmNQdHIoCiAgICAgQk9PTCBjaG9zZVBsYWluVGV4dDsKICAgICBET01Eb2N1
bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dCBjaG9zZVBsYWlu
VGV4dDomY2hvc2VQbGFpblRleHRdOwogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2Jy
aWRnZV07Ci0gICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpm
cmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gZ2l2ZW5BY3Rp
b246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pIHsKKyAgICBpZiAoZnJhZ21lbnQgJiYgW3Nl
bGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjpbc2Vs
ZiBfc2VsZWN0aW9uXSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgewog
ICAgICAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2Vs
ZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRo
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOmNob3NlUGxhaW5UZXh0XTsKICAgICB9
CiB9CiAKLS0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50
ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rp
b246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCistIChCT09MKV9zaG91bGRBcHBseVN0eWxl
OihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOihX
ZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYg
X3dlYlZpZXddOworICAgIGlkIGRlbGVnYXRlID0gW3dlYlZpZXcgZWRpdGluZ0RlbGVnYXRlXTsK
KyAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpz
aG91bGRBcHBseVN0eWxlOnRvRWxlbWVudHNJblNlbGVjdGlvbjopXSkgeworICAgICAgICByZXR1
cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxl
bWVudHNJblNlbGVjdGlvbjpzZWxlY3Rpb25dOworICAgIH0gZWxzZSBpZiAoW2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRBcHBseVN0eWxlOnRvRWxl
bWVudHNJbkRPTVJhbmdlOildKSB7CisgICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzp3
ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6W3NlbGVj
dGlvbiByYW5nZV1dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRF
ZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0RlbGVnYXRlXSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5TZWxlY3Rpb246c2VsZWN0aW9uXTsKKyAg
ICB9Cit9CisKKy0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBs
YWNpbmdTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBnaXZlbkFjdGlvbjooV2ViVmlld0lu
c2VydEFjdGlvbilhY3Rpb24KIHsKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZp
ZXddOworICAgIGlkIGRlbGVnYXRlID0gW3dlYlZpZXcgZWRpdGluZ0RlbGVnYXRlXTsKKyAgICBp
ZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRJ
bnNlcnRUZXh0OnJlcGxhY2luZ1NlbGVjdGlvbjpnaXZlbkFjdGlvbjopXSkgeworICAgICAgICBy
ZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVw
bGFjaW5nU2VsZWN0aW9uOnNlbCBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgIH0gZWxzZSBpZiAo
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRJbnNl
cnRUZXh0OnJlcGxhY2luZ0RPTVJhbmdlOmdpdmVuQWN0aW9uOildKSB7CisgICAgICAgIHJldHVy
biBbZGVsZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNp
bmdET01SYW5nZTpbc2VsIHJhbmdlXSBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGlu
Z0RlbGVnYXRlXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2lu
Z1NlbGVjdGlvbjpzZWwgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICB9Cit9CisKKy0gKEJPT0wp
X3Nob3VsZEluc2VydE5vZGU6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNp
bmdTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBnaXZlbkFjdGlvbjooV2ViVmlld0luc2Vy
dEFjdGlvbilhY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXdd
OworICAgIGlkIGRlbGVnYXRlID0gW3dlYlZpZXcgZWRpdGluZ0RlbGVnYXRlXTsKKyAgICBpZiAo
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRJbnNl
cnROb2RlOnJlcGxhY2luZ1NlbGVjdGlvbjpnaXZlbkFjdGlvbjopXSkgeworICAgICAgICByZXR1
cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJl
cGxhY2luZ1NlbGVjdGlvbjpzZWwgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICB9IGVsc2UgaWYg
KFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkSW5z
ZXJ0Tm9kZTpyZXBsYWNpbmdET01SYW5nZTpnaXZlbkFjdGlvbjopXSkgeworICAgICAgICByZXR1
cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJl
cGxhY2luZ0RPTVJhbmdlOltzZWwgcmFuZ2VdIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIFtbV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSBzaGFyZWRF
ZGl0aW5nRGVsZWdhdGVdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmZyYWdtZW50
IHJlcGxhY2luZ1NlbGVjdGlvbjpzZWwgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICB9Cit9CisK
Ky0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJh
Z21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgZ2l2ZW5BY3Rpb246
KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CiAgICAgRE9NTm9kZSAqY2hpbGQgPSBbZnJh
Z21lbnQgZmlyc3RDaGlsZF07CiAgICAgaWYgKFtmcmFnbWVudCBsYXN0Q2hpbGRdID09IGNoaWxk
ICYmIFtjaGlsZCBpc0tpbmRPZkNsYXNzOltET01DaGFyYWN0ZXJEYXRhIGNsYXNzXV0pIHsKLSAg
ICAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDpbKERPTUNoYXJhY3RlckRhdGEgKiljaGlsZCBkYXRh
XSByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgICAgICBy
ZXR1cm4gW3NlbGYgX3Nob3VsZEluc2VydFRleHQ6WyhET01DaGFyYWN0ZXJEYXRhICopY2hpbGQg
ZGF0YV0gcmVwbGFjaW5nU2VsZWN0aW9uOnNlbCBnaXZlbkFjdGlvbjphY3Rpb25dOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJhZ21lbnQgcmVwbGFjaW5nRE9N
UmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9z
aG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjpzZWwgZ2l2ZW5BY3Rp
b246YWN0aW9uXTsKICAgICB9CiB9CiAKIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbgogewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAg
RE9NUmFuZ2UgKnNlbGVjdGVkUmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07Ci0gICAgcmV0
dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
c2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOnNlbGVjdGVkUmFuZ2UgZ2l2
ZW5BY3Rpb246YWN0aW9uXTsKKyAgICByZXR1cm4gW3NlbGYgX3Nob3VsZEluc2VydFRleHQ6dGV4
dCByZXBsYWNpbmdTZWxlY3Rpb246W3NlbGYgX3NlbGVjdGlvbl0gZ2l2ZW5BY3Rpb246YWN0aW9u
XTsKIH0KIAogLy8gQ2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSB2aWV3IHRoYXQg
Zml0cyBvbiBhIHNpbmdsZSBwYWdlCkBAIC00ODQsMjUgKzUyNywzOCBAQCB2b2lkICpfTlNTb2Z0
TGlua2luZ0dldEZyYW1ld29ya0Z1bmNQdHIoCiAgICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlXSBz
ZWxlY3RlZERPTVJhbmdlXTsKIH0KIAotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJh
bmdlICopcmFuZ2UKKy0gKFdlYlNlbGVjdGlvbiAqKV9zZWxlY3Rpb24KIHsKLSAgICBpZiAocmFu
Z2UgPT0gbmlsIHx8IFtyYW5nZSBjb2xsYXBzZWRdKQorICAgIHJldHVybiBbW3NlbGYgX2JyaWRn
ZV0gc2VsZWN0aW9uXTsKK30KKworLSAoQk9PTClfc2hvdWxkRGVsZXRlU2VsZWN0aW9uOihXZWJT
ZWxlY3Rpb24gKilzZWwKK3sKKyAgICBpZiAoc2VsID09IG5pbCB8fCBbW3NlbCByYW5nZV0gY29s
bGFwc2VkXSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAotICAgIGlmICghW1tzZWxmIF9icmlk
Z2VdIGNhbkRlbGV0ZVJhbmdlOnJhbmdlXSkKKyAgICBpZiAoIVtbc2VsZiBfYnJpZGdlXSBjYW5E
ZWxldGVSYW5nZTpbc2VsIHJhbmdlXV0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAgICAgCiAg
ICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICByZXR1cm4gW1t3ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGREZWxl
dGVET01SYW5nZTpyYW5nZV07CisKKyAgICBpZCBkZWxlZ2F0ZSA9IFt3ZWJWaWV3IGVkaXRpbmdE
ZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHdlYlZpZXc6c2hvdWxkRGVsZXRlU2VsZWN0aW9uOildKSB7CisgICAgICAgIHJldHVybiBbZGVs
ZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZERlbGV0ZVNlbGVjdGlvbjpzZWxdOworICAgIH0g
ZWxzZSBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpz
aG91bGREZWxldGVET01SYW5nZTopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZp
ZXc6d2ViVmlldyBzaG91bGREZWxldGVET01SYW5nZTpbc2VsIHJhbmdlXV07CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIFtbV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSBzaGFyZWRFZGl0
aW5nRGVsZWdhdGVdIHdlYlZpZXc6d2ViVmlldyBzaG91bGREZWxldGVTZWxlY3Rpb246c2VsXTsK
KyAgICB9CiB9CiAKLS0gKHZvaWQpX2RlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlIAotICAg
ICAgICAgICAga2lsbFJpbmc6KEJPT0wpa2lsbFJpbmcgCi0gICAgICAgICAgICAgcHJlcGVuZDoo
Qk9PTClwcmVwZW5kIAotICAgICAgIHNtYXJ0RGVsZXRlT0s6KEJPT0wpc21hcnREZWxldGVPSyAK
LSAgICAgIGRlbGV0aW9uQWN0aW9uOihXZWJEZWxldGlvbkFjdGlvbilkZWxldGlvbkFjdGlvbgor
LSAodm9pZClfZGVsZXRlU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgCisgICAgICAgICAg
ICAgICAga2lsbFJpbmc6KEJPT0wpa2lsbFJpbmcgCisgICAgICAgICAgICAgICAgIHByZXBlbmQ6
KEJPT0wpcHJlcGVuZCAKKyAgICAgICAgICAgc21hcnREZWxldGVPSzooQk9PTClzbWFydERlbGV0
ZU9LIAorICAgICAgICAgIGRlbGV0aW9uQWN0aW9uOihXZWJEZWxldGlvbkFjdGlvbilkZWxldGlv
bkFjdGlvbgogewotICAgIGlmICghW3NlbGYgX3Nob3VsZERlbGV0ZVJhbmdlOnJhbmdlXSkgewor
ICAgIGlmICghW3NlbGYgX3Nob3VsZERlbGV0ZVNlbGVjdGlvbjpzZWxdKSB7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTUxNSw3ICs1NzEsNyBAQCB2b2lkICpfTlNTb2Z0TGlua2luZ0dl
dEZyYW1ld29ya0Z1bmNQdHIoCiAgICAgICAgIGlmIChzdGFydE5ld0tpbGxSaW5nU2VxdWVuY2Up
IHsKICAgICAgICAgICAgIF9OU05ld0tpbGxSaW5nU2VxdWVuY2UoKTsKICAgICAgICAgfQotICAg
ICAgICBOU1N0cmluZyAqc3RyaW5nID0gW2JyaWRnZSBzdHJpbmdGb3JSYW5nZTpyYW5nZV07Cisg
ICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbYnJpZGdlIHN0cmluZ0ZvclJhbmdlOltzZWwgcmFu
Z2VdXTsKICAgICAgICAgaWYgKHByZXBlbmQpIHsKICAgICAgICAgICAgIF9OU1ByZXBlbmRUb0tp
bGxSaW5nKHN0cmluZyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC01MjYsMTUgKzU4MiwxNSBAQCB2
b2lkICpfTlNTb2Z0TGlua2luZ0dldEZyYW1ld29ya0Z1bmNQdHIoCiAKICAgICBzd2l0Y2ggKGRl
bGV0aW9uQWN0aW9uKSB7CiAgICAgICAgIGNhc2UgZGVsZXRlU2VsZWN0aW9uQWN0aW9uOgotICAg
ICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOllFU107CisgICAgICAgICAgICBb
YnJpZGdlIHNldFNlbGVjdGlvbjpzZWwgY2xvc2VUeXBpbmc6WUVTXTsKICAgICAgICAgICAgIFti
cmlkZ2UgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlOnNtYXJ0RGVsZXRlXTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGRlbGV0ZUtleUFjdGlvbjoKLSAgICAgICAgICAg
IFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFm
ZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgICAgICAgICBbYnJpZGdlIHNl
dFNlbGVjdGlvbjpzZWwgY2xvc2VUeXBpbmc6Tk9dOwogICAgICAgICAgICAgW2JyaWRnZSBkZWxl
dGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOnNtYXJ0RGVsZXRlXTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIGZvcndhcmREZWxldGVLZXlBY3Rpb246Ci0gICAgICAgICAgICBb
YnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6Tk9dOworICAgICAgICAgICAgW2JyaWRnZSBzZXRT
ZWxlY3Rpb246c2VsIGNsb3NlVHlwaW5nOk5PXTsKICAgICAgICAgICAgIFticmlkZ2UgZm9yd2Fy
ZERlbGV0ZUtleVByZXNzZWRXaXRoU21hcnREZWxldGU6c21hcnREZWxldGVdOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNTQyLDEzICs1OTgsMTMgQEAgdm9pZCAqX05TU29mdExpbmtp
bmdHZXRGcmFtZXdvcmtGdW5jUHRyKAogICAgIF9wcml2YXRlLT5zdGFydE5ld0tpbGxSaW5nU2Vx
dWVuY2UgPSBzdGFydE5ld0tpbGxSaW5nU2VxdWVuY2U7CiB9CiAKLS0gKHZvaWQpX2RlbGV0ZVNl
bGVjdGlvbgorLSAodm9pZClfZGVsZXRlQ3VycmVudFNlbGVjdGlvbgogewotICAgIFtzZWxmIF9k
ZWxldGVSYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0KLSAgICAgICAgICAgICAga2lsbFJpbmc6
WUVTIAotICAgICAgICAgICAgICAgcHJlcGVuZDpOTwotICAgICAgICAgc21hcnREZWxldGVPSzpZ
RVMKLSAgICAgICAgZGVsZXRpb25BY3Rpb246ZGVsZXRlU2VsZWN0aW9uQWN0aW9uXTsKKyAgICBb
c2VsZiBfZGVsZXRlU2VsZWN0aW9uOltzZWxmIF9zZWxlY3Rpb25dCisgICAgICAgICAgICAgICAg
ICBraWxsUmluZzpZRVMgCisgICAgICAgICAgICAgICAgICAgcHJlcGVuZDpOTworICAgICAgICAg
ICAgIHNtYXJ0RGVsZXRlT0s6WUVTCisgICAgICAgICAgICBkZWxldGlvbkFjdGlvbjpkZWxldGVT
ZWxlY3Rpb25BY3Rpb25dOwogfQogCiAtIChCT09MKV9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZApAQCAtMjc4NSw3ICsyODQxLDcgQEAgc3Rh
dGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKICAgICAgICAgICAgICAgICByZXR1
cm4gTk87CiAgICAgICAgICAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxm
IF9lbXB0eVN0eWxlXTsKICAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAImNvbG9yIiA6
W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdIDpAIiJdOwotICAgICAgICAgICAgaWYgKFtbd2Vi
VmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBw
bHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5ET01SYW5nZTpbYnJpZGdlIHNlbGVjdGVkRE9NUmFu
Z2VdXSkgeworICAgICAgICAgICAgaWYgKFtzZWxmIF9zaG91bGRBcHBseVN0eWxlOnN0eWxlIHRv
RWxlbWVudHNJblNlbGVjdGlvbjpbYnJpZGdlIHNlbGVjdGlvbl1dKSB7CiAgICAgICAgICAgICAg
ICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgd2lsbFBl
cmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246V2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCBm
b3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKICAgICAgICAgICAgICAgICBbYnJpZGdlIGFw
cGx5U3R5bGU6c3R5bGUgd2l0aFVuZG9BY3Rpb246V2ViVW5kb0FjdGlvblNldENvbG9yXTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gWUVTOwpAQCAtMjc5OCw3ICsyODU0LDcgQEAgc3RhdGljIFdl
YkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKICAgICAgICAgICAgICAgICBOU1Bhc3RlYm9h
cmQgKnBhc3RlYm9hcmQgPSBbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF07CiAgICAg
ICAgICAgICAgICAgQk9PTCBjaG9zZVBsYWluVGV4dDsKICAgICAgICAgICAgICAgICBET01Eb2N1
bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDpZRVMgY2hvc2VQbGFpblRleHQ6JmNob3Nl
UGxhaW5UZXh0XTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3Vs
ZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOlticmlkZ2UgZHJhZ0Nh
cmV0RE9NUmFuZ2VdIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkXSkgewor
ICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBfc2hvdWxkSW5zZXJ0RnJhZ21l
bnQ6ZnJhZ21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOlticmlkZ2UgZHJhZ0NhcmV0U2VsZWN0aW9u
XSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uRHJvcHBlZF0pIHsKICAgICAgICAgICAg
ICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcg
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246V2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
RWRpdCBmb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKFtzZWxmIF9pc01vdmVEcmFnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBz
bWFydE1vdmUgPSBbW3NlbGYgX2JyaWRnZV0gc2VsZWN0aW9uR3JhbnVsYXJpdHldID09IFdlYlNl
bGVjdEJ5V29yZCAmJiBbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVi
b2FyZF07CkBAIC0zMzA1LDggKzMzNjEsNyBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRW
aWV3ID0gbmlsOwogewogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CiAg
ICAgRE9NUmFuZ2UgKnByb3Bvc2VkUmFuZ2UgPSBbYnJpZGdlIHJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb246YWx0ZXJhdGlvbiBkaXJlY3Rpb246ZGlyZWN0aW9uIGdyYW51bGFyaXR5Omdy
YW51bGFyaXR5XTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAg
IGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3
IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIHRvRE9N
UmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBz
dGlsbFNlbGVjdGluZzpOT10pIHsKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uVG86W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6cHJvcG9zZWRS
YW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XV0gc3RpbGxTZWxlY3Rpbmc6
Tk9dKSB7CiAgICAgICAgIFticmlkZ2UgYWx0ZXJDdXJyZW50U2VsZWN0aW9uOmFsdGVyYXRpb24g
ZGlyZWN0aW9uOmRpcmVjdGlvbiBncmFudWxhcml0eTpncmFudWxhcml0eV07CiAgICAgfQogfQpA
QCAtMzMxNSw4ICszMzcwLDcgQEAgc3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5p
bDsKIHsKICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwogICAgIERPTVJh
bmdlICpwcm9wb3NlZFJhbmdlID0gW2JyaWRnZSByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0
aW9uOmFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5jZTp2ZXJ0aWNhbERpc3RhbmNlXTsKLSAgICBX
ZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlmIChbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIHRvRE9NUmFuZ2U6cHJvcG9zZWRSYW5n
ZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpOT10p
IHsKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dl
YlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpbYnJp
ZGdlIHNlbGVjdGlvbkFmZmluaXR5XV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CiAgICAgICAgIFti
cmlkZ2UgYWx0ZXJDdXJyZW50U2VsZWN0aW9uOmFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5jZTp2
ZXJ0aWNhbERpc3RhbmNlXTsKICAgICB9CiB9CkBAIC0zNTI4LDkgKzM1ODIsOCBAQCBzdGF0aWMg
V2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0g
W3NlbGYgX2JyaWRnZV07CiAgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2JyaWRnZSByYW5nZUJ5RXhw
YW5kaW5nU2VsZWN0aW9uV2l0aEdyYW51bGFyaXR5OmdyYW51bGFyaXR5XTsKICAgICBpZiAocmFu
Z2UgJiYgIVtyYW5nZSBjb2xsYXBzZWRdKSB7Ci0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBb
c2VsZiBfd2ViVmlld107Ci0gICAgICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3Nl
bGYgX3NlbGVjdGVkUmFuZ2VdIHRvRE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxl
Y3Rpb25BZmZpbml0eV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7Ci0gICAgICAgICAgICBbYnJpZGdl
IHNldFNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZp
bml0eV0gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICAgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX3No
b3VsZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aFJhbmdlOnJh
bmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldXSBzdGlsbFNlbGVjdGluZzpO
T10pIHsKKyAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2Vs
ZWN0aW9uV2l0aEJhc2VSYW5nZTpyYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmlu
aXR5XSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBz
ZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0zNTY4LDcgKzM2MjEsNyBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3
ID0gbmlsOwogICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBb
c2VsZiBfZGVsZXRlU2VsZWN0aW9uXTsKKyAgICBbc2VsZiBfZGVsZXRlQ3VycmVudFNlbGVjdGlv
bl07CiB9CiAKIC0gKHZvaWQpY3V0OihpZClzZW5kZXIKQEAgLTM1ODEsOCArMzYzNCw4IEBAIHN0
YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiAgICAgICAgIE5TQmVlcCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxl
Y3RlZFJhbmdlXTsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZERlbGV0ZVJhbmdlOnJhbmdlXSkgewor
ICAgIFdlYlNlbGVjdGlvbiAqc2VsID0gW3NlbGYgX3NlbGVjdGlvbl07CisgICAgaWYgKFtzZWxm
IF9zaG91bGREZWxldGVTZWxlY3Rpb246c2VsXSkgewogICAgICAgICBbc2VsZiBfd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOwogICAg
ICAgICBbYnJpZGdlIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZTpbc2VsZiBfY2FuU21h
cnRDb3B5T3JEZWxldGVdXTsKICAgIH0KQEAgLTM3MzEsOSArMzc4NCw4IEBAIHN0YXRpYyBXZWJI
VE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiB7CiAgICAgaWYgKHN0eWxlID09IG5pbCB8fCBb
c3R5bGUgbGVuZ3RoXSA9PSAwIHx8ICFbc2VsZiBfY2FuRWRpdF0pCiAgICAgICAgIHJldHVybjsK
LSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwogICAgIFdlYkJyaWRnZSAq
YnJpZGdlID0gW3NlbGYgX2JyaWRnZV07Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0Vs
ZW1lbnRzSW5ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dKSB7CisgICAgaWYgKFtzZWxm
IF9zaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjpbc2VsZiBfc2Vs
ZWN0aW9uXV0pIHsKICAgICAgICAgW2JyaWRnZSBhcHBseVN0eWxlOnN0eWxlIHdpdGhVbmRvQWN0
aW9uOnVuZG9BY3Rpb25dOwogICAgIH0KIH0KQEAgLTM3NDIsOSArMzc5NCw4IEBAIHN0YXRpYyBX
ZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiB7CiAgICAgaWYgKHN0eWxlID09IG5pbCB8
fCBbc3R5bGUgbGVuZ3RoXSA9PSAwIHx8ICFbc2VsZiBfY2FuRWRpdF0pCiAgICAgICAgIHJldHVy
bjsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwogICAgIFdlYkJyaWRn
ZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0
b0VsZW1lbnRzSW5ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dKSB7CisgICAgaWYgKFtz
ZWxmIF9zaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjpbc2VsZiBf
c2VsZWN0aW9uXV0pIHsKICAgICAgICAgW2JyaWRnZSBhcHBseVBhcmFncmFwaFN0eWxlOnN0eWxl
IHdpdGhVbmRvQWN0aW9uOnVuZG9BY3Rpb25dOwogICAgIH0KIH0KQEAgLTQwOTQsOCArNDE0NSw3
IEBAIE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKIC0gKHZvaWQpX2No
YW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjooU0VMKXNlbGVjdG9yIGluUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UKIHsKICAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9z
dHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9F
bGVtZW50c0luRE9NUmFuZ2U6cmFuZ2VdKSB7CisgICAgaWYgKFtzZWxmIF9zaG91bGRBcHBseVN0
eWxlOnN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldp
dGhSYW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV1dKSB7
CiAgICAgICAgIFtbc2VsZiBfYnJpZGdlXSBhcHBseVN0eWxlOnN0eWxlIHdpdGhVbmRvQWN0aW9u
OltzZWxmIF91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdXTsK
ICAgICB9CiB9CkBAIC00MjYzLDkgKzQzMTMsMTIgQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5h
bWUgICAgICAgIC8qIE5TQwogICAgICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChyYW5nZSA9
PSBuaWwgfHwgW3JhbmdlIGNvbGxhcHNlZF0gfHwgIVtzZWxmIF9zaG91bGREZWxldGVSYW5nZTpy
YW5nZV0pCisgICAgaWYgKHJhbmdlID09IG5pbCB8fCBbcmFuZ2UgY29sbGFwc2VkXSkKICAgICAg
ICAgcmV0dXJuIE5POwotICAgIFtzZWxmIF9kZWxldGVSYW5nZTpyYW5nZSBraWxsUmluZzpraWxs
UmluZyBwcmVwZW5kOk5PIHNtYXJ0RGVsZXRlT0s6WUVTIGRlbGV0aW9uQWN0aW9uOmRlbGV0aW9u
QWN0aW9uXTsKKyAgICBXZWJTZWxlY3Rpb24gKnNlbCA9IFtXZWJTZWxlY3Rpb24gc2VsZWN0aW9u
V2l0aFJhbmdlOnJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsK
KyAgICBpZiAoIVtzZWxmIF9zaG91bGREZWxldGVTZWxlY3Rpb246c2VsXSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIFtzZWxmIF9kZWxldGVTZWxlY3Rpb246c2VsIGtpbGxSaW5nOmtpbGxSaW5n
IHByZXBlbmQ6Tk8gc21hcnREZWxldGVPSzpZRVMgZGVsZXRpb25BY3Rpb246ZGVsZXRpb25BY3Rp
b25dOwogICAgIHJldHVybiBZRVM7CiB9CiAKQEAgLTQ1MjEsNyArNDU3NCw3IEBAIHN0YXRpYyBE
T01SYW5nZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UKICAgICAgICAgTlNfSEFORExFUgogICAg
ICAgICAgICAgciA9IHNlbGVjdGlvbjsKICAgICAgICAgTlNfRU5ESEFORExFUgotICAgICAgICBb
c2VsZiBfZGVsZXRlUmFuZ2U6ciBraWxsUmluZzpZRVMgcHJlcGVuZDpZRVMgc21hcnREZWxldGVP
SzpOTyBkZWxldGlvbkFjdGlvbjpkZWxldGVTZWxlY3Rpb25BY3Rpb25dOworICAgICAgICBbc2Vs
ZiBfZGVsZXRlU2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aFJhbmdlOnIgYWZm
aW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dIGtpbGxSaW5nOllFUyBwcmVwZW5k
OllFUyBzbWFydERlbGV0ZU9LOk5PIGRlbGV0aW9uQWN0aW9uOmRlbGV0ZVNlbGVjdGlvbkFjdGlv
bl07CiAgICAgfQogICAgIFtzZWxmIHNldE1hcms6c2VuZGVyXTsKIH0KQEAgLTQ1MzYsNyArNDU4
OSw4IEBAIHN0YXRpYyBET01SYW5nZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UKICAgICB9CiAg
ICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsKICAgICBOU19E
VVJJTkcKLSAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnVuaW9uRE9NUmFuZ2Vz
KG1hcmssIHNlbGVjdGlvbikgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0g
Y2xvc2VUeXBpbmc6WUVTXTsKKyAgICAgICAgRE9NUmFuZ2UgKnIgPSB1bmlvbkRPTVJhbmdlcyht
YXJrLCBzZWxlY3Rpb24pOworICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0
aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2Jy
aWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAgTlNfSEFO
RExFUgogICAgICAgICBOU0JlZXAoKTsKICAgICBOU19FTkRIQU5ETEVSCkBAIC00NTUyLDcgKzQ2
MDYsNyBAQCBzdGF0aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2VzKERPTVJhbmdlCiAgICAgfQog
ICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CiAgICAgTlNf
RFVSSU5HCi0gICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTptYXJrIGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOllFU107CisgICAgICAg
IFticmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5n
ZTptYXJrIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpX
ZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFy
aXR5XV0gY2xvc2VUeXBpbmc6WUVTXTsKICAgICBOU19IQU5ETEVSCiAgICAgICAgIE5TQmVlcCgp
OwogICAgICAgICByZXR1cm47CkBAIC00NTc1LDExICs0NjI5LDEwIEBAIHN0YXRpYyBET01SYW5n
ZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBO
U1N0cmluZyAqdHJhbnNwb3NlZCA9IFtbY2hhcmFjdGVycyBzdWJzdHJpbmdGcm9tSW5kZXg6MV0g
c3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6W2NoYXJhY3RlcnMgc3Vic3RyaW5nVG9JbmRleDoxXV07
Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICBpZiAoIVtbd2Vi
VmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpyIGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIHN0aWxsU2VsZWN0aW5nOk5PXSkg
eworICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dl
YlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnIgYWZmaW5pdHk6TlNTZWxlY3Rp
b25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICBbYnJpZGdlIHNldFNl
bGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6ciBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndh
cmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5n
OllFU107CiAgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dHJh
bnNwb3NlZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWRdKSB7CiAgICAgICAg
IFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRyYW5zcG9zZWQgc2VsZWN0UmVwbGFj
ZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOk5PXTsKICAgICB9CkBAIC00OTY3LDcgKzUwMjAsNyBAQCBz
dGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAgIGlmIChbc2VsZiBoYXNN
YXJrZWRUZXh0XSkgewogICAgICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2Vd
OwogICAgICAgICBET01SYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2JyaWRnZSBtYXJrZWRUZXh0
RE9NUmFuZ2VdOwotICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6bWFya2VkVGV4
dFJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5n
Ok5PXTsKKyAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rp
b25XaXRoQmFzZVJhbmdlOm1hcmtlZFRleHRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmlu
aXR5RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6
W2JyaWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOk5PXTsKICAgICB9CiB9
CiAKQEAgLTQ5ODcsNyArNTA0MCw3IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMg
PSBuaWw7CiAgICAgW3NlbGVjdGVkUmFuZ2Ugc2V0U3RhcnQ6W21hcmtlZFRleHRSYW5nZSBzdGFy
dENvbnRhaW5lcl0gOnNlbGVjdGlvblN0YXJ0XTsKICAgICBbc2VsZWN0ZWRSYW5nZSBzZXRFbmQ6
W21hcmtlZFRleHRSYW5nZSBzdGFydENvbnRhaW5lcl0gOnNlbGVjdGlvbkVuZF07CiAKLSAgICBb
YnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6c2VsZWN0ZWRSYW5nZSBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgW2JyaWRnZSBzZXRT
ZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnNlbGVjdGVkUmFu
Z2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRl
eHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHld
XSBjbG9zZVR5cGluZzpOT107CiB9CiAKIC0gKHZvaWQpX2V4dHJhY3RBdHRyaWJ1dGVzOihOU0Fy
cmF5ICoqKWEgcmFuZ2VzOihOU0FycmF5ICoqKXIgZnJvbUF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKXN0cmluZwpAQCAtNTE5Miw3ICs1MjQ1LDkgQEAgc3RhdGljIE5TQXJy
YXkgKnZhbGlkQXR0cmlidXRlcyA9IG5pbDsKICAgICAvLyBhYmxlIHRvIHJldmVydCB0aGF0KS4g
IE1pbWljIE5TVGV4dC4KICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtfdmlldyBfYnJpZGdlXTsK
ICAgICBOU1N0cmluZyAqbmV3VGV4dCA9IFttYXRjaCBzdWJzdHJpbmdGcm9tSW5kZXg6cHJlZml4
TGVuZ3RoXTsKLSAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNl
bGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAgIGlmIChbX3ZpZXcgX3No
b3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IGdpdmVuQWN0aW9uOldlYlZpZXdJ
bnNlcnRBY3Rpb25QYXN0ZWRdKSB7CisgICAgICAgIFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0Om5ld1RleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cisg
ICAgfQogfQogCiAvLyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0K
QEAgLTUzNDUsNyArNTQwMCw5IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBu
aWw7CiAKICAgICAgICAgaWYgKHJldmVydENoYW5nZSkgewogICAgICAgICAgICAgV2ViQnJpZGdl
ICpicmlkZ2UgPSBbX3ZpZXcgX2JyaWRnZV07Ci0gICAgICAgICAgICBbYnJpZGdlIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNt
YXJ0UmVwbGFjZTpOT107CisgICAgICAgICAgICBpZiAoW192aWV3IF9zaG91bGRSZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRB
Y3Rpb25QYXN0ZWRdKSB7CisgICAgICAgICAgICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxh
Y2U6Tk9dOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGdvTGVmdCkgewogICAg
ICAgICAgICAgW192aWV3IG1vdmVCYWNrd2FyZDpuaWxdOwogICAgICAgICB9IGVsc2UgewpJbmRl
eDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjMwNApkaWZmIC1wIC11IC1yMS4zMDQgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9X
ZWJWaWV3Lm0KLS0tIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCTIzIEF1ZyAyMDA1
IDAxOjIyOjE2IC0wMDAwCTEuMzA0CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcu
bQkyOCBBdWcgMjAwNSAyMzoxMzozNCAtMDAwMApAQCAtNTAsNiArNTAsNyBAQAogI2ltcG9ydCA8
V2ViS2l0L1dlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRv
d25sb2FkLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRWRpdGluZ0RlbGVnYXRlLmg+CisjaW1wb3J0
IDxXZWJLaXQvV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dl
YkZvcm1EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZUludGVybmFs
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3SW50ZXJuYWwuaD4KQEAgLTg2LDYgKzg3
LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUVuY29kaW5ncy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlU2V0dGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVZpZXcuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViU2VsZWN0aW9uLmg+CiAKICNpbXBvcnQgPEZvdW5kYXRpb24v
TlNVUkxDb25uZWN0aW9uLmg+CiAjaW1wb3J0IDxvYmpjL29iamMtcnVudGltZS5oPgpAQCAtMjU3
Myw2ICsyNTc1LDIzIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUK
ICAgICByZXR1cm4gX3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGU7CiB9CiAKKy0gKHZvaWQp
c2V0U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICBpZiAoW3NlbGVj
dGlvbiBiYXNlUmFuZ2VdID09IG5pbCkgeworICAgICAgICBbW3NlbGYgX2JyaWRnZUZvclNlbGVj
dGVkT3JNYWluRnJhbWVdIGRlc2VsZWN0VGV4dF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
RGVyaXZlIHRoZSBicmlkZ2UgdG8gdXNlIGZyb20gdGhlIHJhbmdlIHBhc3NlZCBpbi4KKyAgICAg
ICAgLy8gVXNpbmcgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWUgY291bGQgZ2l2ZSB1cyBh
IGRpZmZlcmVudCBkb2N1bWVudCB0aGFuCisgICAgICAgIC8vIHRoZSBvbmUgdGhlIHJhbmdlIHVz
ZXMuCisgICAgICAgIFtbW1tzZWxlY3Rpb24gYmFzZVJhbmdlXSBzdGFydENvbnRhaW5lcl0gX2Jy
aWRnZV0gc2V0U2VsZWN0aW9uOnNlbGVjdGlvbiBjbG9zZVR5cGluZzpZRVNdOworICAgIH0KK30K
KworLSAoV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFtbc2VsZiBfYnJp
ZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uXTsKK30KKwogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlldyAoV2ViVmlld1ByaW50aW5nUHJpdmF0ZSkKQEAgLTI3MTAsMTkg
KzI3MjksNDAgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAg
IHJldHVybiBbYnJpZGdlIGVkaXRhYmxlRE9NUmFuZ2VGb3JQb2ludDpbc2VsZiBjb252ZXJ0UG9p
bnQ6cG9pbnQgdG9WaWV3OltbW2JyaWRnZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZp
ZXddXV07CiB9CiAKLS0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJh
bmdlICopY3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBh
ZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVj
dGluZzooQk9PTClmbGFnOworLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86KFdlYlNl
bGVjdGlvbiAqKXNlbCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCiB7Ci0gICAgcmV0dXJuIFtb
c2VsZiBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTpjdXJyZW50UmFuZ2UgdG9ET01SYW5nZTpwcm9wb3NlZFJhbmdlIGFm
ZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAgIGlkIGRl
bGVnYXRlID0gW3NlbGYgZWRpdGluZ0RlbGVnYXRlXTsKKyAgICBpZiAoW2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRDaGFuZ2VTZWxlY3Rpb246dG9T
ZWxlY3Rpb246c3RpbGxTZWxlY3Rpbmc6KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3
ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uOltzZWxmIHNlbGVjdGlvbl0gdG9TZWxl
Y3Rpb246c2VsIHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAgIH0gZWxzZSBpZiAoW2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOnRvRE9NUmFuZ2U6YWZmaW5pdHk6c3RpbGxTZWxlY3Rpbmc6KV0pIHsKKyAgICAg
ICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpbc2VsZiBzZWxlY3RlZERPTVJhbmdlXSB0b0RPTVJhbmdlOltzZWwgcmFuZ2VdIGFmZmlu
aXR5OltzZWwgYWZmaW5pdHldIHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0Rl
bGVnYXRlXSB3ZWJWaWV3OnNlbGYgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uOltzZWxmIHNlbGVjdGlv
bl0gdG9TZWxlY3Rpb246c2VsIHN0aWxsU2VsZWN0aW5nOmZsYWddOworICAgIH0KIH0KIAotLSAo
Qk9PTClfc2hvdWxkQmVnaW5FZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQorLSAo
Qk9PTClfc2hvdWxkQmVnaW5FZGl0aW5nSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbAog
ewotICAgIHJldHVybiBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpz
ZWxmIHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2VdOworICAgIGlkIGRlbGVnYXRl
ID0gW3NlbGYgZWRpdGluZ0RlbGVnYXRlXTsKKyAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRCZWdpbkVkaXRpbmdJblNlbGVjdGlvbjop
XSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6c2VsZiBzaG91bGRCZWdpbkVk
aXRpbmdJblNlbGVjdGlvbjpzZWxdOworICAgIH0gZWxzZSBpZiAoW2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdl
OildKSB7CisgICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzpzZWxmIHNob3VsZEJlZ2lu
RWRpdGluZ0luRE9NUmFuZ2U6W3NlbCByYW5nZV1dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBbW1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0RlbGVnYXRlXSB3
ZWJWaWV3OnNlbGYgc2hvdWxkQmVnaW5FZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9CiB9
CiAKLS0gKEJPT0wpX3Nob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOihET01SYW5nZSAqKXJhbmdl
CistIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNl
bAogewotICAgIHJldHVybiBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzpzZWxmIHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOnJhbmdlXTsKKyAgICBpZCBkZWxlZ2F0
ZSA9IFtzZWxmIGVkaXRpbmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOild
KSB7CisgICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzpzZWxmIHNob3VsZEVuZEVkaXRp
bmdJblNlbGVjdGlvbjpzZWxdOworICAgIH0gZWxzZSBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTopXSkg
eworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6c2VsZiBzaG91bGRFbmRFZGl0aW5n
SW5ET01SYW5nZTpbc2VsIHJhbmdlXV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtb
V2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSBzaGFyZWRFZGl0aW5nRGVsZWdhdGVdIHdlYlZpZXc6
c2VsZiBzaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9CiB9CiAKIC0gKEJP
T0wpX2NhblBhc3RlCkBAIC0yNzMzLDE5ICsyNzczLDEyIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5j
cmVtZW50RnJhbWUoV2ViRnJhbWUKIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01S
YW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmlu
aXR5CiB7Ci0gICAgaWYgKHJhbmdlID09IG5pbCkgewotICAgICAgICBbW3NlbGYgX2JyaWRnZUZv
clNlbGVjdGVkT3JNYWluRnJhbWVdIGRlc2VsZWN0VGV4dF07Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gRGVyaXZlIHRoZSBicmlkZ2UgdG8gdXNlIGZyb20gdGhlIHJhbmdlIHBhc3NlZCBpbi4K
LSAgICAgICAgLy8gVXNpbmcgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWUgY291bGQgZ2l2
ZSB1cyBhIGRpZmZlcmVudCBkb2N1bWVudCB0aGFuCi0gICAgICAgIC8vIHRoZSBvbmUgdGhlIHJh
bmdlIHVzZXMuCi0gICAgICAgIFtbW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSBfYnJpZGdlXSBzZXRT
ZWxlY3RlZERPTVJhbmdlOnJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5IGNsb3NlVHlw
aW5nOllFU107Ci0gICAgfQorICAgIFtzZWxmIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNl
bGVjdGlvbldpdGhCYXNlUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHkgZGly
ZWN0aW9uOltbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uRGly
ZWN0aW9uXSBncmFudWxhcml0eTpbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVd
IHNlbGVjdGlvbkdyYW51bGFyaXR5XV1dOwogfQogCiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9N
UmFuZ2UKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1l
XSBzZWxlY3RlZERPTVJhbmdlXTsKKyAgICByZXR1cm4gW1tzZWxmIHNlbGVjdGlvbl0gcmFuZ2Vd
OwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5CkBAIC0yNzUz
LDYgKzI3ODYsMTYgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQog
ICAgIHJldHVybiBbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVjdGlv
bkFmZmluaXR5XTsKIH0KIAorLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25E
aXJlY3Rpb24KK3sKKyAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZy
YW1lXSBzZWxlY3Rpb25EaXJlY3Rpb25dOworfQorCistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVs
YXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHkKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VG
b3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBzZWxlY3Rpb25HcmFudWxhcml0eV07Cit9CisKIC0gKHZv
aWQpc2V0RWRpdGFibGU6KEJPT0wpZmxhZwogewogICAgIGlmIChfcHJpdmF0ZS0+ZWRpdGFibGUg
IT0gZmxhZykgewpJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9X
ZWJWaWV3SW50ZXJuYWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC1wIC11IC1y
MS4yMSBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdJbnRlcm5hbC5oCi0tLSBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlZpZXdJbnRlcm5hbC5oCTE0IEF1ZyAyMDA1IDA5OjEyOjQ4IC0w
MDAwCTEuMjEKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld0ludGVybmFsLmgJMjgg
QXVnIDIwMDUgMjM6MTM6MzQgLTAwMDAKQEAgLTMyLDYgKzMyLDcgQEAKIAogQGNsYXNzIERPTUNT
U1N0eWxlRGVjbGFyYXRpb247CiBAY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OworQGNsYXNzIFdl
YlNlbGVjdGlvbjsKIAogQHByb3RvY29sIFdlYkRvY3VtZW50RHJhZ2dpbmc7CiAKQEAgLTEyMiw4
ICsxMjMsOCBAQAogCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdFZGl0aW5nRXh0cmFzKQog
LSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci0tIChC
T09MKV9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5n
ZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsK
LS0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7
Ci0tIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsK
Ky0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKilzZWwgc3Rp
bGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luU2Vs
ZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWw7CistIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5T
ZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbDsKIC0gKEJPT0wpX2NhblBhc3RlOwogQGVuZApJ
bmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ4CmRpZmYgLXAgLXUgLXIxLjE0OCBXZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgKLS0tIFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViVmlld1ByaXZhdGUuaAkyMyBBdWcgMjAwNSAwMToyMjoxNiAtMDAwMAkxLjE0OAorKysg
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCTI4IEF1ZyAyMDA1IDIzOjEz
OjM0IC0wMDAwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dl
YlNlbGVjdGlvbi5oPgogCiBAY2xhc3MgTlNFcnJvcjsKIEBjbGFzcyBXZWJGcmFtZTsKQEAgLTEw
Niw2ICsxMDcsMTYgQEAgdHlwZWRlZiBlbnVtIHsKIAogQGVuZAogCitAaW50ZXJmYWNlIFdlYlZp
ZXcgKFdlYlZpZXdFZGl0aW5nUGVuZGluZ1B1YmxpYykKKworLy8gQWRkIHN1cHBvcnQgZm9yIFdl
YlNlbGVjdGlvbgorLSAodm9pZClzZXRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlv
bjsKKy0gKFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJl
Y3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uOworLSAoV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5
KXNlbGVjdGlvbkdyYW51bGFyaXR5OworCitAZW5kCisKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2Vi
UHJpdmF0ZSkKIAogKyAoQk9PTClfdmlld0NsYXNzOihDbGFzcyAqKXZDbGFzcyBhbmRSZXByZXNl
bnRhdGlvbkNsYXNzOihDbGFzcyAqKXJDbGFzcyBmb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1F
VHlwZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3629</attachid>
            <date>2005-08-28 16:53:02 -0700</date>
            <delta_ts>2005-09-04 17:06:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection.txt</filename>
            <type>text/plain</type>
            <size>94819</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zZWxl
Y3Rpb25kYXRhLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbmRhdGEuY3BwCTI4IEF1ZyAyMDA1IDE1OjQyOjIzIC0wMDAwCkBAIC0wLDAgKzEs
MTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJzZWxlY3Rpb25kYXRhLmgiCisjaW5jbHVk
ZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgor
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24u
aCIKKyNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAia2h0bWxfcGFydC5o
IgorCisjaWYgQVBQTEVfQ0hBTkdFUworI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKKyNlbHNl
CisjZGVmaW5lIEFTU0VSVChhc3NlcnRpb24pIGFzc2VydChhc3NlcnRpb24pCisjZW5kaWYKKwor
dXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBET006Ok5vZGVJbXBsOwordXNpbmcgRE9NOjpQ
b3NpdGlvbjsKK2NsYXNzIGtodG1sOjpTZWxlY3Rpb247CisKK25hbWVzcGFjZSBraHRtbCB7CisK
K1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEoKQorIDogbV9hZmZpbml0eShET1dOU1RSRUFN
KSwgbV9kaXJlY3Rpb24oU2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFudWxhcml0eShDSEFSQUNU
RVIpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEoUmFuZ2VJbXBsICpiYXNl
UmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlv
biwgRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKKyA6IG1fYmFzZVJhbmdlKGJhc2VSYW5n
ZSksIG1fYWZmaW5pdHkoYWZmaW5pdHkpLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pLCBtX2dyYW51
bGFyaXR5KGdyYW51bGFyaXR5KQoreworfQorCitTZWxlY3Rpb25EYXRhOjpTZWxlY3Rpb25EYXRh
KFJhbmdlSW1wbCAqYmFzZVJhbmdlKQorIDogbV9iYXNlUmFuZ2UoYmFzZVJhbmdlKSwgbV9hZmZp
bml0eShET1dOU1RSRUFNKSwgbV9kaXJlY3Rpb24oU2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFu
dWxhcml0eShDSEFSQUNURVIpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEo
Y29uc3QgU2VsZWN0aW9uRGF0YSAmY29weSkKKyA6IG1fYmFzZVJhbmdlKGNvcHkuYmFzZVJhbmdl
KCkpLCBtX2FmZmluaXR5KGNvcHkuYWZmaW5pdHkoKSksIG1fZGlyZWN0aW9uKGNvcHkuZGlyZWN0
aW9uKCkpLCBtX2dyYW51bGFyaXR5KGNvcHkuZ3JhbnVsYXJpdHkoKSkKK3sKK30KKworU2hhcmVk
UHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uRGF0YTo6YmFzZVJhbmdlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9iYXNlUmFuZ2U7Cit9CisKK3ZvaWQgU2VsZWN0aW9uRGF0YTo6c2V0QmFzZVJhbmdl
KFJhbmdlSW1wbCAqYmFzZVJhbmdlKQoreworICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAg
ICBtX2Jhc2VSYW5nZSA9IGJhc2VSYW5nZSA/IFNoYXJlZFB0cjxSYW5nZUltcGw+KGJhc2VSYW5n
ZS0+Y2xvbmVSYW5nZShleGNlcHRpb25jb2RlKSkgOiBTaGFyZWRQdHI8UmFuZ2VJbXBsPigpOwor
fQorCitTaGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25EYXRhOjpyYW5nZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fYmFzZVJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU2hhcmVkUHRy
PFJhbmdlSW1wbD4oKTsKKworICAgIHJldHVybiB0b1NlbGVjdGlvbigpLnRvUmFuZ2UoKTsKK30K
Kwordm9pZCBTZWxlY3Rpb25EYXRhOjpzZXRTZWxlY3Rpb25JblBhcnQoS1dRS0hUTUxQYXJ0ICpw
YXJ0LCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIGlmIChtX2Jhc2VSYW5nZS5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU2VsZWN0aW9uIHNlbCA9IHRvU2VsZWN0aW9uKCk7Cisg
ICAgcGFydC0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkoKSk7CisgICAgcGFy
dC0+c2V0U2VsZWN0aW9uKHNlbCwgY2xvc2VUeXBpbmcpOworfQorCitFQWZmaW5pdHkgU2VsZWN0
aW9uRGF0YTo6YWZmaW5pdHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2FmZmluaXR5OworfQor
Cit2b2lkIFNlbGVjdGlvbkRhdGE6OnNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkKK3sK
KyAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7Cit9CisKKworU2VsZWN0aW9uOjpFRGlyZWN0aW9u
IFNlbGVjdGlvbkRhdGE6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGlyZWN0
aW9uOworfQorCit2b2lkIFNlbGVjdGlvbkRhdGE6OnNldERpcmVjdGlvbihTZWxlY3Rpb246OkVE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIG1fZGlyZWN0aW9uID0gZGlyZWN0aW9uOworfQor
CisKK0VUZXh0R3JhbnVsYXJpdHkgU2VsZWN0aW9uRGF0YTo6Z3JhbnVsYXJpdHkoKSBjb25zdAor
eworICAgIHJldHVybiBtX2dyYW51bGFyaXR5OworfQorCit2b2lkIFNlbGVjdGlvbkRhdGE6OnNl
dEdyYW51bGFyaXR5KEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgbV9ncmFu
dWxhcml0eSA9IGdyYW51bGFyaXR5OworfQorCitTZWxlY3Rpb24gU2VsZWN0aW9uRGF0YTo6dG9T
ZWxlY3Rpb24oKSBjb25zdAoreworICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICBOb2Rl
SW1wbCAqc3RhcnRDb250YWluZXIgPSBtX2Jhc2VSYW5nZS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uY29kZSk7CisgICAgTm9kZUltcGwgKmVuZENvbnRhaW5lciA9IG1fYmFzZVJhbmdlLT5lbmRD
b250YWluZXIoZXhjZXB0aW9uY29kZSk7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyKTsKKyAg
ICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKKyAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmdldERv
Y3VtZW50KCkpOworICAgIEFTU0VSVChzdGFydENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSA9PSBl
bmRDb250YWluZXItPmdldERvY3VtZW50KCkpOworCisgICAgc3RhcnRDb250YWluZXItPmdldERv
Y3VtZW50KCktPnBhcnQoKS0+eG1sRG9jSW1wbCgpLT51cGRhdGVMYXlvdXQoKTsKKworICAgIEVB
ZmZpbml0eSBhZmZpbml0eSA9IG1fYWZmaW5pdHk7CisgICAgYm9vbCByYW5nZUNvbGxhcHNlZCA9
IG1fYmFzZVJhbmdlLT5jb2xsYXBzZWQoZXhjZXB0aW9uY29kZSk7CisgICAgaWYgKCEgcmFuZ2VD
b2xsYXBzZWQpCisgICAgICAgIGFmZmluaXR5ID0gRE9XTlNUUkVBTTsKKworICAgIC8vIFdvcmsg
YXJvdW5kIGJ1ZyB3aGVyZSBpc1JlbmRlcmVkQ29udGVudCByZXR1cm5zIGZhbHNlIGZvciA8YnI+
IGVsZW1lbnRzIGF0IHRoZSBlbmRzIG9mIGxpbmVzLgorICAgIC8vIElmIHRoYXQgYnVnIHdhc24n
dCBhbiBpc3N1ZSwgd2UgY291bGQganVzdCBtYWtlIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSByYW5n
ZSBkaXJlY3RseS4KKyAgICBQb3NpdGlvbiBzdGFydChzdGFydENvbnRhaW5lciwgbV9iYXNlUmFu
Z2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlvbmNvZGUpKTsKKyAgICBQb3NpdGlvbiBlbmQoZW5kQ29u
dGFpbmVyLCBtX2Jhc2VSYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbmNvZGUpKTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0LCBtX2FmZmluaXR5KTsKKyAgICBzdGFydCA9
IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpOworCisgICAgaWYgKHJhbmdlQ29sbGFwc2Vk
KSB7CisgICAgICAgIHNldEFmZmluaXR5VXNpbmdMaW5lUG9zaXRpb24odmlzaWJsZVN0YXJ0KTsK
KyAgICAgICAgYWZmaW5pdHkgPSB2aXNpYmxlU3RhcnQuYWZmaW5pdHkoKTsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogQ2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/CisgICAgU2VsZWN0aW9u
IHNlbGVjdGlvbihzdGFydCwgbV9hZmZpbml0eSwgZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7
CisgICAgaWYgKG1fZGlyZWN0aW9uID09IFNlbGVjdGlvbjo6QkFDS1dBUkQpIHsKKyAgICAgICAg
c2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoc2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24u
ZXh0ZW50QWZmaW5pdHkoKSwgc2VsZWN0aW9uLmJhc2UoKSwgc2VsZWN0aW9uLmJhc2VBZmZpbml0
eSgpKTsKKyAgICB9CisgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkobV9ncmFu
dWxhcml0eSk7CisKKyAgICByZXR1cm4gc2VsZWN0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBr
aHRtbAorCkluZGV4OiBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbmRhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp
ZmYgLU5wdSBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbmRhdGEuaAotLS0ga2h0bWwvZWRpdGluZy9z
ZWxlY3Rpb25kYXRhLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvZWRpdGlu
Zy9zZWxlY3Rpb25kYXRhLmgJMjggQXVnIDIwMDUgMTU6NDI6MjMgLTAwMDAKQEAgLTAsMCArMSw3
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtIVE1MX0VESVRJTkdfV0VCU0VMRUNUSU9OX0gK
KyNkZWZpbmUgS0hUTUxfRURJVElOR19XRUJTRUxFQ1RJT05fSAorCisjaW5jbHVkZSAidGV4dF9h
ZmZpbml0eS5oIgorI2luY2x1ZGUgInRleHRfZ3JhbnVsYXJpdHkuaCIKKyNpbmNsdWRlICJzZWxl
Y3Rpb24uaCIKKworY2xhc3MgS1dRS0hUTUxQYXJ0OworY2xhc3MgRE9NOjpSYW5nZUltcGw7CisK
K25hbWVzcGFjZSBraHRtbCB7CisKK2NsYXNzIFNlbGVjdGlvbkRhdGEKK3sKK3B1YmxpYzoKKyAg
ICBTZWxlY3Rpb25EYXRhKCk7CisgICAgU2VsZWN0aW9uRGF0YShET006OlJhbmdlSW1wbCAqYmFz
ZVJhbmdlLCBFQWZmaW5pdHkgYWZmaW5pdHksIFNlbGVjdGlvbjo6RURpcmVjdGlvbiBkaXJlY3Rp
b24sIEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOworICAgIFNlbGVjdGlvbkRhdGEoRE9N
OjpSYW5nZUltcGwgKmJhc2VSYW5nZSk7CisgICAgU2VsZWN0aW9uRGF0YShjb25zdCBTZWxlY3Rp
b25EYXRhICZjb3B5KTsKKworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gYmFzZVJhbmdl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRCYXNlUmFuZ2UoRE9NOjpSYW5nZUltcGwgKmJhc2VSYW5n
ZSk7CisgICAgU2hhcmVkUHRyPERPTTo6UmFuZ2VJbXBsPiByYW5nZSgpIGNvbnN0OworICAgIEVB
ZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0QWZmaW5pdHkoRUFmZmluaXR5
IGFmZmluaXR5KTsKKyAgICBTZWxlY3Rpb246OkVEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3Q7
CisgICAgdm9pZCBzZXREaXJlY3Rpb24oU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbik7
CisgICAgRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSgpIGNvbnN0OworICAgIHZvaWQgc2V0
R3JhbnVsYXJpdHkoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25JblBhcnQoS1dRS0hUTUxQYXJ0ICpwYXJ0LCBib29sIGNsb3NlVHlwaW5nKTsKKyAg
ICAKKworcHJpdmF0ZToKKworICAgIGtodG1sOjpTZWxlY3Rpb24gdG9TZWxlY3Rpb24oKSBjb25z
dDsKKworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbV9iYXNlUmFuZ2U7CisgICAgRUFm
ZmluaXR5IG1fYWZmaW5pdHk7CisgICAgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIG1fZGlyZWN0aW9u
OworICAgIEVUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsKK307CisKK30gLy8gbmFtZXNw
YWNlIGtodG1sCisKKyNlbmRpZiAvLyBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisKSW5kZXg6
IGt3cS9XZWJTZWxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBrd3EvV2ViU2VsZWN0aW9u
LmgKLS0tIGt3cS9XZWJTZWxlY3Rpb24uaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBr
d3EvV2ViU2VsZWN0aW9uLmgJMjggQXVnIDIwMDUgMTA6MDQ6MzAgLTAwMDAKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgorCitAY2xhc3MgRE9N
UmFuZ2U7CitAY2xhc3MgV2ViU2VsZWN0aW9uSW50ZXJuYWw7CisKK3R5cGVkZWYgZW51bSB7Cisg
ICAgV2ViVGV4dFNlbGVjdEZvcndhcmQsCisgICAgV2ViVGV4dFNlbGVjdEJhY2t3YXJkCit9IFdl
YlRleHRTZWxlY3Rpb25EaXJlY3Rpb247CisKK3R5cGVkZWYgZW51bSB7CisgICAgV2ViVGV4dFNl
bGVjdEJ5Q2hhcmFjdGVyLAorICAgIFdlYlRleHRTZWxlY3RCeVdvcmQsCisgICAgV2ViVGV4dFNl
bGVjdEJ5TGluZSwKKyAgICBXZWJUZXh0U2VsZWN0QnlQYXJhZ3JhcGgKK30gV2ViVGV4dFNlbGVj
dGlvbkdyYW51bGFyaXR5OworCitAaW50ZXJmYWNlIFdlYlNlbGVjdGlvbiA6IE5TT2JqZWN0Cit7
CisgICAgV2ViU2VsZWN0aW9uSW50ZXJuYWwgKl9wcml2YXRlOworfQorCisrIChpZClzZWxlY3Rp
b25XaXRoQmFzZVJhbmdlOihET01SYW5nZSAqKXNlbGVjdGlvbkJhc2VSYW5nZSBhZmZpbml0eToo
TlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246KFdlYlRleHRT
ZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJUZXh0
U2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7CisrIChpZClzZWxlY3Rp
b25XaXRoUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0aW9uUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHk7CistIChpZClpbml0V2l0aEJhc2VSYW5nZToo
RE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpc2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOihXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9u
KXNlbGVjdGlvbkRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFy
aXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5OworLSAoaWQpaW5pdFdpdGhSYW5nZTooRE9NUmFuZ2Ug
KilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25B
ZmZpbml0eTsKKy0gKERPTVJhbmdlICopYmFzZVJhbmdlOworLSAodm9pZClzZXRCYXNlUmFuZ2U6
KERPTVJhbmdlICopbmV3QmFzZVJhbmdlOworLSAoRE9NUmFuZ2UgKilyYW5nZTsKKy0gKE5TU2Vs
ZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CistICh2b2lkKXNldEFmZmluaXR5OihOU1NlbGVjdGlv
bkFmZmluaXR5KW5ld0FmZmluaXR5OworLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilkaXJl
Y3Rpb247CistICh2b2lkKXNldERpcmVjdGlvbjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilu
ZXdEaXJlY3Rpb247CistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7
CistICh2b2lkKXNldEdyYW51bGFyaXR5OihXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpbmV3
R3JhbnVsYXJpdHk7CisKK0BlbmQKKwpJbmRleDoga3dxL1dlYlNlbGVjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CmRpZmYgLU5wdSBrd3EvV2ViU2VsZWN0aW9uLm1tCi0tLSBrd3EvV2ViU2VsZWN0aW9uLm1t
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt3cS9XZWJTZWxlY3Rpb24ubW0JMjggQXVn
IDIwMDUgMTM6MTE6MDEgLTAwMDAKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIgor
I2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKKyNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKKworI2lu
Y2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgorCitAaW1wbGVtZW50YXRpb24gV2ViU2VsZWN0
aW9uCisKKysgKGlkKXNlbGVjdGlvbldpdGhSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25SYW5n
ZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQoreworICAg
IHJldHVybiBbW1tXZWJTZWxlY3Rpb24gYWxsb2NdIGluaXRXaXRoUmFuZ2U6c2VsZWN0aW9uUmFu
Z2UgYWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5pdHldIGF1dG9yZWxlYXNlXTsKK30KKworKyAoaWQp
c2VsZWN0aW9uV2l0aEJhc2VSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOihX
ZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbiBncmFudWxhcml0eToo
V2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5Cit7CisgICAg
cmV0dXJuIFtbW1dlYlNlbGVjdGlvbiBhbGxvY10gaW5pdFdpdGhCYXNlUmFuZ2U6c2VsZWN0aW9u
QmFzZVJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjpzZWxlY3Rpb25E
aXJlY3Rpb24gZ3JhbnVsYXJpdHk6c2VsZWN0aW9uR3JhbnVsYXJpdHldIGF1dG9yZWxlYXNlXTsK
K30KKworKyAoaWQpX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRhOihjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uRGF0YSAqKWRhdGEKK3sKKyAgICBXZWJTZWxlY3Rpb24gKnNlbCA9IFtbV2ViU2VsZWN0
aW9uIGFsbG9jXSBpbml0XTsKKyAgICBbc2VsIF9zZXRTZWxlY3Rpb25EYXRhOmRhdGFdOworICAg
IHJldHVybiBbc2VsIGF1dG9yZWxlYXNlXTsKK30KKworLSAoaWQpaW5pdFdpdGhSYW5nZTooRE9N
UmFuZ2UgKilzZWxlY3Rpb25SYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eQoreworICAgIFtzZWxmIGluaXRdOworICAgIFtzZWxmIHNldEJhc2VSYW5n
ZTpzZWxlY3Rpb25SYW5nZV07CisgICAgW3NlbGYgc2V0QWZmaW5pdHk6c2VsZWN0aW9uQWZmaW5p
dHldOworICAgIFtzZWxmIHNldERpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZF07CisgICAg
W3NlbGYgc2V0R3JhbnVsYXJpdHk6V2ViVGV4dFNlbGVjdEJ5Q2hhcmFjdGVyXTsKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAoaWQpaW5pdFdpdGhCYXNlUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0
aW9uQmFzZVJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmlu
aXR5IGRpcmVjdGlvbjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rp
b24gZ3JhbnVsYXJpdHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFu
dWxhcml0eQoreworICAgIFtzZWxmIGluaXRdOworICAgIFtzZWxmIHNldEJhc2VSYW5nZTpzZWxl
Y3Rpb25CYXNlUmFuZ2VdOworICAgIFtzZWxmIHNldEFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5
XTsKKyAgICBbc2VsZiBzZXREaXJlY3Rpb246c2VsZWN0aW9uRGlyZWN0aW9uXTsKKyAgICBbc2Vs
ZiBzZXRHcmFudWxhcml0eTpzZWxlY3Rpb25HcmFudWxhcml0eV07CisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGlkKWluaXQKK3sKKyAgICBfcHJpdmF0ZSA9IFtbV2ViU2VsZWN0aW9uSW50ZXJu
YWwgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBbX3ByaXZhdGUgcmVsZWFzZV07CisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCist
IChjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAqKV9zZWxlY3Rpb25EYXRhCit7CisgICAgQVNT
RVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0
dXJuIFtfcHJpdmF0ZSBkYXRhXTsKK30KKworLSAodm9pZClfc2V0U2VsZWN0aW9uRGF0YTooY29u
c3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9
IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgKihbX3ByaXZhdGUgZGF0YV0p
ID0gKmRhdGE7Cit9CisKKy0gKERPTVJhbmdlICopYmFzZVJhbmdlCit7CisgICAgQVNTRVJUKF9w
cml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIFtE
T01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpbX3ByaXZhdGUgZGF0YV0tPmJhc2VSYW5nZSgpLmdldCgp
XTsKK30KKworLSAodm9pZClzZXRCYXNlUmFuZ2U6KERPTVJhbmdlICopbmV3QmFzZVJhbmdlCit7
CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7
CisgICAgW19wcml2YXRlIGRhdGFdLT5zZXRCYXNlUmFuZ2UoW25ld0Jhc2VSYW5nZSBfcmFuZ2VJ
bXBsXSk7Cit9CisKKworLSAoRE9NUmFuZ2UgKilyYW5nZQoreworICAgIEFTU0VSVChfcHJpdmF0
ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBbRE9NUmFu
Z2UgX3JhbmdlV2l0aEltcGw6W19wcml2YXRlIGRhdGFdLT5yYW5nZSgpLmdldCgpXTsKK30KKwor
LSAodm9pZClfc2V0U2VsZWN0aW9uSW5QYXJ0OihLV1FLSFRNTFBhcnQgKilwYXJ0IGNsb3NlVHlw
aW5nOihCT09MKWNsb3NlVHlwaW5nCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBb
X3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIFtfcHJpdmF0ZSBkYXRhXS0+c2V0
U2VsZWN0aW9uSW5QYXJ0KHBhcnQsIGNsb3NlVHlwaW5nKTsKK30KKworCistIChOU1NlbGVjdGlv
bkFmZmluaXR5KWFmZmluaXR5Cit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3By
aXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5TU2VsZWN0aW9u
QWZmaW5pdHk+KFtfcHJpdmF0ZSBkYXRhXS0+YWZmaW5pdHkoKSk7Cit9CisKKy0gKHZvaWQpc2V0
QWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpbmV3QWZmaW5pdHkKK3sKKyAgICBBU1NFUlQo
X3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICBbX3ByaXZh
dGUgZGF0YV0tPnNldEFmZmluaXR5KHN0YXRpY19jYXN0PGtodG1sOjpFQWZmaW5pdHk+KG5ld0Fm
ZmluaXR5KSk7Cit9CisKKworLSAoV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24K
K3sKKyAgICBBU1NFUlQoX3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxM
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbj4oW19w
cml2YXRlIGRhdGFdLT5kaXJlY3Rpb24oKSk7Cit9CisKKy0gKHZvaWQpc2V0RGlyZWN0aW9uOihX
ZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKW5ld0RpcmVjdGlvbgoreworICAgIEFTU0VSVChfcHJp
dmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIFtfcHJpdmF0ZSBk
YXRhXS0+c2V0RGlyZWN0aW9uKHN0YXRpY19jYXN0PGtodG1sOjpTZWxlY3Rpb246OkVEaXJlY3Rp
b24+KG5ld0RpcmVjdGlvbikpOworfQorCisKKy0gKFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0
eSlncmFudWxhcml0eQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRl
IGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJUZXh0U2VsZWN0aW9u
R3JhbnVsYXJpdHk+KFtfcHJpdmF0ZSBkYXRhXS0+Z3JhbnVsYXJpdHkoKSk7Cit9CisKKy0gKHZv
aWQpc2V0R3JhbnVsYXJpdHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSluZXdHcmFudWxh
cml0eQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9
IE5VTEwpOworICAgIFtfcHJpdmF0ZSBkYXRhXS0+c2V0R3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8
a2h0bWw6OkVUZXh0R3JhbnVsYXJpdHk+KG5ld0dyYW51bGFyaXR5KSk7Cit9CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdlYlNlbGVjdGlvbkludGVybmFsCisKKy0gKGlkKWluaXQKK3sKKyAg
ICBkYXRhID0gbmV3IGtodG1sOjpTZWxlY3Rpb25EYXRhOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBkZWxldGUgZGF0YTsKKyAgICBbc3VwZXIgZGVhbGxv
Y107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBkZWxldGUgZGF0YTsKK30KKworLSAo
a2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhCit7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0Bl
bmQKKwpJbmRleDoga3dxL1dlYlNlbGVjdGlvbkludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga3dxL1dlYlNlbGVjdGlvbkludGVybmFsLmgKLS0tIGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5h
bC5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5h
bC5oCTI4IEF1ZyAyMDA1IDEyOjUzOjM4IC0wMDAwCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiV2ViU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAic2VsZWN0aW9uZGF0YS5o
IgorCitAaW50ZXJmYWNlIFdlYlNlbGVjdGlvbiAoV2ViU2VsZWN0aW9uSW50ZXJuYWxBY2Nlc3Nv
cnMpCisKKysgKGlkKV9zZWxlY3Rpb25XaXRoU2VsZWN0aW9uRGF0YTooY29uc3Qga2h0bWw6OlNl
bGVjdGlvbkRhdGEgKilkYXRhOworLSAoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilfc2Vs
ZWN0aW9uRGF0YTsKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkRhdGE6KGNvbnN0IGtodG1sOjpTZWxl
Y3Rpb25EYXRhICopZGF0YTsKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkluUGFydDooS1dRS0hUTUxQ
YXJ0ICopcGFydCBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZzsKKworQGVuZAorCitAaW50
ZXJmYWNlIFdlYlNlbGVjdGlvbkludGVybmFsIDogTlNPYmplY3QKK3sKKyAgICBraHRtbDo6U2Vs
ZWN0aW9uRGF0YSAqZGF0YTsKK30KKworLSAoa2h0bWw6OlNlbGVjdGlvbkRhdGEgKilkYXRhOwor
CitAZW5kCisKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS5leHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQK
ZGlmZiAtcCAtdSAtcjEuNDQgV2ViQ29yZS9XZWJDb3JlLmV4cAotLS0gV2ViQ29yZS9XZWJDb3Jl
LmV4cAkzMCBKdWwgMjAwNSAwOTowNTowMSAtMDAwMAkxLjQ0CisrKyBXZWJDb3JlL1dlYkNvcmUu
ZXhwCTI4IEF1ZyAyMDA1IDIzOjUxOjU1IC0wMDAwCkBAIC0xMTcsNiArMTE3LDcgQEAKIC5vYmpj
X2NsYXNzX25hbWVfV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkKIC5vYmpjX2NsYXNzX25hbWVf
V2ViQ29yZVZpZXdGYWN0b3J5CiAub2JqY19jbGFzc19uYW1lX1dlYkRhc2hib2FyZFJlZ2lvbgor
Lm9iamNfY2xhc3NfbmFtZV9XZWJTZWxlY3Rpb24KIF9XZWJDb3JlRWxlbWVudERPTU5vZGVLZXkK
IF9XZWJDb3JlRWxlbWVudEZyYW1lS2V5CiBfV2ViQ29yZUVsZW1lbnRJbWFnZUFsdFN0cmluZ0tl
eQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBBdWcgMjAwNSAyMjoyMToxMSAtMDAwMAkx
LjE1CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkyOCBBdWcg
MjAwNSAyMzo1MjoxMyAtMDAwMApAQCAtMTkzNCw2ICsxOTM0LDE2IEBACiAJCUE4Q0Q0NzdCMDhC
RjI1REIwMDUzMjk0MyAvKiBDb3VudGVyLmlkbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4MUQ1ODM4MDhBRERGRjcwMDEzNkFDMSAvKiBDb3VudGVyLmlk
bCAqLzsgfTsKIAkJQThGRDhCODYwODdDQjQ0QzAwREMzNzA3IC8qIEtXUVdNYXRyaXgubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODVEN0E4QzA4NzlF
QzY0MDA2QTkxNzIgLyogS1dRV01hdHJpeC5tbSAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAw
REMzNzA3IC8qIEtXUVdNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87
IH07CisJCUFFMzM1OTE5MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTE2MDhDMjdBRDkw
MEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBRTMzNTkxQTA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUz
MzU5MTcwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSAqLzsgfTsKKwkJQUUzMzU5
MUIwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkxODA4QzI3QUQ5MDBBOEFD
NDkgLyogV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCAqLzsgfTsKKwkJQUUzMzU5MUMwOEMyN0FEOTAw
QThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUUzMzU5MTYwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFFMzM1
OTFEMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkxNzA4QzI3QUQ5MDBBOEFDNDkgLyog
V2ViU2VsZWN0aW9uLm1tICovOyB9OworCQlBRTMzNTkxRTA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEFFMzM1OTE4MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5h
bC5oICovOyB9OworCQlBRTMzNTkzRTA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkz
QzA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5jcHAgKi87IH07CisJCUFFMzM1OTNG
MDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkzRDA4QzI4Mjg2MDBBOEFDNDkgLyogc2Vs
ZWN0aW9uZGF0YS5oICovOyB9OworCQlBRTMzNTk0MDA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0
aW9uZGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBRTMzNTkzQzA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5jcHAgKi87IH07CisJ
CUFFMzM1OTQxMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkzRDA4QzI4Mjg2MDBBOEFD
NDkgLyogc2VsZWN0aW9uZGF0YS5oICovOyB9OwogCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4QTUg
LyogcmVuZGVyX3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMTc5ODhGMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWVfbWFj
Lm1tICovOyB9OwogCQlCQzE3OTg5MzA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkw
MDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuY3BwICovOyB9OwogCQlCQzE3OTg5NDA4
OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzE3OTg5MTA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVy
X3RoZW1lLmggKi87IH07CkBAIC0yOTM3LDYgKzI5NDcsMTEgQEAKIAkJQThDMEZCOEMwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBLQ2FudmFzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThDMEZC
OEQwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEtDYW52YXNWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThDMEZCOEUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNWaWV3LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNWaWV3Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUFFMzM1OTE2MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNlbGVjdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRTMzNTkxNzA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YlNlbGVjdGlvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU5MTgwOEMy
N0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBRTMzNTkzQzA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gc2VsZWN0aW9uZGF0YS5j
cHA7IHBhdGggPSBlZGl0aW5nL3NlbGVjdGlvbmRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBRTMzNTkzRDA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc2VsZWN0aW9uZGF0YS5oOyBwYXRoID0g
ZWRpdGluZy9zZWxlY3Rpb25kYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MDZGMjQ5MDZEMThBN0UwMDRBNkZBMyAvKiB4c2xfc3R5bGVzaGVldGltcGwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHhzbF9zdHlsZXNoZWV0aW1wbC5jcHA7IHBh
dGggPSB4c2wveHNsX3N0eWxlc2hlZXRpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMwNkYyNEEwNkQxOEE3RTAwNEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0geHNsX3N0eWxlc2hlZXRpbXBsLmg7IHBh
dGggPSB4c2wveHNsX3N0eWxlc2hlZXRpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDZGMjRCMDZEMThBN0UwMDRBNkZBMyAvKiB4c2x0X3Byb2Nlc3NvcmltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHhzbHRfcHJvY2Vzc29yaW1wbC5j
cHA7IHBhdGggPSB4c2wveHNsdF9wcm9jZXNzb3JpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTQ3NDksNiArNDc2NCw4IEBACiAJCQkJOTM3OEQ5RjkwNzY0MEE0NjAwNEI5
N0JGIC8qIG1hcmt1cC5jcHAgKi8sCiAJCQkJOTNBQkUwNjcwNzAyODVGNjAwQkQ5MUY5IC8qIHNl
bGVjdGlvbi5oICovLAogCQkJCTkzQUJFMDY2MDcwMjg1RjYwMEJEOTFGOSAvKiBzZWxlY3Rpb24u
Y3BwICovLAorCQkJCUFFMzM1OTNEMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmgg
Ki8sCisJCQkJQUUzMzU5M0MwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuY3BwICov
LAogCQkJCUJFQ0U2N0JEMDcwODdCMjUwMDA3QzE0QiAvKiB0ZXh0X2FmZmluaXR5LmggKi8sCiAJ
CQkJOTMyQjk4MzQwNzAyOTdEQzAwMzI4MDRGIC8qIHRleHRfZ3JhbnVsYXJpdHkuaCAqLywKIAkJ
CQk5M0FCRTA2OTA3MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV9wb3NpdGlvbi5oICovLApAQCAt
NTE4Niw2ICs1MjAzLDkgQEAKIAkJCQlGNTg3ODU1NTAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29y
ZVZpZXdGYWN0b3J5Lm0gKi8sCiAJCQkJNTE1MEMyQTEwNzAyNjI5MDAwQUY2NDJDIC8qIFdlYkRh
c2hib2FyZFJlZ2lvbi5oICovLAogCQkJCTUxNTBDMkE1MDcwMjYyOTgwMEFGNjQyQyAvKiBXZWJE
YXNoYm9hcmRSZWdpb24ubSAqLywKKwkJCQlBRTMzNTkxNjA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uLmggKi8sCisJCQkJQUUzMzU5MTcwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVj
dGlvbi5tbSAqLywKKwkJCQlBRTMzNTkxODA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9u
SW50ZXJuYWwuaCAqLywKIAkJCQlGNThFRjU4RTAyREZERkI3MDE4NjM1Q0EgLyogV2ViQ29yZS5l
eHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJXZWJDb3JlIFNQSSI7CkBAIC01Nzc3LDYgKzU3OTcs
OSBAQAogCQkJCUJDMTc5ODk0MDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMTc5OERBMDg4REE0RjgwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWVf
bWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTZGRUVEODA4OTg1ODIzMDBDNDRDM0YgLyogV2Vi
Q29yZVNjcmlwdERlYnVnZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRTMzNTkxOTA4QzI3QUQ5
MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBRTMzNTkxQjA4
QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFFMzM1OTNGMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTY0NDQsNiArNjQ2Nyw5IEBACiAJCQkJQTg1NkU5RDYwOEI0NUIxRTAwNDJFMzAz
IC8qIGtkb214cGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDcwOEI0NUIxRTAwNDJF
MzAzIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDkwOEI0NUIxRTAw
NDJFMzAzIC8qIGV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1OTFDMDhDMjdB
RDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1OTFF
MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQUUzMzU5NDEwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtNzc5MSw2ICs3ODE3LDggQEAKIAkJCQlCQzE3OTg5MjA4OEQ5NzVGMDA2MDY4
QTUgLyogcmVuZGVyX3RoZW1lX21hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMTc5ODkzMDg4
RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U2
RkVFRDkwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUFFMzM1OTFBMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0g
aW4gU291cmNlcyAqLywKKwkJCQlBRTMzNTkzRTA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9u
ZGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTg0MzIsNiArODQ2MCw4IEBACiAJCQkJQTg1NkU5
RDgwOEI0NUIxRTAwNDJFMzAzIC8qIGZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODU2RTlEQTA4QjQ1QjFFMDA0MkUzMDMgLyogZXhwcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODU2RTlGOTA4QjQ2MDhGMDA0MkUzMDMgLyogeHBhdGgueSBpbiBTb3VyY2VzICovLAor
CQkJCUFFMzM1OTFEMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKKwkJCQlBRTMzNTk0MDA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9uZGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzM2CmRpZmYgLXAgLXUgLXIxLjMzNiBXZWJDb3JlL2todG1s
L2todG1sX3BhcnQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwCTI1IEF1ZyAy
MDA1IDIzOjEzOjQwIC0wMDAwCTEuMzM2CisrKyBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3Bw
CTI4IEF1ZyAyMDA1IDIzOjUyOjE2IC0wMDAwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAi
ZWRpdGluZy9tYXJrdXAuaCIKICNpbmNsdWRlICJlZGl0aW5nL2h0bWxlZGl0aW5nLmgiCiAjaW5j
bHVkZSAiZWRpdGluZy9zZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJlZGl0aW5nL3NlbGVjdGlvbmRh
dGEuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJl
ZGl0aW5nL3Zpc2libGVfdGV4dC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5o
IgpAQCAtMTMxLDYgKzEzMiw3IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJPYmplY3Q7CiB1c2luZyBr
aHRtbDo6UmVuZGVyVGV4dDsKIHVzaW5nIGtodG1sOjpSZW5kZXJXaWRnZXQ7CiB1c2luZyBraHRt
bDo6U2VsZWN0aW9uOwordXNpbmcga2h0bWw6OlNlbGVjdGlvbkRhdGE7CiB1c2luZyBraHRtbDo6
VG9rZW5pemVyOwogdXNpbmcga2h0bWw6OlR5cGluZ0NvbW1hbmQ7CiB1c2luZyBraHRtbDo6Vmlz
aWJsZVBvc2l0aW9uOwpAQCAtMjM5Niw3ICsyMzk4LDcgQEAgYm9vbCBLSFRNTFBhcnQ6OmZpbmRU
ZXh0TmV4dCggY29uc3QgUVN0cgogICAgICAgICAgICAgICAgIFBvc2l0aW9uIHAxKGQtPm1fZmlu
ZE5vZGUsIGQtPm1fZmluZFBvcyk7CiAgICAgICAgICAgICAgICAgUG9zaXRpb24gcDIoZC0+bV9m
aW5kTm9kZSwgZC0+bV9maW5kUG9zICsgbWF0Y2hMZW4pOwogICAgICAgICAgICAgICAgIFNlbGVj
dGlvbiBzZWwgPSBTZWxlY3Rpb24ocDEsIGtodG1sOjpET1dOU1RSRUFNLCBwMiwga2h0bWw6OlNF
TF9QUkVGRVJfVVBTVFJFQU1fQUZGSU5JVFkpOwotICAgICAgICAgICAgICAgIGlmIChzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oc2VsKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oc2VsLCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KSkgewogICAgICAgICAgICAg
ICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDY0LDYgKzI0NjYsMTEgQEAgY29uc3QgU2VsZWN0aW9u
ICZLSFRNTFBhcnQ6OnNlbGVjdGlvbigpIAogICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbjsKIH0K
IAorY29uc3QgU2VsZWN0aW9uRGF0YSBLSFRNTFBhcnQ6OnNlbGVjdGlvbkRhdGEoKSBjb25zdAor
eworICAgIHJldHVybiBTZWxlY3Rpb25EYXRhKGQtPm1fc2VsZWN0aW9uLmJhc2VSYW5nZSgpLmdl
dCgpLCBkLT5tX3NlbGVjdGlvbi5lbmRBZmZpbml0eSgpLCBkLT5tX3NlbGVjdGlvbi5pc0Zvcndh
cmRTZWxlY3Rpb24oKSA/IFNlbGVjdGlvbjo6Rk9SV0FSRCA6IFNlbGVjdGlvbjo6QkFDS1dBUkQs
IGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpOworfQorCiBFVGV4dEdyYW51bGFyaXR5IEtIVE1M
UGFydDo6c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3Nl
bGVjdGlvbkdyYW51bGFyaXR5OwpAQCAtNDYwNCw3ICs0NjExLDcgQEAgdm9pZCBLSFRNTFBhcnQ6
OnNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdQogICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4
dCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2Vs
ZWN0aW9uKSkgeworICAgIGlmIChzaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uLCBkLT5t
X3NlbGVjdGlvbkdyYW51bGFyaXR5KSkgewogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9u
KTsKICAgICAgICAgc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgfQpAQCAtNDY0NCw3ICs0NjUxLDcg
QEAgdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaQogICAgICAgICAgICAg
ZC0+bV9iZWdhblNlbGVjdGluZ1RleHQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbGVjdGlvbikpIHsKKyAgICAgICAgaWYg
KHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24sIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJp
dHkpKSB7CiAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICAgICAgICAg
IHN0YXJ0QXV0b1Njcm9sbCgpOwogICAgICAgICB9CkBAIC00Njk4LDcgKzQ3MDUsNyBAQCB2b2lk
IEtIVE1MUGFydDo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2luCiAgICAgICAgICAgICAgICAgZC0+
bV9zZWxlY3Rpb25HcmFudWxhcml0eSA9IENIQVJBQ1RFUjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCwgZC0+bV9zZWxlY3Rpb25H
cmFudWxhcml0eSkpIHsKICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsKTsKICAgICAg
ICAgICAgICAgICBzdGFydEF1dG9TY3JvbGwoKTsKICAgICAgICAgICAgIH0KQEAgLTQ5MTIsNyAr
NDkxOSw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVNb3VzZU1vdmVFdmVudFNlbGUKICAgICAg
ICAgc2VsLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSk7
CiAgICAgfQogCi0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwpKSB7CisgICAgaWYg
KHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWwsIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpKSB7
CiAgICAgICAgIHNldFNlbGVjdGlvbihzZWwpOwogICAgIH0KIApAQCAtNDk4NSw4ICs0OTkyLDkg
QEAgdm9pZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VSZWxlYXNlRXZlbnQoIAogICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvcyA9IG5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRp
bmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnkoKSk7CiAgICAgICAgICAgICBzZWxlY3Rpb24ubW92
ZVRvKHBvcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihz
ZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICAg
ICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxlY3Rpb24sIENIQVJBQ1RFUikpIHsKKyAg
ICAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24sIENIQVJBQ1RFUik7CisgICAgICAgICAg
ICBzZXRTZWxlY3Rpb25HcmFudWxhcml0eShDSEFSQUNURVIpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC01MTU0LDI3ICs1MTYyLDI3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RBbGwoKQogICAg
IE5vZGVJbXBsICpkZSA9IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpbnQgbiA9
IGRlID8gZGUtPmNoaWxkTm9kZUNvdW50KCkgOiAwOwogICAgIFNlbGVjdGlvbiBzZWwgPSBTZWxl
Y3Rpb24oVmlzaWJsZVBvc2l0aW9uKGRlLCAwLCBraHRtbDo6RE9XTlNUUkVBTSksIFZpc2libGVQ
b3NpdGlvbihkZSwgbiwga2h0bWw6OkRPV05TVFJFQU0pKTsKLSAgICBpZiAoc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKHNlbCkpIHsKKyAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCwgZC0+
bV9zZWxlY3Rpb25HcmFudWxhcml0eSkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CiAg
ICAgfQogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CiB9
CiAKLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
ICZuZXdzZWxlY3Rpb24pIGNvbnN0Citib29sIEtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFNlbGVjdGlvbiAmbmV3c2VsZWN0aW9uLCBFVGV4dEdyYW51bGFyaXR5IHNlbGVj
dGlvbkdyYW51bGFyaXR5KSBjb25zdAogewogI2lmIEFQUExFX0NIQU5HRVMKLSAgICByZXR1cm4g
S1dRKHRoaXMpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oZC0+bV9zZWxlY3Rpb24sIG5ld3NlbGVj
dGlvbiwgbmV3c2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSwgZmFsc2UpOworICAgIHJldHVybiBL
V1EodGhpcyktPnNob3VsZENoYW5nZVNlbGVjdGlvbihTZWxlY3Rpb25EYXRhKG5ld3NlbGVjdGlv
bi5iYXNlUmFuZ2UoKS5nZXQoKSwgbmV3c2VsZWN0aW9uLmVuZEFmZmluaXR5KCksIG5ld3NlbGVj
dGlvbi5pc0ZvcndhcmRTZWxlY3Rpb24oKSA/IFNlbGVjdGlvbjo6Rk9SV0FSRCA6IFNlbGVjdGlv
bjo6QkFDS1dBUkQsIHNlbGVjdGlvbkdyYW51bGFyaXR5KSwgZmFsc2UpOwogI2Vsc2UKICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgogfQogCi1ib29sIEtIVE1MUGFydDo6c2hvdWxkQmVnaW5FZGl0
aW5nKGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpIGNvbnN0Citib29sIEtIVE1MUGFydDo6c2hvdWxk
QmVnaW5FZGl0aW5nKGNvbnN0IFNlbGVjdGlvbkRhdGEgJnNlbCkgY29uc3QKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBLSFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgUmFu
Z2VJbXBsICpyYW5nZSkgY29uc3QKK2Jvb2wgS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNv
bnN0IFNlbGVjdGlvbkRhdGEgJnNlbCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTUxOTMsNyArNTIwMSw3IEBAIEVkaXRDb21tYW5kUHRyIEtIVE1MUGFydDo6bGFzdEVkaXRDb21t
YW4KIAogdm9pZCBLSFRNTFBhcnQ6OmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kUHRyICZjbWQp
CiB7Ci0gICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihjbWQuZW5kaW5nU2VsZWN0aW9uKCkp
KSB7CisgICAgaWYgKHNob3VsZENoYW5nZVNlbGVjdGlvbihjbWQuZW5kaW5nU2VsZWN0aW9uKCks
IGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkpKSB7CiAgICAgICAgIHNldFNlbGVjdGlvbihjbWQu
ZW5kaW5nU2VsZWN0aW9uKCksIGZhbHNlKTsKICAgICB9CiAKQEAgLTUyMjcsNyArNTIzNSw3IEBA
IHZvaWQgS0hUTUxQYXJ0OjphcHBsaWVkRWRpdGluZyhFZGl0Q29tbWEKIAogdm9pZCBLSFRNTFBh
cnQ6OnVuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkKIHsKLSAgICBpZiAoc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5zdGFydGluZ1NlbGVjdGlvbigpKSkgeworICAgIGlmIChz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oY21kLnN0YXJ0aW5nU2VsZWN0aW9uKCksIGQtPm1fc2VsZWN0
aW9uR3JhbnVsYXJpdHkpKSB7CiAgICAgICAgIHNldFNlbGVjdGlvbihjbWQuc3RhcnRpbmdTZWxl
Y3Rpb24oKSwgdHJ1ZSk7CiAgICAgfQogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTUyMzksNyArNTI0
Nyw3IEBAIHZvaWQgS0hUTUxQYXJ0Ojp1bmFwcGxpZWRFZGl0aW5nKEVkaXRDb20KIAogdm9pZCBL
SFRNTFBhcnQ6OnJlYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRQdHIgJmNtZCkKIHsKLSAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSkpIHsKKyAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxlY3Rpb24oKSwgZC0+bV9zZWxl
Y3Rpb25HcmFudWxhcml0eSkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKGNtZC5lbmRpbmdTZWxl
Y3Rpb24oKSwgdHJ1ZSk7CiAgICAgfQogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTU5ODUsNyArNTk5
Myw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RGcmFtZUVsZW1lbnRJblBhcmUKICAgICBWaXNp
YmxlUG9zaXRpb24gYWZ0ZXJPd25lckVsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG93bmVyRWxlbWVu
dFBhcmVudCwgb3duZXJFbGVtZW50Tm9kZUluZGV4ICsgMSwga2h0bWw6OlNFTF9QUkVGRVJfVVBT
VFJFQU1fQUZGSU5JVFkpKTsKIAogICAgIC8vIEZvY3VzIG9uIHRoZSBwYXJlbnQgZnJhbWUsIGFu
ZCB0aGVuIHNlbGVjdCBmcm9tIGJlZm9yZSB0aGlzIGVsZW1lbnQgdG8gYWZ0ZXIuCi0gICAgaWYg
KHBhcmVudC0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKFNlbGVjdGlvbihiZWZvcmVPd25lckVsZW1l
bnQsIGFmdGVyT3duZXJFbGVtZW50KSkpIHsKKyAgICBpZiAocGFyZW50LT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oU2VsZWN0aW9uKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQp
LCBkLT5tX3NlbGVjdGlvbkdyYW51bGFyaXR5KSkgewogICAgICAgICBwYXJlbnRWaWV3LT5zZXRG
b2N1cygpOwogICAgICAgICBwYXJlbnQtPnNldFNlbGVjdGlvbihTZWxlY3Rpb24oYmVmb3JlT3du
ZXJFbGVtZW50LCBhZnRlck93bmVyRWxlbWVudCkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0
bWwva2h0bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2todG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzYKZGlmZiAtcCAtdSAt
cjEuMTM2IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1s
X3BhcnQuaAkxNCBBdWcgMjAwNSAwOToxMjo0MyAtMDAwMAkxLjEzNgorKysgV2ViQ29yZS9raHRt
bC9raHRtbF9wYXJ0LmgJMjggQXVnIDIwMDUgMjM6NTI6MTYgLTAwMDAKQEAgLTg2LDYgKzg2LDcg
QEAgbmFtZXNwYWNlIGtodG1sCiAgIGNsYXNzIFJlbmRlclBhcnRPYmplY3Q7CiAgIGNsYXNzIFJl
bmRlcldpZGdldDsKICAgY2xhc3MgU2VsZWN0aW9uOworICBjbGFzcyBTZWxlY3Rpb25EYXRhOwog
ICBjbGFzcyBYTUxUb2tlbml6ZXI7CiB9CiAKQEAgLTYwMiw2ICs2MDMsMTEgQEAgcHVibGljOgog
ICBjb25zdCBraHRtbDo6U2VsZWN0aW9uICZzZWxlY3Rpb24oKSBjb25zdDsKIAogICAvKioKKyAg
ICogUmV0dXJucyB0aGUgc2VsZWN0aW9uIHBhcnQgb2YgdGhlIEhUTUwsIHBhY2thZ2VkIHdpdGgg
cmVsYXRlZCBzZWxlY3Rpb24gZGF0YS4KKyAgICovCisgIGNvbnN0IGtodG1sOjpTZWxlY3Rpb25E
YXRhIHNlbGVjdGlvbkRhdGEoKSBjb25zdDsKKworICAvKioKICAgICogUmV0dXJucyB0aGUgZ3Jh
bnVsYXJpdHkgb2YgdGhlIHNlbGVjdGlvbiAoY2hhcmFjdGVyLCB3b3JkLCBsaW5lLCBwYXJhZ3Jh
cGgpLgogICAgKi8KICAga2h0bWw6OkVUZXh0R3JhbnVsYXJpdHkgc2VsZWN0aW9uR3JhbnVsYXJp
dHkoKSBjb25zdDsKQEAgLTYyNCw3ICs2MzAsNyBAQCBwdWJsaWM6CiAgIC8qKgogICAgKiBSZXR1
cm5zIHdoZXRoZXIgc2VsZWN0aW9uIGNhbiBiZSBjaGFuZ2VkLgogICAgKi8KLSAgYm9vbCBzaG91
bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmKSBjb25zdDsKKyAgYm9v
bCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmLCBraHRtbDo6
RVRleHRHcmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSkgY29uc3Q7CiAKICAgLyoqCiAg
ICAqIFJldHVybnMgYSBtYXJrLCB0byBiZSB1c2VkIGFzIGVtYWNzIHVzZXMgaXQuCkBAIC03MDYs
MTIgKzcxMiwxMiBAQCBwdWJsaWM6CiAgIC8qKgogICAgKiBSZXR1cm5zIHdoZXRoZXIgZWRpdGlu
ZyBzaG91bGQgZW5kIGluIHRoZSBnaXZlbiByYW5nZQogICAgKi8KLSAgdmlydHVhbCBib29sIHNo
b3VsZEJlZ2luRWRpdGluZyhjb25zdCBET006OlJhbmdlSW1wbCAqKSBjb25zdDsKKyAgdmlydHVh
bCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAmc2Vs
KSBjb25zdDsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIGVkaXRpbmcgc2hvdWxkIGVu
ZCBpbiB0aGUgZ2l2ZW4gcmFuZ2UKICAgICovCi0gIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0
aW5nKGNvbnN0IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OworICB2aXJ0dWFsIGJvb2wgc2hvdWxk
RW5kRWRpdGluZyhjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAmc2VsKSBjb25zdDsKIAogICAv
KioKICAgICogUmV0dXJucyB0aGUgY29udGVudEVkaXRhYmxlICJvdmVycmlkZSIgdmFsdWUgZm9y
IHRoZSBwYXJ0CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlv
bi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTEKZGlmZiAtcCAtdSAtcjEuOTEgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9z
ZWxlY3Rpb24uY3BwCTI1IEF1ZyAyMDA1IDE3OjQ3OjA1IC0wMDAwCTEuOTEKKysrIFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTI4IEF1ZyAyMDA1IDIzOjUyOjE3IC0wMDAwCkBA
IC02MDYsNiArNjA2LDI0IEBAIHZvaWQgU2VsZWN0aW9uOjpzZXROZWVkc0xheW91dChib29sIGZs
YWcKIAogU2hhcmVkUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlKCkgY29uc3QKIHsK
KyAgICByZXR1cm4gbWFrZVJhbmdlKG1fc3RhcnQsIG1fZW5kKTsKK30KKworU2hhcmVkUHRyPFJh
bmdlSW1wbD4gU2VsZWN0aW9uOjpiYXNlUmFuZ2UoKSBjb25zdAoreworICAgIFBvc2l0aW9uIGZy
b20gPSBtX2Jhc2U7CisgICAgUG9zaXRpb24gdG8gPSBtX2V4dGVudDsKKworICAgIGlmICghIGlz
Rm9yd2FyZFNlbGVjdGlvbigpKSB7CisgICAgICAgIGZyb20gPSBtX2V4dGVudDsKKyAgICAgICAg
dG8gPSBtX2Jhc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VSYW5nZShmcm9tLCB0byk7Cit9
CisKK1NoYXJlZFB0cjxSYW5nZUltcGw+IFNlbGVjdGlvbjo6bWFrZVJhbmdlKGNvbnN0IFBvc2l0
aW9uICZmcm9tLCBjb25zdCBQb3NpdGlvbiAmdG8pIGNvbnN0Cit7CiAgICAgaWYgKGlzTm9uZSgp
KQogICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFJhbmdlSW1wbD4oKTsKIApAQCAtNjEzLDE0ICs2
MzEsMTQgQEAgU2hhcmVkUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlKAogICAgIC8v
IGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUg
RE9NLgogICAgIC8vIEZhaWxpbmcgdG8gY2FsbCB0aGlzIGNhbiByZXN1bHQgaW4gZXF1aXZhbGVu
dFhYWFBvc2l0aW9uIGNhbGxzIHJldHVybmluZwogICAgIC8vIGluY29ycmVjdCByZXN1bHRzLgot
ICAgIG1fc3RhcnQubm9kZSgpLT5nZXREb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBm
cm9tLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBQb3NpdGlv
biBzLCBlOwogICAgIGlmIChpc0NhcmV0KCkpIHsKICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlv
biBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5nZSBzdGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1
cyBtYXRjaAogICAgICAgICAvLyB0aGUgY29udmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3Rl
ZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1pbmF0aW9ucyBiYXNlZAogICAgICAgICAvLyBvbiB0
aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2FyZXQsIGlmIGFueS4gCi0gICAgICAgIHMgPSBtX3N0
YXJ0LnVwc3RyZWFtKCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAg
ICAgcyA9IGZyb20udXBzdHJlYW0oKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigp
OwogICAgICAgICBlID0gczsKICAgICB9CiAgICAgZWxzZSB7CkBAIC02MzYsOCArNjU0LDggQEAg
U2hhcmVkUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlKAogICAgICAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgXiBzZWxlY3RlZAogICAgICAgICAvLwogICAgICAgICBBU1NFUlQo
aXNSYW5nZSgpKTsKLSAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOwotICAgICAgICBl
ID0gbV9lbmQudXBzdHJlYW0oKTsKKyAgICAgICAgcyA9IGZyb20uZG93bnN0cmVhbSgpOworICAg
ICAgICBlID0gdG8udXBzdHJlYW0oKTsKICAgICAgICAgaWYgKFJhbmdlSW1wbDo6Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSkg
PiAwKSB7CiAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUg
ZW5kLgogICAgICAgICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0
IGlmIGNvbGxhcHNlZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgpJbmRl
eDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMzkKZGlmZiAtcCAtdSAtcjEuMzkgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Nl
bGVjdGlvbi5oCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgJMjMgSnVuIDIw
MDUgMTk6NDc6NDggLTAwMDAJMS4zOQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlv
bi5oCTI4IEF1ZyAyMDA1IDIzOjUyOjE3IC0wMDAwCkBAIC0xMDksOCArMTA5LDEwIEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IENBUkVUOyB9
CiAgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5HRTsgfQog
ICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IE5PTkU7
IH0KKyAgICBib29sIGlzRm9yd2FyZFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUlz
U3RhcnQ7IH0KIAogICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gdG9SYW5nZSgpIGNvbnN0
OworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gYmFzZVJhbmdlKCkgY29uc3Q7CiAKICAg
ICB2b2lkIGRlYnVnUG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoa2h0
bWw6OlJlbmRlck9iamVjdCAqciwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CkBAIC0xMzcsNiArMTM5
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5lZWRzQ2FyZXRSZXBhaW50KCk7CiAgICAgdm9pZCBw
YWludENhcmV0KFFQYWludGVyICpwLCBjb25zdCBRUmVjdCAmcmVjdCk7CiAgICAgUVJlY3QgY2Fy
ZXRSZXBhaW50UmVjdCgpIGNvbnN0OworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gbWFr
ZVJhbmdlKGNvbnN0IFBvc2l0aW9uICZmcm9tLCBjb25zdCBQb3NpdGlvbiAmdG8pIGNvbnN0Owog
CiAgICAgaW50IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFUG9zaXRpb25UeXBlLCBi
b29sIHJlY2FsYyA9IGZhbHNlKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9t
X2RvY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQ4CmRpZmYgLXAg
LXUgLXIxLjI0OCBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIFdlYkNvcmUv
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkyNSBBdWcgMjAwNSAxNzo0NzoyMCAtMDAwMAkxLjI0
OAorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCTI4IEF1ZyAyMDA1IDIzOjUy
OjE5IC0wMDAwCkBAIC01Niw2ICs1Niw3IEBACiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCisjaW5jbHVkZSAic2VsZWN0aW9uZGF0YS5oIgogCiAjaW5j
bHVkZSA8a2dsb2JhbHNldHRpbmdzLmg+CiAjaW5jbHVkZSA8a3N0cmluZ2hhbmRsZXIuaD4KQEAg
LTIxNTIsNyArMjE1Myw4IEBAIGJvb2wgRG9jdW1lbnRJbXBsOjpyZWxpbnF1aXNoZXNFZGl0aW5n
Rm8KICAgICBpZiAoIXBhcnQoKSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIHBhcnQoKS0+c2hvdWxkRW5kRWRpdGluZyhyYW5nZU9mQ29udGVudHMocm9vdCku
Z2V0KCkpOworICAgIFNlbGVjdGlvbkRhdGEgc2VsKHJhbmdlT2ZDb250ZW50cyhyb290KS5nZXQo
KSk7CisgICAgcmV0dXJuIHBhcnQoKS0+c2hvdWxkRW5kRWRpdGluZyhzZWwpOwogfQogCiBib29s
IERvY3VtZW50SW1wbDo6YWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlSW1wbCAqbm9kZSkKQEAgLTIx
NjQsNyArMjE2Niw4IEBAIGJvb2wgRG9jdW1lbnRJbXBsOjphY2NlcHRzRWRpdGluZ0ZvY3VzKE4K
ICAgICBpZiAoIXBhcnQoKSB8fCAhcm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIHBhcnQoKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlT2ZDb250ZW50cyhyb290KS5n
ZXQoKSk7CisgICAgU2VsZWN0aW9uRGF0YSBzZWwocmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgp
KTsKKyAgICByZXR1cm4gcGFydCgpLT5zaG91bGRCZWdpbkVkaXRpbmcoc2VsKTsKIH0KIAogY29u
c3QgUVZhbHVlTGlzdDxEYXNoYm9hcmRSZWdpb25WYWx1ZT4gJiBEb2N1bWVudEltcGw6OmRhc2hi
b2FyZFJlZ2lvbnMoKSBjb25zdApJbmRleDogV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIyNgpkaWZmIC1wIC11IC1yMS4yMjYgV2ViQ29yZS9rd3Ev
S1dRS0hUTUxQYXJ0LmgKLS0tIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCTE3IEF1ZyAyMDA1
IDIwOjEyOjE1IC0wMDAwCTEuMjI2CisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAkyOCBB
dWcgMjAwNSAyMzo1MjoyMCAtMDAwMApAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2Uga2h0bWwg
ewogICAgIGNsYXNzIFJlbmRlck9iamVjdDsKICAgICBjbGFzcyBSZW5kZXJTdHlsZTsKICAgICBj
bGFzcyBWaXNpYmxlUG9zaXRpb247CisgICAgY2xhc3MgU2VsZWN0aW9uRGF0YTsKICAgICBzdHJ1
Y3QgRGFzaGJvYXJkUmVnaW9uVmFsdWU7CiB9CiAKQEAgLTM0NSw5ICszNDYsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rp
b24gJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7CiAgICAgdm9pZCByZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IGtodG1s
OjpTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbiwgY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmbmV3U2Vs
ZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IERPTTo6UmFu
Z2VJbXBsICopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFbmRFZGl0aW5nKGNvbnN0
IERPTTo6UmFuZ2VJbXBsICopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VT
ZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgJnNlbCwgYm9vbCBzdGlsbFNlbGVj
dGluZykgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBr
aHRtbDo6U2VsZWN0aW9uRGF0YSAmc2VsKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
RW5kRWRpdGluZyhjb25zdCBraHRtbDo6U2VsZWN0aW9uRGF0YSAmc2VsKSBjb25zdDsKIAogICAg
IEtKUzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKmV4ZWN1dGlvbkNvbnRleHRGb3JET00oKTsKICAg
ICBLSlM6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpiaW5kaW5nUm9vdE9iamVjdCgpOwpJbmRleDog
V2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjY0
CmRpZmYgLXAgLXUgLXIxLjY2NCBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0KLS0tIFdlYkNv
cmUva3dxL0tXUUtIVE1MUGFydC5tbQkyNSBBdWcgMjAwNSAyMzoxMzo1NyAtMDAwMAkxLjY2NAor
KysgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTI4IEF1ZyAyMDA1IDIzOjUyOjIyIC0wMDAw
CkBAIC00Nyw2ICs0Nyw4IEBACiAjaW1wb3J0ICJXZWJDb3JlSW1hZ2VSZW5kZXJlci5oIgogI2lt
cG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJEYXNoYm9hcmRSZWdpb24u
aCIKKyNpbXBvcnQgIldlYlNlbGVjdGlvbi5oIgorI2ltcG9ydCAiV2ViU2VsZWN0aW9uSW50ZXJu
YWwuaCIKIAogI2ltcG9ydCAiY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNpbXBvcnQgImNzc2hlbHBl
ci5oIgpAQCAtNzAsNiArNzIsNyBAQAogI2ltcG9ydCAicmVuZGVyX3RleHQuaCIKICNpbXBvcnQg
InJlbmRlcl90aGVtZS5oIgogI2ltcG9ydCAic2VsZWN0aW9uLmgiCisjaW1wb3J0ICJzZWxlY3Rp
b25kYXRhLmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW1wb3J0ICJ2aXNpYmxl
X3RleHQuaCIKICNpbXBvcnQgInZpc2libGVfdW5pdHMuaCIKQEAgLTEzOCw2ICsxNDEsNyBAQCB1
c2luZyBraHRtbDo6dGhlbWU7CiB1c2luZyBraHRtbDo6UmVuZGVyV2lkZ2V0OwogdXNpbmcga2h0
bWw6OlJpZ2h0V29yZElmT25Cb3VuZGFyeTsKIHVzaW5nIGtodG1sOjpTZWxlY3Rpb247Cit1c2lu
ZyBraHRtbDo6U2VsZWN0aW9uRGF0YTsKIHVzaW5nIGtodG1sOjpTRUxFQ1RfRUxFTUVOVDsKIHVz
aW5nIGtodG1sOjpzZXRFbmQ7CiB1c2luZyBraHRtbDo6c2V0U3RhcnQ7CkBAIC00MTA1LDEyICs0
MTA5LDkgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlYwogICAgIFtf
YnJpZGdlIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb25dOwogfQogCi1ib29sIEtXUUtIVE1MUGFy
dDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmb2xkU2VsZWN0aW9uLCBj
b25zdCBTZWxlY3Rpb24gJm5ld1NlbGVjdGlvbiwga2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSwg
Ym9vbCBzdGlsbFNlbGVjdGluZykgY29uc3QKK2Jvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgJnNlbCwgYm9vbCBzdGlsbFNl
bGVjdGluZykgY29uc3QKIHsKLSAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRET01SYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6b2xkU2VsZWN0aW9uLnRvUmFuZ2Uo
KS5nZXQoKV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9ET01SYW5n
ZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bmV3U2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKV0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eTpzdGF0aWNf
Y2FzdDxOU1NlbGVjdGlvbkFmZmluaXR5PihhZmZpbml0eSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CisgICAgcmV0dXJu
IFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gX3NlbGVjdGlv
bldpdGhTZWxlY3Rpb25EYXRhOiZzZWxdIHN0aWxsU2VsZWN0aW5nOnN0aWxsU2VsZWN0aW5nXTsK
IH0KIAogdm9pZCBLV1FLSFRNTFBhcnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCkBAIC00
MTI4LDE2ICs0MTI5LDE0IEBAIGJvb2wgS1dRS0hUTUxQYXJ0Ojppc0NvbnRlbnRFZGl0YWJsZSgp
IGMKICAgICByZXR1cm4gS0hUTUxQYXJ0Ojppc0NvbnRlbnRFZGl0YWJsZSgpIHx8IFtfYnJpZGdl
IGlzRWRpdGFibGVdOwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkQmVnaW5FZGl0aW5n
KGNvbnN0IFJhbmdlSW1wbCAqcmFuZ2UpIGNvbnN0Citib29sIEtXUUtIVE1MUGFydDo6c2hvdWxk
QmVnaW5FZGl0aW5nKGNvbnN0IFNlbGVjdGlvbkRhdGEgJnNlbCkgY29uc3QKIHsKLSAgICBBU1NF
UlQocmFuZ2UpOwotICAgIHJldHVybiBbX2JyaWRnZSBzaG91bGRCZWdpbkVkaXRpbmc6W0RPTVJh
bmdlIF9yYW5nZVdpdGhJbXBsOmNvbnN0X2Nhc3Q8UmFuZ2VJbXBsICo+KHJhbmdlKV1dOworICAg
IHJldHVybiBbX2JyaWRnZSBzaG91bGRCZWdpbkVkaXRpbmc6W1dlYlNlbGVjdGlvbiBfc2VsZWN0
aW9uV2l0aFNlbGVjdGlvbkRhdGE6JnNlbF1dOwogfQogCi1ib29sIEtXUUtIVE1MUGFydDo6c2hv
dWxkRW5kRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJhbmdlKSBjb25zdAorYm9vbCBLV1FLSFRN
TFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgU2VsZWN0aW9uRGF0YSAmc2VsKSBjb25zdAog
ewotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZEVuZEVkaXRp
bmc6W0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOmNvbnN0X2Nhc3Q8UmFuZ2VJbXBsICo+KHJhbmdl
KV1dOworICAgIHJldHVybiBbX2JyaWRnZSBzaG91bGRFbmRFZGl0aW5nOltXZWJTZWxlY3Rpb24g
X3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRhOiZzZWxdXTsKIH0KIAogc3RhdGljIFFWYWx1ZUxp
c3Q8S1dRS0hUTUxQYXJ0OjpNYXJrZWRUZXh0VW5kZXJsaW5lPiBjb252ZXJ0QXR0cmlidXRlc1Rv
VW5kZXJsaW5lcyhjb25zdCBET006OlJhbmdlSW1wbCAqbWFya2VkVGV4dFJhbmdlLCBOU0FycmF5
ICphdHRyaWJ1dGVzLCBOU0FycmF5ICpyYW5nZXMpCkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3Jl
QnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNv
cmVCcmlkZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNDUKZGlmZiAtcCAtdSAtcjEuMzQ1
IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaAotLS0gV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRn
ZS5oCTE3IEF1ZyAyMDA1IDIwOjEyOjE1IC0wMDAwCTEuMzQ1CisrKyBXZWJDb3JlL2t3cS9XZWJD
b3JlQnJpZGdlLmgJMjggQXVnIDIwMDUgMjM6NTI6MjMgLTAwMDAKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZS5oPgogI2ltcG9ydCA8SmF2YVZNL2pu
aS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlS2V5Ym9hcmRBY2Nlc3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvV2ViU2VsZWN0aW9uLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogCkBAIC0zMzcs
NyArMzM4LDggQEAgdHlwZWRlZiBlbnVtCiAtIChOU1JlY3QpY2FyZXRSZWN0QXROb2RlOihET01O
b2RlICopbm9kZSBvZmZzZXQ6KGludClvZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpYWZmaW5pdHk7CiAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2U7CiAKLS0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBh
ZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBjbG9zZVR5cGlu
ZzooQk9PTCljbG9zZVR5cGluZzsKKy0gKHZvaWQpc2V0U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24g
KilzZWwgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmc7CistIChXZWJTZWxlY3Rpb24gKilz
ZWxlY3Rpb247CiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2U7CiAtIChOU1NlbGVjdGlv
bkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5OwogCkBAIC0zODUsNyArMzg3LDggQEAgdHlwZWRl
ZiBlbnVtCiAtICh2b2lkKWFsdGVyQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJh
dGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViU2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlv
biBncmFudWxhcml0eTooV2ViU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAtIChE
T01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFs
dGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNlOihmbG9hdClkaXN0YW5jZTsKIC0g
KHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVy
YXRpb24gdmVydGljYWxEaXN0YW5jZTooZmxvYXQpZGlzdGFuY2U7Ci0tIChXZWJTZWxlY3Rpb25H
cmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eTsKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJl
Y3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uOworLSAoV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5
KXNlbGVjdGlvbkdyYW51bGFyaXR5OwogLSAoRE9NUmFuZ2UgKilzbWFydERlbGV0ZVJhbmdlRm9y
UHJvcG9zZWRSYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZENoYXJSYW5nZTsKIC0gKHZvaWQpc21h
cnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6
KERPTVJhbmdlICopY2hhclJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiop
YmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZzsKIC0gKEJP
T0wpY2FuRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CkBAIC00MTEsNyArNDE0LDcgQEAg
dHlwZWRlZiBlbnVtCiAtICh2b2lkKW1vdmVTZWxlY3Rpb25Ub0RyYWdDYXJldDooRE9NRG9jdW1l
bnRGcmFnbWVudCAqKXNlbGVjdGlvbkZyYWdtZW50IHNtYXJ0TW92ZTooQk9PTClzbWFydE1vdmU7
CiAtICh2b2lkKW1vdmVEcmFnQ2FyZXRUb1BvaW50OihOU1BvaW50KXBvaW50OwogLSAodm9pZCly
ZW1vdmVEcmFnQ2FyZXQ7Ci0tIChET01SYW5nZSAqKWRyYWdDYXJldERPTVJhbmdlOworLSAoV2Vi
U2VsZWN0aW9uICopZHJhZ0NhcmV0U2VsZWN0aW9uOwogLSAoRE9NUmFuZ2UgKillZGl0YWJsZURP
TVJhbmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiAKIC0gKHZvaWQpZGVsZXRlU2VsZWN0aW9u
V2l0aFNtYXJ0RGVsZXRlOihCT09MKXNtYXJ0RGVsZXRlOwpAQCAtNjIxLDkgKzYyNCw5IEBAIHR5
cGVkZWYgZW51bQogLSAodm9pZClyZXNwb25kVG9DaGFuZ2VkQ29udGVudHM7CiAtICh2b2lkKXNl
dElzU2VsZWN0ZWQ6KEJPT0wpaXNTZWxlY3RlZCBmb3JWaWV3OihOU1ZpZXcgKil2aWV3OwogLSAo
Qk9PTClpc0VkaXRhYmxlOwotLSAoQk9PTClzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihE
T01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFu
Z2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxT
ZWxlY3Rpbmc6KEJPT0wpZmxhZzsKLS0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0aW5nOihET01SYW5n
ZSAqKXJhbmdlOwotLSAoQk9PTClzaG91bGRFbmRFZGl0aW5nOihET01SYW5nZSAqKXJhbmdlOwor
LSAoQk9PTClzaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzooV2ViU2VsZWN0aW9uICopc2VsIHN0aWxs
U2VsZWN0aW5nOihCT09MKWZsYWc7CistIChCT09MKXNob3VsZEJlZ2luRWRpdGluZzooV2ViU2Vs
ZWN0aW9uICopc2VsOworLSAoQk9PTClzaG91bGRFbmRFZGl0aW5nOihXZWJTZWxlY3Rpb24gKilz
ZWw7CiAtIChCT09MKWNhblBhc3RlOwogCiAtIChOU1N0cmluZyAqKW92ZXJyaWRlTWVkaWFUeXBl
OwpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MTAKZGlmZiAtcCAtdSAtcjEuNDEwIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2Uu
bW0KLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JMjUgQXVnIDIwMDUgMjM6MTM6NTgg
LTAwMDAJMS40MTAKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JMjggQXVnIDIwMDUg
MjM6NTI6MjQgLTAwMDAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbXBvcnQgIldlYkNvcmVUZXh0UmVu
ZGVyZXJGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKICNpbXBvcnQg
IldlYkNvcmVTZXR0aW5ncy5oIgorI2ltcG9ydCAiV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCIKIAog
QGNsYXNzIE5TVmlldzsKIApAQCAtMTU3MSw0OSArMTU3MiwzMCBAQCBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgW3NlbGYgZW5zdXJlU2VsZWN0aW9uVmlzaWJs
ZV07CiB9CiAKLS0gKFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5
CistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHkKIHsK
LSAgICAvLyBOT1RFOiBUaGUgZW51bXMgKm11c3QqIG1hdGNoIHRoZSB2ZXJ5IHNpbWlsYXIgb25l
cyBkZWNsYXJlZCBpbiBkb21fc2VsZWN0aW9uLmgKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
U2VsZWN0aW9uR3JhbnVsYXJpdHk+KF9wYXJ0LT5zZWxlY3Rpb25HcmFudWxhcml0eSgpKTsKKyAg
ICByZXR1cm4gW1tzZWxmIHNlbGVjdGlvbl0gZ3JhbnVsYXJpdHldOwogfQogCi0tICh2b2lkKXNl
dFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9u
QWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmcK
Ky0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uCiB7Ci0gICAg
Tm9kZUltcGwgKnN0YXJ0Q29udGFpbmVyID0gW1tyYW5nZSBzdGFydENvbnRhaW5lcl0gX25vZGVJ
bXBsXTsKLSAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyID0gW1tyYW5nZSBlbmRDb250YWluZXJd
IF9ub2RlSW1wbF07Ci0gICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyKTsKLSAgICBBU1NFUlQoZW5k
Q29udGFpbmVyKTsKLSAgICBBU1NFUlQoc3RhcnRDb250YWluZXItPmdldERvY3VtZW50KCkpOwot
ICAgIEFTU0VSVChzdGFydENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSA9PSBlbmRDb250YWluZXIt
PmdldERvY3VtZW50KCkpOwotICAgIAotICAgIF9wYXJ0LT54bWxEb2NJbXBsKCktPnVwZGF0ZUxh
eW91dCgpOwotCi0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc3RhdGljX2Nhc3Q8RUFmZmluaXR5
PihzZWxlY3Rpb25BZmZpbml0eSk7CisgICAgcmV0dXJuIFtbc2VsZiBzZWxlY3Rpb25dIGRpcmVj
dGlvbl07Cit9CiAKLSAgICBib29sIHJhbmdlQ29sbGFwc2VkID0gW3JhbmdlIGNvbGxhcHNlZF07
Ci0gICAgaWYgKCFyYW5nZUNvbGxhcHNlZCkKLSAgICAgICAgYWZmaW5pdHkgPSBET1dOU1RSRUFN
OwotICAgIAotICAgIC8vIFdvcmsgYXJvdW5kIGJ1ZyB3aGVyZSBpc1JlbmRlcmVkQ29udGVudCBy
ZXR1cm5zIGZhbHNlIGZvciA8YnI+IGVsZW1lbnRzIGF0IHRoZSBlbmRzIG9mIGxpbmVzLgotICAg
IC8vIElmIHRoYXQgYnVnIHdhc24ndCBhbiBpc3N1ZSwgd2UgY291bGQganVzdCBtYWtlIHRoZSBw
b3NpdGlvbiBmcm9tIHRoZSByYW5nZSBkaXJlY3RseS4KLSAgICBQb3NpdGlvbiBzdGFydChzdGFy
dENvbnRhaW5lciwgW3JhbmdlIHN0YXJ0T2Zmc2V0XSk7Ci0gICAgUG9zaXRpb24gZW5kKGVuZENv
bnRhaW5lciwgW3JhbmdlIGVuZE9mZnNldF0pOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
U3RhcnQoc3RhcnQsIGFmZmluaXR5KTsKLSAgICBzdGFydCA9IHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpOwotCi0gICAgaWYgKHJhbmdlQ29sbGFwc2VkKSB7Ci0gICAgICAgIHNldEFmZmlu
aXR5VXNpbmdMaW5lUG9zaXRpb24odmlzaWJsZVN0YXJ0KTsKLSAgICAgICAgYWZmaW5pdHkgPSB2
aXNpYmxlU3RhcnQuYWZmaW5pdHkoKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQ2FuIHdlIHBy
b3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbihzdGFydCwgYWZm
aW5pdHksIGVuZCwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBfcGFydC0+c2V0
U2VsZWN0aW9uKHNlbGVjdGlvbiwgY2xvc2VUeXBpbmcpOworLSAodm9pZClzZXRTZWxlY3Rpb246
KFdlYlNlbGVjdGlvbiAqKXNlbCBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZworeworICAg
IFtzZWwgX3NldFNlbGVjdGlvbkluUGFydDpfcGFydCBjbG9zZVR5cGluZzpjbG9zZVR5cGluZ107
CiB9CiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIHJldHVybiBbRE9N
UmFuZ2UgX3JhbmdlV2l0aEltcGw6X3BhcnQtPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKV07
CisgICAgcmV0dXJuIFtbc2VsZiBzZWxlY3Rpb25dIHJhbmdlXTsKK30KKworLSAoV2ViU2VsZWN0
aW9uICopc2VsZWN0aW9uCit7CisgICAga2h0bWw6OlNlbGVjdGlvbkRhdGEgc2QgPSBfcGFydC0+
c2VsZWN0aW9uRGF0YSgpOworICAgIHJldHVybiBbV2ViU2VsZWN0aW9uIF9zZWxlY3Rpb25XaXRo
U2VsZWN0aW9uRGF0YTomc2RdOwogfQogCiAtIChOU1JhbmdlKWNvbnZlcnRUb05TUmFuZ2U6KERP
TTo6UmFuZ2VJbXBsICopcmFuZ2UKQEAgLTE5MzMsOSArMTkxNSw5IEBAIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBfcGFydC0+c2V0RHJhZ0NhcmV0KFNlbGVj
dGlvbigpKTsKIH0KIAotLSAoRE9NUmFuZ2UgKilkcmFnQ2FyZXRET01SYW5nZQorLSAoV2ViU2Vs
ZWN0aW9uICopZHJhZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfcmFu
Z2VXaXRoSW1wbDpfcGFydC0+ZHJhZ0NhcmV0KCkudG9SYW5nZSgpLmdldCgpXTsKKyAgICByZXR1
cm4gW1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdpdGhJ
bXBsOl9wYXJ0LT5kcmFnQ2FyZXQoKS50b1JhbmdlKCkuZ2V0KCldIGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKIH0KIAogLSAoRE9NUmFuZ2UgKillZGl0YWJsZURPTVJh
bmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKSW5kZXg6IFdlYlZpZXcuc3VicHJvai9XZWJFZGl0
aW5nRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUgV2ViVmlldy5zdWJwcm9q
L1dlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaAotLS0gV2ViVmlldy5zdWJwcm9qL1dlYkVkaXRp
bmdEZWxlZ2F0ZVByaXZhdGUuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBXZWJWaWV3
LnN1YnByb2ovV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oCTI4IEF1ZyAyMDA1IDE1OjI1OjQ1
IC0wMDAwCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCitAY2xhc3MgV2ViVmlldzsK
K0BjbGFzcyBXZWJTZWxlY3Rpb247CisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYkVkaXRpbmdE
ZWxlZ2F0ZVBlbmRpbmdQdWJsaWMpCistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IHNob3VsZEJlZ2luRWRpdGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247
CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEVuZEVkaXRpbmdJblNl
bGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoQk9PTCl3ZWJWaWV3OihXZWJW
aWV3ICopd2ViVmlldyBzaG91bGRJbnNlcnROb2RlOihET01Ob2RlICopbm9kZSByZXBsYWNpbmdT
ZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbiBnaXZlbkFjdGlvbjooV2ViVmlld0lu
c2VydEFjdGlvbilhY3Rpb247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNo
b3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdTZWxlY3Rpb246KFdlYlNl
bGVjdGlvbiAqKXNlbGVjdGlvbiBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rp
b247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZERlbGV0ZVNlbGVj
dGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3
ICopd2ViVmlldyBzaG91bGRDaGFuZ2VTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKWN1cnJlbnQg
dG9TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXByb3Bvc2VkIHN0aWxsU2VsZWN0aW5nOihCT09M
KWZsYWc7CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEFwcGx5U3R5
bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB0b0VsZW1lbnRzSW5TZWxlY3Rpb246
KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKK0BlbmQKKwpJbmRleDogV2ViS2l0L1dlYkNvcmVT
dXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkJyaWRnZS5tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjM2OQpkaWZmIC1wIC11IC1yMS4zNjkgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1
YnByb2ovV2ViQnJpZGdlLm0KLS0tIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkJy
aWRnZS5tCTI0IEF1ZyAyMDA1IDAwOjM0OjU3IC0wMDAwCTEuMzY5CisrKyBXZWJLaXQvV2ViQ29y
ZVN1cHBvcnQuc3VicHJvai9XZWJCcmlkZ2UubQkyOCBBdWcgMjAwNSAyMzo1Mjo0NSAtMDAwMApA
QCAtMTQ2NCwxOSArMTQ2NCwxOSBAQCBzdGF0aWMgaWQgPFdlYkZvcm1EZWxlZ2F0ZT4gZm9ybURl
bGVnYXRlCiAgICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIGlzRWRpdGFibGVdOwogfQogCi0t
IChCT09MKXNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopY3VycmVudFJh
bmdlIHRvRE9NUmFuZ2U6KERPTVJhbmdlICopcHJvcG9zZWRSYW5nZSBhZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFn
CistIChCT09MKXNob3VsZENoYW5nZVNlbGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKilzZWwgc3Rp
bGxTZWxlY3Rpbmc6KEJPT0wpZmxhZwogewotICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBf
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpjdXJyZW50UmFuZ2UgdG9ET01SYW5nZTpwcm9w
b3NlZFJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOmZsYWdd
OworICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86
c2VsIHN0aWxsU2VsZWN0aW5nOmZsYWddOwogfQogCi0tIChCT09MKXNob3VsZEJlZ2luRWRpdGlu
ZzooRE9NUmFuZ2UgKilyYW5nZQorLSAoQk9PTClzaG91bGRCZWdpbkVkaXRpbmc6KFdlYlNlbGVj
dGlvbiAqKXNlbAogewotICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBfc2hvdWxkQmVnaW5F
ZGl0aW5nSW5ET01SYW5nZTpyYW5nZV07CisgICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9z
aG91bGRCZWdpbkVkaXRpbmdJblNlbGVjdGlvbjpzZWxdOwogfQogCi0tIChCT09MKXNob3VsZEVu
ZEVkaXRpbmc6KERPTVJhbmdlICopcmFuZ2UKKy0gKEJPT0wpc2hvdWxkRW5kRWRpdGluZzooV2Vi
U2VsZWN0aW9uICopc2VsCiB7Ci0gICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXddIF9zaG91bGRF
bmRFZGl0aW5nSW5ET01SYW5nZTpyYW5nZV07CisgICAgcmV0dXJuIFtbX2ZyYW1lIHdlYlZpZXdd
IF9zaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKIH0KIAogLSAodm9pZCl3aW5kb3dP
YmplY3RDbGVhcmVkCkluZGV4OiBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaix2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXAgLXUgLXIx
LjYgV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjYgQXVnIDIwMDUgMjI6MDI6NTggLTAwMDAJ
MS42CisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJMjggQXVnIDIw
MDUgMjM6NTI6NDcgLTAwMDAKQEAgLTI4Myw2ICsyODMsNyBAQAogCQk5Mzk4MTEyQzA4MjRCRjAx
MDA4REYwMzggLyogV2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzM4QzlFQTAzRkFEM0RGMDMyMUZCRTAgLyogV2ViQ29y
ZS5mcmFtZXdvcmsgKi87IH07CiAJCTkzOTgxMTJFMDgyNEJGMDEwMDhERjAzOCAvKiBsaWJpY3Vj
b3JlLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNENjIzREQwNTFFNzkxRjAwMkY0N0REIC8qIGxpYmljdWNvcmUuZHlsaWIgKi87IH07CiAJ
CTkzOTgxMTJGMDgyNEJGMDEwMDhERjAzOCAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzBFODFFMDA1ODUzQUMw
MDBBRDA4OTEgLyogU2VjdXJpdHkuZnJhbWV3b3JrICovOyB9OworCQlBRTMzNTYxQTA4QkM0MUQx
MDBBOEFDNDkgLyogV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU2MTkwOEJDNDFEMTAwQThBQzQ5IC8q
IFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlFRDZCRTJFNzA4OEMzMkI1MDA0NERFREMgLyogV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFRDZCRTJFNTA4OEMzMkI1MDA0NERFREMgLyogV2ViTlNBdHRyaWJ1dGVk
U3RyaW5nRXh0cmFzLmggKi87IH07CiAJCUVENkJFMkU4MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJO
U0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEVENkJFMkU2MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0
ZWRTdHJpbmdFeHRyYXMubSAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpA
QCAtNDk4LDYgKzQ5OSw3IEBACiAJCTlDRTFGOEEyMDJBNUM2RjMwRUNBMkFDRCAvKiBXZWJJbWFn
ZVJlbmRlcmVyRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJ
bWFnZVJlbmRlcmVyRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Q0Ux
RjhBMzAyQTVDNkYzMEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUNGMEUyNDkwMjEzNjFCMDBFQ0ExNkVBIC8q
IFdlYkZyYW1lUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJG
cmFtZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU2MTkwOEJD
NDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkUwN0NFQTcwNDc1MzhGMDAwQ0EyODlDIC8qIFdlYkRh
dGFiYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhYmFzZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRTA3Q0VBODA0NzUzOEYwMDBDQTI4OUMg
LyogV2ViRGF0YWJhc2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdl
YkRhdGFiYXNlLm07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJFMDdDRUE5MDQ3NTM4
RjAwMENBMjg5QyAvKiBXZWJGaWxlRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkZpbGVEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODcxLDYgKzg3Myw3IEBACiAJCQkJMzk0NDYwNkIwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkR5
bmFtaWNTY3JvbGxCYXJzVmlldy5oICovLAogCQkJCTM5NDQ2MDZDMDIwRjUwRUQwRUNBMTc2NyAv
KiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubSAqLywKIAkJCQlCRTRGQkVDQjA2NTNERjQ3MDA1
RURFMTUgLyogV2ViRWRpdGluZ0RlbGVnYXRlLmggKi8sCisJCQkJQUUzMzU2MTkwOEJDNDFEMTAw
QThBQzQ5IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLywKIAkJCQkyRDgxREFCMjAz
RUIwQjJEMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlLmggKi8sCiAJCQkJMkQ4MURBQjMwM0VC
MEIyRDAwQTgwMTY2IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tICovLAogCQkJCTUxNTJGQUU1MDMzRkM1
MjIwMENBMkFDRCAvKiBXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oICovLApAQCAtMTI1Nyw2ICsxMjYw
LDcgQEAKIAkJCQk3RTZGRUYwMTA4OTg1QTNFMDBDNDRDM0YgLyogV2ViRGVmYXVsdFNjcmlwdERl
YnVnRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRjA4MDg5ODVBNzIwMEM0NEMz
RiAvKiBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTZGRUYw
QTA4OTg1QTcyMDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUFFMzM1NjFBMDhCQzQxRDEwMEE4QUM0OSAvKiBXZWJFZGl0aW5nRGVs
ZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnBy
b2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUubSx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjggV2ViS2l0L1dlYlZpZXcu
c3VicHJvai9XZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0KLS0tIFdlYktpdC9XZWJWaWV3LnN1
YnByb2ovV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCTUgSnVuIDIwMDUgMTc6NTQ6NDYgLTAw
MDAJMS44CisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdh
dGUubQkyOCBBdWcgMjAwNSAyMzo1Mjo0NyAtMDAwMApAQCAtMzQsNiArMzQsOCBAQAogI2ltcG9y
dCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXcu
aD4KIAorI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oIgorCiBAaW1wbGVtZW50
YXRpb24gV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZQogCiBzdGF0aWMgV2ViRGVmYXVsdEVkaXRp
bmdEZWxlZ2F0ZSAqc2hhcmVkRGVsZWdhdGUgPSBuaWw7CkBAIC0xMTYsNCArMTE4LDQwIEBAIHN0
YXRpYyBXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlICpzaGFyZWQKICAgICByZXR1cm4gbmlsOwog
fQogCisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQmVnaW5FZGl0
aW5nSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBZ
RVM7Cit9CisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkRW5kRWRp
dGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICByZXR1cm4g
WUVTOworfQorCistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHNob3VsZEluc2Vy
dE5vZGU6KERPTU5vZGUgKilub2RlIHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICop
c2VsZWN0aW9uIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAg
IHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hv
dWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2Vs
ZWN0aW9uICopc2VsZWN0aW9uIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlv
bgoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdl
YlZpZXcgc2hvdWxkRGVsZXRlU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sK
KyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IHNob3VsZENoYW5nZVNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopY3VycmVudCB0b1NlbGVjdGlv
bjooV2ViU2VsZWN0aW9uICopcHJvcG9zZWQgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZworewor
ICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcg
c2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHRvRWxlbWVu
dHNJblNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFlF
UzsKK30KKwogQGVuZApJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dl
YkhUTUxWaWV3Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDY2CmRpZmYgLXAgLXUgLXIxLjQ2
NiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0KLS0tIFdlYktpdC9XZWJWaWV3
LnN1YnByb2ovV2ViSFRNTFZpZXcubQkyNyBBdWcgMjAwNSAwMDowMzo0MyAtMDAwMAkxLjQ2Ngor
KysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCTI4IEF1ZyAyMDA1IDIzOjUy
OjU0IC0wMDAwCkBAIC0zNiw5ICszNiwxMSBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkNsaXBWaWV3
Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRGF0YVByb3RvY29sLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViRGF0YVNvdXJjZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJEZWZhdWx0RWRpdGlu
Z0RlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRG9jdW1lbnRJbnRlcm5hbC5oPgogI2lt
cG9ydCA8V2ViS2l0L1dlYkRPTU9wZXJhdGlvbnNQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V2ViRWRpdGluZ0RlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRWRpdGluZ0RlbGVnYXRl
UHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lUHJpdmF0ZS5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYkZyYW1lVmlld0ludGVybmFsLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViSFRNTFZp
ZXdJbnRlcm5hbC5oPgpAQCAtNjksNiArNzEsOCBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYlZpZXdQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAorI2ltcG9ydCA8
V2ViQ29yZS9XZWJTZWxlY3Rpb24uaD4KKwogI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0
eS5oPgogCiAvLyBJbmNsdWRlZCBzbyB1c2FnZSBvZiBfTlNTb2Z0TGlua2luZ0dldEZyYW1ld29y
a0Z1bmNQdHIgd2lsbCBjb21waWxlCkBAIC0xNzIsMTggKzE3NiwyMSBAQCB2b2lkICpfTlNTb2Z0
TGlua2luZ0dldEZyYW1ld29ya0Z1bmNQdHIoCiAtIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6
KE5TQXJyYXkgKilwYXRoczsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5U
ZXh0OihCT09MKWFsbG93UGxhaW5UZXh0IGNob3NlUGxhaW5UZXh0OihCT09MICopY2hvc2VQbGFp
blRleHQ7CiAtICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OwotLSAoQk9PTClfc2hv
dWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNp
bmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFj
dGlvbilhY3Rpb247CistIChCT09MKV9zaG91bGRBcHBseVN0eWxlOihET01DU1NTdHlsZURlY2xh
cmF0aW9uICopc3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxl
Y3Rpb247CistIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVwbGFj
aW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uOworLSAoQk9PTClfc2hvdWxkSW5zZXJ0Tm9kZTooRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2Vs
IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wpX3Nob3Vs
ZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5n
U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRB
Y3Rpb24pYWN0aW9uOwogLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihO
U1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOwog
LSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0OwogLSAodm9pZClfdXBkYXRlVGV4dFNpemVN
dWx0aXBsaWVyOwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZTsKLS0gKEJPT0wpX3Nob3Vs
ZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwotLSAodm9pZClfZGVsZXRlUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UgCi0gICAgICAgICAgICBraWxsUmluZzooQk9PTClraWxsUmluZyAKLSAg
ICAgICAgICAgICBwcmVwZW5kOihCT09MKXByZXBlbmQgCi0gICAgICAgc21hcnREZWxldGVPSzoo
Qk9PTClzbWFydERlbGV0ZU9LCi0gICAgICBkZWxldGlvbkFjdGlvbjooV2ViRGVsZXRpb25BY3Rp
b24pZGVsZXRpb25BY3Rpb247Ci0tICh2b2lkKV9kZWxldGVTZWxlY3Rpb247CistIChXZWJTZWxl
Y3Rpb24gKilfc2VsZWN0aW9uOworLSAodm9pZClfZGVsZXRlU2VsZWN0aW9uOihXZWJTZWxlY3Rp
b24gKilzZWwgCisgICAgICAgICAgICAgICAga2lsbFJpbmc6KEJPT0wpa2lsbFJpbmcgCisgICAg
ICAgICAgICAgICAgIHByZXBlbmQ6KEJPT0wpcHJlcGVuZCAKKyAgICAgICAgICAgc21hcnREZWxl
dGVPSzooQk9PTClzbWFydERlbGV0ZU9LCisgICAgICAgICAgZGVsZXRpb25BY3Rpb246KFdlYkRl
bGV0aW9uQWN0aW9uKWRlbGV0aW9uQWN0aW9uOworLSAodm9pZClfZGVsZXRlQ3VycmVudFNlbGVj
dGlvbjsKIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkOwogLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAq
KWV2ZW50OwogLSAodm9pZCl1cGRhdGVGb2N1c1N0YXRlOwpAQCAtNDQwLDI3ICs0NDcsNjMgQEAg
dm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyKAogICAgIEJPT0wgY2hvc2VQ
bGFpblRleHQ7CiAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6YWxs
b3dQbGFpblRleHQgY2hvc2VQbGFpblRleHQ6JmNob3NlUGxhaW5UZXh0XTsKICAgICBXZWJCcmlk
Z2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwotICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBf
c2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6W3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKSB7Cisg
ICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCBy
ZXBsYWNpbmdTZWxlY3Rpb246W3NlbGYgX3NlbGVjdGlvbl0gZ2l2ZW5BY3Rpb246V2ViVmlld0lu
c2VydEFjdGlvblBhc3RlZF0pIHsKICAgICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0
aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2Vs
ZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF0gbWF0Y2hTdHlsZTpj
aG9zZVBsYWluVGV4dF07CiAgICAgfQogfQogCi0tIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVu
dDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01S
YW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgorLSAo
Qk9PTClfc2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHRv
RWxlbWVudHNJblNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgV2Vi
VmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICBpZCBkZWxlZ2F0ZSA9IFt3ZWJW
aWV3IGVkaXRpbmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQXBwbHlTdHlsZTp0b0VsZW1lbnRzSW5TZWxlY3Rp
b246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
QXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5TZWxlY3Rpb246c2VsZWN0aW9uXTsKKyAgICB9
IGVsc2UgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6
c2hvdWxkQXBwbHlTdHlsZTp0b0VsZW1lbnRzSW5ET01SYW5nZTopXSkgeworICAgICAgICByZXR1
cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxl
bWVudHNJbkRPTVJhbmdlOltzZWxlY3Rpb24gcmFuZ2VdXTsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlIHNoYXJlZEVkaXRpbmdEZWxlZ2F0
ZV0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luU2Vs
ZWN0aW9uOnNlbGVjdGlvbl07CisgICAgfQorfQorCistIChCT09MKV9zaG91bGRJbnNlcnRUZXh0
OihOU1N0cmluZyAqKXRleHQgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwg
Z2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCiB7CiAgICAgV2ViVmlldyAq
d2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICBpZCBkZWxlZ2F0ZSA9IFt3ZWJWaWV3IGVk
aXRpbmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKHdlYlZpZXc6c2hvdWxkSW5zZXJ0VGV4dDpyZXBsYWNpbmdTZWxlY3Rpb246Z2l2ZW5B
Y3Rpb246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjpzZWwgZ2l2ZW5BY3Rpb246YWN0
aW9uXTsKKyAgICB9IGVsc2UgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlZpZXc6c2hvdWxkSW5zZXJ0VGV4dDpyZXBsYWNpbmdET01SYW5nZTpnaXZlbkFjdGlv
bjopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJ
bnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6W3NlbCByYW5nZV0gZ2l2ZW5BY3Rpb246
YWN0aW9uXTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGlu
Z0RlbGVnYXRlIHNoYXJlZEVkaXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZElu
c2VydFRleHQ6dGV4dCByZXBsYWNpbmdTZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9uOmFjdGlvbl07
CisgICAgfQorfQorCistIChCT09MKV9zaG91bGRJbnNlcnROb2RlOihET01Eb2N1bWVudEZyYWdt
ZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgZ2l2
ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CisgICAgV2ViVmlldyAqd2Vi
VmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICBpZCBkZWxlZ2F0ZSA9IFt3ZWJWaWV3IGVkaXRp
bmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKHdlYlZpZXc6c2hvdWxkSW5zZXJ0Tm9kZTpyZXBsYWNpbmdTZWxlY3Rpb246Z2l2ZW5BY3Rp
b246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
SW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdTZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9uOmFj
dGlvbl07CisgICAgfSBlbHNlIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3Rvcih3ZWJWaWV3OnNob3VsZEluc2VydE5vZGU6cmVwbGFjaW5nRE9NUmFuZ2U6Z2l2ZW5BY3Rp
b246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
SW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpbc2VsIHJhbmdlXSBnaXZlbkFj
dGlvbjphY3Rpb25dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRF
ZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0RlbGVnYXRlXSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkSW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdTZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9u
OmFjdGlvbl07CisgICAgfQorfQorCistIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9N
RG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0
aW9uICopc2VsIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgorewogICAg
IERPTU5vZGUgKmNoaWxkID0gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdOwogICAgIGlmIChbZnJhZ21l
bnQgbGFzdENoaWxkXSA9PSBjaGlsZCAmJiBbY2hpbGQgaXNLaW5kT2ZDbGFzczpbRE9NQ2hhcmFj
dGVyRGF0YSBjbGFzc11dKSB7Ci0gICAgICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6WyhET01DaGFy
YWN0ZXJEYXRhICopY2hpbGQgZGF0YV0gcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rp
b246YWN0aW9uXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9zaG91bGRJbnNlcnRUZXh0OlsoRE9N
Q2hhcmFjdGVyRGF0YSAqKWNoaWxkIGRhdGFdIHJlcGxhY2luZ1NlbGVjdGlvbjpzZWwgZ2l2ZW5B
Y3Rpb246YWN0aW9uXTsKICAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gW1t3ZWJWaWV3IF9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2Rl
OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Cisg
ICAgICAgIHJldHVybiBbc2VsZiBfc2hvdWxkSW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdT
ZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9uOmFjdGlvbl07CiAgICAgfQogfQogCiAtIChCT09MKV9z
aG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlv
bjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KIHsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0g
W3NlbGYgX3dlYlZpZXddOwotICAgIERPTVJhbmdlICpzZWxlY3RlZFJhbmdlID0gW3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNpbmdET01S
YW5nZTpzZWxlY3RlZFJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAgcmV0dXJuIFtzZWxm
IF9zaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nU2VsZWN0aW9uOltzZWxmIF9zZWxlY3Rp
b25dIGdpdmVuQWN0aW9uOmFjdGlvbl07CiB9CiAKIC8vIENhbGN1bGF0ZSB0aGUgdmVydGljYWwg
c2l6ZSBvZiB0aGUgdmlldyB0aGF0IGZpdHMgb24gYSBzaW5nbGUgcGFnZQpAQCAtNDg0LDI1ICs1
MjcsMzggQEAgdm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyKAogICAgIHJl
dHVybiBbW3NlbGYgX2JyaWRnZV0gc2VsZWN0ZWRET01SYW5nZV07CiB9CiAKLS0gKEJPT0wpX3No
b3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlCistIChXZWJTZWxlY3Rpb24gKilfc2Vs
ZWN0aW9uCiB7Ci0gICAgaWYgKHJhbmdlID09IG5pbCB8fCBbcmFuZ2UgY29sbGFwc2VkXSkKKyAg
ICByZXR1cm4gW1tzZWxmIF9icmlkZ2VdIHNlbGVjdGlvbl07Cit9CisKKy0gKEJPT0wpX3Nob3Vs
ZERlbGV0ZVNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsCit7CisgICAgaWYgKHNlbCA9PSBu
aWwgfHwgW1tzZWwgcmFuZ2VdIGNvbGxhcHNlZF0pCiAgICAgICAgIHJldHVybiBOTzsKICAgICAK
LSAgICBpZiAoIVtbc2VsZiBfYnJpZGdlXSBjYW5EZWxldGVSYW5nZTpyYW5nZV0pCisgICAgaWYg
KCFbW3NlbGYgX2JyaWRnZV0gY2FuRGVsZXRlUmFuZ2U6W3NlbCByYW5nZV1dKQogICAgICAgICBy
ZXR1cm4gTk87CiAgICAgICAgIAogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmll
d107Ci0gICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3OndlYlZpZXcgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6cmFuZ2VdOworCisgICAgaWQgZGVsZWdh
dGUgPSBbd2ViVmlldyBlZGl0aW5nRGVsZWdhdGVdOworICAgIGlmIChbZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZERlbGV0ZVNlbGVjdGlvbjopXSkg
eworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6d2ViVmlldyBzaG91bGREZWxldGVT
ZWxlY3Rpb246c2VsXTsKKyAgICB9IGVsc2UgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkRGVsZXRlRE9NUmFuZ2U6KV0pIHsKKyAgICAgICAg
cmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkRGVsZXRlRE9NUmFuZ2U6W3Nl
bCByYW5nZV1dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRFZGl0
aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0RlbGVnYXRlXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
RGVsZXRlU2VsZWN0aW9uOnNlbF07CisgICAgfQogfQogCi0tICh2b2lkKV9kZWxldGVSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZSAKLSAgICAgICAgICAgIGtpbGxSaW5nOihCT09MKWtpbGxSaW5nIAot
ICAgICAgICAgICAgIHByZXBlbmQ6KEJPT0wpcHJlcGVuZCAKLSAgICAgICBzbWFydERlbGV0ZU9L
OihCT09MKXNtYXJ0RGVsZXRlT0sgCi0gICAgICBkZWxldGlvbkFjdGlvbjooV2ViRGVsZXRpb25B
Y3Rpb24pZGVsZXRpb25BY3Rpb24KKy0gKHZvaWQpX2RlbGV0ZVNlbGVjdGlvbjooV2ViU2VsZWN0
aW9uICopc2VsIAorICAgICAgICAgICAgICAgIGtpbGxSaW5nOihCT09MKWtpbGxSaW5nIAorICAg
ICAgICAgICAgICAgICBwcmVwZW5kOihCT09MKXByZXBlbmQgCisgICAgICAgICAgIHNtYXJ0RGVs
ZXRlT0s6KEJPT0wpc21hcnREZWxldGVPSyAKKyAgICAgICAgICBkZWxldGlvbkFjdGlvbjooV2Vi
RGVsZXRpb25BY3Rpb24pZGVsZXRpb25BY3Rpb24KIHsKLSAgICBpZiAoIVtzZWxmIF9zaG91bGRE
ZWxldGVSYW5nZTpyYW5nZV0pIHsKKyAgICBpZiAoIVtzZWxmIF9zaG91bGREZWxldGVTZWxlY3Rp
b246c2VsXSkgewogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MTUsNyArNTcxLDcgQEAg
dm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyKAogICAgICAgICBpZiAoc3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlKSB7CiAgICAgICAgICAgICBfTlNOZXdLaWxsUmluZ1NlcXVl
bmNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFticmlkZ2Ugc3Ry
aW5nRm9yUmFuZ2U6cmFuZ2VdOworICAgICAgICBOU1N0cmluZyAqc3RyaW5nID0gW2JyaWRnZSBz
dHJpbmdGb3JSYW5nZTpbc2VsIHJhbmdlXV07CiAgICAgICAgIGlmIChwcmVwZW5kKSB7CiAgICAg
ICAgICAgICBfTlNQcmVwZW5kVG9LaWxsUmluZyhzdHJpbmcpOwogICAgICAgICB9IGVsc2UgewpA
QCAtNTI2LDE1ICs1ODIsMTUgQEAgdm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5j
UHRyKAogCiAgICAgc3dpdGNoIChkZWxldGlvbkFjdGlvbikgewogICAgICAgICBjYXNlIGRlbGV0
ZVNlbGVjdGlvbkFjdGlvbjoKLSAgICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5n
ZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGlu
ZzpZRVNdOworICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246c2VsIGNsb3NlVHlwaW5n
OllFU107CiAgICAgICAgICAgICBbYnJpZGdlIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0
ZTpzbWFydERlbGV0ZV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBkZWxldGVL
ZXlBY3Rpb246Ci0gICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2Ug
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6Tk9dOwor
ICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246c2VsIGNsb3NlVHlwaW5nOk5PXTsKICAg
ICAgICAgICAgIFticmlkZ2UgZGVsZXRlS2V5UHJlc3NlZFdpdGhTbWFydERlbGV0ZTpzbWFydERl
bGV0ZV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBmb3J3YXJkRGVsZXRlS2V5
QWN0aW9uOgotICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOk5PXTsKKyAg
ICAgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOnNlbCBjbG9zZVR5cGluZzpOT107CiAgICAg
ICAgICAgICBbYnJpZGdlIGZvcndhcmREZWxldGVLZXlQcmVzc2VkV2l0aFNtYXJ0RGVsZXRlOnNt
YXJ0RGVsZXRlXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU0MiwxMyArNTk4LDEz
IEBAIHZvaWQgKl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0cigKICAgICBfcHJpdmF0
ZS0+c3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlID0gc3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlOwog
fQogCi0tICh2b2lkKV9kZWxldGVTZWxlY3Rpb24KKy0gKHZvaWQpX2RlbGV0ZUN1cnJlbnRTZWxl
Y3Rpb24KIHsKLSAgICBbc2VsZiBfZGVsZXRlUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdCi0g
ICAgICAgICAgICAgIGtpbGxSaW5nOllFUyAKLSAgICAgICAgICAgICAgIHByZXBlbmQ6Tk8KLSAg
ICAgICAgIHNtYXJ0RGVsZXRlT0s6WUVTCi0gICAgICAgIGRlbGV0aW9uQWN0aW9uOmRlbGV0ZVNl
bGVjdGlvbkFjdGlvbl07CisgICAgW3NlbGYgX2RlbGV0ZVNlbGVjdGlvbjpbc2VsZiBfc2VsZWN0
aW9uXQorICAgICAgICAgICAgICAgICAga2lsbFJpbmc6WUVTIAorICAgICAgICAgICAgICAgICAg
IHByZXBlbmQ6Tk8KKyAgICAgICAgICAgICBzbWFydERlbGV0ZU9LOllFUworICAgICAgICAgICAg
ZGVsZXRpb25BY3Rpb246ZGVsZXRlU2VsZWN0aW9uQWN0aW9uXTsKIH0KIAogLSAoQk9PTClfY2Fu
U21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKQEAg
LTI3ODUsNyArMjg0MSw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5POwogICAgICAgICAgICAgRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CiAgICAgICAgICAgICBbc3R5bGUg
c2V0UHJvcGVydHk6QCJjb2xvciIgOltzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSA6QCIiXTsK
LSAgICAgICAgICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6
W2JyaWRnZSBzZWxlY3RlZERPTVJhbmdlXV0pIHsKKyAgICAgICAgICAgIGlmIChbc2VsZiBfc2hv
dWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5TZWxlY3Rpb246W2JyaWRnZSBzZWxlY3Rp
b25dXSkgewogICAgICAgICAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzp3ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOldlYkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbkVkaXQgZm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb107CiAgICAg
ICAgICAgICAgICAgW2JyaWRnZSBhcHBseVN0eWxlOnN0eWxlIHdpdGhVbmRvQWN0aW9uOldlYlVu
ZG9BY3Rpb25TZXRDb2xvcl07CiAgICAgICAgICAgICAgICAgcmV0dXJuIFlFUzsKQEAgLTI3OTgs
NyArMjg1NCw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiAgICAg
ICAgICAgICAgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ1Bhc3RlYm9hcmRdOwogICAgICAgICAgICAgICAgIEJPT0wgY2hvc2VQbGFpblRleHQ7CiAg
ICAgICAgICAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6WUVT
IGNob3NlUGxhaW5UZXh0OiZjaG9zZVBsYWluVGV4dF07Ci0gICAgICAgICAgICAgICAgaWYgKGZy
YWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdE
T01SYW5nZTpbYnJpZGdlIGRyYWdDYXJldERPTVJhbmdlXSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5z
ZXJ0QWN0aW9uRHJvcHBlZF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgW3Nl
bGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjpbYnJp
ZGdlIGRyYWdDYXJldFNlbGVjdGlvbl0gZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvbkRy
b3BwZWRdKSB7CiAgICAgICAgICAgICAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uOldl
YkRyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQgZm9yRHJhZ2dpbmdJbmZvOmRyYWdnaW5nSW5mb107
CiAgICAgICAgICAgICAgICAgICAgIGlmIChbc2VsZiBfaXNNb3ZlRHJhZ10pIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJPT0wgc21hcnRNb3ZlID0gW1tzZWxmIF9icmlkZ2VdIHNlbGVjdGlv
bkdyYW51bGFyaXR5XSA9PSBXZWJTZWxlY3RCeVdvcmQgJiYgW3NlbGYgX2NhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwpAQCAtMzMwNSw4ICszMzYxLDcgQEAgc3RhdGlj
IFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKIHsKICAgICBXZWJCcmlkZ2UgKmJyaWRn
ZSA9IFtzZWxmIF9icmlkZ2VdOwogICAgIERPTVJhbmdlICpwcm9wb3NlZFJhbmdlID0gW2JyaWRn
ZSByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOmFsdGVyYXRpb24gZGlyZWN0aW9uOmRp
cmVjdGlvbiBncmFudWxhcml0eTpncmFudWxhcml0eV07Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9
IFtzZWxmIF93ZWJWaWV3XTsKLSAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltzZWxm
IF9zZWxlY3RlZFJhbmdlXSB0b0RPTVJhbmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6W2JyaWRn
ZSBzZWxlY3Rpb25BZmZpbml0eV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CisgICAgaWYgKFtbc2Vs
ZiBfd2ViVmlld10gX3Nob3VsZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gc2VsZWN0
aW9uV2l0aFJhbmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZp
bml0eV1dIHN0aWxsU2VsZWN0aW5nOk5PXSkgewogICAgICAgICBbYnJpZGdlIGFsdGVyQ3VycmVu
dFNlbGVjdGlvbjphbHRlcmF0aW9uIGRpcmVjdGlvbjpkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6Z3Jh
bnVsYXJpdHldOwogICAgIH0KIH0KQEAgLTMzMTUsOCArMzM3MCw3IEBAIHN0YXRpYyBXZWJIVE1M
VmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiB7CiAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbc2Vs
ZiBfYnJpZGdlXTsKICAgICBET01SYW5nZSAqcHJvcG9zZWRSYW5nZSA9IFticmlkZ2UgcmFuZ2VC
eUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjphbHRlcmF0aW9uIHZlcnRpY2FsRGlzdGFuY2U6dmVy
dGljYWxEaXN0YW5jZV07Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsK
LSAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSB0
b0RPTVJhbmdlOnByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0
eV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX3Nob3Vs
ZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aFJhbmdlOnByb3Bv
c2VkUmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0eV1dIHN0aWxsU2VsZWN0
aW5nOk5PXSkgewogICAgICAgICBbYnJpZGdlIGFsdGVyQ3VycmVudFNlbGVjdGlvbjphbHRlcmF0
aW9uIHZlcnRpY2FsRGlzdGFuY2U6dmVydGljYWxEaXN0YW5jZV07CiAgICAgfQogfQpAQCAtMzUy
OCw5ICszNTgyLDggQEAgc3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKICAg
ICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwogICAgIERPTVJhbmdlICpyYW5n
ZSA9IFticmlkZ2UgcmFuZ2VCeUV4cGFuZGluZ1NlbGVjdGlvbldpdGhHcmFudWxhcml0eTpncmFu
dWxhcml0eV07CiAgICAgaWYgKHJhbmdlICYmICFbcmFuZ2UgY29sbGFwc2VkXSkgewotICAgICAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgICAgICBpZiAoW1t3ZWJW
aWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRDaGFu
Z2VTZWxlY3RlZERPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSB0b0RPTVJhbmdlOnJhbmdl
IGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldIHN0aWxsU2VsZWN0aW5nOk5PXSkg
ewotICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGFmZmluaXR5
OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldIGNsb3NlVHlwaW5nOllFU107CisgICAgICAgIGlm
IChbW3NlbGYgX3dlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0aW9u
IHNlbGVjdGlvbldpdGhSYW5nZTpyYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVjdGlvbkFmZmlu
aXR5XV0gc3RpbGxTZWxlY3Rpbmc6Tk9dKSB7CisgICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVj
dGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6
W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0eV0gZGlyZWN0aW9uOldlYlRleHRTZWxlY3RGb3J3YXJk
IGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9zZVR5cGluZzpZ
RVNdOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzU2OCw3ICszNjIxLDcgQEAgc3RhdGljIFdl
YkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKICAgICAgICAgTlNCZWVwKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgW3NlbGYgX2RlbGV0ZVNlbGVjdGlvbl07CisgICAgW3NlbGYg
X2RlbGV0ZUN1cnJlbnRTZWxlY3Rpb25dOwogfQogCiAtICh2b2lkKWN1dDooaWQpc2VuZGVyCkBA
IC0zNTgxLDggKzM2MzQsOCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmls
OwogICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBET01SYW5n
ZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07Ci0gICAgaWYgKFtzZWxmIF9zaG91bGRE
ZWxldGVSYW5nZTpyYW5nZV0pIHsKKyAgICBXZWJTZWxlY3Rpb24gKnNlbCA9IFtzZWxmIF9zZWxl
Y3Rpb25dOworICAgIGlmIChbc2VsZiBfc2hvdWxkRGVsZXRlU2VsZWN0aW9uOnNlbF0pIHsKICAg
ICAgICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2Vu
ZXJhbFBhc3RlYm9hcmRdXTsKICAgICAgICAgW2JyaWRnZSBkZWxldGVTZWxlY3Rpb25XaXRoU21h
cnREZWxldGU6W3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXV07CiAgICB9CkBAIC0zNzMxLDkg
KzM3ODQsOCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogewogICAg
IGlmIChzdHlsZSA9PSBuaWwgfHwgW3N0eWxlIGxlbmd0aF0gPT0gMCB8fCAhW3NlbGYgX2NhbkVk
aXRdKQogICAgICAgICByZXR1cm47Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJW
aWV3XTsKICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwotICAgIGlmIChb
W3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3Vs
ZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFu
Z2VdXSkgeworICAgIGlmIChbc2VsZiBfc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRz
SW5TZWxlY3Rpb246W3NlbGYgX3NlbGVjdGlvbl1dKSB7CiAgICAgICAgIFticmlkZ2UgYXBwbHlT
dHlsZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjp1bmRvQWN0aW9uXTsKICAgICB9CiB9CkBAIC0zNzQy
LDkgKzM3OTQsOCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogewog
ICAgIGlmIChzdHlsZSA9PSBuaWwgfHwgW3N0eWxlIGxlbmd0aF0gPT0gMCB8fCAhW3NlbGYgX2Nh
bkVkaXRdKQogICAgICAgICByZXR1cm47Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93
ZWJWaWV3XTsKICAgICBXZWJCcmlkZ2UgKmJyaWRnZSA9IFtzZWxmIF9icmlkZ2VdOwotICAgIGlm
IChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNo
b3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVk
UmFuZ2VdXSkgeworICAgIGlmIChbc2VsZiBfc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1l
bnRzSW5TZWxlY3Rpb246W3NlbGYgX3NlbGVjdGlvbl1dKSB7CiAgICAgICAgIFticmlkZ2UgYXBw
bHlQYXJhZ3JhcGhTdHlsZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjp1bmRvQWN0aW9uXTsKICAgICB9
CiB9CkBAIC00MDk0LDggKzQxNDUsNyBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAg
ICAgLyogTlNDCiAtICh2b2lkKV9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6KFNFTClzZWxl
Y3RvciBpblJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAgICAgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqc3R5bGUgPSBbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxl
Y3Rvcl07Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICBpZiAo
W1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91
bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOnJhbmdlXSkgeworICAgIGlm
IChbc2VsZiBfc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5TZWxlY3Rpb246W1dl
YlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25B
ZmZpbml0eURvd25zdHJlYW1dXSkgewogICAgICAgICBbW3NlbGYgX2JyaWRnZV0gYXBwbHlTdHls
ZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjpbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0
aFNlbGVjdG9yOnNlbGVjdG9yXV07CiAgICAgfQogfQpAQCAtNDI2Myw5ICs0MzEzLDEyIEBAIE5T
U3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKICAgICAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAocmFuZ2UgPT0gbmlsIHx8IFtyYW5nZSBjb2xsYXBzZWRdIHx8ICFbc2Vs
ZiBfc2hvdWxkRGVsZXRlUmFuZ2U6cmFuZ2VdKQorICAgIGlmIChyYW5nZSA9PSBuaWwgfHwgW3Jh
bmdlIGNvbGxhcHNlZF0pCiAgICAgICAgIHJldHVybiBOTzsKLSAgICBbc2VsZiBfZGVsZXRlUmFu
Z2U6cmFuZ2Uga2lsbFJpbmc6a2lsbFJpbmcgcHJlcGVuZDpOTyBzbWFydERlbGV0ZU9LOllFUyBk
ZWxldGlvbkFjdGlvbjpkZWxldGlvbkFjdGlvbl07CisgICAgV2ViU2VsZWN0aW9uICpzZWwgPSBb
V2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbV07CisgICAgaWYgKCFbc2VsZiBfc2hvdWxkRGVsZXRlU2VsZWN0
aW9uOnNlbF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBbc2VsZiBfZGVsZXRlU2VsZWN0aW9u
OnNlbCBraWxsUmluZzpraWxsUmluZyBwcmVwZW5kOk5PIHNtYXJ0RGVsZXRlT0s6WUVTIGRlbGV0
aW9uQWN0aW9uOmRlbGV0aW9uQWN0aW9uXTsKICAgICByZXR1cm4gWUVTOwogfQogCkBAIC00NTIx
LDcgKzQ1NzQsNyBAQCBzdGF0aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2VzKERPTVJhbmdlCiAg
ICAgICAgIE5TX0hBTkRMRVIKICAgICAgICAgICAgIHIgPSBzZWxlY3Rpb247CiAgICAgICAgIE5T
X0VOREhBTkRMRVIKLSAgICAgICAgW3NlbGYgX2RlbGV0ZVJhbmdlOnIga2lsbFJpbmc6WUVTIHBy
ZXBlbmQ6WUVTIHNtYXJ0RGVsZXRlT0s6Tk8gZGVsZXRpb25BY3Rpb246ZGVsZXRlU2VsZWN0aW9u
QWN0aW9uXTsKKyAgICAgICAgW3NlbGYgX2RlbGV0ZVNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNl
bGVjdGlvbldpdGhSYW5nZTpyIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFt
XSBraWxsUmluZzpZRVMgcHJlcGVuZDpZRVMgc21hcnREZWxldGVPSzpOTyBkZWxldGlvbkFjdGlv
bjpkZWxldGVTZWxlY3Rpb25BY3Rpb25dOwogICAgIH0KICAgICBbc2VsZiBzZXRNYXJrOnNlbmRl
cl07CiB9CkBAIC00NTM2LDcgKzQ1ODksOCBAQCBzdGF0aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFu
Z2VzKERPTVJhbmdlCiAgICAgfQogICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBbc2VsZiBfc2Vs
ZWN0ZWRSYW5nZV07CiAgICAgTlNfRFVSSU5HCi0gICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRE
T01SYW5nZTp1bmlvbkRPTVJhbmdlcyhtYXJrLCBzZWxlY3Rpb24pIGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOllFU107CisgICAgICAgIERPTVJhbmdl
ICpyID0gdW5pb25ET01SYW5nZXMobWFyaywgc2VsZWN0aW9uKTsKKyAgICAgICAgW2JyaWRnZSBz
ZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnIgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRleHRTZWxlY3RG
b3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9zZVR5
cGluZzpZRVNdOwogICAgIE5TX0hBTkRMRVIKICAgICAgICAgTlNCZWVwKCk7CiAgICAgTlNfRU5E
SEFORExFUgpAQCAtNDU1Miw3ICs0NjA2LDcgQEAgc3RhdGljIERPTVJhbmdlICp1bmlvbkRPTVJh
bmdlcyhET01SYW5nZQogICAgIH0KICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0gW3NlbGYgX3Nl
bGVjdGVkUmFuZ2VdOwogICAgIE5TX0RVUklORwotICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVk
RE9NUmFuZ2U6bWFyayBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9z
ZVR5cGluZzpZRVNdOworICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9u
IHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6bWFyayBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBkaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2Jy
aWRnZSBzZWxlY3Rpb25HcmFudWxhcml0eV1dIGNsb3NlVHlwaW5nOllFU107CiAgICAgTlNfSEFO
RExFUgogICAgICAgICBOU0JlZXAoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDU3NSwxMSArNDYy
OSwxMCBAQCBzdGF0aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2VzKERPTVJhbmdlCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgTlNTdHJpbmcgKnRyYW5zcG9zZWQgPSBbW2NoYXJhY3RlcnMg
c3Vic3RyaW5nRnJvbUluZGV4OjFdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOltjaGFyYWN0ZXJz
IHN1YnN0cmluZ1RvSW5kZXg6MV1dOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2Vi
Vmlld107Ci0gICAgaWYgKCFbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
Vmlldzp3ZWJWaWV3IHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVk
UmFuZ2VdIHRvRE9NUmFuZ2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVh
bSBzdGlsbFNlbGVjdGluZzpOT10pIHsKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX3Nob3Vs
ZENoYW5nZVNlbGVjdGlvblRvOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aFJhbmdlOnIgYWZm
aW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dIHN0aWxsU2VsZWN0aW5nOk5PXSkg
ewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5n
ZTpyIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOllF
U107CisgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRo
QmFzZVJhbmdlOnIgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0
aW9uOldlYlRleHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3Jh
bnVsYXJpdHldXSBjbG9zZVR5cGluZzpZRVNdOwogICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0OnRyYW5zcG9zZWQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFj
dGlvblR5cGVkXSkgewogICAgICAgICBbYnJpZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0
cmFuc3Bvc2VkIHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpOT107CiAgICAgfQpA
QCAtNDk2Nyw3ICs1MDIwLDcgQEAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0cmlidXRlcyA9IG5p
bDsKICAgICBpZiAoW3NlbGYgaGFzTWFya2VkVGV4dF0pIHsKICAgICAgICAgV2ViQnJpZGdlICpi
cmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKICAgICAgICAgRE9NUmFuZ2UgKm1hcmtlZFRleHRSYW5n
ZSA9IFticmlkZ2UgbWFya2VkVGV4dERPTVJhbmdlXTsKLSAgICAgICAgW2JyaWRnZSBzZXRTZWxl
Y3RlZERPTVJhbmdlOm1hcmtlZFRleHRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9u
OltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5nZTptYXJrZWRUZXh0UmFuZ2UgYWZm
aW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGlyZWN0aW9uOldlYlRleHRTZWxl
Y3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9uR3JhbnVsYXJpdHldXSBjbG9z
ZVR5cGluZzpOT107CiAgICAgfQogfQogCkBAIC00OTg3LDcgKzUwNDAsNyBAQCBzdGF0aWMgTlNB
cnJheSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAgIFtzZWxlY3RlZFJhbmdlIHNldFN0YXJ0
OlttYXJrZWRUZXh0UmFuZ2Ugc3RhcnRDb250YWluZXJdIDpzZWxlY3Rpb25TdGFydF07CiAgICAg
W3NlbGVjdGVkUmFuZ2Ugc2V0RW5kOlttYXJrZWRUZXh0UmFuZ2Ugc3RhcnRDb250YWluZXJdIDpz
ZWxlY3Rpb25FbmRdOwogCi0gICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnNlbGVjdGVk
UmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6
Tk9dOworICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0
aEJhc2VSYW5nZTpzZWxlY3RlZFJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3du
c3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdl
IHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6Tk9dOwogfQogCiAtICh2b2lkKV9l
eHRyYWN0QXR0cmlidXRlczooTlNBcnJheSAqKilhIHJhbmdlczooTlNBcnJheSAqKilyIGZyb21B
dHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcKQEAgLTUxOTIsNyAr
NTI0NSw5IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAgICAgLy8g
YWJsZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCiAgICAgV2ViQnJpZGdlICpicmlk
Z2UgPSBbX3ZpZXcgX2JyaWRnZV07CiAgICAgTlNTdHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vi
c3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0aF07Ci0gICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0
aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5P
XTsKKyAgICBpZiAoW192aWV3IF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4
dCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgeworICAgICAgICBbYnJp
ZGdlIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllF
UyBzbWFydFJlcGxhY2U6Tk9dOworICAgIH0KIH0KIAogLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5T
VGV4dFZpZXdfS2V5QmluZGluZy5tCkBAIC01MzQ1LDcgKzU0MDAsOSBAQCBzdGF0aWMgTlNBcnJh
eSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogCiAgICAgICAgIGlmIChyZXZlcnRDaGFuZ2UpIHsK
ICAgICAgICAgICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW192aWV3IF9icmlkZ2VdOwotICAgICAg
ICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNl
bGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworICAgICAgICAgICAgaWYgKFtf
dmlldyBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBnaXZl
bkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgeworICAgICAgICAgICAgICAgIFti
cmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBs
YWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChnb0xlZnQpIHsKICAgICAgICAgICAgIFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsK
ICAgICAgICAgfSBlbHNlIHsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dl
YlZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMDQKZGlmZiAtcCAtdSAtcjEuMzA0IFdl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlldy5tCi0tLSBXZWJLaXQvV2ViVmlldy5zdWJwcm9q
L1dlYlZpZXcubQkyMyBBdWcgMjAwNSAwMToyMjoxNiAtMDAwMAkxLjMwNAorKysgV2ViS2l0L1dl
YlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JMjggQXVnIDIwMDUgMjM6NTI6NTYgLTAwMDAKQEAgLTUw
LDYgKzUwLDcgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaD4K
ICNpbXBvcnQgPFdlYktpdC9XZWJEb3dubG9hZC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRp
bmdEZWxlZ2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUu
aD4KICNpbXBvcnQgPFdlYktpdC9XZWJGb3JtRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV2ViRnJhbWVJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lVmlld0lu
dGVybmFsLmg+CkBAIC04Niw2ICs4Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVFbmNv
ZGluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVNldHRpbmdzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlNlbGVjdGlvbi5oPgog
CiAjaW1wb3J0IDxGb3VuZGF0aW9uL05TVVJMQ29ubmVjdGlvbi5oPgogI2ltcG9ydCA8b2JqYy9v
YmpjLXJ1bnRpbWUuaD4KQEAgLTI1NzMsNiArMjU3NSwyMyBAQCBzdGF0aWMgV2ViRnJhbWUgKmlu
Y3JlbWVudEZyYW1lKFdlYkZyYW1lCiAgICAgcmV0dXJuIF9wcml2YXRlLT5zY3JpcHREZWJ1Z0Rl
bGVnYXRlOwogfQogCistICh2b2lkKXNldFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0
aW9uCit7CisgICAgaWYgKFtzZWxlY3Rpb24gYmFzZVJhbmdlXSA9PSBuaWwpIHsKKyAgICAgICAg
W1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBkZXNlbGVjdFRleHRdOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIERlcml2ZSB0aGUgYnJpZGdlIHRvIHVzZSBmcm9tIHRoZSBy
YW5nZSBwYXNzZWQgaW4uCisgICAgICAgIC8vIFVzaW5nIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFp
bkZyYW1lIGNvdWxkIGdpdmUgdXMgYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbgorICAgICAgICAv
LyB0aGUgb25lIHRoZSByYW5nZSB1c2VzLgorICAgICAgICBbW1tbc2VsZWN0aW9uIGJhc2VSYW5n
ZV0gc3RhcnRDb250YWluZXJdIF9icmlkZ2VdIHNldFNlbGVjdGlvbjpzZWxlY3Rpb24gY2xvc2VU
eXBpbmc6WUVTXTsKKyAgICB9Cit9CisKKy0gKFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgorewor
ICAgIHJldHVybiBbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVjdGlv
bl07Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdQcmludGlu
Z1ByaXZhdGUpCkBAIC0yNzEwLDE5ICsyNzI5LDQwIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVt
ZW50RnJhbWUoV2ViRnJhbWUKICAgICByZXR1cm4gW2JyaWRnZSBlZGl0YWJsZURPTVJhbmdlRm9y
UG9pbnQ6W3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpbW1ticmlkZ2Ugd2ViRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XV1dOwogfQogCi0tIChCT09MKV9zaG91bGRDaGFuZ2VT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOihET01S
YW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0
aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wpX3Nob3VsZENo
YW5nZVNlbGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKilzZWwgc3RpbGxTZWxlY3Rpbmc6KEJPT0wp
ZmxhZwogewotICAgIHJldHVybiBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Y3VycmVudFJhbmdlIHRvRE9N
UmFuZ2U6cHJvcG9zZWRSYW5nZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVj
dGluZzpmbGFnXTsKKyAgICBpZCBkZWxlZ2F0ZSA9IFtzZWxmIGVkaXRpbmdEZWxlZ2F0ZV07Cisg
ICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hv
dWxkQ2hhbmdlU2VsZWN0aW9uOnRvU2VsZWN0aW9uOnN0aWxsU2VsZWN0aW5nOildKSB7CisgICAg
ICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGlvbjpb
c2VsZiBzZWxlY3Rpb25dIHRvU2VsZWN0aW9uOnNlbCBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAg
ICB9IGVsc2UgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZp
ZXc6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTp0b0RPTVJhbmdlOmFmZmluaXR5OnN0aWxs
U2VsZWN0aW5nOildKSB7CisgICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzpzZWxmIHNo
b3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W3NlbGYgc2VsZWN0ZWRET01SYW5nZV0gdG9ET01S
YW5nZTpbc2VsIHJhbmdlXSBhZmZpbml0eTpbc2VsIGFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpm
bGFnXTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0Rl
bGVnYXRlIHNoYXJlZEVkaXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNl
bGVjdGlvbjpbc2VsZiBzZWxlY3Rpb25dIHRvU2VsZWN0aW9uOnNlbCBzdGlsbFNlbGVjdGluZzpm
bGFnXTsKKyAgICB9CiB9CiAKLS0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKKy0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luU2VsZWN0aW9u
OihXZWJTZWxlY3Rpb24gKilzZWwKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9lZGl0aW5nRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOnJh
bmdlXTsKKyAgICBpZCBkZWxlZ2F0ZSA9IFtzZWxmIGVkaXRpbmdEZWxlZ2F0ZV07CisgICAgaWYg
KFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQmVn
aW5FZGl0aW5nSW5TZWxlY3Rpb246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJW
aWV3OnNlbGYgc2hvdWxkQmVnaW5FZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9IGVsc2Ug
aWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxk
QmVnaW5FZGl0aW5nSW5ET01SYW5nZTopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdl
YlZpZXc6c2VsZiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOltzZWwgcmFuZ2VdXTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlIHNo
YXJlZEVkaXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzpzZWxmIHNob3VsZEJlZ2luRWRpdGluZ0luU2Vs
ZWN0aW9uOnNlbF07CisgICAgfQogfQogCi0tIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5ET01S
YW5nZTooRE9NUmFuZ2UgKilyYW5nZQorLSAoQk9PTClfc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0
aW9uOihXZWJTZWxlY3Rpb24gKilzZWwKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9lZGl0aW5nRGVs
ZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6c2VsZiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTpy
YW5nZV07CisgICAgaWQgZGVsZWdhdGUgPSBbc2VsZiBlZGl0aW5nRGVsZWdhdGVdOworICAgIGlm
IChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZEVu
ZEVkaXRpbmdJblNlbGVjdGlvbjopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZp
ZXc6c2VsZiBzaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9IGVsc2UgaWYg
KFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3
OnNlbGYgc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6W3NlbCByYW5nZV1dOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHJldHVybiBbW1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRp
dGluZ0RlbGVnYXRlXSB3ZWJWaWV3OnNlbGYgc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOnNl
bF07CisgICAgfQogfQogCiAtIChCT09MKV9jYW5QYXN0ZQpAQCAtMjczMywxOSArMjc3MywxMiBA
QCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAKIC0gKHZvaWQpc2V0
U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25B
ZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewotICAgIGlmIChyYW5nZSA9PSBuaWwpIHsKLSAg
ICAgICAgW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBkZXNlbGVjdFRleHRd
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIERlcml2ZSB0aGUgYnJpZGdlIHRvIHVzZSBmcm9t
IHRoZSByYW5nZSBwYXNzZWQgaW4uCi0gICAgICAgIC8vIFVzaW5nIF9icmlkZ2VGb3JTZWxlY3Rl
ZE9yTWFpbkZyYW1lIGNvdWxkIGdpdmUgdXMgYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbgotICAg
ICAgICAvLyB0aGUgb25lIHRoZSByYW5nZSB1c2VzLgotICAgICAgICBbW1tyYW5nZSBzdGFydENv
bnRhaW5lcl0gX2JyaWRnZV0gc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpzZWxl
Y3Rpb25BZmZpbml0eSBjbG9zZVR5cGluZzpZRVNdOwotICAgIH0KKyAgICBbc2VsZiBzZXRTZWxl
Y3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnJhbmdlIGFmZmluaXR5
OnNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjpbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JN
YWluRnJhbWVdIHNlbGVjdGlvbkRpcmVjdGlvbl0gZ3JhbnVsYXJpdHk6W1tzZWxmIF9icmlkZ2VG
b3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBzZWxlY3Rpb25HcmFudWxhcml0eV1dXTsKIH0KIAogLSAo
RE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdl
Rm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0ZWRET01SYW5nZV07CisgICAgcmV0dXJuIFtb
c2VsZiBzZWxlY3Rpb25dIHJhbmdlXTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxl
Y3Rpb25BZmZpbml0eQpAQCAtMjc1Myw2ICsyNzg2LDE2IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5j
cmVtZW50RnJhbWUoV2ViRnJhbWUKICAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3Rl
ZE9yTWFpbkZyYW1lXSBzZWxlY3Rpb25BZmZpbml0eV07CiB9CiAKKy0gKFdlYlRleHRTZWxlY3Rp
b25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0aW9uCit7CisgICAgcmV0dXJuIFtbc2VsZiBfYnJp
ZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uRGlyZWN0aW9uXTsKK30KKworLSAo
V2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5Cit7CisgICAg
cmV0dXJuIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uR3Jh
bnVsYXJpdHldOworfQorCiAtICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcKIHsKICAgICBp
ZiAoX3ByaXZhdGUtPmVkaXRhYmxlICE9IGZsYWcpIHsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1
YnByb2ovV2ViVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld0ludGVybmFsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3
SW50ZXJuYWwuaAotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwuaAkx
NCBBdWcgMjAwNSAwOToxMjo0OCAtMDAwMAkxLjIxCisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9q
L1dlYlZpZXdJbnRlcm5hbC5oCTI4IEF1ZyAyMDA1IDIzOjUyOjU2IC0wMDAwCkBAIC0zMiw2ICsz
Miw3IEBACiAKIEBjbGFzcyBET01DU1NTdHlsZURlY2xhcmF0aW9uOwogQGNsYXNzIFdlYkJhY2tG
b3J3YXJkTGlzdDsKK0BjbGFzcyBXZWJTZWxlY3Rpb247CiAKIEBwcm90b2NvbCBXZWJEb2N1bWVu
dERyYWdnaW5nOwogCkBAIC0xMjIsOCArMTIzLDggQEAKIAogQGludGVyZmFjZSBXZWJWaWV3IChX
ZWJWaWV3RWRpdGluZ0V4dHJhcykKIC0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDoo
TlNFdmVudCAqKWV2ZW50OwotLSAoQk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToo
RE9NUmFuZ2UgKiljdXJyZW50UmFuZ2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJh
bmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxs
U2VsZWN0aW5nOihCT09MKWZsYWc7Ci0tIChCT09MKV9zaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJh
bmdlOihET01SYW5nZSAqKXJhbmdlOwotLSAoQk9PTClfc2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2U7CistIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3Rpb25Ubzoo
V2ViU2VsZWN0aW9uICopc2VsIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7CistIChCT09MKV9z
aG91bGRCZWdpbkVkaXRpbmdJblNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsOworLSAoQk9P
TClfc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWw7CiAtIChC
T09MKV9jYW5QYXN0ZTsKIEBlbmQKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmll
d1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcu
c3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0OApkaWZm
IC1wIC11IC1yMS4xNDggV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCi0t
LSBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgJMjMgQXVnIDIwMDUgMDE6
MjI6MTYgLTAwMDAJMS4xNDgKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld1ByaXZh
dGUuaAkyOCBBdWcgMjAwNSAyMzo1Mjo1NiAtMDAwMApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1w
b3J0IDxXZWJLaXQvV2ViVmlldy5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lUHJpdmF0ZS5o
PgorI2ltcG9ydCA8V2ViQ29yZS9XZWJTZWxlY3Rpb24uaD4KIAogQGNsYXNzIE5TRXJyb3I7CiBA
Y2xhc3MgV2ViRnJhbWU7CkBAIC0xMDYsNiArMTA3LDE2IEBAIHR5cGVkZWYgZW51bSB7CiAKIEBl
bmQKIAorQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3RWRpdGluZ1BlbmRpbmdQdWJsaWMpCisK
Ky8vIEFkZCBzdXBwb3J0IGZvciBXZWJTZWxlY3Rpb24KKy0gKHZvaWQpc2V0U2VsZWN0aW9uOihX
ZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247Cist
IChXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbjsKKy0gKFdlYlRl
eHRTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eTsKKworQGVuZAorCiBA
aW50ZXJmYWNlIFdlYlZpZXcgKFdlYlByaXZhdGUpCiAKICsgKEJPT0wpX3ZpZXdDbGFzczooQ2xh
c3MgKil2Q2xhc3MgYW5kUmVwcmVzZW50YXRpb25DbGFzczooQ2xhc3MgKilyQ2xhc3MgZm9yTUlN
RVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGU7Cg==
</data>
<flag name="review"
          id="463"
          type_id="1"
          status="-"
          setter="duncan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3766</attachid>
            <date>2005-09-04 17:06:06 -0700</date>
            <delta_ts>2010-06-10 14:20:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>selection.txt</filename>
            <type>text/plain</type>
            <size>90128</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1O
cHUga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zZWxl
Y3Rpb25kYXRhLmNwcAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbmRhdGEuY3BwCTQgU2VwIDIwMDUgMjM6Mjc6NDEgLTAwMDAKQEAgLTAsMCArMSwx
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInNlbGVjdGlvbmRhdGEuaCIKKyNpbmNsdWRl
ICJ4bWwvZG9tX25vZGVpbXBsLmgiCisjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCisj
aW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCisjaW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5o
IgorI2luY2x1ZGUgInZpc2libGVfcG9zaXRpb24uaCIKKyNpbmNsdWRlICJraHRtbF9wYXJ0Lmgi
CisKKyNpZiBBUFBMRV9DSEFOR0VTCisjaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgorI2Vsc2UK
KyNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKKyNlbmRpZgorCit1
c2luZyBET006OlJhbmdlSW1wbDsKK3VzaW5nIERPTTo6Tm9kZUltcGw7Cit1c2luZyBET006OlBv
c2l0aW9uOworY2xhc3Mga2h0bWw6OlNlbGVjdGlvbjsKKworbmFtZXNwYWNlIGtodG1sIHsKKwor
U2VsZWN0aW9uRGF0YTo6U2VsZWN0aW9uRGF0YSgpCisgOiBtX2FmZmluaXR5KERPV05TVFJFQU0p
LCBtX2RpcmVjdGlvbihTZWxlY3Rpb246OkZPUldBUkQpLCBtX2dyYW51bGFyaXR5KENIQVJBQ1RF
UiksIG1fZXh0ZW5kZWQoZmFsc2UpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRh
dGEoUmFuZ2VJbXBsICpiYXNlUmFuZ2UsIEVBZmZpbml0eSBhZmZpbml0eSwgU2VsZWN0aW9uOjpF
RGlyZWN0aW9uIGRpcmVjdGlvbiwgRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKKyA6IG1f
YmFzZVJhbmdlKGJhc2VSYW5nZSksIG1fYWZmaW5pdHkoYWZmaW5pdHkpLCBtX2RpcmVjdGlvbihk
aXJlY3Rpb24pLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgbV9leHRlbmRlZCh0cnVlKQor
eworfQorCitTZWxlY3Rpb25EYXRhOjpTZWxlY3Rpb25EYXRhKFJhbmdlSW1wbCAqYmFzZVJhbmdl
KQorIDogbV9iYXNlUmFuZ2UoYmFzZVJhbmdlKSwgbV9hZmZpbml0eShET1dOU1RSRUFNKSwgbV9k
aXJlY3Rpb24oU2VsZWN0aW9uOjpGT1JXQVJEKSwgbV9ncmFudWxhcml0eShDSEFSQUNURVIpLCBt
X2V4dGVuZGVkKHRydWUpCit7Cit9CisKK1NlbGVjdGlvbkRhdGE6OlNlbGVjdGlvbkRhdGEoY29u
c3QgU2VsZWN0aW9uRGF0YSAmY29weSkKKyA6IG1fYmFzZVJhbmdlKGNvcHkuYmFzZVJhbmdlKCkp
LCBtX2FmZmluaXR5KGNvcHkuYWZmaW5pdHkoKSksIG1fZGlyZWN0aW9uKGNvcHkuZGlyZWN0aW9u
KCkpLCBtX2dyYW51bGFyaXR5KGNvcHkuZ3JhbnVsYXJpdHkoKSksIG1fZXh0ZW5kZWQoY29weS5l
eHRlbmRlZCgpKQoreworfQorCitTaGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25EYXRhOjpi
YXNlUmFuZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2Jhc2VSYW5nZTsKK30KKwordm9pZCBT
ZWxlY3Rpb25EYXRhOjpzZXRCYXNlUmFuZ2UoUmFuZ2VJbXBsICpiYXNlUmFuZ2UpCit7CisgICAg
aW50IGV4Y2VwdGlvbmNvZGUgPSAwOworICAgIG1fYmFzZVJhbmdlID0gYmFzZVJhbmdlID8gU2hh
cmVkUHRyPFJhbmdlSW1wbD4oYmFzZVJhbmdlLT5jbG9uZVJhbmdlKGV4Y2VwdGlvbmNvZGUpKSA6
IFNoYXJlZFB0cjxSYW5nZUltcGw+KCk7CisgICAgbV9leHRlbmRlZCA9IGZhbHNlOworfQorCitT
aGFyZWRQdHI8UmFuZ2VJbXBsPiBTZWxlY3Rpb25EYXRhOjpyYW5nZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fYmFzZVJhbmdlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU2hhcmVkUHRyPFJhbmdl
SW1wbD4oKTsKKworICAgIGlmIChtX2V4dGVuZGVkKQorICAgICAgICByZXR1cm4gbV9iYXNlUmFu
Z2U7CisKKyAgICByZXR1cm4gdG9TZWxlY3Rpb24oKS50b1JhbmdlKCk7Cit9CisKK3ZvaWQgU2Vs
ZWN0aW9uRGF0YTo6c2V0U2VsZWN0aW9uSW5QYXJ0KEtXUUtIVE1MUGFydCAqcGFydCwgYm9vbCBj
bG9zZVR5cGluZykKK3sKKyAgICBpZiAobV9iYXNlUmFuZ2UuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNlbGVjdGlvbiBzZWwgPSB0b1NlbGVjdGlvbigpOworICAgIHBhcnQtPnNl
dFNlbGVjdGlvbkdyYW51bGFyaXR5KGdyYW51bGFyaXR5KCkpOworICAgIHBhcnQtPnNldFNlbGVj
dGlvbihzZWwsIGNsb3NlVHlwaW5nKTsKK30KKworRUFmZmluaXR5IFNlbGVjdGlvbkRhdGE6OmFm
ZmluaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hZmZpbml0eTsKK30KKwordm9pZCBTZWxl
Y3Rpb25EYXRhOjpzZXRBZmZpbml0eShFQWZmaW5pdHkgYWZmaW5pdHkpCit7CisgICAgbV9hZmZp
bml0eSA9IGFmZmluaXR5OworfQorCisKK1NlbGVjdGlvbjo6RURpcmVjdGlvbiBTZWxlY3Rpb25E
YXRhOjpkaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2RpcmVjdGlvbjsKK30KKwor
dm9pZCBTZWxlY3Rpb25EYXRhOjpzZXREaXJlY3Rpb24oU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsKK30KKworCitFVGV4dEdy
YW51bGFyaXR5IFNlbGVjdGlvbkRhdGE6OmdyYW51bGFyaXR5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9ncmFudWxhcml0eTsKK30KKwordm9pZCBTZWxlY3Rpb25EYXRhOjpzZXRHcmFudWxhcml0
eShFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIG1fZXh0ZW5kZWQgPSBmYWxz
ZTsKKyAgICBtX2dyYW51bGFyaXR5ID0gZ3JhbnVsYXJpdHk7Cit9CisKK1NlbGVjdGlvbiBTZWxl
Y3Rpb25EYXRhOjp0b1NlbGVjdGlvbigpIGNvbnN0Cit7CisgICAgaW50IGV4Y2VwdGlvbmNvZGUg
PSAwOworICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5lciA9IG1fYmFzZVJhbmdlLT5zdGFydENv
bnRhaW5lcihleGNlcHRpb25jb2RlKTsKKyAgICBOb2RlSW1wbCAqZW5kQ29udGFpbmVyID0gbV9i
YXNlUmFuZ2UtPmVuZENvbnRhaW5lcihleGNlcHRpb25jb2RlKTsKKyAgICBBU1NFUlQoc3RhcnRD
b250YWluZXIpOworICAgIEFTU0VSVChlbmRDb250YWluZXIpOworICAgIEFTU0VSVChzdGFydENv
bnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKHN0YXJ0Q29udGFpbmVyLT5nZXRE
b2N1bWVudCgpID09IGVuZENvbnRhaW5lci0+Z2V0RG9jdW1lbnQoKSk7CisKKyAgICBzdGFydENv
bnRhaW5lci0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpLT54bWxEb2NJbXBsKCktPnVwZGF0ZUxheW91
dCgpOworCisgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gbV9hZmZpbml0eTsKKworICAgIC8vIE5v
bi1jb2xsYXBzZWQgcmFuZ2VzIGFyZSBub3QgYWxsb3dlZCB0byBzdGFydCBhdCB0aGUgZW5kIG9m
IGEgbGluZSB0aGF0IGlzIHdyYXBwZWQsCisgICAgLy8gdGhleSBzdGFydCBhdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBuZXh0IGxpbmUgaW5zdGVhZAorICAgIGJvb2wgcmFuZ2VDb2xsYXBzZWQgPSBt
X2Jhc2VSYW5nZS0+Y29sbGFwc2VkKGV4Y2VwdGlvbmNvZGUpOworICAgIGlmICghIHJhbmdlQ29s
bGFwc2VkKQorICAgICAgICBhZmZpbml0eSA9IERPV05TVFJFQU07CisKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydChzdGFydENvbnRhaW5lciwgbV9iYXNlUmFuZ2UtPnN0YXJ0T2Zmc2V0KGV4Y2VwdGlv
bmNvZGUpLCBhZmZpbml0eSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kQ29u
dGFpbmVyLCBtX2Jhc2VSYW5nZS0+ZW5kT2Zmc2V0KGV4Y2VwdGlvbmNvZGUpLCBraHRtbDo6U0VM
X0RFRkFVTFRfQUZGSU5JVFkpOworICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24odmlzaWJsZVN0YXJ0
LCB2aXNpYmxlRW5kKTsKKyAgICBpZiAoIW1fZXh0ZW5kZWQpIHsKKyAgICAgICAgaWYgKG1fZGly
ZWN0aW9uID09IFNlbGVjdGlvbjo6QkFDS1dBUkQpCisgICAgICAgICAgICBzZWxlY3Rpb24uc2V0
QmFzZUFuZEV4dGVudChzZWxlY3Rpb24uZXh0ZW50KCksIHNlbGVjdGlvbi5leHRlbnRBZmZpbml0
eSgpLCBzZWxlY3Rpb24uYmFzZSgpLCBzZWxlY3Rpb24uYmFzZUFmZmluaXR5KCkpOworICAgICAg
ICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShtX2dyYW51bGFyaXR5KTsKKyAgICB9
CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2Uga2h0bWwKKwpJbmRl
eDoga2h0bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga2h0
bWwvZWRpdGluZy9zZWxlY3Rpb25kYXRhLmgKLS0tIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uZGF0
YS5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9u
ZGF0YS5oCTI5IEF1ZyAyMDA1IDIxOjIzOjIzIC0wMDAwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBLSFRNTF9FRElUSU5HX1dFQlNFTEVDVElPTl9ICisjZGVmaW5lIEtI
VE1MX0VESVRJTkdfV0VCU0VMRUNUSU9OX0gKKworI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIK
KyNpbmNsdWRlICJ0ZXh0X2dyYW51bGFyaXR5LmgiCisjaW5jbHVkZSAic2VsZWN0aW9uLmgiCisK
K2NsYXNzIEtXUUtIVE1MUGFydDsKK2NsYXNzIERPTTo6UmFuZ2VJbXBsOworCituYW1lc3BhY2Ug
a2h0bWwgeworCitjbGFzcyBTZWxlY3Rpb25EYXRhCit7CitwdWJsaWM6CisgICAgU2VsZWN0aW9u
RGF0YSgpOworICAgIFNlbGVjdGlvbkRhdGEoRE9NOjpSYW5nZUltcGwgKmJhc2VSYW5nZSwgRUFm
ZmluaXR5IGFmZmluaXR5LCBTZWxlY3Rpb246OkVEaXJlY3Rpb24gZGlyZWN0aW9uLCBFVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5KTsKKyAgICBTZWxlY3Rpb25EYXRhKERPTTo6UmFuZ2VJbXBs
ICpiYXNlUmFuZ2UpOworICAgIFNlbGVjdGlvbkRhdGEoY29uc3QgU2VsZWN0aW9uRGF0YSAmY29w
eSk7CisKKyAgICBTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IGJhc2VSYW5nZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0QmFzZVJhbmdlKERPTTo6UmFuZ2VJbXBsICpiYXNlUmFuZ2UpOworICAgIFNo
YXJlZFB0cjxET006OlJhbmdlSW1wbD4gcmFuZ2UoKSBjb25zdDsKKyAgICBFQWZmaW5pdHkgYWZm
aW5pdHkoKSBjb25zdDsKKyAgICB2b2lkIHNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSk7
CisgICAgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OworICAgIHZvaWQg
c2V0RGlyZWN0aW9uKFNlbGVjdGlvbjo6RURpcmVjdGlvbiBkaXJlY3Rpb24pOworICAgIEVUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkoKSBjb25zdDsKKyAgICB2b2lkIHNldEdyYW51bGFyaXR5
KEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOworICAgIHZvaWQgc2V0U2VsZWN0aW9uSW5Q
YXJ0KEtXUUtIVE1MUGFydCAqcGFydCwgYm9vbCBjbG9zZVR5cGluZyk7CisgICAgCisKK3ByaXZh
dGU6CisKKyAgICBraHRtbDo6U2VsZWN0aW9uIHRvU2VsZWN0aW9uKCkgY29uc3Q7CisgICAgYm9v
bCBleHRlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW5kZWQ7IH0KKworICAgIFNoYXJlZFB0
cjxET006OlJhbmdlSW1wbD4gbV9iYXNlUmFuZ2U7CisgICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7
CisgICAgU2VsZWN0aW9uOjpFRGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIEVUZXh0R3JhbnVs
YXJpdHkgbV9ncmFudWxhcml0eTsKKyAgICBib29sIG1fZXh0ZW5kZWQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBraHRtbAorCisjZW5kaWYgLy8gS0hUTUxfRURJVElOR19TRUxFQ1RJT05fSAorCklu
ZGV4OiBrd3EvV2ViU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC1OcHUga3dxL1dlYlNlbGVj
dGlvbi5oCi0tLSBrd3EvV2ViU2VsZWN0aW9uLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAor
Kysga3dxL1dlYlNlbGVjdGlvbi5oCTI5IEF1ZyAyMDA1IDIxOjIzOjI1IC0wMDAwCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KKworQGNsYXNz
IERPTVJhbmdlOworQGNsYXNzIFdlYlNlbGVjdGlvbkludGVybmFsOworCit0eXBlZGVmIGVudW0g
eworICAgIFdlYlRleHRTZWxlY3RGb3J3YXJkLAorICAgIFdlYlRleHRTZWxlY3RCYWNrd2FyZAor
fSBXZWJUZXh0U2VsZWN0aW9uRGlyZWN0aW9uOworCit0eXBlZGVmIGVudW0geworICAgIFdlYlRl
eHRTZWxlY3RCeUNoYXJhY3RlciwKKyAgICBXZWJUZXh0U2VsZWN0QnlXb3JkLAorICAgIFdlYlRl
eHRTZWxlY3RCeUxpbmUsCisgICAgV2ViVGV4dFNlbGVjdEJ5UGFyYWdyYXBoCit9IFdlYlRleHRT
ZWxlY3Rpb25HcmFudWxhcml0eTsKKworQGludGVyZmFjZSBXZWJTZWxlY3Rpb24gOiBOU09iamVj
dAoreworICAgIFdlYlNlbGVjdGlvbkludGVybmFsICpfcHJpdmF0ZTsKK30KKworKyAoaWQpc2Vs
ZWN0aW9uV2l0aEJhc2VSYW5nZTooRE9NUmFuZ2UgKilzZWxlY3Rpb25CYXNlUmFuZ2UgYWZmaW5p
dHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgZGlyZWN0aW9uOihXZWJU
ZXh0U2VsZWN0aW9uRGlyZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbiBncmFudWxhcml0eTooV2Vi
VGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5OworKyAoaWQpc2Vs
ZWN0aW9uV2l0aFJhbmdlOihET01SYW5nZSAqKXNlbGVjdGlvblJhbmdlIGFmZmluaXR5OihOU1Nl
bGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5OworLSAoaWQpaW5pdFdpdGhCYXNlUmFu
Z2U6KERPTVJhbmdlICopc2VsZWN0aW9uQmFzZVJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFm
ZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlvbjooV2ViVGV4dFNlbGVjdGlvbkRpcmVj
dGlvbilzZWxlY3Rpb25EaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlRleHRTZWxlY3Rpb25HcmFu
dWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eTsKKy0gKGlkKWluaXRXaXRoUmFuZ2U6KERPTVJh
bmdlICopc2VsZWN0aW9uUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0
aW9uQWZmaW5pdHk7CistIChET01SYW5nZSAqKWJhc2VSYW5nZTsKKy0gKHZvaWQpc2V0QmFzZVJh
bmdlOihET01SYW5nZSAqKW5ld0Jhc2VSYW5nZTsKKy0gKERPTVJhbmdlICopcmFuZ2U7CistIChO
U1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5OworLSAodm9pZClzZXRBZmZpbml0eTooTlNTZWxl
Y3Rpb25BZmZpbml0eSluZXdBZmZpbml0eTsKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24p
ZGlyZWN0aW9uOworLSAodm9pZClzZXREaXJlY3Rpb246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rp
b24pbmV3RGlyZWN0aW9uOworLSAoV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFy
aXR5OworLSAodm9pZClzZXRHcmFudWxhcml0eTooV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5
KW5ld0dyYW51bGFyaXR5OworCitAZW5kCisKSW5kZXg6IGt3cS9XZWJTZWxlY3Rpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpkaWZmIC1OcHUga3dxL1dlYlNlbGVjdGlvbi5tbQotLS0ga3dxL1dlYlNlbGVjdGlv
bi5tbQkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrd3EvV2ViU2VsZWN0aW9uLm1tCTI5
IEF1ZyAyMDA1IDIxOjIzOjI2IC0wMDAwCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgIldlYlNlbGVjdGlvbi5oIgorI2ltcG9ydCAiV2ViU2VsZWN0aW9uSW50ZXJuYWwu
aCIKKyNpbXBvcnQgIkRPTUludGVybmFsLmgiCisjaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCisK
KyNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKKworQGltcGxlbWVudGF0aW9uIFdlYlNl
bGVjdGlvbgorCisrIChpZClzZWxlY3Rpb25XaXRoUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0aW9u
UmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKK3sK
KyAgICByZXR1cm4gW1tbV2ViU2VsZWN0aW9uIGFsbG9jXSBpbml0V2l0aFJhbmdlOnNlbGVjdGlv
blJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmluaXR5XSBhdXRvcmVsZWFzZV07Cit9CisKKysg
KGlkKXNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6KERPTVJhbmdlICopc2VsZWN0aW9uQmFzZVJhbmdl
IGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IGRpcmVjdGlv
bjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb24gZ3JhbnVsYXJp
dHk6KFdlYlRleHRTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQorewor
ICAgIHJldHVybiBbW1tXZWJTZWxlY3Rpb24gYWxsb2NdIGluaXRXaXRoQmFzZVJhbmdlOnNlbGVj
dGlvbkJhc2VSYW5nZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBkaXJlY3Rpb246c2VsZWN0
aW9uRGlyZWN0aW9uIGdyYW51bGFyaXR5OnNlbGVjdGlvbkdyYW51bGFyaXR5XSBhdXRvcmVsZWFz
ZV07Cit9CisKKysgKGlkKV9zZWxlY3Rpb25XaXRoU2VsZWN0aW9uRGF0YTooY29uc3Qga2h0bWw6
OlNlbGVjdGlvbkRhdGEgKilkYXRhCit7CisgICAgV2ViU2VsZWN0aW9uICpzZWwgPSBbW1dlYlNl
bGVjdGlvbiBhbGxvY10gaW5pdF07CisgICAgW3NlbCBfc2V0U2VsZWN0aW9uRGF0YTpkYXRhXTsK
KyAgICByZXR1cm4gW3NlbCBhdXRvcmVsZWFzZV07Cit9CisKKy0gKGlkKWluaXRXaXRoUmFuZ2U6
KERPTVJhbmdlICopc2VsZWN0aW9uUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkp
c2VsZWN0aW9uQWZmaW5pdHkKK3sKKyAgICBbc2VsZiBpbml0XTsKKyAgICBbc2VsZiBzZXRCYXNl
UmFuZ2U6c2VsZWN0aW9uUmFuZ2VdOworICAgIFtzZWxmIHNldEFmZmluaXR5OnNlbGVjdGlvbkFm
ZmluaXR5XTsKKyAgICBbc2VsZiBzZXREaXJlY3Rpb246V2ViVGV4dFNlbGVjdEZvcndhcmRdOwor
ICAgIFtzZWxmIHNldEdyYW51bGFyaXR5OldlYlRleHRTZWxlY3RCeUNoYXJhY3Rlcl07CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWluaXRXaXRoQmFzZVJhbmdlOihET01SYW5nZSAqKXNl
bGVjdGlvbkJhc2VSYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25B
ZmZpbml0eSBkaXJlY3Rpb246KFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGly
ZWN0aW9uIGdyYW51bGFyaXR5OihXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9u
R3JhbnVsYXJpdHkKK3sKKyAgICBbc2VsZiBpbml0XTsKKyAgICBbc2VsZiBzZXRCYXNlUmFuZ2U6
c2VsZWN0aW9uQmFzZVJhbmdlXTsKKyAgICBbc2VsZiBzZXRBZmZpbml0eTpzZWxlY3Rpb25BZmZp
bml0eV07CisgICAgW3NlbGYgc2V0RGlyZWN0aW9uOnNlbGVjdGlvbkRpcmVjdGlvbl07CisgICAg
W3NlbGYgc2V0R3JhbnVsYXJpdHk6c2VsZWN0aW9uR3JhbnVsYXJpdHldOworICAgIHJldHVybiBz
ZWxmOworfQorCistIChpZClpbml0Cit7CisgICAgX3ByaXZhdGUgPSBbW1dlYlNlbGVjdGlvbklu
dGVybmFsIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFs
bG9jCit7CisgICAgW19wcml2YXRlIHJlbGVhc2VdOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30K
KworLSAoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgKilfc2VsZWN0aW9uRGF0YQoreworICAg
IEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAg
IHJldHVybiBbX3ByaXZhdGUgZGF0YV07Cit9CisKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkRhdGE6
KGNvbnN0IGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0YQoreworICAgIEFTU0VSVChfcHJpdmF0
ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgICooW19wcml2YXRlIGRh
dGFdKSA9ICpkYXRhOworfQorCistIChET01SYW5nZSAqKWJhc2VSYW5nZQoreworICAgIEFTU0VS
VChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIHJldHVy
biBbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6W19wcml2YXRlIGRhdGFdLT5iYXNlUmFuZ2UoKS5n
ZXQoKV07Cit9CisKKy0gKHZvaWQpc2V0QmFzZVJhbmdlOihET01SYW5nZSAqKW5ld0Jhc2VSYW5n
ZQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYgW19wcml2YXRlIGRhdGFdICE9IE5V
TEwpOworICAgIFtfcHJpdmF0ZSBkYXRhXS0+c2V0QmFzZVJhbmdlKFtuZXdCYXNlUmFuZ2UgX3Jh
bmdlSW1wbF0pOworfQorCisKKy0gKERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBBU1NFUlQoX3By
aXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICByZXR1cm4gW0RP
TVJhbmdlIF9yYW5nZVdpdGhJbXBsOltfcHJpdmF0ZSBkYXRhXS0+cmFuZ2UoKS5nZXQoKV07Cit9
CisKKy0gKHZvaWQpX3NldFNlbGVjdGlvbkluUGFydDooS1dRS0hUTUxQYXJ0ICopcGFydCBjbG9z
ZVR5cGluZzooQk9PTCljbG9zZVR5cGluZworeworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwg
JiYgW19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBbX3ByaXZhdGUgZGF0YV0t
PnNldFNlbGVjdGlvbkluUGFydChwYXJ0LCBjbG9zZVR5cGluZyk7Cit9CisKKworLSAoTlNTZWxl
Y3Rpb25BZmZpbml0eSlhZmZpbml0eQoreworICAgIEFTU0VSVChfcHJpdmF0ZSAhPSBuaWwgJiYg
W19wcml2YXRlIGRhdGFdICE9IE5VTEwpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOU1NlbGVj
dGlvbkFmZmluaXR5PihbX3ByaXZhdGUgZGF0YV0tPmFmZmluaXR5KCkpOworfQorCistICh2b2lk
KXNldEFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KW5ld0FmZmluaXR5Cit7CisgICAgQVNT
RVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0gTlVMTCk7CisgICAgW19w
cml2YXRlIGRhdGFdLT5zZXRBZmZpbml0eShzdGF0aWNfY2FzdDxraHRtbDo6RUFmZmluaXR5Pihu
ZXdBZmZpbml0eSkpOworfQorCisKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0
aW9uCit7CisgICAgQVNTRVJUKF9wcml2YXRlICE9IG5pbCAmJiBbX3ByaXZhdGUgZGF0YV0gIT0g
TlVMTCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24+
KFtfcHJpdmF0ZSBkYXRhXS0+ZGlyZWN0aW9uKCkpOworfQorCistICh2b2lkKXNldERpcmVjdGlv
bjooV2ViVGV4dFNlbGVjdGlvbkRpcmVjdGlvbiluZXdEaXJlY3Rpb24KK3sKKyAgICBBU1NFUlQo
X3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICBbX3ByaXZh
dGUgZGF0YV0tPnNldERpcmVjdGlvbihzdGF0aWNfY2FzdDxraHRtbDo6U2VsZWN0aW9uOjpFRGly
ZWN0aW9uPihuZXdEaXJlY3Rpb24pKTsKK30KKworCistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVs
YXJpdHkpZ3JhbnVsYXJpdHkKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUgIT0gbmlsICYmIFtfcHJp
dmF0ZSBkYXRhXSAhPSBOVUxMKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVGV4dFNlbGVj
dGlvbkdyYW51bGFyaXR5PihbX3ByaXZhdGUgZGF0YV0tPmdyYW51bGFyaXR5KCkpOworfQorCist
ICh2b2lkKXNldEdyYW51bGFyaXR5OihXZWJUZXh0U2VsZWN0aW9uR3JhbnVsYXJpdHkpbmV3R3Jh
bnVsYXJpdHkKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUgIT0gbmlsICYmIFtfcHJpdmF0ZSBkYXRh
XSAhPSBOVUxMKTsKKyAgICBbX3ByaXZhdGUgZGF0YV0tPnNldEdyYW51bGFyaXR5KHN0YXRpY19j
YXN0PGtodG1sOjpFVGV4dEdyYW51bGFyaXR5PihuZXdHcmFudWxhcml0eSkpOworfQorCitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTZWxlY3Rpb25JbnRlcm5hbAorCistIChpZClpbml0Cit7
CisgICAgZGF0YSA9IG5ldyBraHRtbDo6U2VsZWN0aW9uRGF0YTsKKyAgICByZXR1cm4gc2VsZjsK
K30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgZGVsZXRlIGRhdGE7CisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgZGVsZXRlIGRhdGE7Cit9CisK
Ky0gKGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0YQoreworICAgIHJldHVybiBkYXRhOworfQor
CitAZW5kCisKSW5kZXg6IGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm
ZiAtTnB1IGt3cS9XZWJTZWxlY3Rpb25JbnRlcm5hbC5oCi0tLSBrd3EvV2ViU2VsZWN0aW9uSW50
ZXJuYWwuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBrd3EvV2ViU2VsZWN0aW9uSW50
ZXJuYWwuaAkyOSBBdWcgMjAwNSAyMToyMzoyNyAtMDAwMApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgIldlYlNlbGVjdGlvbi5oIgorI2luY2x1ZGUgInNlbGVjdGlvbmRh
dGEuaCIKKworQGludGVyZmFjZSBXZWJTZWxlY3Rpb24gKFdlYlNlbGVjdGlvbkludGVybmFsQWNj
ZXNzb3JzKQorCisrIChpZClfc2VsZWN0aW9uV2l0aFNlbGVjdGlvbkRhdGE6KGNvbnN0IGtodG1s
OjpTZWxlY3Rpb25EYXRhICopZGF0YTsKKy0gKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25EYXRhICop
X3NlbGVjdGlvbkRhdGE7CistICh2b2lkKV9zZXRTZWxlY3Rpb25EYXRhOihjb25zdCBraHRtbDo6
U2VsZWN0aW9uRGF0YSAqKWRhdGE7CistICh2b2lkKV9zZXRTZWxlY3Rpb25JblBhcnQ6KEtXUUtI
VE1MUGFydCAqKXBhcnQgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmc7CisKK0BlbmQKKwor
QGludGVyZmFjZSBXZWJTZWxlY3Rpb25JbnRlcm5hbCA6IE5TT2JqZWN0Cit7CisgICAga2h0bWw6
OlNlbGVjdGlvbkRhdGEgKmRhdGE7Cit9CisKKy0gKGtodG1sOjpTZWxlY3Rpb25EYXRhICopZGF0
YTsKKworQGVuZAorCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL1dlYkNvcmUuZXhwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQ0CmRpZmYgLXAgLXUgLXIxLjQ0IFdlYkNvcmUvV2ViQ29yZS5leHAKLS0tIFdlYkNvcmUvV2Vi
Q29yZS5leHAJMzAgSnVsIDIwMDUgMDk6MDU6MDEgLTAwMDAJMS40NAorKysgV2ViQ29yZS9XZWJD
b3JlLmV4cAk1IFNlcCAyMDA1IDAwOjAxOjE2IC0wMDAwCkBAIC0xMTcsNiArMTE3LDcgQEAKIC5v
YmpjX2NsYXNzX25hbWVfV2ViQ29yZVRleHRSZW5kZXJlckZhY3RvcnkKIC5vYmpjX2NsYXNzX25h
bWVfV2ViQ29yZVZpZXdGYWN0b3J5CiAub2JqY19jbGFzc19uYW1lX1dlYkRhc2hib2FyZFJlZ2lv
bgorLm9iamNfY2xhc3NfbmFtZV9XZWJTZWxlY3Rpb24KIF9XZWJDb3JlRWxlbWVudERPTU5vZGVL
ZXkKIF9XZWJDb3JlRWxlbWVudEZyYW1lS2V5CiBfV2ViQ29yZUVsZW1lbnRJbWFnZUFsdFN0cmlu
Z0tleQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyCmRpZmYgLXAgLXUgLXIxLjIy
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagk0IFNlcCAyMDA1IDA5OjIyOjQzIC0wMDAw
CTEuMjIKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTUgU2Vw
IDIwMDUgMDA6MDE6MzQgLTAwMDAKQEAgLTIwMTUsNiArMjAxNSwxNiBAQAogCQlBOEMwRkZGRjA4
OTcwMUZDMDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc3MDg5NzAxRjgwMEJBNTExNCAvKiBRdWFy
dHpTdXBwb3J0Lm1tICovOyB9OwogCQlBOEZEOEI4NjA4N0NCNDRDMDBEQzM3MDcgLyogS1dRV01h
dHJpeC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
NUQ3QThDMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4Lm1tICovOyB9OwogCQlBOEZEOEI4
NzA4N0NCNDU3MDBEQzM3MDcgLyogS1dRV01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBOEQwODc5RUM2NDAwNkE5MTcyIC8qIEtXUVdN
YXRyaXguaCAqLzsgfTsKKwkJQUUzMzU5MTkwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU5
MTYwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFFMzM1OTFBMDhDMjdBRDkwMEE4QUM0OSAv
KiBXZWJTZWxlY3Rpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBRTMzNTkxNzA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLm1tICovOyB9
OworCQlBRTMzNTkxQjA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTE4MDhD
MjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oICovOyB9OworCQlBRTMzNTkx
QzA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRTMzNTkxNjA4QzI3QUQ5MDBBOEFDNDkgLyogV2Vi
U2VsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJQUUzMzU5MUQwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVjdGlvbi5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTE3MDhDMjdBRDkw
MEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gKi87IH07CisJCUFFMzM1OTFFMDhDMjdBRDkwMEE4
QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUUzMzU5MTgwOEMyN0FEOTAwQThBQzQ5IC8qIFdlYlNlbGVj
dGlvbkludGVybmFsLmggKi87IH07CisJCUFFMzM1OTNFMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxl
Y3Rpb25kYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEFFMzM1OTNDMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmNwcCAqLzsgfTsK
KwkJQUUzMzU5M0YwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTNEMDhDMjgyODYwMEE4
QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggKi87IH07CisJCUFFMzM1OTQwMDhDMjgyODYwMEE4QUM0
OSAvKiBzZWxlY3Rpb25kYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFFMzM1OTNDMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmNw
cCAqLzsgfTsKKwkJQUUzMzU5NDEwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFFMzM1OTNEMDhD
MjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rpb25kYXRhLmggKi87IH07CiAJCUJDMTc5ODkyMDg4RDk3
NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWVfbWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxNzk4OEYwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRl
cl90aGVtZV9tYWMubW0gKi87IH07CiAJCUJDMTc5ODkzMDg4RDk3NUYwMDYwNjhBNSAvKiByZW5k
ZXJfdGhlbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMxNzk4OTAwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZS5jcHAgKi87IH07CiAJ
CUJDMTc5ODk0MDg4RDk3NUYwMDYwNjhBNSAvKiByZW5kZXJfdGhlbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTc5ODkxMDg4RDk3NUYwMDYwNjhB
NSAvKiByZW5kZXJfdGhlbWUuaCAqLzsgfTsKQEAgLTMxNTksNiArMzE2OSwxMSBAQAogCQlBOEMw
RkI4QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtDYW52YXNUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEMwRkI4RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1ZpZXcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc1ZpZXcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEMwRkI4RTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Zp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1ZpZXcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU5MTYwOEMyN0FEOTAwQThBQzQ5IC8qIFdl
YlNlbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2VsZWN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1OTE3MDhDMjdBRDkwMEE4
QUM0OSAvKiBXZWJTZWxlY3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViU2VsZWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
RTMzNTkxODA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uSW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNlbGVjdGlvbkludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1OTNDMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxl
Y3Rpb25kYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBzZWxl
Y3Rpb25kYXRhLmNwcDsgcGF0aCA9IGVkaXRpbmcvc2VsZWN0aW9uZGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFFMzM1OTNEMDhDMjgyODYwMEE4QUM0OSAvKiBzZWxlY3Rp
b25kYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzZWxlY3Rpb25kYXRh
Lmg7IHBhdGggPSBlZGl0aW5nL3NlbGVjdGlvbmRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMwNkYyNDkwNkQxOEE3RTAwNEE2RkEzIC8qIHhzbF9zdHlsZXNoZWV0aW1wbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0geHNsX3N0eWxlc2hlZXRp
bXBsLmNwcDsgcGF0aCA9IHhzbC94c2xfc3R5bGVzaGVldGltcGwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzA2RjI0QTA2RDE4QTdFMDA0QTZGQTMgLyogeHNsX3N0eWxlc2hl
ZXRpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB4c2xfc3R5bGVzaGVl
dGltcGwuaDsgcGF0aCA9IHhzbC94c2xfc3R5bGVzaGVldGltcGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwNkYyNEIwNkQxOEE3RTAwNEE2RkEzIC8qIHhzbHRfcHJvY2Vzc29y
aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0geHNsdF9wcm9j
ZXNzb3JpbXBsLmNwcDsgcGF0aCA9IHhzbC94c2x0X3Byb2Nlc3NvcmltcGwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTEyMiw2ICs1MTM3LDggQEAKIAkJCQk5Mzc4RDlGOTA3
NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmNwcCAqLywKIAkJCQk5M0FCRTA2NzA3MDI4NUY2MDBC
RDkxRjkgLyogc2VsZWN0aW9uLmggKi8sCiAJCQkJOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8q
IHNlbGVjdGlvbi5jcHAgKi8sCisJCQkJQUUzMzU5M0QwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVj
dGlvbmRhdGEuaCAqLywKKwkJCQlBRTMzNTkzQzA4QzI4Mjg2MDBBOEFDNDkgLyogc2VsZWN0aW9u
ZGF0YS5jcHAgKi8sCiAJCQkJQkVDRTY3QkQwNzA4N0IyNTAwMDdDMTRCIC8qIHRleHRfYWZmaW5p
dHkuaCAqLywKIAkJCQk5MzJCOTgzNDA3MDI5N0RDMDAzMjgwNEYgLyogdGV4dF9ncmFudWxhcml0
eS5oICovLAogCQkJCTkzQUJFMDY5MDcwMjg1RjYwMEJEOTFGOSAvKiB2aXNpYmxlX3Bvc2l0aW9u
LmggKi8sCkBAIC01NTYxLDYgKzU1NzgsOSBAQAogCQkJCUY1ODc4NTU1MDJERTM3NTkwMUVBNDEy
MiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSAqLywKIAkJCQk1MTUwQzJBMTA3MDI2MjkwMDBBRjY0
MkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggKi8sCiAJCQkJNTE1MEMyQTUwNzAyNjI5ODAwQUY2
NDJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tICovLAorCQkJCUFFMzM1OTE2MDhDMjdBRDkwMEE4
QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCAqLywKKwkJCQlBRTMzNTkxNzA4QzI3QUQ5MDBBOEFDNDkg
LyogV2ViU2VsZWN0aW9uLm1tICovLAorCQkJCUFFMzM1OTE4MDhDMjdBRDkwMEE4QUM0OSAvKiBX
ZWJTZWxlY3Rpb25JbnRlcm5hbC5oICovLAogCQkJCUY1OEVGNThFMDJERkRGQjcwMTg2MzVDQSAv
KiBXZWJDb3JlLmV4cCAqLywKIAkJCSk7CiAJCQluYW1lID0gIldlYkNvcmUgU1BJIjsKQEAgLTYx
NTIsNiArNjE3Miw5IEBACiAJCQkJQkMxNzk4OTQwODhEOTc1RjAwNjA2OEE1IC8qIHJlbmRlcl90
aGVtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzk4REEwODhEQTRGODAwNjA2OEE1IC8qIHJl
bmRlcl90aGVtZV9tYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRUQ4MDg5ODU4MjMwMEM0
NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1
OTE5MDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CUFFMzM1OTFCMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQUUzMzU5M0YwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTg4NUM0MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5h
bWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKQEAgLTY4OTUsNiArNjkxOCw5IEBACiAJCQkJQTg1NkU5RDYwOEI0NUIx
RTAwNDJFMzAzIC8qIGtkb214cGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDcwOEI0
NUIxRTAwNDJFMzAzIC8qIGZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg1NkU5RDkw
OEI0NUIxRTAwNDJFMzAzIC8qIGV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUFFMzM1
OTFDMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CUFFMzM1OTFFMDhDMjdBRDkwMEE4QUM0OSAvKiBXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQUUzMzU5NDEwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MkZCQjY2MDhDNjI0MTMwMEVGRUUyMyAvKiBFdmVudE5h
bWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKQEAgLTgyNTksNiArODI4NSw4IEBACiAJCQkJQkMxNzk4OTIwODhEOTc1
RjAwNjA2OEE1IC8qIHJlbmRlcl90aGVtZV9tYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzE3
OTg5MzA4OEQ5NzVGMDA2MDY4QTUgLyogcmVuZGVyX3RoZW1lLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdFNkZFRUQ5MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0g
aW4gU291cmNlcyAqLywKKwkJCQlBRTMzNTkxQTA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQUUzMzU5M0UwOEMyODI4NjAwQThBQzQ5IC8qIHNl
bGVjdGlvbmRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODg1QzMwOEI3RTNEMTAwRTcw
N0M0IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC04OTAxLDYgKzg5MjksOCBAQAogCQkJ
CUE4NTZFOUQ4MDhCNDVCMUUwMDQyRTMwMyAvKiBmdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTg1NkU5REEwOEI0NUIxRTAwNDJFMzAzIC8qIGV4cHJlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTg1NkU5RjkwOEI0NjA4RjAwNDJFMzAzIC8qIHhwYXRoLnkgaW4gU291cmNl
cyAqLywKKwkJCQlBRTMzNTkxRDA4QzI3QUQ5MDBBOEFDNDkgLyogV2ViU2VsZWN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJQUUzMzU5NDAwOEMyODI4NjAwQThBQzQ5IC8qIHNlbGVjdGlvbmRh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgyRkJCNjcwOEM2MjQxRTAwRUZFRTIzIC8qIEV2
ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg0MUVDNzIwOEM2NjM2NjAwRERBMjFD
IC8qIEtDYW52YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKSW5kZXg6IFdlYkNvcmUv
a2h0bWwva2h0bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwva2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzM5CmRpZmYg
LXAgLXUgLXIxLjMzOSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwCi0tLSBXZWJDb3JlL2to
dG1sL2todG1sX3BhcnQuY3BwCTEgU2VwIDIwMDUgMTg6MDM6MzEgLTAwMDAJMS4zMzkKKysrIFdl
YkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAJNSBTZXAgMjAwNSAwMDowMTozNyAtMDAwMApAQCAt
NDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImVkaXRpbmcvbWFya3VwLmgiCiAjaW5jbHVkZSAiZWRp
dGluZy9odG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImVkaXRpbmcvc2VsZWN0aW9uLmgiCisjaW5j
bHVkZSAiZWRpdGluZy9zZWxlY3Rpb25kYXRhLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxl
X3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIKICNpbmNsdWRl
ICJlZGl0aW5nL3Zpc2libGVfdW5pdHMuaCIKQEAgLTEzMyw2ICsxMzQsNyBAQCB1c2luZyBraHRt
bDo6UmVuZGVyT2JqZWN0OwogdXNpbmcga2h0bWw6OlJlbmRlclRleHQ7CiB1c2luZyBraHRtbDo6
UmVuZGVyV2lkZ2V0OwogdXNpbmcga2h0bWw6OlNlbGVjdGlvbjsKK3VzaW5nIGtodG1sOjpTZWxl
Y3Rpb25EYXRhOwogdXNpbmcga2h0bWw6OlRva2VuaXplcjsKIHVzaW5nIGtodG1sOjpUeXBpbmdD
b21tYW5kOwogdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsKQEAgLTI0NjcsNiArMjQ2OSwx
MSBAQCBjb25zdCBTZWxlY3Rpb24gJktIVE1MUGFydDo6c2VsZWN0aW9uKCkgCiAgICAgcmV0dXJu
IGQtPm1fc2VsZWN0aW9uOwogfQogCitjb25zdCBTZWxlY3Rpb25EYXRhIEtIVE1MUGFydDo6c2Vs
ZWN0aW9uRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNlbGVjdGlvbkRhdGEoZC0+bV9zZWxl
Y3Rpb24uYmFzZVJhbmdlKCkuZ2V0KCksIGQtPm1fc2VsZWN0aW9uLmVuZEFmZmluaXR5KCksIGQt
Pm1fc2VsZWN0aW9uLmlzRm9yd2FyZFNlbGVjdGlvbigpID8gU2VsZWN0aW9uOjpGT1JXQVJEIDog
U2VsZWN0aW9uOjpCQUNLV0FSRCwgZC0+bV9zZWxlY3Rpb25HcmFudWxhcml0eSk7Cit9CisKIEVU
ZXh0R3JhbnVsYXJpdHkgS0hUTUxQYXJ0OjpzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHk7CkBAIC01MTY2LDE4ICs1MTcz
LDE4IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RBbGwoKQogYm9vbCBLSFRNTFBhcnQ6OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJm5ld3NlbGVjdGlvbikgY29uc3QKIHsK
ICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5zdGFydEFm
ZmluaXR5KCksIGZhbHNlKTsKKyAgICByZXR1cm4gS1dRKHRoaXMpLT5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oU2VsZWN0aW9uRGF0YShuZXdzZWxlY3Rpb24uYmFzZVJhbmdlKCkuZ2V0KCksIG5ld3Nl
bGVjdGlvbi5lbmRBZmZpbml0eSgpLCBuZXdzZWxlY3Rpb24uaXNGb3J3YXJkU2VsZWN0aW9uKCkg
PyBTZWxlY3Rpb246OkZPUldBUkQgOiBTZWxlY3Rpb246OkJBQ0tXQVJELCBkLT5tX3NlbGVjdGlv
bkdyYW51bGFyaXR5KSwgZmFsc2UpOwogI2Vsc2UKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgog
fQogCi1ib29sIEtIVE1MUGFydDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFJhbmdlSW1wbCAq
cmFuZ2UpIGNvbnN0Citib29sIEtIVE1MUGFydDo6c2hvdWxkQmVnaW5FZGl0aW5nKGNvbnN0IFNl
bGVjdGlvbkRhdGEgJnNlbCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBL
SFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3QgUmFuZ2VJbXBsICpyYW5nZSkgY29uc3QK
K2Jvb2wgS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0aW5nKGNvbnN0IFNlbGVjdGlvbkRhdGEgJnNl
bCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwva2h0
bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2to
dG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzYKZGlmZiAtcCAtdSAtcjEuMTM2
IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQu
aAkxNCBBdWcgMjAwNSAwOToxMjo0MyAtMDAwMAkxLjEzNgorKysgV2ViQ29yZS9raHRtbC9raHRt
bF9wYXJ0LmgJNSBTZXAgMjAwNSAwMDowMTozOCAtMDAwMApAQCAtODYsNiArODYsNyBAQCBuYW1l
c3BhY2Uga2h0bWwKICAgY2xhc3MgUmVuZGVyUGFydE9iamVjdDsKICAgY2xhc3MgUmVuZGVyV2lk
Z2V0OwogICBjbGFzcyBTZWxlY3Rpb247CisgIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiAgIGNsYXNz
IFhNTFRva2VuaXplcjsKIH0KIApAQCAtNjAyLDYgKzYwMywxMSBAQCBwdWJsaWM6CiAgIGNvbnN0
IGtodG1sOjpTZWxlY3Rpb24gJnNlbGVjdGlvbigpIGNvbnN0OwogCiAgIC8qKgorICAgKiBSZXR1
cm5zIHRoZSBzZWxlY3Rpb24gcGFydCBvZiB0aGUgSFRNTCwgcGFja2FnZWQgd2l0aCByZWxhdGVk
IHNlbGVjdGlvbiBkYXRhLgorICAgKi8KKyAgY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgc2Vs
ZWN0aW9uRGF0YSgpIGNvbnN0OworCisgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBncmFudWxhcml0
eSBvZiB0aGUgc2VsZWN0aW9uIChjaGFyYWN0ZXIsIHdvcmQsIGxpbmUsIHBhcmFncmFwaCkuCiAg
ICAqLwogICBraHRtbDo6RVRleHRHcmFudWxhcml0eSBzZWxlY3Rpb25HcmFudWxhcml0eSgpIGNv
bnN0OwpAQCAtNzA2LDEyICs3MTIsMTIgQEAgcHVibGljOgogICAvKioKICAgICogUmV0dXJucyB3
aGV0aGVyIGVkaXRpbmcgc2hvdWxkIGVuZCBpbiB0aGUgZ2l2ZW4gcmFuZ2UKICAgICovCi0gIHZp
cnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwgKikgY29u
c3Q7CisgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3Qga2h0bWw6OlNlbGVj
dGlvbkRhdGEgJnNlbCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMgd2hldGhlciBlZGl0
aW5nIHNob3VsZCBlbmQgaW4gdGhlIGdpdmVuIHJhbmdlCiAgICAqLwotICB2aXJ0dWFsIGJvb2wg
c2hvdWxkRW5kRWRpdGluZyhjb25zdCBET006OlJhbmdlSW1wbCAqKSBjb25zdDsKKyAgdmlydHVh
bCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRhdGEgJnNlbCkg
Y29uc3Q7CiAKICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGNvbnRlbnRFZGl0YWJsZSAib3ZlcnJp
ZGUiIHZhbHVlIGZvciB0aGUgcGFydApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVj
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkyCmRpZmYgLXAgLXUg
LXIxLjkyIFdlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCi0tLSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAkyOSBBdWcgMjAwNSAxODowMDo0MyAtMDAwMAkxLjky
CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk1IFNlcCAyMDA1IDAwOjAx
OjM4IC0wMDAwCkBAIC02MDYsNiArNjA2LDI1IEBAIHZvaWQgU2VsZWN0aW9uOjpzZXROZWVkc0xh
eW91dChib29sIGZsYWcKIAogU2hhcmVkUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1Jhbmdl
KCkgY29uc3QKIHsKKyAgICBTaGFyZWRQdHI8UmFuZ2VJbXBsPiBpID0gbWFrZVJhbmdlKG1fc3Rh
cnQsIG1fZW5kKTsKKyAgICByZXR1cm4gaTsKK30KKworU2hhcmVkUHRyPFJhbmdlSW1wbD4gU2Vs
ZWN0aW9uOjpiYXNlUmFuZ2UoKSBjb25zdAoreworICAgIFBvc2l0aW9uIGZyb20gPSBtX2Jhc2U7
CisgICAgUG9zaXRpb24gdG8gPSBtX2V4dGVudDsKKworICAgIGlmICghIGlzRm9yd2FyZFNlbGVj
dGlvbigpKSB7CisgICAgICAgIGZyb20gPSBtX2V4dGVudDsKKyAgICAgICAgdG8gPSBtX2Jhc2U7
CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VSYW5nZShmcm9tLCB0byk7Cit9CisKK1NoYXJlZFB0
cjxSYW5nZUltcGw+IFNlbGVjdGlvbjo6bWFrZVJhbmdlKGNvbnN0IFBvc2l0aW9uICZmcm9tLCBj
b25zdCBQb3NpdGlvbiAmdG8pIGNvbnN0Cit7CiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICBy
ZXR1cm4gU2hhcmVkUHRyPFJhbmdlSW1wbD4oKTsKIApAQCAtNjEzLDE0ICs2MzIsMTQgQEAgU2hh
cmVkUHRyPFJhbmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlKAogICAgIC8vIGluIHRoZSBjb3Vy
c2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUgRE9NLgogICAgIC8v
IEZhaWxpbmcgdG8gY2FsbCB0aGlzIGNhbiByZXN1bHQgaW4gZXF1aXZhbGVudFhYWFBvc2l0aW9u
IGNhbGxzIHJldHVybmluZwogICAgIC8vIGluY29ycmVjdCByZXN1bHRzLgotICAgIG1fc3RhcnQu
bm9kZSgpLT5nZXREb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICBmcm9tLm5vZGUoKS0+
Z2V0RG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBQb3NpdGlvbiBzLCBlOwogICAg
IGlmIChpc0NhcmV0KCkpIHsKICAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0
LCBtb3ZlIHRoZSByYW5nZSBzdGFydCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1cyBtYXRjaAogICAg
ICAgICAvLyB0aGUgY29udmVudGlvbnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFr
ZSBzdHlsZSBkZXRlcm1pbmF0aW9ucyBiYXNlZAogICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVy
IGJlZm9yZSB0aGUgY2FyZXQsIGlmIGFueS4gCi0gICAgICAgIHMgPSBtX3N0YXJ0LnVwc3RyZWFt
KCkuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICAgICAgcyA9IGZyb20u
dXBzdHJlYW0oKS5lcXVpdmFsZW50UmFuZ2VDb21wbGlhbnRQb3NpdGlvbigpOwogICAgICAgICBl
ID0gczsKICAgICB9CiAgICAgZWxzZSB7CkBAIC02MzYsOCArNjU1LDggQEAgU2hhcmVkUHRyPFJh
bmdlSW1wbD4gU2VsZWN0aW9uOjp0b1JhbmdlKAogICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgXiBzZWxlY3RlZAogICAgICAgICAvLwogICAgICAgICBBU1NFUlQoaXNSYW5nZSgpKTsK
LSAgICAgICAgcyA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOwotICAgICAgICBlID0gbV9lbmQudXBz
dHJlYW0oKTsKKyAgICAgICAgcyA9IGZyb20uZG93bnN0cmVhbSgpOworICAgICAgICBlID0gdG8u
dXBzdHJlYW0oKTsKICAgICAgICAgaWYgKFJhbmdlSW1wbDo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KHMubm9kZSgpLCBzLm9mZnNldCgpLCBlLm5vZGUoKSwgZS5vZmZzZXQoKSkgPiAwKSB7CiAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHN0YXJ0IGlzIGJlZm9yZSB0aGUgZW5kLgogICAgICAg
ICAgICAgLy8gVGhlIGVuZCBjYW4gd2luZCB1cCBiZWZvcmUgdGhlIHN0YXJ0IGlmIGNvbGxhcHNl
ZCB3aGl0ZXNwYWNlIGlzIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkLgpJbmRleDogV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NDAKZGlmZiAtcCAtdSAtcjEuNDAgV2ViQ29yZS9raHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5oCi0t
LSBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgJMSBTZXAgMjAwNSAxODowMzozMiAt
MDAwMAkxLjQwCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmgJNSBTZXAgMjAw
NSAwMDowMTozOCAtMDAwMApAQCAtMTA1LDggKzEwNSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c0NhcmV0KCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBDQVJFVDsgfQogICAgIGJvb2wgaXNS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkgPT0gUkFOR0U7IH0KICAgICBib29sIGlzQ2Fy
ZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSAhPSBOT05FOyB9CisgICAgYm9vbCBp
c0ZvcndhcmRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJc1N0YXJ0OyB9CiAKICAg
ICBTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IHRvUmFuZ2UoKSBjb25zdDsKKyAgICBTaGFyZWRQ
dHI8RE9NOjpSYW5nZUltcGw+IGJhc2VSYW5nZSgpIGNvbnN0OwogCiAgICAgdm9pZCBkZWJ1Z1Bv
c2l0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmpl
Y3QgKnIsIGJvb2wgc2VsZWN0ZWQpIGNvbnN0OwpAQCAtMTMzLDYgKzEzNSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBuZWVkc0NhcmV0UmVwYWludCgpOwogICAgIHZvaWQgcGFpbnRDYXJldChRUGFp
bnRlciAqcCwgY29uc3QgUVJlY3QgJnJlY3QpOwogICAgIFFSZWN0IGNhcmV0UmVwYWludFJlY3Qo
KSBjb25zdDsKKyAgICBTaGFyZWRQdHI8RE9NOjpSYW5nZUltcGw+IG1ha2VSYW5nZShjb25zdCBQ
b3NpdGlvbiAmZnJvbSwgY29uc3QgUG9zaXRpb24gJnRvKSBjb25zdDsKIAogICAgIGludCB4UG9z
Rm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSwgYm9vbCByZWNhbGMgPSBm
YWxzZSkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2lt
cGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1MQpkaWZmIC1wIC11IC1yMS4yNTEgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21f
ZG9jaW1wbC5jcHAJMiBTZXAgMjAwNSAwMDoxOToyOSAtMDAwMAkxLjI1MQorKysgV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCTUgU2VwIDIwMDUgMDA6MDE6NDAgLTAwMDAKQEAgLTU3
LDYgKzU3LDcgQEAKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3Bh
cnQuaCIKKyNpbmNsdWRlICJzZWxlY3Rpb25kYXRhLmgiCiAKICNpbmNsdWRlIDxrZ2xvYmFsc2V0
dGluZ3MuaD4KICNpbmNsdWRlIDxrc3RyaW5naGFuZGxlci5oPgpAQCAtMjE1NSw3ICsyMTU2LDgg
QEAgYm9vbCBEb2N1bWVudEltcGw6OnJlbGlucXVpc2hlc0VkaXRpbmdGbwogICAgIGlmICghcGFy
dCgpIHx8ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFydCgp
LT5zaG91bGRFbmRFZGl0aW5nKHJhbmdlT2ZDb250ZW50cyhyb290KS5nZXQoKSk7CisgICAgU2Vs
ZWN0aW9uRGF0YSBzZWwocmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgpKTsKKyAgICByZXR1cm4g
cGFydCgpLT5zaG91bGRFbmRFZGl0aW5nKHNlbCk7CiB9CiAKIGJvb2wgRG9jdW1lbnRJbXBsOjph
Y2NlcHRzRWRpdGluZ0ZvY3VzKE5vZGVJbXBsICpub2RlKQpAQCAtMjE2Nyw3ICsyMTY5LDggQEAg
Ym9vbCBEb2N1bWVudEltcGw6OmFjY2VwdHNFZGl0aW5nRm9jdXMoTgogICAgIGlmICghcGFydCgp
IHx8ICFyb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcGFydCgpLT5z
aG91bGRCZWdpbkVkaXRpbmcocmFuZ2VPZkNvbnRlbnRzKHJvb3QpLmdldCgpKTsKKyAgICBTZWxl
Y3Rpb25EYXRhIHNlbChyYW5nZU9mQ29udGVudHMocm9vdCkuZ2V0KCkpOworICAgIHJldHVybiBw
YXJ0KCktPnNob3VsZEJlZ2luRWRpdGluZyhzZWwpOwogfQogCiBjb25zdCBRVmFsdWVMaXN0PERh
c2hib2FyZFJlZ2lvblZhbHVlPiAmIERvY3VtZW50SW1wbDo6ZGFzaGJvYXJkUmVnaW9ucygpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjI3CmRpZmYgLXAgLXUgLXIxLjIyNyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuaAot
LS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmgJMzEgQXVnIDIwMDUgMDQ6Mzg6NDMgLTAwMDAJ
MS4yMjcKKysrIFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCTUgU2VwIDIwMDUgMDA6MDE6NDAg
LTAwMDAKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBSZW5k
ZXJPYmplY3Q7CiAgICAgY2xhc3MgUmVuZGVyU3R5bGU7CiAgICAgY2xhc3MgVmlzaWJsZVBvc2l0
aW9uOworICAgIGNsYXNzIFNlbGVjdGlvbkRhdGE7CiAgICAgc3RydWN0IERhc2hib2FyZFJlZ2lv
blZhbHVlOwogfQogCkBAIC0zNDUsOSArMzQ2LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzcG9u
ZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9uICZvbGRTZWxlY3Rpb24s
IGJvb2wgY2xvc2VUeXBpbmcpOwogICAgIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7
CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBraHRtbDo6U2VsZWN0aW9uICZvbGRT
ZWxlY3Rpb24sIGNvbnN0IGtodG1sOjpTZWxlY3Rpb24gJm5ld1NlbGVjdGlvbiwga2h0bWw6OkVB
ZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBET006OlJhbmdlSW1wbCAqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhjb25zdCBET006OlJhbmdlSW1wbCAq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IGto
dG1sOjpTZWxlY3Rpb25EYXRhICZzZWwsIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3Qga2h0bWw6OlNlbGVjdGlvbkRh
dGEgJnNlbCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
a2h0bWw6OlNlbGVjdGlvbkRhdGEgJnNlbCkgY29uc3Q7CiAKICAgICBLSlM6OkJpbmRpbmdzOjpS
b290T2JqZWN0ICpleGVjdXRpb25Db250ZXh0Rm9yRE9NKCk7CiAgICAgS0pTOjpCaW5kaW5nczo6
Um9vdE9iamVjdCAqYmluZGluZ1Jvb3RPYmplY3QoKTsKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUtI
VE1MUGFydC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
S0hUTUxQYXJ0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY2OQpkaWZmIC1wIC11IC1yMS42
NjkgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FLSFRNTFBh
cnQubW0JMSBTZXAgMjAwNSAxODowMzozNCAtMDAwMAkxLjY2OQorKysgV2ViQ29yZS9rd3EvS1dR
S0hUTUxQYXJ0Lm1tCTUgU2VwIDIwMDUgMDA6MDE6NDMgLTAwMDAKQEAgLTQ3LDYgKzQ3LDggQEAK
ICNpbXBvcnQgIldlYkNvcmVJbWFnZVJlbmRlcmVyLmgiCiAjaW1wb3J0ICJXZWJDb3JlVmlld0Zh
Y3RvcnkuaCIKICNpbXBvcnQgIldlYkRhc2hib2FyZFJlZ2lvbi5oIgorI2ltcG9ydCAiV2ViU2Vs
ZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJTZWxlY3Rpb25JbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJj
c3NfY29tcHV0ZWRzdHlsZS5oIgogI2ltcG9ydCAiY3NzaGVscGVyLmgiCkBAIC03MSw2ICs3Myw3
IEBACiAjaW1wb3J0ICJyZW5kZXJfdGV4dC5oIgogI2ltcG9ydCAicmVuZGVyX3RoZW1lLmgiCiAj
aW1wb3J0ICJzZWxlY3Rpb24uaCIKKyNpbXBvcnQgInNlbGVjdGlvbmRhdGEuaCIKICNpbXBvcnQg
InZpc2libGVfcG9zaXRpb24uaCIKICNpbXBvcnQgInZpc2libGVfdGV4dC5oIgogI2ltcG9ydCAi
dmlzaWJsZV91bml0cy5oIgpAQCAtMTQwLDYgKzE0Myw3IEBAIHVzaW5nIGtodG1sOjp0aGVtZTsK
IHVzaW5nIGtodG1sOjpSZW5kZXJXaWRnZXQ7CiB1c2luZyBraHRtbDo6UmlnaHRXb3JkSWZPbkJv
dW5kYXJ5OwogdXNpbmcga2h0bWw6OlNlbGVjdGlvbjsKK3VzaW5nIGtodG1sOjpTZWxlY3Rpb25E
YXRhOwogdXNpbmcga2h0bWw6OlNFTEVDVF9JR05PUkU7CiB1c2luZyBraHRtbDo6c2V0RW5kOwog
dXNpbmcga2h0bWw6OnNldFN0YXJ0OwpAQCAtNDEwNCwxMiArNDEwOCw5IEBAIHZvaWQgS1dRS0hU
TUxQYXJ0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWMKICAgICBbX2JyaWRnZSByZXNwb25kVG9DaGFu
Z2VkU2VsZWN0aW9uXTsKIH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNlbGVj
dGlvbihjb25zdCBTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0aW9uICZuZXdT
ZWxlY3Rpb24sIGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rpbmcp
IGNvbnN0Citib29sIEtXUUtIVE1MUGFydDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IGto
dG1sOjpTZWxlY3Rpb25EYXRhICZzZWwsIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFtfYnJpZGdlIHNob3VsZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6W0RPTVJhbmdl
IF9yYW5nZVdpdGhJbXBsOm9sZFNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRE9NUmFuZ2U6W0RPTVJhbmdlIF9yYW5nZVdp
dGhJbXBsOm5ld1NlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCldCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWZmaW5pdHk6c3RhdGljX2Nhc3Q8TlNTZWxlY3Rpb25BZmZp
bml0eT4oYWZmaW5pdHkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxT
ZWxlY3Rpbmc6c3RpbGxTZWxlY3RpbmddOworICAgIHJldHVybiBbX2JyaWRnZSBzaG91bGRDaGFu
Z2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0aW9uIF9zZWxlY3Rpb25XaXRoU2VsZWN0aW9uRGF0YTom
c2VsXSBzdGlsbFNlbGVjdGluZzpzdGlsbFNlbGVjdGluZ107CiB9CiAKIHZvaWQgS1dRS0hUTUxQ
YXJ0OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQpAQCAtNDEyNywxNiArNDEyOCwxNCBAQCBi
b29sIEtXUUtIVE1MUGFydDo6aXNDb250ZW50RWRpdGFibGUoKSBjCiAgICAgcmV0dXJuIEtIVE1M
UGFydDo6aXNDb250ZW50RWRpdGFibGUoKSB8fCBbX2JyaWRnZSBpc0VkaXRhYmxlXTsKIH0KIAot
Ym9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBSYW5nZUltcGwgKnJh
bmdlKSBjb25zdAorYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZEJlZ2luRWRpdGluZyhjb25zdCBT
ZWxlY3Rpb25EYXRhICZzZWwpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHJhbmdlKTsKLSAgICByZXR1
cm4gW19icmlkZ2Ugc2hvdWxkQmVnaW5FZGl0aW5nOltET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpj
b25zdF9jYXN0PFJhbmdlSW1wbCAqPihyYW5nZSldXTsKKyAgICByZXR1cm4gW19icmlkZ2Ugc2hv
dWxkQmVnaW5FZGl0aW5nOltXZWJTZWxlY3Rpb24gX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25EYXRh
OiZzZWxdXTsKIH0KIAotYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZEVuZEVkaXRpbmcoY29uc3Qg
UmFuZ2VJbXBsICpyYW5nZSkgY29uc3QKK2Jvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRFbmRFZGl0
aW5nKGNvbnN0IFNlbGVjdGlvbkRhdGEgJnNlbCkgY29uc3QKIHsKLSAgICBBU1NFUlQocmFuZ2Up
OwotICAgIHJldHVybiBbX2JyaWRnZSBzaG91bGRFbmRFZGl0aW5nOltET01SYW5nZSBfcmFuZ2VX
aXRoSW1wbDpjb25zdF9jYXN0PFJhbmdlSW1wbCAqPihyYW5nZSldXTsKKyAgICByZXR1cm4gW19i
cmlkZ2Ugc2hvdWxkRW5kRWRpdGluZzpbV2ViU2VsZWN0aW9uIF9zZWxlY3Rpb25XaXRoU2VsZWN0
aW9uRGF0YTomc2VsXV07CiB9CiAKIHN0YXRpYyBRVmFsdWVMaXN0PEtXUUtIVE1MUGFydDo6TWFy
a2VkVGV4dFVuZGVybGluZT4gY29udmVydEF0dHJpYnV0ZXNUb1VuZGVybGluZXMoY29uc3QgRE9N
OjpSYW5nZUltcGwgKm1hcmtlZFRleHRSYW5nZSwgTlNBcnJheSAqYXR0cmlidXRlcywgTlNBcnJh
eSAqcmFuZ2VzKQpJbmRleDogV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzQ1CmRpZmYgLXAgLXUgLXIxLjM0NSBXZWJDb3JlL2t3cS9XZWJDb3Jl
QnJpZGdlLmgKLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UuaAkxNyBBdWcgMjAwNSAyMDox
MjoxNSAtMDAwMAkxLjM0NQorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCTUgU2VwIDIw
MDUgMDA6MDE6NDMgLTAwMDAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL25wcnVudGltZS5oPgogI2ltcG9ydCA8SmF2YVZNL2puaS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9XZWJDb3JlS2V5Ym9hcmRBY2Nlc3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViU2VsZWN0aW9u
Lmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogCkBAIC0zMzcsNyArMzM4LDggQEAgdHlwZWRlZiBl
bnVtCiAtIChOU1JlY3QpY2FyZXRSZWN0QXROb2RlOihET01Ob2RlICopbm9kZSBvZmZzZXQ6KGlu
dClvZmZzZXQgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHk7CiAtIChOU1Jl
Y3QpZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7CiAKLS0gKHZvaWQpc2V0
U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25B
ZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZzsK
Ky0gKHZvaWQpc2V0U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWwgY2xvc2VUeXBpbmc6KEJP
T0wpY2xvc2VUeXBpbmc7CistIChXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247CiAtIChET01SYW5n
ZSAqKXNlbGVjdGVkRE9NUmFuZ2U7CiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFm
ZmluaXR5OwogCkBAIC0zODUsNyArMzg3LDggQEAgdHlwZWRlZiBlbnVtCiAtICh2b2lkKWFsdGVy
Q3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVj
dGlvbjooV2ViU2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViU2Vs
ZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAtIChET01SYW5nZSAqKXJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2
ZXJ0aWNhbERpc3RhbmNlOihmbG9hdClkaXN0YW5jZTsKIC0gKHZvaWQpYWx0ZXJDdXJyZW50U2Vs
ZWN0aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gdmVydGljYWxEaXN0YW5j
ZTooZmxvYXQpZGlzdGFuY2U7Ci0tIChXZWJTZWxlY3Rpb25HcmFudWxhcml0eSlzZWxlY3Rpb25H
cmFudWxhcml0eTsKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pc2VsZWN0aW9uRGlyZWN0
aW9uOworLSAoV2ViVGV4dFNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5
OwogLSAoRE9NUmFuZ2UgKilzbWFydERlbGV0ZVJhbmdlRm9yUHJvcG9zZWRSYW5nZTooRE9NUmFu
Z2UgKilwcm9wb3NlZENoYXJSYW5nZTsKIC0gKHZvaWQpc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5T
U3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopY2hhclJhbmdl
VG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3Ry
aW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZzsKIC0gKEJPT0wpY2FuRGVsZXRlUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2U7CkBAIC00MTEsNyArNDE0LDcgQEAgdHlwZWRlZiBlbnVtCiAtICh2b2lk
KW1vdmVTZWxlY3Rpb25Ub0RyYWdDYXJldDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKXNlbGVjdGlv
bkZyYWdtZW50IHNtYXJ0TW92ZTooQk9PTClzbWFydE1vdmU7CiAtICh2b2lkKW1vdmVEcmFnQ2Fy
ZXRUb1BvaW50OihOU1BvaW50KXBvaW50OwogLSAodm9pZClyZW1vdmVEcmFnQ2FyZXQ7Ci0tIChE
T01SYW5nZSAqKWRyYWdDYXJldERPTVJhbmdlOworLSAoV2ViU2VsZWN0aW9uICopZHJhZ0NhcmV0
U2VsZWN0aW9uOwogLSAoRE9NUmFuZ2UgKillZGl0YWJsZURPTVJhbmdlRm9yUG9pbnQ6KE5TUG9p
bnQpcG9pbnQ7CiAKIC0gKHZvaWQpZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlOihCT09M
KXNtYXJ0RGVsZXRlOwpAQCAtNjIxLDkgKzYyNCw5IEBAIHR5cGVkZWYgZW51bQogLSAodm9pZCly
ZXNwb25kVG9DaGFuZ2VkQ29udGVudHM7CiAtICh2b2lkKXNldElzU2VsZWN0ZWQ6KEJPT0wpaXNT
ZWxlY3RlZCBmb3JWaWV3OihOU1ZpZXcgKil2aWV3OwogLSAoQk9PTClpc0VkaXRhYmxlOwotLSAo
Qk9PTClzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5n
ZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsK
LS0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0aW5nOihET01SYW5nZSAqKXJhbmdlOwotLSAoQk9PTClz
aG91bGRFbmRFZGl0aW5nOihET01SYW5nZSAqKXJhbmdlOworLSAoQk9PTClzaG91bGRDaGFuZ2VT
ZWxlY3Rpb25UbzooV2ViU2VsZWN0aW9uICopc2VsIHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7
CistIChCT09MKXNob3VsZEJlZ2luRWRpdGluZzooV2ViU2VsZWN0aW9uICopc2VsOworLSAoQk9P
TClzaG91bGRFbmRFZGl0aW5nOihXZWJTZWxlY3Rpb24gKilzZWw7CiAtIChCT09MKWNhblBhc3Rl
OwogCiAtIChOU1N0cmluZyAqKW92ZXJyaWRlTWVkaWFUeXBlOwpJbmRleDogV2ViQ29yZS9rd3Ev
V2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
d3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MTEKZGlmZiAtcCAt
dSAtcjEuNDExIFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0KLS0tIFdlYkNvcmUva3dxL1dl
YkNvcmVCcmlkZ2UubW0JMSBTZXAgMjAwNSAxODowMzozNSAtMDAwMAkxLjQxMQorKysgV2ViQ29y
ZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQk1IFNlcCAyMDA1IDAwOjAxOjQ0IC0wMDAwCkBAIC04Miw2
ICs4Miw3IEBACiAjaW1wb3J0ICJXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeS5oIgogI2ltcG9y
dCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCiAjaW1wb3J0ICJXZWJDb3JlU2V0dGluZ3MuaCIKKyNp
bXBvcnQgIldlYlNlbGVjdGlvbkludGVybmFsLmgiCiAKIEBjbGFzcyBOU1ZpZXc7CiAKQEAgLTE1
NzAsNDAgKzE1NzEsMzAgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50
RgogICAgIFtzZWxmIGVuc3VyZVNlbGVjdGlvblZpc2libGVdOwogfQogCi0tIChXZWJTZWxlY3Rp
b25HcmFudWxhcml0eSlzZWxlY3Rpb25HcmFudWxhcml0eQorLSAoV2ViVGV4dFNlbGVjdGlvbkdy
YW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5CiB7Ci0gICAgLy8gTk9URTogVGhlIGVudW1z
ICptdXN0KiBtYXRjaCB0aGUgdmVyeSBzaW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gZG9tX3NlbGVj
dGlvbi5oCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5Pihf
cGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CisgICAgcmV0dXJuIFtbc2VsZiBzZWxlY3Rp
b25dIGdyYW51bGFyaXR5XTsKIH0KIAotLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01S
YW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmlu
aXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCistIChXZWJUZXh0U2VsZWN0aW9uRGly
ZWN0aW9uKXNlbGVjdGlvbkRpcmVjdGlvbgogewotICAgIE5vZGVJbXBsICpzdGFydENvbnRhaW5l
ciA9IFtbcmFuZ2Ugc3RhcnRDb250YWluZXJdIF9ub2RlSW1wbF07Ci0gICAgTm9kZUltcGwgKmVu
ZENvbnRhaW5lciA9IFtbcmFuZ2UgZW5kQ29udGFpbmVyXSBfbm9kZUltcGxdOwotICAgIEFTU0VS
VChzdGFydENvbnRhaW5lcik7Ci0gICAgQVNTRVJUKGVuZENvbnRhaW5lcik7Ci0gICAgQVNTRVJU
KHN0YXJ0Q29udGFpbmVyLT5nZXREb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoc3RhcnRDb250YWlu
ZXItPmdldERvY3VtZW50KCkgPT0gZW5kQ29udGFpbmVyLT5nZXREb2N1bWVudCgpKTsKLSAgICAK
LSAgICBfcGFydC0+eG1sRG9jSW1wbCgpLT51cGRhdGVMYXlvdXQoKTsKKyAgICByZXR1cm4gW1tz
ZWxmIHNlbGVjdGlvbl0gZGlyZWN0aW9uXTsKK30KIAotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9
IHN0YXRpY19jYXN0PEVBZmZpbml0eT4oc2VsZWN0aW9uQWZmaW5pdHkpOwotICAgIAotICAgIC8v
IE5vbi1jb2xsYXBzZWQgcmFuZ2VzIGFyZSBub3QgYWxsb3dlZCB0byBzdGFydCBhdCB0aGUgZW5k
IG9mIGEgbGluZSB0aGF0IGlzIHdyYXBwZWQsCi0gICAgLy8gdGhleSBzdGFydCBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgaW5zdGVhZAotICAgIGlmICghW3JhbmdlIGNvbGxhcHNl
ZF0pCi0gICAgICAgIGFmZmluaXR5ID0gRE9XTlNUUkVBTTsKLSAgICAKLSAgICAvLyBGSVhNRTog
Q2FuIHdlIHByb3ZpZGUgZXh0ZW50QWZmaW5pdHk/Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2li
bGVTdGFydChzdGFydENvbnRhaW5lciwgW3JhbmdlIHN0YXJ0T2Zmc2V0XSwgYWZmaW5pdHkpOwot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKGVuZENvbnRhaW5lciwgW3JhbmdlIGVuZE9m
ZnNldF0sIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgU2VsZWN0aW9uIHNlbGVj
dGlvbih2aXNpYmxlU3RhcnQsIHZpc2libGVFbmQpOwotICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb24o
c2VsZWN0aW9uLCBjbG9zZVR5cGluZyk7CistICh2b2lkKXNldFNlbGVjdGlvbjooV2ViU2VsZWN0
aW9uICopc2VsIGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCit7CisgICAgW3NlbCBfc2V0
U2VsZWN0aW9uSW5QYXJ0Ol9wYXJ0IGNsb3NlVHlwaW5nOmNsb3NlVHlwaW5nXTsKIH0KIAogLSAo
RE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtET01SYW5nZSBfcmFu
Z2VXaXRoSW1wbDpfcGFydC0+c2VsZWN0aW9uKCkudG9SYW5nZSgpLmdldCgpXTsKKyAgICByZXR1
cm4gW1tzZWxmIHNlbGVjdGlvbl0gcmFuZ2VdOworfQorCistIChXZWJTZWxlY3Rpb24gKilzZWxl
Y3Rpb24KK3sKKyAgICBraHRtbDo6U2VsZWN0aW9uRGF0YSBzZCA9IF9wYXJ0LT5zZWxlY3Rpb25E
YXRhKCk7CisgICAgcmV0dXJuIFtXZWJTZWxlY3Rpb24gX3NlbGVjdGlvbldpdGhTZWxlY3Rpb25E
YXRhOiZzZF07CiB9CiAKIC0gKE5TUmFuZ2UpY29udmVydFRvTlNSYW5nZTooRE9NOjpSYW5nZUlt
cGwgKilyYW5nZQpAQCAtMTkyMyw5ICsxOTE0LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZvcm1FbGVtZW50RgogICAgIF9wYXJ0LT5zZXREcmFnQ2FyZXQoU2VsZWN0aW9uKCkpOwog
fQogCi0tIChET01SYW5nZSAqKWRyYWdDYXJldERPTVJhbmdlCistIChXZWJTZWxlY3Rpb24gKilk
cmFnQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICByZXR1cm4gW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBs
Ol9wYXJ0LT5kcmFnQ2FyZXQoKS50b1JhbmdlKCkuZ2V0KCldOworICAgIHJldHVybiBbV2ViU2Vs
ZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6X3BhcnQt
PmRyYWdDYXJldCgpLnRvUmFuZ2UoKS5nZXQoKV0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0
eURvd25zdHJlYW1dOwogfQogCiAtIChET01SYW5nZSAqKWVkaXRhYmxlRE9NUmFuZ2VGb3JQb2lu
dDooTlNQb2ludClwb2ludApJbmRleDogV2ViVmlldy5zdWJwcm9qL1dlYkVkaXRpbmdEZWxlZ2F0
ZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBXZWJWaWV3LnN1YnByb2ovV2ViRWRpdGlu
Z0RlbGVnYXRlUHJpdmF0ZS5oCi0tLSBXZWJWaWV3LnN1YnByb2ovV2ViRWRpdGluZ0RlbGVnYXRl
UHJpdmF0ZS5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIFdlYlZpZXcuc3VicHJvai9X
ZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRlLmgJMjkgQXVnIDIwMDUgMjE6MjM6MzAgLTAwMDAKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKK0BjbGFzcyBXZWJWaWV3OworQGNsYXNzIFdl
YlNlbGVjdGlvbjsKKworQGludGVyZmFjZSBOU09iamVjdCAoV2ViRWRpdGluZ0RlbGVnYXRlUGVu
ZGluZ1B1YmxpYykKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQmVn
aW5FZGl0aW5nSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbjsKKy0gKEJPT0wp
d2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOihX
ZWJTZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJW
aWV3IHNob3VsZEluc2VydE5vZGU6KERPTU5vZGUgKilub2RlIHJlcGxhY2luZ1NlbGVjdGlvbjoo
V2ViU2VsZWN0aW9uICopc2VsZWN0aW9uIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbjsKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5zZXJ0
VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICop
c2VsZWN0aW9uIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJP
T0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkRGVsZXRlU2VsZWN0aW9uOihXZWJT
ZWxlY3Rpb24gKilzZWxlY3Rpb247CistIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3
IHNob3VsZENoYW5nZVNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopY3VycmVudCB0b1NlbGVjdGlv
bjooV2ViU2VsZWN0aW9uICopcHJvcG9zZWQgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0g
KEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjooV2ViU2VsZWN0
aW9uICopc2VsZWN0aW9uOworQGVuZAorCkluZGV4OiBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3Vi
cHJvai9XZWJCcmlkZ2UubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dl
YkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzY5CmRpZmYgLXAgLXUgLXIxLjM2OSBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJC
cmlkZ2UubQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViQnJpZGdlLm0JMjQg
QXVnIDIwMDUgMDA6MzQ6NTcgLTAwMDAJMS4zNjkKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5z
dWJwcm9qL1dlYkJyaWRnZS5tCTUgU2VwIDIwMDUgMDA6MDI6MTggLTAwMDAKQEAgLTE0NjQsMTkg
KzE0NjQsMTkgQEAgc3RhdGljIGlkIDxXZWJGb3JtRGVsZWdhdGU+IGZvcm1EZWxlZ2F0ZQogICAg
IHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBpc0VkaXRhYmxlXTsKIH0KIAotLSAoQk9PTClzaG91
bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJh
bmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5p
dHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZworLSAoQk9PTClz
aG91bGRDaGFuZ2VTZWxlY3Rpb25UbzooV2ViU2VsZWN0aW9uICopc2VsIHN0aWxsU2VsZWN0aW5n
OihCT09MKWZsYWcKIHsKLSAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6Y3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6cHJvcG9zZWRSYW5nZSBh
ZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAgICByZXR1
cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZENoYW5nZVNlbGVjdGlvblRvOnNlbCBzdGlsbFNl
bGVjdGluZzpmbGFnXTsKIH0KIAotLSAoQk9PTClzaG91bGRCZWdpbkVkaXRpbmc6KERPTVJhbmdl
ICopcmFuZ2UKKy0gKEJPT0wpc2hvdWxkQmVnaW5FZGl0aW5nOihXZWJTZWxlY3Rpb24gKilzZWwK
IHsKLSAgICByZXR1cm4gW1tfZnJhbWUgd2ViVmlld10gX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9N
UmFuZ2U6cmFuZ2VdOworICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBfc2hvdWxkQmVnaW5F
ZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKIH0KIAotLSAoQk9PTClzaG91bGRFbmRFZGl0aW5nOihE
T01SYW5nZSAqKXJhbmdlCistIChCT09MKXNob3VsZEVuZEVkaXRpbmc6KFdlYlNlbGVjdGlvbiAq
KXNlbAogewotICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBfc2hvdWxkRW5kRWRpdGluZ0lu
RE9NUmFuZ2U6cmFuZ2VdOworICAgIHJldHVybiBbW19mcmFtZSB3ZWJWaWV3XSBfc2hvdWxkRW5k
RWRpdGluZ0luU2VsZWN0aW9uOnNlbF07CiB9CiAKIC0gKHZvaWQpd2luZG93T2JqZWN0Q2xlYXJl
ZApJbmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IFdlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagotLS0gV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCTI2IEF1ZyAyMDA1IDIyOjAyOjU4IC0wMDAwCTEuNgorKysgV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTUgU2VwIDIwMDUgMDA6MDI6MjEg
LTAwMDAKQEAgLTI4Myw2ICsyODMsNyBAQAogCQk5Mzk4MTEyQzA4MjRCRjAxMDA4REYwMzggLyog
V2ViQ29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNzM4QzlFQTAzRkFEM0RGMDMyMUZCRTAgLyogV2ViQ29yZS5mcmFtZXdvcmsg
Ki87IH07CiAJCTkzOTgxMTJFMDgyNEJGMDEwMDhERjAzOCAvKiBsaWJpY3Vjb3JlLmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNENjIzREQw
NTFFNzkxRjAwMkY0N0REIC8qIGxpYmljdWNvcmUuZHlsaWIgKi87IH07CiAJCTkzOTgxMTJGMDgy
NEJGMDEwMDhERjAzOCAvKiBTZWN1cml0eS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzBFODFFMDA1ODUzQUMwMDBBRDA4OTEgLyog
U2VjdXJpdHkuZnJhbWV3b3JrICovOyB9OworCQlBRTMzNTYxQTA4QkM0MUQxMDBBOEFDNDkgLyog
V2ViRWRpdGluZ0RlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUUzMzU2MTkwOEJDNDFEMTAwQThBQzQ5IC8qIFdlYkVkaXRpbmdE
ZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFRDZCRTJFNzA4OEMzMkI1MDA0NERFREMgLyogV2ViTlNBdHRyaWJ1dGVkU3Ry
aW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFRDZCRTJFNTA4OEMzMkI1MDA0NERFREMgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
LmggKi87IH07CiAJCUVENkJFMkU4MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRT
dHJpbmdFeHRyYXMubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEVENkJFMkU2MDg4QzMyQjUwMDQ0REVEQyAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRy
YXMubSAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwpAQCAtNDk4LDYgKzQ5
OSw3IEBACiAJCTlDRTFGOEEyMDJBNUM2RjMwRUNBMkFDRCAvKiBXZWJJbWFnZVJlbmRlcmVyRmFj
dG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJbWFnZVJlbmRlcmVy
RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Q0UxRjhBMzAyQTVDNkYz
MEVDQTJBQ0QgLyogV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5vYmpjOyBwYXRoID0gV2ViSW1hZ2VSZW5kZXJlckZhY3RvcnkubTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUNGMEUyNDkwMjEzNjFCMDBFQ0ExNkVBIC8qIFdlYkZyYW1lUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUUzMzU2MTkwOEJDNDFEMTAwQThBQzQ5
IC8qIFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkUwN0NFQTcwNDc1MzhGMDAwQ0EyODlDIC8qIFdlYkRhdGFiYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhYmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCRTA3Q0VBODA0NzUzOEYwMDBDQTI4OUMgLyogV2ViRGF0YWJh
c2UubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IFdlYkRhdGFiYXNlLm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJFMDdDRUE5MDQ3NTM4RjAwMENBMjg5QyAv
KiBXZWJGaWxlRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkZpbGVEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODcxLDYgKzg3
Myw3IEBACiAJCQkJMzk0NDYwNkIwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYkR5bmFtaWNTY3JvbGxC
YXJzVmlldy5oICovLAogCQkJCTM5NDQ2MDZDMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJEeW5hbWlj
U2Nyb2xsQmFyc1ZpZXcubSAqLywKIAkJCQlCRTRGQkVDQjA2NTNERjQ3MDA1RURFMTUgLyogV2Vi
RWRpdGluZ0RlbGVnYXRlLmggKi8sCisJCQkJQUUzMzU2MTkwOEJDNDFEMTAwQThBQzQ5IC8qIFdl
YkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaCAqLywKIAkJCQkyRDgxREFCMjAzRUIwQjJEMDBBODAx
NjYgLyogV2ViRm9ybURlbGVnYXRlLmggKi8sCiAJCQkJMkQ4MURBQjMwM0VCMEIyRDAwQTgwMTY2
IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tICovLAogCQkJCTUxNTJGQUU1MDMzRkM1MjIwMENBMkFDRCAv
KiBXZWJGcmFtZUxvYWREZWxlZ2F0ZS5oICovLApAQCAtMTI1Nyw2ICsxMjYwLDcgQEAKIAkJCQk3
RTZGRUYwMTA4OTg1QTNFMDBDNDRDM0YgLyogV2ViRGVmYXVsdFNjcmlwdERlYnVnRGVsZWdhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdFNkZFRjA4MDg5ODVBNzIwMEM0NEMzRiAvKiBXZWJTY3Jp
cHREZWJ1Z0RlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTZGRUYwQTA4OTg1QTcyMDBD
NDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUFFMzM1NjFBMDhCQzQxRDEwMEE4QUM0OSAvKiBXZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViRGVmYXVs
dEVkaXRpbmdEZWxlZ2F0ZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQv
V2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUubSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjggV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJE
ZWZhdWx0RWRpdGluZ0RlbGVnYXRlLm0KLS0tIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViRGVm
YXVsdEVkaXRpbmdEZWxlZ2F0ZS5tCTUgSnVuIDIwMDUgMTc6NTQ6NDYgLTAwMDAJMS44CisrKyBX
ZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUubQk1IFNlcCAy
MDA1IDAwOjAyOjIxIC0wMDAwCkBAIC0zNCw2ICszNCw4IEBACiAjaW1wb3J0IDxXZWJLaXQvV2Vi
RWRpdGluZ0RlbGVnYXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViVmlldy5oPgogCisjaW1wb3J0
ICJXZWJFZGl0aW5nRGVsZWdhdGVQcml2YXRlLmgiCisKIEBpbXBsZW1lbnRhdGlvbiBXZWJEZWZh
dWx0RWRpdGluZ0RlbGVnYXRlCiAKIHN0YXRpYyBXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlICpz
aGFyZWREZWxlZ2F0ZSA9IG5pbDsKQEAgLTExNiw0ICsxMTgsNDAgQEAgc3RhdGljIFdlYkRlZmF1
bHRFZGl0aW5nRGVsZWdhdGUgKnNoYXJlZAogICAgIHJldHVybiBuaWw7CiB9CiAKKworLSAoQk9P
TCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRCZWdpbkVkaXRpbmdJblNlbGVjdGlv
bjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAo
Qk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRFbmRFZGl0aW5nSW5TZWxlY3Rp
b246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0g
KEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTooRE9NTm9k
ZSAqKW5vZGUgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24gZ2l2
ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRJbnNlcnRUZXh0
OihOU1N0cmluZyAqKXRleHQgcmVwbGFjaW5nU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWxl
Y3Rpb24gZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7CisgICAgcmV0
dXJuIFlFUzsKK30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRE
ZWxldGVTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBZ
RVM7Cit9CisKKy0gKEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcgc2hvdWxkQ2hhbmdl
U2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKiljdXJyZW50IHRvU2VsZWN0aW9uOihXZWJTZWxlY3Rp
b24gKilwcm9wb3NlZCBzdGlsbFNlbGVjdGluZzooQk9PTClmbGFnCit7CisgICAgcmV0dXJuIFlF
UzsKK30KKworLSAoQk9PTCl3ZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldyBzaG91bGRBcHBseVN0
eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9u
OihXZWJTZWxlY3Rpb24gKilzZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gWUVTOworfQorCiBAZW5k
CkluZGV4OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubSx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NjYKZGlmZiAtcCAtdSAtcjEuNDY2IFdlYktpdC9XZWJW
aWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJI
VE1MVmlldy5tCTI3IEF1ZyAyMDA1IDAwOjAzOjQzIC0wMDAwCTEuNDY2CisrKyBXZWJLaXQvV2Vi
Vmlldy5zdWJwcm9qL1dlYkhUTUxWaWV3Lm0JNSBTZXAgMjAwNSAwMDowMjoyOCAtMDAwMApAQCAt
MzYsOSArMzYsMTEgQEAKICNpbXBvcnQgPFdlYktpdC9XZWJDbGlwVmlldy5oPgogI2ltcG9ydCA8
V2ViS2l0L1dlYkRhdGFQcm90b2NvbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkRhdGFTb3VyY2VQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dlYkRvY3VtZW50SW50ZXJuYWwuaD4KICNpbXBvcnQgPFdlYktpdC9X
ZWJET01PcGVyYXRpb25zUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxl
Z2F0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFt
ZVZpZXdJbnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkhUTUxWaWV3SW50ZXJuYWwuaD4K
QEAgLTY5LDYgKzcxLDggQEAKICNpbXBvcnQgPFdlYktpdC9XZWJWaWV3UHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKKyNpbXBvcnQgPFdlYkNvcmUvV2ViU2Vs
ZWN0aW9uLmg+CisKICNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KIAogLy8gSW5j
bHVkZWQgc28gdXNhZ2Ugb2YgX05TU29mdExpbmtpbmdHZXRGcmFtZXdvcmtGdW5jUHRyIHdpbGwg
Y29tcGlsZQpAQCAtMTcyLDE4ICsxNzYsMjEgQEAgdm9pZCAqX05TU29mdExpbmtpbmdHZXRGcmFt
ZXdvcmtGdW5jUHRyKAogLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0
aHM7CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxv
d1BsYWluVGV4dCBjaG9zZVBsYWluVGV4dDooQk9PTCAqKWNob3NlUGxhaW5UZXh0OwogLSAodm9p
ZClfcGFzdGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1Bs
YWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dDsKLS0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdt
ZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOwor
LSAoQk9PTClfc2hvdWxkQXBwbHlTdHlsZTooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxl
IHRvRWxlbWVudHNJblNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoQk9P
TClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjoo
V2ViU2VsZWN0aW9uICopc2VsIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlv
bjsKKy0gKEJPT0wpX3Nob3VsZEluc2VydE5vZGU6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFn
bWVudCByZXBsYWNpbmdTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBnaXZlbkFjdGlvbjoo
V2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CistIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVu
dDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ1NlbGVjdGlvbjooV2Vi
U2VsZWN0aW9uICopc2VsIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsK
IC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKIC0gKGZsb2F0KV9jYWxj
dWxhdGVQcmludEhlaWdodDsKIC0gKHZvaWQpX3VwZGF0ZVRleHRTaXplTXVsdGlwbGllcjsKIC0g
KERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7Ci0tIChCT09MKV9zaG91bGREZWxldGVSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZTsKLS0gKHZvaWQpX2RlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdl
IAotICAgICAgICAgICAga2lsbFJpbmc6KEJPT0wpa2lsbFJpbmcgCi0gICAgICAgICAgICAgcHJl
cGVuZDooQk9PTClwcmVwZW5kIAotICAgICAgIHNtYXJ0RGVsZXRlT0s6KEJPT0wpc21hcnREZWxl
dGVPSwotICAgICAgZGVsZXRpb25BY3Rpb246KFdlYkRlbGV0aW9uQWN0aW9uKWRlbGV0aW9uQWN0
aW9uOwotLSAodm9pZClfZGVsZXRlU2VsZWN0aW9uOworLSAoV2ViU2VsZWN0aW9uICopX3NlbGVj
dGlvbjsKKy0gKHZvaWQpX2RlbGV0ZVNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsIAorICAg
ICAgICAgICAgICAgIGtpbGxSaW5nOihCT09MKWtpbGxSaW5nIAorICAgICAgICAgICAgICAgICBw
cmVwZW5kOihCT09MKXByZXBlbmQgCisgICAgICAgICAgIHNtYXJ0RGVsZXRlT0s6KEJPT0wpc21h
cnREZWxldGVPSworICAgICAgICAgIGRlbGV0aW9uQWN0aW9uOihXZWJEZWxldGlvbkFjdGlvbilk
ZWxldGlvbkFjdGlvbjsKKy0gKHZvaWQpX2RlbGV0ZUN1cnJlbnRTZWxlY3Rpb247CiAtIChCT09M
KV9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2Fy
ZDsKIC0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKIC0gKHZv
aWQpdXBkYXRlRm9jdXNTdGF0ZTsKQEAgLTQ0MCwyNyArNDQ3LDYzIEBAIHZvaWQgKl9OU1NvZnRM
aW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0cigKICAgICBCT09MIGNob3NlUGxhaW5UZXh0OwogICAg
IERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OmFsbG93UGxhaW5UZXh0IGNo
b3NlUGxhaW5UZXh0OiZjaG9zZVBsYWluVGV4dF07CiAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBb
c2VsZiBfYnJpZGdlXTsKLSAgICBpZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZy
YWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSBn
aXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkgeworICAgIGlmIChmcmFnbWVu
dCAmJiBbc2VsZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nU2VsZWN0
aW9uOltzZWxmIF9zZWxlY3Rpb25dIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0
ZWRdKSB7CiAgICAgICAgIFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFn
bWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVw
bGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6Y2hvc2VQbGFpblRleHRd
OwogICAgIH0KIH0KIAotLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50
RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBn
aXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KKy0gKEJPT0wpX3Nob3VsZEFw
cGx5U3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB0b0VsZW1lbnRzSW5TZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBbc2VsZiBfd2ViVmlld107CisgICAgaWQgZGVsZWdhdGUgPSBbd2ViVmlldyBlZGl0aW5nRGVs
ZWdhdGVdOworICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OnNob3VsZEFwcGx5U3R5bGU6dG9FbGVtZW50c0luU2VsZWN0aW9uOildKSB7CisgICAg
ICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5
bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOnNlbGVjdGlvbl07CisgICAgfSBlbHNlIGlmIChbZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZEFwcGx5U3R5
bGU6dG9FbGVtZW50c0luRE9NUmFuZ2U6KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3
ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5ET01SYW5n
ZTpbc2VsZWN0aW9uIHJhbmdlXV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtbV2Vi
RGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSBzaGFyZWRFZGl0aW5nRGVsZWdhdGVdIHdlYlZpZXc6d2Vi
VmlldyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJblNlbGVjdGlvbjpzZWxlY3Rp
b25dOworICAgIH0KK30KKworLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0
ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsIGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2Vs
ZiBfd2ViVmlld107CisgICAgaWQgZGVsZWdhdGUgPSBbd2ViVmlldyBlZGl0aW5nRGVsZWdhdGVd
OworICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3
OnNob3VsZEluc2VydFRleHQ6cmVwbGFjaW5nU2VsZWN0aW9uOmdpdmVuQWN0aW9uOildKSB7Cisg
ICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6
dGV4dCByZXBsYWNpbmdTZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAgfSBl
bHNlIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNo
b3VsZEluc2VydFRleHQ6cmVwbGFjaW5nRE9NUmFuZ2U6Z2l2ZW5BY3Rpb246KV0pIHsKKyAgICAg
ICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0
IHJlcGxhY2luZ0RPTVJhbmdlOltzZWwgcmFuZ2VdIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtbV2ViRGVmYXVsdEVkaXRpbmdEZWxlZ2F0ZSBzaGFy
ZWRFZGl0aW5nRGVsZWdhdGVdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQg
cmVwbGFjaW5nU2VsZWN0aW9uOnNlbCBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgIH0KK30KKwor
LSAoQk9PTClfc2hvdWxkSW5zZXJ0Tm9kZTooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50
IHJlcGxhY2luZ1NlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsIGdpdmVuQWN0aW9uOihXZWJW
aWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBf
d2ViVmlld107CisgICAgaWQgZGVsZWdhdGUgPSBbd2ViVmlldyBlZGl0aW5nRGVsZWdhdGVdOwor
ICAgIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNo
b3VsZEluc2VydE5vZGU6cmVwbGFjaW5nU2VsZWN0aW9uOmdpdmVuQWN0aW9uOildKSB7CisgICAg
ICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJh
Z21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOnNlbCBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgIH0g
ZWxzZSBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpz
aG91bGRJbnNlcnROb2RlOnJlcGxhY2luZ0RPTVJhbmdlOmdpdmVuQWN0aW9uOildKSB7CisgICAg
ICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJh
Z21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6W3NlbCByYW5nZV0gZ2l2ZW5BY3Rpb246YWN0aW9uXTsK
KyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRl
IHNoYXJlZEVkaXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6
ZnJhZ21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOnNlbCBnaXZlbkFjdGlvbjphY3Rpb25dOworICAg
IH0KK30KKworLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21l
bnQgKilmcmFnbWVudCByZXBsYWNpbmdTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCBnaXZl
bkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KK3sKICAgICBET01Ob2RlICpjaGls
ZCA9IFtmcmFnbWVudCBmaXJzdENoaWxkXTsKICAgICBpZiAoW2ZyYWdtZW50IGxhc3RDaGlsZF0g
PT0gY2hpbGQgJiYgW2NoaWxkIGlzS2luZE9mQ2xhc3M6W0RPTUNoYXJhY3RlckRhdGEgY2xhc3Nd
XSkgewotICAgICAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OlsoRE9NQ2hhcmFjdGVyRGF0YSAqKWNo
aWxkIGRhdGFdIHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Cisg
ICAgICAgIHJldHVybiBbc2VsZiBfc2hvdWxkSW5zZXJ0VGV4dDpbKERPTUNoYXJhY3RlckRhdGEg
KiljaGlsZCBkYXRhXSByZXBsYWNpbmdTZWxlY3Rpb246c2VsIGdpdmVuQWN0aW9uOmFjdGlvbl07
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpmcmFnbWVudCByZXBs
YWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgICAgICByZXR1cm4g
W3NlbGYgX3Nob3VsZEluc2VydE5vZGU6ZnJhZ21lbnQgcmVwbGFjaW5nU2VsZWN0aW9uOnNlbCBn
aXZlbkFjdGlvbjphY3Rpb25dOwogICAgIH0KIH0KIAogLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uCiB7Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKLSAgICBET01SYW5nZSAqc2VsZWN0ZWRSYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsK
LSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6c2VsZWN0ZWRS
YW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworICAgIHJldHVybiBbc2VsZiBfc2hvdWxkSW5zZXJ0
VGV4dDp0ZXh0IHJlcGxhY2luZ1NlbGVjdGlvbjpbc2VsZiBfc2VsZWN0aW9uXSBnaXZlbkFjdGlv
bjphY3Rpb25dOwogfQogCiAvLyBDYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIHZp
ZXcgdGhhdCBmaXRzIG9uIGEgc2luZ2xlIHBhZ2UKQEAgLTQ4NCwyNSArNTI3LDM4IEBAIHZvaWQg
Kl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0cigKICAgICByZXR1cm4gW1tzZWxmIF9i
cmlkZ2VdIHNlbGVjdGVkRE9NUmFuZ2VdOwogfQogCi0tIChCT09MKV9zaG91bGREZWxldGVSYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZQorLSAoV2ViU2VsZWN0aW9uICopX3NlbGVjdGlvbgogewotICAg
IGlmIChyYW5nZSA9PSBuaWwgfHwgW3JhbmdlIGNvbGxhcHNlZF0pCisgICAgcmV0dXJuIFtbc2Vs
ZiBfYnJpZGdlXSBzZWxlY3Rpb25dOworfQorCistIChCT09MKV9zaG91bGREZWxldGVTZWxlY3Rp
b246KFdlYlNlbGVjdGlvbiAqKXNlbAoreworICAgIGlmIChzZWwgPT0gbmlsIHx8IFtbc2VsIHJh
bmdlXSBjb2xsYXBzZWRdKQogICAgICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgaWYgKCFbW3Nl
bGYgX2JyaWRnZV0gY2FuRGVsZXRlUmFuZ2U6cmFuZ2VdKQorICAgIGlmICghW1tzZWxmIF9icmlk
Z2VdIGNhbkRlbGV0ZVJhbmdlOltzZWwgcmFuZ2VdXSkKICAgICAgICAgcmV0dXJuIE5POwogICAg
ICAgICAKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIHJldHVy
biBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNo
b3VsZERlbGV0ZURPTVJhbmdlOnJhbmdlXTsKKworICAgIGlkIGRlbGVnYXRlID0gW3dlYlZpZXcg
ZWRpdGluZ0RlbGVnYXRlXTsKKyAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViVmlldzpzaG91bGREZWxldGVTZWxlY3Rpb246KV0pIHsKKyAgICAgICAgcmV0
dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkRGVsZXRlU2VsZWN0aW9uOnNlbF07
CisgICAgfSBlbHNlIGlmIChbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3
ZWJWaWV3OnNob3VsZERlbGV0ZURPTVJhbmdlOildKSB7CisgICAgICAgIHJldHVybiBbZGVsZWdh
dGUgd2ViVmlldzp3ZWJWaWV3IHNob3VsZERlbGV0ZURPTVJhbmdlOltzZWwgcmFuZ2VdXTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlIHNo
YXJlZEVkaXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZERlbGV0ZVNlbGVjdGlv
bjpzZWxdOworICAgIH0KIH0KIAotLSAodm9pZClfZGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UgCi0gICAgICAgICAgICBraWxsUmluZzooQk9PTClraWxsUmluZyAKLSAgICAgICAgICAgICBw
cmVwZW5kOihCT09MKXByZXBlbmQgCi0gICAgICAgc21hcnREZWxldGVPSzooQk9PTClzbWFydERl
bGV0ZU9LIAotICAgICAgZGVsZXRpb25BY3Rpb246KFdlYkRlbGV0aW9uQWN0aW9uKWRlbGV0aW9u
QWN0aW9uCistICh2b2lkKV9kZWxldGVTZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbCAKKyAg
ICAgICAgICAgICAgICBraWxsUmluZzooQk9PTClraWxsUmluZyAKKyAgICAgICAgICAgICAgICAg
cHJlcGVuZDooQk9PTClwcmVwZW5kIAorICAgICAgICAgICBzbWFydERlbGV0ZU9LOihCT09MKXNt
YXJ0RGVsZXRlT0sgCisgICAgICAgICAgZGVsZXRpb25BY3Rpb246KFdlYkRlbGV0aW9uQWN0aW9u
KWRlbGV0aW9uQWN0aW9uCiB7Ci0gICAgaWYgKCFbc2VsZiBfc2hvdWxkRGVsZXRlUmFuZ2U6cmFu
Z2VdKSB7CisgICAgaWYgKCFbc2VsZiBfc2hvdWxkRGVsZXRlU2VsZWN0aW9uOnNlbF0pIHsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTE1LDcgKzU3MSw3IEBAIHZvaWQgKl9OU1NvZnRM
aW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0cigKICAgICAgICAgaWYgKHN0YXJ0TmV3S2lsbFJpbmdT
ZXF1ZW5jZSkgewogICAgICAgICAgICAgX05TTmV3S2lsbFJpbmdTZXF1ZW5jZSgpOwogICAgICAg
ICB9Ci0gICAgICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbYnJpZGdlIHN0cmluZ0ZvclJhbmdlOnJh
bmdlXTsKKyAgICAgICAgTlNTdHJpbmcgKnN0cmluZyA9IFticmlkZ2Ugc3RyaW5nRm9yUmFuZ2U6
W3NlbCByYW5nZV1dOwogICAgICAgICBpZiAocHJlcGVuZCkgewogICAgICAgICAgICAgX05TUHJl
cGVuZFRvS2lsbFJpbmcoc3RyaW5nKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTUyNiwxNSArNTgy
LDE1IEBAIHZvaWQgKl9OU1NvZnRMaW5raW5nR2V0RnJhbWV3b3JrRnVuY1B0cigKIAogICAgIHN3
aXRjaCAoZGVsZXRpb25BY3Rpb24pIHsKICAgICAgICAgY2FzZSBkZWxldGVTZWxlY3Rpb25BY3Rp
b246Ci0gICAgICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgYWZmaW5p
dHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6WUVTXTsKKyAgICAg
ICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOnNlbCBjbG9zZVR5cGluZzpZRVNdOwogICAgICAg
ICAgICAgW2JyaWRnZSBkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGU6c21hcnREZWxldGVd
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZGVsZXRlS2V5QWN0aW9uOgotICAg
ICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOnJhbmdlIGFmZmluaXR5Ok5TU2Vs
ZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOk5PXTsKKyAgICAgICAgICAgIFti
cmlkZ2Ugc2V0U2VsZWN0aW9uOnNlbCBjbG9zZVR5cGluZzpOT107CiAgICAgICAgICAgICBbYnJp
ZGdlIGRlbGV0ZUtleVByZXNzZWRXaXRoU21hcnREZWxldGU6c21hcnREZWxldGVdOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZm9yd2FyZERlbGV0ZUtleUFjdGlvbjoKLSAgICAg
ICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpOU1NlbGVj
dGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpOT107CisgICAgICAgICAgICBbYnJp
ZGdlIHNldFNlbGVjdGlvbjpzZWwgY2xvc2VUeXBpbmc6Tk9dOwogICAgICAgICAgICAgW2JyaWRn
ZSBmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZFdpdGhTbWFydERlbGV0ZTpzbWFydERlbGV0ZV07CiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC01NDIsMTMgKzU5OCwxMyBAQCB2b2lkICpfTlNT
b2Z0TGlua2luZ0dldEZyYW1ld29ya0Z1bmNQdHIoCiAgICAgX3ByaXZhdGUtPnN0YXJ0TmV3S2ls
bFJpbmdTZXF1ZW5jZSA9IHN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZTsKIH0KIAotLSAodm9pZClf
ZGVsZXRlU2VsZWN0aW9uCistICh2b2lkKV9kZWxldGVDdXJyZW50U2VsZWN0aW9uCiB7Ci0gICAg
W3NlbGYgX2RlbGV0ZVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXQotICAgICAgICAgICAgICBr
aWxsUmluZzpZRVMgCi0gICAgICAgICAgICAgICBwcmVwZW5kOk5PCi0gICAgICAgICBzbWFydERl
bGV0ZU9LOllFUwotICAgICAgICBkZWxldGlvbkFjdGlvbjpkZWxldGVTZWxlY3Rpb25BY3Rpb25d
OworICAgIFtzZWxmIF9kZWxldGVTZWxlY3Rpb246W3NlbGYgX3NlbGVjdGlvbl0KKyAgICAgICAg
ICAgICAgICAgIGtpbGxSaW5nOllFUyAKKyAgICAgICAgICAgICAgICAgICBwcmVwZW5kOk5PCisg
ICAgICAgICAgICAgc21hcnREZWxldGVPSzpZRVMKKyAgICAgICAgICAgIGRlbGV0aW9uQWN0aW9u
OmRlbGV0ZVNlbGVjdGlvbkFjdGlvbl07CiB9CiAKIC0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdp
dGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCkBAIC0yNzg1LDcgKzI4NDEs
NyBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogICAgICAgICAgICAg
ICAgIHJldHVybiBOTzsKICAgICAgICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxl
ID0gW3NlbGYgX2VtcHR5U3R5bGVdOwogICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAi
Y29sb3IiIDpbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0gOkAiIl07Ci0gICAgICAgICAgICBp
ZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBz
aG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOlticmlkZ2Ugc2VsZWN0
ZWRET01SYW5nZV1dKSB7CisgICAgICAgICAgICBpZiAoW3NlbGYgX3Nob3VsZEFwcGx5U3R5bGU6
c3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOlticmlkZ2Ugc2VsZWN0aW9uXV0pIHsKICAgICAg
ICAgICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmll
dyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjpXZWJEcmFnRGVzdGluYXRpb25BY3Rp
b25FZGl0IGZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dOwogICAgICAgICAgICAgICAgIFti
cmlkZ2UgYXBwbHlTdHlsZTpzdHlsZSB3aXRoVW5kb0FjdGlvbjpXZWJVbmRvQWN0aW9uU2V0Q29s
b3JdOwogICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CkBAIC0yNzk4LDcgKzI4NTQsNyBAQCBz
dGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3ID0gbmlsOwogICAgICAgICAgICAgICAgIE5T
UGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJk
XTsKICAgICAgICAgICAgICAgICBCT09MIGNob3NlUGxhaW5UZXh0OwogICAgICAgICAgICAgICAg
IERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OllFUyBjaG9zZVBsYWluVGV4
dDomY2hvc2VQbGFpblRleHRdOwotICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBbc2Vs
ZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6W2JyaWRn
ZSBkcmFnQ2FyZXRET01SYW5nZV0gZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvbkRyb3Bw
ZWRdKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNl
cnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdTZWxlY3Rpb246W2JyaWRnZSBkcmFnQ2FyZXRT
ZWxlY3Rpb25dIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkXSkgewogICAg
ICAgICAgICAgICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
d2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjpXZWJEcmFnRGVzdGluYXRp
b25BY3Rpb25FZGl0IGZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoW3NlbGYgX2lzTW92ZURyYWddKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBCT09MIHNtYXJ0TW92ZSA9IFtbc2VsZiBfYnJpZGdlXSBzZWxlY3Rpb25HcmFudWxhcml0eV0g
PT0gV2ViU2VsZWN0QnlXb3JkICYmIFtzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkXTsKQEAgLTMzMDUsOCArMzM2MSw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAq
bGFzdEhpdFZpZXcgPSBuaWw7CiB7CiAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJp
ZGdlXTsKICAgICBET01SYW5nZSAqcHJvcG9zZWRSYW5nZSA9IFticmlkZ2UgcmFuZ2VCeUFsdGVy
aW5nQ3VycmVudFNlbGVjdGlvbjphbHRlcmF0aW9uIGRpcmVjdGlvbjpkaXJlY3Rpb24gZ3JhbnVs
YXJpdHk6Z3JhbnVsYXJpdHldOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmll
d107Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5n
ZV0gdG9ET01SYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZm
aW5pdHldIHN0aWxsU2VsZWN0aW5nOk5PXSkgeworICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9z
aG91bGRDaGFuZ2VTZWxlY3Rpb25UbzpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpw
cm9wb3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldXSBzdGlsbFNl
bGVjdGluZzpOT10pIHsKICAgICAgICAgW2JyaWRnZSBhbHRlckN1cnJlbnRTZWxlY3Rpb246YWx0
ZXJhdGlvbiBkaXJlY3Rpb246ZGlyZWN0aW9uIGdyYW51bGFyaXR5OmdyYW51bGFyaXR5XTsKICAg
ICB9CiB9CkBAIC0zMzE1LDggKzMzNzAsNyBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRW
aWV3ID0gbmlsOwogewogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CiAg
ICAgRE9NUmFuZ2UgKnByb3Bvc2VkUmFuZ2UgPSBbYnJpZGdlIHJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb246YWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNlOnZlcnRpY2FsRGlzdGFuY2Vd
OwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKFtbd2Vi
VmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpwcm9w
b3NlZFJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldIHN0aWxsU2VsZWN0
aW5nOk5PXSkgeworICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rp
b25UbzpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpwcm9wb3NlZFJhbmdlIGFmZmlu
aXR5OlticmlkZ2Ugc2VsZWN0aW9uQWZmaW5pdHldXSBzdGlsbFNlbGVjdGluZzpOT10pIHsKICAg
ICAgICAgW2JyaWRnZSBhbHRlckN1cnJlbnRTZWxlY3Rpb246YWx0ZXJhdGlvbiB2ZXJ0aWNhbERp
c3RhbmNlOnZlcnRpY2FsRGlzdGFuY2VdOwogICAgIH0KIH0KQEAgLTM1MjgsOSArMzU4Miw4IEBA
IHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiAgICAgV2ViQnJpZGdlICpi
cmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKICAgICBET01SYW5nZSAqcmFuZ2UgPSBbYnJpZGdlIHJh
bmdlQnlFeHBhbmRpbmdTZWxlY3Rpb25XaXRoR3JhbnVsYXJpdHk6Z3JhbnVsYXJpdHldOwogICAg
IGlmIChyYW5nZSAmJiAhW3JhbmdlIGNvbGxhcHNlZF0pIHsKLSAgICAgICAgV2ViVmlldyAqd2Vi
VmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gdG9ET01SYW5nZTpyYW5nZSBhZmZpbml0eTpbYnJp
ZGdlIHNlbGVjdGlvbkFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpOT10pIHsKLSAgICAgICAgICAg
IFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpbYnJpZGdlIHNlbGVj
dGlvbkFmZmluaXR5XSBjbG9zZVR5cGluZzpZRVNdOworICAgICAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBfc2hvdWxkQ2hhbmdlU2VsZWN0aW9uVG86W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRo
UmFuZ2U6cmFuZ2UgYWZmaW5pdHk6W2JyaWRnZSBzZWxlY3Rpb25BZmZpbml0eV1dIHN0aWxsU2Vs
ZWN0aW5nOk5PXSkgeworICAgICAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVj
dGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnJhbmdlIGFmZmluaXR5OlticmlkZ2Ugc2VsZWN0
aW9uQWZmaW5pdHldIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpb
YnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6WUVTXTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTM1NjgsNyArMzYyMSw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFz
dEhpdFZpZXcgPSBuaWw7CiAgICAgICAgIE5TQmVlcCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIFtzZWxmIF9kZWxldGVTZWxlY3Rpb25dOworICAgIFtzZWxmIF9kZWxldGVDdXJyZW50
U2VsZWN0aW9uXTsKIH0KIAogLSAodm9pZCljdXQ6KGlkKXNlbmRlcgpAQCAtMzU4MSw4ICszNjM0
LDggQEAgc3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKICAgICAgICAgTlNC
ZWVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgRE9NUmFuZ2UgKnJhbmdlID0gW3Nl
bGYgX3NlbGVjdGVkUmFuZ2VdOwotICAgIGlmIChbc2VsZiBfc2hvdWxkRGVsZXRlUmFuZ2U6cmFu
Z2VdKSB7CisgICAgV2ViU2VsZWN0aW9uICpzZWwgPSBbc2VsZiBfc2VsZWN0aW9uXTsKKyAgICBp
ZiAoW3NlbGYgX3Nob3VsZERlbGV0ZVNlbGVjdGlvbjpzZWxdKSB7CiAgICAgICAgIFtzZWxmIF93
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJk
XV07CiAgICAgICAgIFticmlkZ2UgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlOltzZWxm
IF9jYW5TbWFydENvcHlPckRlbGV0ZV1dOwogICAgfQpAQCAtMzczMSw5ICszNzg0LDggQEAgc3Rh
dGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKIHsKICAgICBpZiAoc3R5bGUgPT0g
bmlsIHx8IFtzdHlsZSBsZW5ndGhdID09IDAgfHwgIVtzZWxmIF9jYW5FZGl0XSkKICAgICAgICAg
cmV0dXJuOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAgICAgV2Vi
QnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKLSAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0
aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxlOnN0
eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV0pIHsKKyAgICBp
ZiAoW3NlbGYgX3Nob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOltz
ZWxmIF9zZWxlY3Rpb25dXSkgewogICAgICAgICBbYnJpZGdlIGFwcGx5U3R5bGU6c3R5bGUgd2l0
aFVuZG9BY3Rpb246dW5kb0FjdGlvbl07CiAgICAgfQogfQpAQCAtMzc0Miw5ICszNzk0LDggQEAg
c3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKIHsKICAgICBpZiAoc3R5bGUg
PT0gbmlsIHx8IFtzdHlsZSBsZW5ndGhdID09IDAgfHwgIVtzZWxmIF9jYW5FZGl0XSkKICAgICAg
ICAgcmV0dXJuOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CiAgICAg
V2ViQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsKLSAgICBpZiAoW1t3ZWJWaWV3IF9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxl
OnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV0pIHsKKyAg
ICBpZiAoW3NlbGYgX3Nob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9u
OltzZWxmIF9zZWxlY3Rpb25dXSkgewogICAgICAgICBbYnJpZGdlIGFwcGx5UGFyYWdyYXBoU3R5
bGU6c3R5bGUgd2l0aFVuZG9BY3Rpb246dW5kb0FjdGlvbl07CiAgICAgfQogfQpAQCAtNDA5NCw4
ICs0MTQ1LDcgQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogLSAo
dm9pZClfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVjdG9yOihTRUwpc2VsZWN0b3IgaW5SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogewogICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0g
W3NlbGYgX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdOwotICAgIFdl
YlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKFtbd2ViVmlldyBfZWRp
dGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpz
dHlsZSB0b0VsZW1lbnRzSW5ET01SYW5nZTpyYW5nZV0pIHsKKyAgICBpZiAoW3NlbGYgX3Nob3Vs
ZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luU2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2Vs
ZWN0aW9uV2l0aFJhbmdlOnJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3Ry
ZWFtXV0pIHsKICAgICAgICAgW1tzZWxmIF9icmlkZ2VdIGFwcGx5U3R5bGU6c3R5bGUgd2l0aFVu
ZG9BY3Rpb246W3NlbGYgX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxl
Y3Rvcl1dOwogICAgIH0KIH0KQEAgLTQyNjMsOSArNDMxMywxMiBAQCBOU1N0cm9rZUNvbG9yQXR0
cmlidXRlTmFtZSAgICAgICAgLyogTlNDCiAgICAgICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KHJhbmdlID09IG5pbCB8fCBbcmFuZ2UgY29sbGFwc2VkXSB8fCAhW3NlbGYgX3Nob3VsZERlbGV0
ZVJhbmdlOnJhbmdlXSkKKyAgICBpZiAocmFuZ2UgPT0gbmlsIHx8IFtyYW5nZSBjb2xsYXBzZWRd
KQogICAgICAgICByZXR1cm4gTk87Ci0gICAgW3NlbGYgX2RlbGV0ZVJhbmdlOnJhbmdlIGtpbGxS
aW5nOmtpbGxSaW5nIHByZXBlbmQ6Tk8gc21hcnREZWxldGVPSzpZRVMgZGVsZXRpb25BY3Rpb246
ZGVsZXRpb25BY3Rpb25dOworICAgIFdlYlNlbGVjdGlvbiAqc2VsID0gW1dlYlNlbGVjdGlvbiBz
ZWxlY3Rpb25XaXRoUmFuZ2U6cmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW1dOworICAgIGlmICghW3NlbGYgX3Nob3VsZERlbGV0ZVNlbGVjdGlvbjpzZWxdKQorICAg
ICAgICByZXR1cm4gTk87CisgICAgW3NlbGYgX2RlbGV0ZVNlbGVjdGlvbjpzZWwga2lsbFJpbmc6
a2lsbFJpbmcgcHJlcGVuZDpOTyBzbWFydERlbGV0ZU9LOllFUyBkZWxldGlvbkFjdGlvbjpkZWxl
dGlvbkFjdGlvbl07CiAgICAgcmV0dXJuIFlFUzsKIH0KIApAQCAtNDUyMSw3ICs0NTc0LDcgQEAg
c3RhdGljIERPTVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZQogICAgICAgICBOU19IQU5E
TEVSCiAgICAgICAgICAgICByID0gc2VsZWN0aW9uOwogICAgICAgICBOU19FTkRIQU5ETEVSCi0g
ICAgICAgIFtzZWxmIF9kZWxldGVSYW5nZTpyIGtpbGxSaW5nOllFUyBwcmVwZW5kOllFUyBzbWFy
dERlbGV0ZU9LOk5PIGRlbGV0aW9uQWN0aW9uOmRlbGV0ZVNlbGVjdGlvbkFjdGlvbl07CisgICAg
ICAgIFtzZWxmIF9kZWxldGVTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRoUmFu
Z2U6ciBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV0ga2lsbFJpbmc6WUVT
IHByZXBlbmQ6WUVTIHNtYXJ0RGVsZXRlT0s6Tk8gZGVsZXRpb25BY3Rpb246ZGVsZXRlU2VsZWN0
aW9uQWN0aW9uXTsKICAgICB9CiAgICAgW3NlbGYgc2V0TWFyazpzZW5kZXJdOwogfQpAQCAtNDUz
Niw3ICs0NTg5LDggQEAgc3RhdGljIERPTVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZQog
ICAgIH0KICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwog
ICAgIE5TX0RVUklORwotICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6dW5pb25E
T01SYW5nZXMobWFyaywgc2VsZWN0aW9uKSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93
bnN0cmVhbSBjbG9zZVR5cGluZzpZRVNdOworICAgICAgICBET01SYW5nZSAqciA9IHVuaW9uRE9N
UmFuZ2VzKG1hcmssIHNlbGVjdGlvbik7CisgICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0aW9uOltX
ZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyIGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFudWxh
cml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6WUVTXTsKICAg
ICBOU19IQU5ETEVSCiAgICAgICAgIE5TQmVlcCgpOwogICAgIE5TX0VOREhBTkRMRVIKQEAgLTQ1
NTIsNyArNDYwNiw3IEBAIHN0YXRpYyBET01SYW5nZSAqdW5pb25ET01SYW5nZXMoRE9NUmFuZ2UK
ICAgICB9CiAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IFtzZWxmIF9zZWxlY3RlZFJhbmdlXTsK
ICAgICBOU19EVVJJTkcKLSAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3RlZERPTVJhbmdlOm1hcmsg
YWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xvc2VUeXBpbmc6WUVTXTsK
KyAgICAgICAgW2JyaWRnZSBzZXRTZWxlY3Rpb246W1dlYlNlbGVjdGlvbiBzZWxlY3Rpb25XaXRo
QmFzZVJhbmdlOm1hcmsgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gZGly
ZWN0aW9uOldlYlRleHRTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OlticmlkZ2Ugc2VsZWN0aW9u
R3JhbnVsYXJpdHldXSBjbG9zZVR5cGluZzpZRVNdOwogICAgIE5TX0hBTkRMRVIKICAgICAgICAg
TlNCZWVwKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ1NzUsMTEgKzQ2MjksMTAgQEAgc3RhdGlj
IERPTVJhbmdlICp1bmlvbkRPTVJhbmdlcyhET01SYW5nZQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIE5TU3RyaW5nICp0cmFuc3Bvc2VkID0gW1tjaGFyYWN0ZXJzIHN1YnN0cmluZ0Zyb21J
bmRleDoxXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpbY2hhcmFjdGVycyBzdWJzdHJpbmdUb0lu
ZGV4OjFdXTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIGlm
ICghW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSB0b0RPTVJh
bmdlOnIgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6Tk9dKSB7CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9zaG91bGRDaGFuZ2VTZWxlY3Rp
b25UbzpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhSYW5nZTpyIGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtXSBzdGlsbFNlbGVjdGluZzpOT10pIHsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBbYnJpZGdlIHNldFNlbGVjdGVkRE9NUmFuZ2U6ciBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBjbG9zZVR5cGluZzpZRVNdOworICAgIFticmlk
Z2Ugc2V0U2VsZWN0aW9uOltXZWJTZWxlY3Rpb24gc2VsZWN0aW9uV2l0aEJhc2VSYW5nZTpyIGFm
ZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2Vs
ZWN0Rm9yd2FyZCBncmFudWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xv
c2VUeXBpbmc6WUVTXTsKICAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDp0cmFuc3Bvc2VkIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZF0pIHsK
ICAgICAgICAgW2JyaWRnZSByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dHJhbnNwb3NlZCBzZWxl
Y3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6Tk9dOwogICAgIH0KQEAgLTQ5NjcsNyArNTAy
MCw3IEBAIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXMgPSBuaWw7CiAgICAgaWYgKFtz
ZWxmIGhhc01hcmtlZFRleHRdKSB7CiAgICAgICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYg
X2JyaWRnZV07CiAgICAgICAgIERPTVJhbmdlICptYXJrZWRUZXh0UmFuZ2UgPSBbYnJpZGdlIG1h
cmtlZFRleHRET01SYW5nZV07Ci0gICAgICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpt
YXJrZWRUZXh0UmFuZ2UgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gY2xv
c2VUeXBpbmc6Tk9dOworICAgICAgICBbYnJpZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9u
IHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6bWFya2VkVGV4dFJhbmdlIGFmZmluaXR5Ok5TU2VsZWN0
aW9uQWZmaW5pdHlEb3duc3RyZWFtIGRpcmVjdGlvbjpXZWJUZXh0U2VsZWN0Rm9yd2FyZCBncmFu
dWxhcml0eTpbYnJpZGdlIHNlbGVjdGlvbkdyYW51bGFyaXR5XV0gY2xvc2VUeXBpbmc6Tk9dOwog
ICAgIH0KIH0KIApAQCAtNDk4Nyw3ICs1MDQwLDcgQEAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0
cmlidXRlcyA9IG5pbDsKICAgICBbc2VsZWN0ZWRSYW5nZSBzZXRTdGFydDpbbWFya2VkVGV4dFJh
bmdlIHN0YXJ0Q29udGFpbmVyXSA6c2VsZWN0aW9uU3RhcnRdOwogICAgIFtzZWxlY3RlZFJhbmdl
IHNldEVuZDpbbWFya2VkVGV4dFJhbmdlIHN0YXJ0Q29udGFpbmVyXSA6c2VsZWN0aW9uRW5kXTsK
IAotICAgIFticmlkZ2Ugc2V0U2VsZWN0ZWRET01SYW5nZTpzZWxlY3RlZFJhbmdlIGFmZmluaXR5
Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtIGNsb3NlVHlwaW5nOk5PXTsKKyAgICBbYnJp
ZGdlIHNldFNlbGVjdGlvbjpbV2ViU2VsZWN0aW9uIHNlbGVjdGlvbldpdGhCYXNlUmFuZ2U6c2Vs
ZWN0ZWRSYW5nZSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBkaXJlY3Rp
b246V2ViVGV4dFNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6W2JyaWRnZSBzZWxlY3Rpb25HcmFu
dWxhcml0eV1dIGNsb3NlVHlwaW5nOk5PXTsKIH0KIAogLSAodm9pZClfZXh0cmFjdEF0dHJpYnV0
ZXM6KE5TQXJyYXkgKiopYSByYW5nZXM6KE5TQXJyYXkgKiopciBmcm9tQXR0cmlidXRlZFN0cmlu
ZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nCkBAIC01MTkyLDcgKzUyNDUsOSBAQCBzdGF0
aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAgIC8vIGFibGUgdG8gcmV2ZXJ0
IHRoYXQpLiAgTWltaWMgTlNUZXh0LgogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW192aWV3IF9i
cmlkZ2VdOwogICAgIE5TU3RyaW5nICpuZXdUZXh0ID0gW21hdGNoIHN1YnN0cmluZ0Zyb21JbmRl
eDpwcmVmaXhMZW5ndGhdOwotICAgIFticmlkZ2UgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5l
d1RleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CisgICAgaWYgKFtf
dmlldyBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1RleHQgZ2l2ZW5BY3Rpb246
V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pIHsKKyAgICAgICAgW2JyaWRnZSByZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNl
Ok5PXTsKKyAgICB9CiB9CiAKIC8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJp
bmRpbmcubQpAQCAtNTM0NSw3ICs1NDAwLDkgQEAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0cmli
dXRlcyA9IG5pbDsKIAogICAgICAgICBpZiAocmV2ZXJ0Q2hhbmdlKSB7CiAgICAgICAgICAgICBX
ZWJCcmlkZ2UgKmJyaWRnZSA9IFtfdmlldyBfYnJpZGdlXTsKLSAgICAgICAgICAgIFticmlkZ2Ug
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBsYWNlbWVu
dDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICAgICAgICAgIGlmIChbX3ZpZXcgX3Nob3VsZFJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2luYWxTdHJpbmcgZ2l2ZW5BY3Rpb246V2ViVmll
d0luc2VydEFjdGlvblBhc3RlZF0pIHsKKyAgICAgICAgICAgICAgICBbYnJpZGdlIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNt
YXJ0UmVwbGFjZTpOT107CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoZ29MZWZ0
KSB7CiAgICAgICAgICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07CiAgICAgICAgIH0gZWxz
ZSB7CkluZGV4OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXcubQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMzA0CmRpZmYgLXAgLXUgLXIxLjMwNCBXZWJLaXQvV2ViVmlldy5z
dWJwcm9qL1dlYlZpZXcubQotLS0gV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3Lm0JMjMg
QXVnIDIwMDUgMDE6MjI6MTYgLTAwMDAJMS4zMDQKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ov
V2ViVmlldy5tCTUgU2VwIDIwMDUgMDA6MDI6MzAgLTAwMDAKQEAgLTUwLDYgKzUwLDcgQEAKICNp
bXBvcnQgPFdlYktpdC9XZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaD4KICNpbXBvcnQgPFdlYktp
dC9XZWJEb3dubG9hZC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZS5oPgor
I2ltcG9ydCA8V2ViS2l0L1dlYkVkaXRpbmdEZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJGb3JtRGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVJ
bnRlcm5hbC5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkZyYW1lVmlld0ludGVybmFsLmg+CkBAIC04
Niw2ICs4Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVFbmNvZGluZ3MuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVNldHRpbmdzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVW
aWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYlNlbGVjdGlvbi5oPgogCiAjaW1wb3J0IDxGb3Vu
ZGF0aW9uL05TVVJMQ29ubmVjdGlvbi5oPgogI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4K
QEAgLTI1NzMsNiArMjU3NSwyMyBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdl
YkZyYW1lCiAgICAgcmV0dXJuIF9wcml2YXRlLT5zY3JpcHREZWJ1Z0RlbGVnYXRlOwogfQogCist
ICh2b2lkKXNldFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uCit7CisgICAgaWYg
KFtzZWxlY3Rpb24gYmFzZVJhbmdlXSA9PSBuaWwpIHsKKyAgICAgICAgW1tzZWxmIF9icmlkZ2VG
b3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBkZXNlbGVjdFRleHRdOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIERlcml2ZSB0aGUgYnJpZGdlIHRvIHVzZSBmcm9tIHRoZSByYW5nZSBwYXNzZWQgaW4u
CisgICAgICAgIC8vIFVzaW5nIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lIGNvdWxkIGdp
dmUgdXMgYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbgorICAgICAgICAvLyB0aGUgb25lIHRoZSBy
YW5nZSB1c2VzLgorICAgICAgICBbW1tbc2VsZWN0aW9uIGJhc2VSYW5nZV0gc3RhcnRDb250YWlu
ZXJdIF9icmlkZ2VdIHNldFNlbGVjdGlvbjpzZWxlY3Rpb24gY2xvc2VUeXBpbmc6WUVTXTsKKyAg
ICB9Cit9CisKKy0gKFdlYlNlbGVjdGlvbiAqKXNlbGVjdGlvbgoreworICAgIHJldHVybiBbW3Nl
bGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVjdGlvbl07Cit9CisKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYlZpZXdQcmludGluZ1ByaXZhdGUpCkBAIC0y
NzEwLDE5ICsyNzI5LDQwIEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJh
bWUKICAgICByZXR1cm4gW2JyaWRnZSBlZGl0YWJsZURPTVJhbmdlRm9yUG9pbnQ6W3NlbGYgY29u
dmVydFBvaW50OnBvaW50IHRvVmlldzpbW1ticmlkZ2Ugd2ViRnJhbWVdIGZyYW1lVmlld10gZG9j
dW1lbnRWaWV3XV1dOwogfQogCi0tIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdl
OihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2Vk
UmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3Rp
bGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGlvblRv
OihXZWJTZWxlY3Rpb24gKilzZWwgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZwogewotICAgIHJl
dHVybiBbW3NlbGYgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpzZWxmIHNob3Vs
ZENoYW5nZVNlbGVjdGVkRE9NUmFuZ2U6Y3VycmVudFJhbmdlIHRvRE9NUmFuZ2U6cHJvcG9zZWRS
YW5nZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAg
ICBpZCBkZWxlZ2F0ZSA9IFtzZWxmIGVkaXRpbmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0
ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQ2hhbmdlU2VsZWN0
aW9uOnRvU2VsZWN0aW9uOnN0aWxsU2VsZWN0aW5nOildKSB7CisgICAgICAgIHJldHVybiBbZGVs
ZWdhdGUgd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGlvbjpbc2VsZiBzZWxlY3Rpb25d
IHRvU2VsZWN0aW9uOnNlbCBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAgICB9IGVsc2UgaWYgKFtk
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRET01SYW5nZTp0b0RPTVJhbmdlOmFmZmluaXR5OnN0aWxsU2VsZWN0aW5nOildKSB7
CisgICAgICAgIHJldHVybiBbZGVsZWdhdGUgd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVj
dGVkRE9NUmFuZ2U6W3NlbGYgc2VsZWN0ZWRET01SYW5nZV0gdG9ET01SYW5nZTpbc2VsIHJhbmdl
XSBhZmZpbml0eTpbc2VsIGFmZmluaXR5XSBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAgICB9IGVs
c2UgeworICAgICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlIHNoYXJlZEVk
aXRpbmdEZWxlZ2F0ZV0gd2ViVmlldzpzZWxmIHNob3VsZENoYW5nZVNlbGVjdGlvbjpbc2VsZiBz
ZWxlY3Rpb25dIHRvU2VsZWN0aW9uOnNlbCBzdGlsbFNlbGVjdGluZzpmbGFnXTsKKyAgICB9CiB9
CiAKLS0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICopcmFu
Z2UKKy0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24g
KilzZWwKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6c2VsZiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOnJhbmdlXTsKKyAgICBpZCBk
ZWxlZ2F0ZSA9IFtzZWxmIGVkaXRpbmdEZWxlZ2F0ZV07CisgICAgaWYgKFtkZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQmVnaW5FZGl0aW5nSW5TZWxl
Y3Rpb246KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OnNlbGYgc2hvdWxk
QmVnaW5FZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9IGVsc2UgaWYgKFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkQmVnaW5FZGl0aW5nSW5E
T01SYW5nZTopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6c2VsZiBzaG91
bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOltzZWwgcmFuZ2VdXTsKKyAgICB9IGVsc2UgeworICAg
ICAgICByZXR1cm4gW1tXZWJEZWZhdWx0RWRpdGluZ0RlbGVnYXRlIHNoYXJlZEVkaXRpbmdEZWxl
Z2F0ZV0gd2ViVmlldzpzZWxmIHNob3VsZEJlZ2luRWRpdGluZ0luU2VsZWN0aW9uOnNlbF07Cisg
ICAgfQogfQogCi0tIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQorLSAoQk9PTClfc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOihXZWJTZWxlY3Rp
b24gKilzZWwKIHsKLSAgICByZXR1cm4gW1tzZWxmIF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6c2VsZiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTpyYW5nZV07CisgICAgaWQg
ZGVsZWdhdGUgPSBbc2VsZiBlZGl0aW5nRGVsZWdhdGVdOworICAgIGlmIChbZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJWaWV3OnNob3VsZEVuZEVkaXRpbmdJblNlbGVj
dGlvbjopXSkgeworICAgICAgICByZXR1cm4gW2RlbGVnYXRlIHdlYlZpZXc6c2VsZiBzaG91bGRF
bmRFZGl0aW5nSW5TZWxlY3Rpb246c2VsXTsKKyAgICB9IGVsc2UgaWYgKFtkZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6c2hvdWxkRW5kRWRpdGluZ0luRE9NUmFu
Z2U6KV0pIHsKKyAgICAgICAgcmV0dXJuIFtkZWxlZ2F0ZSB3ZWJWaWV3OnNlbGYgc2hvdWxkRW5k
RWRpdGluZ0luRE9NUmFuZ2U6W3NlbCByYW5nZV1dOworICAgIH0gZWxzZSB7CisgICAgICAgIHJl
dHVybiBbW1dlYkRlZmF1bHRFZGl0aW5nRGVsZWdhdGUgc2hhcmVkRWRpdGluZ0RlbGVnYXRlXSB3
ZWJWaWV3OnNlbGYgc2hvdWxkRW5kRWRpdGluZ0luU2VsZWN0aW9uOnNlbF07CisgICAgfQogfQog
CiAtIChCT09MKV9jYW5QYXN0ZQpAQCAtMjczMywxOSArMjc3MywxMiBAQCBzdGF0aWMgV2ViRnJh
bWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rp
b25BZmZpbml0eQogewotICAgIGlmIChyYW5nZSA9PSBuaWwpIHsKLSAgICAgICAgW1tzZWxmIF9i
cmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBkZXNlbGVjdFRleHRdOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIERlcml2ZSB0aGUgYnJpZGdlIHRvIHVzZSBmcm9tIHRoZSByYW5nZSBwYXNz
ZWQgaW4uCi0gICAgICAgIC8vIFVzaW5nIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lIGNv
dWxkIGdpdmUgdXMgYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbgotICAgICAgICAvLyB0aGUgb25l
IHRoZSByYW5nZSB1c2VzLgotICAgICAgICBbW1tyYW5nZSBzdGFydENvbnRhaW5lcl0gX2JyaWRn
ZV0gc2V0U2VsZWN0ZWRET01SYW5nZTpyYW5nZSBhZmZpbml0eTpzZWxlY3Rpb25BZmZpbml0eSBj
bG9zZVR5cGluZzpZRVNdOwotICAgIH0KKyAgICBbc2VsZiBzZXRTZWxlY3Rpb246W1dlYlNlbGVj
dGlvbiBzZWxlY3Rpb25XaXRoQmFzZVJhbmdlOnJhbmdlIGFmZmluaXR5OnNlbGVjdGlvbkFmZmlu
aXR5IGRpcmVjdGlvbjpbW3NlbGYgX2JyaWRnZUZvclNlbGVjdGVkT3JNYWluRnJhbWVdIHNlbGVj
dGlvbkRpcmVjdGlvbl0gZ3JhbnVsYXJpdHk6W1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFp
bkZyYW1lXSBzZWxlY3Rpb25HcmFudWxhcml0eV1dXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilzZWxl
Y3RlZERPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRPck1h
aW5GcmFtZV0gc2VsZWN0ZWRET01SYW5nZV07CisgICAgcmV0dXJuIFtbc2VsZiBzZWxlY3Rpb25d
IHJhbmdlXTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQpA
QCAtMjc1Myw2ICsyNzg2LDE2IEBAIHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2Vi
RnJhbWUKICAgICByZXR1cm4gW1tzZWxmIF9icmlkZ2VGb3JTZWxlY3RlZE9yTWFpbkZyYW1lXSBz
ZWxlY3Rpb25BZmZpbml0eV07CiB9CiAKKy0gKFdlYlRleHRTZWxlY3Rpb25EaXJlY3Rpb24pc2Vs
ZWN0aW9uRGlyZWN0aW9uCit7CisgICAgcmV0dXJuIFtbc2VsZiBfYnJpZGdlRm9yU2VsZWN0ZWRP
ck1haW5GcmFtZV0gc2VsZWN0aW9uRGlyZWN0aW9uXTsKK30KKworLSAoV2ViVGV4dFNlbGVjdGlv
bkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51bGFyaXR5Cit7CisgICAgcmV0dXJuIFtbc2VsZiBf
YnJpZGdlRm9yU2VsZWN0ZWRPck1haW5GcmFtZV0gc2VsZWN0aW9uR3JhbnVsYXJpdHldOworfQor
CiAtICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcKIHsKICAgICBpZiAoX3ByaXZhdGUtPmVk
aXRhYmxlICE9IGZsYWcpIHsKSW5kZXg6IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViVmlld0lu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1
YnByb2ovV2ViVmlld0ludGVybmFsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAt
cCAtdSAtcjEuMjEgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwuaAotLS0g
V2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3SW50ZXJuYWwuaAkxNCBBdWcgMjAwNSAwOTox
Mjo0OCAtMDAwMAkxLjIxCisrKyBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdJbnRlcm5h
bC5oCTUgU2VwIDIwMDUgMDA6MDI6MzAgLTAwMDAKQEAgLTMyLDYgKzMyLDcgQEAKIAogQGNsYXNz
IERPTUNTU1N0eWxlRGVjbGFyYXRpb247CiBAY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0OworQGNs
YXNzIFdlYlNlbGVjdGlvbjsKIAogQHByb3RvY29sIFdlYkRvY3VtZW50RHJhZ2dpbmc7CiAKQEAg
LTEyMiw4ICsxMjMsOCBAQAogCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdFZGl0aW5nRXh0
cmFzKQogLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7
Ci0tIChCT09MKV9zaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJl
bnRSYW5nZSB0b0RPTVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wp
ZmxhZzsKLS0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2U7Ci0tIChCT09MKV9zaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZTooRE9NUmFuZ2UgKily
YW5nZTsKKy0gKEJPT0wpX3Nob3VsZENoYW5nZVNlbGVjdGlvblRvOihXZWJTZWxlY3Rpb24gKilz
ZWwgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKKy0gKEJPT0wpX3Nob3VsZEJlZ2luRWRpdGlu
Z0luU2VsZWN0aW9uOihXZWJTZWxlY3Rpb24gKilzZWw7CistIChCT09MKV9zaG91bGRFbmRFZGl0
aW5nSW5TZWxlY3Rpb246KFdlYlNlbGVjdGlvbiAqKXNlbDsKIC0gKEJPT0wpX2NhblBhc3RlOwog
QGVuZApJbmRleDogV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQ
cml2YXRlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ4CmRpZmYgLXAgLXUgLXIxLjE0OCBX
ZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYlZpZXdQcml2YXRlLmgKLS0tIFdlYktpdC9XZWJWaWV3
LnN1YnByb2ovV2ViVmlld1ByaXZhdGUuaAkyMyBBdWcgMjAwNSAwMToyMjoxNiAtMDAwMAkxLjE0
OAorKysgV2ViS2l0L1dlYlZpZXcuc3VicHJvai9XZWJWaWV3UHJpdmF0ZS5oCTUgU2VwIDIwMDUg
MDA6MDI6MzAgLTAwMDAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2ltcG9ydCA8V2ViS2l0L1dlYlZp
ZXcuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJGcmFtZVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV2ViU2VsZWN0aW9uLmg+CiAKIEBjbGFzcyBOU0Vycm9yOwogQGNsYXNzIFdlYkZyYW1lOwpA
QCAtMTA2LDYgKzEwNywxNiBAQCB0eXBlZGVmIGVudW0gewogCiBAZW5kCiAKK0BpbnRlcmZhY2Ug
V2ViVmlldyAoV2ViVmlld0VkaXRpbmdQZW5kaW5nUHVibGljKQorCisvLyBBZGQgc3VwcG9ydCBm
b3IgV2ViU2VsZWN0aW9uCistICh2b2lkKXNldFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uICopc2Vs
ZWN0aW9uOworLSAoV2ViU2VsZWN0aW9uICopc2VsZWN0aW9uOworLSAoV2ViVGV4dFNlbGVjdGlv
bkRpcmVjdGlvbilzZWxlY3Rpb25EaXJlY3Rpb247CistIChXZWJUZXh0U2VsZWN0aW9uR3JhbnVs
YXJpdHkpc2VsZWN0aW9uR3JhbnVsYXJpdHk7CisKK0BlbmQKKwogQGludGVyZmFjZSBXZWJWaWV3
IChXZWJQcml2YXRlKQogCiArIChCT09MKV92aWV3Q2xhc3M6KENsYXNzICopdkNsYXNzIGFuZFJl
cHJlc2VudGF0aW9uQ2xhc3M6KENsYXNzICopckNsYXNzIGZvck1JTUVUeXBlOihOU1N0cmluZyAq
KU1JTUVUeXBlOwo=
</data>
<flag name="review"
          id="534"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3881</attachid>
            <date>2005-09-12 14:52:19 -0700</date>
            <delta_ts>2005-09-23 18:16:14 -0700</delta_ts>
            <desc>rename patch</desc>
            <filename>rename.patch</filename>
            <type>text/plain</type>
            <size>152577</size>
            <attacher name="Duncan Wilcox">duncan</attacher>
            
              <data encoding="base64">SW5kZXg6IEZvcndhcmRpbmdIZWFkZXJzL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KZGlmZiAtTnB1IEZvcndhcmRpbmdIZWFkZXJzL2VkaXRpbmcvU2VsZWN0aW9uQ29u
dHJvbGxlci5oCi0tLSBGb3J3YXJkaW5nSGVhZGVycy9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuaAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBGb3J3YXJkaW5nSGVhZGVycy9lZGl0
aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAkxMiBTZXAgMjAwNSAxMzo1NTo1MCAtMDAwMApAQCAt
MCwwICsxIEBACisjaW1wb3J0IDxTZWxlY3Rpb25Db250cm9sbGVyLmg+CkluZGV4OiBraHRtbC9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtTnB1IGtodG1s
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAKLS0tIGtodG1sL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5jcHAJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvZWRp
dGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkxMiBTZXAgMjAwNSAxMjozMToyNyAtMDAwMApA
QCAtMCwwICsxLDExMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgIAorI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgPHFldmVudC5oPgorI2luY2x1ZGUgPHFwYWlu
dGVyLmg+CisjaW5jbHVkZSA8cXJlY3QuaD4KKworI2luY2x1ZGUgImRvbS9kb21fbm9kZS5oIgor
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCisjaW5jbHVkZSAia2h0bWxfcGFydC5oIgorI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgorI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0Lmgi
CisjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgorI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfdGV4dC5oIgorI2luY2x1ZGUgInZpc2libGVfcG9zaXRpb24uaCIKKyNpbmNsdWRl
ICJ2aXNpYmxlX3VuaXRzLmgiCisjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCisjaW5jbHVk
ZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgorI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCisjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2Vp
bXBsLmgiCisKKyNpZiBBUFBMRV9DSEFOR0VTCisjaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgor
I2Vsc2UKKyNkZWZpbmUgQVNTRVJUKGFzc2VydGlvbikgYXNzZXJ0KGFzc2VydGlvbikKKyNlbmRp
ZgorCisjZGVmaW5lIEVESVRfREVCVUcgMAorCit1c2luZyBET006OkRPTVN0cmluZzsKK3VzaW5n
IERPTTo6RWxlbWVudEltcGw7Cit1c2luZyBET006Ok5vZGVJbXBsOwordXNpbmcgRE9NOjpQb3Np
dGlvbjsKK3VzaW5nIERPTTo6UmFuZ2U7Cit1c2luZyBET006OlJhbmdlSW1wbDsKKworbmFtZXNw
YWNlIGtodG1sIHsKKworU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcigp
Cit7CisgICAgaW5pdChET1dOU1RSRUFNKTsKK30KKworU2VsZWN0aW9uQ29udHJvbGxlcjo6U2Vs
ZWN0aW9uQ29udHJvbGxlcihjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHkp
CisgICAgOiBtX2Jhc2UocG9zKSwgbV9leHRlbnQocG9zKQoreworICAgIGluaXQoYWZmaW5pdHkp
OworICAgIHZhbGlkYXRlKCk7Cit9CisKK1NlbGVjdGlvbkNvbnRyb2xsZXI6OlNlbGVjdGlvbkNv
bnRyb2xsZXIoY29uc3QgUmFuZ2VJbXBsICpyLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5LCBFQWZm
aW5pdHkgZXh0ZW50QWZmaW5pdHkpCisgICAgOiBtX2Jhc2Uoc3RhcnRQb3NpdGlvbihyKSksIG1f
ZXh0ZW50KGVuZFBvc2l0aW9uKHIpKQoreworICAgIGluaXQoYmFzZUFmZmluaXR5KTsKKyAgICB2
YWxpZGF0ZSgpOworfQorCitTZWxlY3Rpb25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVy
KGNvbnN0IFBvc2l0aW9uICZiYXNlLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5LCBjb25zdCBQb3Np
dGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgZXh0ZW50QWZmaW5pdHkpCisgICAgOiBtX2Jhc2UoYmFz
ZSksIG1fZXh0ZW50KGV4dGVudCkKK3sKKyAgICBpbml0KGJhc2VBZmZpbml0eSk7CisgICAgdmFs
aWRhdGUoKTsKK30KKworU2VsZWN0aW9uQ29udHJvbGxlcjo6U2VsZWN0aW9uQ29udHJvbGxlcihj
b25zdCBWaXNpYmxlUG9zaXRpb24gJnZpc2libGVQb3MpCisgICAgOiBtX2Jhc2UodmlzaWJsZVBv
cy5wb3NpdGlvbigpKSwgbV9leHRlbnQodmlzaWJsZVBvcy5wb3NpdGlvbigpKQoreworICAgIGlu
aXQodmlzaWJsZVBvcy5hZmZpbml0eSgpKTsKKyAgICB2YWxpZGF0ZSgpOworfQorCitTZWxlY3Rp
b25Db250cm9sbGVyOjpTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
YmFzZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICZleHRlbnQpCisgICAgOiBtX2Jhc2UoYmFzZS5w
b3NpdGlvbigpKSwgbV9leHRlbnQoZXh0ZW50LnBvc2l0aW9uKCkpCit7CisgICAgaW5pdChiYXNl
LmFmZmluaXR5KCkpOworICAgIHZhbGlkYXRlKCk7Cit9CisKK1NlbGVjdGlvbkNvbnRyb2xsZXI6
OlNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbykKKyAgICA6
IG1fYmFzZShvLm1fYmFzZSksIG1fZXh0ZW50KG8ubV9leHRlbnQpCisgICAgLCBtX3N0YXJ0KG8u
bV9zdGFydCksIG1fZW5kKG8ubV9lbmQpCisgICAgLCBtX3N0YXRlKG8ubV9zdGF0ZSksIG1fYWZm
aW5pdHkoby5tX2FmZmluaXR5KQorICAgICwgbV9iYXNlSXNTdGFydChvLm1fYmFzZUlzU3RhcnQp
CisgICAgLCBtX25lZWRzTGF5b3V0KG8ubV9uZWVkc0xheW91dCkKKyAgICAsIG1fbW9kaWZ5Qmlh
c1NldChvLm1fbW9kaWZ5Qmlhc1NldCkKK3sKKyAgICAvLyBPbmx5IGNvcHkgdGhlIGNvb3JkaW5h
dGVzIG92ZXIgaWYgdGhlIG90aGVyIG9iamVjdAorICAgIC8vIGhhcyBoYWQgYSBsYXlvdXQsIG90
aGVyd2lzZSBrZWVwIHRoZSBjdXJyZW50CisgICAgLy8gY29vcmRpbmF0ZXMuIFRoaXMgcHJldmVu
dHMgZHJhd2luZyBhcnRpZmFjdHMgZnJvbQorICAgIC8vIHJlbWFpbmluZyB3aGVuIHRoZSBjYXJl
dCBpcyBwYWludGVkIGFuZCB0aGVuIG1vdmVzLAorICAgIC8vIGFuZCB0aGUgb2xkIHJlY3Rhbmds
ZSBuZWVkcyB0byBiZSByZXBhaW50ZWQuCisgICAgaWYgKCFtX25lZWRzTGF5b3V0KSB7CisgICAg
ICAgIG1fY2FyZXRSZWN0ID0gby5tX2NhcmV0UmVjdDsKKyAgICAgICAgbV9leHBlY3RlZFZpc2li
bGVSZWN0ID0gby5tX2V4cGVjdGVkVmlzaWJsZVJlY3Q7CisgICAgfQorfQorCit2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmluaXQoRUFmZmluaXR5IGFmZmluaXR5KQoreworICAgIC8vIEZJWE1F
OiBzZXQgZXh0ZW50QWZmaW5pdHkKKyAgICBtX3N0YXRlID0gTk9ORTsgCisgICAgbV9iYXNlSXNT
dGFydCA9IHRydWU7CisgICAgbV9hZmZpbml0eSA9IGFmZmluaXR5OworICAgIG1fbmVlZHNMYXlv
dXQgPSB0cnVlOworICAgIG1fbW9kaWZ5Qmlhc1NldCA9IGZhbHNlOworfQorCitTZWxlY3Rpb25D
b250cm9sbGVyICZTZWxlY3Rpb25Db250cm9sbGVyOjpvcGVyYXRvcj0oY29uc3QgU2VsZWN0aW9u
Q29udHJvbGxlciAmbykKK3sKKyAgICBtX2Jhc2UgPSBvLm1fYmFzZTsKKyAgICBtX2V4dGVudCA9
IG8ubV9leHRlbnQ7CisgICAgbV9zdGFydCA9IG8ubV9zdGFydDsKKyAgICBtX2VuZCA9IG8ubV9l
bmQ7CisKKyAgICBtX3N0YXRlID0gby5tX3N0YXRlOworICAgIG1fYWZmaW5pdHkgPSBvLm1fYWZm
aW5pdHk7CisKKyAgICBtX2Jhc2VJc1N0YXJ0ID0gby5tX2Jhc2VJc1N0YXJ0OworICAgIG1fbmVl
ZHNMYXlvdXQgPSBvLm1fbmVlZHNMYXlvdXQ7CisgICAgbV9tb2RpZnlCaWFzU2V0ID0gby5tX21v
ZGlmeUJpYXNTZXQ7CisgICAgCisgICAgLy8gT25seSBjb3B5IHRoZSBjb29yZGluYXRlcyBvdmVy
IGlmIHRoZSBvdGhlciBvYmplY3QKKyAgICAvLyBoYXMgaGFkIGEgbGF5b3V0LCBvdGhlcndpc2Ug
a2VlcCB0aGUgY3VycmVudAorICAgIC8vIGNvb3JkaW5hdGVzLiBUaGlzIHByZXZlbnRzIGRyYXdp
bmcgYXJ0aWZhY3RzIGZyb20KKyAgICAvLyByZW1haW5pbmcgd2hlbiB0aGUgY2FyZXQgaXMgcGFp
bnRlZCBhbmQgdGhlbiBtb3ZlcywKKyAgICAvLyBhbmQgdGhlIG9sZCByZWN0YW5nbGUgbmVlZHMg
dG8gYmUgcmVwYWludGVkLgorICAgIGlmICghbV9uZWVkc0xheW91dCkgeworICAgICAgICBtX2Nh
cmV0UmVjdCA9IG8ubV9jYXJldFJlY3Q7CisgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVjdCA9
IG8ubV9leHBlY3RlZFZpc2libGVSZWN0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gKnRoaXM7
Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmcG9zKQoreworICAgIC8vIEZJWE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2Fm
ZmluaXR5ID0gcG9zLmFmZmluaXR5KCk7CisgICAgbV9iYXNlID0gcG9zLmRlZXBFcXVpdmFsZW50
KCk7CisgICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICB2YWxpZGF0ZSgp
OworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vdmVUbyhjb25zdCBWaXNpYmxlUG9z
aXRpb24gJmJhc2UsIGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50KQoreworICAgIC8vIEZJ
WE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2FmZmluaXR5ID0gYmFzZS5hZmZpbml0eSgp
OworICAgIG1fYmFzZSA9IGJhc2UuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBtX2V4dGVudCA9IGV4
dGVudC5kZWVwRXF1aXZhbGVudCgpOworICAgIHZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgU2VsZWN0
aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm8pCit7Cisg
ICAgLy8gRklYTUU6IGNvcHkgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2FmZmluaXR5ID0gby5tX2Fm
ZmluaXR5OworICAgIG1fYmFzZSA9IG8ubV9zdGFydDsKKyAgICBtX2V4dGVudCA9IG8ubV9lbmQ7
CisgICAgdmFsaWRhdGUoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjptb3ZlVG8o
Y29uc3QgUG9zaXRpb24gJnBvcywgRUFmZmluaXR5IGFmZmluaXR5KQoreworICAgIC8vIEZJWE1F
OiB1c2UgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7CisgICAgbV9i
YXNlID0gcG9zOworICAgIG1fZXh0ZW50ID0gcG9zOworICAgIHZhbGlkYXRlKCk7Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW92ZVRvKGNvbnN0IFJhbmdlSW1wbCAqciwgRUFmZmlu
aXR5IGJhc2VBZmZpbml0eSwgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KQoreworICAgIC8vIEZJ
WE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2FmZmluaXR5ID0gYmFzZUFmZmluaXR5Owor
ICAgIG1fYmFzZSA9IHN0YXJ0UG9zaXRpb24ocik7CisgICAgbV9leHRlbnQgPSBlbmRQb3NpdGlv
bihyKTsKKyAgICB2YWxpZGF0ZSgpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1v
dmVUbyhjb25zdCBQb3NpdGlvbiAmYmFzZSwgRUFmZmluaXR5IGJhc2VBZmZpbml0eSwgY29uc3Qg
UG9zaXRpb24gJmV4dGVudCwgRUFmZmluaXR5IGV4dGVudEFmZmluaXR5KQoreworICAgIC8vIEZJ
WE1FOiB1c2UgZXh0ZW50QWZmaW5pdHkKKyAgICBtX2FmZmluaXR5ID0gYmFzZUFmZmluaXR5Owor
ICAgIG1fYmFzZSA9IGJhc2U7CisgICAgbV9leHRlbnQgPSBleHRlbnQ7CisgICAgdmFsaWRhdGUo
KTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRNb2RpZnlCaWFzKEVBbHRlciBh
bHRlciwgRURpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChhbHRlcikgeworICAg
ICAgICBjYXNlIE1PVkU6CisgICAgICAgICAgICBtX21vZGlmeUJpYXNTZXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVYVEVORDoKKyAgICAgICAgICAgIGlmICgh
bV9tb2RpZnlCaWFzU2V0KSB7CisgICAgICAgICAgICAgICAgbV9tb2RpZnlCaWFzU2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogcmlnaHQgZm9yIGJpZGk/CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
UklHSFQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRk9SV0FSRDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYmFzZSA9IG1fc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2V4
dGVudCA9IG1fZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCQUNLV0FSRDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fYmFzZSA9IG1fZW5kOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9leHRlbnQgPSBtX3N0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5
RXh0ZW5kaW5nUmlnaHRGb3J3YXJkKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7Cisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX2V4dGVudCwgbV9hZmZpbml0eSk7CisgICAgc3dpdGNo
IChncmFudWxhcml0eSkgeworICAgICAgICBjYXNlIENIQVJBQ1RFUjoKKyAgICAgICAgICAgIHBv
cyA9IHBvcy5uZXh0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXT1JEOgor
ICAgICAgICAgICAgcG9zID0gbmV4dFdvcmRQb3NpdGlvbihwb3MpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIOgorICAgICAgICAgICAgcG9zID0gbmV4dFBhcmFn
cmFwaFBvc2l0aW9uKHBvcywgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVYVEVOVCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTElORToKKyAgICAgICAgICAgIHBv
cyA9IG5leHRMaW5lUG9zaXRpb24ocG9zLCB4UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
RVhURU5UKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZ
OgorICAgICAgICAgICAgcG9zID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9h
ZmZpbml0eSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JP
VU5EQVJZOgorICAgICAgICAgICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9u
KG1fZW5kLCBtX2FmZmluaXR5KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBE
T0NVTUVOVF9CT1VOREFSWToKKyAgICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1lbnQocG9zKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcG9zOworfQorCitW
aXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92aW5nUmlnaHRGb3J3
YXJkKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlzaWJsZVBvc2l0aW9u
IHBvczsKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNhc2UgQ0hBUkFDVEVS
OgorICAgICAgICAgICAgaWYgKGlzUmFuZ2UoKSkgCisgICAgICAgICAgICAgICAgcG9zID0gVmlz
aWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLm5l
eHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdPUkQ6CisgICAgICAgICAg
ICBwb3MgPSBuZXh0V29yZFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZp
bml0eSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIOgorICAg
ICAgICAgICAgcG9zID0gbmV4dFBhcmFncmFwaFBvc2l0aW9uKFZpc2libGVQb3NpdGlvbihtX2Vu
ZCwgbV9hZmZpbml0eSksIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFTkQsIGlzUmFu
Z2UoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTElORTogeworICAgICAg
ICAgICAgLy8gZG93bi1hcnJvd2luZyBmcm9tIGEgcmFuZ2Ugc2VsZWN0aW9uIHRoYXQgZW5kcyBh
dCB0aGUgc3RhcnQgb2YgYSBsaW5lIG5lZWRzCisgICAgICAgICAgICAvLyB0byBsZWF2ZSB0aGUg
c2VsZWN0aW9uIGF0IHRoYXQgbGluZSBzdGFydCAobm8gbmVlZCB0byBjYWxsIG5leHRMaW5lUG9z
aXRpb24hKQorICAgICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmlu
aXR5KTsKKyAgICAgICAgICAgIGlmICghaXNSYW5nZSgpIHx8ICFpc1N0YXJ0T2ZMaW5lKHBvcykp
CisgICAgICAgICAgICAgICAgcG9zID0gbmV4dExpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbihFTkQsIGlzUmFuZ2UoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMSU5FX0JPVU5EQVJZOgorICAgICAgICAgICAgcG9z
ID0gZW5kT2ZMaW5lKFZpc2libGVQb3NpdGlvbihtX2VuZCwgbV9hZmZpbml0eSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5EQVJZOgorICAgICAgICAg
ICAgcG9zID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBtX2FmZmluaXR5
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBET0NVTUVOVF9CT1VOREFSWToK
KyAgICAgICAgICAgIHBvcyA9IGVuZE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBt
X2FmZmluaXR5KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHBvczsK
K30KKworVmlzaWJsZVBvc2l0aW9uIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeUV4dGVuZGlu
Z0xlZnRCYWNrd2FyZChFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3MobV9leHRlbnQsIG1fYWZmaW5pdHkpOworICAgIHN3aXRjaCAoZ3JhbnVs
YXJpdHkpIHsKKyAgICAgICAgY2FzZSBDSEFSQUNURVI6CisgICAgICAgICAgICBwb3MgPSBwb3Mu
cHJldmlvdXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdPUkQ6CisgICAg
ICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3MpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIOgorICAgICAgICAgICAgcG9zID0gcHJldmlvdXNQ
YXJhZ3JhcGhQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFWFRF
TlQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJTkU6CisgICAgICAgICAg
ICBwb3MgPSBwcmV2aW91c0xpbmVQb3NpdGlvbihwb3MsIHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbihFWFRFTlQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJTkVf
Qk9VTkRBUlk6CisgICAgICAgICAgICBwb3MgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24o
bV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UEFSQUdSQVBIX0JPVU5EQVJZOgorICAgICAgICAgICAgcG9zID0gc3RhcnRPZlBhcmFncmFwaChW
aXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRE9DVU1FTlRfQk9VTkRBUlk6CisgICAgICAgICAgICBwb3MgPSBzdGFy
dE9mRG9jdW1lbnQocG9zKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
cG9zOworfQorCitWaXNpYmxlUG9zaXRpb24gU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5TW92
aW5nTGVmdEJhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgVmlz
aWJsZVBvc2l0aW9uIHBvczsKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNh
c2UgQ0hBUkFDVEVSOgorICAgICAgICAgICAgaWYgKGlzUmFuZ2UoKSkgCisgICAgICAgICAgICAg
ICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwg
bV9hZmZpbml0eSkucHJldmlvdXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdPUkQ6CisgICAgICAgICAgICBwb3MgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihWaXNpYmxlUG9z
aXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFBBUkFHUkFQSDoKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzUGFyYWdyYXBoUG9z
aXRpb24oVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1fYWZmaW5pdHkpLCB4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oU1RBUlQsIGlzUmFuZ2UoKSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTElORToKKyAgICAgICAgICAgIHBvcyA9IHByZXZpb3VzTGluZVBvc2l0
aW9uKFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KSwgeFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKFNUQVJULCBpc1JhbmdlKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIExJTkVfQk9VTkRBUlk6CisgICAgICAgICAgICBwb3MgPSBzdGFydE9mTGlu
ZShWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUEFSQUdSQVBIX0JPVU5EQVJZOgorICAgICAgICAgICAgcG9zID0g
c3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9hZmZpbml0eSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE9DVU1FTlRfQk9VTkRBUlk6CisgICAg
ICAgICAgICBwb3MgPSBzdGFydE9mRG9jdW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIG1f
YWZmaW5pdHkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9zOwor
fQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6Om1vZGlmeShFQWx0ZXIgYWx0ZXIsIEVEaXJl
Y3Rpb24gZGlyLCBFVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHNldE1vZGlm
eUJpYXMoYWx0ZXIsIGRpcik7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zOworICAgIHN3aXRj
aCAoZGlyKSB7CisgICAgICAgIC8vIEVESVQgRklYTUU6IFRoZXNlIG5lZWQgdG8gaGFuZGxlIGJp
ZGkKKyAgICAgICAgY2FzZSBSSUdIVDoKKyAgICAgICAgY2FzZSBGT1JXQVJEOgorICAgICAgICAg
ICAgaWYgKGFsdGVyID09IEVYVEVORCkKKyAgICAgICAgICAgICAgICBwb3MgPSBtb2RpZnlFeHRl
bmRpbmdSaWdodEZvcndhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHBvcyA9IG1vZGlmeU1vdmluZ1JpZ2h0Rm9yd2FyZChncmFudWxhcml0eSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRUZUOgorICAgICAgICBjYXNlIEJBQ0tX
QVJEOgorICAgICAgICAgICAgaWYgKGFsdGVyID09IEVYVEVORCkKKyAgICAgICAgICAgICAgICBw
b3MgPSBtb2RpZnlFeHRlbmRpbmdMZWZ0QmFja3dhcmQoZ3JhbnVsYXJpdHkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcyA9IG1vZGlmeU1vdmluZ0xlZnRCYWNrd2FyZChn
cmFudWxhcml0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocG9zLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGFsdGVyKSB7Cisg
ICAgICAgIGNhc2UgTU9WRToKKyAgICAgICAgICAgIG1vdmVUbyhwb3MpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRVhURU5EOgorICAgICAgICAgICAgc2V0RXh0ZW50KHBvcyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXROZWVkc0xheW91dCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBNYXliZSBiYXNlbGluZSB3b3VsZCBiZSBi
ZXR0ZXI/CitzdGF0aWMgYm9vbCBjYXJldFkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZjLCBpbnQg
JnkpCit7CisgICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBOb2RlSW1w
bCAqbiA9IHAubm9kZSgpOworICAgIGlmICghbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IFJlbmRlck9iamVjdCAqciA9IHAubm9kZSgpLT5yZW5kZXJlcigpOworICAgIGlmICghcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFFSZWN0IHJlY3QgPSByLT5jYXJldFJlY3QocC5vZmZz
ZXQoKSk7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgeSA9IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAvIDI7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU2VsZWN0aW9uQ29udHJvbGxlcjo6bW9kaWZ5KEVBbHRlciBhbHRlciwgaW50IHZl
cnRpY2FsRGlzdGFuY2UpCit7CisgICAgaWYgKHZlcnRpY2FsRGlzdGFuY2UgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCB1cCA9IHZlcnRpY2FsRGlzdGFuY2UgPCAwOwor
ICAgIGlmICh1cCkKKyAgICAgICAgdmVydGljYWxEaXN0YW5jZSA9IC12ZXJ0aWNhbERpc3RhbmNl
OworCisgICAgLy8gY2FuIGR1bXAgdGhpcyBVUFNUUkVBTSB3aGVuIHdlIGhhdmUgbV9leHRlbnRB
ZmZpbml0eQorICAgIG1fYWZmaW5pdHkgPSBVUFNUUkVBTTsKKyAgICBzZXRNb2RpZnlCaWFzKGFs
dGVyLCB1cCA/IEJBQ0tXQVJEIDogRk9SV0FSRCk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9z
OworICAgIGludCB4UG9zID0gMDsKKyAgICBzd2l0Y2ggKGFsdGVyKSB7CisgICAgICAgIGNhc2Ug
TU9WRToKKyAgICAgICAgICAgIHBvcyA9IFZpc2libGVQb3NpdGlvbih1cCA/IG1fc3RhcnQgOiBt
X2VuZCwgbV9hZmZpbml0eSk7CisgICAgICAgICAgICB4UG9zID0geFBvc0ZvclZlcnRpY2FsQXJy
b3dOYXZpZ2F0aW9uKHVwID8gU1RBUlQgOiBFTkQsIGlzUmFuZ2UoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFWFRFTkQ6CisgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9z
aXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgeFBvcyA9IHhQb3NGb3JW
ZXJ0aWNhbEFycm93TmF2aWdhdGlvbihFWFRFTlQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaW50IHN0YXJ0WTsKKyAgICBpZiAoIWNhcmV0WShwb3MsIHN0YXJ0WSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAodXApCisgICAgICAgIHN0YXJ0WSA9IC1zdGFydFk7
CisgICAgaW50IGxhc3RZID0gc3RhcnRZOworCisgICAgVmlzaWJsZVBvc2l0aW9uIHJlc3VsdDsK
KyAgICBWaXNpYmxlUG9zaXRpb24gbmV4dDsKKyAgICBmb3IgKFZpc2libGVQb3NpdGlvbiBwID0g
cG9zOyA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSAodXAgPyBwcmV2aW91c0xpbmVQb3Np
dGlvbiA6IG5leHRMaW5lUG9zaXRpb24pKHAsIHhQb3MpOworICAgICAgICBpZiAobmV4dC5pc051
bGwoKSB8fCBuZXh0ID09IHApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW50IG5leHRZ
OworICAgICAgICBpZiAoIWNhcmV0WShuZXh0LCBuZXh0WSkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKHVwKQorICAgICAgICAgICAgbmV4dFkgPSAtbmV4dFk7CisgICAgICAgIGlm
IChuZXh0WSAtIHN0YXJ0WSA+IHZlcnRpY2FsRGlzdGFuY2UpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaWYgKG5leHRZID49IGxhc3RZKSB7CisgICAgICAgICAgICBsYXN0WSA9IG5leHRZ
OworICAgICAgICAgICAgcmVzdWx0ID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChyZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAo
YWx0ZXIpIHsKKyAgICAgICAgY2FzZSBNT1ZFOgorICAgICAgICAgICAgbW92ZVRvKHJlc3VsdCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFWFRFTkQ6CisgICAgICAgICAgICBz
ZXRFeHRlbnQocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoRVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBpZiAoaXNOb25lKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWxpZGF0ZShncmFudWxhcml0eSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2ludCBTZWxlY3Rpb25Db250cm9sbGVyOjp4UG9zRm9yVmVydGlj
YWxBcnJvd05hdmlnYXRpb24oRVBvc2l0aW9uVHlwZSB0eXBlLCBib29sIHJlY2FsYykgY29uc3QK
K3sKKyAgICBpbnQgeCA9IDA7CisKKyAgICBpZiAoaXNOb25lKCkpCisgICAgICAgIHJldHVybiB4
OworCisgICAgUG9zaXRpb24gcG9zOworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNl
IFNUQVJUOgorICAgICAgICAgICAgcG9zID0gbV9zdGFydDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVORDoKKyAgICAgICAgICAgIHBvcyA9IG1fZW5kOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQkFTRToKKyAgICAgICAgICAgIHBvcyA9IG1fYmFzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVYVEVOVDoKKyAgICAgICAgICAgIHBvcyA9
IG1fZXh0ZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgS0hUTUxQYXJ0ICpw
YXJ0ID0gcG9zLm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpOworICAgIGlmICghcGFydCkK
KyAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIAorICAgIGlmIChyZWNhbGMgfHwgcGFydC0+eFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkgPT0gS0hUTUxQYXJ0OjpOb1hQb3NGb3JWZXJ0
aWNhbEFycm93TmF2aWdhdGlvbikgeworICAgICAgICBzd2l0Y2ggKG1fYWZmaW5pdHkpIHsKKyAg
ICAgICAgICAgIGNhc2UgRE9XTlNUUkVBTToKKyAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxl
UG9zaXRpb24ocG9zLCBtX2FmZmluaXR5KS5kb3duc3RyZWFtRGVlcEVxdWl2YWxlbnQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVVBTVFJFQU06CisgICAgICAg
ICAgICAgICAgcG9zID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgbV9hZmZpbml0eSkuZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB4ID0g
cG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBvcy5vZmZzZXQoKSwgbV9hZmZpbml0
eSkueCgpOworICAgICAgICBwYXJ0LT5zZXRYUG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb24o
eCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB4ID0gcGFydC0+eFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKCk7CisgICAgfQorICAgIHJldHVybiB4OworfQorCit2b2lkIFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICBtX2FmZmluaXR5ID0gU0VMX0RFRkFVTFRf
QUZGSU5JVFk7CisgICAgbV9iYXNlLmNsZWFyKCk7CisgICAgbV9leHRlbnQuY2xlYXIoKTsKKyAg
ICB2YWxpZGF0ZSgpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZwb3MpCit7CisgICAgbV9hZmZpbml0eSA9IHBvcy5hZmZpbml0
eSgpOworICAgIG1fYmFzZSA9IHBvcy5kZWVwRXF1aXZhbGVudCgpOworICAgIHZhbGlkYXRlKCk7
Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmcG9zKQoreworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGV4dGVudEFmZmluaXR5Cisg
ICAgbV9leHRlbnQgPSBwb3MuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICB2YWxpZGF0ZSgpOworfQor
Cit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2VBbmRFeHRlbnQoY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZiYXNlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJmV4dGVudCkKK3sKKyAgICAv
LyBGSVhNRTogU3VwcG9ydCBleHRlbnRBZmZpbml0eQorICAgIG1fYWZmaW5pdHkgPSBiYXNlLmFm
ZmluaXR5KCk7CisgICAgbV9iYXNlID0gYmFzZS5kZWVwRXF1aXZhbGVudCgpOworICAgIG1fZXh0
ZW50ID0gZXh0ZW50LmRlZXBFcXVpdmFsZW50KCk7CisgICAgdmFsaWRhdGUoKTsKK30KKworCit2
b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNldEJhc2UoY29uc3QgUG9zaXRpb24gJnBvcywgRUFm
ZmluaXR5IGJhc2VBZmZpbml0eSkKK3sKKyAgICBtX2FmZmluaXR5ID0gYmFzZUFmZmluaXR5Owor
ICAgIG1fYmFzZSA9IHBvczsKKyAgICB2YWxpZGF0ZSgpOworfQorCit2b2lkIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OnNldEV4dGVudChjb25zdCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgZXh0ZW50
QWZmaW5pdHkpCit7CisgICAgLy8gRklYTUU6IFN1cHBvcnQgZXh0ZW50QWZmaW5pdHkgZm9yIHJl
YWwKKyAgICBtX2FmZmluaXR5ID0gZXh0ZW50QWZmaW5pdHk7CisgICAgbV9leHRlbnQgPSBwb3M7
CisgICAgdmFsaWRhdGUoKTsKK30KKwordm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpzZXRCYXNl
QW5kRXh0ZW50KGNvbnN0IFBvc2l0aW9uICZiYXNlLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5LCBj
b25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgZXh0ZW50QWZmaW5pdHkpCit7CisgICAg
Ly8gRklYTUU6IGV4dGVudEFmZmluaXR5CisgICAgbV9hZmZpbml0eSA9IGJhc2VBZmZpbml0eTsK
KyAgICBtX2Jhc2UgPSBiYXNlOworICAgIG1fZXh0ZW50ID0gZXh0ZW50OworICAgIHZhbGlkYXRl
KCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2V0TmVlZHNMYXlvdXQoYm9vbCBm
bGFnKQoreworICAgIG1fbmVlZHNMYXlvdXQgPSBmbGFnOworfQorCitTaGFyZWRQdHI8UmFuZ2VJ
bXBsPiBTZWxlY3Rpb25Db250cm9sbGVyOjp0b1JhbmdlKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
b25lKCkpCisgICAgICAgIHJldHVybiBTaGFyZWRQdHI8UmFuZ2VJbXBsPigpOworCisgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQKKyAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3
aGljaCBtb2RpZnkgdGhlIERPTS4KKyAgICAvLyBGYWlsaW5nIHRvIGNhbGwgdGhpcyBjYW4gcmVz
dWx0IGluIGVxdWl2YWxlbnRYWFhQb3NpdGlvbiBjYWxscyByZXR1cm5pbmcKKyAgICAvLyBpbmNv
cnJlY3QgcmVzdWx0cy4KKyAgICBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0KCk7CisKKyAgICBQb3NpdGlvbiBzLCBlOworICAgIGlmIChpc0NhcmV0KCkpIHsKKyAg
ICAgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBpcyBhIGNhcmV0LCBtb3ZlIHRoZSByYW5nZSBzdGFy
dCB1cHN0cmVhbS4gVGhpcyBoZWxwcyB1cyBtYXRjaAorICAgICAgICAvLyB0aGUgY29udmVudGlv
bnMgb2YgdGV4dCBlZGl0b3JzIHRlc3RlZCwgd2hpY2ggbWFrZSBzdHlsZSBkZXRlcm1pbmF0aW9u
cyBiYXNlZAorICAgICAgICAvLyBvbiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgY2FyZXQsIGlm
IGFueS4gCisgICAgICAgIHMgPSBtX3N0YXJ0LnVwc3RyZWFtKCkuZXF1aXZhbGVudFJhbmdlQ29t
cGxpYW50UG9zaXRpb24oKTsKKyAgICAgICAgZSA9IHM7CisgICAgfQorICAgIGVsc2UgeworICAg
ICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIGEgcmFuZ2UsIHNlbGVjdCB0aGUgbWluaW11bSBy
YW5nZSB0aGF0IGVuY29tcGFzc2VzIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIC8vIEFnYWluLCB0
aGlzIGlzIHRvIG1hdGNoIHRoZSBjb252ZW50aW9ucyBvZiB0ZXh0IGVkaXRvcnMgdGVzdGVkLCB3
aGljaCBtYWtlIHN0eWxlIAorICAgICAgICAvLyBkZXRlcm1pbmF0aW9ucyBiYXNlZCBvbiB0aGUg
Zmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzZWxlY3Rpb24uIAorICAgICAgICAvLyBGb3IgaW5zdGFu
Y2UsIHRoaXMgb3BlcmF0aW9uIGhlbHBzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSAiWCIgc2VsZWN0
ZWQgYmVsb3cgaXMgdGhlIAorICAgICAgICAvLyBvbmx5IHRoaW5nIHNlbGVjdGVkLiBUaGUgcmFu
Z2Ugc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvICJsZWFrIiBvdXQgdG8gdGhlIGVuZCBvZiB0aGUg
CisgICAgICAgIC8vIHByZXZpb3VzIHRleHQgbm9kZSwgb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0
aGUgbmV4dCB0ZXh0IG5vZGUsIGVhY2ggb2Ygd2hpY2ggaGFzIGEgCisgICAgICAgIC8vIGRpZmZl
cmVudCBzdHlsZS4KKyAgICAgICAgLy8gCisgICAgICAgIC8vIE9uIGEgdHJlYXN1cmUgbWFwLCA8
Yj5YPC9iPiBtYXJrcyB0aGUgc3BvdC4KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
IF4gc2VsZWN0ZWQKKyAgICAgICAgLy8KKyAgICAgICAgQVNTRVJUKGlzUmFuZ2UoKSk7CisgICAg
ICAgIHMgPSBtX3N0YXJ0LmRvd25zdHJlYW0oKTsKKyAgICAgICAgZSA9IG1fZW5kLnVwc3RyZWFt
KCk7CisgICAgICAgIGlmIChSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhzLm5vZGUo
KSwgcy5vZmZzZXQoKSwgZS5ub2RlKCksIGUub2Zmc2V0KCkpID4gMCkgeworICAgICAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoZSBzdGFydCBpcyBiZWZvcmUgdGhlIGVuZC4KKyAgICAgICAgICAgIC8v
IFRoZSBlbmQgY2FuIHdpbmQgdXAgYmVmb3JlIHRoZSBzdGFydCBpZiBjb2xsYXBzZWQgd2hpdGVz
cGFjZSBpcyB0aGUgb25seSB0aGluZyBzZWxlY3RlZC4KKyAgICAgICAgICAgIFBvc2l0aW9uIHRt
cCA9IHM7CisgICAgICAgICAgICBzID0gZTsKKyAgICAgICAgICAgIGUgPSB0bXA7CisgICAgICAg
IH0KKyAgICAgICAgcyA9IHMuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAg
ICAgICAgZSA9IGUuZXF1aXZhbGVudFJhbmdlQ29tcGxpYW50UG9zaXRpb24oKTsKKyAgICB9CisK
KyAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgU2hhcmVkUHRyPFJhbmdlSW1wbD4gcmVz
dWx0KG5ldyBSYW5nZUltcGwocy5ub2RlKCktPmRvY1B0cigpKSk7CisgICAgcmVzdWx0LT5zZXRT
dGFydChzLm5vZGUoKSwgcy5vZmZzZXQoKSwgZXhjZXB0aW9uQ29kZSk7CisgICAgaWYgKGV4Y2Vw
dGlvbkNvZGUpIHsKKyAgICAgICAgRVJST1IoIkV4Y2VwdGlvbiBzZXR0aW5nIFJhbmdlIHN0YXJ0
IGZyb20gU2VsZWN0aW9uQ29udHJvbGxlcjogJWQiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAg
cmV0dXJuIFNoYXJlZFB0cjxSYW5nZUltcGw+KCk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0RW5k
KGUubm9kZSgpLCBlLm9mZnNldCgpLCBleGNlcHRpb25Db2RlKTsKKyAgICBpZiAoZXhjZXB0aW9u
Q29kZSkgeworICAgICAgICBFUlJPUigiRXhjZXB0aW9uIHNldHRpbmcgUmFuZ2UgZW5kIGZyb20g
U2VsZWN0aW9uQ29udHJvbGxlcjogJWQiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgcmV0dXJu
IFNoYXJlZFB0cjxSYW5nZUltcGw+KCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bGF5b3V0KCkKK3sKKyAgICBpZiAoaXNOb25lKCkg
fHwgIW1fc3RhcnQubm9kZSgpLT5pbkRvY3VtZW50KCkgfHwgIW1fZW5kLm5vZGUoKS0+aW5Eb2N1
bWVudCgpKSB7CisgICAgICAgIG1fY2FyZXRSZWN0ID0gUVJlY3QoKTsKKyAgICAgICAgbV9leHBl
Y3RlZFZpc2libGVSZWN0ID0gUVJlY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fc3RhcnQubm9kZSgpLT5nZXREb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKKyAgICAg
ICAgCisgICAgaWYgKGlzQ2FyZXQoKSkgeworICAgICAgICBQb3NpdGlvbiBwb3MgPSBtX3N0YXJ0
OworICAgICAgICBzd2l0Y2ggKG1fYWZmaW5pdHkpIHsKKyAgICAgICAgICAgIGNhc2UgRE9XTlNU
UkVBTToKKyAgICAgICAgICAgICAgICBwb3MgPSBWaXNpYmxlUG9zaXRpb24obV9zdGFydCwgbV9h
ZmZpbml0eSkuZG93bnN0cmVhbURlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFVQU1RSRUFNOgorICAgICAgICAgICAgICAgIHBvcyA9IFZp
c2libGVQb3NpdGlvbihtX3N0YXJ0LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChwb3MuaXNOb3ROdWxs
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChwb3Mubm9kZSgpLT5yZW5kZXJlcigpKTsKKyAgICAg
ICAgICAgIG1fY2FyZXRSZWN0ID0gcG9zLm5vZGUoKS0+cmVuZGVyZXIoKS0+Y2FyZXRSZWN0KHBv
cy5vZmZzZXQoKSwgbV9hZmZpbml0eSk7CisgICAgICAgICAgICBtX2V4cGVjdGVkVmlzaWJsZVJl
Y3QgPSBtX2NhcmV0UmVjdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IG1fY2FyZXRSZWN0ID0gUVJlY3QoKTsKKyAgICAgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVj
dCA9IFFSZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIENh
bGN1bGF0ZSB3aGljaCBwb3NpdGlvbiB0byB1c2UgYmFzZWQgb24gd2hldGhlciB0aGUgYmFzZSBp
cyB0aGUgc3RhcnQuCisgICAgICAgIC8vIFdlIHdhbnQgdGhlIHBvc2l0aW9uLCBzdGFydCBvciBl
bmQsIHRoYXQgd2FzIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGV4dGVudC4gCisgICAgICAgIC8vIFRo
aXMgbWFrZXMgdGhlIHNlbGVjdGlvbiBmb2xsb3cgdGhlIGV4dGVudCBwb3NpdGlvbiB3aGlsZSBz
Y3JvbGxpbmcgYXMgYSAKKyAgICAgICAgLy8gcmVzdWx0IG9mIGFycm93IG5hdmlnYXRpb24uIAor
ICAgICAgICAvLworICAgICAgICAvLyBOb3RlOiBubyBuZWVkIHRvIGdldCBhZGRpdGlvbmFsIGhl
bHAgZnJvbSBWaXNpYmxlUG9zaXRpb24uIFRoZSBtX3N0YXJ0IGFuZAorICAgICAgICAvLyBtX2Vu
ZCBwb3NpdGlvbnMgc2hvdWxkIGFscmVhZHkgYmUgdmlzaWJsZSwgYW5kIHdlJ3JlIG9ubHkgaW50
ZXJlc3RlZCBpbiAKKyAgICAgICAgLy8gYSByZWN0YW5nbGUgZm9yIG1fZXhwZWN0ZWRWaXNpYmxl
UmVjdCwgaGVuY2UgYWZmaW5pdHkgaXMgbm90IGEgZmFjdG9yCisgICAgICAgIC8vIGxpa2UgaXQg
aXMgd2hlbiBkcmF3aW5nIGEgY2FyZXQuCisgICAgICAgIC8vCisgICAgICAgIFBvc2l0aW9uIHBv
cyA9IG1fYmFzZUlzU3RhcnQgPyBtX2VuZCA6IG1fc3RhcnQ7CisgICAgICAgIEFTU0VSVChwb3Mu
bm9kZSgpLT5yZW5kZXJlcigpKTsgCisgICAgICAgIG1fZXhwZWN0ZWRWaXNpYmxlUmVjdCA9IHBv
cy5ub2RlKCktPnJlbmRlcmVyKCktPmNhcmV0UmVjdChwb3Mub2Zmc2V0KCksIG1fYWZmaW5pdHkp
OworICAgICAgICBtX2NhcmV0UmVjdCA9IFFSZWN0KCk7CisgICAgfQorCisgICAgbV9uZWVkc0xh
eW91dCA9IGZhbHNlOworfQorCitRUmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpjYXJldFJlY3Qo
KSBjb25zdAoreworICAgIGlmIChtX25lZWRzTGF5b3V0KSB7CisgICAgICAgIGNvbnN0X2Nhc3Q8
U2VsZWN0aW9uQ29udHJvbGxlciAqPih0aGlzKS0+bGF5b3V0KCk7CisgICAgfQorCisgICAgcmV0
dXJuIG1fY2FyZXRSZWN0OworfQorCitRUmVjdCBTZWxlY3Rpb25Db250cm9sbGVyOjpleHBlY3Rl
ZFZpc2libGVSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAobV9uZWVkc0xheW91dCkgeworICAgICAg
ICBjb25zdF9jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXIgKj4odGhpcyktPmxheW91dCgpOworICAg
IH0KKworICAgIHJldHVybiBtX2V4cGVjdGVkVmlzaWJsZVJlY3Q7Cit9CisKK1FSZWN0IFNlbGVj
dGlvbkNvbnRyb2xsZXI6OmNhcmV0UmVwYWludFJlY3QoKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiBBZGQgb25lIHBpeGVsIG9mIHNsb3Agb24gZWFjaCBzaWRlIHRvIG1ha2Ugc3VyZSB3ZSBkb24n
dCBsZWF2ZSBiZWhpbmQgYXJ0aWZhY3RzLgorICAgIFFSZWN0IHIgPSBjYXJldFJlY3QoKTsKKyAg
ICBpZiAoci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBRUmVjdCgpOworICAgIHJldHVybiBR
UmVjdChyLmxlZnQoKSAtIDEsIHIudG9wKCkgLSAxLCByLndpZHRoKCkgKyAyLCByLmhlaWdodCgp
ICsgMik7Cit9CisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6bmVlZHNDYXJldFJlcGFpbnQo
KQoreworICAgIGlmICghaXNDYXJldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
c3RhcnQubm9kZSgpLT5nZXREb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBLSFRN
TFZpZXcgKnYgPSBtX3N0YXJ0Lm5vZGUoKS0+Z2V0RG9jdW1lbnQoKS0+dmlldygpOworICAgIGlm
ICghdikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fbmVlZHNMYXlvdXQpIHsKKyAgICAg
ICAgLy8gcmVwYWludCBvbGQgcG9zaXRpb24gYW5kIGNhbGN1bGF0ZSBuZXcgcG9zaXRpb24KKyAg
ICAgICAgdi0+dXBkYXRlQ29udGVudHMoY2FyZXRSZXBhaW50UmVjdCgpLCBmYWxzZSk7CisgICAg
ICAgIGxheW91dCgpOworICAgICAgICAKKyAgICAgICAgLy8gRURJVCBGSVhNRTogVGhpcyBpcyBh
biB1bmZvcnR1bmF0ZSBoYWNrLgorICAgICAgICAvLyBCYXNpY2FsbHksIHdlIGNhbid0IHRydXN0
IHRoaXMgbGF5b3V0IHBvc2l0aW9uIHNpbmNlIHdlIAorICAgICAgICAvLyBjYW4ndCBndWFyYW50
ZWUgdGhhdCB0aGUgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiB1bnJlbmRlcmVkIAorICAgICAg
ICAvLyBjb250ZW50IHdpbGwgd29yayBhdCB0aGlzIHBvaW50LiBXZSBtYXkgaGF2ZSB0byB3YWl0
IGZvcgorICAgICAgICAvLyBhIGxheW91dCBhbmQgcmUtcmVuZGVyIG9mIHRoZSBkb2N1bWVudCB0
byBoYXBwZW4uIFNvLCByZXNldHRpbmcgdGhpcworICAgICAgICAvLyBmbGFnIHdpbGwgY2F1c2Ug
YW5vdGhlciBjYXJldCBsYXlvdXQgdG8gaGFwcGVuIHRoZSBmaXJzdCB0aW1lCisgICAgICAgIC8v
IHRoYXQgd2UgdHJ5IHRvIHBhaW50IHRoZSBjYXJldCBhZnRlciB0aGlzIGNhbGwuIFRoYXQgb25l
IHdpbGwgd29yayBzaW5jZQorICAgICAgICAvLyBpdCBoYXBwZW5zIGFmdGVyIHRoZSBkb2N1bWVu
dCBoYXMgYWNjb3VudGVkIGZvciBhbnkgZWRpdGluZworICAgICAgICAvLyBjaGFuZ2VzIHdoaWNo
IG1heSBoYXZlIGJlZW4gZG9uZS4KKyAgICAgICAgLy8gQW5kLCB3ZSBuZWVkIHRvIGxlYXZlIHRo
aXMgbGF5b3V0IGhlcmUgc28gdGhlIGNhcmV0IG1vdmVzIHJpZ2h0IAorICAgICAgICAvLyBhd2F5
IGFmdGVyIGNsaWNraW5nLgorICAgICAgICBtX25lZWRzTGF5b3V0ID0gdHJ1ZTsKKyAgICB9Cisg
ICAgdi0+dXBkYXRlQ29udGVudHMoY2FyZXRSZXBhaW50UmVjdCgpLCBmYWxzZSk7Cit9CisKK3Zv
aWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6cGFpbnRDYXJldChRUGFpbnRlciAqcCwgY29uc3QgUVJl
Y3QgJnJlY3QpCit7CisgICAgaWYgKG1fc3RhdGUgIT0gQ0FSRVQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX25lZWRzTGF5b3V0KQorICAgICAgICBsYXlvdXQoKTsKKworICAgIGlmICht
X2NhcmV0UmVjdC5pc1ZhbGlkKCkpCisgICAgICAgIHAtPmZpbGxSZWN0KG1fY2FyZXRSZWN0ICYg
cmVjdCwgUUJydXNoKCkpOworfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnZhbGlkYXRl
KEVUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgLy8gTW92ZSB0aGUgc2VsZWN0
aW9uIHRvIHJlbmRlcmVkIHBvc2l0aW9ucywgaWYgcG9zc2libGUuCisgICAgUG9zaXRpb24gb3Jp
Z2luYWxCYXNlKG1fYmFzZSk7CisgICAgYm9vbCBiYXNlQW5kRXh0ZW50RXF1YWwgPSBtX2Jhc2Ug
PT0gbV9leHRlbnQ7CisgICAgYm9vbCB1cGRhdGVkTGF5b3V0ID0gZmFsc2U7CisgICAgaWYgKG1f
YmFzZS5pc05vdE51bGwoKSkgeworICAgICAgICBtX2Jhc2Uubm9kZSgpLT5nZXREb2N1bWVudCgp
LT51cGRhdGVMYXlvdXQoKTsKKyAgICAgICAgdXBkYXRlZExheW91dCA9IHRydWU7CisgICAgICAg
IG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpLmRlZXBFcXVpdmFs
ZW50KCk7CisgICAgICAgIGlmIChiYXNlQW5kRXh0ZW50RXF1YWwpCisgICAgICAgICAgICBtX2V4
dGVudCA9IG1fYmFzZTsKKyAgICB9CisgICAgaWYgKG1fZXh0ZW50LmlzTm90TnVsbCgpICYmICFi
YXNlQW5kRXh0ZW50RXF1YWwpIHsKKyAgICAgICAgaWYgKCF1cGRhdGVkTGF5b3V0KQorICAgICAg
ICAgICAgbV9leHRlbnQubm9kZSgpLT5nZXREb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKKyAg
ICAgICAgbV9leHRlbnQgPSBWaXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLmRl
ZXBFcXVpdmFsZW50KCk7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZl
IGEgZGFuZ2xpbmcgc3RhcnQgb3IgZW5kCisgICAgaWYgKG1fYmFzZS5pc051bGwoKSAmJiBtX2V4
dGVudC5pc051bGwoKSkgeworICAgICAgICAvLyBNb3ZlIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudCBvZiB0aGUgb3JpZ2luYWwgYmFzZSwgaWYgcG9zc2libGUu
CisgICAgICAgIC8vIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgZmxhc2hpbmcgdGhlIGNhcmV0IHNv
bWV3aGVyZSB3aGVuIGEgcmVuZGVyZWQgcG9zaXRpb24gZm9yCisgICAgICAgIC8vIHRoZSBiYXNl
IGFuZCBleHRlbnQgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICBpZiAob3JpZ2luYWxCYXNlLmlz
Tm90TnVsbCgpKSB7CisgICAgICAgICAgICBQb3NpdGlvbiBwb3Mob3JpZ2luYWxCYXNlLm5vZGUo
KS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpLCAwKTsKKyAgICAgICAgICAgIG1fYmFzZSA9
IHBvczsKKyAgICAgICAgICAgIG1fZXh0ZW50ID0gcG9zOworICAgICAgICB9CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBwb3NpdGlvbiB0byB3b3JrIHdpdGguIFNl
ZSBpZiB0aGUgQk9EWSBlbGVtZW50IG9mIHRoZSBwYWdlCisgICAgICAgICAgICAvLyBpcyBjb250
ZW50RWRpdGFibGUuIElmIGl0IGlzLCBwdXQgdGhlIGNhcmV0IHRoZXJlLgorICAgICAgICAgICAg
Ly9Ob2RlSW1wbCAqbm9kZSA9IGRvY3VtZW50KCkKKyAgICAgICAgICAgIG1fc3RhcnQuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fZW5kLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgbV9iYXNl
SXNTdGFydCA9IHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKG1fYmFzZS5pc051bGwoKSkgewor
ICAgICAgICBtX2Jhc2UgPSBtX2V4dGVudDsKKyAgICAgICAgbV9iYXNlSXNTdGFydCA9IHRydWU7
CisgICAgfQorICAgIGVsc2UgaWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7CisgICAgICAgIG1fZXh0
ZW50ID0gbV9iYXNlOworICAgICAgICBtX2Jhc2VJc1N0YXJ0ID0gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIG1fYmFzZUlzU3RhcnQgPSBSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFy
eVBvaW50cyhtX2Jhc2Uubm9kZSgpLCBtX2Jhc2Uub2Zmc2V0KCksIG1fZXh0ZW50Lm5vZGUoKSwg
bV9leHRlbnQub2Zmc2V0KCkpIDw9IDA7CisgICAgfQorCisgICAgbV9zdGFydC5jbGVhcigpOwor
ICAgIG1fZW5kLmNsZWFyKCk7CisKKyAgICAvLyBjYWxjdWxhdGUgdGhlIGNvcnJlY3Qgc3RhcnQg
YW5kIGVuZCBwb3NpdGlvbnMKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgICAgIGNh
c2UgQ0hBUkFDVEVSOgorICAgICAgICAgICAgaWYgKG1fYmFzZUlzU3RhcnQpIHsKKyAgICAgICAg
ICAgICAgICBtX3N0YXJ0ID0gbV9iYXNlOworICAgICAgICAgICAgICAgIG1fZW5kID0gbV9leHRl
bnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fc3RhcnQgPSBtX2V4
dGVudDsKKyAgICAgICAgICAgICAgICBtX2VuZCA9IG1fYmFzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdPUkQ6IHsKKyAgICAgICAgICAgIC8vIEdl
bmVyYWwgY2FzZTogU2VsZWN0IHRoZSB3b3JkIHRoZSBjYXJldCBpcyBwb3NpdGlvbmVkIGluc2lk
ZSBvZiwgb3IgYXQgdGhlIHN0YXJ0IG9mIChSaWdodFdvcmRJZk9uQm91bmRhcnkpLgorICAgICAg
ICAgICAgLy8gRWRnZSBjYXNlOiBJZiB0aGUgY2FyZXQgaXMgYWZ0ZXIgdGhlIGxhc3Qgd29yZCBp
biBhIHNvZnQtd3JhcHBlZCBsaW5lIG9yIHRoZSBsYXN0IHdvcmQgaW4KKyAgICAgICAgICAgIC8v
IHRoZSBkb2N1bWVudCwgc2VsZWN0IHRoYXQgbGFzdCB3b3JkIChMZWZ0V29yZElmT25Cb3VuZGFy
eSkuCisgICAgICAgICAgICAvLyBFZGdlIGNhc2U6IElmIHRoZSBjYXJldCBpcyBhZnRlciB0aGUg
bGFzdCB3b3JkIGluIGEgcGFyYWdyYXBoLCBzZWxlY3QgZnJvbSB0aGUgdGhlIGVuZCBvZiB0aGUK
KyAgICAgICAgICAgIC8vIGxhc3Qgd29yZCB0byB0aGUgbGluZSBicmVhayAoYWxzbyBSaWdodFdv
cmRJZk9uQm91bmRhcnkpOworICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gbV9i
YXNlSXNTdGFydCA/IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpICAgOiBWaXNp
YmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpOworICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIGVuZCAgID0gbV9iYXNlSXNTdGFydCA/IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwg
bV9hZmZpbml0eSkgOiBWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KTsKKyAgICAg
ICAgICAgIEVXb3JkU2lkZSBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAg
ICAgaWYgKGlzRW5kT2ZEb2N1bWVudChzdGFydCkgfHwgKGlzRW5kT2ZMaW5lKHN0YXJ0KSAmJiAh
aXNTdGFydE9mTGluZShzdGFydCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoc3RhcnQpKSkKKyAgICAg
ICAgICAgICAgICBzaWRlID0gTGVmdFdvcmRJZk9uQm91bmRhcnk7CisgICAgICAgICAgICBtX3N0
YXJ0ID0gc3RhcnRPZldvcmQoc3RhcnQsIHNpZGUpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAg
ICAgICBzaWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAgICAgaWYgKGlzRW5k
T2ZEb2N1bWVudChlbmQpIHx8IChpc0VuZE9mTGluZShlbmQpICYmICFpc1N0YXJ0T2ZMaW5lKGVu
ZCkgJiYgIWlzRW5kT2ZQYXJhZ3JhcGgoZW5kKSkpCisgICAgICAgICAgICAgICAgc2lkZSA9IExl
ZnRXb3JkSWZPbkJvdW5kYXJ5OworICAgICAgICAgICAgbV9lbmQgPSBlbmRPZldvcmQoZW5kLCBz
aWRlKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBMSU5FOgorICAgICAgICBjYXNlIExJTkVfQk9V
TkRBUlk6CisgICAgICAgICAgICBpZiAobV9iYXNlSXNTdGFydCkgeworICAgICAgICAgICAgICAg
IG1fc3RhcnQgPSBzdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mTGluZShW
aXNpYmxlUG9zaXRpb24obV9leHRlbnQsIG1fYWZmaW5pdHkpLCBJbmNsdWRlTGluZUJyZWFrKS5k
ZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
X3N0YXJ0ID0gc3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5
KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mTGluZShW
aXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KSwgSW5jbHVkZUxpbmVCcmVhaykuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFBBUkFHUkFQSDoKKyAgICAgICAgICAgIGlmIChtX2Jhc2VJc1N0YXJ0KSB7CisgICAg
ICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhtX2Jhc2UsIG1fYWZmaW5pdHkpOworICAg
ICAgICAgICAgICAgIGlmIChpc1N0YXJ0T2ZMaW5lKHBvcykgJiYgaXNFbmRPZkRvY3VtZW50KHBv
cykpCisgICAgICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOworICAgICAgICAg
ICAgICAgIG1fc3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHBvcykuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgICAgICAgICBtX2VuZCA9IGVuZE9mUGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbiht
X2V4dGVudCwgbV9hZmZpbml0eSksIEluY2x1ZGVMaW5lQnJlYWspLmRlZXBFcXVpdmFsZW50KCk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fc3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0eSkpLmRlZXBFcXVp
dmFsZW50KCk7CisgICAgICAgICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxl
UG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KSwgSW5jbHVkZUxpbmVCcmVhaykuZGVlcEVxdWl2
YWxlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERPQ1VNRU5UX0JPVU5EQVJZOgorICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZEb2N1bWVu
dChWaXNpYmxlUG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsK
KyAgICAgICAgICAgIG1fZW5kID0gZW5kT2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24obV9iYXNl
LCBtX2FmZmluaXR5KSkuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFBBUkFHUkFQSF9CT1VOREFSWToKKyAgICAgICAgICAgIGlmIChtX2Jhc2VJc1N0
YXJ0KSB7CisgICAgICAgICAgICAgICAgbV9zdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgoVmlzaWJs
ZVBvc2l0aW9uKG1fYmFzZSwgbV9hZmZpbml0eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAg
ICAgICAgICAgbV9lbmQgPSBlbmRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24obV9leHRlbnQs
IG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBtX3N0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChWaXNpYmxlUG9zaXRpb24o
bV9leHRlbnQsIG1fYWZmaW5pdHkpKS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICAgICAgICAg
IG1fZW5kID0gZW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fYmFzZSwgbV9hZmZpbml0
eSkpLmRlZXBFcXVpdmFsZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICAvLyBhZGp1c3QgdGhlIHN0YXRlCisgICAgaWYgKG1fc3RhcnQuaXNOdWxs
KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kLmlzTnVsbCgpKTsKKyAgICAgICAgbV9zdGF0ZSA9
IE5PTkU7CisgICAgfQorICAgIGVsc2UgaWYgKG1fc3RhcnQgPT0gbV9lbmQgfHwgbV9zdGFydC51
cHN0cmVhbSgpID09IG1fZW5kLnVwc3RyZWFtKCkpIHsKKyAgICAgICAgbV9zdGF0ZSA9IENBUkVU
OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbV9zdGF0ZSA9IFJBTkdFOworICAgICAgICAv
LyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFsbGVzdCBlcXVpdmFsZW50
IHJhbmdlIG9mIG5vZGVzLgorICAgICAgICAvLyBUaGlzIGlzIGEgc29tZXdoYXQgYXJiaXRyYXJ5
IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcworICAgICAgICAvLyB1c2Vm
dWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNhbCIgKGlmIG9ubHkgZm9y
CisgICAgICAgIC8vIHB1cnBvc2VzIG9mIGNvbXBhcmluZyBzZWxlY3Rpb25zKS4gVGhpcyBpcyBh
biBpZGVhbCBwb2ludCBvZiB0aGUgY29kZQorICAgICAgICAvLyB0byBkbyB0aGlzIG9wZXJhdGlv
biwgc2luY2UgYWxsIHNlbGVjdGlvbiBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGEgUkFOR0UgCisg
ICAgICAgIC8vIGNvbWUgdGhyb3VnaCBoZXJlIGJlZm9yZSBhbnlvbmUgdXNlcyBpdC4KKyAgICAg
ICAgbV9zdGFydCA9IG1fc3RhcnQuZG93bnN0cmVhbSgpOworICAgICAgICBtX2VuZCA9IG1fZW5k
LnVwc3RyZWFtKCk7CisgICAgfQorCisgICAgbV9uZWVkc0xheW91dCA9IHRydWU7CisgICAgCisj
aWYgRURJVF9ERUJVRworICAgIGRlYnVnUG9zaXRpb24oKTsKKyNlbmRpZgorfQorCit2b2lkIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0ICpyLCBib29sIHNl
bGVjdGVkKSBjb25zdAoreworICAgIGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewor
ICAgICAgICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+
KHItPm5vZGUoKSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgc2VsZWN0ZWQg
PyAiPT0+ICIgOiAiICAgICIsIGVsZW1lbnQtPmxvY2FsTmFtZSgpLnFzdHJpbmcoKS5sYXRpbjEo
KSk7CisgICAgfQorICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CisgICAgICAgIFJlbmRlclRl
eHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7CisgICAgICAg
IGlmICh0ZXh0UmVuZGVyZXItPnN0cmluZ0xlbmd0aCgpID09IDAgfHwgIXRleHRSZW5kZXJlci0+
Zmlyc3RUZXh0Qm94KCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMjdGV4dCAo
ZW1wdHkpXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4ID0g
MzY7CisgICAgICAgIFFTdHJpbmcgdGV4dCA9IERPTVN0cmluZyh0ZXh0UmVuZGVyZXItPnN0cmlu
ZygpKS5xc3RyaW5nKCk7CisgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
KyAgICAgICAgaWYgKHNlbGVjdGVkKSB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgIGlmIChyLT5ub2RlKCkgPT0gbV9zdGFydC5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gbV9zdGFydC5vZmZzZXQoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHItPm5v
ZGUoKSA9PSBtX2VuZC5ub2RlKCkpCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbV9lbmQub2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgcG9zOworICAgICAgICAg
ICAgSW5saW5lVGV4dEJveCAqYm94ID0gdGV4dFJlbmRlcmVyLT5maW5kTmV4dElubGluZVRleHRC
b3gob2Zmc2V0LCBwb3MpOworICAgICAgICAgICAgdGV4dCA9IHRleHQubWlkKGJveC0+bV9zdGFy
dCwgYm94LT5tX2xlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFFTdHJpbmcgc2hvdzsK
KyAgICAgICAgICAgIGludCBtaWQgPSBtYXggLyAyOworICAgICAgICAgICAgaW50IGNhcmV0ID0g
MDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gdGV4dCBpcyBzaG9ydGVyIHRoYW4gbWF4
CisgICAgICAgICAgICBpZiAodGV4dExlbmd0aCA8IG1heCkgeworICAgICAgICAgICAgICAgIHNo
b3cgPSB0ZXh0OworICAgICAgICAgICAgICAgIGNhcmV0ID0gcG9zOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB0b28gZmV3IGNoYXJhY3RlcnMgdG8gbGVmdAor
ICAgICAgICAgICAgZWxzZSBpZiAocG9zIC0gbWlkIDwgMCkgeworICAgICAgICAgICAgICAgIHNo
b3cgPSB0ZXh0LmxlZnQobWF4IC0gMykgKyAiLi4uIjsKKyAgICAgICAgICAgICAgICBjYXJldCA9
IHBvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gZW5vdWdo
IGNoYXJhY3RlcnMgb24gZWFjaCBzaWRlCisgICAgICAgICAgICBlbHNlIGlmIChwb3MgLSBtaWQg
Pj0gMCAmJiBwb3MgKyBtaWQgPD0gdGV4dExlbmd0aCkgeworICAgICAgICAgICAgICAgIHNob3cg
PSAiLi4uIiArIHRleHQubWlkKHBvcyAtIG1pZCArIDMsIG1heCAtIDYpICsgIi4uLiI7CisgICAg
ICAgICAgICAgICAgY2FyZXQgPSBtaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIHRvbyBmZXcgY2hhcmFjdGVycyBvbiByaWdodAorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2hvdyA9ICIuLi4iICsgdGV4dC5yaWdodChtYXggLSAzKTsK
KyAgICAgICAgICAgICAgICBjYXJldCA9IHBvcyAtICh0ZXh0TGVuZ3RoIC0gc2hvdy5sZW5ndGgo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNob3cucmVwbGFj
ZSgnXG4nLCAnICcpOworICAgICAgICAgICAgc2hvdy5yZXBsYWNlKCdccicsICcgJyk7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiAjdGV4dCA6IFwiJXNcIiBhdCBvZmZzZXQgJWRc
biIsIHNob3cubGF0aW4xKCksIHBvcyk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
ICAgICAgICAgIik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhcmV0OyBpKysp
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIik7CisgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIl5cbiIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKChpbnQpdGV4dC5sZW5ndGgoKSA+IG1heCkKKyAgICAgICAgICAgICAgICB0ZXh0ID0g
dGV4dC5sZWZ0KG1heCAtIDMpICsgIi4uLiI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdGV4dCA9IHRleHQubGVmdChtYXgpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICAgI3RleHQgOiBcIiVzXCJcbiIsIHRleHQubGF0aW4xKCkpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmRlYnVnUG9zaXRpb24oKSBjb25zdAor
eworICAgIGlmICghbV9zdGFydC5ub2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vc3Rh
dGljIGludCBjb250ZXh0ID0gNTsKKyAgICAKKyAgICAvL1JlbmRlck9iamVjdCAqciA9IDA7CisK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIlNlbGVjdGlvbkNvbnRyb2xsZXIgPT09PT09PT09PT09PT09
PT1cbiIpOworCisgICAgaWYgKG1fc3RhcnQgPT0gbV9lbmQpIHsKKyAgICAgICAgUG9zaXRpb24g
cG9zID0gbV9zdGFydDsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb3M6ICAgICAgICAlcyAl
cDolbGRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgpLCBwb3Mu
bm9kZSgpLCBwb3Mub2Zmc2V0KCkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUG9zaXRp
b24gcG9zID0gbV9zdGFydDsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzdGFydDogICAgICAl
cyAlcDolbGRcbiIsIHBvcy5ub2RlKCktPm5vZGVOYW1lKCkucXN0cmluZygpLmxhdGluMSgpLCBw
b3Mubm9kZSgpLCBwb3Mub2Zmc2V0KCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICAgICAgcG9zID0gbV9lbmQ7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZW5kOiAgICAgICAgJXMgJXA6JWxkXG4iLCBwb3Mu
bm9kZSgpLT5ub2RlTmFtZSgpLnFzdHJpbmcoKS5sYXRpbjEoKSwgcG9zLm5vZGUoKSwgcG9zLm9m
ZnNldCgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLVxuIik7CisgICAgfQorICAgICAgICAgIAorI2lmIDAKKyAgICBpbnQgYmFj
ayA9IDA7CisgICAgciA9IG1fc3RhcnQubm9kZSgpLT5yZW5kZXJlcigpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY29udGV4dDsgaSsrLCBiYWNrKyspIHsKKyAgICAgICAgaWYgKHItPnByZXZp
b3VzUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHIgPSByLT5wcmV2aW91c1JlbmRlcmVyKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGJhY2s7IGkrKykgeworICAgICAgICBkZWJ1Z1JlbmRlcmVyKHIsIGZhbHNlKTsKKyAg
ICAgICAgciA9IHItPm5leHRSZW5kZXJlcigpOworICAgIH0KKworCisgICAgZnByaW50ZihzdGRl
cnIsICJcbiIpOworCisgICAgaWYgKG1fc3RhcnQubm9kZSgpID09IG1fZW5kLm5vZGUoKSkKKyAg
ICAgICAgZGVidWdSZW5kZXJlcihtX3N0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSwgdHJ1ZSk7Cisg
ICAgZWxzZQorICAgICAgICBmb3IgKHIgPSBtX3N0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKTsgciAm
JiByICE9IG1fZW5kLm5vZGUoKS0+cmVuZGVyZXIoKTsgciA9IHItPm5leHRSZW5kZXJlcigpKQor
ICAgICAgICAgICAgZGVidWdSZW5kZXJlcihyLCB0cnVlKTsKKyAgICAKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIlxuIik7CisgICAgCisgICAgciA9IG1fZW5kLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRleHQ7IGkrKykgeworICAgICAgICBpZiAoci0+bmV4
dFJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIHIgPSByLT5uZXh0UmVuZGVyZXIoKTsKKyAgICAg
ICAgICAgIGRlYnVnUmVuZGVyZXIociwgZmFsc2UpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgZnByaW50ZihzdGRlcnIs
ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Cit9CisKKyNpZm5kZWYgTkRF
QlVHCisjZGVmaW5lIEZvcm1hdEJ1ZmZlclNpemUgMTAyNAordm9pZCBTZWxlY3Rpb25Db250cm9s
bGVyOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29u
c3QKK3sKKyAgICBET01TdHJpbmcgcmVzdWx0OworICAgIERPTVN0cmluZyBzOworICAgIAorICAg
IGlmIChpc05vbmUoKSkgeworICAgICAgICByZXN1bHQgPSAiPG5vbmU+IjsKKyAgICB9CisgICAg
ZWxzZSB7CisgICAgICAgIGNoYXIgc1tGb3JtYXRCdWZmZXJTaXplXTsKKyAgICAgICAgcmVzdWx0
ICs9ICJmcm9tICI7CisgICAgICAgIG1fc3RhcnQuZm9ybWF0Rm9yRGVidWdnZXIocywgRm9ybWF0
QnVmZmVyU2l6ZSk7CisgICAgICAgIHJlc3VsdCArPSBzOworICAgICAgICByZXN1bHQgKz0gIiB0
byAiOworICAgICAgICBtX2VuZC5mb3JtYXRGb3JEZWJ1Z2dlcihzLCBGb3JtYXRCdWZmZXJTaXpl
KTsKKyAgICAgICAgcmVzdWx0ICs9IHM7CisgICAgfQorICAgICAgICAgIAorICAgIHN0cm5jcHko
YnVmZmVyLCByZXN1bHQucXN0cmluZygpLmxhdGluMSgpLCBsZW5ndGggLSAxKTsKK30KKyN1bmRl
ZiBGb3JtYXRCdWZmZXJTaXplCisKK3ZvaWQgU2VsZWN0aW9uQ29udHJvbGxlcjo6c2hvd1RyZWUo
KSBjb25zdAoreworICAgIGlmIChtX3N0YXJ0Lm5vZGUoKSkKKyAgICAgICAgbV9zdGFydC5ub2Rl
KCktPnNob3dUcmVlQW5kTWFyayhtX3N0YXJ0Lm5vZGUoKSwgIlMiLCBtX2VuZC5ub2RlKCksICJF
Iik7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgRE9NCkluZGV4OiBraHRtbC9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLU5wdSBraHRtbC9lZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuaAotLS0ga2h0bWwvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmgJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmgJMTIgU2VwIDIwMDUgMTI6MzA6MjAgLTAwMDAKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS0hUTUxfRURJVElOR19TRUxFQ1RJT05f
SAorI2RlZmluZSBLSFRNTF9FRElUSU5HX1NFTEVDVElPTl9ICisKKyNpbmNsdWRlIDxxcmVjdC5o
PgorI2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKKyNpbmNsdWRlICJ0ZXh0X2dyYW51bGFy
aXR5LmgiCisjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKKworY2xhc3MgS0hUTUxQYXJ0OworY2xh
c3MgUVBhaW50ZXI7CisKK25hbWVzcGFjZSBraHRtbCB7CisKK2NsYXNzIFJlbmRlck9iamVjdDsK
K2NsYXNzIFZpc2libGVQb3NpdGlvbjsKKworY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcgorewor
cHVibGljOgorICAgIGVudW0gRVN0YXRlIHsgTk9ORSwgQ0FSRVQsIFJBTkdFIH07CisgICAgZW51
bSBFQWx0ZXIgeyBNT1ZFLCBFWFRFTkQgfTsKKyAgICBlbnVtIEVEaXJlY3Rpb24geyBGT1JXQVJE
LCBCQUNLV0FSRCwgUklHSFQsIExFRlQgfTsKKyNkZWZpbmUgU0VMX0RFRkFVTFRfQUZGSU5JVFkg
RE9XTlNUUkVBTQorCisgICAgdHlwZWRlZiBET006OlBvc2l0aW9uIFBvc2l0aW9uOworICAgIHR5
cGVkZWYgRE9NOjpSYW5nZUltcGwgUmFuZ2VJbXBsOworCisgICAgU2VsZWN0aW9uQ29udHJvbGxl
cigpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUmFuZ2VJbXBsICosIEVBZmZpbml0
eSBiYXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSk7CisgICAgU2VsZWN0aW9u
Q29udHJvbGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CisgICAgU2VsZWN0aW9uQ29udHJv
bGxlcihjb25zdCBWaXNpYmxlUG9zaXRpb24gJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOwor
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIoY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5IGFmZmlu
aXR5KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyKGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0
eSwgY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVy
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJik7CisKKyAgICBTZWxlY3Rpb25Db250cm9sbGVy
ICZvcGVyYXRvcj0oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmbyk7CisgICAgU2VsZWN0aW9u
Q29udHJvbGxlciAmb3BlcmF0b3I9KGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcikgeyBtb3ZlVG8o
cik7IHJldHVybiAqdGhpczsgfQorCisgICAgdm9pZCBtb3ZlVG8oY29uc3QgUmFuZ2VJbXBsICos
IEVBZmZpbml0eSBiYXNlQWZmaW5pdHksIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSk7CisgICAg
dm9pZCBtb3ZlVG8oY29uc3QgVmlzaWJsZVBvc2l0aW9uICYpOworICAgIHZvaWQgbW92ZVRvKGNv
bnN0IFZpc2libGVQb3NpdGlvbiAmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CisgICAgdm9p
ZCBtb3ZlVG8oY29uc3QgUG9zaXRpb24gJiwgRUFmZmluaXR5KTsKKyAgICB2b2lkIG1vdmVUbyhj
b25zdCBQb3NpdGlvbiAmLCBFQWZmaW5pdHksIGNvbnN0IFBvc2l0aW9uICYsIEVBZmZpbml0eSk7
CisgICAgdm9pZCBtb3ZlVG8oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmKTsKKworICAgIEVT
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICAKKyAgICAvLyBGSVhN
RTogVGhlc2Ugc2hvdWxkIHN1cHBvcnQgc2VwYXJhdGUgYmFzZUFmZmluaXR5IGFuZCBleHRlbnRB
ZmZpbml0eQorICAgIEVBZmZpbml0eSBzdGFydEFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4gbV9h
ZmZpbml0eTsgfQorICAgIEVBZmZpbml0eSBlbmRBZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWZmaW5pdHk7IH0KKyAgICBFQWZmaW5pdHkgYmFzZUFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9hZmZpbml0eTsgfQorICAgIEVBZmZpbml0eSBleHRlbnRBZmZpbml0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYWZmaW5pdHk7IH0KKworICAgIGJvb2wgbW9kaWZ5KEVBbHRlciwgRURpcmVjdGlvbiwg
RVRleHRHcmFudWxhcml0eSk7CisgICAgYm9vbCBtb2RpZnkoRUFsdGVyLCBpbnQgdmVydGljYWxE
aXN0YW5jZSk7CisgICAgYm9vbCBleHBhbmRVc2luZ0dyYW51bGFyaXR5KEVUZXh0R3JhbnVsYXJp
dHkpOworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgc2V0QmFzZShjb25zdCBWaXNpYmxl
UG9zaXRpb24gJik7CisgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICYp
OworICAgIHZvaWQgc2V0QmFzZUFuZEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24gJmJhc2Us
IGNvbnN0IFZpc2libGVQb3NpdGlvbiAmZXh0ZW50KTsKKworICAgIHZvaWQgc2V0QmFzZShjb25z
dCBQb3NpdGlvbiAmcG9zLCBFQWZmaW5pdHkgYWZmaW5pdHkpOworICAgIHZvaWQgc2V0RXh0ZW50
KGNvbnN0IFBvc2l0aW9uICZwb3MsIEVBZmZpbml0eSBhZmZpbml0eSk7CisgICAgdm9pZCBzZXRC
YXNlQW5kRXh0ZW50KGNvbnN0IFBvc2l0aW9uICZiYXNlLCBFQWZmaW5pdHkgYmFzZUFmZmluaXR5
LCBjb25zdCBQb3NpdGlvbiAmZXh0ZW50LCBFQWZmaW5pdHkgZXh0ZW50QWZmaW5pdHkpOworCisg
ICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorICAgIFBvc2l0aW9u
IGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CisgICAgUG9zaXRpb24gc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CisgICAgUG9zaXRpb24gZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KKworICAgIFFSZWN0IGNhcmV0UmVjdCgpIGNvbnN0OworICAgIFFSZWN0
IGV4cGVjdGVkVmlzaWJsZVJlY3QoKSBjb25zdDsKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJv
b2wgZmxhZyA9IHRydWUpOworCisgICAgdm9pZCBjbGVhck1vZGlmeUJpYXMoKSB7IG1fbW9kaWZ5
Qmlhc1NldCA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRNb2RpZnlCaWFzKEVBbHRlciwgRURpcmVj
dGlvbik7CisgICAgCisgICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09
IE5PTkU7IH0KKyAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IENB
UkVUOyB9CisgICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5H
RTsgfQorICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9
IE5PTkU7IH0KKworICAgIFNoYXJlZFB0cjxET006OlJhbmdlSW1wbD4gdG9SYW5nZSgpIGNvbnN0
OworCisgICAgdm9pZCBkZWJ1Z1Bvc2l0aW9uKCkgY29uc3Q7CisgICAgdm9pZCBkZWJ1Z1JlbmRl
cmVyKGtodG1sOjpSZW5kZXJPYmplY3QgKnIsIGJvb2wgc2VsZWN0ZWQpIGNvbnN0OworCisgICAg
ZnJpZW5kIGNsYXNzIDo6S0hUTUxQYXJ0OworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZm9y
bWF0Rm9yRGVidWdnZXIoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0OworICAg
IHZvaWQgc2hvd1RyZWUoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGVudW0gRVBv
c2l0aW9uVHlwZSB7IFNUQVJULCBFTkQsIEJBU0UsIEVYVEVOVCB9OworCisgICAgdm9pZCBpbml0
KEVBZmZpbml0eSBhZmZpbml0eSk7CisgICAgdm9pZCB2YWxpZGF0ZShFVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5ID0gQ0hBUkFDVEVSKTsKKworICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlF
eHRlbmRpbmdSaWdodEZvcndhcmQoRVRleHRHcmFudWxhcml0eSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIG1vZGlmeU1vdmluZ1JpZ2h0Rm9yd2FyZChFVGV4dEdyYW51bGFyaXR5KTsKKyAgICBWaXNp
YmxlUG9zaXRpb24gbW9kaWZ5RXh0ZW5kaW5nTGVmdEJhY2t3YXJkKEVUZXh0R3JhbnVsYXJpdHkp
OworICAgIFZpc2libGVQb3NpdGlvbiBtb2RpZnlNb3ZpbmdMZWZ0QmFja3dhcmQoRVRleHRHcmFu
dWxhcml0eSk7CisKKyAgICB2b2lkIGxheW91dCgpOworICAgIHZvaWQgbmVlZHNDYXJldFJlcGFp
bnQoKTsKKyAgICB2b2lkIHBhaW50Q2FyZXQoUVBhaW50ZXIgKnAsIGNvbnN0IFFSZWN0ICZyZWN0
KTsKKyAgICBRUmVjdCBjYXJldFJlcGFpbnRSZWN0KCkgY29uc3Q7CisKKyAgICBpbnQgeFBvc0Zv
clZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKEVQb3NpdGlvblR5cGUsIGJvb2wgcmVjYWxjID0gZmFs
c2UpIGNvbnN0OworCisgICAgUG9zaXRpb24gbV9iYXNlOyAgICAgICAgICAgICAgLy8gYmFzZSBw
b3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgorICAgIFBvc2l0aW9uIG1fZXh0ZW50OyAgICAgICAg
ICAgIC8vIGV4dGVudCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgorICAgIFBvc2l0aW9uIG1f
c3RhcnQ7ICAgICAgICAgICAgIC8vIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisg
ICAgUG9zaXRpb24gbV9lbmQ7ICAgICAgICAgICAgICAgLy8gZW5kIHBvc2l0aW9uIGZvciB0aGUg
c2VsZWN0aW9uCisKKyAgICBFU3RhdGUgbV9zdGF0ZTsgICAgICAgICAgICAgICAvLyB0aGUgc3Rh
dGUgb2YgdGhlIHNlbGVjdGlvbgorICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAgICAgICAgIC8v
IHRoZSB1cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBzZWxlY3Rpb24KKworICAg
IFFSZWN0IG1fY2FyZXRSZWN0OyAgICAgICAgICAgIC8vIGNhcmV0IGNvb3JkaW5hdGVzLCBzaXpl
LCBhbmQgcG9zaXRpb24KKyAgICBRUmVjdCBtX2V4cGVjdGVkVmlzaWJsZVJlY3Q7ICAvLyByZWN0
YW5nbGUgdXNlZCB0byB1cGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGFzIHNlbGVjdGlvbiBjaGFuZ2Vz
CisgICAgCisgICAgYm9vbCBtX2Jhc2VJc1N0YXJ0IDogMTsgICAgICAgLy8gdHJ1ZSBpZiBiYXNl
IG5vZGUgaXMgYmVmb3JlIHRoZSBleHRlbnQgbm9kZQorICAgIGJvb2wgbV9uZWVkc0xheW91dCA6
IDE7ICAgICAgIC8vIHRydWUgaWYgdGhlIGNhcmV0IGFuZCBleHBlY3RlZFZpc2libGUgcmVjdGFu
Z2xlcyBuZWVkIHRvIGJlIGNhbGN1bGF0ZWQKKyAgICBib29sIG1fbW9kaWZ5Qmlhc1NldCA6IDE7
ICAgICAvLyB0cnVlIGlmIHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gaG9yaXpvbnRhbGx5IAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZGlmaWVkIHdpdGggRUFsdGVyOjpF
WFRFTkQKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU2VsZWN0aW9uQ29udHJv
bGxlciAmYSwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmYikKK3sKKyAgICByZXR1cm4gYS5z
dGFydCgpID09IGIuc3RhcnQoKSAmJiBhLmVuZCgpID09IGIuZW5kKCkgJiYgYS5zdGFydEFmZmlu
aXR5KCkgPT0gYi5zdGFydEFmZmluaXR5KCk7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmYSwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAm
YikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCit9IC8vIG5hbWVzcGFjZSBraHRtbAor
CisjZW5kaWYgLy8gS0hUTUxfRURJVElOR19TRUxFQ1RJT05fSApJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjIzCmRpZmYgLXAgLXUgLXIxLjIzIFdlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagk4IFNlcCAyMDA1IDA4OjAzOjA4IC0wMDAwCTEuMjMKKysrIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCTEyIFNlcCAyMDA1IDIxOjUxOjQ3IC0wMDAwCkBA
IC0zNjMsNyArMzYzLDcgQEAKIAkJOTNGMTk5RUYwODI0NUU1OTAwMUU5QUJDIC8qIEtXUUZvcm1E
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2
NDFGMjA2RTI4QzVDMDA1NUY2MTAgLyogS1dRRm9ybURhdGEuaCAqLzsgfTsKIAkJOTNGMTk5RjAw
ODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCRTg1NUY3RjA3MDFFODM1MDAyMzk3NjkgLyogV2ViQ29y
ZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk5M0YxOTlGMTA4MjQ1RTU5MDAxRTlBQkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQzJBMTA3MDI2Mjkw
MDBBRjY0MkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJOTNGMTk5RjIwODI0NUU1OTAwMUU5QUJDIC8qIHNl
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNBQkUwNjcwNzAyODVGNjAwQkQ5MUY5IC8qIHNlbGVjdGlvbi5oICovOyB9OworCQk5M0YxOTlG
MjA4MjQ1RTU5MDAxRTlBQkMgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBQkUwNjcwNzAyODVGNjAwQkQ5MUY5
IC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgp
OyB9OyB9OwogCQk5M0YxOTlGMzA4MjQ1RTU5MDAxRTlBQkMgLyogdmlzaWJsZV9wb3NpdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBQkUwNjkw
NzAyODVGNjAwQkQ5MUY5IC8qIHZpc2libGVfcG9zaXRpb24uaCAqLzsgfTsKIAkJOTNGMTk5RjQw
ODI0NUU1OTAwMUU5QUJDIC8qIHZpc2libGVfdGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBQkUwNkIwNzAyODVGNjAwQkQ5MUY5IC8qIHZpc2li
bGVfdGV4dC5oICovOyB9OwogCQk5M0YxOTlGNTA4MjQ1RTU5MDAxRTlBQkMgLyogdmlzaWJsZV91
bml0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNB
QkUwNkQwNzAyODVGNjAwQkQ5MUY5IC8qIHZpc2libGVfdW5pdHMuaCAqLzsgfTsKQEAgLTYwOCw3
ICs2MDgsNyBAQAogCQk5M0YxOUIwNjA4MjQ1RTU5MDAxRTlBQkMgLyogS1dRRm9ybURhdGEubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I2NDFGMTA2
RTI4QzVDMDA1NUY2MTAgLyogS1dRRm9ybURhdGEubW0gKi87IH07CiAJCTkzRjE5QjA3MDgyNDVF
NTkwMDFFOUFCQyAvKiBXZWJDb3JlVmlldy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkU4NTYwNTEwNzAxRjkxMTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3
Lm0gKi87IH07CiAJCTkzRjE5QjA4MDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJEYXNoYm9hcmRSZWdp
b24ubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBD
MkE1MDcwMjYyOTgwMEFGNjQyQyAvKiBXZWJEYXNoYm9hcmRSZWdpb24ubSAqLzsgfTsKLQkJOTNG
MTlCMDkwODI0NUU1OTAwMUU5QUJDIC8qIHNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FCRTA2NjA3MDI4NUY2MDBCRDkxRjkgLyog
c2VsZWN0aW9uLmNwcCAqLzsgfTsKKwkJOTNGMTlCMDkwODI0NUU1OTAwMUU5QUJDIC8qIFNlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIu
Y3BwICovOyB9OwogCQk5M0YxOUIwQTA4MjQ1RTU5MDAxRTlBQkMgLyogdmlzaWJsZV9wb3NpdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FC
RTA2ODA3MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV9wb3NpdGlvbi5jcHAgKi87IH07CiAJCTkz
RjE5QjBCMDgyNDVFNTkwMDFFOUFCQyAvKiB2aXNpYmxlX3RleHQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBQkUwNkEwNzAyODVGNjAwQkQ5MUY5
IC8qIHZpc2libGVfdGV4dC5jcHAgKi87IH07CiAJCTkzRjE5QjBDMDgyNDVFNTkwMDFFOUFCQyAv
KiB2aXNpYmxlX3VuaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzQUJFMDZDMDcwMjg1RjYwMEJEOTFGOSAvKiB2aXNpYmxlX3VuaXRzLmNwcCAq
LzsgfTsKQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCUE4MjEyQkI1MDg3OTRBMjMwMDY3NzM1OSAv
KiBLV1FGb3JtRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNCNjQxRjIwNkUyOEM1QzAwNTVGNjEwIC8qIEtXUUZvcm1EYXRhLmggKi87IH07CiAJ
CUE4MjEyQkI2MDg3OTRBMjMwMDY3NzM1OSAvKiBXZWJDb3JlVmlldy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkU4NTVGN0YwNzAxRTgzNTAwMjM5NzY5
IC8qIFdlYkNvcmVWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTgyMTJCQjcwODc5NEEyMzAwNjc3MzU5IC8qIFdlYkRhc2hib2FyZFJlZ2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MEMy
QTEwNzAyNjI5MDAwQUY2NDJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE4MjEyQkI4MDg3OTRBMjMwMDY3
NzM1OSAvKiBzZWxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzQUJFMDY3MDcwMjg1RjYwMEJEOTFGOSAvKiBzZWxlY3Rpb24uaCAqLzsgfTsK
KwkJQTgyMTJCQjgwODc5NEEyMzAwNjc3MzU5IC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUJFMDY3MDcwMjg1
RjYwMEJEOTFGOSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmggKi87IH07CiAJCUE4MjEyQkI5MDg3
OTRBMjMwMDY3NzM1OSAvKiB2aXNpYmxlX3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FCRTA2OTA3MDI4NUY2MDBCRDkxRjkgLyogdmlz
aWJsZV9wb3NpdGlvbi5oICovOyB9OwogCQlBODIxMkJCQTA4Nzk0QTIzMDA2NzczNTkgLyogdmlz
aWJsZV90ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0FCRTA2QjA3MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV90ZXh0LmggKi87IH07CiAJCUE4
MjEyQkJCMDg3OTRBMjMwMDY3NzM1OSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FCRTA2RDA3MDI4NUY2MDBCRDkxRjkg
LyogdmlzaWJsZV91bml0cy5oICovOyB9OwpAQCAtMTM0MCw3ICsxMzQwLDcgQEAKIAkJQTgyMTJD
RDQwODc5NEEyMzAwNjc3MzU5IC8qIEtXUUZvcm1EYXRhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNjQxRjEwNkUyOEM1QzAwNTVGNjEwIC8qIEtX
UUZvcm1EYXRhLm1tICovOyB9OwogCQlBODIxMkNENTA4Nzk0QTIzMDA2NzczNTkgLyogV2ViQ29y
ZVZpZXcubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJF
ODU2MDUxMDcwMUY5MTEwMDIzOTc2OSAvKiBXZWJDb3JlVmlldy5tICovOyB9OwogCQlBODIxMkNE
NjA4Nzk0QTIzMDA2NzczNTkgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQzJBNTA3MDI2Mjk4MDBBRjY0MkMg
LyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gKi87IH07Ci0JCUE4MjEyQ0Q3MDg3OTRBMjMwMDY3NzM1
OSAvKiBzZWxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIHNlbGVjdGlvbi5jcHAgKi87IH07
CisJCUE4MjEyQ0Q3MDg3OTRBMjMwMDY3NzM1OSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQUJFMDY2MDcw
Mjg1RjYwMEJEOTFGOSAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQTgyMTJD
RDgwODc5NEEyMzAwNjc3MzU5IC8qIHZpc2libGVfcG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNBQkUwNjgwNzAyODVGNjAwQkQ5MUY5
IC8qIHZpc2libGVfcG9zaXRpb24uY3BwICovOyB9OwogCQlBODIxMkNEOTA4Nzk0QTIzMDA2Nzcz
NTkgLyogdmlzaWJsZV90ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQUJFMDZBMDcwMjg1RjYwMEJEOTFGOSAvKiB2aXNpYmxlX3RleHQuY3Bw
ICovOyB9OwogCQlBODIxMkNEQTA4Nzk0QTIzMDA2NzczNTkgLyogdmlzaWJsZV91bml0cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0FCRTA2QzA3
MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV91bml0cy5jcHAgKi87IH07CkBAIC0yMjQ2LDggKzIy
NDYsOCBAQAogCQk5MzlGRjhFRDA3MDJCMUIxMDA5NzlFNUUgLyogdmlzaWJsZV9yYW5nZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2aXNpYmxlX3JhbmdlLmg7IHBhdGggPSBl
ZGl0aW5nL3Zpc2libGVfcmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNB
QkNFNUQwNkUxQTQyRTAwODU5MjVCIC8qIGZvcm1kYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBmb3JtZGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzQUJDRTVFMDZFMUE0MkUwMDg1OTI1QiAvKiBmb3JtZGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZm9ybWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIHNlbGVjdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBzZWxlY3Rpb24uY3BwOyBwYXRoID0gZWRp
dGluZy9zZWxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0FCRTA2
NzA3MDI4NUY2MDBCRDkxRjkgLyogc2VsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IHNlbGVjdGlvbi5oOyBwYXRoID0gZWRpdGluZy9zZWxlY3Rpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIFNlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
U2VsZWN0aW9uQ29udHJvbGxlci5jcHA7IHBhdGggPSBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0FCRTA2NzA3MDI4NUY2MDBC
RDkxRjkgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBTZWxlY3Rpb25Db250cm9sbGVyLmg7IHBhdGggPSBlZGl0aW5nL1NlbGVjdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQkUwNjgwNzAyODVG
NjAwQkQ5MUY5IC8qIHZpc2libGVfcG9zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gdmlzaWJsZV9wb3NpdGlvbi5jcHA7IHBhdGggPSBlZGl0aW5nL3Zpc2li
bGVfcG9zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0FCRTA2OTA3
MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV9wb3NpdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSB2aXNpYmxlX3Bvc2l0aW9uLmg7IHBhdGggPSBlZGl0aW5nL3Zpc2libGVf
cG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNBQkUwNkEwNzAyODVG
NjAwQkQ5MUY5IC8qIHZpc2libGVfdGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSB2aXNpYmxlX3RleHQuY3BwOyBwYXRoID0gZWRpdGluZy92aXNpYmxlX3RleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTEzMCw4ICs1MTMwLDggQEAKIAkJ
CQlCRTAyRDRFNzA2NkY5MDhBMDA3NjgwOUYgLyoganNlZGl0aW5nLmNwcCAqLywKIAkJCQk5Mzc4
RDlGQTA3NjQwQTQ2MDA0Qjk3QkYgLyogbWFya3VwLmggKi8sCiAJCQkJOTM3OEQ5RjkwNzY0MEE0
NjAwNEI5N0JGIC8qIG1hcmt1cC5jcHAgKi8sCi0JCQkJOTNBQkUwNjcwNzAyODVGNjAwQkQ5MUY5
IC8qIHNlbGVjdGlvbi5oICovLAotCQkJCTkzQUJFMDY2MDcwMjg1RjYwMEJEOTFGOSAvKiBzZWxl
Y3Rpb24uY3BwICovLAorCQkJCTkzQUJFMDY3MDcwMjg1RjYwMEJEOTFGOSAvKiBTZWxlY3Rpb25D
b250cm9sbGVyLmggKi8sCisJCQkJOTNBQkUwNjYwNzAyODVGNjAwQkQ5MUY5IC8qIFNlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwICovLAogCQkJCUJFQ0U2N0JEMDcwODdCMjUwMDA3QzE0QiAvKiB0ZXh0
X2FmZmluaXR5LmggKi8sCiAJCQkJOTMyQjk4MzQwNzAyOTdEQzAwMzI4MDRGIC8qIHRleHRfZ3Jh
bnVsYXJpdHkuaCAqLywKIAkJCQk5M0FCRTA2OTA3MDI4NUY2MDBCRDkxRjkgLyogdmlzaWJsZV9w
b3NpdGlvbi5oICovLApAQCAtNjExMiw3ICs2MTEyLDcgQEAKIAkJCQk5M0YxOTlFRjA4MjQ1RTU5
MDAxRTlBQkMgLyogS1dRRm9ybURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUYwMDgy
NDVFNTkwMDFFOUFCQyAvKiBXZWJDb3JlVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5
RjEwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTNGMTk5RjIwODI0NUU1OTAwMUU5QUJDIC8qIHNlbGVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTNGMTk5RjIwODI0NUU1OTAwMUU5QUJDIC8qIFNlbGVjdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OUYzMDgyNDVFNTkwMDFFOUFCQyAvKiB2aXNpYmxl
X3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGNDA4MjQ1RTU5MDAxRTlBQkMg
LyogdmlzaWJsZV90ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlGNTA4MjQ1RTU5MDAx
RTlBQkMgLyogdmlzaWJsZV91bml0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDYwLDcgKzY0NjAs
NyBAQAogCQkJCUE4MjEyQkI1MDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FGb3JtRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgyMTJCQjYwODc5NEEyMzAwNjc3MzU5IC8qIFdlYkNvcmVWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODIxMkJCNzA4Nzk0QTIzMDA2NzczNTkgLyogV2ViRGFzaGJv
YXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODIxMkJCODA4Nzk0QTIzMDA2NzczNTkg
Lyogc2VsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODIxMkJCODA4Nzk0QTIzMDA2Nzcz
NTkgLyogU2VsZWN0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMTJCQjkw
ODc5NEEyMzAwNjc3MzU5IC8qIHZpc2libGVfcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4MjEyQkJBMDg3OTRBMjMwMDY3NzM1OSAvKiB2aXNpYmxlX3RleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4MjEyQkJCMDg3OTRBMjMwMDY3NzM1OSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgyMjcsNyArODIyNyw3IEBACiAJCQkJOTNGMTlCMDYwODI0NUU1OTAwMUU5
QUJDIC8qIEtXUUZvcm1EYXRhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlCMDcwODI0NUU1
OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3Lm0gaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUIwODA4
MjQ1RTU5MDAxRTlBQkMgLyogV2ViRGFzaGJvYXJkUmVnaW9uLm0gaW4gU291cmNlcyAqLywKLQkJ
CQk5M0YxOUIwOTA4MjQ1RTU5MDAxRTlBQkMgLyogc2VsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTkzRjE5QjA5MDgyNDVFNTkwMDFFOUFCQyAvKiBTZWxlY3Rpb25Db250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QjBBMDgyNDVFNTkwMDFFOUFCQyAvKiB2aXNpYmxl
X3Bvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QjBCMDgyNDVFNTkwMDFFOUFC
QyAvKiB2aXNpYmxlX3RleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlCMEMwODI0NUU1
OTAwMUU5QUJDIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04NTAxLDcg
Kzg1MDEsNyBAQAogCQkJCUE4MjEyQ0Q0MDg3OTRBMjMwMDY3NzM1OSAvKiBLV1FGb3JtRGF0YS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUE4MjEyQ0Q1MDg3OTRBMjMwMDY3NzM1OSAvKiBXZWJDb3Jl
Vmlldy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgyMTJDRDYwODc5NEEyMzAwNjc3MzU5IC8qIFdl
YkRhc2hib2FyZFJlZ2lvbi5tIGluIFNvdXJjZXMgKi8sCi0JCQkJQTgyMTJDRDcwODc5NEEyMzAw
Njc3MzU5IC8qIHNlbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBODIxMkNENzA4Nzk0
QTIzMDA2NzczNTkgLyogU2VsZWN0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODIxMkNEODA4Nzk0QTIzMDA2NzczNTkgLyogdmlzaWJsZV9wb3NpdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODIxMkNEOTA4Nzk0QTIzMDA2NzczNTkgLyogdmlzaWJsZV90ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjEyQ0RBMDg3OTRBMjMwMDY3NzM1OSAvKiB2aXNpYmxl
X3VuaXRzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9w
YXJ0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMzkKZGlmZiAtcCAtdSAtcjEuMzM5IFdl
YkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5j
cHAJMSBTZXAgMjAwNSAxODowMzozMSAtMDAwMAkxLjMzOQorKysgV2ViQ29yZS9raHRtbC9raHRt
bF9wYXJ0LmNwcAkxMiBTZXAgMjAwNSAyMTo1MTo1MCAtMDAwMApAQCAtNDIsNyArNDIsNyBAQAog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiZWRpdGluZy9tYXJrdXAuaCIK
ICNpbmNsdWRlICJlZGl0aW5nL2h0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAiZWRpdGluZy9zZWxl
Y3Rpb24uaCIKKyNpbmNsdWRlICJlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJlZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5oIgpAQCAtMTMyLDcg
KzEzMiw3IEBAIHVzaW5nIGtodG1sOjpwbGFpblRleHQ7CiB1c2luZyBraHRtbDo6UmVuZGVyT2Jq
ZWN0OwogdXNpbmcga2h0bWw6OlJlbmRlclRleHQ7CiB1c2luZyBraHRtbDo6UmVuZGVyV2lkZ2V0
OwotdXNpbmcga2h0bWw6OlNlbGVjdGlvbjsKK3VzaW5nIGtodG1sOjpTZWxlY3Rpb25Db250cm9s
bGVyOwogdXNpbmcga2h0bWw6OlRva2VuaXplcjsKIHVzaW5nIGtodG1sOjpUeXBpbmdDb21tYW5k
OwogdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsKQEAgLTIzOTgsNyArMjM5OCw3IEBAIGJv
b2wgS0hUTUxQYXJ0OjpmaW5kVGV4dE5leHQoIGNvbnN0IFFTdHIKICAgICAgICAgICAgICAgICBk
LT5tX3ZpZXctPnNldENvbnRlbnRzUG9zKHgtNTAsIHktNTApOwogICAgICAgICAgICAgICAgIFBv
c2l0aW9uIHAxKGQtPm1fZmluZE5vZGUsIGQtPm1fZmluZFBvcyk7CiAgICAgICAgICAgICAgICAg
UG9zaXRpb24gcDIoZC0+bV9maW5kTm9kZSwgZC0+bV9maW5kUG9zICsgbWF0Y2hMZW4pOwotICAg
ICAgICAgICAgICAgIFNlbGVjdGlvbiBzZWwgPSBTZWxlY3Rpb24ocDEsIGtodG1sOjpET1dOU1RS
RUFNLCBwMiwga2h0bWw6OlZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKKyAgICAgICAgICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocDEsIGtodG1s
OjpET1dOU1RSRUFNLCBwMiwga2h0bWw6OlZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKTsKICAgICAg
ICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgc2V0U2VsZWN0aW9uKHNlbCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ2Miw3
ICsyNDYyLDcgQEAgYm9vbCBLSFRNTFBhcnQ6Omhhc1NlbGVjdGlvbigpIGNvbnN0CiAgICAgcmV0
dXJuIGQtPm1fc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCk7CiB9CiAKLWNvbnN0IFNlbGVjdGlv
biAmS0hUTUxQYXJ0OjpzZWxlY3Rpb24oKSBjb25zdAorY29uc3QgU2VsZWN0aW9uQ29udHJvbGxl
ciAmS0hUTUxQYXJ0OjpzZWxlY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX3NlbGVj
dGlvbjsKIH0KQEAgLTI0NzcsMjIgKzI0NzcsMjIgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldFNlbGVj
dGlvbkdyYW51bGFyaXR5KAogICAgIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJpdHkgPSBncmFudWxh
cml0eTsKIH0KIAotY29uc3QgU2VsZWN0aW9uICZLSFRNTFBhcnQ6OmRyYWdDYXJldCgpIGNvbnN0
Citjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZLSFRNTFBhcnQ6OmRyYWdDYXJldCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGQtPm1fZHJhZ0NhcmV0OwogfQogCi1jb25zdCBTZWxlY3Rpb24gJktI
VE1MUGFydDo6bWFyaygpIGNvbnN0Citjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZLSFRNTFBh
cnQ6Om1hcmsoKSBjb25zdAogewogICAgIHJldHVybiBkLT5tX21hcms7CiB9CiAKLXZvaWQgS0hU
TUxQYXJ0OjpzZXRNYXJrKGNvbnN0IFNlbGVjdGlvbiAmcykKK3ZvaWQgS0hUTUxQYXJ0OjpzZXRN
YXJrKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMpCiB7CiAgICAgZC0+bV9tYXJrID0gczsK
IH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMsIGJv
b2wgY2xvc2VUeXBpbmcsIGJvb2wga2VlcFR5cGluZ1N0eWxlKQordm9pZCBLSFRNTFBhcnQ6OnNl
dFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzLCBib29sIGNsb3NlVHlwaW5n
LCBib29sIGtlZXBUeXBpbmdTdHlsZSkKIHsKICAgICBpZiAoZC0+bV9zZWxlY3Rpb24gPT0gcykg
ewogICAgICAgICByZXR1cm47CkBAIC0yNTAxLDcgKzI1MDEsNyBAQCB2b2lkIEtIVE1MUGFydDo6
c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjCiAgICAgY2xlYXJDYXJldFJlY3RJZk5lZWRlZCgpOwog
CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIFNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBkLT5tX3Nl
bGVjdGlvbjsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIG9sZFNlbGVjdGlvbiA9IGQtPm1fc2Vs
ZWN0aW9uOwogI2VuZGlmCiAKICAgICBkLT5tX3NlbGVjdGlvbiA9IHM7CkBAIC0yNTI3LDcgKzI1
MjcsNyBAQCB2b2lkIEtIVE1MUGFydDo6c2V0U2VsZWN0aW9uKGNvbnN0IFNlbGVjCiAgICAgZW1p
dFNlbGVjdGlvbkNoYW5nZWQoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnQ6OnNldERyYWdDYXJldChj
b25zdCBTZWxlY3Rpb24gJmRyYWdDYXJldCkKK3ZvaWQgS0hUTUxQYXJ0OjpzZXREcmFnQ2FyZXQo
Y29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmZHJhZ0NhcmV0KQogewogICAgIGlmIChkLT5tX2Ry
YWdDYXJldCAhPSBkcmFnQ2FyZXQpIHsKICAgICAgICAgZC0+bV9kcmFnQ2FyZXQubmVlZHNDYXJl
dFJlcGFpbnQoKTsKQEAgLTI1MzgsNyArMjUzOCw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXREcmFn
Q2FyZXQoY29uc3QgU2VsZWMKIAogdm9pZCBLSFRNTFBhcnQ6OmNsZWFyU2VsZWN0aW9uKCkKIHsK
LSAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKCkpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rp
b25Db250cm9sbGVyKCkpOwogfQogCiB2b2lkIEtIVE1MUGFydDo6aW52YWxpZGF0ZVNlbGVjdGlv
bigpCkBAIC00NTkyLDcgKzQ1OTIsNyBAQCBib29sIEtIVE1MUGFydDo6aXNQb2ludEluc2lkZVNl
bGVjdGlvbihpCiAKIHZvaWQgS0hUTUxQYXJ0OjpzZWxlY3RDbG9zZXN0V29yZEZyb21Nb3VzZUV2
ZW50KFFNb3VzZUV2ZW50ICptb3VzZSwgTm9kZUltcGwgKmlubmVyTm9kZSwgaW50IHgsIGludCB5
KQogewotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb247CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBz
ZWxlY3Rpb247CiAKICAgICBpZiAoaW5uZXJOb2RlICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKSAm
JiBtb3VzZURvd25NYXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hv
dWxkU2VsZWN0KCkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJl
bmRlcmVyKCktPnBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoeCwgeSkpOwpAQCAtNDYzNiw3ICs0NjM2
LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFRyaQogICAgIAogICAg
IGlmIChtb3VzZS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBpbm5lck5vZGUgJiYgaW5uZXJO
b2RlLT5yZW5kZXJlcigpICYmCiAgICAgICAgIG1vdXNlRG93bk1heVN0YXJ0U2VsZWN0KCkgJiYg
aW5uZXJOb2RlLT5yZW5kZXJlcigpLT5zaG91bGRTZWxlY3QoKSkgewotICAgICAgICBTZWxlY3Rp
b24gc2VsZWN0aW9uOworICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbjsKICAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvcyhpbm5lck5vZGUtPnJlbmRlcmVyKCktPnBvc2l0aW9u
Rm9yQ29vcmRpbmF0ZXMoZXZlbnQtPngoKSwgZXZlbnQtPnkoKSkpOwogICAgICAgICBpZiAocG9z
LmlzTm90TnVsbCgpKSB7CiAgICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKHBvcyk7CkBAIC00
NjYyLDcgKzQ2NjIsNyBAQCB2b2lkIEtIVE1MUGFydDo6aGFuZGxlTW91c2VQcmVzc0V2ZW50U2lu
CiAgICAgaWYgKG1vdXNlLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAgIGlmIChp
bm5lck5vZGUgJiYgaW5uZXJOb2RlLT5yZW5kZXJlcigpICYmCiAgICAgICAgICAgICBtb3VzZURv
d25NYXlTdGFydFNlbGVjdCgpICYmIGlubmVyTm9kZS0+cmVuZGVyZXIoKS0+c2hvdWxkU2VsZWN0
KCkpIHsKLSAgICAgICAgICAgIFNlbGVjdGlvbiBzZWw7CisgICAgICAgICAgICBTZWxlY3Rpb25D
b250cm9sbGVyIHNlbDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBz
ZWxlY3Rpb24gaWYgdGhlIFNoaWZ0IGtleSBpcyBkb3duLCB1bmxlc3MgdGhlIGNsaWNrIGlzIGlu
IGEgbGluay4KICAgICAgICAgICAgIGJvb2wgZXh0ZW5kU2VsZWN0aW9uID0gKG1vdXNlLT5zdGF0
ZSgpICYgU2hpZnRCdXR0b24pICYmIChldmVudC0+dXJsKCkuaXNOdWxsKCkpOwpAQCAtNDY5Nyw3
ICs0Njk3LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkLT5tX2JlZ2FuU2VsZWN0aW5nVGV4dCA9
IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNlbCA9IFNlbGVj
dGlvbih2aXNpYmxlUG9zKTsKKyAgICAgICAgICAgICAgICBzZWwgPSBTZWxlY3Rpb25Db250cm9s
bGVyKHZpc2libGVQb3MpOwogICAgICAgICAgICAgICAgIGQtPm1fc2VsZWN0aW9uR3JhbnVsYXJp
dHkgPSBDSEFSQUNURVI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTQ5MDMsNyAr
NDkwMyw3IEBAIHZvaWQgS0hUTUxQYXJ0OjpoYW5kbGVNb3VzZU1vdmVFdmVudFNlbGUKIAogICAg
IC8vIFJlc3RhcnQgdGhlIHNlbGVjdGlvbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBtb3VzZSBtb3Zl
LiBUaGlzIHdvcmsgaXMgdXN1YWxseQogICAgIC8vIGRvbmUgaW4ga2h0bWxNb3VzZVByZXNzRXZl
bnQsIGJ1dCBub3QgaWYgdGhlIG1vdXNlIHByZXNzIHdhcyBvbiBhbiBleGlzdGluZyBzZWxlY3Rp
b24uCi0gICAgU2VsZWN0aW9uIHNlbCA9IHNlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbkNvbnRy
b2xsZXIgc2VsID0gc2VsZWN0aW9uKCk7CiAgICAgc2VsLmNsZWFyTW9kaWZ5QmlhcygpOwogICAg
IGlmICghZC0+bV9iZWdhblNlbGVjdGluZ1RleHQpIHsKICAgICAgICAgZC0+bV9iZWdhblNlbGVj
dGluZ1RleHQgPSB0cnVlOwpAQCAtNDk4Miw3ICs0OTgyLDcgQEAgdm9pZCBLSFRNTFBhcnQ6Omto
dG1sTW91c2VSZWxlYXNlRXZlbnQoIAogICAgICAgICAgICAgJiYgZC0+bV9kcmFnU3RhcnRQb3Mu
eCgpID09IGV2ZW50LT5xbW91c2VFdmVudCgpLT54KCkKICAgICAgICAgICAgICYmIGQtPm1fZHJh
Z1N0YXJ0UG9zLnkoKSA9PSBldmVudC0+cW1vdXNlRXZlbnQoKS0+eSgpCiAgICAgICAgICAgICAm
JiBkLT5tX3NlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgU2VsZWN0aW9uIHNlbGVjdGlv
bjsKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb247CiAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gZXZlbnQtPmlubmVyTm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBub2Rl
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIG5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAg
IFZpc2libGVQb3NpdGlvbiBwb3MgPSBub2RlLT5yZW5kZXJlcigpLT5wb3NpdGlvbkZvckNvb3Jk
aW5hdGVzKGV2ZW50LT54KCksIGV2ZW50LT55KCkpOwpAQCAtNTE1NiwxNCArNTE1NiwxNCBAQCB2
b2lkIEtIVE1MUGFydDo6c2VsZWN0QWxsKCkKICAgICAgICAgcmV0dXJuOwogICAgIE5vZGVJbXBs
ICpkZSA9IGQtPm1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpbnQgbiA9IGRlID8gZGUt
PmNoaWxkTm9kZUNvdW50KCkgOiAwOwotICAgIFNlbGVjdGlvbiBzZWwgPSBTZWxlY3Rpb24oVmlz
aWJsZVBvc2l0aW9uKGRlLCAwLCBraHRtbDo6RE9XTlNUUkVBTSksIFZpc2libGVQb3NpdGlvbihk
ZSwgbiwga2h0bWw6OkRPV05TVFJFQU0pKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9
IFNlbGVjdGlvbkNvbnRyb2xsZXIoVmlzaWJsZVBvc2l0aW9uKGRlLCAwLCBraHRtbDo6RE9XTlNU
UkVBTSksIFZpc2libGVQb3NpdGlvbihkZSwgbiwga2h0bWw6OkRPV05TVFJFQU0pKTsKICAgICBp
ZiAoc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKHNlbCkpIHsKICAgICAgICAgc2V0U2VsZWN0aW9uKHNl
bCk7CiAgICAgfQogICAgIHNlbGVjdEZyYW1lRWxlbWVudEluUGFyZW50SWZGdWxseVNlbGVjdGVk
KCk7CiB9CiAKLWJvb2wgS0hUTUxQYXJ0OjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uICZuZXdzZWxlY3Rpb24pIGNvbnN0Citib29sIEtIVE1MUGFydDo6c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJm5ld3NlbGVjdGlvbikgY29uc3QK
IHsKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgcmV0dXJuIEtXUSh0aGlzKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKGQtPm1fc2VsZWN0aW9uLCBuZXdzZWxlY3Rpb24sIG5ld3NlbGVjdGlvbi5zdGFy
dEFmZmluaXR5KCksIGZhbHNlKTsKQEAgLTU2MDksMTQgKzU2MDksMTQgQEAgdm9pZCBLSFRNTFBh
cnQ6OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZQogdm9pZCBLSFRNTFBhcnQ6OmFwcGx5U3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
CiB7CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2Vs
ZWN0aW9uOjpOT05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6CiAg
ICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTZWxlY3Rpb246OkNBUkVUOiB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6
Q0FSRVQ6IHsKICAgICAgICAgICAgIGNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShzdHlsZSwgZWRp
dGluZ0FjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFNlbGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFO
R0U6CiAgICAgICAgICAgICBpZiAoeG1sRG9jSW1wbCgpICYmIHN0eWxlKSB7CiAgICAgICAgICAg
ICAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBBcHBseVN0eWxlQ29tbWFuZCh4bWxEb2NJbXBs
KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgY21kLmFwcGx5KCk7
CkBAIC01NjI4LDExICs1NjI4LDExIEBAIHZvaWQgS0hUTUxQYXJ0OjphcHBseVN0eWxlKENTU1N0
eWxlRGVjbGEKIHZvaWQgS0hUTUxQYXJ0OjphcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb25JbXBsICpzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewogICAgIHN3
aXRjaCAoc2VsZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9O
RToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpOT05FOgogICAgICAgICAgICAg
Ly8gZG8gbm90aGluZwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpDQVJFVDoKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAgICBjYXNlIFNl
bGVjdGlvbkNvbnRyb2xsZXI6OkNBUkVUOgorICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OlJBTkdFOgogICAgICAgICAgICAgaWYgKHhtbERvY0ltcGwoKSAmJiBzdHlsZSkgewogICAg
ICAgICAgICAgICAgIEVkaXRDb21tYW5kUHRyIGNtZChuZXcgQXBwbHlTdHlsZUNvbW1hbmQoeG1s
RG9jSW1wbCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNl
QmxvY2tQcm9wZXJ0aWVzKSk7CiAgICAgICAgICAgICAgICAgY21kLmFwcGx5KCk7CkBAIC01OTg4
LDkgKzU5ODgsOSBAQCB2b2lkIEtIVE1MUGFydDo6c2VsZWN0RnJhbWVFbGVtZW50SW5QYXJlCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGFmdGVyT3duZXJFbGVtZW50KFZpc2libGVQb3NpdGlvbihvd25l
ckVsZW1lbnRQYXJlbnQsIG93bmVyRWxlbWVudE5vZGVJbmRleCArIDEsIGtodG1sOjpWUF9VUFNU
UkVBTV9JRl9QT1NTSUJMRSkpOwogCiAgICAgLy8gRm9jdXMgb24gdGhlIHBhcmVudCBmcmFtZSwg
YW5kIHRoZW4gc2VsZWN0IGZyb20gYmVmb3JlIHRoaXMgZWxlbWVudCB0byBhZnRlci4KLSAgICBp
ZiAocGFyZW50LT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oU2VsZWN0aW9uKGJlZm9yZU93bmVyRWxl
bWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpKSkgeworICAgIGlmIChwYXJlbnQtPnNob3VsZENoYW5n
ZVNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJP
d25lckVsZW1lbnQpKSkgewogICAgICAgICBwYXJlbnRWaWV3LT5zZXRGb2N1cygpOwotICAgICAg
ICBwYXJlbnQtPnNldFNlbGVjdGlvbihTZWxlY3Rpb24oYmVmb3JlT3duZXJFbGVtZW50LCBhZnRl
ck93bmVyRWxlbWVudCkpOworICAgICAgICBwYXJlbnQtPnNldFNlbGVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyKGJlZm9yZU93bmVyRWxlbWVudCwgYWZ0ZXJPd25lckVsZW1lbnQpKTsKICAgICB9
CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xMzYKZGlmZiAtcCAtdSAtcjEuMTM2IFdlYkNvcmUva2h0bWwva2h0bWxfcGFydC5o
Ci0tLSBXZWJDb3JlL2todG1sL2todG1sX3BhcnQuaAkxNCBBdWcgMjAwNSAwOToxMjo0MyAtMDAw
MAkxLjEzNgorKysgV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgJMTIgU2VwIDIwMDUgMjE6NTE6
NTEgLTAwMDAKQEAgLTg1LDcgKzg1LDcgQEAgbmFtZXNwYWNlIGtodG1sCiAgIGNsYXNzIFJlbmRl
clBhcnQ7CiAgIGNsYXNzIFJlbmRlclBhcnRPYmplY3Q7CiAgIGNsYXNzIFJlbmRlcldpZGdldDsK
LSAgY2xhc3MgU2VsZWN0aW9uOworICBjbGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwogICBjbGFz
cyBYTUxUb2tlbml6ZXI7CiB9CiAKQEAgLTU5OSw3ICs1OTksNyBAQCBwdWJsaWM6CiAgIC8qKgog
ICAgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBIVE1MLgogICAgKi8KLSAgY29u
c3Qga2h0bWw6OlNlbGVjdGlvbiAmc2VsZWN0aW9uKCkgY29uc3Q7CisgIGNvbnN0IGtodG1sOjpT
ZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24oKSBjb25zdDsKIAogICAvKioKICAgICogUmV0
dXJucyB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIHNlbGVjdGlvbiAoY2hhcmFjdGVyLCB3b3JkLCBs
aW5lLCBwYXJhZ3JhcGgpLgpAQCAtNjE0LDMyICs2MTQsMzIgQEAgcHVibGljOgogICAvKioKICAg
ICogUmV0dXJucyB0aGUgZHJhZyBjYXJldCBvZiB0aGUgSFRNTC4KICAgICovCi0gIGNvbnN0IGto
dG1sOjpTZWxlY3Rpb24gJmRyYWdDYXJldCgpIGNvbnN0OworICBjb25zdCBraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlciAmZHJhZ0NhcmV0KCkgY29uc3Q7CiAKICAgLyoqCiAgICAqIFNldHMgdGhl
IGN1cnJlbnQgc2VsZWN0aW9uLgogICAgKi8KLSAgdm9pZCBzZXRTZWxlY3Rpb24oY29uc3Qga2h0
bWw6OlNlbGVjdGlvbiAmLCBib29sIGNsb3NlVHlwaW5nID0gdHJ1ZSwgYm9vbCBrZWVwVHlwaW5n
U3R5bGUgPSBmYWxzZSk7CisgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rp
b25Db250cm9sbGVyICYsIGJvb2wgY2xvc2VUeXBpbmcgPSB0cnVlLCBib29sIGtlZXBUeXBpbmdT
dHlsZSA9IGZhbHNlKTsKIAogICAvKioKICAgICogUmV0dXJucyB3aGV0aGVyIHNlbGVjdGlvbiBj
YW4gYmUgY2hhbmdlZC4KICAgICovCi0gIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0
IGtodG1sOjpTZWxlY3Rpb24gJikgY29uc3Q7CisgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0aW9u
KGNvbnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICYpIGNvbnN0OwogCiAgIC8qKgogICAg
KiBSZXR1cm5zIGEgbWFyaywgdG8gYmUgdXNlZCBhcyBlbWFjcyB1c2VzIGl0LgogICAgKi8KLSAg
Y29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmbWFyaygpIGNvbnN0OworICBjb25zdCBraHRtbDo6U2Vs
ZWN0aW9uQ29udHJvbGxlciAmbWFyaygpIGNvbnN0OwogCiAgIC8qKgogICAgKiBSZXR1cm5zIHRo
ZSBtYXJrLgogICAgKi8KLSAgdm9pZCBzZXRNYXJrKGNvbnN0IGtodG1sOjpTZWxlY3Rpb24gJik7
CisgIHZvaWQgc2V0TWFyayhjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKIAog
ICAvKioKICAgICogU2V0cyB0aGUgY3VycmVudCBkcmFnIGNhcnQuCiAgICAqLwotICB2b2lkIHNl
dERyYWdDYXJldChjb25zdCBraHRtbDo6U2VsZWN0aW9uICYpOworICB2b2lkIHNldERyYWdDYXJl
dChjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKICAgCiAgIC8qKgogICAgKiBU
cmFuc3Bvc2VzIGNoYXJhY3RlcnMgZWl0aGVyIHNpZGUgb2YgY2FyZXQgc2VsZWN0aW9uLgpAQCAt
MTM4OSw3ICsxMzg5LDcgQEAgcHJpdmF0ZToKIAogICBLSFRNTFBhcnRQcml2YXRlICpkOwogICBm
cmllbmQgY2xhc3MgS0hUTUxQYXJ0UHJpdmF0ZTsKLSAgZnJpZW5kIGNsYXNzIGtodG1sOjpTZWxl
Y3Rpb247CisgIGZyaWVuZCBjbGFzcyBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjsKIAogI2lm
IEFQUExFX0NIQU5HRVMKIHB1YmxpYzogIApJbmRleDogV2ViQ29yZS9raHRtbC9raHRtbHBhcnRf
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1scGFy
dF9wLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTcKZGlmZiAtcCAtdSAtcjEuNTcgV2ViQ29y
ZS9raHRtbC9raHRtbHBhcnRfcC5oCi0tLSBXZWJDb3JlL2todG1sL2todG1scGFydF9wLmgJMSBK
dW4gMjAwNSAyMzo0OTo0OSAtMDAwMAkxLjU3CisrKyBXZWJDb3JlL2todG1sL2todG1scGFydF9w
LmgJMTIgU2VwIDIwMDUgMjE6NTE6NTEgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRl
ICJlY21hL2tqc19wcm94eS5oIgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCiAjaW5j
bHVkZSAiZWRpdGluZy9lZGl0X2NvbW1hbmQuaCIKLSNpbmNsdWRlICJlZGl0aW5nL3NlbGVjdGlv
bi5oIgorI2luY2x1ZGUgImVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiBuYW1lc3Bh
Y2UgS0lPCiB7CkBAIC0zNjgsOSArMzY4LDkgQEAgcHVibGljOgogICBRU3RyaW5nIG1fb3ZlclVS
TFRhcmdldDsKICNlbmRpZgogCi0gIGtodG1sOjpTZWxlY3Rpb24gbV9zZWxlY3Rpb247Ci0gIGto
dG1sOjpTZWxlY3Rpb24gbV9kcmFnQ2FyZXQ7Ci0gIGtodG1sOjpTZWxlY3Rpb24gbV9tYXJrOwor
ICBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciBtX3NlbGVjdGlvbjsKKyAga2h0bWw6OlNlbGVj
dGlvbkNvbnRyb2xsZXIgbV9kcmFnQ2FyZXQ7CisgIGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVy
IG1fbWFyazsKICAgaW50IG1fY2FyZXRCbGlua1RpbWVyOwogCiAgIGJvb2wgbV9jYXJldFZpc2li
bGU6MTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE3OApkaWZmIC1wIC11IC1yMS4xNzggV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VjbWEva2pzX3dpbmRvdy5j
cHAJNSBTZXAgMjAwNSAyMzoxMDoxOCAtMDAwMAkxLjE3OAorKysgV2ViQ29yZS9raHRtbC9lY21h
L2tqc193aW5kb3cuY3BwCTEyIFNlcCAyMDA1IDIxOjUxOjUzIC0wMDAwCkBAIC01OSw3ICs1OSw3
IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJkb20vZG9tX25vZGUu
aCIKICNpbmNsdWRlICJlZGl0aW5nL2h0bWxlZGl0aW5nLmgiCi0jaW5jbHVkZSAiZWRpdGluZy9z
ZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2Vp
bXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCkBAIC0yNTgxLDExICsyNTgxLDEx
IEBAIFZhbHVlSW1wICpTZWxlY3Rpb246OmdldFZhbHVlUHJvcGVydHkoRXgKICAgICAgIHJldHVy
biBCb29sZWFuKCFtX3BhcnQtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSk7CiAgIGNhc2UgX1R5cGU6
IHsKICAgICAgIHN3aXRjaCAobV9wYXJ0LT5zZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICBj
YXNlIGtodG1sOjpTZWxlY3Rpb246Ok5PTkU6CisgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rpb25D
b250cm9sbGVyOjpOT05FOgogICAgICAgICAgIHJldHVybiBTdHJpbmcoIk5vbmUiKTsKLSAgICAg
IGNhc2Uga2h0bWw6OlNlbGVjdGlvbjo6Q0FSRVQ6CisgICAgICBjYXNlIGtodG1sOjpTZWxlY3Rp
b25Db250cm9sbGVyOjpDQVJFVDoKICAgICAgICAgICByZXR1cm4gU3RyaW5nKCJDYXJldCIpOwot
ICAgICAgY2FzZSBraHRtbDo6U2VsZWN0aW9uOjpSQU5HRToKKyAgICAgIGNhc2Uga2h0bWw6OlNl
bGVjdGlvbkNvbnRyb2xsZXI6OlJBTkdFOgogICAgICAgICAgIHJldHVybiBTdHJpbmcoIlJhbmdl
Iik7CiAgICAgICB9CiAgIH0KQEAgLTI2MjcsMTUgKzI2MjcsMTUgQEAgVmFsdWVJbXAgKlNlbGVj
dGlvbkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKAogICAgICAgICBzd2l0Y2ggKGlkKSB7CiAgICAgICAg
ICAgICBjYXNlIFNlbGVjdGlvbjo6Q29sbGFwc2U6CiAgICAgICAgICAgICAgICAgVHlwaW5nQ29t
bWFuZDo6Y2xvc2VUeXBpbmcocGFydC0+bGFzdEVkaXRDb21tYW5kKCkpOwotICAgICAgICAgICAg
ICAgIHBhcnQtPnNldFNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9uKFBvc2l0aW9uKHRvTm9kZShh
cmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJ
TklUWSkpOworICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVjdGlvbihraHRtbDo6U2VsZWN0
aW9uQ29udHJvbGxlcihQb3NpdGlvbih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIo
ZXhlYykpLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDb2xsYXBzZVRvRW5kOgogICAgICAg
ICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBhcnQtPmxhc3RFZGl0Q29tbWFu
ZCgpKTsKLSAgICAgICAgICAgICAgICBwYXJ0LT5zZXRTZWxlY3Rpb24oa2h0bWw6OlNlbGVjdGlv
bihwYXJ0LT5zZWxlY3Rpb24oKS5lbmQoKSwgcGFydC0+c2VsZWN0aW9uKCkuZW5kQWZmaW5pdHko
KSkpOworICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9u
Q29udHJvbGxlcihwYXJ0LT5zZWxlY3Rpb24oKS5lbmQoKSwgcGFydC0+c2VsZWN0aW9uKCkuZW5k
QWZmaW5pdHkoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBT
ZWxlY3Rpb246OkNvbGxhcHNlVG9TdGFydDoKICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5k
OjpjbG9zZVR5cGluZyhwYXJ0LT5sYXN0RWRpdENvbW1hbmQoKSk7Ci0gICAgICAgICAgICAgICAg
cGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpTZWxlY3Rpb24ocGFydC0+c2VsZWN0aW9uKCkuc3Rh
cnQoKSwgcGFydC0+c2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKSk7CisgICAgICAgICAgICAg
ICAgcGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyKHBhcnQtPnNl
bGVjdGlvbigpLnN0YXJ0KCksIHBhcnQtPnNlbGVjdGlvbigpLnN0YXJ0QWZmaW5pdHkoKSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb246OkVtcHR5
OgogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNsb3NlVHlwaW5nKHBhcnQtPmxhc3RF
ZGl0Q29tbWFuZCgpKTsKQEAgLTI2NDUsMjcgKzI2NDUsMjcgQEAgVmFsdWVJbXAgKlNlbGVjdGlv
bkZ1bmM6OmNhbGxBc0Z1bmN0aW9uKAogICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmNs
b3NlVHlwaW5nKHBhcnQtPmxhc3RFZGl0Q29tbWFuZCgpKTsKICAgICAgICAgICAgICAgICBQb3Np
dGlvbiBiYXNlKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSk7CiAgICAg
ICAgICAgICAgICAgUG9zaXRpb24gZXh0ZW50KHRvTm9kZShhcmdzWzJdKSwgYXJnc1szXS0+dG9J
bnQzMihleGVjKSk7Ci0gICAgICAgICAgICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKGtodG1sOjpT
ZWxlY3Rpb24oYmFzZSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZLCBleHRlbnQsIGtodG1s
OjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICAgICAgICAgIHBhcnQtPnNldFNlbGVj
dGlvbihraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcihiYXNlLCBraHRtbDo6U0VMX0RFRkFVTFRf
QUZGSU5JVFksIGV4dGVudCwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNlbGVjdGlv
bjo6U2V0UG9zaXRpb246CiAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Y2xvc2VUeXBp
bmcocGFydC0+bGFzdEVkaXRDb21tYW5kKCkpOwotICAgICAgICAgICAgICAgIHBhcnQtPnNldFNl
bGVjdGlvbihraHRtbDo6U2VsZWN0aW9uKFBvc2l0aW9uKHRvTm9kZShhcmdzWzBdKSwgYXJnc1sx
XS0+dG9JbnQzMihleGVjKSksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAg
ICAgICAgICAgIHBhcnQtPnNldFNlbGVjdGlvbihraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcihQ
b3NpdGlvbih0b05vZGUoYXJnc1swXSksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpLCBraHRtbDo6
U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uOjpNb2RpZnk6IHsKICAgICAgICAgICAgICAgICBUeXBpbmdDb21t
YW5kOjpjbG9zZVR5cGluZyhwYXJ0LT5sYXN0RWRpdENvbW1hbmQoKSk7Ci0gICAgICAgICAgICAg
ICAga2h0bWw6OlNlbGVjdGlvbiBzKHBhcnQtPnNlbGVjdGlvbigpKTsKLSAgICAgICAgICAgICAg
ICBraHRtbDo6U2VsZWN0aW9uOjpFQWx0ZXIgYWx0ZXIgPSBraHRtbDo6U2VsZWN0aW9uOjpNT1ZF
OworICAgICAgICAgICAgICAgIGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyIHMocGFydC0+c2Vs
ZWN0aW9uKCkpOworICAgICAgICAgICAgICAgIGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpF
QWx0ZXIgYWx0ZXIgPSBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRTsKICAgICAgICAg
ICAgICAgICBpZiAoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKSA9
PSAiZXh0ZW5kIikKLSAgICAgICAgICAgICAgICAgICAgYWx0ZXIgPSBraHRtbDo6U2VsZWN0aW9u
OjpFWFRFTkQ7CisgICAgICAgICAgICAgICAgICAgIGFsdGVyID0ga2h0bWw6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVYVEVORDsKICAgICAgICAgICAgICAgICBET01TdHJpbmcgZGlyZWN0aW9uU3Ry
aW5nID0gYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICAg
ICAgICAgICAgICBraHRtbDo6U2VsZWN0aW9uOjpFRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGtodG1s
OjpTZWxlY3Rpb246OkZPUldBUkQ7CisgICAgICAgICAgICAgICAga2h0bWw6OlNlbGVjdGlvbkNv
bnRyb2xsZXI6OkVEaXJlY3Rpb24gZGlyZWN0aW9uID0ga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkZPUldBUkQ7CiAgICAgICAgICAgICAgICAgaWYgKGRpcmVjdGlvblN0cmluZyA9PSAiYmFj
a3dhcmQiKQotICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBraHRtbDo6U2VsZWN0aW9u
OjpCQUNLV0FSRDsKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0ga2h0bWw6OlNlbGVj
dGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJEOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpcmVj
dGlvblN0cmluZyA9PSAibGVmdCIpCi0gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGto
dG1sOjpTZWxlY3Rpb246OkxFRlQ7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGto
dG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpMRUZUOwogICAgICAgICAgICAgICAgIGlmIChkaXJl
Y3Rpb25TdHJpbmcgPT0gInJpZ2h0IikKLSAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0g
a2h0bWw6OlNlbGVjdGlvbjo6UklHSFQ7CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9
IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVDsKICAgICAgICAgICAgICAgICBraHRt
bDo6RVRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IGtodG1sOjpDSEFSQUNURVI7CiAgICAg
ICAgICAgICAgICAgRE9NU3RyaW5nIGdyYW51bGFyaXR5U3RyaW5nID0gYXJnc1syXS0+dG9TdHJp
bmcoZXhlYykuZG9tU3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAgICAgICBpZiAoZ3JhbnVs
YXJpdHlTdHJpbmcgPT0gIndvcmQiKQpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5
X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTIKZGlmZiAtcCAtdSAtcjEuMTIgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29t
bWFuZC5jcHAJMiBTZXAgMjAwNSAxNjo0NTozOCAtMDAwMAkxLjEyCisrKyBXZWJDb3JlL2todG1s
L2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJMTIgU2VwIDIwMDUgMjE6NTE6NTMgLTAw
MDAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0
aXZlRm9uCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBBZGp1c3QgdG8gdGhlIHBvc2l0
aW9ucyB3ZSB3YW50IHRvIHVzZSBmb3IgYXBwbHlpbmcgc3R5bGUuCi0gICAgU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2Vs
ZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgUG9zaXRpb24gc3RhcnQoc2VsZWN0aW9u
LnN0YXJ0KCkuZG93bnN0cmVhbSgpKTsKICAgICBQb3NpdGlvbiBlbmQoc2VsZWN0aW9uLmVuZCgp
LnVwc3RyZWFtKCkpOwogICAgIGlmIChSYW5nZUltcGw6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhl
bmQsIHN0YXJ0KSA8IDApIHsKQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgCiAgICAgQVNTRVJUKHMubm9kZSgpLT5pbkRvY3Vt
ZW50KCkpOwogICAgIEFTU0VSVChlLm5vZGUoKS0+aW5Eb2N1bWVudCgpKTsKLSAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uKHMsIFZQX0RFRkFVTFRfQUZGSU5JVFksIGUsIFZQX0RFRkFV
TFRfQUZGSU5JVFkpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxl
cihzLCBWUF9ERUZBVUxUX0FGRklOSVRZLCBlLCBWUF9ERUZBVUxUX0FGRklOSVRZKSk7CiB9CiAK
IGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om5vZGVGdWxseVNlbGVjdGVkKE5vZGVJbXBsICpub2Rl
LCBjb25zdCBQb3NpdGlvbiAmc3RhcnQsIGNvbnN0IFBvc2l0aW9uICZlbmQpIGNvbnN0CkBAIC05
MzYsNyArOTM2LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydAog
ICAgICAgICBsb25nIGVuZE9mZnNldEFkanVzdG1lbnQgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5v
ZGUoKSA/IHN0YXJ0Lm9mZnNldCgpIDogMDsKICAgICAgICAgVGV4dEltcGwgKnRleHQgPSBzdGF0
aWNfY2FzdDxUZXh0SW1wbCAqPihzdGFydC5ub2RlKCkpOwogICAgICAgICBzcGxpdFRleHROb2Rl
KHRleHQsIHN0YXJ0Lm9mZnNldCgpKTsKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVj
dGlvbihQb3NpdGlvbihzdGFydC5ub2RlKCksIDApLCBTRUxfREVGQVVMVF9BRkZJTklUWSwgUG9z
aXRpb24oZW5kLm5vZGUoKSwgZW5kLm9mZnNldCgpIC0gZW5kT2Zmc2V0QWRqdXN0bWVudCksIFNF
TF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rp
b25Db250cm9sbGVyKFBvc2l0aW9uKHN0YXJ0Lm5vZGUoKSwgMCksIFNFTF9ERUZBVUxUX0FGRklO
SVRZLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQub2Zmc2V0KCkgLSBlbmRPZmZzZXRBZGp1c3Rt
ZW50KSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKQEAgLTk1Miw3ICs5NTIsNyBAQCBib29sIEFwcGx5U3R5bGVD
b21tYW5kOjpzcGxpdFRleHRBdEVuZElmCiAgICAgICAgIEFTU0VSVChwcmV2Tm9kZSk7CiAgICAg
ICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUoKSA/IHBy
ZXZOb2RlIDogc3RhcnQubm9kZSgpOwogICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsKLSAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihzdGFydE5vZGUsIHN0YXJ0
Lm9mZnNldCgpKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFksIFBvc2l0aW9uKHByZXZOb2RlLCBwcmV2
Tm9kZS0+Y2FyZXRNYXhPZmZzZXQoKSksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgICAg
IHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0aW9uKHN0YXJ0Tm9k
ZSwgc3RhcnQub2Zmc2V0KCkpLCBTRUxfREVGQVVMVF9BRkZJTklUWSwgUG9zaXRpb24ocHJldk5v
ZGUsIHByZXZOb2RlLT5jYXJldE1heE9mZnNldCgpKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTk2NSw3
ICs5NjUsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAg
ICAgIFRleHRJbXBsICp0ZXh0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4oc3RhcnQubm9kZSgp
KTsKICAgICAgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KHRleHQsIHN0YXJ0Lm9m
ZnNldCgpKTsKIAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9u
KHN0YXJ0Lm5vZGUoKS0+cGFyZW50Tm9kZSgpLCBzdGFydC5ub2RlKCktPm5vZGVJbmRleCgpKSwg
U0VMX0RFRkFVTFRfQUZGSU5JVFksIFBvc2l0aW9uKGVuZC5ub2RlKCksIGVuZC5vZmZzZXQoKSAt
IGVuZE9mZnNldEFkanVzdG1lbnQpLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOworICAgICAgICBz
ZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcihQb3NpdGlvbihzdGFydC5ub2Rl
KCktPnBhcmVudE5vZGUoKSwgc3RhcnQubm9kZSgpLT5ub2RlSW5kZXgoKSksIFNFTF9ERUZBVUxU
X0FGRklOSVRZLCBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQub2Zmc2V0KCkgLSBlbmRPZmZzZXRB
ZGp1c3RtZW50KSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTk4MSw3ICs5ODEsNyBAQCBib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpzcGxpdFRleHRFbGVtZW50CiAgICAgICAgIEFTU0VSVChwcmV2Tm9kZSk7
CiAgICAgICAgIE5vZGVJbXBsICpzdGFydE5vZGUgPSBzdGFydC5ub2RlKCkgPT0gZW5kLm5vZGUo
KSA/IHByZXZOb2RlIDogc3RhcnQubm9kZSgpOwogICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsK
LSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihzdGFydE5vZGUs
IHN0YXJ0Lm9mZnNldCgpKSwgU0VMX0RFRkFVTFRfQUZGSU5JVFksIFBvc2l0aW9uKHByZXZOb2Rl
LT5wYXJlbnQoKSwgcHJldk5vZGUtPm5vZGVJbmRleCgpICsgMSksIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7CisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKFBv
c2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQub2Zmc2V0KCkpLCBTRUxfREVGQVVMVF9BRkZJTklUWSwg
UG9zaXRpb24ocHJldk5vZGUtPnBhcmVudCgpLCBwcmV2Tm9kZS0+bm9kZUluZGV4KCkgKyAxKSwg
U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTEwNTYsNyArMTA1Niw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1h
bmQ6Om1lcmdlU3RhcnRXaXRoUHIKICAgICAgICAgbG9uZyBzdGFydE9mZnNldEFkanVzdG1lbnQg
PSBzdGFydENoaWxkLT5ub2RlSW5kZXgoKTsKICAgICAgICAgbG9uZyBlbmRPZmZzZXRBZGp1c3Rt
ZW50ID0gc3RhcnROb2RlID09IGVuZC5ub2RlKCkgPyBzdGFydE9mZnNldEFkanVzdG1lbnQgOiAw
OwogCi0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24oc3RhcnRO
b2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQpLCBTRUxfREVGQVVMVF9BRkZJTklUWSwKKyAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24oc3RhcnRO
b2RlLCBzdGFydE9mZnNldEFkanVzdG1lbnQpLCBTRUxfREVGQVVMVF9BRkZJTklUWSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvbihlbmQubm9kZSgpLCBlbmQu
b2Zmc2V0KCkgKyBlbmRPZmZzZXRBZGp1c3RtZW50KSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsg
CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCBib29sIEFwcGx5
U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAKICAgICAgICAgaW50IGVuZE9mZnNldCA9
IG5leHRDaGlsZCA/IG5leHRDaGlsZC0+bm9kZUluZGV4KCkgOiBuZXh0RWxlbWVudC0+Y2hpbGRO
b2RlcygpLT5sZW5ndGgoKTsKIAotICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9u
KFBvc2l0aW9uKHN0YXJ0Tm9kZSwgc3RhcnQub2Zmc2V0KCkpLCBTRUxfREVGQVVMVF9BRkZJTklU
WSwgCisgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKFBvc2l0
aW9uKHN0YXJ0Tm9kZSwgc3RhcnQub2Zmc2V0KCkpLCBTRUxfREVGQVVMVF9BRkZJTklUWSwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb24obmV4dEVsZW1lbnQs
IGVuZE9mZnNldCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTEyODgsNyArMTI4OCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6Ompv
aW5DaGlsZFRleHROb2QKICAgICAgICAgfQogICAgIH0KIAotICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb24obmV3U3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBuZXdFbmQsIFNFTF9E
RUZBVUxUX0FGRklOSVRZKSk7CisgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRy
b2xsZXIobmV3U3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBuZXdFbmQsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGtodG1sCkluZGV4OiBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29t
bWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdlYkNv
cmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNSBBdWcgMjAwNSAy
MzoxMzo0MyAtMDAwMAkxLjUKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwCTEyIFNlcCAyMDA1IDIxOjUxOjUzIC0wMDAwCkBAIC02Miw3ICs2Miw3
IEBAIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6On5CcmVha0Jsb2NrcXVvdGUKIAogdm9pZCBCcmVh
a0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9u
ID0gZW5kaW5nU2VsZWN0aW9uKCk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24g
PSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2Vk
aXRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMApkaWZmIC1wIC11IC1yMS4xMCBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRl
X2VkaXRfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRp
dF9jb21tYW5kLmNwcAkyOSBBdWcgMjAwNSAxODowMDo0MyAtMDAwMAkxLjEwCisrKyBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMTIgU2VwIDIwMDUgMjE6
NTE6NTQgLTAwMDAKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpkZWxldGVTZWxlY3RpCiAgICAgfQogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpk
ZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzZWxlY3Rpb24sIGJvb2wgc21hcnREZWxl
dGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRlbGV0ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24s
IGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkKIHsKICAgICBp
ZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoZG9jdW1lbnQoKSwgc2VsZWN0aW9uLCBzbWFydERlbGV0
ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkpOwpAQCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWIKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZSgpCiB7Ci0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uID0g
ZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKSB7
CiAgICAgICAgIEVkaXRDb21tYW5kUHRyIHN0YXJ0Q21kKG5ldyBSZWJhbGFuY2VXaGl0ZXNwYWNl
Q29tbWFuZChkb2N1bWVudCgpLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKSk7CiAgICAgICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKHN0YXJ0Q21kKTsKSW5kZXg6IFdlYkNvcmUva2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC1wIC11IC1yMS4yIFdlYkNvcmUva2h0bWwvZWRp
dGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmgKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9j
b21wb3NpdGVfZWRpdF9jb21tYW5kLmgJMTggSnVsIDIwMDUgMjE6NDQ6MTcgLTAwMDAJMS4yCisr
KyBXZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5oCTEyIFNlcCAy
MDA1IDIxOjUxOjU0IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IGFwcGx5U3R5bGUoRE9NOjpDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbj1FZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcyk7CiAgICAgdm9pZCBk
ZWxldGVLZXlQcmVzc2VkKCk7CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERl
bGV0ZT1mYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUpOwotICAgIHZvaWQg
ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmc2VsZWN0aW9uLCBib29sIHNtYXJ0RGVs
ZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSk7CisgICAgdm9pZCBk
ZWxldGVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAmc2VsZWN0aW9uLCBib29s
IHNtYXJ0RGVsZXRlPWZhbHNlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGU9dHJ1ZSk7CiAg
ICAgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoRE9NOjpUZXh0SW1wbCAqbm9kZSwgbG9uZyBvZmZz
ZXQsIGxvbmcgY291bnQpOwogICAgIHZvaWQgaW5wdXRUZXh0KGNvbnN0IERPTTo6RE9NU3RyaW5n
ICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCA9IGZhbHNlKTsKICAgICB2b2lkIGluc2Vy
dE5vZGVBZnRlcihET006Ok5vZGVJbXBsICppbnNlcnRDaGlsZCwgRE9NOjpOb2RlSW1wbCAqcmVm
Q2hpbGQpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjE2CmRpZmYgLXAgLXUgLXIxLjE2IFdlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlv
bl9jb21tYW5kLmNwcAkyNSBBdWcgMjAwNSAyMzoxMzo0NCAtMDAwMAkxLjE2CisrKyBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxMiBTZXAgMjAwNSAy
MTo1MTo1NCAtMDAwMApAQCAtMTM1LDcgKzEzNSw3IEBAIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OkRlbGV0ZVNlbGVjdGlvbkMKIHsKIH0KIAotRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZChEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBTZWxlY3Rpb24g
JnNlbGVjdGlvbiwgYm9vbCBzbWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRl
KQorRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZChEb2N1bWVu
dEltcGwgKmRvY3VtZW50LCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxlY3Rpb24sIGJv
b2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSkKICAgICA6IENvbXBv
c2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KSwgCiAgICAgICBtX2hhc1NlbGVjdGlvblRvRGVsZXRl
KHRydWUpLCAKICAgICAgIG1fc21hcnREZWxldGUoc21hcnREZWxldGUpLCAKQEAgLTY3NSw3ICs2
NzUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0ZVR5CiAKICAgICAg
ICAgUG9zaXRpb24gcGFzdFBsYWNlaG9sZGVyKGluc2VydGVkUGxhY2Vob2xkZXIsIDEpOwogCi0g
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24obV9lbmRpbmdQb3NpdGlvbiwgbV9z
ZWxlY3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpLCBwYXN0UGxhY2Vob2xkZXIsIERPV05TVFJF
QU0pKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIobV9l
bmRpbmdQb3NpdGlvbiwgbV9zZWxlY3Rpb25Ub0RlbGV0ZS5lbmRBZmZpbml0eSgpLCBwYXN0UGxh
Y2Vob2xkZXIsIERPV05TVFJFQU0pKTsKIAogICAgICAgICBhcHBseVN0eWxlKG1fdHlwaW5nU3R5
bGUsIEVkaXRBY3Rpb25VbnNwZWNpZmllZCk7CiAKQEAgLTc2MSw3ICs3NjEsNyBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChoYW5kbGVTcGVjaWFsQ2Fz
ZUJSRGVsZXRlKCkpIHsKICAgICAgICAgY2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZShm
YWxzZSk7CiAgICAgICAgIGRlYnVnUG9zaXRpb24oImVuZGluZ1Bvc2l0aW9uICAgIiwgbV9lbmRp
bmdQb3NpdGlvbik7Ci0gICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24obV9lbmRp
bmdQb3NpdGlvbiwgYWZmaW5pdHkpKTsKKyAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVj
dGlvbkNvbnRyb2xsZXIobV9lbmRpbmdQb3NpdGlvbiwgYWZmaW5pdHkpKTsKICAgICAgICAgY2xl
YXJUcmFuc2llbnRTdGF0ZSgpOwogICAgICAgICByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmRvQXBwbHkoKQogICAgIGNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUoYWRkZWRQ
bGFjZWhvbGRlcik7CiAKICAgICBkZWJ1Z1Bvc2l0aW9uKCJlbmRpbmdQb3NpdGlvbiAgICIsIG1f
ZW5kaW5nUG9zaXRpb24pOwotICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24obV9lbmRp
bmdQb3NpdGlvbiwgYWZmaW5pdHkpKTsKKyAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9u
Q29udHJvbGxlcihtX2VuZGluZ1Bvc2l0aW9uLCBhZmZpbml0eSkpOwogICAgIGNsZWFyVHJhbnNp
ZW50U3RhdGUoKTsKICAgICByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7CiB9CkluZGV4OiBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2Nv
bW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXAgLXUgLXIxLjQgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5oCi0tLSBXZWJDb3JlL2to
dG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmgJMjkgSnVsIDIwMDUgMjI6NTA6
NDggLTAwMDAJMS40CisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmgJMTIgU2VwIDIwMDUgMjE6NTE6NTQgLTAwMDAKQEAgLTM0LDcgKzM0LDcgQEAgY2xh
c3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDbwogeyAKIHB1YmxpYzoKICAgICBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kKERPTTo6RG9jdW1lbnRJbXBsICpkb2N1bWVudCwgYm9vbCBz
bWFydERlbGV0ZT1mYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUpOwotICAg
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoRE9NOjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25z
dCBTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm9vbCBzbWFydERlbGV0ZT1mYWxzZSwgYm9vbCBtZXJn
ZUJsb2Nrc0FmdGVyRGVsZXRlPXRydWUpOworICAgIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQoRE9N
OjpEb2N1bWVudEltcGwgKmRvY3VtZW50LCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzZWxl
Y3Rpb24sIGJvb2wgc21hcnREZWxldGU9ZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZT10cnVlKTsKIAkKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3Q7CkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX3RyYWlsaW5nV2hpdGVzcGFjZVZhbGlkOwogCiAgICAgLy8gVGhpcyBkYXRh
IGlzIHRyYW5zaWVudCBhbmQgc2hvdWxkIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG9B
cHBseSBmdW5jdGlvbi4KLSAgICBTZWxlY3Rpb24gbV9zZWxlY3Rpb25Ub0RlbGV0ZTsKKyAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIG1fc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgRE9NOjpQb3NpdGlv
biBtX3Vwc3RyZWFtU3RhcnQ7CiAgICAgRE9NOjpQb3NpdGlvbiBtX2Rvd25zdHJlYW1TdGFydDsK
ICAgICBET006OlBvc2l0aW9uIG1fdXBzdHJlYW1FbmQ7CkluZGV4OiBXZWJDb3JlL2todG1sL2Vk
aXRpbmcvZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNgpkaWZmIC1wIC11IC1yMS42IFdlYkNvcmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQu
Y3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmNwcAkyOSBKdWwgMjAw
NSAyMzo0Mjo0NSAtMDAwMAkxLjYKKysrIFdlYkNvcmUva2h0bWwvZWRpdGluZy9lZGl0X2NvbW1h
bmQuY3BwCTEyIFNlcCAyMDA1IDIxOjUxOjU0IC0wMDAwCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImVkaXRfY29tbWFuZC5oIgotI2luY2x1ZGUgInNlbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIApAQCAtMTI0LDE5ICsxMjQsMTkgQEAgRG9jdW1lbnRJ
bXBsICogY29uc3QgRWRpdENvbW1hbmRQdHI6OmRvYwogICAgIHJldHVybiBnZXQoKS0+ZG9jdW1l
bnQoKTsKIH0KIAotU2VsZWN0aW9uIEVkaXRDb21tYW5kUHRyOjpzdGFydGluZ1NlbGVjdGlvbigp
IGNvbnN0CitTZWxlY3Rpb25Db250cm9sbGVyIEVkaXRDb21tYW5kUHRyOjpzdGFydGluZ1NlbGVj
dGlvbigpIGNvbnN0CiB7Ci0gICAgSUZfSU1QTF9OVUxMX1JFVFVSTl9BUkcoU2VsZWN0aW9uKCkp
OworICAgIElGX0lNUExfTlVMTF9SRVRVUk5fQVJHKFNlbGVjdGlvbkNvbnRyb2xsZXIoKSk7CiAg
ICAgcmV0dXJuIGdldCgpLT5zdGFydGluZ1NlbGVjdGlvbigpOwogfQogCi1TZWxlY3Rpb24gRWRp
dENvbW1hbmRQdHI6OmVuZGluZ1NlbGVjdGlvbigpIGNvbnN0CitTZWxlY3Rpb25Db250cm9sbGVy
IEVkaXRDb21tYW5kUHRyOjplbmRpbmdTZWxlY3Rpb24oKSBjb25zdAogewotICAgIElGX0lNUExf
TlVMTF9SRVRVUk5fQVJHKFNlbGVjdGlvbigpKTsKKyAgICBJRl9JTVBMX05VTExfUkVUVVJOX0FS
RyhTZWxlY3Rpb25Db250cm9sbGVyKCkpOwogICAgIHJldHVybiBnZXQoKS0+ZW5kaW5nU2VsZWN0
aW9uKCk7CiB9CiAKLXZvaWQgRWRpdENvbW1hbmRQdHI6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNv
bnN0IFNlbGVjdGlvbiAmcykgY29uc3QKK3ZvaWQgRWRpdENvbW1hbmRQdHI6OnNldFN0YXJ0aW5n
U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMpIGNvbnN0CiB7CiAgICAgSUZf
SU1QTF9OVUxMX1JFVFVSTjsKICAgICBnZXQoKS0+c2V0U3RhcnRpbmdTZWxlY3Rpb24ocyk7CkBA
IC0xNTEsMTEgKzE1MSwxMSBAQCB2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGluZ1NlbGVj
dGlvCiB2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBQb3Np
dGlvbiAmcCwgRUFmZmluaXR5IGFmZmluaXR5KSBjb25zdAogewogICAgIElGX0lNUExfTlVMTF9S
RVRVUk47Ci0gICAgU2VsZWN0aW9uIHMgPSBTZWxlY3Rpb24ocCwgYWZmaW5pdHkpOworICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocCwgYWZmaW5pdHkpOwog
ICAgIGdldCgpLT5zZXRTdGFydGluZ1NlbGVjdGlvbihzKTsKIH0KIAotdm9pZCBFZGl0Q29tbWFu
ZFB0cjo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmcykgY29uc3QKK3ZvaWQg
RWRpdENvbW1hbmRQdHI6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9s
bGVyICZzKSBjb25zdAogewogICAgIElGX0lNUExfTlVMTF9SRVRVUk47CiAgICAgZ2V0KCktPnNl
dEVuZGluZ1NlbGVjdGlvbihzKTsKQEAgLTE3MCw3ICsxNzAsNyBAQCB2b2lkIEVkaXRDb21tYW5k
UHRyOjpzZXRFbmRpbmdTZWxlY3Rpb24oCiB2b2lkIEVkaXRDb21tYW5kUHRyOjpzZXRFbmRpbmdT
ZWxlY3Rpb24oY29uc3QgUG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3QKIHsK
ICAgICBJRl9JTVBMX05VTExfUkVUVVJOOwotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAs
IGFmZmluaXR5KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBTZWxlY3Rpb25Db250cm9s
bGVyKHAsIGFmZmluaXR5KTsKICAgICBnZXQoKS0+c2V0RW5kaW5nU2VsZWN0aW9uKHMpOwogfQog
CkBAIC0yMTMsNyArMjEzLDcgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50SW1w
bCAqZAogICAgIG1fc3RhcnRpbmdTZWxlY3Rpb24gPSBtX2RvY3VtZW50LT5wYXJ0KCktPnNlbGVj
dGlvbigpOwogICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gbV9zdGFydGluZ1NlbGVjdGlvbjsKIAot
ICAgIG1fZG9jdW1lbnQtPnBhcnQoKS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbigpLCBmYWxzZSwg
dHJ1ZSk7CisgICAgbV9kb2N1bWVudC0+cGFydCgpLT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uQ29u
dHJvbGxlcigpLCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIEVkaXRDb21tYW5kOjp+RWRpdENvbW1hbmQo
KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnVuYXBwbHkoKQogICAgIEtI
VE1MUGFydCAqcGFydCA9IG1fZG9jdW1lbnQtPnBhcnQoKTsKIAogICAgIGlmICh0b3BMZXZlbCkg
ewotICAgICAgICBwYXJ0LT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKCksIGZhbHNlLCB0cnVlKTsK
KyAgICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoKSwgZmFsc2Us
IHRydWUpOwogICAgIH0KICAgICBBU1NFUlQocGFydC0+c2VsZWN0aW9uKCkuaXNOb25lKCkpOwog
ICAgIApAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnJlYXBwbHkoKQogICAg
IEtIVE1MUGFydCAqcGFydCA9IG1fZG9jdW1lbnQtPnBhcnQoKTsKIAogICAgIGlmICh0b3BMZXZl
bCkgewotICAgICAgICBwYXJ0LT5zZXRTZWxlY3Rpb24oU2VsZWN0aW9uKCksIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgcGFydC0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoKSwgZmFs
c2UsIHRydWUpOwogICAgIH0KICAgICBBU1NFUlQocGFydC0+c2VsZWN0aW9uKCkuaXNOb25lKCkp
OwogICAgIApAQCAtMzEyLDcgKzMxMiw3IEBAIEVkaXRBY3Rpb24gRWRpdENvbW1hbmQ6OmVkaXRp
bmdBY3Rpb24oKSAKICAgICByZXR1cm4gRWRpdEFjdGlvblVuc3BlY2lmaWVkOwogfQogCi12b2lk
IEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpCit2
b2lkIEVkaXRDb21tYW5kOjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250
cm9sbGVyICZzKQogewogICAgIGZvciAoRWRpdENvbW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21k
ID0gY21kLT5tX3BhcmVudCkKICAgICAgICAgY21kLT5tX3N0YXJ0aW5nU2VsZWN0aW9uID0gczsK
QEAgLTMyMCwxOSArMzIwLDE5IEBAIHZvaWQgRWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0
aW9uKGMKIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwKQogewotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHApOworICAg
IFNlbGVjdGlvbkNvbnRyb2xsZXIgcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocCk7CiAgICAgZm9y
IChFZGl0Q29tbWFuZCAqY21kID0gdGhpczsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQogICAg
ICAgICBjbWQtPm1fc3RhcnRpbmdTZWxlY3Rpb24gPSBzOwogfQogCiB2b2lkIEVkaXRDb21tYW5k
OjpzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBQb3NpdGlvbiAmcCwgRUFmZmluaXR5IGFmZmlu
aXR5KQogewotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHAsIGFmZmluaXR5KTsKKyAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIHMgPSBTZWxlY3Rpb25Db250cm9sbGVyKHAsIGFmZmluaXR5KTsK
ICAgICBmb3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+bV9wYXJl
bnQpCiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1NlbGVjdGlvbiA9IHM7CiB9CiAKLXZvaWQgRWRp
dENvbW1hbmQ6OnNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24gJnMpCit2b2lkIEVk
aXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciAm
cykKIHsKICAgICBmb3IgKEVkaXRDb21tYW5kICpjbWQgPSB0aGlzOyBjbWQ7IGNtZCA9IGNtZC0+
bV9wYXJlbnQpCiAgICAgICAgIGNtZC0+bV9lbmRpbmdTZWxlY3Rpb24gPSBzOwpAQCAtMzQwLDE0
ICszNDAsMTQgQEAgdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2VsZWN0aW9uKGNvbgogCiB2
b2lkIEVkaXRDb21tYW5kOjpzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9u
ICZwKQogewotICAgIFNlbGVjdGlvbiBzID0gU2VsZWN0aW9uKHApOworICAgIFNlbGVjdGlvbkNv
bnRyb2xsZXIgcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocCk7CiAgICAgZm9yIChFZGl0Q29tbWFu
ZCAqY21kID0gdGhpczsgY21kOyBjbWQgPSBjbWQtPm1fcGFyZW50KQogICAgICAgICBjbWQtPm1f
ZW5kaW5nU2VsZWN0aW9uID0gczsKIH0KIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0RW5kaW5nU2Vs
ZWN0aW9uKGNvbnN0IFBvc2l0aW9uICZwLCBFQWZmaW5pdHkgYWZmaW5pdHkpCiB7Ci0gICAgU2Vs
ZWN0aW9uIHMgPSBTZWxlY3Rpb24ocCwgYWZmaW5pdHkpOworICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgcyA9IFNlbGVjdGlvbkNvbnRyb2xsZXIocCwgYWZmaW5pdHkpOwogICAgIGZvciAoRWRpdENv
bW1hbmQgKmNtZCA9IHRoaXM7IGNtZDsgY21kID0gY21kLT5tX3BhcmVudCkKICAgICAgICAgY21k
LT5tX2VuZGluZ1NlbGVjdGlvbiA9IHM7CiB9CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcv
ZWRpdF9jb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9lZGl0X2NvbW1hbmQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXAgLXUgLXIxLjIgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2VkaXRfY29tbWFuZC5oCi0tLSBXZWJD
b3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmgJMTIgTWF5IDIwMDUgMDQ6MDA6MTkgLTAw
MDAJMS4yCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvZWRpdF9jb21tYW5kLmgJMTIgU2VwIDIw
MDUgMjE6NTE6NTQgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIm1pc2Mvc2hh
cmVkLmgiCiAjaW5jbHVkZSAiZWRpdF9hY3Rpb25zLmgiCi0jaW5jbHVkZSAic2VsZWN0aW9uLmgi
CisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogCiBuYW1lc3BhY2UgRE9NIHsKICAg
ICBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC02NCwxOCArNjQsMTgg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBET006OkRvY3VtZW50SW1wbCAqIGNvbnN0IGRvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudDsgfQogCi0gICAgU2VsZWN0aW9uIHN0YXJ0
aW5nU2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1NlbGVjdGlvbjsgfQotICAg
IFNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1NlbGVj
dGlvbjsgfQorICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc3RhcnRpbmdTZWxlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0aW5nU2VsZWN0aW9uOyB9CisgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZGluZ1NlbGVjdGlvbjsgfQog
CiAgICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb25OZWVkc0xheW91dChib29sIGZsYWc9dHJ1ZSkg
eyBtX2VuZGluZ1NlbGVjdGlvbi5zZXROZWVkc0xheW91dChmbGFnKTsgfQogICAgICAgICAKICAg
ICBFQ29tbWFuZFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIHZv
aWQgc2V0U3RhdGUoRUNvbW1hbmRTdGF0ZSBzdGF0ZSkgeyBtX3N0YXRlID0gc3RhdGU7IH0KIAot
ICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKTsKKyAgICB2
b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXIgJnMpOwog
ICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKTsK
ICAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IERPTTo6UG9zaXRpb24gJnAsIEVB
ZmZpbml0eSBhZmZpbml0eSk7Ci0gICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uICZzKTsKKyAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25D
b250cm9sbGVyICZzKTsKICAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxl
UG9zaXRpb24gJnApOwogICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IERPTTo6UG9z
aXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSk7CiAKQEAgLTk0LDggKzk0LDggQEAgcHJpdmF0
ZToKIAogICAgIERPTTo6RG9jdW1lbnRJbXBsICptX2RvY3VtZW50OwogICAgIEVDb21tYW5kU3Rh
dGUgbV9zdGF0ZTsKLSAgICBTZWxlY3Rpb24gbV9zdGFydGluZ1NlbGVjdGlvbjsKLSAgICBTZWxl
Y3Rpb24gbV9lbmRpbmdTZWxlY3Rpb247CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBtX3N0YXJ0
aW5nU2VsZWN0aW9uOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgbV9lbmRpbmdTZWxlY3Rpb247
CiAgICAgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKm1fdHlwaW5nU3R5bGU7
CiAgICAgRWRpdENvbW1hbmQgKm1fcGFyZW50OwogfTsKQEAgLTEyMCwxMyArMTIwLDEzIEBAIHB1
YmxpYzoKIAogICAgIERPTTo6RG9jdW1lbnRJbXBsICogY29uc3QgZG9jdW1lbnQoKSBjb25zdDsK
IAotICAgIFNlbGVjdGlvbiBzdGFydGluZ1NlbGVjdGlvbigpIGNvbnN0OwotICAgIFNlbGVjdGlv
biBlbmRpbmdTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHN0YXJ0
aW5nU2VsZWN0aW9uKCkgY29uc3Q7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBlbmRpbmdTZWxl
Y3Rpb24oKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgU2Vs
ZWN0aW9uICZzKSBjb25zdDsKKyAgICB2b2lkIHNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXIgJnMpIGNvbnN0OwogICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwKSBjb25zdDsKICAgICB2b2lkIHNldFN0YXJ0aW5n
U2VsZWN0aW9uKGNvbnN0IERPTTo6UG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRFbmRpbmdTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZzKSBjb25z
dDsKKyAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVy
ICZzKSBjb25zdDsKICAgICB2b2lkIHNldEVuZGluZ1NlbGVjdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24gJnApIGNvbnN0OwogICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IERPTTo6
UG9zaXRpb24gJnAsIEVBZmZpbml0eSBhZmZpbml0eSkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMTAKZGlmZiAtcCAtdSAtcjEuMTEwIFdlYkNvcmUva2h0bWwvZWRpdGluZy9odG1sZWRp
dGluZy5oCi0tLSBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAk1IEF1ZyAyMDA1
IDE4OjIyOjQzIC0wMDAwCTEuMTEwCisrKyBXZWJDb3JlL2todG1sL2VkaXRpbmcvaHRtbGVkaXRp
bmcuaAkxMiBTZXAgMjAwNSAyMTo1MTo1NSAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2luY2x1
ZGUgInFtYXAuaCIKICNpbmNsdWRlICJxcHRybGlzdC5oIgogI2luY2x1ZGUgInF2YWx1ZWxpc3Qu
aCIKLSNpbmNsdWRlICJzZWxlY3Rpb24uaCIKICNpbmNsdWRlICJzaGFyZWQuaCIKIAogI2RlZmlu
ZSBOT05fQlJFQUtJTkdfU1BBQ0UgMHhhMApJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2lu
c2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IFdlYkNvcmUva2h0bWwvZWRp
dGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTI1IEF1ZyAyMDA1IDIzOjEzOjQ0IC0w
MDAwCTEuNQorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1h
bmQuY3BwCTEyIFNlcCAyMDA1IDIxOjUxOjU1IC0wMDAwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQg
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6aW5zZXJ0Tm9kZUIKIHZvaWQgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgZGVsZXRlU2VsZWN0aW9uKCk7Ci0gICAgU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAKICAgICBFbGVtZW50SW1wbCAqYnJl
YWtOb2RlID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIE5vZGVJbXBsICpu
b2RlVG9JbnNlcnQgPSBicmVha05vZGU7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBJbnNlcnRM
aW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdC
UiA9IG5leHQgJiYgbmV4dC0+aGFzVGFnTmFtZShiclRhZykgJiYgcG9zLm5vZGUoKS0+ZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KTsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwgcG9z
KTsKICAgICAgICAgICAgIGlmIChoYXNUcmFpbGluZ0JSKSB7Ci0gICAgICAgICAgICAgICAgc2V0
RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVBTSkp
OworICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVy
KFBvc2l0aW9uKG5leHQsIDApLCBET1dOU1RSRUFNKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCkBA
IC0xNzksNyArMTc5LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkK
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwgKnR5cGluZ1N0eWxlID0gZG9jdW1l
bnQoKS0+cGFydCgpLT50eXBpbmdTdHlsZSgpOwogICAgIAogICAgIGlmICh0eXBpbmdTdHlsZSAm
JiB0eXBpbmdTdHlsZS0+bGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIFNlbGVjdGlvbiBzZWxlY3Rp
b25CZWZvcmVTdHlsZSA9IGVuZGluZ1NlbGVjdGlvbigpOworICAgICAgICBTZWxlY3Rpb25Db250
cm9sbGVyIHNlbGVjdGlvbkJlZm9yZVN0eWxlID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAKICAgICAg
ICAgRE9NOjpSYW5nZUltcGwgKnJhbmdlQXJvdW5kTm9kZSA9IGRvY3VtZW50KCktPmNyZWF0ZVJh
bmdlKCk7CiAgICAgICAgIGludCBleGNlcHRpb24gPSAwOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICAgICAgLy8gYWZmaW5p
dHkgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQgc2luY2UgdGhpcyBpcyBhIHRlbXAgc2VsZWN0aW9u
CiAgICAgICAgIC8vIGp1c3QgZm9yIGNhbGxpbmcgYXBwbHlTdHlsZQotICAgICAgICBzZXRFbmRp
bmdTZWxlY3Rpb24oU2VsZWN0aW9uKHJhbmdlQXJvdW5kTm9kZSwga2h0bWw6OlNFTF9ERUZBVUxU
X0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIocmFuZ2VBcm91bmROb2RlLCBraHRtbDo6
U0VMX0RFRkFVTFRfQUZGSU5JVFksIGtodG1sOjpTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogICAg
ICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlKTsKIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oc2VsZWN0aW9uQmVmb3JlU3R5bGUpOwpJbmRleDogV2ViQ29yZS9raHRtbC9lZGl0aW5nL2lu
c2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0
b3JfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5k
LmNwcAotLS0gV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9y
X2NvbW1hbmQuY3BwCTI1IEF1ZyAyMDA1IDIzOjEzOjQ1IC0wMDAwCTEuNQorKysgV2ViQ29yZS9r
aHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTEyIFNl
cCAyMDA1IDIxOjUxOjU1IC0wMDAwCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBJbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcAogdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JD
b21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICBib29sIHNwbGl0VGV4dCA9IGZhbHNlOwotICAgIFNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAgICBTZWxlY3Rpb25Db250
cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRp
dGluZy9pbnNlcnRfdGV4dF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBXZWJDb3JlL2todG1sL2VkaXRpbmcv
aW5zZXJ0X3RleHRfY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRf
dGV4dF9jb21tYW5kLmNwcAk1IEF1ZyAyMDA1IDE4OjIyOjQzIC0wMDAwCTEuNgorKysgV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2luc2VydF90ZXh0X2NvbW1hbmQuY3BwCTEyIFNlcCAyMDA1IDIxOjUx
OjU1IC0wMDAwCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5w
dXQoY29uc3QgRE9NUwogewogICAgIGFzc2VydCh0ZXh0LmZpbmQoJ1xuJykgPT0gLTEpOwogCi0g
ICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOworICAgIFNlbGVjdGlv
bkNvbnRyb2xsZXIgc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgYm9vbCBhZGp1
c3REb3duc3RyZWFtID0gaXNTdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0
YXJ0KCkuZG93bnN0cmVhbSgpLCBET1dOU1RSRUFNKSk7CiAKICAgICAvLyBEZWxldGUgdGhlIGN1
cnJlbnQgc2VsZWN0aW9uLCBvciBjb2xsYXBzZSB3aGl0ZXNwYWNlLCBhcyBuZWVkZWQKQEAgLTE5
NCw3ICsxOTQsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBET01TCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKHN0YXJ0
UG9zaXRpb24sIERPV05TVFJFQU0sIGVuZFBvc2l0aW9uLCBTRUxfREVGQVVMVF9BRkZJTklUWSkp
OworICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKHN0YXJ0UG9zaXRp
b24sIERPV05TVFJFQU0sIGVuZFBvc2l0aW9uLCBTRUxfREVGQVVMVF9BRkZJTklUWSkpOwogCiAg
ICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgdHlwaW5nIHN0eWxlLgogICAg
IC8vIEZJWE1FOiBJbXByb3ZlIHR5cGluZyBzdHlsZS4KSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRp
dGluZy9qc2VkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApk
aWZmIC1wIC11IC1yMS4zMCBXZWJDb3JlL2todG1sL2VkaXRpbmcvanNlZGl0aW5nLmNwcAotLS0g
V2ViQ29yZS9raHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAJMjkgQXVnIDIwMDUgMjE6Mjk6MTUg
LTAwMDAJMS4zMAorKysgV2ViQ29yZS9raHRtbC9lZGl0aW5nL2pzZWRpdGluZy5jcHAJMTIgU2Vw
IDIwMDUgMjE6NTE6NTUgLTAwMDAKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgImh0bWxl
ZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgInNlbGVjdGlvbi5o
IgorI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJtaXNjL2hhc2ht
YXAuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKSW5kZXg6IFdlYkNvcmUva2h0bWwvZWRpdGluZy9t
b3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9lZGl0aW5nL21vdmVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3JlL2todG1sL2VkaXRpbmcv
bW92ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9tb3Zl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysr
IFdlYkNvcmUva2h0bWwvZWRpdGluZy9tb3ZlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxMiBTZXAg
MjAwNSAyMTo1MTo1NSAtMDAwMApAQCAtNTYsNyArNTYsNyBAQCBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZDo6fk1vdmVTZWxlY3Rpb25Db21tCiAKIHZvaWQgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogewotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNSYW5nZSgpKTsKIAogICAgIFBvc2l0aW9uIHBvcyA9IG1fcG9z
aXRpb247CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xMwpkaWZmIC1wIC11IC1yMS4xMyBXZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxl
Y3Rpb25fY29tbWFuZC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVj
dGlvbl9jb21tYW5kLmNwcAk2IFNlcCAyMDA1IDIzOjUzOjA5IC0wMDAwCTEuMTMKKysrIFdlYkNv
cmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkxMiBTZXAgMjAw
NSAyMTo1MTo1NiAtMDAwMApAQCAtMzg4LDcgKzM4OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmZpeHVwTm9kZVMKICAgICAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09
IDApOwogICAgICAgICAgICAgLy8gYWZmaW5pdHkgaXMgbm90IHJlYWxseSBpbXBvcnRhbnQgc2lu
Y2UgdGhpcyBpcyBhIHRlbXAgc2VsZWN0aW9uCiAgICAgICAgICAgICAvLyBqdXN0IGZvciBjYWxs
aW5nIGFwcGx5U3R5bGUKLSAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24o
cmFuZ2VBcm91bmROb2RlLCBTRUxfREVGQVVMVF9BRkZJTklUWSwgU0VMX0RFRkFVTFRfQUZGSU5J
VFkpKTsKKyAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVy
KHJhbmdlQXJvdW5kTm9kZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFksIFNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7CiAgICAgICAgICAgICBhcHBseVN0eWxlKGRlc2lyZWRTdHlsZSk7CiAgICAgICAgICAg
ICByYW5nZUFyb3VuZE5vZGUtPmRlcmVmKCk7CiAgICAgICAgIH0KQEAgLTYyOSw3ICs2MjksNyBA
QCBib29sIGlzRmlyc3RWaXNpYmxlUG9zaXRpb25JblNwZWNpYWxFbGVtCiB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIHsKICAgICAvLyBjb2xsZWN0IGluZm9ybWF0aW9u
IGFib3V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgcHJpb3IgdG8gZGVsZXRpbmcgdGhlIHNlbGVj
dGlvbgotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKTsKKyAgICBT
ZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAgIEFT
U0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7CiAgICAgCiAgICAgaWYgKG1fbWF0Y2hT
dHlsZSkgewpAQCAtMTAxMiw3ICsxMDEyLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6Y29tcGxldGVIVAogCiAgICAgICAgIGlmIChtX21hdGNoU3R5bGUpIHsKICAgICAgICAgICAg
IGFzc2VydChtX2luc2VydGlvblN0eWxlKTsKLSAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlv
bihTZWxlY3Rpb24oc3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBlbmQsIFNFTF9ERUZBVUxU
X0FGRklOSVRZKSk7CisgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uQ29u
dHJvbGxlcihzdGFydCwgU0VMX0RFRkFVTFRfQUZGSU5JVFksIGVuZCwgU0VMX0RFRkFVTFRfQUZG
SU5JVFkpKTsKICAgICAgICAgICAgIGFwcGx5U3R5bGUobV9pbnNlcnRpb25TdHlsZSk7CiAgICAg
ICAgIH0gICAgCiAgICAgICAgIApAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y29tcGxldGVIVAogICAgIH0KICAgICAKICAgICBpZiAobV9zZWxlY3RS
ZXBsYWNlbWVudCkKLSAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihzdGFydCwg
U0VMX0RFRkFVTFRfQUZGSU5JVFksIGVuZCwgU0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKKyAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIFNFTF9ERUZB
VUxUX0FGRklOSVRZLCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiAgICAgZWxzZQogICAg
ICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kLCBTRUxfREVGQVVMVF9BRkZJTklUWSk7CiAgICAg
CkluZGV4OiBXZWJDb3JlL2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1h
bmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtcCAtdSAtcjEuMSBXZWJDb3Jl
L2todG1sL2VkaXRpbmcvdHlwaW5nX2NvbW1hbmQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2VkaXRp
bmcvdHlwaW5nX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysg
V2ViQ29yZS9raHRtbC9lZGl0aW5nL3R5cGluZ19jb21tYW5kLmNwcAkxMiBTZXAgMjAwNSAyMTo1
MTo1NiAtMDAwMApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoRG9jCiAgICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVk
aXRDb21tYW5kLmdldCgpKS0+ZGVsZXRlS2V5UHJlc3NlZCgpOwogICAgIH0KICAgICBlbHNlIHsK
LSAgICAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHBhcnQtPnNlbGVjdGlvbigpOworICAgICAg
ICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IHBhcnQtPnNlbGVjdGlvbigpOwogICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LnN0YXJ0KCksIHNlbGVjdGlvbi5zdGFydEFmZmluaXR5KCkpLnByZXZpb3VzKCkuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcgZm9yIGEgZGVsZXRlIGtleSBhdCB0aGUgc3Rh
cnQgb2YgYW4gZWRpdGFibGUgZWxlbWVudC4KICAgICAgICAgfQpAQCAtOTUsNyArOTUsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzCiAgICAgICAgIHN0YXRpY19j
YXN0PFR5cGluZ0NvbW1hbmQgKj4obGFzdEVkaXRDb21tYW5kLmdldCgpKS0+Zm9yd2FyZERlbGV0
ZUtleVByZXNzZWQoKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFNlbGVjdGlvbiBzZWxl
Y3Rpb24gPSBwYXJ0LT5zZWxlY3Rpb24oKTsKKyAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBz
ZWxlY3Rpb24gPSBwYXJ0LT5zZWxlY3Rpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0Nh
cmV0KCkgJiYgaXNFbmRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQo
KSwgc2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSkpKSB7CiAgICAgICAgICAgICAvLyBkbyBub3Ro
aW5nIGZvciBhIGRlbGV0ZSBrZXkgYXQgdGhlIHN0YXJ0IG9mIGFuIGVkaXRhYmxlIGVsZW1lbnQu
CiAgICAgICAgIH0KQEAgLTMyNywxMyArMzI3LDEzIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0UGFyYWdyYXBoU2VwYXIKIAogdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KCkKIHsKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CisgICAgU2VsZWN0aW9uQ29u
dHJvbGxlciBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAKICAgICBzd2l0Y2ggKGVuZGluZ1NlbGVj
dGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAg
ICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJBTkdFOgogICAgICAgICAgICAgc2VsZWN0aW9u
VG9EZWxldGUgPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6Q0FSRVQ6IHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9s
bGVyOjpDQVJFVDogewogICAgICAgICAgICAgLy8gSGFuZGxlIGRlbGV0ZSBhdCBiZWdpbm5pbmct
b2YtYmxvY2sgY2FzZS4KICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgaW4gdGhlIGNhc2UgdGhh
dCB0aGUgY2FyZXQgaXMgYXQgdGhlIHN0YXJ0IG9mIGEKICAgICAgICAgICAgIC8vIHJvb3QgZWRp
dGFibGUgZWxlbWVudCBvciBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC4KQEAgLTM0MSwxMCAr
MzQxLDEwIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCgpCiAgICAgICAg
ICAgICBQb3NpdGlvbiBzdGFydCA9IFZpc2libGVQb3NpdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlv
bigpLnN0YXJ0QWZmaW5pdHkoKSkucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAg
ICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJsZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9u
KCkuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05vdE51bGwoKSAmJiBzdGFydC5ub2RlKCktPnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9kZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCi0g
ICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBTZWxlY3Rpb24oc3RhcnQsIFNFTF9E
RUZBVUxUX0FGRklOSVRZLCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNlbGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIFNFTF9E
RUZBVUxUX0FGRklOSVRZLCBlbmQsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgICAg
ICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5PTkU6CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM1OCwxMyArMzU4LDEz
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCgpCiAKIHZvaWQgVHlwaW5n
Q29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoKQogewotICAgIFNlbGVjdGlvbiBzZWxl
Y3Rpb25Ub0RlbGV0ZTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvblRvRGVsZXRl
OwogICAgIAogICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxl
cjo6UkFOR0U6CiAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVuZGluZ1NlbGVjdGlv
bigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDog
eworICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkNBUkVUOiB7CiAgICAgICAgICAg
ICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgogICAgICAgICAg
ICAgLy8gRG8gbm90aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBjYXJldCBpcyBhdCB0aGUgc3Rh
cnQgb2YgYQogICAgICAgICAgICAgLy8gcm9vdCBlZGl0YWJsZSBlbGVtZW50IG9yIGF0IHRoZSBz
dGFydCBvZiBhIGRvY3VtZW50LgpAQCAtMzcyLDEwICszNzIsMTAgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICAgICAgUG9zaXRpb24gc3RhcnQgPSBW
aXNpYmxlUG9zaXRpb24ocG9zLCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydEFmZmluaXR5KCkpLm5l
eHQoKS5kZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgUG9zaXRpb24gZW5kID0gVmlzaWJs
ZVBvc2l0aW9uKHBvcywgZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnRBZmZpbml0eSgpKS5kZWVwRXF1
aXZhbGVudCgpOwogICAgICAgICAgICAgaWYgKHN0YXJ0LmlzTm90TnVsbCgpICYmIGVuZC5pc05v
dE51bGwoKSAmJiBzdGFydC5ub2RlKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSBlbmQubm9k
ZSgpLT5yb290RWRpdGFibGVFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uVG9E
ZWxldGUgPSBTZWxlY3Rpb24oc3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBlbmQsIFNFTF9E
RUZBVUxUX0FGRklOSVRZKTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IFNl
bGVjdGlvbkNvbnRyb2xsZXIoc3RhcnQsIFNFTF9ERUZBVUxUX0FGRklOSVRZLCBlbmQsIFNFTF9E
RUZBVUxUX0FGRklOSVRZKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6
Ok5PTkU6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAxCmRpZmYgLXAgLXUg
LXIxLjIwMSBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwCi0tLSBXZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwCTMxIEF1ZyAyMDA1IDA1OjEyOjU0
IC0wMDAwCTEuMjAxCisrKyBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3Bw
CTEyIFNlcCAyMDA1IDIxOjUxOjU5IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAi
eG1sL2RvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2lu
Y2x1ZGUgInJlbmRlcl9ibG9jay5oIgotI2luY2x1ZGUgImVkaXRpbmcvc2VsZWN0aW9uLmgiCisj
aW5jbHVkZSAiZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAicmVuZGVy
X3RoZW1lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAgLTEyNzAsNyArMTI3MCw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKIAogdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIGksIENhcmV0VHlwZSB0eXBlKQogewotICAgIGNv
bnN0IFNlbGVjdGlvbiAmcyA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBkb2N1bWVudCgpLT5wYXJ0
KCktPnNlbGVjdGlvbigpIDogZG9jdW1lbnQoKS0+cGFydCgpLT5kcmFnQ2FyZXQoKTsKKyAgICBj
b25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZzID0gdHlwZSA9PSBDdXJzb3JDYXJldCA/IGRvY3Vt
ZW50KCktPnBhcnQoKS0+c2VsZWN0aW9uKCkgOiBkb2N1bWVudCgpLT5wYXJ0KCktPmRyYWdDYXJl
dCgpOwogICAgIE5vZGVJbXBsICpjYXJldE5vZGUgPSBzLnN0YXJ0KCkubm9kZSgpOwogICAgIFJl
bmRlck9iamVjdCAqcmVuZGVyZXIgPSBjYXJldE5vZGUgPyBjYXJldE5vZGUtPnJlbmRlcmVyKCkg
OiAwOwogICAgIGlmIChyZW5kZXJlciAmJiAocmVuZGVyZXIgPT0gdGhpcyB8fCByZW5kZXJlci0+
Y29udGFpbmluZ0Jsb2NrKCkgPT0gdGhpcykgJiYgY2FyZXROb2RlICYmIGNhcmV0Tm9kZS0+aXND
b250ZW50RWRpdGFibGUoKSkgewpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21f
ZG9jaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjUzCmRpZmYgLXAgLXUgLXIxLjI1
MyBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwveG1s
L2RvbV9kb2NpbXBsLmNwcAkxMCBTZXAgMjAwNSAyMDo0NzoxNCAtMDAwMAkxLjI1MworKysgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCTEyIFNlcCAyMDA1IDIxOjUyOjAwIC0wMDAw
CkBAIC0xMjE2LDcgKzEyMTYsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6dXBkYXRlU2VsZWN0aW9u
KCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlbmRlckNhbnZhcyAqY2FudmFzID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyQ2FudmFzKj4obV9yZW5kZXIpOwotICAgIFNlbGVjdGlvbiBzID0gcGFy
dCgpLT5zZWxlY3Rpb24oKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHMgPSBwYXJ0KCktPnNl
bGVjdGlvbigpOwogICAgIGlmICghcy5pc1JhbmdlKCkpIHsKICAgICAgICAgY2FudmFzLT5jbGVh
clNlbGVjdGlvbigpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg3CmRpZmYgLXAgLXUgLXIx
LjE4NyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1s
L3htbC9kb21fbm9kZWltcGwuY3BwCTEyIFNlcCAyMDA1IDA0OjQyOjI5IC0wMDAwCTEuMTg3Cisr
KyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTEyIFNlcCAyMDA1IDIxOjUyOjAy
IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2lu
Y2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiZWRpdGluZy9odG1sX2lu
dGVyY2hhbmdlLmgiCi0jaW5jbHVkZSAiZWRpdGluZy9zZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJl
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgPGtnbG9iYWwuaD4KICNp
bmNsdWRlIDxrZGVidWcuaD4KQEAgLTIzMzgsNyArMjMzOCw3IEBAIHZvaWQgQ29udGFpbmVyTm9k
ZUltcGw6OnNldEZvY3VzKGJvb2wgcmUKIAogICAgIC8vIEZJWE1FOiBNb3ZlIHRvIEVsZW1lbnRJ
bXBsCiAgICAgaWYgKHJlY2VpdmVkICYmIGlzRWRpdGFibGVCbG9jaygpICYmICFoYXNDaGlsZE5v
ZGVzKCkpIHsKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+cGFydCgpLT5zZXRTZWxlY3Rpb24oU2Vs
ZWN0aW9uKFBvc2l0aW9uKHRoaXMsIDApLCBET1dOU1RSRUFNKSk7CisgICAgICAgIGdldERvY3Vt
ZW50KCktPnBhcnQoKS0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24o
dGhpcywgMCksIERPV05TVFJFQU0pKTsKICAgICB9CiAKICAgICAvLyBub3RlIHRoYXQgd2UgbmVl
ZCB0byByZWNhbGMgdGhlIHN0eWxlCkluZGV4OiBXZWJDb3JlL2t3cS9LV1FBY2NPYmplY3QubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUFjY09iamVjdC5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44MApkaWZmIC1wIC11IC1yMS44MCBXZWJDb3JlL2t3
cS9LV1FBY2NPYmplY3QubW0KLS0tIFdlYkNvcmUva3dxL0tXUUFjY09iamVjdC5tbQkzIFNlcCAy
MDA1IDIzOjEwOjAxIC0wMDAwCTEuODAKKysrIFdlYkNvcmUva3dxL0tXUUFjY09iamVjdC5tbQkx
MiBTZXAgMjAwNSAyMTo1MjowMyAtMDAwMApAQCAtNTYsNyArNTYsNyBAQAogI2ltcG9ydCAicmVu
ZGVyX3N0eWxlLmgiCiAjaW1wb3J0ICJyZW5kZXJfdGV4dC5oIgogI2ltcG9ydCAicmVuZGVyX3Ro
ZW1lLmgiCi0jaW1wb3J0ICJzZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbXBvcnQgImtqc19odG1sLmgiCiAjaW1wb3J0ICJ0ZXh0X2dyYW51bGFyaXR5Lmgi
CiAjaW1wb3J0ICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCkBAIC05Niw3ICs5Niw3IEBAIHVzaW5nIGto
dG1sOjpSZW5kZXJPYmplY3Q7CiB1c2luZyBraHRtbDo6UmVuZGVyU3R5bGU7CiB1c2luZyBraHRt
bDo6UmVuZGVyVGV4dDsKIHVzaW5nIGtodG1sOjpSZW5kZXJXaWRnZXQ7Ci11c2luZyBraHRtbDo6
U2VsZWN0aW9uOwordXNpbmcga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI7CiB1c2luZyBraHRt
bDo6VGV4dEl0ZXJhdG9yOwogdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsKIApAQCAtOTE0
LDcgKzkxNCw3IEBAIHN0YXRpYyBRUmVjdCBib3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAg
ICAgICAgLy8gTk9URTogQlVHIHN1cHBvcnQgbmVzdGVkIFdlYkFyZWFzLCBsaWtlIGluIDxodHRw
Oi8vd2ViY291cnNlcy5uaXUuZWR1Lz4KICAgICAgICAgLy8gKHRoZXJlIGlzIGEgd2ViIGFyY2hp
dmUgb2YgdGhpcyBwYWdlIGF0dGFjaGVkIHRvIDxyZGFyOi8vcHJvYmxlbS8zODg4OTczPikKICAg
ICAgICAgLy8gVHJvdWJsZSBpcyB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggZG9jdW1lbnQgdmlldyB0
byBhc2suCi0gICAgICAgIFNlbGVjdGlvbiAgIHNlbCA9IFtzZWxmIHRvcFZpZXddLT5wYXJ0KCkt
PnNlbGVjdGlvbigpOworICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyICAgc2VsID0gW3NlbGYg
dG9wVmlld10tPnBhcnQoKS0+c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChzZWwuaXNOb25lKCkp
IHsKICAgICAgICAgICAgIHNlbCA9IG1fcmVuZGVyZXItPmRvY3VtZW50KCktPnJlbmRlcmVyKCkt
PmNhbnZhcygpLT52aWV3KCktPnBhcnQoKS0+c2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAo
c2VsLmlzTm9uZSgpKQpAQCAtMTA0Miw4ICsxMDQyLDggQEAgc3RhdGljIFFSZWN0IGJvdW5kaW5n
Qm94UmVjdChSZW5kZXJPYmplYwogICAgIC8vIE5PVEU6IGlnbm9yZXMgcmVzdWx0cyBvZiBzZWwu
bW9kaWZ5IGJlY2F1c2UgaXQgcmV0dXJucyBmYWxzZSB3aGVuCiAgICAgLy8gc3RhcnRpbmcgYXQg
YW4gZW1wdHkgbGluZS4gIFRoZSByZXN1bHRpbmcgc2VsZWN0aW9uIGluIHRoYXQgY2FzZQogICAg
IC8vIHdpbGwgYmUgYSBjYXJldCBhdCB2aXNpYmxlUG9zLiAKLSAgICBTZWxlY3Rpb24gc2VsID0g
U2VsZWN0aW9uKHZpc2libGVQb3MsIHZpc2libGVQb3MpOwotICAgICh2b2lkKXNlbC5tb2RpZnko
U2VsZWN0aW9uOjpFWFRFTkQsIFNlbGVjdGlvbjo6UklHSFQsIGtodG1sOjpMSU5FX0JPVU5EQVJZ
KTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbCA9IFNlbGVjdGlvbkNvbnRyb2xsZXIodmlz
aWJsZVBvcywgdmlzaWJsZVBvcyk7CisgICAgKHZvaWQpc2VsLm1vZGlmeShTZWxlY3Rpb25Db250
cm9sbGVyOjpFWFRFTkQsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBraHRtbDo6TElORV9C
T1VOREFSWSk7CiAKICAgICAvLyByZXR1cm4gYSBtYXJrZXIgcmFuZ2UgZm9yIHRoZSBzZWxlY3Rp
b24gc3RhcnQgdG8gZW5kCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNp
YmxlUG9zaXRpb24oc2VsLnN0YXJ0KCksIHNlbC5zdGFydEFmZmluaXR5KCkpOwpAQCAtMTEyOSw5
ICsxMTI5LDkgQEAgc3RhdGljIFFSZWN0IGJvdW5kaW5nQm94UmVjdChSZW5kZXJPYmplYwogICAg
IGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCi0gICAgLy8gdXNlIHRoZSBTZWxlY3Rpb24gY2xhc3MgdG8gaGVscCBjYWxjdWxhdGUgdGhl
IGNvcnJlc3BvbmRpbmcgcmVjdGFuZ2xlCi0gICAgUVJlY3QgcmVjdDEgPSBTZWxlY3Rpb24oc3Rh
cnRWaXNpYmxlUG9zaXRpb24sIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKS5jYXJldFJlY3QoKTsKLSAg
ICBRUmVjdCByZWN0MiA9IFNlbGVjdGlvbihlbmRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQ
b3NpdGlvbikuY2FyZXRSZWN0KCk7CisgICAgLy8gdXNlIHRoZSBTZWxlY3Rpb25Db250cm9sbGVy
IGNsYXNzIHRvIGhlbHAgY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHJlY3RhbmdsZQorICAg
IFFSZWN0IHJlY3QxID0gU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydFZpc2libGVQb3NpdGlvbiwg
c3RhcnRWaXNpYmxlUG9zaXRpb24pLmNhcmV0UmVjdCgpOworICAgIFFSZWN0IHJlY3QyID0gU2Vs
ZWN0aW9uQ29udHJvbGxlcihlbmRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbiku
Y2FyZXRSZWN0KCk7CiAgICAgUVJlY3Qgb3VycmVjdCA9IHJlY3QxLnVuaXRlKHJlY3QyKTsKIAog
ICAgIC8vIHRyeSB0byB1c2UgdGhlIGRvY3VtZW50IHZpZXcgZnJvbSB0aGUgc2VsZWN0aW9uLCBz
byB0aGF0IG5lc3RlZCBXZWJBcmVhcyB3b3JrLApAQCAtMTQyMiwxMSArMTQyMiwxMSBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRSZXBsCiAgICAgaWYgKHZpc2libGVQb3Mx
LmlzTnVsbCgpIHx8IHZpc2libGVQb3MyLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIAotICAgIC8vIHVzZSB0aGUgU2VsZWN0aW9uIGNsYXNzIHRvIGRvIHRoZSBvcmRlcmluZwot
ICAgIC8vIE5PVEU6IFBlcmhhcHMgd2UgY291bGQgYWRkIGEgU2VsZWN0aW9uIG1ldGhvZCB0byBp
bmRpY2F0ZSBkaXJlY3Rpb24sIGJhc2VkIG9uIG1fYmFzZUlzU3RhcnQKKyAgICAvLyB1c2UgdGhl
IFNlbGVjdGlvbkNvbnRyb2xsZXIgY2xhc3MgdG8gZG8gdGhlIG9yZGVyaW5nCisgICAgLy8gTk9U
RTogUGVyaGFwcyB3ZSBjb3VsZCBhZGQgYSBTZWxlY3Rpb25Db250cm9sbGVyIG1ldGhvZCB0byBp
bmRpY2F0ZSBkaXJlY3Rpb24sIGJhc2VkIG9uIG1fYmFzZUlzU3RhcnQKICAgICBXZWJDb3JlVGV4
dE1hcmtlciAqc3RhcnRUZXh0TWFya2VyOwogICAgIFdlYkNvcmVUZXh0TWFya2VyICplbmRUZXh0
TWFya2VyOwotICAgIFNlbGVjdGlvbiAgIHNlbCh2aXNpYmxlUG9zMSwgdmlzaWJsZVBvczIpOwor
ICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgICBzZWwodmlzaWJsZVBvczEsIHZpc2libGVQb3MyKTsK
ICAgICBpZiAoc2VsLmJhc2UoKSA9PSBzZWwuc3RhcnQoKSkgewogICAgICAgICBzdGFydFRleHRN
YXJrZXIgPSB0ZXh0TWFya2VyMTsKICAgICAgICAgZW5kVGV4dE1hcmtlciA9IHRleHRNYXJrZXIy
OwpAQCAtMTQzNSw3ICsxNDM1LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBw
ZW5kUmVwbAogICAgICAgICBlbmRUZXh0TWFya2VyID0gdGV4dE1hcmtlcjE7CiAgICAgfQogICAg
IAotICAgIC8vIHJldHVybiBhIHJhbmdlIGJhc2VkIG9uIHRoZSBTZWxlY3Rpb24gdmVyZGljdAor
ICAgIC8vIHJldHVybiBhIHJhbmdlIGJhc2VkIG9uIHRoZSBTZWxlY3Rpb25Db250cm9sbGVyIHZl
cmRpY3QKICAgICByZXR1cm4gKGlkKSBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2Vyczog
c3RhcnRUZXh0TWFya2VyIGFuZEVuZE1hcmtlcjplbmRUZXh0TWFya2VyXTsKIH0KIApAQCAtMTg5
NCw3ICsxODk0LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kUmVwbAog
ICAgIAogICAgIC8vIG1ha2Ugc2VsZWN0aW9uIGFuZCB0ZWxsIHRoZSBkb2N1bWVudCB0byB1c2Ug
aXQKICAgICAvLyBOT1RFOiBCVUcgc3VwcG9ydCBuZXN0ZWQgV2ViQXJlYXMKLSAgICBTZWxlY3Rp
b24gc2VsID0gU2VsZWN0aW9uKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRp
b24pOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsID0gU2VsZWN0aW9uQ29udHJvbGxlcihz
dGFydFZpc2libGVQb3NpdGlvbiwgZW5kVmlzaWJsZVBvc2l0aW9uKTsKICAgICBbc2VsZiB0b3BE
b2N1bWVudF0tPnBhcnQoKS0+c2V0U2VsZWN0aW9uKHNlbCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
a3dxL0tXUUtIVE1MUGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FLSFRNTFBhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMjcKZGlmZiAtcCAt
dSAtcjEuMjI3IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5oCi0tLSBXZWJDb3JlL2t3cS9LV1FL
SFRNTFBhcnQuaAkzMSBBdWcgMjAwNSAwNDozODo0MyAtMDAwMAkxLjIyNworKysgV2ViQ29yZS9r
d3EvS1dRS0hUTUxQYXJ0LmgJMTIgU2VwIDIwMDUgMjE6NTI6MDMgLTAwMDAKQEAgLTI0Myw3ICsy
NDMsNyBAQCBwdWJsaWM6CiAgICAgTlNXcml0aW5nRGlyZWN0aW9uIGJhc2VXcml0aW5nRGlyZWN0
aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSBjb25zdDsKIAogICAgIHZvaWQgbWFya01pc3NwZWxsaW5n
c0luQWRqYWNlbnRXb3Jkcyhjb25zdCBraHRtbDo6VmlzaWJsZVBvc2l0aW9uICYpOwotICAgIHZv
aWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBraHRtbDo6U2VsZWN0aW9uICYpOworICAgIHZvaWQg
bWFya01pc3NwZWxsaW5ncyhjb25zdCBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlciAmKTsKIAog
ICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyRm9yRWxlbWVudChET006OkVsZW1lbnRJbXBs
ICopOwogICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyhET006Ok5vZGVJ
bXBsICpzdGFydE5vZGUsIGludCBzdGFydE9mZnNldCwgRE9NOjpOb2RlSW1wbCAqZW5kTm9kZSwg
aW50IGVuZE9mZnNldCk7CkBAIC0zNDIsMTAgKzM0MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
c3N1ZVBhc3RlQ29tbWFuZCgpOwogICAgIHZvaWQgaXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21t
YW5kKCk7CiAgICAgdm9pZCBpc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKTsKLSAgICB2b2lkIHJlc3Bv
bmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmb2xkU2VsZWN0aW9u
LCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24o
Y29uc3Qga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9z
ZVR5cGluZyk7CiAgICAgdm9pZCByZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbiwg
Y29uc3Qga2h0bWw6OlNlbGVjdGlvbiAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICZvbGRT
ZWxlY3Rpb24sIGNvbnN0IGtodG1sOjpTZWxlY3Rpb25Db250cm9sbGVyICZuZXdTZWxlY3Rpb24s
IGtodG1sOjpFQWZmaW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoY29uc3QgRE9NOjpSYW5nZUltcGwg
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVuZEVkaXRpbmcoY29uc3QgRE9NOjpS
YW5nZUltcGwgKikgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY3MApkaWZmIC1wIC11IC1yMS42NzAgV2ViQ29yZS9r
d3EvS1dRS0hUTUxQYXJ0Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JOSBTZXAg
MjAwNSAxODozNDo1MSAtMDAwMAkxLjY3MAorKysgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1t
CTEyIFNlcCAyMDA1IDIxOjUyOjA1IC0wMDAwCkBAIC03MCw3ICs3MCw3IEBACiAjaW1wb3J0ICJy
ZW5kZXJfdGFibGUuaCIKICNpbXBvcnQgInJlbmRlcl90ZXh0LmgiCiAjaW1wb3J0ICJyZW5kZXJf
dGhlbWUuaCIKLSNpbXBvcnQgInNlbGVjdGlvbi5oIgorI2ltcG9ydCAiU2VsZWN0aW9uQ29udHJv
bGxlci5oIgogI2ltcG9ydCAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2ltcG9ydCAidmlzaWJsZV90
ZXh0LmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0xMzksNyArMTM5LDcgQEAgdXNp
bmcga2h0bWw6OlJlbmRlclRleHQ7CiB1c2luZyBraHRtbDo6dGhlbWU7CiB1c2luZyBraHRtbDo6
UmVuZGVyV2lkZ2V0OwogdXNpbmcga2h0bWw6OlJpZ2h0V29yZElmT25Cb3VuZGFyeTsKLXVzaW5n
IGtodG1sOjpTZWxlY3Rpb247Cit1c2luZyBraHRtbDo6U2VsZWN0aW9uQ29udHJvbGxlcjsKIHVz
aW5nIGtodG1sOjpTRUxFQ1RfSUdOT1JFOwogdXNpbmcga2h0bWw6OnNldEVuZDsKIHVzaW5nIGto
dG1sOjpzZXRTdGFydDsKQEAgLTY1NCw3ICs2NTQsNyBAQCBib29sIEtXUUtIVE1MUGFydDo6Zmlu
ZFN0cmluZyhOU1N0cmluZyAqCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBz
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBWUF9V
UFNUUkVBTV9JRl9QT1NTSUJMRSkpOworICAgIHNldFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9s
bGVyKHJlc3VsdFJhbmdlLmdldCgpLCBET1dOU1RSRUFNLCBWUF9VUFNUUkVBTV9JRl9QT1NTSUJM
RSkpOwogICAgIGp1bXBUb1NlbGVjdGlvbigpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAy
MSw3ICsxMDIxLDcgQEAgUVN0cmluZyBLV1FLSFRNTFBhcnQ6OmFkdmFuY2VUb05leHRNaXNzcAog
ICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHJlc3VsdCA9IGNoYXJzLnN0cmluZyhtaXNzcGVs
bGluZy5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zZXRF
bmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZXhjZXB0aW9uKSwgY2hhcnMucmFuZ2Uo
KS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKIAotICAgICAgICAgICAgICAg
ICAgICBzZXRTZWxlY3Rpb24oU2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05T
VFJFQU0sIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CisgICAgICAgICAgICAgICAgICAgIHNl
dFNlbGVjdGlvbihTZWxlY3Rpb25Db250cm9sbGVyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERP
V05TVFJFQU0sIFZQX1VQU1RSRUFNX0lGX1BPU1NJQkxFKSk7CiAgICAgICAgICAgICAgICAgICAg
IGp1bXBUb1NlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAvLyBNYXJrIG1pc3NwZWxs
aW5nIGluIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICB4bWxEb2NJbXBsKCktPmFkZE1h
cmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwpA
QCAtMzM3MSwxNSArMzM3MSwxNSBAQCBOU1JlY3QgS1dRS0hUTUxQYXJ0Ojp2aXNpYmxlU2VsZWN0
aW9uUmVjCiB2b2lkIEtXUUtIVE1MUGFydDo6Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYSgp
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChzZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNh
c2UgU2VsZWN0aW9uOjpOT05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok5P
TkU6CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOiB7
CisgICAgICAgIGNhc2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6Q0FSRVQ6IHsKICAgICAgICAgICAg
IGlmICh2aWV3KCkpCiAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyB0cnVlIGZvcmNlcyBjZW50
ZXJpbmcgZXZlbiBpZiBzZWxlY3Rpb24gaXMgYWxyZWFkeSBleHBvc2VkCiAgICAgICAgICAgICAg
ICAgdmlldygpLT5lbnN1cmVSZWN0VmlzaWJsZUNlbnRlcmVkKHNlbGVjdGlvbigpLmNhcmV0UmVj
dCgpLCB0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
U2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25Db250cm9sbGVyOjpSQU5H
RToKICAgICAgICAgICAgIGlmICh2aWV3KCkpCiAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyB0
cnVlIGZvcmNlcyBjZW50ZXJpbmcgZXZlbiBpZiBzZWxlY3Rpb24gaXMgYWxyZWFkeSBleHBvc2Vk
CiAgICAgICAgICAgICAgICAgdmlldygpLT5lbnN1cmVSZWN0VmlzaWJsZUNlbnRlcmVkKHNlbGVj
dGlvblJlY3QoKSwgdHJ1ZSk7CkBAIC0zNzA5LDcgKzM3MDksNyBAQCB2b2lkIEtXUUtIVE1MUGFy
dDo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoCiAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAg
c2V0U2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihub2RlLCAwKSwgRE9XTlNUUkVBTSkpOwor
ICAgICAgICAgICAgc2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoUG9zaXRpb24obm9k
ZSwgMCksIERPV05TVFJFQU0pKTsKICAgICB9CiB9CiAKQEAgLTQwMDYsMTAgKzQwMDYsMTAgQEAg
dm9pZCBLV1FLSFRNTFBhcnQ6Om1hcmtNaXNzcGVsbGluZ3NJbkFkagogewogICAgIGlmICghW19i
cmlkZ2UgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRdKQogICAgICAgICByZXR1cm47
Ci0gICAgbWFya01pc3NwZWxsaW5ncyhTZWxlY3Rpb24oc3RhcnRPZldvcmQocCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQocCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSkpOworICAg
IG1hcmtNaXNzcGVsbGluZ3MoU2VsZWN0aW9uQ29udHJvbGxlcihzdGFydE9mV29yZChwLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChwLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSk7
CiB9CiAKLXZvaWQgS1dRS0hUTUxQYXJ0OjptYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlv
biAmc2VsZWN0aW9uKQordm9pZCBLV1FLSFRNTFBhcnQ6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3Qg
U2VsZWN0aW9uQ29udHJvbGxlciAmc2VsZWN0aW9uKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5k
YXJpZXMuCiAgICAgLy8gTWlnaHQgYmUgbmljZSB0byBhc3NlcnQgdGhhdCBoZXJlLgpAQCAtNDA2
NywxNSArNDA2NywxNSBAQCB2b2lkIEtXUUtIVE1MUGFydDo6bWFya01pc3NwZWxsaW5ncyhjb25z
CiAgICAgfQogfQogCi12b2lkIEtXUUtIVE1MUGFydDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb24gJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKK3ZvaWQg
S1dRS0hUTUxQYXJ0OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNv
bnRyb2xsZXIgJm9sZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZykKIHsKICAgICBpZiAoeG1s
RG9jSW1wbCgpKSB7CiAgICAgICAgIGlmIChbX2JyaWRnZSBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZF0pIHsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBvbGRTdGFydChvbGRT
ZWxlY3Rpb24uc3RhcnQoKSwgb2xkU2VsZWN0aW9uLnN0YXJ0QWZmaW5pdHkoKSk7Ci0gICAgICAg
ICAgICBTZWxlY3Rpb24gb2xkQWRqYWNlbnRXb3JkcyhzdGFydE9mV29yZChvbGRTdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQob2xkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSkpOworICAgICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxlciBvbGRBZGphY2VudFdvcmRz
KHN0YXJ0T2ZXb3JkKG9sZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZChv
bGRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAKICAgICAgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBuZXdTdGFydChzZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb24oKS5zdGFydEFm
ZmluaXR5KCkpOwotICAgICAgICAgICAgU2VsZWN0aW9uIG5ld0FkamFjZW50V29yZHMoc3RhcnRP
ZldvcmQobmV3U3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKG5ld1N0YXJ0
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKKyAgICAgICAgICAgIFNlbGVjdGlvbkNvbnRyb2xs
ZXIgbmV3QWRqYWNlbnRXb3JkcyhzdGFydE9mV29yZChuZXdTdGFydCwgTGVmdFdvcmRJZk9uQm91
bmRhcnkpLCBlbmRPZldvcmQobmV3U3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogCiAg
ICAgICAgICAgICBpZiAob2xkQWRqYWNlbnRXb3JkcyAhPSBuZXdBZGphY2VudFdvcmRzKSB7CiAg
ICAgICAgICAgICAgICAgLy8gTWFyayBtaXNzcGVsbGluZ3MgaW4gdGhlIHBvcnRpb24gdGhhdCB3
YXMgcHJldmlvdXNseSB1bm1hcmtlZCBiZWNhdXNlIG9mCkBAIC00MTAzLDcgKzQxMDMsNyBAQCB2
b2lkIEtXUUtIVE1MUGFydDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjCiAgICAgW19icmlkZ2UgcmVz
cG9uZFRvQ2hhbmdlZFNlbGVjdGlvbl07CiB9CiAKLWJvb2wgS1dRS0hUTUxQYXJ0OjpzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uICZvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVj
dGlvbiAmbmV3U2VsZWN0aW9uLCBraHRtbDo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSBjb25zdAorYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNlbGVjdGlv
bihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyICZvbGRTZWxlY3Rpb24sIGNvbnN0IFNlbGVjdGlv
bkNvbnRyb2xsZXIgJm5ld1NlbGVjdGlvbiwga2h0bWw6OkVBZmZpbml0eSBhZmZpbml0eSwgYm9v
bCBzdGlsbFNlbGVjdGluZykgY29uc3QKIHsKICAgICByZXR1cm4gW19icmlkZ2Ugc2hvdWxkQ2hh
bmdlU2VsZWN0ZWRET01SYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6b2xkU2VsZWN0aW9u
LnRvUmFuZ2UoKS5nZXQoKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9ET01SYW5nZTpbRE9NUmFuZ2UgX3JhbmdlV2l0aEltcGw6bmV3U2VsZWN0aW9uLnRvUmFuZ2Uo
KS5nZXQoKV0KSW5kZXg6IFdlYkNvcmUva3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtcCAtdSAtcjEuNDQgV2ViQ29yZS9r
d3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAotLS0gV2ViQ29yZS9rd3EvS1dRUmVuZGVyVHJlZURl
YnVnLmNwcAkyNSBBdWcgMjAwNSAxNzo0NzoyNSAtMDAwMAkxLjQ0CisrKyBXZWJDb3JlL2t3cS9L
V1FSZW5kZXJUcmVlRGVidWcuY3BwCTEyIFNlcCAyMDA1IDIxOjUyOjA2IC0wMDAwCkBAIC0zNCw3
ICszNCw3IEBACiAjaW5jbHVkZSAicmVuZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyX3Rl
eHQuaCIKICNpbmNsdWRlICJyZW5kZXJfYnIuaCIKLSNpbmNsdWRlICJzZWxlY3Rpb24uaCIKKyNp
bmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJLV1FLSFRNTFBhcnQu
aCIKICNpbmNsdWRlICJLV1FUZXh0U3RyZWFtLmgiCkBAIC01NCw3ICs1NCw3IEBAIHVzaW5nIGto
dG1sOjpSZW5kZXJXaWRnZXQ7CiB1c2luZyBraHRtbDo6UmVuZGVyVGV4dDsKIHVzaW5nIGtodG1s
OjpSZW5kZXJDYW52YXM7CiB1c2luZyBraHRtbDo6UmVuZGVyQlI7Ci11c2luZyBraHRtbDo6U2Vs
ZWN0aW9uOwordXNpbmcga2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI7CiB1c2luZyBraHRtbDo6
dHJhbnNwYXJlbnRDb2xvcjsKIHVzaW5nIGtodG1sOjpVUFNUUkVBTTsKIApAQCAtMzkxLDcgKzM5
MSw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlU2VsZWN0aW9uKFFUZXh0U3RyZWFtICYKICAgICBpZiAo
IXBhcnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24gPSBwYXJ0
LT5zZWxlY3Rpb24oKTsKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbiA9IHBhcnQt
PnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKSB7CiAgICAgICAgIHRz
IDw8ICJjYXJldDogcG9zaXRpb24gIiA8PCBzZWxlY3Rpb24uc3RhcnQoKS5vZmZzZXQoKSA8PCAi
IG9mICIgPDwgbm9kZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSk7CiAgICAgICAg
IGlmIChzZWxlY3Rpb24uc3RhcnRBZmZpbml0eSgpID09IFVQU1RSRUFNKQpJbmRleDogV2ViQ29y
ZS9rd3EvV2ViQ29yZUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQ1CmRpZmYg
LXAgLXUgLXIxLjM0NSBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLmgKLS0tIFdlYkNvcmUva3dx
L1dlYkNvcmVCcmlkZ2UuaAkxNyBBdWcgMjAwNSAyMDoxMjoxNSAtMDAwMAkxLjM0NQorKysgV2Vi
Q29yZS9rd3EvV2ViQ29yZUJyaWRnZS5oCTEyIFNlcCAyMDA1IDIxOjUyOjA2IC0wMDAwCkBAIC0x
MDIsMjEgKzEwMiwyMSBAQCB0eXBlZGVmIGVudW0gewogfSBXZWJTZWxlY3Rpb25BbHRlcmF0aW9u
OwogCiB0eXBlZGVmIGVudW0gewotICAgIFdlYlNlbGVjdEZvcndhcmQsCi0gICAgV2ViU2VsZWN0
QmFja3dhcmQsCi0gICAgV2ViU2VsZWN0UmlnaHQsCi0gICAgV2ViU2VsZWN0TGVmdAotfSBXZWJT
ZWxlY3Rpb25EaXJlY3Rpb247CisgICAgV2ViQnJpZGdlU2VsZWN0Rm9yd2FyZCwKKyAgICBXZWJC
cmlkZ2VTZWxlY3RCYWNrd2FyZCwKKyAgICBXZWJCcmlkZ2VTZWxlY3RSaWdodCwKKyAgICBXZWJC
cmlkZ2VTZWxlY3RMZWZ0Cit9IFdlYkJyaWRnZVNlbGVjdGlvbkRpcmVjdGlvbjsKIAogdHlwZWRl
ZiBlbnVtIHsKLSAgICBXZWJTZWxlY3RCeUNoYXJhY3RlciwKLSAgICBXZWJTZWxlY3RCeVdvcmQs
Ci0gICAgV2ViU2VsZWN0QnlMaW5lLAotICAgIFdlYlNlbGVjdEJ5UGFyYWdyYXBoLAotICAgIFdl
YlNlbGVjdFRvTGluZUJvdW5kYXJ5LAotICAgIFdlYlNlbGVjdFRvUGFyYWdyYXBoQm91bmRhcnks
Ci0gICAgV2ViU2VsZWN0VG9Eb2N1bWVudEJvdW5kYXJ5Ci19IFdlYlNlbGVjdGlvbkdyYW51bGFy
aXR5OworICAgIFdlYkJyaWRnZVNlbGVjdEJ5Q2hhcmFjdGVyLAorICAgIFdlYkJyaWRnZVNlbGVj
dEJ5V29yZCwKKyAgICBXZWJCcmlkZ2VTZWxlY3RCeUxpbmUsCisgICAgV2ViQnJpZGdlU2VsZWN0
QnlQYXJhZ3JhcGgsCisgICAgV2ViQnJpZGdlU2VsZWN0VG9MaW5lQm91bmRhcnksCisgICAgV2Vi
QnJpZGdlU2VsZWN0VG9QYXJhZ3JhcGhCb3VuZGFyeSwKKyAgICBXZWJCcmlkZ2VTZWxlY3RUb0Rv
Y3VtZW50Qm91bmRhcnkKK30gV2ViQnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHk7CiAKIHR5cGVk
ZWYgZW51bSB7CiAgICAgV2ViU2Nyb2xsVXAsCkBAIC0zNzksMTMgKzM3OSwxMyBAQCB0eXBlZGVm
IGVudW0KIC0gKHZvaWQpdW5kb0VkaXRpbmc6KGlkKWFyZzsKIC0gKHZvaWQpcmVkb0VkaXRpbmc6
KGlkKWFyZzsKIAotLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXhwYW5kaW5nU2VsZWN0aW9uV2l0aEdy
YW51bGFyaXR5OihXZWJTZWxlY3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eTsKKy0gKERPTVJh
bmdlICopcmFuZ2VCeUV4cGFuZGluZ1NlbGVjdGlvbldpdGhHcmFudWxhcml0eTooV2ViQnJpZGdl
U2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAtIChET01SYW5nZSAqKXJhbmdlT2ZD
aGFyYWN0ZXJzQXJvdW5kQ2FyZXQ7Ci0tIChET01SYW5nZSAqKXJhbmdlQnlBbHRlcmluZ0N1cnJl
bnRTZWxlY3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246
KFdlYlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNlbGVjdGlv
bkdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwotLSAodm9pZClhbHRlckN1cnJlbnRTZWxlY3Rpb246
KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYlNlbGVjdGlv
bkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5
KWdyYW51bGFyaXR5OworLSAoRE9NUmFuZ2UgKilyYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0
aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJCcmlk
Z2VTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxl
Y3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eTsKKy0gKHZvaWQpYWx0ZXJDdXJyZW50U2VsZWN0
aW9uOihXZWJTZWxlY3Rpb25BbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJCcmlk
Z2VTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxl
Y3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0eTsKIC0gKERPTVJhbmdlICopcmFuZ2VCeUFsdGVy
aW5nQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJhdGlvbilhbHRlcmF0aW9uIHZl
cnRpY2FsRGlzdGFuY2U6KGZsb2F0KWRpc3RhbmNlOwogLSAodm9pZClhbHRlckN1cnJlbnRTZWxl
Y3Rpb246KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiB2ZXJ0aWNhbERpc3RhbmNl
OihmbG9hdClkaXN0YW5jZTsKLS0gKFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdy
YW51bGFyaXR5OworLSAoV2ViQnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3Jh
bnVsYXJpdHk7CiAtIChET01SYW5nZSAqKXNtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3NlZFJhbmdl
OihET01SYW5nZSAqKXByb3Bvc2VkQ2hhclJhbmdlOwogLSAodm9pZClzbWFydEluc2VydEZvclN0
cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTooRE9NUmFuZ2UgKilj
aGFyUmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcg
YWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nOwogLSAoQk9PTCljYW5EZWxldGVS
YW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlk
Z2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDExCmRpZmYgLXAgLXUgLXIxLjQxMSBXZWJD
b3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1t
CTEgU2VwIDIwMDUgMTg6MDM6MzUgLTAwMDAJMS40MTEKKysrIFdlYkNvcmUva3dxL1dlYkNvcmVC
cmlkZ2UubW0JMTIgU2VwIDIwMDUgMjE6NTI6MDcgLTAwMDAKQEAgLTUwLDcgKzUwLDcgQEAKICNp
bXBvcnQgInJlbmRlcl9vYmplY3QuaCIKICNpbXBvcnQgInJlbmRlcl9yZXBsYWNlZC5oIgogI2lt
cG9ydCAicmVuZGVyX3N0eWxlLmgiCi0jaW1wb3J0ICJzZWxlY3Rpb24uaCIKKyNpbXBvcnQgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgInZpc2libGVfcG9zaXRpb24uaCIKICNpbXBv
cnQgInZpc2libGVfdGV4dC5oIgogI2ltcG9ydCAidmlzaWJsZV91bml0cy5oIgpAQCAtMTIyLDcg
KzEyMiw3IEBAIHVzaW5nIGtodG1sOjpSZW5kZXJQYXJ0OwogdXNpbmcga2h0bWw6OlJlbmRlclN0
eWxlOwogdXNpbmcga2h0bWw6OlJlbmRlcldpZGdldDsKIHVzaW5nIGtodG1sOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDsKLXVzaW5nIGtodG1sOjpTZWxlY3Rpb247Cit1c2luZyBraHRtbDo6U2Vs
ZWN0aW9uQ29udHJvbGxlcjsKIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiB1c2luZyBraHRtbDo6
VG9rZW5pemVyOwogdXNpbmcga2h0bWw6OlRleHRJdGVyYXRvcjsKQEAgLTUzNywxMSArNTM3LDEx
IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVkS0pTID0gRkFMU0U7CiAtIChXZWJTZWxlY3Rpb25T
dGF0ZSlzZWxlY3Rpb25TdGF0ZQogewogICAgIHN3aXRjaCAoX3BhcnQtPnNlbGVjdGlvbigpLnN0
YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5PTkU6CisgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Tk9ORToKICAgICAgICAgICAgIHJldHVybiBXZWJTZWxlY3Rpb25T
dGF0ZU5vbmU7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKKyAgICAgICAgY2FzZSBT
ZWxlY3Rpb25Db250cm9sbGVyOjpDQVJFVDoKICAgICAgICAgICAgIHJldHVybiBXZWJTZWxlY3Rp
b25TdGF0ZUNhcmV0OwotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNh
c2UgU2VsZWN0aW9uQ29udHJvbGxlcjo6UkFOR0U6CiAgICAgICAgICAgICByZXR1cm4gV2ViU2Vs
ZWN0aW9uU3RhdGVSYW5nZTsKICAgICB9CiAgICAgCkBAIC0xNDcwLDUzICsxNDcwLDUzIEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBbYXJnIGNvbW1hbmRd
LT5yZWFwcGx5KCk7CiB9CiAKLS0gKERPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1NlbGVjdGlv
bldpdGhHcmFudWxhcml0eTooV2ViU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0g
KERPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1NlbGVjdGlvbldpdGhHcmFudWxhcml0eTooV2Vi
QnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKIHsKICAgICBpZiAoIXBhcnRI
YXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAogICAgIC8v
IE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVzIGRlY2xh
cmVkIGluIGt0bWxfc2VsZWN0aW9uLmgKLSAgICBTZWxlY3Rpb24gc2VsZWN0aW9uKF9wYXJ0LT5z
ZWxlY3Rpb24oKSk7CisgICAgU2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24oX3BhcnQtPnNl
bGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShzdGF0aWNf
Y2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOwogICAgIHJldHVybiBbRE9NUmFu
Z2UgX3JhbmdlV2l0aEltcGw6c2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKLS0gKERP
TVJhbmdlICopcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0
ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViU2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVj
dGlvbiBncmFudWxhcml0eTooV2ViU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkKKy0g
KERPTVJhbmdlICopcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9u
QWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQnJpZGdlU2VsZWN0aW9uRGlyZWN0
aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkp
Z3JhbnVsYXJpdHkKIHsKICAgICBpZiAoIXBhcnRIYXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgICAgIAogICAgIC8vIE5PVEU6IFRoZSBlbnVtcyAqbXVzdCogbWF0
Y2ggdGhlIHZlcnkgc2ltaWxhciBvbmVzIGRlY2xhcmVkIGluIGt0bWxfc2VsZWN0aW9uLmgKLSAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uKF9wYXJ0LT5zZWxlY3Rpb24oKSk7Ci0gICAgc2VsZWN0aW9u
Lm1vZGlmeShzdGF0aWNfY2FzdDxTZWxlY3Rpb246OkVBbHRlcj4oYWx0ZXJhdGlvbiksIAotICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U2VsZWN0aW9uOjpFRGlyZWN0aW9uPihkaXJl
Y3Rpb24pLCAKKyAgICBTZWxlY3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihfcGFydC0+c2VsZWN0
aW9uKCkpOworICAgIHNlbGVjdGlvbi5tb2RpZnkoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJv
bGxlcjo6RUFsdGVyPihhbHRlcmF0aW9uKSwgCisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxTZWxlY3Rpb25Db250cm9sbGVyOjpFRGlyZWN0aW9uPihkaXJlY3Rpb24pLCAKICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVUZXh0R3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5
KSk7CiAgICAgcmV0dXJuIFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpzZWxlY3Rpb24udG9SYW5n
ZSgpLmdldCgpXTsKIH0KIAotLSAodm9pZClhbHRlckN1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVj
dGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYlNlbGVjdGlvbkRpcmVjdGlv
bilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFy
aXR5CistICh2b2lkKWFsdGVyQ3VycmVudFNlbGVjdGlvbjooV2ViU2VsZWN0aW9uQWx0ZXJhdGlv
bilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQnJpZGdlU2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVj
dGlvbiBncmFudWxhcml0eTooV2ViQnJpZGdlU2VsZWN0aW9uR3JhbnVsYXJpdHkpZ3JhbnVsYXJp
dHkKIHsKICAgICBpZiAoIXBhcnRIYXNTZWxlY3Rpb24oc2VsZikpCiAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgLy8gTk9URTogVGhlIGVudW1zICptdXN0KiBtYXRjaCB0aGUgdmVyeSBz
aW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gZG9tX3NlbGVjdGlvbi5oCi0gICAgU2VsZWN0aW9uIHNl
bGVjdGlvbihfcGFydC0+c2VsZWN0aW9uKCkpOwotICAgIHNlbGVjdGlvbi5tb2RpZnkoc3RhdGlj
X2Nhc3Q8U2VsZWN0aW9uOjpFQWx0ZXI+KGFsdGVyYXRpb24pLCAKLSAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFNlbGVjdGlvbjo6RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCisgICAg
U2VsZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24oX3BhcnQtPnNlbGVjdGlvbigpKTsKKyAgICBz
ZWxlY3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4o
YWx0ZXJhdGlvbiksIAorICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U2VsZWN0aW9u
Q29udHJvbGxlcjo6RURpcmVjdGlvbj4oZGlyZWN0aW9uKSwgCiAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihncmFudWxhcml0eSkpOwogCiAgICAgLy8g
c2F2ZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIHggcG9zaXRpb24gaWYgbmVjZXNzYXJ5OyBtYW55IHR5
cGVzIG9mIG1vdGlvbiBibG93IGl0IGF3YXkKICAgICBpbnQgeFBvcyA9IEtIVE1MUGFydDo6Tm9Y
UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkg
ewotICAgICAgICBjYXNlIFdlYlNlbGVjdEJ5TGluZToKLSAgICAgICAgY2FzZSBXZWJTZWxlY3RC
eVBhcmFncmFwaDoKKyAgICAgICAgY2FzZSBXZWJCcmlkZ2VTZWxlY3RCeUxpbmU6CisgICAgICAg
IGNhc2UgV2ViQnJpZGdlU2VsZWN0QnlQYXJhZ3JhcGg6CiAgICAgICAgICAgICB4UG9zID0gX3Bh
cnQtPnhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2ViU2VsZWN0QnlDaGFyYWN0ZXI6Ci0gICAgICAgIGNhc2UgV2ViU2Vs
ZWN0QnlXb3JkOgotICAgICAgICBjYXNlIFdlYlNlbGVjdFRvTGluZUJvdW5kYXJ5OgotICAgICAg
ICBjYXNlIFdlYlNlbGVjdFRvUGFyYWdyYXBoQm91bmRhcnk6Ci0gICAgICAgIGNhc2UgV2ViU2Vs
ZWN0VG9Eb2N1bWVudEJvdW5kYXJ5OgorICAgICAgICBjYXNlIFdlYkJyaWRnZVNlbGVjdEJ5Q2hh
cmFjdGVyOgorICAgICAgICBjYXNlIFdlYkJyaWRnZVNlbGVjdEJ5V29yZDoKKyAgICAgICAgY2Fz
ZSBXZWJCcmlkZ2VTZWxlY3RUb0xpbmVCb3VuZGFyeToKKyAgICAgICAgY2FzZSBXZWJCcmlkZ2VT
ZWxlY3RUb1BhcmFncmFwaEJvdW5kYXJ5OgorICAgICAgICBjYXNlIFdlYkJyaWRnZVNlbGVjdFRv
RG9jdW1lbnRCb3VuZGFyeToKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTUyOSw4
ICsxNTI5LDggQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAg
IC8vIHRvIHByZXNlcnZlIHNtYXJ0IGRlbGV0ZSBiZWhhdmlvciB3aGVuIGV4dGVuZGluZyBieSB3
b3JkLiAgZS5nLiBkb3VibGUtY2xpY2ssCiAgICAgLy8gdGhlbiBzaGlmdC1vcHRpb24tcmlnaHRh
cnJvdywgdGhlbiBkZWxldGUgbmVlZHMgdG8gc21hcnQgZGVsZXRlLCBwZXIgVGV4dEVkaXQuCiAg
ICAgaWYgKCEoKGFsdGVyYXRpb24gPT0gV2ViU2VsZWN0QnlFeHRlbmRpbmcpICYmCi0gICAgICAg
ICAgKGdyYW51bGFyaXR5ID09IFdlYlNlbGVjdEJ5V29yZCkgJiYgKF9wYXJ0LT5zZWxlY3Rpb25H
cmFudWxhcml0eSgpID09IGtodG1sOjpXT1JEKSkpCi0gICAgICAgIF9wYXJ0LT5zZXRTZWxlY3Rp
b25HcmFudWxhcml0eShzdGF0aWNfY2FzdDxFVGV4dEdyYW51bGFyaXR5PihXZWJTZWxlY3RCeUNo
YXJhY3RlcikpOworICAgICAgICAgIChncmFudWxhcml0eSA9PSBXZWJCcmlkZ2VTZWxlY3RCeVdv
cmQpICYmIChfcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBraHRtbDo6V09SRCkpKQor
ICAgICAgICBfcGFydC0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8RVRleHRH
cmFudWxhcml0eT4oV2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXIpKTsKICAgICAKICAgICAvLyBy
ZXN0b3JlIHZlcnRpY2FsIG5hdmlnYXRpb24geCBwb3NpdGlvbiBpZiBuZWNlc3NhcnkKICAgICBp
ZiAoeFBvcyAhPSBLSFRNTFBhcnQ6Ok5vWFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKQpA
QCAtMTU0Niw4ICsxNTQ2LDggQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgIGlmICghcGFydEhhc1NlbGVjdGlvbihzZWxmKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKICAgICAgICAgCi0gICAgU2VsZWN0aW9uIHNlbGVjdGlvbihfcGFydC0+c2VsZWN0aW9uKCkp
OwotICAgIHNlbGVjdGlvbi5tb2RpZnkoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uOjpFQWx0ZXI+KGFs
dGVyYXRpb24pLCBzdGF0aWNfY2FzdDxpbnQ+KHZlcnRpY2FsRGlzdGFuY2UpKTsKKyAgICBTZWxl
Y3Rpb25Db250cm9sbGVyIHNlbGVjdGlvbihfcGFydC0+c2VsZWN0aW9uKCkpOworICAgIHNlbGVj
dGlvbi5tb2RpZnkoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uQ29udHJvbGxlcjo6RUFsdGVyPihhbHRl
cmF0aW9uKSwgc3RhdGljX2Nhc3Q8aW50Pih2ZXJ0aWNhbERpc3RhbmNlKSk7CiAgICAgcmV0dXJu
IFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpzZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXTsKIH0K
IApAQCAtMTU1NiwxMyArMTU1NiwxMyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9y
bUVsZW1lbnRGCiAgICAgaWYgKCFwYXJ0SGFzU2VsZWN0aW9uKHNlbGYpKQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgIFNlbGVjdGlvbiBzZWxlY3Rpb24oX3BhcnQtPnNlbGVjdGlvbigp
KTsKLSAgICBzZWxlY3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbjo6RUFsdGVyPihh
bHRlcmF0aW9uKSwgc3RhdGljX2Nhc3Q8aW50Pih2ZXJ0aWNhbERpc3RhbmNlKSk7CisgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24oX3BhcnQtPnNlbGVjdGlvbigpKTsKKyAgICBzZWxl
Y3Rpb24ubW9kaWZ5KHN0YXRpY19jYXN0PFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVBbHRlcj4oYWx0
ZXJhdGlvbiksIHN0YXRpY19jYXN0PGludD4odmVydGljYWxEaXN0YW5jZSkpOwogCiAgICAgLy8g
c2V0dGluZyB0aGUgc2VsZWN0aW9uIGFsd2F5cyBjbGVhcnMgc2F2ZWQgdmVydGljYWwgbmF2aWdh
dGlvbiB4IHBvc2l0aW9uLCBzbyBwcmVzZXJ2ZSBpdAogICAgIGludCB4UG9zID0gX3BhcnQtPnhQ
b3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpOwogICAgIF9wYXJ0LT5zZXRTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKLSAgICBfcGFydC0+c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoc3RhdGljX2Nh
c3Q8RVRleHRHcmFudWxhcml0eT4oV2ViU2VsZWN0QnlDaGFyYWN0ZXIpKTsKKyAgICBfcGFydC0+
c2V0U2VsZWN0aW9uR3JhbnVsYXJpdHkoc3RhdGljX2Nhc3Q8RVRleHRHcmFudWxhcml0eT4oV2Vi
QnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXIpKTsKICAgICBfcGFydC0+c2V0WFBvc0ZvclZlcnRpY2Fs
QXJyb3dOYXZpZ2F0aW9uKHhQb3MpOwogCiAgICAgX3BhcnQtPnNlbGVjdEZyYW1lRWxlbWVudElu
UGFyZW50SWZGdWxseVNlbGVjdGVkKCk7CkBAIC0xNTcwLDEwICsxNTcwLDEwIEBAIHN0YXRpYyBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBbc2VsZiBlbnN1cmVTZWxlY3Rp
b25WaXNpYmxlXTsKIH0KIAotLSAoV2ViU2VsZWN0aW9uR3JhbnVsYXJpdHkpc2VsZWN0aW9uR3Jh
bnVsYXJpdHkKKy0gKFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5KXNlbGVjdGlvbkdyYW51
bGFyaXR5CiB7CiAgICAgLy8gTk9URTogVGhlIGVudW1zICptdXN0KiBtYXRjaCB0aGUgdmVyeSBz
aW1pbGFyIG9uZXMgZGVjbGFyZWQgaW4gZG9tX3NlbGVjdGlvbi5oCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5PihfcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJp
dHkoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFy
aXR5PihfcGFydC0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSk7CiB9CiAKIC0gKHZvaWQpc2V0U2Vs
ZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZp
bml0eSlzZWxlY3Rpb25BZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZwpAQCAt
MTU5Nyw3ICsxNTk3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50
RgogICAgIC8vIEZJWE1FOiBDYW4gd2UgcHJvdmlkZSBleHRlbnRBZmZpbml0eT8KICAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHN0YXJ0Q29udGFpbmVyLCBbcmFuZ2Ugc3RhcnRPZmZz
ZXRdLCBhZmZpbml0eSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVFbmQoZW5kQ29udGFp
bmVyLCBbcmFuZ2UgZW5kT2Zmc2V0XSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKTsKLSAg
ICBTZWxlY3Rpb24gc2VsZWN0aW9uKHZpc2libGVTdGFydCwgdmlzaWJsZUVuZCk7CisgICAgU2Vs
ZWN0aW9uQ29udHJvbGxlciBzZWxlY3Rpb24odmlzaWJsZVN0YXJ0LCB2aXNpYmxlRW5kKTsKICAg
ICBfcGFydC0+c2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgY2xvc2VUeXBpbmcpOwogfQogCkBAIC0x
NjM2LDcgKzE2MzYsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRG
CiAKIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIF9wYXJ0LT5z
ZXRTZWxlY3Rpb24oU2VsZWN0aW9uKFtzZWxmIGNvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXSwga2h0
bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsK
KyAgICBfcGFydC0+c2V0U2VsZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xsZXIoW3NlbGYgY29udmVy
dFRvRE9NUmFuZ2U6cmFuZ2VdLCBraHRtbDo6U0VMX0RFRkFVTFRfQUZGSU5JVFksIGtodG1sOjpT
RUxfREVGQVVMVF9BRkZJTklUWSkpOwogfQogCiAtIChOU1JhbmdlKXNlbGVjdGVkTlNSYW5nZQpA
QCAtMTY1MSw3ICsxNjUxLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogCiAtICh2b2lkKXNldE1hcmtET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAg
IF9wYXJ0LT5zZXRNYXJrKFNlbGVjdGlvbihbcmFuZ2UgX3JhbmdlSW1wbF0sIGtodG1sOjpTRUxf
REVGQVVMVF9BRkZJTklUWSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CisgICAgX3Bh
cnQtPnNldE1hcmsoU2VsZWN0aW9uQ29udHJvbGxlcihbcmFuZ2UgX3JhbmdlSW1wbF0sIGtodG1s
OjpTRUxfREVGQVVMVF9BRkZJTklUWSwga2h0bWw6OlNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CiB9
CiAKIC0gKERPTVJhbmdlICopbWFya0RPTVJhbmdlCkBAIC0xOTE0LDEzICsxOTE0LDEzIEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKIAogLSAodm9pZCltb3ZlRHJh
Z0NhcmV0VG9Qb2ludDooTlNQb2ludClwb2ludAogeyAgIAotICAgIFNlbGVjdGlvbiBkcmFnQ2Fy
ZXQoW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSk7CisgICAgU2VsZWN0aW9u
Q29udHJvbGxlciBkcmFnQ2FyZXQoW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50
XSk7CiAgICAgX3BhcnQtPnNldERyYWdDYXJldChkcmFnQ2FyZXQpOwogfQogCiAtICh2b2lkKXJl
bW92ZURyYWdDYXJldAogewotICAgIF9wYXJ0LT5zZXREcmFnQ2FyZXQoU2VsZWN0aW9uKCkpOwor
ICAgIF9wYXJ0LT5zZXREcmFnQ2FyZXQoU2VsZWN0aW9uQ29udHJvbGxlcigpKTsKIH0KIAogLSAo
RE9NUmFuZ2UgKilkcmFnQ2FyZXRET01SYW5nZQpAQCAtMTkzMSw3ICsxOTMxLDcgQEAgc3RhdGlj
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogLSAoRE9NUmFuZ2UgKillZGl0YWJs
ZURPTVJhbmdlRm9yUG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKICAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgIHJl
dHVybiBwb3NpdGlvbi5pc051bGwoKSA/IG5pbCA6IFtET01SYW5nZSBfcmFuZ2VXaXRoSW1wbDpT
ZWxlY3Rpb24ocG9zaXRpb24pLnRvUmFuZ2UoKS5nZXQoKV07CisgICAgcmV0dXJuIHBvc2l0aW9u
LmlzTnVsbCgpID8gbmlsIDogW0RPTVJhbmdlIF9yYW5nZVdpdGhJbXBsOlNlbGVjdGlvbkNvbnRy
b2xsZXIocG9zaXRpb24pLnRvUmFuZ2UoKS5nZXQoKV07CiB9CiAKIC0gKHZvaWQpZGVsZXRlU2Vs
ZWN0aW9uV2l0aFNtYXJ0RGVsZXRlOihCT09MKXNtYXJ0RGVsZXRlCkBAIC0yMjMzLDcgKzIyMzMs
NyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgaWYgKCFf
cGFydCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgCi0gICAgU2VsZWN0aW9uIHNlbGVj
dGlvbihfcGFydC0+c2VsZWN0aW9uKCkpOworICAgIFNlbGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0
aW9uKF9wYXJ0LT5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDYXJldCgpKQog
ICAgICAgICByZXR1cm4gbmlsOwogCkluZGV4OiBXZWJLaXQvV2ViVmlldy5zdWJwcm9qL1dlYkhU
TUxWaWV3Lm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJWaWV3LnN1
YnByb2ovV2ViSFRNTFZpZXcubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NjcKZGlmZiAtcCAt
dSAtcjEuNDY3IFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQotLS0gV2ViS2l0
L1dlYlZpZXcuc3VicHJvai9XZWJIVE1MVmlldy5tCTUgU2VwIDIwMDUgMjI6MjY6MDUgLTAwMDAJ
MS40NjcKKysrIFdlYktpdC9XZWJWaWV3LnN1YnByb2ovV2ViSFRNTFZpZXcubQkxMiBTZXAgMjAw
NSAyMTo1MjozMCAtMDAwMApAQCAtMjgwNCw3ICsyODA0LDcgQEAgc3RhdGljIFdlYkhUTUxWaWV3
ICpsYXN0SGl0VmlldyA9IG5pbDsKICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQgJiYgW3Nl
bGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOlticmlk
Z2UgZHJhZ0NhcmV0RE9NUmFuZ2VdIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9w
cGVkXSkgewogICAgICAgICAgICAgICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjpXZWJE
cmFnRGVzdGluYXRpb25BY3Rpb25FZGl0IGZvckRyYWdnaW5nSW5mbzpkcmFnZ2luZ0luZm9dOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoW3NlbGYgX2lzTW92ZURyYWddKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBCT09MIHNtYXJ0TW92ZSA9IFtbc2VsZiBfYnJpZGdlXSBzZWxlY3Rpb25H
cmFudWxhcml0eV0gPT0gV2ViU2VsZWN0QnlXb3JkICYmIFtzZWxmIF9jYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wg
c21hcnRNb3ZlID0gW1tzZWxmIF9icmlkZ2VdIHNlbGVjdGlvbkdyYW51bGFyaXR5XSA9PSBXZWJC
cmlkZ2VTZWxlY3RCeVdvcmQgJiYgW3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOwogICAgICAgICAgICAgICAgICAgICAgICAgW2JyaWRnZSBtb3ZlU2VsZWN0
aW9uVG9EcmFnQ2FyZXQ6ZnJhZ21lbnQgc21hcnRNb3ZlOnNtYXJ0TW92ZV07CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBbYnJpZGdlIHNldFNl
bGVjdGlvblRvRHJhZ0NhcmV0XTsKQEAgLTMzMDQsNyArMzMwNCw3IEBAIHN0YXRpYyBXZWJIVE1M
VmlldyAqbGFzdEhpdFZpZXcgPSBuaWw7CiAgICAgW1tzZWxmIF9icmlkZ2VdIGNlbnRlclNlbGVj
dGlvbkluVmlzaWJsZUFyZWFdOwogfQogCi0tICh2b2lkKV9hbHRlckN1cnJlbnRTZWxlY3Rpb246
KFdlYlNlbGVjdGlvbkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYlNlbGVjdGlv
bkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5
KWdyYW51bGFyaXR5CistICh2b2lkKV9hbHRlckN1cnJlbnRTZWxlY3Rpb246KFdlYlNlbGVjdGlv
bkFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkJyaWRnZVNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkJyaWRnZVNlbGVjdGlvbkdyYW51bGFyaXR5
KWdyYW51bGFyaXR5CiB7CiAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbc2VsZiBfYnJpZGdlXTsK
ICAgICBET01SYW5nZSAqcHJvcG9zZWRSYW5nZSA9IFticmlkZ2UgcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbjphbHRlcmF0aW9uIGRpcmVjdGlvbjpkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6
Z3JhbnVsYXJpdHldOwpAQCAtMzMyNiwxNzIgKzMzMjYsMTcyIEBAIHN0YXRpYyBXZWJIVE1MVmll
dyAqbGFzdEhpdFZpZXcgPSBuaWw7CiAKIC0gKHZvaWQpbW92ZUJhY2t3YXJkOihpZClzZW5kZXIK
IHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRp
cmVjdGlvbjpXZWJTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeUNoYXJhY3Rl
cl07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1vdmluZyBk
aXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0QmFja3dhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2Vs
ZWN0QnlDaGFyYWN0ZXJdOwogfQogCiAtICh2b2lkKW1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVj
dGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJT
ZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0QmFja3dhcmQgZ3JhbnVsYXJpdHk6
V2ViU2VsZWN0QnlDaGFyYWN0ZXJdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246
V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEJhY2t3YXJkIGdy
YW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5Q2hhcmFjdGVyXTsKIH0KIAogLSAodm9pZCltb3Zl
RG93bjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJT
ZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2ViU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJT
ZWxlY3RCeUxpbmVdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0
QnlNb3ZpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2Vi
QnJpZGdlU2VsZWN0QnlMaW5lXTsKIH0KIAogLSAodm9pZCltb3ZlRG93bkFuZE1vZGlmeVNlbGVj
dGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJT
ZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpX
ZWJTZWxlY3RCeUxpbmVdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2Vs
ZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJp
dHk6V2ViQnJpZGdlU2VsZWN0QnlMaW5lXTsKIH0KIAogLSAodm9pZCltb3ZlRm9yd2FyZDooaWQp
c2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1v
dmluZyBkaXJlY3Rpb246V2ViU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeUNo
YXJhY3Rlcl07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1v
dmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJCcmlk
Z2VTZWxlY3RCeUNoYXJhY3Rlcl07CiB9CiAKIC0gKHZvaWQpbW92ZUZvcndhcmRBbmRNb2RpZnlT
ZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246
V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEZvcndhcmQgZ3JhbnVsYXJp
dHk6V2ViU2VsZWN0QnlDaGFyYWN0ZXJdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rp
b246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZvcndhcmQg
Z3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXJdOwogfQogCiAtICh2b2lkKW1v
dmVMZWZ0OihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldl
YlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RMZWZ0IGdyYW51bGFyaXR5OldlYlNl
bGVjdEJ5Q2hhcmFjdGVyXTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNl
bGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RMZWZ0IGdyYW51bGFyaXR5Oldl
YkJyaWRnZVNlbGVjdEJ5Q2hhcmFjdGVyXTsKIH0KIAogLSAodm9pZCltb3ZlTGVmdEFuZE1vZGlm
eVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlv
bjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0TGVmdCBncmFudWxhcml0
eTpXZWJTZWxlY3RCeUNoYXJhY3Rlcl07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlv
bjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0TGVmdCBncmFu
dWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeUNoYXJhY3Rlcl07CiB9CiAKIC0gKHZvaWQpbW92ZVJp
Z2h0OihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNl
bGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RSaWdodCBncmFudWxhcml0eTpXZWJTZWxl
Y3RCeUNoYXJhY3Rlcl07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxl
Y3RCeU1vdmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0UmlnaHQgZ3JhbnVsYXJpdHk6V2Vi
QnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXJdOwogfQogCiAtICh2b2lkKW1vdmVSaWdodEFuZE1vZGlm
eVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlv
bjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0UmlnaHQgZ3JhbnVsYXJp
dHk6V2ViU2VsZWN0QnlDaGFyYWN0ZXJdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rp
b246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdFJpZ2h0IGdy
YW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5Q2hhcmFjdGVyXTsKIH0KIAogLSAodm9pZCltb3Zl
VG9CZWdpbm5pbmdPZkRvY3VtZW50OihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJy
ZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RCYWNrd2Fy
ZCBncmFudWxhcml0eTpXZWJTZWxlY3RUb0RvY3VtZW50Qm91bmRhcnldOworICAgIFtzZWxmIF9h
bHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldlYkJyaWRn
ZVNlbGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdFRvRG9jdW1lbnRCb3Vu
ZGFyeV07CiB9CiAKIC0gKHZvaWQpbW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNl
bGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpX
ZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0QmFja3dhcmQgZ3JhbnVsYXJp
dHk6V2ViU2VsZWN0VG9Eb2N1bWVudEJvdW5kYXJ5XTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50
U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RC
YWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RUb0RvY3VtZW50Qm91bmRhcnldOwog
fQogCiAtICh2b2lkKW1vdmVUb0JlZ2lubmluZ09mTGluZTooaWQpc2VuZGVyCiB7Ci0gICAgW3Nl
bGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2Vi
U2VsZWN0QmFja3dhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0VG9MaW5lQm91bmRhcnldOworICAg
IFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9u
OldlYkJyaWRnZVNlbGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdFRvTGlu
ZUJvdW5kYXJ5XTsKIH0KIAogLSAodm9pZCltb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlT
ZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246
V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEJhY2t3YXJkIGdyYW51bGFy
aXR5OldlYlNlbGVjdFRvTGluZUJvdW5kYXJ5XTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2Vs
ZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RCYWNr
d2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RUb0xpbmVCb3VuZGFyeV07CiB9CiAKIC0g
KHZvaWQpbW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGg6KGlkKXNlbmRlcgogewotICAgIFtzZWxm
IF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldlYlNl
bGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdFRvUGFyYWdyYXBoQm91bmRhcnldOwor
ICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0
aW9uOldlYkJyaWRnZVNlbGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdFRv
UGFyYWdyYXBoQm91bmRhcnldOwogfQogCiAtICh2b2lkKW1vdmVUb0JlZ2lubmluZ09mUGFyYWdy
YXBoQW5kTW9kaWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJy
ZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RCYWNr
d2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RUb1BhcmFncmFwaEJvdW5kYXJ5XTsKKyAgICBbc2Vs
ZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpX
ZWJCcmlkZ2VTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RUb1BhcmFn
cmFwaEJvdW5kYXJ5XTsKIH0KIAogLSAodm9pZCltb3ZlVG9FbmRPZkRvY3VtZW50OihpZClzZW5k
ZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5n
IGRpcmVjdGlvbjpXZWJTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdFRvRG9jdW1l
bnRCb3VuZGFyeV07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RC
eU1vdmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJC
cmlkZ2VTZWxlY3RUb0RvY3VtZW50Qm91bmRhcnldOwogfQogCiAtICh2b2lkKW1vdmVUb0VuZE9m
RG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRl
ckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVj
dEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0VG9Eb2N1bWVudEJvdW5kYXJ5XTsKKyAgICBb
c2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlv
bjpXZWJCcmlkZ2VTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdFRvRG9j
dW1lbnRCb3VuZGFyeV07CiB9CiAKIC0gKHZvaWQpbW92ZVRvRW5kT2ZMaW5lOihpZClzZW5kZXIK
IHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRp
cmVjdGlvbjpXZWJTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdFRvTGluZUJvdW5k
YXJ5XTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5n
IGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNl
bGVjdFRvTGluZUJvdW5kYXJ5XTsKIH0KIAogLSAodm9pZCltb3ZlVG9FbmRPZkxpbmVBbmRNb2Rp
ZnlTZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rp
b246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEZvcndhcmQgZ3JhbnVs
YXJpdHk6V2ViU2VsZWN0VG9MaW5lQm91bmRhcnldOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRT
ZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZv
cndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0VG9MaW5lQm91bmRhcnldOwogfQogCiAt
ICh2b2lkKW1vdmVUb0VuZE9mUGFyYWdyYXBoOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0
ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RG
b3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdFRvUGFyYWdyYXBoQm91bmRhcnldOworICAgIFtz
ZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldl
YkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0VG9QYXJhZ3Jh
cGhCb3VuZGFyeV07CiB9CiAKIC0gKHZvaWQpbW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlT
ZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246
V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEZvcndhcmQgZ3JhbnVsYXJp
dHk6V2ViU2VsZWN0VG9QYXJhZ3JhcGhCb3VuZGFyeV07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVu
dFNlbGVjdGlvbjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0
Rm9yd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RUb1BhcmFncmFwaEJvdW5kYXJ5XTsK
IH0KIAogLSAodm9pZCltb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb246KGlk
KXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlF
eHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVj
dEJ5UGFyYWdyYXBoXTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVj
dEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0
eTpXZWJCcmlkZ2VTZWxlY3RCeVBhcmFncmFwaF07CiB9CiAKIC0gKHZvaWQpbW92ZVBhcmFncmFw
aEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb246KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRl
ckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYlNlbGVj
dEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlQYXJhZ3JhcGhdOworICAgIFtzZWxmIF9h
bHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJy
aWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0QnlQYXJhZ3JhcGhd
OwogfQogCiAtICh2b2lkKW1vdmVVcDooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3Vy
cmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2ViU2VsZWN0QmFja3dh
cmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlMaW5lXTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50
U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RCYWNr
d2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeUxpbmVdOwogfQogCiAtICh2b2lkKW1v
dmVVcEFuZE1vZGlmeVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2FsdGVyQ3Vy
cmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViU2VsZWN0QmFj
a3dhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlMaW5lXTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJy
ZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxl
Y3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeUxpbmVdOwogfQogCiAtICh2
b2lkKW1vdmVXb3JkQmFja3dhcmQ6KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJl
bnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldlYlNlbGVjdEJhY2t3YXJk
IGdyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29yZF07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNl
bGVjdGlvbjpXZWJTZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0QmFja3dh
cmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0QnlXb3JkXTsKIH0KIAogLSAodm9pZCltb3Zl
V29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBf
YWx0ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJT
ZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeVdvcmRdOworICAgIFtzZWxmIF9h
bHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJy
aWRnZVNlbGVjdEJhY2t3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5V29yZF07CiB9
CiAKIC0gKHZvaWQpbW92ZVdvcmRGb3J3YXJkOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0
ZXJDdXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RG
b3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29yZF07CisgICAgW3NlbGYgX2FsdGVyQ3Vy
cmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0
Rm9yd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeVdvcmRdOwogfQogCiAtICh2b2lk
KW1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbjooaWQpc2VuZGVyCiB7Ci0gICAgW3Nl
bGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246
V2ViU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeVdvcmRdOworICAgIFtzZWxm
IF9hbHRlckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldl
YkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0QnlXb3JkXTsK
IH0KIAogLSAodm9pZCltb3ZlV29yZExlZnQ6KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRl
ckN1cnJlbnRTZWxlY3Rpb246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldlYlNlbGVjdExl
ZnQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlXb3JkXTsKKyAgICBbc2VsZiBfYWx0ZXJDdXJyZW50
U2VsZWN0aW9uOldlYlNlbGVjdEJ5TW92aW5nIGRpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RMZWZ0
IGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5V29yZF07CiB9CiAKIC0gKHZvaWQpbW92ZVdv
cmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJD
dXJyZW50U2VsZWN0aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RM
ZWZ0IGdyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29yZF07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVu
dFNlbGVjdGlvbjpXZWJTZWxlY3RCeUV4dGVuZGluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0
TGVmdCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeVdvcmRdOwogfQogCiAtICh2b2lkKW1v
dmVXb3JkUmlnaHQ6KGlkKXNlbmRlcgogewotICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rp
b246V2ViU2VsZWN0QnlNb3ZpbmcgZGlyZWN0aW9uOldlYlNlbGVjdFJpZ2h0IGdyYW51bGFyaXR5
OldlYlNlbGVjdEJ5V29yZF07CisgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJT
ZWxlY3RCeU1vdmluZyBkaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0UmlnaHQgZ3JhbnVsYXJpdHk6
V2ViQnJpZGdlU2VsZWN0QnlXb3JkXTsKIH0KIAogLSAodm9pZCltb3ZlV29yZFJpZ2h0QW5kTW9k
aWZ5U2VsZWN0aW9uOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfYWx0ZXJDdXJyZW50U2VsZWN0
aW9uOldlYlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpXZWJTZWxlY3RSaWdodCBncmFudWxh
cml0eTpXZWJTZWxlY3RCeVdvcmRdOworICAgIFtzZWxmIF9hbHRlckN1cnJlbnRTZWxlY3Rpb246
V2ViU2VsZWN0QnlFeHRlbmRpbmcgZGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdFJpZ2h0IGdyYW51
bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5V29yZF07CiB9CiAKIC0gKHZvaWQpcGFnZVVwOihpZClz
ZW5kZXIKQEAgLTM1MjYsNyArMzUyNiw3IEBAIHN0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZp
ZXcgPSBuaWw7CiAgICAgW3NlbGYgX2FsdGVyQ3VycmVudFNlbGVjdGlvbjpXZWJTZWxlY3RCeUV4
dGVuZGluZyB2ZXJ0aWNhbERpc3RhbmNlOltmcmFtZVZpZXcgX3ZlcnRpY2FsUGFnZVNjcm9sbERp
c3RhbmNlXV07CiB9CiAKLS0gKHZvaWQpX2V4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHk6KFdl
YlNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51bGFyaXR5CistICh2b2lkKV9leHBhbmRTZWxlY3Rp
b25Ub0dyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxlY3Rpb25HcmFudWxhcml0eSlncmFudWxhcml0
eQogewogICAgIFdlYkJyaWRnZSAqYnJpZGdlID0gW3NlbGYgX2JyaWRnZV07CiAgICAgRE9NUmFu
Z2UgKnJhbmdlID0gW2JyaWRnZSByYW5nZUJ5RXhwYW5kaW5nU2VsZWN0aW9uV2l0aEdyYW51bGFy
aXR5OmdyYW51bGFyaXR5XTsKQEAgLTM1NDAsMTcgKzM1NDAsMTcgQEAgc3RhdGljIFdlYkhUTUxW
aWV3ICpsYXN0SGl0VmlldyA9IG5pbDsKIAogLSAodm9pZClzZWxlY3RQYXJhZ3JhcGg6KGlkKXNl
bmRlcgogewotICAgIFtzZWxmIF9leHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5OldlYlNlbGVj
dEJ5UGFyYWdyYXBoXTsKKyAgICBbc2VsZiBfZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eTpX
ZWJCcmlkZ2VTZWxlY3RCeVBhcmFncmFwaF07CiB9CiAKIC0gKHZvaWQpc2VsZWN0TGluZTooaWQp
c2VuZGVyCiB7Ci0gICAgW3NlbGYgX2V4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHk6V2ViU2Vs
ZWN0QnlMaW5lXTsKKyAgICBbc2VsZiBfZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eTpXZWJC
cmlkZ2VTZWxlY3RCeUxpbmVdOwogfQogCiAtICh2b2lkKXNlbGVjdFdvcmQ6KGlkKXNlbmRlcgog
ewotICAgIFtzZWxmIF9leHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29y
ZF07CisgICAgW3NlbGYgX2V4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHk6V2ViQnJpZGdlU2Vs
ZWN0QnlXb3JkXTsKIH0KIAogLSAodm9pZCljb3B5OihpZClzZW5kZXIKQEAgLTQyMzYsNyArNDIz
Niw3IEBAIE5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKICAgICBbc2Vs
ZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGNhcGl0YWxpemVkU3RyaW5n
KV07CiB9CiAKLS0gKEJPT0wpX2RlbGV0ZVdpdGhEaXJlY3Rpb246KFdlYlNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYlNlbGVjdGlvbkdyYW51bGFyaXR5KWdyYW51
bGFyaXR5IGtpbGxSaW5nOihCT09MKWtpbGxSaW5nIGlzVHlwaW5nQWN0aW9uOihCT09MKWlzVHlw
aW5nQWN0aW9uCistIChCT09MKV9kZWxldGVXaXRoRGlyZWN0aW9uOihXZWJCcmlkZ2VTZWxlY3Rp
b25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJCcmlkZ2VTZWxlY3Rpb25HcmFu
dWxhcml0eSlncmFudWxhcml0eSBraWxsUmluZzooQk9PTClraWxsUmluZyBpc1R5cGluZ0FjdGlv
bjooQk9PTClpc1R5cGluZ0FjdGlvbgogewogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0aW9uLCBp
ZiB0aGVyZSBpcyBvbmUuCiAgICAgLy8gSWYgbm90LCBtYWtlIGEgc2VsZWN0aW9uIHVzaW5nIHRo
ZSBwYXNzZWQtaW4gZGlyZWN0aW9uIGFuZCBncmFudWxhcml0eS4KQEAgLTQyNTUsMTIgKzQyNTUs
MTIgQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogICAgICAgICBy
YW5nZSA9IFtbc2VsZiBfYnJpZGdlXSByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOldl
YlNlbGVjdEJ5RXh0ZW5kaW5nIGRpcmVjdGlvbjpkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6Z3JhbnVs
YXJpdHldOwogICAgICAgICBpZiAoaXNUeXBpbmdBY3Rpb24pCiAgICAgICAgICAgICBzd2l0Y2gg
KGRpcmVjdGlvbikgewotICAgICAgICAgICAgICAgIGNhc2UgV2ViU2VsZWN0Rm9yd2FyZDoKLSAg
ICAgICAgICAgICAgICBjYXNlIFdlYlNlbGVjdFJpZ2h0OgorICAgICAgICAgICAgICAgIGNhc2Ug
V2ViQnJpZGdlU2VsZWN0Rm9yd2FyZDoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkJyaWRnZVNl
bGVjdFJpZ2h0OgogICAgICAgICAgICAgICAgICAgICBkZWxldGlvbkFjdGlvbiA9IGZvcndhcmRE
ZWxldGVLZXlBY3Rpb247CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgV2ViU2VsZWN0QmFja3dhcmQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJTZWxl
Y3RMZWZ0OgorICAgICAgICAgICAgICAgIGNhc2UgV2ViQnJpZGdlU2VsZWN0QmFja3dhcmQ6Cisg
ICAgICAgICAgICAgICAgY2FzZSBXZWJCcmlkZ2VTZWxlY3RMZWZ0OgogICAgICAgICAgICAgICAg
ICAgICBkZWxldGlvbkFjdGlvbiA9IGRlbGV0ZUtleUFjdGlvbjsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC00Mjc2LDE0ICs0Mjc2LDE0IEBAIE5TU3Ryb2tl
Q29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKIHsKICAgICBpZiAoIVtzZWxmIF9pc0Vk
aXRhYmxlXSkKICAgICAgICAgcmV0dXJuOwotICAgIFtzZWxmIF9kZWxldGVXaXRoRGlyZWN0aW9u
OldlYlNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlDaGFyYWN0ZXIga2lsbFJp
bmc6Tk8gaXNUeXBpbmdBY3Rpb246WUVTXTsKKyAgICBbc2VsZiBfZGVsZXRlV2l0aERpcmVjdGlv
bjpXZWJCcmlkZ2VTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdEJ5Q2hh
cmFjdGVyIGtpbGxSaW5nOk5PIGlzVHlwaW5nQWN0aW9uOllFU107CiB9CiAKIC0gKHZvaWQpZGVs
ZXRlQmFja3dhcmQ6KGlkKXNlbmRlcgogewogICAgIGlmICghW3NlbGYgX2lzRWRpdGFibGVdKQog
ICAgICAgICByZXR1cm47Ci0gICAgW3NlbGYgX2RlbGV0ZVdpdGhEaXJlY3Rpb246V2ViU2VsZWN0
QmFja3dhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0QnlDaGFyYWN0ZXIga2lsbFJpbmc6Tk8gaXNU
eXBpbmdBY3Rpb246WUVTXTsKKyAgICBbc2VsZiBfZGVsZXRlV2l0aERpcmVjdGlvbjpXZWJCcmlk
Z2VTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RCeUNoYXJhY3RlciBr
aWxsUmluZzpOTyBpc1R5cGluZ0FjdGlvbjpZRVNdOwogfQogCiAtICh2b2lkKWRlbGV0ZUJhY2t3
YXJkQnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hhcmFjdGVyOihpZClzZW5kZXIKQEAgLTQyOTQsMzgg
KzQyOTQsMzggQEAgTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQwogCiAt
ICh2b2lkKWRlbGV0ZVdvcmRGb3J3YXJkOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfZGVsZXRl
V2l0aERpcmVjdGlvbjpXZWJTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29y
ZCBraWxsUmluZzpZRVMgaXNUeXBpbmdBY3Rpb246Tk9dOworICAgIFtzZWxmIF9kZWxldGVXaXRo
RGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2Vs
ZWN0QnlXb3JkIGtpbGxSaW5nOllFUyBpc1R5cGluZ0FjdGlvbjpOT107CiB9CiAKIC0gKHZvaWQp
ZGVsZXRlV29yZEJhY2t3YXJkOihpZClzZW5kZXIKIHsKLSAgICBbc2VsZiBfZGVsZXRlV2l0aERp
cmVjdGlvbjpXZWJTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeVdvcmQga2ls
bFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXTsKKyAgICBbc2VsZiBfZGVsZXRlV2l0aERpcmVj
dGlvbjpXZWJCcmlkZ2VTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlkZ2VTZWxlY3RC
eVdvcmQga2lsbFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXTsKIH0KIAogLSAodm9pZClkZWxl
dGVUb0JlZ2lubmluZ09mTGluZTooaWQpc2VuZGVyCiB7Ci0gICAgW3NlbGYgX2RlbGV0ZVdpdGhE
aXJlY3Rpb246V2ViU2VsZWN0QmFja3dhcmQgZ3JhbnVsYXJpdHk6V2ViU2VsZWN0VG9MaW5lQm91
bmRhcnkga2lsbFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXTsKKyAgICBbc2VsZiBfZGVsZXRl
V2l0aERpcmVjdGlvbjpXZWJCcmlkZ2VTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJCcmlk
Z2VTZWxlY3RUb0xpbmVCb3VuZGFyeSBraWxsUmluZzpZRVMgaXNUeXBpbmdBY3Rpb246Tk9dOwog
fQogCiAtICh2b2lkKWRlbGV0ZVRvRW5kT2ZMaW5lOihpZClzZW5kZXIKIHsKICAgICAvLyBUbyBt
YXRjaCBOU1RleHRWaWV3LCB0aGlzIGNvbW1hbmQgc2hvdWxkIGRlbGV0ZSB0aGUgbmV3bGluZSBh
dCB0aGUgZW5kIG9mCiAgICAgLy8gYSBwYXJhZ3JhcGggaWYgeW91IGFyZSBhdCB0aGUgZW5kIG9m
IGEgcGFyYWdyYXBoIChsaWtlIGRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGggZG9lcyBiZWxvdykuCi0g
ICAgaWYoIVtzZWxmIF9kZWxldGVXaXRoRGlyZWN0aW9uOldlYlNlbGVjdEZvcndhcmQgZ3JhbnVs
YXJpdHk6V2ViU2VsZWN0VG9MaW5lQm91bmRhcnkga2lsbFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9u
Ok5PXSkKLSAgICAgICAgW3NlbGYgX2RlbGV0ZVdpdGhEaXJlY3Rpb246V2ViU2VsZWN0Rm9yd2Fy
ZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeUNoYXJhY3RlciBraWxsUmluZzpZRVMgaXNUeXBpbmdB
Y3Rpb246Tk9dOworICAgIGlmKCFbc2VsZiBfZGVsZXRlV2l0aERpcmVjdGlvbjpXZWJCcmlkZ2VT
ZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYkJyaWRnZVNlbGVjdFRvTGluZUJvdW5kYXJ5IGtp
bGxSaW5nOllFUyBpc1R5cGluZ0FjdGlvbjpOT10pCisgICAgICAgIFtzZWxmIF9kZWxldGVXaXRo
RGlyZWN0aW9uOldlYkJyaWRnZVNlbGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2Vs
ZWN0QnlDaGFyYWN0ZXIga2lsbFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXTsKIH0KIAogLSAo
dm9pZClkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoOihpZClzZW5kZXIKIHsKLSAgICBbc2Vs
ZiBfZGVsZXRlV2l0aERpcmVjdGlvbjpXZWJTZWxlY3RCYWNrd2FyZCBncmFudWxhcml0eTpXZWJT
ZWxlY3RUb1BhcmFncmFwaEJvdW5kYXJ5IGtpbGxSaW5nOllFUyBpc1R5cGluZ0FjdGlvbjpOT107
CisgICAgW3NlbGYgX2RlbGV0ZVdpdGhEaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0QmFja3dhcmQg
Z3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0VG9QYXJhZ3JhcGhCb3VuZGFyeSBraWxsUmluZzpZ
RVMgaXNUeXBpbmdBY3Rpb246Tk9dOwogfQogCiAtICh2b2lkKWRlbGV0ZVRvRW5kT2ZQYXJhZ3Jh
cGg6KGlkKXNlbmRlcgogewogICAgIC8vIERlc3BpdGUgdGhlIG5hbWUgb2YgdGhlIG1ldGhvZCwg
dGhpcyBzaG91bGQgZGVsZXRlIHRoZSBuZXdsaW5lIGlmIHRoZSBjYXJldCBpcyBhdCB0aGUgZW5k
IG9mIGEgcGFyYWdyYXBoLgogICAgIC8vIElmIGRlbGV0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIHBh
cmFncmFwaCBmYWlscywgd2UgZGVsZXRlIG9uZSBjaGFyYWN0ZXIgZm9yd2FyZCwgd2hpY2ggd2ls
bCBkZWxldGUgdGhlIG5ld2xpbmUuCi0gICAgaWYgKCFbc2VsZiBfZGVsZXRlV2l0aERpcmVjdGlv
bjpXZWJTZWxlY3RGb3J3YXJkIGdyYW51bGFyaXR5OldlYlNlbGVjdFRvUGFyYWdyYXBoQm91bmRh
cnkga2lsbFJpbmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXSkKLSAgICAgICAgW3NlbGYgX2RlbGV0
ZVdpdGhEaXJlY3Rpb246V2ViU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpXZWJTZWxlY3RCeUNo
YXJhY3RlciBraWxsUmluZzpZRVMgaXNUeXBpbmdBY3Rpb246Tk9dOworICAgIGlmICghW3NlbGYg
X2RlbGV0ZVdpdGhEaXJlY3Rpb246V2ViQnJpZGdlU2VsZWN0Rm9yd2FyZCBncmFudWxhcml0eTpX
ZWJCcmlkZ2VTZWxlY3RUb1BhcmFncmFwaEJvdW5kYXJ5IGtpbGxSaW5nOllFUyBpc1R5cGluZ0Fj
dGlvbjpOT10pCisgICAgICAgIFtzZWxmIF9kZWxldGVXaXRoRGlyZWN0aW9uOldlYkJyaWRnZVNl
bGVjdEZvcndhcmQgZ3JhbnVsYXJpdHk6V2ViQnJpZGdlU2VsZWN0QnlDaGFyYWN0ZXIga2lsbFJp
bmc6WUVTIGlzVHlwaW5nQWN0aW9uOk5PXTsKIH0KIAogLSAodm9pZCljb21wbGV0ZTooaWQpc2Vu
ZGVyCkBAIC00ODQzLDcgKzQ4NDMsNyBAQCBzdGF0aWMgRE9NUmFuZ2UgKnVuaW9uRE9NUmFuZ2Vz
KERPTVJhbmdlCiAKIC0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCiB7Ci0gICAgcmV0dXJu
IFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3NlbGYgX2Jy
aWRnZV0gc2VsZWN0aW9uR3JhbnVsYXJpdHldID09IFdlYlNlbGVjdEJ5V29yZDsKKyAgICByZXR1
cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtbc2VsZiBf
YnJpZGdlXSBzZWxlY3Rpb25HcmFudWxhcml0eV0gPT0gV2ViQnJpZGdlU2VsZWN0QnlXb3JkOwog
fQogCiAtIChET01SYW5nZSAqKV9zbWFydERlbGV0ZVJhbmdlRm9yUHJvcG9zZWRSYW5nZTooRE9N
UmFuZ2UgKilwcm9wb3NlZFJhbmdlCkBAIC01Mjk0LDcgKzUyOTQsNyBAQCBzdGF0aWMgTlNBcnJh
eSAqdmFsaWRBdHRyaWJ1dGVzID0gbmlsOwogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3Jk
IHN0ZW0KICAgICAgICAgV2ViQnJpZGdlICpicmlkZ2UgPSBbX3ZpZXcgX2JyaWRnZV07CiAgICAg
ICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBbYnJpZGdlIHNlbGVjdGVkRE9NUmFuZ2VdOwotICAg
ICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0gW2JyaWRnZSByYW5nZUJ5RXhwYW5kaW5nU2VsZWN0
aW9uV2l0aEdyYW51bGFyaXR5OldlYlNlbGVjdEJ5V29yZF07CisgICAgICAgIERPTVJhbmdlICp3
aG9sZVdvcmQgPSBbYnJpZGdlIHJhbmdlQnlFeHBhbmRpbmdTZWxlY3Rpb25XaXRoR3JhbnVsYXJp
dHk6V2ViQnJpZGdlU2VsZWN0QnlXb3JkXTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3
aG9sZVdvcmQgY2xvbmVSYW5nZV07CiAgICAgICAgIFtwcmVmaXggc2V0RW5kOltzZWxlY3Rpb24g
c3RhcnRDb250YWluZXJdIDpbc2VsZWN0aW9uIHN0YXJ0T2Zmc2V0XV07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>