<?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>99206</bug_id>
          
          <creation_ts>2012-10-12 13:54:26 -0700</creation_ts>
          <short_desc>[wk2] Implement PDFPlugin</short_desc>
          <delta_ts>2012-10-23 18:25:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>adele</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741175</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 13:54:26 -0700</bug_when>
    <thetext>Work-in-progress replacement PDF plugin for Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741209</commentid>
    <comment_count>1</comment_count>
      <attachid>168484</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 14:27:29 -0700</bug_when>
    <thetext>Created attachment 168484
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741211</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-10-12 14:29:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/12491094&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741212</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-10-12 14:29:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/12491096&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741214</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-12 14:31:44 -0700</bug_when>
    <thetext>Attachment 168484 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebKit2/WebProcess/Plugins/PDF/BuiltInSimplePDFView.h:38:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/WebProcess/WebPage/WebPage.cpp:109:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/WebProcess/WebPage/WebPage.cpp:478:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 4 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741218</commentid>
    <comment_count>5</comment_count>
      <attachid>168485</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 14:37:36 -0700</bug_when>
    <thetext>Created attachment 168485
this version doesn&apos;t have the BuiltInPDFView-&gt;BuiltInSimplePDFView rename, so it&apos;s easier to review but won&apos;t build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741221</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 14:40:14 -0700</bug_when>
    <thetext>Fixing the change log situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741238</commentid>
    <comment_count>7</comment_count>
      <attachid>168485</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 14:48:18 -0700</bug_when>
    <thetext>Comment on attachment 168485
this version doesn&apos;t have the BuiltInPDFView-&gt;BuiltInSimplePDFView rename, so it&apos;s easier to review but won&apos;t build.

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

&gt; Source/WebKit2/Shared/WebProcessCreationParameters.cpp:46
&gt; +    , shouldUsePDFKitPlugin(false)

This and related changes shouldn&apos;t be here. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741253</commentid>
    <comment_count>8</comment_count>
      <attachid>168485</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-12 15:10:14 -0700</bug_when>
    <thetext>Comment on attachment 168485
this version doesn&apos;t have the BuiltInPDFView-&gt;BuiltInSimplePDFView rename, so it&apos;s easier to review but won&apos;t build.

Attachment 168485 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14286018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741268</commentid>
    <comment_count>9</comment_count>
      <attachid>168497</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-12 15:32:09 -0700</bug_when>
    <thetext>Created attachment 168497
whole patch again, with changelogs this time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741430</commentid>
    <comment_count>10</comment_count>
      <attachid>168497</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-12 23:30:03 -0700</bug_when>
    <thetext>Comment on attachment 168497
whole patch again, with changelogs this time

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

Very nice! r- because I had many comments (even more comments than I ended up typing and saving).

It’s strange to have the name of a framework, PDFKit, as part of the names of so many WebKit classes. We need to distinguish between the PDFKit-based plug-in and associated code and the older CG-based plug-in, but I don’t think that’s a good way.

&gt; Source/WebKit2/ChangeLog:11
&gt; +

You change log doesn’t follow the conventional format of commenting on the changes to each function or method. I don’t think that’s a good thing.

&gt; Source/WebKit2/ChangeLog:107
&gt; +        Perform a paint into a bitmap context for zooming snapshots.

The word “zooming” here is just confusing, and “for snapshots” is implied by the function’s name.

&gt; Source/WebKit2/ChangeLog:122
&gt; +        Handle copy and select-all commands, and forward them to PDFKit.

I think you meant to name a class, not a framework, here.

&gt; Source/WebKit2/ChangeLog:125
&gt; +        * WebProcess/Plugins/PDF/BuiltInSimplePDFView.h: Renamed from Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.h.
&gt; +        * WebProcess/Plugins/PDF/BuiltInSimplePDFView.mm: Renamed from Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFView.mm.

I don’t like this new name. The BuiltInSimplePDFView class primarily inherits from Plugin. Why isn’t it called SimplePDFPlugin?

&gt; Source/WebKit2/ChangeLog:129
&gt; +        * WebProcess/Plugins/PluginView.h:
&gt; +        (WebKit::PluginView::shouldUseFullPagePluginScaling):
&gt; +        Report whether or not the Plugin backed by this PluginView wants to handle scaling itself.

I think a better name for this function is one that starts with “handles”. It’s hard to come up with a name that doesn’t contain the word “page” twice if you want to express both that this is about the page scale and about full-page plug-ins. I think you could omit the full-page plug-in bit and call this handlesPageScaleFactor.

&gt; Source/WebKit2/ChangeLog:135
&gt; +        (WebKit::PluginView::setFullPagePluginScaleFactor):
&gt; +        (WebKit::PluginView::fullPagePluginScaleFactor):
&gt; +        If shouldUseFullPagePluginScaling is true, WebPage uses these to get/set its scale factor,
&gt; +        instead of the normal mechanism.

I’d just call these pageScaleFactor and setPageScaleFactor.

&gt; Source/WebKit2/ChangeLog:140
&gt; +        This PageScaleFactorDidChange prevents other code from using non-1.0 scale factors as the default.

What is “This PageScaleFactorDidChange”? This is really confusing.

&gt; Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h:228
&gt; +// Defaults to false
&gt; +WK_EXPORT void WKPreferencesSetPDFKitPluginEnabled(WKPreferencesRef preferencesRef, bool enabled);
&gt; +WK_EXPORT bool WKPreferencesGetPDFKitPluginEnabled(WKPreferencesRef preferencesRef);

The convention used to be that in the header, the parameter is called preferences, not preferencesRef, but I see that it’s been broken countless times.

&gt; Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h:208
&gt; +    virtual bool isEditingCommandEnabled(const String&amp; commandName);

No need to name the commandName parameter.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:52
&gt; +class BuiltInPDFKitView : public Plugin, public WebCore::ScrollableArea {

Not sure why this class has a name that ends with View if it’s a Plugin.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:59
&gt; +    // In-process PDFViews don&apos;t support asynchronous initialization.

This comment confuses me. What are “in-process PDFViews”?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:67
&gt; +    // Regular plug-ins don&apos;t need access to view, but we add scrollbars to embedding FrameView for proper event handling.

Did you mean “to the embedding”, or maybe “to the enclosing”?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:78
&gt; +    // Plug-in methods

functions?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:108
&gt; +    virtual bool isEditingCommandEnabled(const String&amp; commandName) OVERRIDE;

Don’t need commandName here.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:116
&gt; +    virtual void sendComplexTextInput(const String&amp; textInput);

Don’t need textInput here.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:121
&gt; +    virtual bool getFormValue(String&amp; formValue);

Redundant parameter name.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:124
&gt; +    virtual WebCore::Scrollbar* horizontalScrollbar();
&gt; +    virtual WebCore::Scrollbar* verticalScrollbar();

Terrible (see below)

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:128
&gt; +    // ScrollableArea methods.

functions?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:146
&gt; +    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
&gt; +    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }

It’s terrible that PlugIn and ScrollableArea declare these function pairs that only differ in constness.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:148
&gt; +    virtual bool shouldSuspendScrollAnimations() const OVERRIDE { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.

Bizarre comment.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:159
&gt; +    WebCore::IntSize m_pluginSize;

Not sure what the word “plugin” adds here, since this class derives from Plugin.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:165
&gt; +    RetainPtr&lt;CFMutableDataRef&gt; m_dataBuffer;

Why not m_data?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:180
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_containerLayer;
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_contentLayer;
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_horizontalScrollbarLayer;
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_verticalScrollbarLayer;
&gt; +    RetainPtr&lt;PlatformLayer&gt; m_scrollCornerLayer;

I’d say CALayer here, for clarity.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:60
&gt; +- (void)updateScrollPosition:(CGPoint) newPosition;

Extra space after the parenthesis.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:61
&gt; +- (void)writeItemsToPasteboard:(NSArray *) items withTypes:(NSArray *)types;

Here too.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:72
&gt; +@interface PDFLayerController (PDFKitSecretsIKnowAbout)

Please use the convention of using the name “Details” for categories such as this one.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:106
&gt; +- (id) currentSelection;

Space after paren again.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:113
&gt; +- (void)setHUDEnabled:(BOOL)enabled;
&gt; +- (BOOL)hudEnabled;

It’s almost as if there is a boolean property here…

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:118
&gt; +using namespace std;

Nope, see &lt;http://www.webkit.org/coding/coding-style.html#using-in-cpp&gt;.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:146
&gt; +- (id&lt;CAAction&gt;)actionForKey:(NSString *)key
&gt; +{
&gt; +    return nil;
&gt; +}

I’m curious: what does the superclass implementation do that we need to override here?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:187
&gt; +    for (unsigned i = 0; i &lt; [items count]; ++i) {

The right type to use as an index into an NSArray is NSUInteger. This needlessly sends the -count message to the array on every iteration through the loop. A better way to write this for statement would be
    for (NSUInteger i = 0, count = items.count; i &lt; count; ++i)

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:188
&gt; +        if ([[types objectAtIndex:i] isEqualToString:NSStringPboardType] || [[types objectAtIndex:i] isEqualToString:NSPasteboardTypeString]) {

Please use a local variable for [types objectAtIndex:i] so that you don’t call it twice.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:192
&gt; +    }

Another way to write this loop would be using -[NSArray enumerateObjectsUsingBlock:].

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:195
&gt; +- (void) showDefinitionForAttributedString: (NSAttributedString *) string atPoint: (CGPoint) point

Now you’re putting extra spaces after parentheses *and* after colons?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:200
&gt; +- (void) performWebSearch: (NSString *) string

More space.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:205
&gt; +- (void) openWithPreview

More.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:210
&gt; +- (void) saveToPDF

And more.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:309
&gt; +

Excellent code, but do we really need a third copy of it in the project? I think it should be moved down to WebCore soon.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:324
&gt; +    , m_horizontalScrollbarLayer(0)
&gt; +    , m_verticalScrollbarLayer(0)

No need to initialize a RetainPtr to 0.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:330
&gt; +    [m_pdfLayerController.get() setDelegate:m_pdfLayerControllerDelegate.get()];
&gt; +    [m_pdfLayerController.get() setParentLayer:m_contentLayer.get()];

Why not use property notation here?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:396
&gt; +        IntRect scrollbarRect(IntRect(pluginView()-&gt;x() + m_pluginSize.width() - m_verticalScrollbar-&gt;width(), pluginView()-&gt;y(), m_verticalScrollbar-&gt;width(), m_pluginSize.height()));

Is the inner IntRect necessary?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:416
&gt; +    if (m_verticalScrollbarLayer &amp;&amp; m_verticalScrollbar) {

When is it possible for one of these to be 0 and not the other?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:501
&gt; +    controller()-&gt;invalidate(IntRect(0, 0, m_pluginSize.width(), m_pluginSize.height()));

IntRect(IntPoint(), m_pluginSize) is shorter.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:542
&gt; +    // Load the src URL if needed.

src? srsly?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:564
&gt; +    [m_horizontalScrollbarLayer.get() removeFromSuperlayer];
&gt; +    [m_verticalScrollbarLayer.get() removeFromSuperlayer];
&gt; +    m_horizontalScrollbarLayer = 0;
&gt; +    m_verticalScrollbarLayer = 0;

This seems redundant after destroyScrollbar().

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:568
&gt; +    [m_containerLayer.get() removeFromSuperlayer];

Why is it this class’s responsibility to remove the container layer from its superlayer?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:575
&gt; +void BuiltInPDFKitView::paintControlForLayerInContext(CALayer *layer, CGContextRef ctx)

I’d call the parameter “context”.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:632
&gt; +    // This should never be called from the web process.

The comment doesn’t say why.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:645
&gt; +        // Nothing to do.

The comment doesn’t say why.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:654
&gt; +    [CATransaction setDisableActions:YES];

You don’t like property notation?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:655
&gt; +    CATransform3D transform = CATransform3DMakeScale(1.0, -1.0, 1.0);

No need for “.0”s here.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:657
&gt; +    CGFloat magnification = pluginView()-&gt;fullPagePluginScaleFactor() - [m_pdfLayerController.get() tileScaleFactor];

Subtracting scale factors is weird!

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:798
&gt; +    static bool s_isDown = false;

We don’t use the s_ prefix for function statics.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:811
&gt; +    if (!eventType)
&gt; +        return false;
&gt; +

I guess you can do that before computing the modifier flags.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:991
&gt; +    return IntRect(0, 0, m_pdfDocumentSize.width(), m_pdfDocumentSize.height());

IntRect(IntPoint(), m_pdfDocumentSize)?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:996
&gt; +    m_scrollOffset = IntSize(offset.x(), offset.y());

You can use toSize(offset).

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:997
&gt; +    [m_pdfLayerController.get() setScrollPosition:CGPointMake(offset.x(), offset.y())];

You can use IntPoint’s operator CGPoint().

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:1063
&gt; +    return IntPoint(m_scrollOffset.width(), m_scrollOffset.height());

You can use toPoint(m_scrollOffset).

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:1068
&gt; +    return IntPoint(0, 0);

You can write IntPoint().

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:1202
&gt; +

As much as I like these JSPDFDoc functions, having three copies of them in WebKit isn’t great. It would be good to move them to WebCore soon.

&gt; Source/WebKit2/WebProcess/Plugins/PluginProxy.cpp:426
&gt; +    bool isEnabled = false;

The variable name should be different.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:633
&gt; +    if (frame-&gt;document()-&gt;isPluginDocument()) {

I’d write this with an early return.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:650
&gt; +    PluginView* pluginView = pluginViewForFrame(frame);
&gt; +    
&gt; +    if (pluginView) {

You can define the local in the scope of the if statement.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:666
&gt; +    PluginView* pluginView = pluginViewForFrame(frame);
&gt; +    
&gt; +    if (pluginView)

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1580
&gt; +        PluginView* pluginView = pluginViewForFrame(frame);
&gt; +        
&gt; +        if (pluginView)

Ditto.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:600
&gt; +    bool pdfKitPluginEnabled() const { return m_pdfKitPluginEnabled; }
&gt; +    void setPDFKitPluginEnabled(bool enabled) { m_pdfKitPluginEnabled = enabled; }

Why is this not inside a PLATFORM(MAC) section?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:808
&gt; +    bool m_pdfKitPluginEnabled;

And this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741455</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 01:48:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I don’t like this new name. The BuiltInSimplePDFView class primarily inherits from Plugin. Why isn’t it called SimplePDFPlugin?

I would like that name a lot better, actually. PDFPlugin and SimplePDFPlugin?

&gt; &gt; Source/WebKit2/ChangeLog:129
&gt; &gt; +        * WebProcess/Plugins/PluginView.h:
&gt; &gt; +        (WebKit::PluginView::shouldUseFullPagePluginScaling):
&gt; &gt; +        Report whether or not the Plugin backed by this PluginView wants to handle scaling itself.
&gt; 
&gt; I think a better name for this function is one that starts with “handles”. It’s hard to come up with a name that doesn’t contain the word “page” twice if you want to express both that this is about the page scale and about full-page plug-ins. I think you could omit the full-page plug-in bit and call this handlesPageScaleFactor.

That would make it fit in with some others, too. I like it.

&gt; &gt; Source/WebKit2/ChangeLog:140
&gt; &gt; +        This PageScaleFactorDidChange prevents other code from using non-1.0 scale factors as the default.
&gt; 
&gt; What is “This PageScaleFactorDidChange”? This is really confusing.

Yeah that whole part of the change is a bit confusing. I&apos;ll investigate.

&gt; &gt; Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h:228
&gt; &gt; +// Defaults to false
&gt; &gt; +WK_EXPORT void WKPreferencesSetPDFKitPluginEnabled(WKPreferencesRef preferencesRef, bool enabled);
&gt; &gt; +WK_EXPORT bool WKPreferencesGetPDFKitPluginEnabled(WKPreferencesRef preferencesRef);
&gt; 
&gt; The convention used to be that in the header, the parameter is called preferences, not preferencesRef, but I see that it’s been broken countless times.

Yeah, that was just copy/paste. I&apos;ll fix my instance.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:52
&gt; &gt; +class BuiltInPDFKitView : public Plugin, public WebCore::ScrollableArea {
&gt; 
&gt; Not sure why this class has a name that ends with View if it’s a Plugin.

I borrowed the name from BuiltInPDFView (which I&apos;ve renamed to BuiltInSimplePDFView), which has been around for a while.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:59
&gt; &gt; +    // In-process PDFViews don&apos;t support asynchronous initialization.
&gt; 
&gt; This comment confuses me. What are “in-process PDFViews”?

Hmm, I assume it means in-WebProcess, as these are (at the moment). I didn&apos;t write that comment, but that would also explain it :)

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:67
&gt; &gt; +    // Regular plug-ins don&apos;t need access to view, but we add scrollbars to embedding FrameView for proper event handling.
&gt; 
&gt; Did you mean “to the embedding”, or maybe “to the enclosing”?

Also didn&apos;t write that comment, but I&apos;m guessing yes.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:78
&gt; &gt; +    // Plug-in methods
&gt; 
&gt; functions?

Also didn&apos;t write that comment :) Probably I&apos;ll just remove it.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:146
&gt; &gt; +    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
&gt; &gt; +    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }
&gt; 
&gt; It’s terrible that PlugIn and ScrollableArea declare these function pairs that only differ in constness.

Yeah! But I don&apos;t think I should fix that here.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:148
&gt; &gt; +    virtual bool shouldSuspendScrollAnimations() const OVERRIDE { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
&gt; 
&gt; Bizarre comment.

Not my comment, again :) All this is making me even more convinced that whatever-I-name-BuiltInPDFKitView should inherit from whatever-I-name-BuiltInSimplePDFView.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:72
&gt; &gt; +@interface PDFLayerController (PDFKitSecretsIKnowAbout)
&gt; 
&gt; Please use the convention of using the name “Details” for categories such as this one.

Ahh, someone mentioned the IKnowAbout convention earlier this week, but it looks like it&apos;s only used in one or two places. Details is fine with me.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:113
&gt; &gt; +- (void)setHUDEnabled:(BOOL)enabled;
&gt; &gt; +- (BOOL)hudEnabled;
&gt; 
&gt; It’s almost as if there is a boolean property here…

These are copied straight from the header for the SPI; I don&apos;t think I should change things like that? (except maybe I should change the SPI).

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:146
&gt; &gt; +- (id&lt;CAAction&gt;)actionForKey:(NSString *)key
&gt; &gt; +{
&gt; &gt; +    return nil;
&gt; &gt; +}
&gt; 
&gt; I’m curious: what does the superclass implementation do that we need to override here?

Crazy fades and slides and zooms and things. This is a very common approach to disabling all of CoreAnimation&apos;s implicit animation magic.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:309
&gt; &gt; +
&gt; 
&gt; Excellent code, but do we really need a third copy of it in the project? I think it should be moved down to WebCore soon.

I was wondering the same thing. Maybe it should! Where should I put it?

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:330
&gt; &gt; +    [m_pdfLayerController.get() setDelegate:m_pdfLayerControllerDelegate.get()];
&gt; &gt; +    [m_pdfLayerController.get() setParentLayer:m_contentLayer.get()];
&gt; 
&gt; Why not use property notation here?

I can do that with RetainPtr? I was having trouble. I will try again!

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:416
&gt; &gt; +    if (m_verticalScrollbarLayer &amp;&amp; m_verticalScrollbar) {
&gt; 
&gt; When is it possible for one of these to be 0 and not the other?

It isn&apos;t anymore.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:542
&gt; &gt; +    // Load the src URL if needed.
&gt; 
&gt; src? srsly?

Not my comment :\ Will fix.

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:568
&gt; &gt; +    [m_containerLayer.get() removeFromSuperlayer];
&gt; 
&gt; Why is it this class’s responsibility to remove the container layer from its super layer?

This is the class that creates, owns, and inserts the container layer into its superlayer, so why wouldn&apos;t it also be the one to remove it? Maybe container is the wrong word (it&apos;s the layer that contains the content layer which is handed to PDFKit *and* the scrollbars).

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:632
&gt; &gt; +    // This should never be called from the web process.
&gt; 
&gt; The comment doesn’t say why.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:645
&gt; &gt; +        // Nothing to do.
&gt; 
&gt; The comment doesn’t say why.

Ugh, should I fix all these comments in both BuiltInPDFKitView and BuiltInSimplePDFView, or should I leave Simple alone?

&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:657
&gt; &gt; +    CGFloat magnification = pluginView()-&gt;fullPagePluginScaleFactor() - [m_pdfLayerController.get() tileScaleFactor];
&gt; 
&gt; Subtracting scale factors is weird!

Everything about the magnification stuff is weird. But PDFKit adds the magnifyWithMagnification: value to tileScaleFactor, so if I want to get from where I am to the target (from tileScaleFactor to fullPagePluginScaleFactor), I have to subtract! This is probably wrong, but it&apos;s wrong everywhere.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:600
&gt; &gt; +    bool pdfKitPluginEnabled() const { return m_pdfKitPluginEnabled; }
&gt; &gt; +    void setPDFKitPluginEnabled(bool enabled) { m_pdfKitPluginEnabled = enabled; }
&gt; 
&gt; Why is this not inside a PLATFORM(MAC) section?
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:808
&gt; &gt; +    bool m_pdfKitPluginEnabled;
&gt; 
&gt; And this?

Excellent questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741526</commentid>
    <comment_count>12</comment_count>
      <attachid>168567</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 15:46:09 -0700</bug_when>
    <thetext>Created attachment 168567
patch with most of dan&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741527</commentid>
    <comment_count>13</comment_count>
      <attachid>168568</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 15:48:33 -0700</bug_when>
    <thetext>Created attachment 168568
attached the wrong patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741528</commentid>
    <comment_count>14</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 15:50:38 -0700</bug_when>
    <thetext>Pretend that I BuiltInPDFKitView-&gt;PDFPlugin&apos;d in the ChangeLog bug titles too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741529</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-13 15:52:06 -0700</bug_when>
    <thetext>Attachment 168568 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/cg/PDFDocumentScripting.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/cg/PDFDocumentScripting.h:43:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/cg/PDFDocumentScripting.h:43:  The parameter name &quot;initialize&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/cg/PDFDocumentScripting.h:43:  The parameter name &quot;finalize&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/cg/PDFDocumentScripting.h:44:  The parameter name &quot;pdfDocument&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 38 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741530</commentid>
    <comment_count>16</comment_count>
      <attachid>168569</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 15:55:32 -0700</bug_when>
    <thetext>Created attachment 168569
stylebot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741531</commentid>
    <comment_count>17</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-10-13 16:25:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; I don’t like this new name. The BuiltInSimplePDFView class primarily inherits from Plugin. Why isn’t it called SimplePDFPlugin?
&gt; 
&gt; I would like that name a lot better, actually. PDFPlugin and SimplePDFPlugin?

I like these names. I wonder if people would mind the loss of “built-in”. I don’t think there’s any real risk of people confusing PDFPlugin with some plug-in that’s implemented outside of WebKit.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:146
&gt; &gt; &gt; +    virtual WebCore::Scrollbar* horizontalScrollbar() const OVERRIDE { return m_horizontalScrollbar.get(); }
&gt; &gt; &gt; +    virtual WebCore::Scrollbar* verticalScrollbar() const OVERRIDE { return m_verticalScrollbar.get(); }
&gt; &gt; 
&gt; &gt; It’s terrible that PlugIn and ScrollableArea declare these function pairs that only differ in constness.
&gt; 
&gt; Yeah! But I don&apos;t think I should fix that here.

Agreed.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:148
&gt; &gt; &gt; +    virtual bool shouldSuspendScrollAnimations() const OVERRIDE { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
&gt; &gt; 
&gt; &gt; Bizarre comment.
&gt; 
&gt; Not my comment, again :) All this is making me even more convinced that whatever-I-name-BuiltInPDFKitView should inherit from whatever-I-name-BuiltInSimplePDFView.

It does look like there’s a lot of duplicated code.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:72
&gt; &gt; &gt; +@interface PDFLayerController (PDFKitSecretsIKnowAbout)
&gt; &gt; 
&gt; &gt; Please use the convention of using the name “Details” for categories such as this one.
&gt; 
&gt; Ahh, someone mentioned the IKnowAbout convention earlier this week, but it looks like it&apos;s only used in one or two places. Details is fine with me.

“&lt;framework&gt;SecretsIKnowAbout” used to be what such categories were named many years ago. It’s good to know that it’s almost phased out.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:113
&gt; &gt; &gt; +- (void)setHUDEnabled:(BOOL)enabled;
&gt; &gt; &gt; +- (BOOL)hudEnabled;
&gt; &gt; 
&gt; &gt; It’s almost as if there is a boolean property here…
&gt; 
&gt; These are copied straight from the header for the SPI; I don&apos;t think I should change things like that? (except maybe I should change the SPI).

Probably not.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:309
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Excellent code, but do we really need a third copy of it in the project? I think it should be moved down to WebCore soon.
&gt; 
&gt; I was wondering the same thing. Maybe it should! Where should I put it?

We’ll have to think about this some more. Anyway, it shouldn’t be part of this change.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:568
&gt; &gt; &gt; +    [m_containerLayer.get() removeFromSuperlayer];
&gt; &gt; 
&gt; &gt; Why is it this class’s responsibility to remove the container layer from its super layer?
&gt; 
&gt; This is the class that creates, owns, and inserts the container layer into its superlayer, so why wouldn&apos;t it also be the one to remove it? Maybe container is the wrong word (it&apos;s the layer that contains the content layer which is handed to PDFKit *and* the scrollbars).

I must have missed the place where m_containerLayer gets inserted into its superlayer.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:632
&gt; &gt; &gt; +    // This should never be called from the web process.
&gt; &gt; 
&gt; &gt; The comment doesn’t say why.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:645
&gt; &gt; &gt; +        // Nothing to do.
&gt; &gt; 
&gt; &gt; The comment doesn’t say why.
&gt; 
&gt; Ugh, should I fix all these comments in both BuiltInPDFKitView and BuiltInSimplePDFView, or should I leave Simple alone?

Leave Simple alone!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741532</commentid>
    <comment_count>18</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-13 16:48:36 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; I don’t like this new name. The BuiltInSimplePDFView class primarily inherits from Plugin. Why isn’t it called SimplePDFPlugin?
&gt; &gt; 
&gt; &gt; I would like that name a lot better, actually. PDFPlugin and SimplePDFPlugin?
&gt; 
&gt; I like these names. I wonder if people would mind the loss of “built-in”. I don’t think there’s any real risk of people confusing PDFPlugin with some plug-in that’s implemented outside of WebKit.

Seems unlikely. Alexey may have a comment.

&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.h:148
&gt; &gt; &gt; &gt; +    virtual bool shouldSuspendScrollAnimations() const OVERRIDE { return false; } // If we return true, ScrollAnimatorMac will keep cycling a timer forever, waiting for a good time to animate.
&gt; &gt; &gt; 
&gt; &gt; &gt; Bizarre comment.
&gt; &gt; 
&gt; &gt; Not my comment, again :) All this is making me even more convinced that whatever-I-name-BuiltInPDFKitView should inherit from whatever-I-name-BuiltInSimplePDFView.
&gt; 
&gt; It does look like there’s a lot of duplicated code.

Perhaps I should try it and see how messy things get.

&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:309
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; 
&gt; &gt; &gt; Excellent code, but do we really need a third copy of it in the project? I think it should be moved down to WebCore soon.
&gt; &gt; 
&gt; &gt; I was wondering the same thing. Maybe it should! Where should I put it?
&gt; 
&gt; We’ll have to think about this some more. Anyway, it shouldn’t be part of this change.

Heh, whoops. I moved it into &quot;PDFDocumentScripting&quot; (a horrible name, I think), in WebCore, right next to PDFDocumentImage (not sure this is the right place, since this is in graphics). I can undo that.

&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltInPDFKitView.mm:568
&gt; &gt; &gt; &gt; +    [m_containerLayer.get() removeFromSuperlayer];
&gt; &gt; &gt; 
&gt; &gt; &gt; Why is it this class’s responsibility to remove the container layer from its super layer?
&gt; &gt; 
&gt; &gt; This is the class that creates, owns, and inserts the container layer into its superlayer, so why wouldn&apos;t it also be the one to remove it? Maybe container is the wrong word (it&apos;s the layer that contains the content layer which is handed to PDFKit *and* the scrollbars).
&gt; 
&gt; I must have missed the place where m_containerLayer gets inserted into its superlayer.

Crap, you&apos;re right :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741558</commentid>
    <comment_count>19</comment_count>
      <attachid>168579</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-14 00:55:21 -0700</bug_when>
    <thetext>Created attachment 168579
Undo PDFDocumentScripting changes, and PDFPlugin can inherit from SimplePDFPlugin and be a lot smaller.

Dan, could you take another peek at some point?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741559</commentid>
    <comment_count>20</comment_count>
      <attachid>168580</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-14 00:59:35 -0700</bug_when>
    <thetext>Created attachment 168580
remove more remnants of pdfdocumentscripting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741574</commentid>
    <comment_count>21</comment_count>
      <attachid>168580</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-14 10:08:52 -0700</bug_when>
    <thetext>Comment on attachment 168580
remove more remnants of pdfdocumentscripting

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

The only serious issue is the one in PDFPlugin::destroyScrollbar(). r=me if you fix that (or I’m wrong and it’s not an issue), but you’re welcome to address my many other comments before landing.

&gt; Source/WebKit2/ChangeLog:47
&gt; +        it allows us to have a preference to toggle between UIProcess&apos; PDFView and PDFPlugin).

UIProcess’s

&gt; Source/WebKit2/ChangeLog:126
&gt; +        (WebKit::PDFPlugin::handleMouseEvent): Construct a custom NSEvent from the given WebMouseEvent and hand it to PDFLayerController. Mouse coordinates are in terms of m_contentLayer&apos;s origin.
&gt; +        (WebKit::PDFPlugin::handleKeyboardEvent): Construct a custom NSEvent from the given WebKeyboardEvent and hand it to PDFLayerController. PDFLayerController currently only handles keyDown events.

NSEvent documentation uses the term “custom event” to describe an instance returned from +otherEventWithType:location:modifierFlags:timestamp:windowNumber:context:subtype:data1:data2:. The events you’re creating here are normal mouse events and keyboard events.

&gt; Source/WebKit2/ChangeLog:130
&gt; +        (WebKit::PDFPlugin::isEditingCommandEnabled): The &apos;copy&apos; command should be enabled if there is
&gt; +        the user has selected a part of the PDF. The &apos;select all&apos; command should always be enabled.

Typo: “there is the user”.

&gt; Source/WebKit2/PluginProcess/PluginControllerProxy.cpp:537
&gt; +void PluginControllerProxy::handlesPageScaleFactor(bool&amp; enabled)
&gt; +{
&gt; +    enabled = m_plugin-&gt;handlesPageScaleFactor();
&gt; +}

I’d call the boolean something else.

&gt; Source/WebKit2/PluginProcess/PluginControllerProxy.h:142
&gt; +    void isEditingCommandEnabled(const String&amp; commandName, bool&amp; handled);
&gt; +    void handlesPageScaleFactor(bool&amp; enabled);

You can drop the parameter names here.

&gt; Source/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h:211
&gt; +    virtual bool handleEditingCommand(const String&amp; commandName, const String&amp; argument);
&gt; +    virtual bool isEditingCommandEnabled(const String&amp;);
&gt; +    
&gt; +    virtual bool handlesPageScaleFactor();
&gt; +

OVERRIDE OVERRIDE OVERRIDE?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:59
&gt; +    // In-WebProcess plugins don&apos;t support asynchronous initialization.
&gt; +    virtual bool isBeingAsynchronouslyInitialized() const { return false; }

Why do you need to override this? The base class also returns false.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:78
&gt; +    virtual void geometryDidChange(const WebCore::IntSize&amp; pluginSize, const WebCore::IntRect&amp; clipRect, const WebCore::AffineTransform&amp; pluginToRootViewTransform)OVERRIDE;

Missing space beforeOVERRIDE.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:91
&gt; +    JSObjectRef makeJSPDFDoc(JSContextRef);
&gt; +    static JSValueRef jsPDFDocPrint(JSContextRef, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);

These are not implemented in PDFPlugin.mm. Where are they implemented?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.h:97
&gt; +    RetainPtr&lt;CALayer *&gt; m_containerLayer;
&gt; +    RetainPtr&lt;CALayer *&gt; m_contentLayer;
&gt; +    RetainPtr&lt;CALayer *&gt; m_horizontalScrollbarLayer;
&gt; +    RetainPtr&lt;CALayer *&gt; m_verticalScrollbarLayer;
&gt; +    RetainPtr&lt;CALayer *&gt; m_scrollCornerLayer;

Should be RetainPtr&lt;CALayer&gt;.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:106
&gt; +- (bool)keyDown:(NSEvent *)event;

Strange that this returns a bool rather than a BOOL.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:297
&gt; +    scrollbar = 0;

This just clears the local variable. Did you mean scrollbar to be a reference? I think you did.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:311
&gt; +    pluginView()-&gt;setPageScaleFactor([m_pdfLayerController.get() tileScaleFactor], IntPoint(0, 0));

IntPoint() will do.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:480
&gt; +    static bool mouseButtonIsDown = false;

No need to initialize a static to false.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:561
&gt; +    if (commandName == &quot;copy&quot; &amp;&amp; [m_pdfLayerController.get() currentSelection])
&gt; +        return true;

You always want to return here if commandName == &quot;copy&quot;, not continue to check commandName against other strings:

    if (commandName == &quot;copy&quot;)
        return [m_pdfLayerController.get() currentSelection];

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1110
&gt; +    

!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741575</commentid>
    <comment_count>22</comment_count>
      <attachid>168580</attachid>
    <who name="">mitz</who>
    <bug_when>2012-10-14 10:24:19 -0700</bug_when>
    <thetext>Comment on attachment 168580
remove more remnants of pdfdocumentscripting

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

Added another important comment (about clearing the delegate)

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:228
&gt; +    m_pdfLayerController.get().delegate = m_pdfLayerControllerDelegate.get();

Even though PDFLayerController (strangely) retains its delegate, you should clear the delegate in destroy() (or in the destructor?), because WKPDFLayerControllerDelegate has a bare pointer to PDFPlugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741593</commentid>
    <comment_count>23</comment_count>
      <attachid>168580</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-14 13:49:37 -0700</bug_when>
    <thetext>Comment on attachment 168580
remove more remnants of pdfdocumentscripting

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

&gt;&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:297
&gt;&gt; +    scrollbar = 0;
&gt; 
&gt; This just clears the local variable. Did you mean scrollbar to be a reference? I think you did.

Whoops, I did, and it was, but I screwed that up during the inherit-from-SimplePDFPlugin mess yesterday.

&gt;&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:480
&gt;&gt; +    static bool mouseButtonIsDown = false;
&gt; 
&gt; No need to initialize a static to false.

Hmm, I didn&apos;t know that.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1110
&gt;&gt; +    
&gt; 
&gt; !

!

Thanks, Dan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741597</commentid>
    <comment_count>24</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-10-14 14:03:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/131271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749095</commentid>
    <comment_count>25</comment_count>
      <attachid>168580</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2012-10-23 16:08:07 -0700</bug_when>
    <thetext>Comment on attachment 168580
remove more remnants of pdfdocumentscripting

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

&gt; Source/WebKit2/Configurations/FeatureDefines.xcconfig:123
&gt; +ENABLE_PDFKIT_PLUGIN = $(ENABLE_PDFKIT_PLUGIN_$(REAL_PLATFORM_NAME));
&gt; +ENABLE_PDFKIT_PLUGIN_macosx = $(ENABLE_PDFKIT_PLUGIN_macosx_$(TARGET_MAC_OS_X_VERSION_MAJOR));
&gt; +ENABLE_PDFKIT_PLUGIN_macosx_1070 = ;
&gt; +ENABLE_PDFKIT_PLUGIN_macosx_1080 = ;
&gt; +ENABLE_PDFKIT_PLUGIN_macosx_1090 = ENABLE_PDFKIT_PLUGIN;

Just a heads up, we try to keep all JavaScriptCore / WebCore / WebKit / WebKit2 FeatureDefines.xcconfig files in sync. That prevents accidents where an ENABLE flag is enabled while building one project but not the others. Even if the feature define is only used in one project, it is easier to keep the files identical then have mismatches.

I&apos;ll add this to the other FeatureDefine files in some clean-up I&apos;m doing. Ideally this would be more automatically enforced somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749192</commentid>
    <comment_count>26</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-23 18:25:34 -0700</bug_when>
    <thetext>Why don&apos; t we just share one FeatureDefines file between projects?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168484</attachid>
            <date>2012-10-12 14:27:29 -0700</date>
            <delta_ts>2012-10-12 14:37:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pdf.diff</filename>
            <type>text/plain</type>
            <size>185130</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZmQyY2Q3Ny4uOWE2YzcxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTI4NSwxMSArMjg1LDE0IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
NWNvbnRlbnRzUmVzaXplZEV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTZoYW5kbGVX
aGVlbEV2ZW50RVJLTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTd3aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVB
cmVhMTl3aWxsU3RhcnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
OWludmFsaWRhdGVTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFUktOU183SW50UmVjdEUKK19fWk5L
N1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjFtb3VzZUVudGVyZWRTY3JvbGxiYXJFUE5TXzlTY3Jv
bGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjJpbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjNkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyNHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZUVOU18yMVNjcm9sbGJhck92ZXJsYXlTdHls
ZUUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyNWRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjd3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCitfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMjdub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWRFUktOU184SW50UG9pbnRFCiBf
X1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjhzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxz
RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI5d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhNnNjcm9sbEVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFy
aXR5RWYKQEAgLTMyMSw2ICszMjQsOCBAQCBfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZwogX19aTjdX
ZWJDb3JlMTRzZXRNZXRhZGF0YVVSTEVSTjNXVEY2U3RyaW5nRVJLUzFfUzRfCiBfX1pON1dlYkNv
cmUxNUFmZmluZVRyYW5zZm9ybTVmbGlwWUV2CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9y
bTVzY2FsZUVkCitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKK19fWk5L
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTZ5U2NhbGVFdgogX19aTjdXZWJDb3JlMTVBZmZpbmVU
cmFuc2Zvcm04bXVsdGlwbHlFUktTMF8KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOXRy
YW5zbGF0ZUVkZAogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm1DMUVkZGRkZGQKQEAgLTM1
MSw2ICszNTYsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dF
dgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xv
ckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0Rmls
bEdyYWRpZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQxOHNldFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDE5c2V0SXNDQUxheWVyQ29udGV4dEViCiBfX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDIwZW5kVHJhbnNwYXJlbmN5TGF5ZXJFdgogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQyMHNldFNob3VsZFNtb290aEZvbnRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjFzZXRDb21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKQEAg
LTQ2Nyw2ICs0NzMsOCBAQCBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2
U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43
V2ViQ29yZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVQTlNfMTVET01XcmFwcGVy
V29ybGRFCiBfX1pON1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhEb2N1
bWVudEUKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE3Z2VuZXJhbFBhc3RlYm9hcmRFdgorX19a
TjdXZWJDb3JlMTBQYXN0ZWJvYXJkMTR3cml0ZVBsYWluVGV4dEVSS04zV1RGNlN0cmluZ0VOUzBf
MThTbWFydFJlcGxhY2VPcHRpb25FCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEw
dW5pcXVlTmFtZUV2CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9y
VHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNz
dHJpbmdGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhOGE5NzYuLjllMmE0MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE0NDAsNyArMTQ0MCw3IEBACiAJCTRBRDAxNzNEMTI3RTgyODYwMDE1MDM1RiAvKiBKU0hUTUxP
dXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QUQwMTczQjEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oICov
OyB9OwogCQk0QUYxQUQzRTEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRjFB
RDNDMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwICovOyB9Owog
CQk0QUYxQUQzRjEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUYxQUQzRDEzRkQy
M0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdG
IC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IH07CisJ
CTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0Yg
LyogUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRCMjcwOTgzMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi87IH07CiAJCTRCMzA0M0M3MEFFMDM3
MDMwMEE4MjY0NyAvKiBTb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEIzMDQzQzYwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggKi87IH07CiAJ
CTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M4MEFFMDM3MUQwMEE4MjY0NyAv
KiBTb3VuZE1hYy5tbSAqLzsgfTsKQEAgLTIyMjc3LDYgKzIyMjc3LDcgQEAKIAkJCWlzYSA9IFBC
WEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAorCQkJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REIxNTA1RjA3
NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRTFC
MUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDU3NSw3ICsyNDU3Niw2IEBACiAJCQkJRkQzMTYwQTMxMkIwMjZGNzAwQzFBMzU5IC8qIFBh
bm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NkFDMTMwREQ3QUQ1QzAwNDE1RjM0IC8qIFBh
cnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VG
MjY5IC8qIFBhc3N3b3JkSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0QjI3MDhDNzBB
RjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkw
NTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjI3NTM1ODAwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXgg
Yzc0NGFmNi4uOTMwY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
cihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0IHsgfQogCiAgICAgLy8gQ29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdl
ZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcgdmlldy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291
cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXgg
Y2U0MWQzMC4uM2Y0MGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTExNiw2ICsxMTYsMTEgQEAgRU5BQkxF
X05PVElGSUNBVElPTlNfbWFjb3N4XzEwNzAgPSA7CiBFTkFCTEVfTk9USUZJQ0FUSU9OU19tYWNv
c3hfMTA4MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxFX05PVElGSUNBVElPTlNfbWFj
b3N4XzEwOTAgPSBFTkFCTEVfTk9USUZJQ0FUSU9OUzsKIEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlf
QVBJID0gOworRU5BQkxFX1BERktJVF9QTFVHSU4gPSAkKEVOQUJMRV9QREZLSVRfUExVR0lOXyQo
UkVBTF9QTEFURk9STV9OQU1FKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3ggPSAkKEVO
QUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
KSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA3MCA9IDsKK0VOQUJMRV9QREZLSVRf
UExVR0lOX21hY29zeF8xMDgwID0gOworRU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XzEwOTAg
PSBFTkFCTEVfUERGS0lUX1BMVUdJTjsKIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UID0gRU5BQkxF
X1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7CkBAIC0xNDMsNCAr
MTQ4LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVOQUJM
RV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVT
ID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxf
TUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9O
X0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5H
KSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJM
RV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAk
KEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19T
VElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfVEVY
VF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RB
U0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRB
X1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklD
RV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9S
WV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdI
X0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1M
RVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChF
TkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklD
QVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVE
SU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVO
QUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01J
Q1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1Jf
Q09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gp
ICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
UUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJM
RV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVY
VF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVf
VE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVP
KSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJ
TykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJ
REdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9E
RUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NI
QU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBP
U0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAk
KEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVU
SU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxF
X0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NT
UzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJM
RV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxF
X0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJ
UkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9D
QVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJM
RV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1F
X1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVF
Q0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkg
JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJ
TUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dF
UikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9O
T1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9X
RUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVS
KSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFf
U1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5B
QkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJ
R0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFH
RV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJPR1JF
U1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5B
QkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxF
X1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQo
RU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhU
X05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJM
RV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChF
TkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQo
RU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktF
UlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDMxYTVkNjEuLjBjNjE3ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHAKQEAgLTUyMSw2ICs1MjEsMjEgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmQK
ICAgICBoYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVu
dCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBib29s
JiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+aGFuZGxlRWRpdGluZ0NvbW1h
bmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKK30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
LCBib29sJiBlbmFibGVkKQoreworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+aXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQorICAgIAordm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyhib29sJiBlbmFibGVkKQorewor
ICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCk7
Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdpbigpCiB7
CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCBiNGE0MDY3Li4z
MzIxNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2lu
Q29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBib29sJiBoYW5kbGVk
KTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jiwg
Ym9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktl
eWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhhbmRsZUVkaXRpbmdDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIGJv
b2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBzaG91bGRVc2VGdWxs
UGFnZVBsdWdpblNjYWxpbmcoYm9vbCYgZW5hYmxlZCk7CiAgICAgdm9pZCBwYWludEVudGlyZVBs
dWdpbigpOwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tp
bmdTdG9yZUhhbmRsZSk7CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggZDdjMmQwMi4uOTQ4ZWI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVz
c2FnZXMuaW4KQEAgLTczLDYgKzczLDE1IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xsZXJQ
cm94eSB7CiAKICAgICAjIFNlbnQgd2hlbiBhIGtleWJvYXJkIHNob3VsZCBiZSBwcm9jZXNzZWQu
CiAgICAgSGFuZGxlS2V5Ym9hcmRFdmVudChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQga2V5Ym9h
cmRFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKKyAgICAKKyAgICAjIFNlbnQgd2hlbiBhbiBlZGl0
aW5nIGNvbW1hbmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICBIYW5kbGVFZGl0aW5nQ29tbWFu
ZChXVEY6OlN0cmluZyBjb21tYW5kTmFtZSwgV1RGOjpTdHJpbmcgYXJndW1lbnQpIC0+IChib29s
IGhhbmRsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdh
bnRzIHRvIGVuYWJsZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgIElzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVkKTsK
KyAgICAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBvdmVy
cmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICBTaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmco
KSAtPiAoYm9vbCBlbmFibGVkKTsKIAogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZvY3Vz
IGNoYW5nZXMuCiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAppbmRleCAxZTNjYTYzLi5hMTA3ZjllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTEzNyw2ICsx
MzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhTY3JlZW5Gb250U3Vic3RpdHV0
aW9uRW5hYmxlZCwgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQsIEJvb2wsIGJvb2wsIERF
RkFVTFRfU0NSRUVOX0ZPTlRfU1VCU1RJVFVUSU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhDb29r
aWVFbmFibGVkLCBjb29raWVFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFjcm8o
UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgcGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgQm9v
bCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhQREZLaXRQbHVnaW5FbmFibGVkLCBwZGZLaXRQ
bHVnaW5FbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBGT1Jf
RUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA4
MDAzMGFjLi45OTUyZjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC00Myw2ICs0Myw3IEBAIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKQogICAg
ICwgbnNVUkxDYWNoZURpc2tDYXBhY2l0eSgwKQogICAgICwgc2hvdWxkRm9yY2VTY3JlZW5Gb250
U3Vic3RpdHV0aW9uKGZhbHNlKQogICAgICwgc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJl
c0J5RGVmYXVsdChmYWxzZSkKKyAgICAsIHNob3VsZFVzZVBERktpdFBsdWdpbihmYWxzZSkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAsIHNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMoZmFsc2Up
CiAjZW5kaWYKQEAgLTY2LDcgKzY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb24KICAgICBl
bmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzKTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZCk7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JTRW5hYmxlZCk7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlKG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbik7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlRW51bShjYWNoZU1vZGVsKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hv
dWxkVHJhY2tWaXNpdGVkTGlua3MpOwogICAgIGVuY29kZXItPmVuY29kZShzaG91bGRBbHdheXNV
c2VDb21wbGV4VGV4dENvZGVQYXRoKTsKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyKSBjb24KICAgICBlbmNvZGVyLT5lbmNvZGUodWlQcm9jZXNzQnVuZGxlUmVzb3VyY2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkRm9yY2VTY3JlZW5G
b250U3Vic3RpdHV0aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkRW5hYmxlS2Vybmlu
Z0FuZExpZ2F0dXJlc0J5RGVmYXVsdCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHNob3VsZFVzZVBE
RktpdFBsdWdpbik7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNo
b3VsZFBhaW50TmF0aXZlQ29udHJvbHMpOwogICAgIGVuY29kZXItPmVuY29kZShjZlVSTENhY2hl
UGF0aCk7CkBAIC0xNDcsOCArMTQ4LDYgQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJl
cHJlc2VudGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlRW51bShwYXJhbWV0ZXJzLmNhY2hlTW9kZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5zaG91bGRUcmFja1Zpc2l0ZWRM
aW5rcykpCkBAIC0xOTcsNiArMTk2LDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFVzZVBERktp
dFBsdWdpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFBhaW50TmF0aXZlQ29udHJv
bHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAwZDU0M2ZhLi5kYzVlMzE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKQEAgLTY5LDkgKzY5LDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNw
bGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NP
UlNFbmFibGVkOwogCi0gICAgLy8gTUlNRSB0eXBlcyBmb3Igd2hpY2ggdGhlIFVJIHByb2Nlc3Mg
d2lsbCBoYW5kbGUgc2hvd2luZyB0aGUgZGF0YS4KLSAgICBWZWN0b3I8U3RyaW5nPiBtaW1lVHlw
ZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0KICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWw7
CiAgICAgYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsKIApAQCAtMTEzLDYgKzExMCw4IEBA
IHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGJvb2wgc2hvdWxk
Rm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwogICAgIGJvb2wgc2hvdWxkRW5hYmxlS2Vybmlu
Z0FuZExpZ2F0dXJlc0J5RGVmYXVsdDsKKworICAgIGJvb2wgc2hvdWxkVXNlUERGS2l0UGx1Z2lu
OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIFN0cmluZyBjZlVSTENhY2hlUGF0aDsKICAgICB1
aW50NjRfdCBjZlVSTENhY2hlRGlza0NhcGFjaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMuaAppbmRleCA0NGMzNzVjLi5jOWExZTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaApAQCAtMzMsNiArMzMsMTAgQEAgQ2xhc3MgY2xh
c3NGcm9tUERGS2l0KE5TU3RyaW5nICpjbGFzc05hbWUpOwogQ2xhc3MgcGRmQW5ub3RhdGlvbkxp
bmtDbGFzcygpOwogQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwogCisjaWYgRU5BQkxFKFBERktJ
VF9QTFVHSU4pCitDbGFzcyBwZGZMYXllckNvbnRyb2xsZXJDbGFzcygpOworI2VuZGlmCisKIH0K
IAogI2VuZGlmIC8vIFBERktpdEltcG9ydHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Q
REZLaXRJbXBvcnRzLm1tCmluZGV4IDYyMzRhODMuLmJjY2ZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMubW0KQEAgLTU0LDUgKzU0LDE0IEBAIENsYXNzIHBk
ZkRvY3VtZW50Q2xhc3MoKQogICAgIEFTU0VSVChwZGZEb2N1bWVudENsYXNzKTsKICAgICByZXR1
cm4gcGRmRG9jdW1lbnRDbGFzczsKIH0KKyAgICAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
K0NsYXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcGRm
TGF5ZXJDb250cm9sbGVyQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZMYXllckNvbnRyb2xs
ZXIiKTsKKyAgICBBU1NFUlQocGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOworICAgIHJldHVybiBw
ZGZMYXllckNvbnRyb2xsZXJDbGFzczsKK30KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWNjZTIwNS4uN2Q5
NWZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVy
ZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzLmNwcApAQCAtOTMzLDMgKzkzMywxMyBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5T
bmFwc2hvdHRpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7CiAg
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJs
ZWQoKTsKIH0KKwordm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0UERGS2l0UGx1Z2luRW5hYmxlZChlbmFibGVkKTsKK30KKwor
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5w
ZGZLaXRQbHVnaW5FbmFibGVkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGMwMjYxMWMuLmEzNzY3MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oCkBAIC0yMjMsNiArMjIzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
CiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29va2llRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzLCBib29sIGVuYWJsZWQpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldENvb2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAK
Ky8vIERlZmF1bHRzIHRvIGZhbHNlCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0UERG
S2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVu
YWJsZWQpOworV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBERktpdFBsdWdpbkVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7CisKIFdLX0VYUE9SVCB2b2lkIFdL
UHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlkZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAyZTBjOTRmLi4xMWI5NDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtNDYsNyArNDYs
MTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1B
QykKLSNpbmNsdWRlICJCdWlsdEluUERGVmlldy5oIgorI2luY2x1ZGUgIkJ1aWx0SW5TaW1wbGVQ
REZWaWV3LmgiCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiQnVpbHRJblBE
RktpdFZpZXcuaCIKKyNlbmRpZgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtMzA1LDggKzMwOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdp
bnModWludDY0X3QgcmVxdWVzdElELCBQYXNzT3duUHRyPFZlY3RvcjxQbAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNl
ZCB3aGVuIGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KICAgICAvLyBOT1RFOiBUaGlzIGhh
cyB0byBiZSBkb25lIG9uIHRoZSBtYWluIHRocmVhZCBhcyBpdCBjYWxscyBsb2NhbGl6ZWRTdHJp
bmcoKS4KLSAgICBpZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkKLSAgICAgICAgcGx1
Z2lucy0+YXBwZW5kKEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkpOworICAgIGlmICghbV9j
b250ZXh0LT5vbWl0UERGU3VwcG9ydCgpKSB7CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisg
ICAgICAgIHBsdWdpbnMtPmFwcGVuZChCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luSW5mbygpKTsK
KyNlbmRpZgorICAgICAgICBwbHVnaW5zLT5hcHBlbmQoQnVpbHRJblNpbXBsZVBERlZpZXc6OnBs
dWdpbkluZm8oKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpEaWRHZXRQbHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5
ODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1t
CkBAIC03NywxMiArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFt
ZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21p
dFBERlN1cHBvcnQoKSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGlu
IHRoZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVz
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9u
LmFwcGVuZFJhbmdlKG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0K
ICAgICBwYXJhbWV0ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBwcm9jZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBj
YWNoZVBhdGgoQWRvcHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQwYjBiY2YuLjU4ZmY5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUy
OTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEz
M0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURG
MTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYx
NjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87
IH07CisJCTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcwRDBFMTYy
MkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLzsgfTsKIAkJMzEwOTk5NzMx
NDZDNzVBMjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAyOURF
QjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZDOUUz
RDAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdl
Yk5vdGlmaWNhdGlvbkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEg
LyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0
aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtOTM0LDcgKzkzNSw3IEBACiAJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQ
REZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi87IH07
CiAJCUUxOTY3RTM2MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblBy
b2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nl
c3Muc2IgKi87IH07CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2Vi
UHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICov
OyB9OwotCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk5ODc1QzE0MkJG
Qzk3MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gKi87IH07CisJCUUxOTk4NzVFMTQyQzA0
NTQwMEJCMkRFNyAvKiBCdWlsdEluU2ltcGxlUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBC
dWlsdEluU2ltcGxlUERGVmlldy5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRG
IC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5n
LmggKi87IH07CiAJCUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5n
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3
MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07CiAJCUUxQUVB
MjJGMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQUVBMjJEMTQ2ODdC
REIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLzsgfTsKQEAgLTEz
MzMsNiArMTMzNCw4IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3Jv
dXBQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8q
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8q
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRDg3MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnVpbHRJblBERktpdFZpZXcuaDsgcGF0
aCA9IFBERi9CdWlsdEluUERGS2l0Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDg3MEQwRTE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluUERGS2l0Vmlldy5tbTsg
cGF0aCA9IFBERi9CdWlsdEluUERGS2l0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlv
bkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3Rp
ZmljYXRpb25DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJDMEM0
OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDY2LDggKzIwNjksOCBAQAogCQlFMTk1ODJENDE1M0ND
MDUzMDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBERktpdEltcG9ydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdp
blByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5QbHVn
aW5Qcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFC
NUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCdWlsdEluUERGVmlldy5oOyBwYXRoID0gUERGL0J1
aWx0SW5QREZWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVDMTQy
QkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1tOyBwYXRoID0gUERGL0J1aWx0SW5Q
REZWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QTE0MkJGOUI4
MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQnVpbHRJblNpbXBsZVBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluU2lt
cGxlUERGVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QzE0MkJG
Qzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluU2ltcGxlUERGVmlldy5tbTsgcGF0aCA9IFBE
Ri9CdWlsdEluU2ltcGxlUERGVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0
cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0
ZWRTdHJpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJEMTQ2ODdC
REIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODk3LDggKzM5MDAsMTAgQEAKIAkJRTE5OTg3NUIx
NDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3
Lm1tICovLAotCQkJCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5o
ICovLAorCQkJCTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5o
ICovLAorCQkJCTJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5t
bSAqLywKKwkJCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZp
ZXcubW0gKi8sCisJCQkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFBERjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC00ODEyLDYgKzQ4MTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTVENTE4NDU1MTNCQ0Y5Q0MwMEM3RkY0QSAvKiBBUElD
bGllbnRUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEz
RjIwIC8qIEJ1aWx0SW5QREZLaXRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkx
NDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNE
NjEwNTEzQTdGMDNBMDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFBRjBDNEIxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00ODI4LDcgKzQ4MzQsNyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMw
MENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQx
MkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQzQxQUM4MTI2M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5T
aW1wbGVQREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0
OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1
NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlG
QjcxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggZTI4Yzc4ZC4uYjY2YjJkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwCkBAIC05MTMsNiArOTEzLDIxIEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRF
dmVudCkKICAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZl
bnQpOwogfQogCitib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitib29sIE5ldHNjYXBlUGx1Z2luOjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxp
bmcoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0
Rm9jdXMoYm9vbCBoYXNGb2N1cykKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uaAppbmRleCA2MWUyYmI3Li5kNTMzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uaApAQCAtMjAzLDYgKzIwMywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBh
Z2VQbHVnaW5TY2FsaW5nKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzEyN2FjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGS2l0Vmll
dy5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCdWlsdElu
UERGS2l0Vmlld19oCisjZGVmaW5lIEJ1aWx0SW5QREZLaXRWaWV3X2gKKworI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9B
ZmZpbmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJl
ZjsKKworT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUERGTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBzdHJ1Y3Qg
UGx1Z2luSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBsdWdpblZpZXc7
CitjbGFzcyBXZWJGcmFtZTsKKworY2xhc3MgQnVpbHRJblBERktpdFZpZXcgOiBwdWJsaWMgUGx1
Z2luLCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEJ1aWx0SW5QREZLaXRWaWV3PiBjcmVhdGUoV2ViRnJhbWUqKTsKKyAgICB+
QnVpbHRJblBERktpdFZpZXcoKTsKKworICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBs
dWdpbkluZm8oKTsKKworICAgIC8vIEluLXByb2Nlc3MgUERGVmlld3MgZG9uJ3Qgc3VwcG9ydCBh
c3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVhbCBib29sIGlzQmVpbmdBc3lu
Y2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAg
ICB2b2lkIHBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKiwgQ0dDb250ZXh0
UmVmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCdWlsdEluUERGS2l0VmlldyhXZWJGcmFt
ZSopOworCisgICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3
LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVy
IGV2ZW50IGhhbmRsaW5nLgorICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKKyAgICBjb25z
dCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnMoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xs
YmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3Jv
bGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgYWRkQXJjaGl2
ZVJlc291cmNlKCk7CisgICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKKyAgICB2b2lkIGNh
bGN1bGF0ZVNpemVzKCk7CisKKyAgICAvLyBQbHVnLWluIG1ldGhvZHMKKyAgICB2aXJ0dWFsIGJv
b2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ry
b3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgp
OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNUcmFuc3BhcmVudCgpOworICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRz
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBS
ZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFu
c2Zvcm0pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7CisgICAgdmly
dHVhbCB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpOworICAg
IHZpcnR1YWwgdm9pZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0Nh
bmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRf
dCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpL
VVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9k
aWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMs
IGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGlu
dCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2
NF90IHN0cmVhbUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBz
dHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJl
YW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVp
bnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RG
OjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURp
ZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBt
YW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2Fy
ZEV2ZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygpIE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOworICAg
IHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB3
aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNT
Y2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZENv
bXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpIE9WRVJSSURFOworCisgICAg
dmlydHVhbCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKTsKKworICAgIHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZv
clByaW50aW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQorCisg
ICAgLy8gU2Nyb2xsYWJsZUFyZWEgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
U2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZp
c2libGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lk
dGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVu
dHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2hvcml6b250
YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0
cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIs
IHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1hdGUuCisgICAgdmlydHVhbCB2b2lkIHNj
cm9sbGJhclN0eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJS
SURFOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3Qp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIHBhcmVudFBvaW50KSBjb25zdCBPVkVSUklERTsKKworICAgIEpTT2JqZWN0UmVmIG1ha2VK
U1BERkRvYyhKU0NvbnRleHRSZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJp
bnQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGx1Z2lu
U2l6ZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290Vmlld1RvUGx1Z2luVHJh
bnNmb3JtOworCisgICAgV2ViQ29yZTo6S1VSTCBtX3NvdXJjZVVSTDsKKworICAgIFN0cmluZyBt
X3N1Z2dlc3RlZEZpbGVuYW1lOworICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2Rh
dGFCdWZmZXI7CisKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Cisg
ICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOworICAgIFdlYkNvcmU6Oklu
dFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCisK
KyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKworICAg
IFdlYkZyYW1lKiBtX2ZyYW1lOworCisgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fY29u
dGFpbmVyTGF5ZXI7CisgICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fY29udGVudExheWVy
OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX2hvcml6b250YWxTY3JvbGxiYXJMYXll
cjsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVy
OworICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3Njcm9sbENvcm5lckxheWVyOworICAg
IFJldGFpblB0cjxQREZMYXllckNvbnRyb2xsZXI+IG1fcGRmTGF5ZXJDb250cm9sbGVyOworCisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKyAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX2xhc3RNb3VzZVBvaW50OworICAgIAorICAgIFJldGFpblB0cjxXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlPiBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2Vu
ZGlmIC8vIEJ1aWx0SW5QREZLaXRWaWV3X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZLaXRWaWV3Lm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZTk3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZLaXRWaWV3Lm1tCkBA
IC0wLDAgKzEsMTIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoUERG
S0lUX1BMVUdJTikKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJCdWlsdEluUERGS2l0
Vmlldy5oIgorCisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3
LmgiCisjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbXBvcnQgIldlYkV2ZW50LmgiCisj
aW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0
IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291
cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVFRQSGVh
ZGVyTWFwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJvYXJkLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxP
YmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKworQHByb3RvY29sIFBERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlIDxOU09iamVjdD4KKworLSAodm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjooQ0dQb2lu
dCkgbmV3UG9zaXRpb247CistICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6KE5TQXJyYXkg
KikgaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZpbml0
aW9uRm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9p
bnQ6KENHUG9pbnQpcG9pbnQ7CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICop
c3RyaW5nOworLSAodm9pZClvcGVuV2l0aFByZXZpZXc7CistICh2b2lkKXNhdmVUb1BERjsKKwor
QGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0CitAZW5kCisK
K0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIChQREZLaXRTZWNyZXRzSUtub3dBYm91dCkK
KworQHByb3BlcnR5IChyZXRhaW4pIENBTGF5ZXIgKnBhcmVudExheWVyOworQHByb3BlcnR5IChy
ZXRhaW4pIFBERkRvY3VtZW50ICpkb2N1bWVudDsKK0Bwcm9wZXJ0eSAocmV0YWluKSBpZDxQREZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7CisKKy0gKHZvaWQpc2V0RnJhbWVTaXpl
OihDR1NpemUpc2l6ZTsKKworLSAodm9pZClzZXREaXNwbGF5TW9kZTooaW50KW1vZGU7CistICh2
b2lkKXNldERpc3BsYXlzUGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOworCistIChDR0Zsb2F0
KXRpbGVTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0VGlsZVNjYWxlRmFjdG9yOihDR0Zsb2F0KXNj
YWxlRmFjdG9yOworCistIChDR1NpemUpY29udGVudFNpemU7CistIChDR1NpemUpY29udGVudFNp
emVSZXNwZWN0aW5nWm9vbTsKKworLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0
UmVmKWNvbnRleHQ7CisKKy0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0
KW1hZ25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClp
bW1lZGlhdGVseTsKKworLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKKy0gKHZvaWQpc2V0U2Ny
b2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247CistICh2b2lkKXNjcm9sbFdpdGhEZWx0
YTooQ0dTaXplKWRlbHRhOworCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Owor
LSAodm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlVXA6KE5T
RXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQ7Cist
ICh2b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUV4aXRl
ZDooTlNFdmVudCAqKWV2ZW50OworCistIChOU0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcg
KilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0
Y2hlczooQk9PTClzaG91bGRIaWdobGlnaHRNYXRjaGVzOworCistIChpZCkgY3VycmVudFNlbGVj
dGlvbjsKKy0gKHZvaWQpY29weVNlbGVjdGlvbjsKKy0gKHZvaWQpc2VsZWN0QWxsOworCistIChi
b29sKWtleURvd246KE5TRXZlbnQgKilldmVudDsKKworLSAodm9pZClzZXRIVURFbmFibGVkOihC
T09MKWVuYWJsZWQ7CistIChCT09MKWh1ZEVuYWJsZWQ7CisKK0BlbmQKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitAaW50ZXJmYWNlIFdLQnVpbHRJ
blBERktpdFZpZXdTY3JvbGxiYXJMYXllciA6IENBTGF5ZXIKK3sKKyAgICBXZWJLaXQ6OkJ1aWx0
SW5QREZLaXRWaWV3KiBfcGRmVmlldzsKK30KKworQHByb3BlcnR5IChhc3NpZ24pIFdlYktpdDo6
QnVpbHRJblBERktpdFZpZXcqIHBkZlZpZXc7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdL
QnVpbHRJblBERktpdFZpZXdTY3JvbGxiYXJMYXllcgorCitAc3ludGhlc2l6ZSBwZGZWaWV3Owor
CistIChpZClpbml0V2l0aFBERlZpZXc6KFdlYktpdDo6QnVpbHRJblBERktpdFZpZXcgKil2aWV3
Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgX3BkZlZpZXcgPSB2aWV3OworICAgIAorICAgIHJldHVybiBzZWxmOworfQor
CistIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIHJl
dHVybiBuaWw7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWN0eAor
eworICAgIF9wZGZWaWV3LT5wYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChzZWxmLCBjdHgp
OworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA6
IE5TT2JqZWN0PFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPgoreworICAgIFdlYktpdDo6QnVp
bHRJblBERktpdFZpZXcqIF9wZGZWaWV3OworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0
OjpCdWlsdEluUERGS2l0VmlldyogcGRmVmlldzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZQorCitAc3ludGhlc2l6ZSBwZGZWaWV3OworCist
IChpZClpbml0V2l0aFBERlZpZXc6KFdlYktpdDo6QnVpbHRJblBERktpdFZpZXcgKil2aWV3Cit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgX3BkZlZpZXcgPSB2aWV3OworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCist
ICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uCit7CisgICAg
X3BkZlZpZXctPm5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2ludChuZXdQb3NpdGlv
bikpOworfQorCistICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6KE5TQXJyYXkgKilpdGVt
cyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAgIC8vIEZJWE1FOiBIYW5kbGUgdHlw
ZXMgb3RoZXIgdGhhbiBwbGFpbiB0ZXh0LgorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IFtpdGVtcyBjb3VudF07ICsraSkgeworICAgICAgICBpZiAoW1t0eXBlcyBvYmplY3RBdEluZGV4
OmldIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdIHx8IFtbdHlwZXMgb2JqZWN0
QXRJbmRleDppXSBpc0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKKyAg
ICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nKEFkb3B0TlMsIFtb
TlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpbaXRlbXMgb2JqZWN0QXRJbmRleDppXSBlbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOworICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2Vu
ZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0U3RyaW5nLmdldCgpLCBQ
YXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOworICAgICAgICB9CisgICAgfQorfQorCist
ICh2b2lkKSBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6IChOU0F0dHJpYnV0ZWRT
dHJpbmcgKikgc3RyaW5nIGF0UG9pbnQ6IChDR1BvaW50KSBwb2ludAoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIHBlcmZvcm1XZWJTZWFyY2g6IChOU1N0cmluZyAq
KSBzdHJpbmcKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2b2lkKSBvcGVu
V2l0aFByZXZpZXcKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2b2lkKSBz
YXZlVG9QREYKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitAZW5kCisKK3N0YXRp
YyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25h
cnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENH
UERGQXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRy
ZWUsICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERG
QXJyYXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Cisg
ICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3Qp
OworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7CisgICAgaWYgKCFDR1BE
RkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgeworICAgICAgICBDR1BE
RkRpY3Rpb25hcnlSZWYga2lkOworICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5
KGtpZHMsIGksICZraWQpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0
cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7CisgICAgYXBwZW5kVmFs
dWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Cit9CisKK3N0YXRp
YyB2b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9j
dW1lbnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNjcmlwdHMpCit7CisgICAg
aWYgKCFwZGZEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dQREZEaWN0aW9uYXJ5
UmVmIHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7Cisg
ICAgaWYgKCFwZGZDYXRhbG9nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGRp
Y3Rpb25hcnkgb2YgYWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCisgICAgQ0dQREZEaWN0
aW9uYXJ5UmVmIG5hbWVzRGljdGlvbmFyeTsKKyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERp
Y3Rpb25hcnkocGRmQ2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5h
bWUgdHJlZS4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOworICAg
IGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZh
U2NyaXB0IiwgJmphdmFTY3JpcHROYW1lVHJlZSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFRoZSBuYW1lcyBhcmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2
YWx1ZXMuCisgICAgVmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOworICAgIGdldEFsbFZh
bHVlc0luUERGTmFtZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKKyAgICBzaXpl
X3Qgb2JqZWN0Q291bnQgPSBvYmplY3RzLnNpemUoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0Q291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2
YVNjcmlwdEFjdGlvbjsKKyAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJw
cmV0X2Nhc3Q8Q0dQREZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGlj
dGlvbmFyeSwgJmphdmFTY3JpcHRBY3Rpb24pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgLy8gQSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2Yg
IkphdmFTY3JpcHQiLgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOworICAgICAgICBp
ZiAoIUNHUERGRGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9u
VHlwZSkgfHwgc3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOworICAgICAgICBDRklu
ZGV4IGxlbmd0aDsKKyAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOworICAgICAgICBDR1BE
RlN0cmluZ1JlZiBzdHJpbmc7CisgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Cisg
ICAgICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpT
IiwgJnN0cmVhbSkpIHsKKyAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAg
ICAgICAgICBkYXRhLmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShzdHJlYW0sICZmb3JtYXQp
KTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsKKyAgICAgICAg
ICAgIGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0
cmluZykpIHsKKyAgICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdHZXRCeXRlUHRyKHN0cmlu
Zyk7CisgICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExlbmd0aChzdHJpbmcpOwor
ICAgICAgICB9CisgICAgICAgIGlmICghYnl0ZXMpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNb
MF0gPT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmluZ0VuY29kaW5nVW5pY29k
ZSA6IGtDRlN0cmluZ0VuY29kaW5nVVRGODsKKyAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiBzY3JpcHQoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgYnl0ZXMsIGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKKyAgICAgICAgaWYgKCFzY3Jp
cHQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzY3JpcHRzLmFwcGVuZChzY3Jp
cHQpOworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0IHVpbnQ2NF90IHBk
ZkRvY3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2Fk
aW5nIG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCisKK1Bh
c3NSZWZQdHI8QnVpbHRJblBERktpdFZpZXc+IEJ1aWx0SW5QREZLaXRWaWV3OjpjcmVhdGUoV2Vi
RnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVpbHRJblBERktpdFZp
ZXcoZnJhbWUpKTsKK30KKworQnVpbHRJblBERktpdFZpZXc6OkJ1aWx0SW5QREZLaXRWaWV3KFdl
YkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisgICAgLCBtX2NvbnRhaW5lckxh
eWVyKEFkb3B0TlMsIFtbQ0FMYXllciBhbGxvY10gaW5pdF0pCisgICAgLCBtX2NvbnRlbnRMYXll
cihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKQorICAgICwgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIoMCkKKyAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJMYXllcigwKQorICAgICwg
bV9zY3JvbGxDb3JuZXJMYXllcihBZG9wdE5TLCBbW1dLQnVpbHRJblBERktpdFZpZXdTY3JvbGxi
YXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZWaWV3OnRoaXNdKQorICAgICwgbV9wZGZMYXllckNv
bnRyb2xsZXIoQWRvcHROUywgW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0
XSkKKyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoQWRvcHROUywgW1tXS1BERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pCit7Cisg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fcGRmTGF5ZXJDb250
cm9sbGVyRGVsZWdhdGUuZ2V0KCldOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBz
ZXRQYXJlbnRMYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07CisgICAgCisgICAgW21fY29udGFp
bmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFtt
X2NvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0
KCldOworfQorCitCdWlsdEluUERGS2l0Vmlldzo6fkJ1aWx0SW5QREZLaXRWaWV3KCkKK3sKK30K
KworUGx1Z2luSW5mbyBCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luSW5mbygpCit7CisgICAgUGx1
Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1lKCk7CisK
KyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAgbWltZUNsYXNzSW5mby50eXBl
ID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZEb2N1bWVu
dFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBlbmQo
InBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7CisgICAgcmV0
dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5WaWV3
KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7
Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5WaWV3KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KGNvbnRy
b2xsZXIoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMo
KQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBt
X3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewor
ICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXpl
LndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
CisgICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKyAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDog
MDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJv
eGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKworICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS53aWR0
aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7
CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2lu
VmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxi
YXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAw
KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFy
UmVjdCk7CisgICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KElu
dFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAgCisgICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlm
ICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc1Njcm9sbGJhcnMg
PSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAo
aGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmIChoYXNTY3JvbGxi
YXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKKworICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorICAg
IAorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgJiYgbV92ZXJ0aWNhbFNjcm9sbGJh
cikgeworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldEZyYW1lOm1f
dmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpXTsKKyAgICAgICAgW21fdmVydGljYWxTY3Jv
bGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgIH0KKyAgICAKKyAgICBpZiAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXRGcmFtZTptX2hvcml6
b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpXTsKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmICht
X3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIFttX3Njcm9sbENvcm5lckxheWVyLmdldCgp
IHNldEZyYW1lOnNjcm9sbENvcm5lclJlY3QoKV07CisgICAgICAgIFttX3Njcm9sbENvcm5lckxh
eWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorfQorCitQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gQnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3Jv
bGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNj
cm9sbGJhcik7CisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuYWRvcHROUyhbW1dLQnVpbHRJblBE
RktpdFZpZXdTY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZWaWV3OnRoaXNdKTsKKyAg
ICAgICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXJMYXllci5hZG9wdE5TKFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJhckxheWVy
IGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pOworICAgICAgICBbbV9jb250YWluZXJMYXll
ci5nZXQoKSBhZGRTdWJsYXllcjptX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAg
ICAgICAKKyAgICAgICAgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAg
ICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5n
ZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBE
RktpdFZpZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICB3aWxsUmVt
b3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgIFttX2hv
cml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAg
ICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKKworICAgICAg
ICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0gMDsKKyAgICB9CisKKyAgICBzY3Jv
bGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9t
U2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBzY3JvbGxiYXIgPSAwOworfQorCit2b2lkIEJ1aWx0SW5Q
REZLaXRWaWV3OjphZGRBcmNoaXZlUmVzb3VyY2UoKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGEg
aGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3Vt
ZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNlcy4KKworICAgIC8v
IEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1lbnUgaGFuZGxpbmcgYW5kIHdlYiBh
cmNoaXZlcyB0byB3b3JrLgorICAgIFJlc291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25z
ZTsKKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKG1fc3VnZ2Vz
dGVkRmlsZW5hbWUpOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0VVJMKG1fc291cmNlVVJM
KTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMLgor
ICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUoImFwcGxpY2F0aW9uL3BkZiIpOwor
CisgICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6
OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhQnVmZmVyLmdldCgpKSwgbV9z
b3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3RyaW5nKCksIHN5bnRoZXNp
emVkUmVzcG9uc2UpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9h
ZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkpOworfQorCit2b2lk
IEJ1aWx0SW5QREZLaXRWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoKQoreworICAgIGFkZEFyY2hp
dmVSZXNvdXJjZSgpOworCisgICAgbV9wZGZEb2N1bWVudC5hZG9wdE5TKFtbcGRmRG9jdW1lbnRD
bGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fZGF0YUJ1ZmZlci5nZXQoKV0p
OworCisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldEZyYW1lU2l6ZTptX3BsdWdp
blNpemVdOworICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZXREb2N1bWVudDptX3Bk
ZkRvY3VtZW50LmdldCgpXTsKKyAgICAKKyAgICBwbHVnaW5WaWV3KCktPnNldEZ1bGxQYWdlUGx1
Z2luU2NhbGVGYWN0b3IoW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHRpbGVTY2FsZUZhY3Rv
cl0sIEludFBvaW50KDAsIDApKTsKKworICAgIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRl
U2Nyb2xsYmFycygpOworCisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwg
MCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworCisgICAg
VmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiBzY3JpcHRzOworICAgIGdldEFsbFNjcmlw
dHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0
cyk7CisKKyAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRzLnNpemUoKTsKKyAgICBpZiAo
IXNjcmlwdENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYg
Y3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOworICAgIEpTT2JqZWN0UmVmIGpzUERGRG9j
ID0gbWFrZUpTUERGRG9jKGN0eCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlw
dENvdW50OyArK2kpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7CisgICAgICAgIEpTRXZhbHVhdGVTY3Jp
cHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKKyAgICAgICAgSlNTdHJpbmdSZWxl
YXNlKHNjcmlwdCk7CisgICAgfQorCisgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOwor
fQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpjYWxjdWxhdGVTaXplcygpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgc3RyYWlnaHQgZnJvbSBQREZLaXQuCisKKyAgICBzaXpl
X3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1l
bnQuZ2V0KCkgZG9jdW1lbnRSZWZdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VD
b3VudDsgKytpKSB7CisgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVu
dEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7CisgICAg
ICAgIEFTU0VSVChwZGZQYWdlKTsKKworICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0
Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZDcm9wQm94KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1w
dHkoYm94KSkKKyAgICAgICAgICAgIGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwg
a0NHUERGTWVkaWFCb3gpOworICAgICAgICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gp
KTsKKyAgICB9CisKKyAgICBtX3BkZkRvY3VtZW50U2l6ZSA9IEludFNpemUoW21fcGRmTGF5ZXJD
b250cm9sbGVyLmdldCgpIGNvbnRlbnRTaXplUmVzcGVjdGluZ1pvb21dKTsKK30KKworYm9vbCBC
dWlsdEluUERGS2l0Vmlldzo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQoreworICAgIC8vIExvYWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgorICAgIG1fc291cmNlVVJM
ID0gcGFyYW1ldGVycy51cmw7CisgICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExv
YWRlciAmJiAhcGFyYW1ldGVycy51cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCkt
PmxvYWRVUkwocGRmRG9jdW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJp
bmcoKSwgU3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNl
KTsKKworICAgIGNvbnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpkZXN0cm95KCkKK3sKKyAgICBp
ZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1l
LT5jb3JlRnJhbWUoKS0+dmlldygpKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwor
ICAgIAorICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSByZW1vdmVGcm9tU3Vw
ZXJsYXllcl07CisgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSByZW1vdmVGcm9t
U3VwZXJsYXllcl07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIG1f
dmVydGljYWxTY3JvbGxiYXJMYXllciA9IDA7CisgICAgCisgICAgW21fc2Nyb2xsQ29ybmVyTGF5
ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgIFttX2NvbnRlbnRMYXllci5nZXQo
KSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgcmVt
b3ZlRnJvbVN1cGVybGF5ZXJdOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpwYWludChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQoreworfQorICAgIAordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6cGFpbnRDb250cm9sRm9yTGF5
ZXJJbkNvbnRleHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjdHgpCit7CisgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjdHgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIAorICAgIGdyYXBoaWNz
Q29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOworICAgIAorICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyICYmIGxheWVyID09IG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAg
ICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1tX3ZlcnRpY2FsU2Nyb2xsYmFyLT54KCks
IC1tX3ZlcnRpY2FsU2Nyb2xsYmFyLT55KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KSk7CisgICAgfSBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbGF5ZXIgPT0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5z
bGF0ZSgtbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT54KCksIC1tX2hvcml6b250YWxTY3JvbGxiYXIt
PnkoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoJmdyYXBoaWNzQ29u
dGV4dCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgfSBlbHNlIGlm
IChsYXllciA9PSBtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xs
Q29ybmVyUmVjdCA9IHRoaXMtPnNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVyUmVjdC54KCksIC1zY3JvbGxDb3JuZXJSZWN0
LnkoKSk7CisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNjcm9sbENvcm5l
cigwLCAmZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxDb3JuZXJSZWN0KTsKKyAgICB9Cit9CisKK3Zv
aWQgQnVpbHRJblBERktpdFZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGlu
Z0NvbnRyb2xUaW50cygpKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7
CisgICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOworfQorCitQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gQnVpbHRJblBERktpdFZpZXc6OnNuYXBzaG90KCkK
K3sKKyAgICBpZiAobV9wbHVnaW5TaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgLy8gRklYTUU6IFN1cHBvcnQgbm9uLTEgcGFnZS9kZXZpY2VTY2FsZUZhY3Rvci4K
KyAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBtX3BsdWdpblNpemU7CisKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShiYWNraW5nU3RvcmVTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOwor
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Cisg
ICAgY29udGV4dC0+dHJhbnNsYXRlKDAsIC1tX3BsdWdpblNpemUuaGVpZ2h0KCkpOworCisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNuYXBzaG90SW5Db250ZXh0OmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpXTsKKworICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworfQorCitQ
bGF0Zm9ybUxheWVyKiBCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luTGF5ZXIoKQoreworICAgIHJl
dHVybiBtX2NvbnRhaW5lckxheWVyLmdldCgpOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3
Ojppc1RyYW5zcGFyZW50KCkKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQg
ZnJvbSB0aGUgd2ViIHByb2Nlc3MuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojp3YW50c1doZWVsRXZlbnRz
KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6Z2Vv
bWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSkKK3sKKyAg
ICBpZiAobV9wbHVnaW5TaXplID09IHBsdWdpblNpemUgJiYgcGx1Z2luVmlldygpLT5mdWxsUGFn
ZVBsdWdpblNjYWxlRmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHRpbGVT
Y2FsZUZhY3Rvcl0pIHsKKyAgICAgICAgLy8gTm90aGluZyB0byBkby4KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7CisgICAgbV9yb290Vmll
d1RvUGx1Z2luVHJhbnNmb3JtID0gcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybS5pbnZlcnNlKCk7
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXpl
XTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXRE
aXNhYmxlQWN0aW9uczpZRVNdOworICAgIENBVHJhbnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFu
c2Zvcm0zRE1ha2VTY2FsZSgxLjAsIC0xLjAsIDEuMCk7CisgICAgCisgICAgQ0dGbG9hdCBtYWdu
aWZpY2F0aW9uID0gcGx1Z2luVmlldygpLT5mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yKCkgLSBb
bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXTsKKyAgICAKKyAgICAv
LyBGSVhNRTogSW5zdGVhZCBvZiBtX2xhc3RNb3VzZVBvaW50LCB3ZSBzaG91bGQgdXNlIHRoZSB6
b29tIG9yaWdpbiBmcm9tIFBsdWdpblZpZXc6OnNldEZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3Iu
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1hZ25pZnlXaXRoTWFnbmlmaWNhdGlv
bjptYWduaWZpY2F0aW9uIGF0UG9pbnQ6bV9sYXN0TW91c2VQb2ludCBpbW1lZGlhdGVseTpZRVNd
OworICAgIFttX2NvbnRlbnRMYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5z
Zm9ybTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwgMCwgLXBsdWdpblNpemUuaGVpZ2h0KCksIDApXTsK
KyAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAg
ICB1cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnZpc2li
aWxpdHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpmcmFtZURp
ZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmZyYW1lRGlkRmFpbCh1aW50NjRfdCwgYm9vbCkK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmll
dzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6
OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgS1VSTCYs
IHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX3N1Z2dlc3RlZEZp
bGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdHJlYW1EaWRSZWNl
aXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRS
ZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1fZGF0YUJ1ZmZl
ci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBwZW5k
Qnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4o
Ynl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3Ry
ZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdHJlYW1EaWRGYWls
KHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5V
U0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBt
X2RhdGFCdWZmZXIuY2xlYXIoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6bWFudWFs
U3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJf
dCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YUJ1ZmZl
cikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJ
blBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQoreworICAgIHBkZkRv
Y3VtZW50RGlkTG9hZCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjptYW51YWxTdHJl
YW1EaWRGYWlsKGJvb2wpCit7CisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisgICAgCitz
dGF0aWMgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50
JiBldmVudCkKK3sKKyAgICByZXR1cm4gKGV2ZW50LnNoaWZ0S2V5KCkgPyBOU1NoaWZ0S2V5TWFz
ayA6IDApCisgICAgICAgIHwgKGV2ZW50LmNvbnRyb2xLZXkoKSA/IE5TQ29udHJvbEtleU1hc2sg
OiAwKQorICAgICAgICB8IChldmVudC5hbHRLZXkoKSA/IE5TQWx0ZXJuYXRlS2V5TWFzayA6IDAp
CisgICAgICAgIHwgKGV2ZW50Lm1ldGFLZXkoKSA/IE5TQ29tbWFuZEtleU1hc2sgOiAwKTsKK30K
KyAgICAKK3N0YXRpYyBOU0V2ZW50VHlwZSBldmVudFR5cGVGcm9tV2ViRXZlbnQoY29uc3QgV2Vi
RXZlbnQmIGV2ZW50LCBib29sIG1vdXNlQnV0dG9uSXNEb3duKQoreworICAgIHN3aXRjaCAoZXZl
bnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6S2V5RG93bjoKKyAgICAgICAgcmV0dXJu
IE5TS2V5RG93bjsKKyAgICBjYXNlIFdlYkV2ZW50OjpLZXlVcDoKKyAgICAgICAgcmV0dXJuIE5T
S2V5VXA7CisKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246CisgICAgICAgIHN3aXRjaCAo
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+KGV2ZW50KS5idXR0b24oKSkgeworICAg
ICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICByZXR1cm4g
TlNMZWZ0TW91c2VEb3duOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9u
OgorICAgICAgICAgICAgcmV0dXJuIE5TUmlnaHRNb3VzZURvd247CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0
IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIE5TTGVmdE1vdXNlVXA7Cisg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICByZXR1
cm4gTlNSaWdodE1vdXNlVXA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1v
dmU6CisgICAgICAgIGlmIChtb3VzZUJ1dHRvbklzRG93bikgeworICAgICAgICAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7Cisg
ICAgICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE5TTGVmdE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIGNhc2UgV2ViTW91c2VF
dmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TUmlnaHRNb3VzZURy
YWdnZWQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOU01vdXNl
TW92ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHN0YXRpYyBib29sIHNfaXNEb3duID0g
ZmFsc2U7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbkluUERGVmlldyhldmVudC5wb3NpdGlvbigp
KTsKKyAgICBwb3NpdGlvbkluUERGVmlldyA9IG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybS5t
YXBQb2ludChwb3NpdGlvbkluUERGVmlldyk7CisgICAgcG9zaXRpb25JblBERlZpZXcuc2V0WSht
X3BsdWdpblNpemUuaGVpZ2h0KCkgLSBwb3NpdGlvbkluUERGVmlldy55KCkpOworICAgIAorICAg
IG1fbGFzdE1vdXNlUG9pbnQgPSBwb3NpdGlvbkluUERGVmlldzsKKworICAgIE5TRXZlbnRUeXBl
IGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgc19pc0Rvd24pOworICAg
IE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZl
bnQpOworICAgIAorICAgIGlmICghZXZlbnRUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6ZXZl
bnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5QREZWaWV3IG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJG
bGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5pbCBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBdOworCisgICAgc3dpdGNo
IChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAg
IGlmIChzX2lzRG93bikKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBt
b3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlTW92ZWQ6ZmFrZUV2ZW50XTsKKyAgICAgICAgbW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBX
ZWJFdmVudDo6TW91c2VEb3duOiB7CisgICAgICAgIHNfaXNEb3duID0gdHJ1ZTsKKyAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRG93bjpmYWtlRXZlbnRdOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDogeworICAg
ICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VVcDpmYWtlRXZlbnRdOworICAg
ICAgICBzX2lzRG93biA9IGZhbHNlOworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZv
cm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9y
bUV2ZW50KTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6Omhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgUGxhdGZv
cm1XaGVlbEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7CisgICAgcmV0dXJu
IFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtRXZlbnQpOworfQorCiti
b29sIEJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpCit7CisgICAgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlTGVhdmVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVD
b250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAgIC8vIFVzZSBkZWZh
dWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1
aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmIGV2ZW50KQoreworICAgIE5TRXZlbnRUeXBlIGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21X
ZWJFdmVudChldmVudCwgZmFsc2UpOworICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1v
ZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZlbnQpOworICAgIAorICAgIE5TRXZlbnQgKmZha2VF
dmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVy
b1BvaW50IG1vZGlmaWVyRmxhZ3M6bW9kaWZpZXJGbGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1i
ZXI6MCBjb250ZXh0OjAgY2hhcmFjdGVyczpldmVudC50ZXh0KCkgY2hhcmFjdGVyc0lnbm9yaW5n
TW9kaWZpZXJzOmV2ZW50LnVubW9kaWZpZWRUZXh0KCkgaXNBUmVwZWF0OmV2ZW50LmlzQXV0b1Jl
cGVhdCgpIGtleUNvZGU6ZXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUoKV07CisgICAgCisgICAg
c3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAg
ICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGtleURvd246ZmFrZUV2ZW50
XTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZUVk
aXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJn
dW1lbnQpCit7CisgICAgaWYgKGNvbW1hbmROYW1lID09ICJjb3B5IikKKyAgICAgICAgW21fcGRm
TGF5ZXJDb250cm9sbGVyLmdldCgpIGNvcHlTZWxlY3Rpb25dOworICAgIGVsc2UgaWYgKGNvbW1h
bmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkgc2VsZWN0QWxsXTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBCdWlsdElu
UERGS2l0Vmlldzo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSkKK3sKKyAgICBpZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiICYmIFttX3BkZkxheWVyQ29u
dHJvbGxlci5nZXQoKSBjdXJyZW50U2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIAorICAgIGlmIChjb21tYW5kTmFtZSA9PSAic2VsZWN0QWxsIikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZp
ZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0KiBCdWlsdEluUERG
S2l0Vmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKK3sKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCit7Cit9
CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sKK30K
Kwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkK
K3sKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5n
ZWQoZmxvYXQpCit7Cit9CisKK3VpbnQ2NF90IEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQnVpbHRJblBERktpdFZpZXc6OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYp
Cit7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnNldExheWVySG9zdGluZ01vZGUoTGF5
ZXJIb3N0aW5nTW9kZSkKK3sKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c3RvcmFnZUJs
b2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6
OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCitib29sIEJ1aWx0SW5Q
REZLaXRWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4g
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5Q
REZLaXRWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLmdldCgpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5QREZLaXRWaWV3Ojp2
ZXJ0aWNhbFNjcm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0
KCk7Cit9CisKK0ludFJlY3QgQnVpbHRJblBERktpdFZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBj
b25zdAoreworICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7CisgICAgICAgIEFTU0VSVChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgfQorICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAt
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJsZUFy
ZWEqIEJ1aWx0SW5QREZLaXRWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7
CisgICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Ny
b2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisgICAgcmV0dXJuIDA7Cit9CisK
K0ludFJlY3QgQnVpbHRJblBERktpdFZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBj
b25zdAoreworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRo
KCksIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9z
Y3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgIFttX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxQb3NpdGlvbjpDR1BvaW50TWFrZShvZmZz
ZXQueCgpLCBvZmZzZXQueSgpKV07Cit9CisKK2ludCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3Jv
bGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAg
ICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXIt
PnZpc2libGVTaXplKCkpIDogMDsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aXNBY3Rp
dmUoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZy
YW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKKyAg
ICAgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6Omlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChzY3JvbGxiYXIgPT0gaG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICAgICAg
W21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHNjcm9sbGJhciA9PSB2
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXIpIHsKKyAgICAgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVl
ZHNEaXNwbGF5XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2Nh
dGlvbigpKTsKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKK30KKwor
dm9pZCBCdWlsdEluUERGS2l0Vmlldzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAg
ICBbbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShyZWN0KTsK
K30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBCdWlsdEluUERGS2l0Vmlldzo6c2Ny
b2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQu
aGVpZ2h0KCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpKTsKK30KKworSW50UG9pbnQgQnVpbHRJblBERktpdFZpZXc6Om1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOworfQorCitJ
bnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
K3sKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3Jv
bGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAgaW50IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6
IDA7CisKKyAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRo
KCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9wbHVnaW5TaXplLmhlaWdodCgpICsgaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCk7CisgICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7CisgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Cit9CisKK2ludCBCdWlsdEluUERGS2l0Vmll
dzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS5oZWln
aHQoKTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAor
eworICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKK30KKworSW50U2l6ZSBCdWlsdElu
UERGS2l0Vmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wZGZEb2N1
bWVudFNpemU7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OnNjcm9sbGJhcnNDYW5CZUFj
dGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3Vt
ZW50KCktPmluUGFnZUNhY2hlKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnNjcm9s
bGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCit7CisgICAgaWYgKCFmb3Jj
ZVVwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xs
ZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBv
dmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3
aGVyZSBzY3JvbGxiYXJzIHdlcmUuCisgICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsK
KyAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIC8vIEFzIHNpemUg
b2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVh
ciBvciB0byBkaXNhcHBlYXIuCisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAgU2Nyb2xs
YWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOworfQorCitJbnRSZWN0IEJ1aWx0SW5QREZLaXRW
aWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyLT5s
b2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKworICAgIHJldHVybiBwbHVn
aW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcihwbHVnaW5WaWV3
KCktPnJlbmRlcmVyKCksIHJlY3QpOworfQorICAgIAorSW50UmVjdCBCdWlsdEluUERGS2l0Vmll
dzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIEludFJl
Y3QgcmVjdCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJl
cihwbHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZShw
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIAor
ICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQg
cG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRp
b24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZpZXco
KS0+cmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9p
bnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVy
ZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92
ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAg
IAorICAgIHJldHVybiBwb2ludDsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXpl
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBCdWlsdEluUERG
S2l0VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZLaXRWaWV3Kj4oSlNPYmpl
Y3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPnJlZigpOworfQorCitzdGF0aWMg
dm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBCdWlsdElu
UERGS2l0VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZLaXRWaWV3Kj4oSlNP
YmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPmRlcmVmKCk7Cit9CisKK0pT
VmFsdWVSZWYgQnVpbHRJblBERktpdFZpZXc6OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgQnVpbHRJblBERktpdFZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2Fz
dDxCdWlsdEluUERGS2l0Vmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisK
KyAgICBXZWJGcmFtZSogZnJhbWUgPSBwZGZWaWV3LT5tX2ZyYW1lOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGZyYW1lLT5jb3JlRnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBQYWdlKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3Jl
RnJhbWUpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pT
T2JqZWN0UmVmIEJ1aWx0SW5QREZLaXRWaWV3OjptYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmIGN0
eCkKK3sKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9u
c1tdID0geworICAgICAgICB7ICJwcmludCIsIGpzUERGRG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAg
ICAgeyAwLCAwLCAwIH0sCisgICAgfTsKKworICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBq
c1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAgICAgMCwKKyAgICAgICAga0pTQ2xhc3NB
dHRyaWJ1dGVOb25lLAorICAgICAgICAiRG9jIiwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAg
ICAgICAganNQREZEb2NTdGF0aWNGdW5jdGlvbnMsCisgICAgICAgIGpzUERGRG9jSW5pdGlhbGl6
ZSwganNQREZEb2NGaW5hbGl6ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQ
REZEb2NDbGFzc0RlZmluaXRpb24pOworCisgICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpz
UERGRG9jQ2xhc3MsIHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxYzg4MjlkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCdWlsdEluUERGVmlld19oCi0jZGVm
aW5lIEJ1aWx0SW5QREZWaWV3X2gKLQotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5
cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwotdHlwZWRl
ZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVj
dCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
c3RydWN0IFBsdWdpbkluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQbHVn
aW5WaWV3OwotY2xhc3MgV2ViRnJhbWU7Ci0KLWNsYXNzIEJ1aWx0SW5QREZWaWV3IDogcHVibGlj
IFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8QnVpbHRJblBERlZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOwotICAg
IH5CdWlsdEluUERGVmlldygpOwotCi0gICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1
Z2luSW5mbygpOwotCi0gICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFz
eW5jaHJvbm91cyBpbml0aWFsaXphdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5j
aHJvbm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi1wcml2YXRl
OgotICAgIGV4cGxpY2l0IEJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKik7Ci0KLSAgICAvLyBSZWd1
bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xs
YmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcuCi0g
ICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOwotICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdp
blZpZXcoKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xs
YmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3Jv
bGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKLSAgICB2
b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOwotICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKLSAg
ICB2b2lkIHBhaW50QmFja2dyb3VuZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgcGFpbnRDb250ZW50KFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7
Ci0gICAgdm9pZCBwYWludENvbnRyb2xzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0KLSAgICAvLyBQbHVnLWluIG1ldGhvZHMK
LSAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7Ci0gICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dD
b29yZGluYXRlcyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBzbmFwc2hvdCgpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIFBsYXRmb3Jt
TGF5ZXIqIHBsdWdpbkxheWVyKCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc3Bh
cmVudCgpOwotICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJD
b3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pOwotICAgIHZp
cnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1l
RGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpOwotICAgIHZpcnR1YWwgdm9pZCBm
cmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IFN0cmluZyYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJl
c3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVS
TCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkRmlsZU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0
YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOwotICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3
YXNDYW5jZWxsZWQpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRG
aWxlTmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3Ry
ZWFtRGlkRmluaXNoTG9hZGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVu
dGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVN
b3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOwotICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCgpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZv
aWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRW
aWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2Ny
ZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93
Q29vcmRpbmF0ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChi
b29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQp
OwotICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3Ry
aW5nJiB0ZXh0SW5wdXQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExh
eWVySG9zdGluZ01vZGUpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3Rv
cmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBwcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1
ZShTdHJpbmcmIGZvcm1WYWx1ZSk7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgdmly
dHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9Ci0KLSAgICAvLyBTY3JvbGxhYmxl
QXJlYSBtZXRob2RzLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1h
dG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBn
b29kIHRpbWUgdG8gYW5pbWF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGUgb3RoZXIgY29udmVyc2lvbiBmdW5jdGlvbnM7IHRoaXMgb25lIGlz
IGVub3VnaCB0byBnZXQgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nIHdvcmtpbmcuCi0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdCBPVkVSUklERTsKLQotICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhK
U0NvbnRleHRSZWYpOwotICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250
ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbik7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGx1Z2luU2l6ZTsKLQot
ICAgIFdlYkNvcmU6OktVUkwgbV9zb3VyY2VVUkw7Ci0KLSAgICBTdHJpbmcgbV9zdWdnZXN0ZWRG
aWxlbmFtZTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhQnVmZmVyOwot
Ci0gICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OwotICAgIFZlY3RvcjxX
ZWJDb3JlOjpJbnRSZWN0PiBtX3BhZ2VCb3hlczsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRm
RG9jdW1lbnRTaXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgotCi0gICAgUmVmUHRy
PFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFJlZlB0cjxX
ZWJDb3JlOjpTY3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0KLSAgICBXZWJGcmFtZSog
bV9mcmFtZTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEJ1aWx0SW5QREZWaWV3X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZW
aWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGNhZWE5Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSw4ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQnVpbHRJblBERlZpZXcuaCIKLQotI2lt
cG9ydCAiUERGS2l0SW1wb3J0cy5oIgotI2ltcG9ydCAiUGx1Z2luVmlldy5oIgotI2ltcG9ydCAi
U2hhcmVhYmxlQml0bWFwLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgotI2ltcG9ydCAiV2ViRXZl
bnRDb252ZXJzaW9uLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4K
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWZDRi5oPgotI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9BcmNo
aXZlUmVzb3VyY2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0hUVFBIZWFkZXJNYXAuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgot
I2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvU2Nyb2xsQW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0
aWMgdm9pZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9u
YXJ5UmVmIHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKLXsKLSAgICBD
R1BERkFycmF5UmVmIG5hbWVzOwotICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0
cmVlLCAiTmFtZXMiLCAmbmFtZXMpKSB7Ci0gICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BE
RkFycmF5R2V0Q291bnQobmFtZXMpIC8gMjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBuYW1lQ291bnQ7ICsraSkgewotICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0Owot
ICAgICAgICAgICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0
KTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0dQREZBcnJheVJlZiBraWRzOwotICAgIGlmICghQ0dQ
REZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQ
REZEaWN0aW9uYXJ5UmVmIGtpZDsKLSAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFy
eShraWRzLCBpLCAma2lkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcHBlbmRW
YWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYg
dHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQotewotICAgIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOwotfQotCi1zdGF0
aWMgdm9pZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRv
Y3VtZW50LCBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQotewotICAg
IGlmICghcGRmRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHUERGRGljdGlvbmFy
eVJlZiBwZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQpOwot
ICAgIGlmICghcGRmQ2F0YWxvZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBk
aWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgotICAgIENHUERGRGlj
dGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRE
aWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0IiBu
YW1lIHRyZWUuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsKLSAg
ICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAiSmF2
YVNjcmlwdCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBUaGUgbmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUg
dmFsdWVzLgotICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKLSAgICBnZXRBbGxW
YWx1ZXNJblBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7Ci0gICAgc2l6
ZV90IG9iamVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGph
dmFTY3JpcHRBY3Rpb247Ci0gICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVy
cHJldF9jYXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURp
Y3Rpb25hcnksICZqYXZhU2NyaXB0QWN0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBlIG9m
ICJKYXZhU2NyaXB0Ii4KLSAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKLSAgICAgICAg
aWYgKCFDR1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFjdGlv
blR5cGUpIHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKLSAgICAgICAgQ0ZJ
bmRleCBsZW5ndGg7Ci0gICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKLSAgICAgICAgQ0dQ
REZTdHJpbmdSZWYgc3RyaW5nOwotICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwot
ICAgICAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24sICJK
UyIsICZzdHJlYW0pKSB7Ci0gICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0OwotICAg
ICAgICAgICAgZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0
KSk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7Ci0gICAgICAg
ICAgICBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZz
dHJpbmcpKSB7Ci0gICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJp
bmcpOwotICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIWJ5dGVzKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVz
WzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNv
ZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gc2NyaXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7Ci0gICAgICAgIGlmICghc2Ny
aXB0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2Ny
aXB0KTsKLSAgICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jb25zdCB1aW50NjRfdCBw
ZGZEb2N1bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9h
ZGluZyBtdWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgotCi1j
b25zdCBpbnQgZ3V0dGVySGVpZ2h0ID0gMTA7Ci1jb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7
Ci1jb25zdCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOwotY29uc3QgaW50IHNoYWRvd1NpemUgPSA3
OwotCi1QYXNzUmVmUHRyPEJ1aWx0SW5QREZWaWV3PiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKFdl
YkZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1aWx0SW5QREZWaWV3
KGZyYW1lKSk7Ci19Ci0KLUJ1aWx0SW5QREZWaWV3OjpCdWlsdEluUERGVmlldyhXZWJGcmFtZSog
ZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1CdWlsdEluUERGVmlldzo6fkJ1
aWx0SW5QREZWaWV3KCkKLXsKLX0KLQotUGx1Z2luSW5mbyBCdWlsdEluUERGVmlldzo6cGx1Z2lu
SW5mbygpCi17Ci0gICAgUGx1Z2luSW5mbyBpbmZvOwotICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5Q
REZQbHVnaW5OYW1lKCk7Ci0KLSAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87Ci0gICAg
bWltZUNsYXNzSW5mby50eXBlID0iYXBwbGljYXRpb24vcGRmIjsKLSAgICBtaW1lQ2xhc3NJbmZv
LmRlc2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOwotICAgIG1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5hcHBlbmQoInBkZiIpOwotCi0gICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNs
YXNzSW5mbyk7Ci0gICAgcmV0dXJuIGluZm87Ci19Ci0KLVBsdWdpblZpZXcqIEJ1aWx0SW5QREZW
aWV3OjpwbHVnaW5WaWV3KCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+
KGNvbnRyb2xsZXIoKSk7Ci19Ci0KLWNvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5QREZWaWV3Ojpw
bHVnaW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2lu
Vmlldyo+KGNvbnRyb2xsZXIoKSk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoKQotewotICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9s
bGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikgewotICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVu
dFNpemUud2lkdGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNj
cm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0
ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyKSB7Ci0gICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1
bWVudFNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLSAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3Jl
YXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkg
PyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9
IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQot
ICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2lu
U2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUu
d2lkdGgoKSk7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngo
KSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQot
ICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53
aWR0aCgpLCAwKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qo
c2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0g
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQ
cm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxi
YXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgoKSAt
IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAg
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29u
dHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAg
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygp
OwotICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc1Nj
cm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsK
LSAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGlmICho
YXNTY3JvbGxiYXJzKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKLQotICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7Ci0g
ICAgfQotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVpbHRJblBERlZpZXc6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlz
LCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIo
d2lkZ2V0LmdldCgpKTsKLSAgICBlbHNlIAotICAgICAgICBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJh
cih3aWRnZXQuZ2V0KCkpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5hZGRD
aGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwotfQotCi12
b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmll
bnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDog
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAg
IHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7Ci0gICAgZWxz
ZQotICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsK
LQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhci0+ZGlz
Y29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOwotICAgIHNjcm9sbGJhciA9IDA7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJjZSgpCi17Ci0gICAgLy8gRklYTUU6
IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQ
REYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgot
Ci0gICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBh
bmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCi0gICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXpl
ZFJlc3BvbnNlOwotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUo
bV9zdWdnZXN0ZWRGaWxlbmFtZSk7Ci0gICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwobV9z
b3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQ
REZVUkwuCi0gICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRpb24v
cGRmIik7Ci0KLSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVS
ZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0
KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwg
c3ludGhlc2l6ZWRSZXNwb25zZSk7Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVu
dCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCi17Ci0gICAgYWRk
QXJjaGl2ZVJlc291cmNlKCk7Ci0KLSAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1
bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdl
dCgpXSk7Ci0KLSAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsK
LQotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6
ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLQotICAgIFZlY3RvcjxSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVu
dChbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOwotCi0gICAgc2l6
ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0cy5zaXplKCk7Ci0gICAgaWYgKCFzY3JpcHRDb3VudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFs
Q29udGV4dENyZWF0ZSgwKTsKLSAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRv
YyhjdHgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7
Ci0gICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5n
KHNjcmlwdHNbaV0uZ2V0KCkpOwotICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0
LCBqc1BERkRvYywgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOwot
ICAgIH0KLQotICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6Y2FsY3VsYXRlU2l6ZXMoKQotewotICAgIHNpemVfdCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0pOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKLSAg
ICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZE
b2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLSAgICAgICAgQVNTRVJUKHBkZlBh
Z2UpOwotCi0gICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2Us
IGtDR1BERkNyb3BCb3gpOwotICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQotICAgICAg
ICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7
Ci0gICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOwotICAgICAgICBtX3Bk
ZkRvY3VtZW50U2l6ZS5zZXRXaWR0aChtYXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3Rh
dGljX2Nhc3Q8aW50Pihib3guc2l6ZS53aWR0aCkpKTsKLSAgICAgICAgbV9wZGZEb2N1bWVudFNp
emUuZXhwYW5kKDAsIGJveC5zaXplLmhlaWdodCk7Ci0gICAgfQotICAgIG1fcGRmRG9jdW1lbnRT
aXplLmV4cGFuZCgwLCBndXR0ZXJIZWlnaHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOwot
fQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCi17Ci0gICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCi0gICAgbV9z
b3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVybDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNl
TWFudWFsTG9hZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCi0gICAgICAgIGNvbnRy
b2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMu
dXJsLnN0cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4o
KSwgZmFsc2UpOwotCi0gICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmRlc3Ryb3koKQotewot
ICAgIGlmIChtX2ZyYW1lKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
ZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgIH0KLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJh
cik7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgY29udGVudEFy
ZWFXaWxsUGFpbnQoKTsKLQotICAgIHBhaW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRp
cnR5UmVjdCk7Ci0KLSAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRp
bmcgcHJvZ3Jlc3MuCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhaW50Q29udGVudChncmFwaGlj
c0NvbnRleHQsIGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQs
IGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50QmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQotewotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3ND
b250ZXh0KTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChkaXJ0
eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludENvbnRlbnQoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25IaWdoKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZEFu
dGlhbGlhcyh0cnVlKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZFNtb290aEZvbnRz
KHRydWUpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3aGl0ZSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICBncmFwaGljc0NvbnRleHQtPmNsaXAoZGlydHlS
ZWN0KTsKLSAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7Ci0gICAgY29udGVudFJl
Y3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0
LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Njcm9sbE9mZnNldC5oZWln
aHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7Ci0KLSAgICBp
bnQgcGFnZVRvcCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VCb3hlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBtX3BhZ2VCb3hlc1tpXTsK
LSAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0gbWF4KHJvdW5kZigobV9w
bHVnaW5TaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4wZiksIDAuMGYpOwotICAg
ICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9wYWdlQm94ZXMuc2l6ZSgp
ID09IDEpID8gbWF4KHJvdW5kZigobV9wbHVnaW5TaXplLmhlaWdodCgpIC0gcGFnZUJveC5oZWln
aHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsKLQotICAgICAgICBpZiAo
cGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9mZnNldEZvckNlbnRlcmlu
Z1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7Ci0gICAgICAgICAgICBDR1BE
RlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50Lmdl
dCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4dHJhT2Zm
c2V0Rm9yQ2VudGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZ
IC0gcGFnZUJveC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNl
dFkpLCBzaGFkb3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKLQotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5jbGlwKHBhZ2VCb3gpOwotCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3UERGUGFn
ZShjb250ZXh0LCBwZGZQYWdlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9y
ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQoKSArIGd1
dHRlckhlaWdodDsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1w
YWdlQm94LmhlaWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OnBhaW50Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgSW50
UmVjdCBzY3JvbGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIHNjcm9sbGJhckRp
cnR5UmVjdC5tb3ZlQnkocGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKLSAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0
KCkueCgpLCAtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLQotICAgICAgICBp
ZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLSAgICB9Ci0KLSAg
ICBJbnRSZWN0IGRpcnR5Q29ybmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3JvbGxDb3JuZXJSZWN0
KCksIGRpcnR5UmVjdCk7Ci0gICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xs
Q29ybmVyKDAsIGdyYXBoaWNzQ29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0KQotewotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJv
bFRpbnRzKCkpOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLSAgICBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Ci19Ci0KLVBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBCdWlsdEluUERGVmlldzo6c25hcHNob3QoKQotewotICAgIHJl
dHVybiAwOwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotUGxhdGZvcm1MYXllciogQnVpbHRJblBE
RlZpZXc6OnBsdWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLWJv
b2wgQnVpbHRJblBERlZpZXc6OmlzVHJhbnNwYXJlbnQoKQotewotICAgIC8vIFRoaXMgc2hvdWxk
IG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6Ondh
bnRzV2hlZWxFdmVudHMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3OjpnZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RW
aWV3VHJhbnNmb3JtKQotewotICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgewot
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
bV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQotewotfQotCi12b2lk
IEJ1aWx0SW5QREZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCi17Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmZyYW1lRGlk
RmFpbCh1aW50NjRfdCwgYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBCdWlsdEluUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25z
dCBXVEY6OlN0cmluZyYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgS1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKLXsKLSAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
dHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0g
cGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFtX2RhdGFCdWZmZXIpCi0gICAgICAg
IG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotCi0gICAg
Q0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
dHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIEFTU0VSVF9V
TlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAg
IHBkZkRvY3VtZW50RGlkTG9hZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1E
aWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0K
LSAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50
MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZW5hbWUpCi17Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVu
YW1lOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fZGF0YUJ1ZmZl
cikKLSAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0KLSAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQotewotICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wpCi17Ci0gICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCi17
Ci0gICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1v
dmU6Ci0gICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7Ci0gICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91
bGQgYWxzbyBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCi0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogewotICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2Ug
YXMgd2lsbCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBh
cHByb3ByaWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCi0gICAgICAgIC8vIElkZWFsbHks
IHdlIHdvdWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkg
ZGlkIHRoYXQgZm9yIHVzLgotICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBp
cyBhZGRlZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNs
aWNraW5nIGluIGEgZm9ybS4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlVXA6IHsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQg
PSBwbGF0Zm9ybShldmVudCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0g
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7
Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFBsYXRmb3JtV2hlZWxFdmVudCBwbGF0
Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmll
dzo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
Ci17Ci0gICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50JikKLXsKLSAgICAvLyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51Lgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci19Ci0K
LU5QT2JqZWN0KiBCdWlsdEluUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCi17Ci19Ci0KLXVpbnQ2NF90IEJ1
aWx0SW5QREZWaWV3OjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNlbmRDb21wbGV4VGV4
dElucHV0KGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldExh
eWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQot
Ci12b2lkIEJ1aWx0SW5QREZWaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkK
LXsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVTY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkp
Ci17Ci0gICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLX0KLQotU2Ny
b2xsYmFyKiBCdWlsdEluUERGVmlldzo6aG9yaXpvbnRhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0
dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKLX0KLQotU2Nyb2xsYmFyKiBCdWlsdElu
UERGVmlldzo6dmVydGljYWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLmdldCgpOwotfQotCi1JbnRSZWN0IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0
aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgewotICAgICAgICBBU1NFUlQo
bV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpOwotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotICAgIH0KLSAgICByZXR1cm4gSW50UmVjdChwbHVnaW5WaWV3KCktPndp
ZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdo
dCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci19Ci0KLVNjcm9s
bGFibGVBcmVhKiBCdWlsdEluUERGVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBh
IHNjcm9sbGFibGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVyLgotICAgIHJldHVybiAwOwot
fQotCi1JbnRSZWN0IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKTsKLX0KLQotdm9p
ZCBCdWlsdEluUERGVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQp
Ci17Ci0gICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkp
OwotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJs
aXQgcGFydHMgdGhhdCByZW1haW4gdmlzaWJsZS4KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRh
dGUoSW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdo
dCgpKSk7Ci19Ci0KLWludCBCdWlsdEluUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9
ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
ID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDog
MDsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3Qg
ZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRp
b24oKSk7Ci0gICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsK
LSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Ci19Ci0KLWJvb2wgQnVp
bHRJblBERlZpZXc6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCk7Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERG
Vmlldzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChtX3Nj
cm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci19Ci0KLUludFBv
aW50IEJ1aWx0SW5QREZWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAg
IHJldHVybiBJbnRQb2ludCgwLCAwKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBERlZpZXc6Om1h
eGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxi
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCkgOiAwOwotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3Jv
bGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgSW50UG9pbnQgbWF4aW11bU9m
ZnNldChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwotICAgIG1heGlt
dW1PZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0
OwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BsdWdpblNpemUuaGVpZ2h0KCk7Ci19Ci0KLWludCBCdWlsdEluUERGVmlldzo6
dmlzaWJsZVdpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7
Ci19Ci0KLUludFNpemUgQnVpbHRJblBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojpz
Y3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiAhcGx1Z2luVmlldygp
LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNlVXBkYXRlKQotewot
ICAgIGlmICghZm9yY2VVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBQ
REYgd2FzIHNjcm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Nyb2xsYmFy
cyBjaGFuZ2UgdG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHdoaXRl
IHJlY3RhbmdsZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgotICAgIEludFBvaW50IG5ld1Njcm9s
bE9mZnNldCA9IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSk7Ci0gICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAg
ICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkg
bmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsK
LQotICAgIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKLX0KLQotSW50UG9pbnQg
QnVpbHRJblBERlZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAotewotICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCkt
PmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQp
OwotICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKLQotICAgIHJldHVybiBwb2ludDsKLX0KLQotc3RhdGljIHZvaWQganNQREZE
b2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAg
ICBCdWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4o
SlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPnJlZigpOwotfQotCi1z
dGF0aWMgdm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBC
dWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNP
YmplY3RHZXRQcml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPmRlcmVmKCk7Ci19Ci0KLUpT
VmFsdWVSZWYgQnVpbHRJblBERlZpZXc6OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCi17Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWls
dEluUERGVmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBXZWJG
cmFtZSogZnJhbWUgPSBwZGZWaWV3LT5tX2ZyYW1lOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGZyYW1lLT5jb3JlRnJhbWUoKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZUZy
YW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLQotICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOwot
Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0KLUpTT2JqZWN0UmVm
IEJ1aWx0SW5QREZWaWV3OjptYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmIGN0eCkKLXsKLSAgICBz
dGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0gewotICAg
ICAgICB7ICJwcmludCIsIGpzUERGRG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAwLCAwLCAw
IH0sCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNz
RGVmaW5pdGlvbiA9IHsKLSAgICAgICAgMCwKLSAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25l
LAotICAgICAgICAiRG9jIiwKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAganNQREZE
b2NTdGF0aWNGdW5jdGlvbnMsCi0gICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NG
aW5hbGl6ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0KLSAgICBzdGF0aWMg
SlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0Rl
ZmluaXRpb24pOwotCi0gICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERGRG9jQ2xhc3Ms
IHRoaXMpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblNpbXBsZVBERlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblNpbXBsZVBERlZpZXcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWJmZjRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2lt
cGxlUERGVmlldy5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBCdWlsdEluU2ltcGxlUERGVmlld19oCisjZGVmaW5lIEJ1aWx0SW5TaW1wbGVQREZWaWV3X2gK
KworI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1
ZSogSlNPYmplY3RSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1Zh
bHVlUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgc3RydWN0IFBsdWdpbkluZm87Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQbHVnaW5WaWV3OworY2xhc3MgV2ViRnJh
bWU7CisKK2NsYXNzIEJ1aWx0SW5TaW1wbGVQREZWaWV3IDogcHVibGljIFBsdWdpbiwgcHJpdmF0
ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8QnVpbHRJblNpbXBsZVBERlZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOworICAgIH5CdWlsdElu
U2ltcGxlUERGVmlldygpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2lu
SW5mbygpOworCisgICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFzeW5j
aHJvbm91cyBpbml0aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJv
bm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IEJ1aWx0SW5TaW1wbGVQREZWaWV3KFdlYkZyYW1lKik7CisKKyAgICAvLyBS
ZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Ny
b2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcu
CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBs
dWdpblZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAg
ICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsK
KyAgICB2b2lkIHBhaW50QmFja2dyb3VuZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgcGFpbnRDb250ZW50KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVj
dCk7CisgICAgdm9pZCBwYWludENvbnRyb2xzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAgICAvLyBQbHVnLWluIG1ldGhv
ZHMKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5k
b3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBzbmFwc2hvdCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsdWdpbkxheWVyKCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNUcmFu
c3BhcmVudCgpOworICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIGZy
YW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpOworICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25z
ZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZl
RGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlE
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9v
bCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVh
bUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFs
U3RyZWFtRGlkRmluaXNoTG9hZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1E
aWRGYWlsKGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVs
RXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworICAgIHZpcnR1YWwgTlBPYmplY3QqIHBs
dWdpblNjcmlwdGFibGVOUE9iamVjdCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFs
IHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dB
bmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUlu
U2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2lu
ZG93Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdl
ZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxv
YXQpOworICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3Qg
U3RyaW5nJiB0ZXh0SW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2Rl
KExheWVySG9zdGluZ01vZGUpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2
YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1W
YWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChX
ZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAg
dmlydHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAvLyBTY3JvbGxh
YmxlQXJlYSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3Ju
ZXJSZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6
OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Ny
b2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9s
bFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFu
aW1hdG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3Ig
YSBnb29kIHRpbWUgdG8gYW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVD
aGFuZ2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGUgb3RoZXIgY29udmVyc2lvbiBmdW5jdGlvbnM7IHRoaXMgb25l
IGlzIGVub3VnaCB0byBnZXQgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nIHdvcmtpbmcuCisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBh
cmVudFBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0
aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmco
KSBPVkVSUklERTsKKworICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYp
OworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGx1Z2luU2l6ZTsKKworICAgIFdlYkNvcmU6
OktVUkwgbV9zb3VyY2VVUkw7CisKKyAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsKKyAg
ICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhQnVmZmVyOworCisgICAgUmV0YWlu
UHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRS
ZWN0PiBtX3BhZ2VCb3hlczsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRTaXpl
OyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgorCisgICAgUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3Jv
bGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsKKwor
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEJ1aWx0SW5TaW1wbGVQREZWaWV3X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblNpbXBsZVBERlZp
ZXcubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5TaW1w
bGVQREZWaWV3Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmE2OWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L0J1aWx0SW5TaW1wbGVQREZWaWV3Lm1tCkBAIC0wLDAgKzEsODk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJCdWlsdEluU2ltcGxlUERG
Vmlldy5oIgorCisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3
LmgiCisjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbXBvcnQgIldlYkV2ZW50LmgiCisj
aW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6
ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UGx1Z2luRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3Jv
bGxiYXJUaGVtZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK3N0YXRpYyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3Rv
cihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFs
dWVzKQoreworICAgIENHUERGQXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFy
eUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5h
bWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVj
dFJlZiBvYmplY3Q7CisgICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICog
aSArIDEsICZvYmplY3QpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR1BERkFycmF5UmVmIGtpZHM7
CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRz
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdl
dENvdW50KGtpZHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkg
eworICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYga2lkOworICAgICAgICBpZiAoIUNHUERGQXJy
YXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERG
RGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCit7
CisgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVl
cyk7Cit9CisKK3N0YXRpYyB2b2lkIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9j
dW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNj
cmlwdHMpCit7CisgICAgaWYgKCFwZGZEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhw
ZGZEb2N1bWVudCk7CisgICAgaWYgKCFwZGZDYXRhbG9nKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2YgYWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMu
CisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5hbWVzRGljdGlvbmFyeTsKKyAgICBpZiAoIUNHUERG
RGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRmQ2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlv
bmFyeSkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwg
IkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlw
dE5hbWVUcmVlOworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0Rp
Y3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmphdmFTY3JpcHROYW1lVHJlZSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFRoZSBuYW1lcyBhcmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRl
cmVzdGVkIGluIHRoZSB2YWx1ZXMuCisgICAgVmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3Rz
OworICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmpl
Y3RzKTsKKyAgICBzaXplX3Qgb2JqZWN0Q291bnQgPSBvYmplY3RzLnNpemUoKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7ICsraSkgeworICAgICAgICBDR1BERkRp
Y3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlvbjsKKyAgICAgICAgaWYgKCFDR1BERk9iamVjdEdl
dFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQREZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQ
REZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmphdmFTY3JpcHRBY3Rpb24pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gQSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4g
YWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQiLgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25U
eXBlOworICAgICAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlv
biwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0Iikp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAw
OworICAgICAgICBDRkluZGV4IGxlbmd0aDsKKyAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFt
OworICAgICAgICBDR1BERlN0cmluZ1JlZiBzdHJpbmc7CisgICAgICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IGRhdGE7CisgICAgICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNj
cmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkpIHsKKyAgICAgICAgICAgIENHUERGRGF0YUZvcm1h
dCBmb3JtYXQ7CisgICAgICAgICAgICBkYXRhLmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShz
dHJlYW0sICZmb3JtYXQpKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdl
dCgpKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsK
KyAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFj
dGlvbiwgIkpTIiwgJnN0cmluZykpIHsKKyAgICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdH
ZXRCeXRlUHRyKHN0cmluZyk7CisgICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExl
bmd0aChzdHJpbmcpOworICAgICAgICB9CisgICAgICAgIGlmICghYnl0ZXMpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBDRlN0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0
aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmlu
Z0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmluZ0VuY29kaW5nVVRGODsKKyAgICAgICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKKyAg
ICAgICAgaWYgKCFzY3JpcHQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzY3Jp
cHRzLmFwcGVuZChzY3JpcHQpOworICAgIH0KK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Nv
bnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxl
ciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25l
IGZvciBQREYuCisKK2NvbnN0IGludCBndXR0ZXJIZWlnaHQgPSAxMDsKK2NvbnN0IGludCBzaGFk
b3dPZmZzZXRYID0gMDsKK2NvbnN0IGludCBzaGFkb3dPZmZzZXRZID0gLTI7Citjb25zdCBpbnQg
c2hhZG93U2l6ZSA9IDc7CisKK1Bhc3NSZWZQdHI8QnVpbHRJblNpbXBsZVBERlZpZXc+IEJ1aWx0
SW5TaW1wbGVQREZWaWV3OjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQnVpbHRJblNpbXBsZVBERlZpZXcoZnJhbWUpKTsKK30KKworQnVpbHRJblNp
bXBsZVBERlZpZXc6OkJ1aWx0SW5TaW1wbGVQREZWaWV3KFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6
IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK0J1aWx0SW5TaW1wbGVQREZWaWV3Ojp+QnVpbHRJblNp
bXBsZVBERlZpZXcoKQoreworfQorCitQbHVnaW5JbmZvIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpw
bHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87CisgICAgaW5mby5uYW1lID0gYnVp
bHRJblBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsK
KyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIG1pbWVDbGFz
c0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgbWltZUNsYXNz
SW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBpbmZvLm1pbWVzLmFwcGVuZCht
aW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworUGx1Z2luVmlldyogQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQ
bHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1Z2luVmlldyogQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnBsdWdpblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKwordm9pZCBCdWlsdElu
U2ltcGxlUERGVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYWRTY3JvbGxi
YXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3BsdWdpblNpemUu
d2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgZGVzdHJv
eVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fcGx1Z2lu
U2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwor
CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9wbHVn
aW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwor
CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAw
OworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8gMCA6IG1fcGFn
ZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewor
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxi
YXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fcGx1Z2luU2l6
ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYg
KG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0
KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3Rl
cHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLmhlaWdodCgpIC0g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChwbHVnaW5WaWV3KCktPngoKSAr
IG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1
Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAg
ICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9s
bGJhclJlY3QpOworICAgIH0KKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJh
bWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8
fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9s
bGJhcnMpIHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZp
ZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmll
dy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBC
dWlsdEluU2ltcGxlUERGVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xs
YmFyKTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIGVsc2UgCisg
ICAgICAgIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CisgICAgcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0
dXJuIHdpZGdldC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmRl
c3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwor
ICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAob3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgd2lsbFJlbW92ZUhvcml6b250YWxT
Y3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIHdpbGxSZW1vdmVW
ZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgc2Nyb2xsYmFyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVB
cmVhKCk7CisgICAgc2Nyb2xsYmFyID0gMDsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmll
dzo6YWRkQXJjaGl2ZVJlc291cmNlKCkKK3sKKyAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sgdG8g
Zm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMgc2hv
dWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNvdXJjZXMuCisKKyAgICAvLyBBZGQganVz
dCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMg
dG8gd29yay4KKyAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXNpemVkUmVzcG9uc2U7CisgICAg
c3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFVSTChtX3NvdXJjZVVSTCk7IC8vIE5l
ZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZVBERlVSTC4KKyAgICBzeW50
aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBsaWNhdGlvbi9wZGYiKTsKKworICAgIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1ZmZlci5nZXQoKSksIG1fc291cmNlVVJM
LCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBzeW50aGVzaXplZFJlc3Bv
bnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigpLT5h
ZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKK30KKwordm9pZCBCdWlsdElu
U2ltcGxlUERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKCkKK3sKKyAgICBhZGRBcmNoaXZlUmVz
b3VyY2UoKTsKKworICAgIG1fcGRmRG9jdW1lbnQuYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3Mo
KSBhbGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKiltX2RhdGFCdWZmZXIuZ2V0KCldKTsKKwor
ICAgIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAgY29u
dHJvbGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCks
IG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworCisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gPiBzY3JpcHRzOworICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRv
Y3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7CisKKyAgICBzaXplX3Qgc2NyaXB0
Q291bnQgPSBzY3JpcHRzLnNpemUoKTsKKyAgICBpZiAoIXNjcmlwdENvdW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3Jl
YXRlKDApOworICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKKyAgICAgICAg
SlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tp
XS5nZXQoKSk7CisgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9j
LCAwLCAwLCAwKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7CisgICAgfQorCisg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3OjpjYWxjdWxhdGVTaXplcygpCit7CisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERG
RG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVm
XSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgeworICAgICAg
ICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3Vt
ZW50LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworICAgICAgICBBU1NFUlQocGRmUGFnZSk7
CisKKyAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NH
UERGQ3JvcEJveCk7CisgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCisgICAgICAgICAg
ICBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKKyAg
ICAgICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7CisgICAgICAgIG1fcGRmRG9j
dW1lbnRTaXplLnNldFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KGJveC5zaXplLndpZHRoKSkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5l
eHBhbmQoMCwgYm94LnNpemUuaGVpZ2h0KTsKKyAgICB9CisgICAgbV9wZGZEb2N1bWVudFNpemUu
ZXhwYW5kKDAsIGd1dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Cit9CisK
K2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYg
cGFyYW1ldGVycykKK3sKKyAgICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KKyAgICBt
X3NvdXJjZVVSTCA9IHBhcmFtZXRlcnMudXJsOworICAgIGlmICghcGFyYW1ldGVycy5zaG91bGRV
c2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKKyAgICAgICAgY29u
dHJvbGxlcigpLT5sb2FkVVJMKHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1ldGVy
cy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90
PigpLCBmYWxzZSk7CisKKyAgICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxpemVQbHVnaW4oKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6ZGVzdHJv
eSgpCit7CisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVW
aWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKKyAgICAgICAgICAgIGZyYW1lVmll
dy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgfQorCisgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sK
KyAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOworCisgICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBo
aWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKworICAgIGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklY
TUU6IERyYXcgbG9hZGluZyBwcm9ncmVzcy4KKyAgICAgICAgcmV0dXJuOworCisgICAgcGFpbnRD
b250ZW50KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBwYWludENvbnRyb2xzKGdy
YXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmll
dzo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Rmls
bENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBncmFwaGljc0Nv
bnRleHQtPmZpbGxSZWN0KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZp
ZXc6OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdy
YXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBncmFwaGljc0NvbnRleHQt
PnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkhpZ2gpOworICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgIGdy
YXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOworICAgIEludFJlY3QgY29udGVudFJlY3Qo
ZGlydHlSZWN0KTsKKyAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9pbnQobV9zY3JvbGxPZmZz
ZXQpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9zY3JvbGxPZmZzZXQud2lk
dGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKworICAgIENHQ29udGV4dFNjYWxlQ1RN
KGNvbnRleHQsIDEsIC0xKTsKKworICAgIGludCBwYWdlVG9wID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEludFJlY3Qg
cGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOworICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNl
bnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lkdGgoKSAtIHBhZ2VCb3gud2lk
dGgoKSkgLyAyLjBmKSwgMC4wZik7CisgICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVy
aW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91bmRmKChtX3BsdWdpblNp
emUuaGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zmc2V0WSkgLyAyLjBmKSwg
MC4wZikgOiAwOworCisgICAgICAgIGlmIChwYWdlVG9wID4gY29udGVudFJlY3QubWF4WSgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwYWdlVG9wICsgcGFnZUJveC5oZWlnaHQo
KSArIGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdodCA+PSBjb250ZW50UmVj
dC55KCkpIHsKKyAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVu
dEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7CisKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYIC0gcGFnZUJveC54KCks
IC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94LnkoKSAtIHBhZ2VCb3guaGVpZ2h0
KCkpOworCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUo
c2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1NpemUsIENvbG9yOjpibGFjaywg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxS
ZWN0KHBhZ2VCb3gpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGVhclNoYWRvdygp
OworCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocGFnZUJveCk7CisKKyAgICAg
ICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBhZ2UpOworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICAgICAgcGFnZVRv
cCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0OworICAgICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0KCkgLSBndXR0ZXJIZWlnaHQp
OworICAgIH0KK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6cGFpbnRDb250cm9scyhH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQoreworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpncmFwaGljc0NvbnRleHQpOworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhckRpcnR5UmVjdCA9
IGRpcnR5UmVjdDsKKyAgICAgICAgc2Nyb2xsYmFyRGlydHlSZWN0Lm1vdmVCeShwbHVnaW5WaWV3
KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnRy
YW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54KCksIC1wbHVnaW5WaWV3KCktPmZy
YW1lUmVjdCgpLnkoKSk7CisKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBz
Y3JvbGxiYXJEaXJ0eVJlY3QpOworCisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQor
ICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBz
Y3JvbGxiYXJEaXJ0eVJlY3QpOworICAgIH0KKworICAgIEludFJlY3QgZGlydHlDb3JuZXJSZWN0
ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwgZGlydHlSZWN0KTsKKyAgICBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIoMCwgZ3JhcGhpY3NDb250ZXh0
LCBkaXJ0eUNvcm5lclJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojp1cGRh
dGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCit7CisgICAg
QVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSk7CisKKyAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmludmFsaWRhdGUoKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGludmFsaWRhdGVTY3JvbGxDb3Ju
ZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzbmFwc2hvdCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisK
KyNpZiBQTEFURk9STShNQUMpCitQbGF0Zm9ybUxheWVyKiBCdWlsdEluU2ltcGxlUERGVmlldzo6
cGx1Z2luTGF5ZXIoKQoreworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworYm9vbCBCdWls
dEluU2ltcGxlUERGVmlldzo6aXNUcmFuc3BhcmVudCgpCit7CisgICAgLy8gVGhpcyBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLgorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluU2ltcGxlUERGVmll
dzo6d2FudHNXaGVlbEV2ZW50cygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVp
bHRJblNpbXBsZVBERlZpZXc6Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdp
blNpemUsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBs
dWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCit7CisgICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVn
aW5TaXplKSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3BsdWdpblNpemUgPSBwbHVnaW5TaXplOworICAgIHVwZGF0ZVNjcm9sbGJh
cnMoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6dmlzaWJpbGl0eURpZENoYW5n
ZSgpCit7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmZyYW1lRGlkRmluaXNoTG9h
ZGluZyh1aW50NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBC
dWlsdEluU2ltcGxlUERGVmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpk
aWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6
c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwg
dWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQs
IHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnN0cmVhbURpZFJl
Y2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0
aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVu
dFJlcXVlc3RJRCk7CisKKyAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVm
ZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBl
bmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgq
PihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnN0cmVh
bURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCit7CisgICAgQVNTRVJUX1VOVVNF
RChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgcGRm
RG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnN0cmVh
bURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQoreworICAgIEFT
U0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsK
KworICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZW
aWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VV
UkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2Vz
dGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6Om1hbnVhbFN0cmVh
bURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQoreworICAgIGlm
ICghbV9kYXRhQnVmZmVyKQorICAgICAgICBtX2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVh
dGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpCit7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBs
ZVBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkKK3sKKyAgICBtX2RhdGFCdWZmZXIu
Y2xlYXIoKTsKK30KKworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlTW91c2VFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUo
KSkgeworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgbW91c2VNb3ZlZElu
Q29udGVudEFyZWEoKTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCBhbHNvIG5vdGlmeSBzY3Jv
bGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNob3VsZCBhbHNvIHNlbmQgbW91c2VFeGl0ZWQg
dG8gaGlkZSBpdC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3du
OiB7CisgICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBhcyB3aWxsIG1ha2UgRXZlbnRIYW5kbGVy
IHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4gY2xpY2tpbmcg
c2Nyb2xsYmFycy4KKyAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGRuJ3QgY2hhbmdlIGZvY3Vz
IGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFkeSBkaWQgdGhhdCBmb3IgdXMuCisgICAgICAg
IC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1zIGlzIGFkZGVkLCB3ZSdsbCBuZWVkIHRvIGFj
dHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4gY2xpY2tpbmcgaW4gYSBmb3JtLgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDogeworICAgICAgICBQ
bGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRm
b3JtRXZlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVp
bHRJblNpbXBsZVBERlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYg
ZXZlbnQpCit7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9y
bShldmVudCk7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50KHBs
YXRmb3JtRXZlbnQpOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVNb3Vz
ZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNpbXBsZVBE
RlZpZXc6OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAg
ICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKQoreworICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVL
ZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1
cykKK3sKK30KKworTlBPYmplY3QqIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QoKQoreworICAgIHJldHVybiAwOworfQorCisjaWYgUExBVEZPUk0oTUFDKQor
Cit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sK
K30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVz
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQor
eworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdl
ZChib29sKQoreworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpjb250ZW50c1NjYWxl
RmFjdG9yQ2hhbmdlZChmbG9hdCkKK3sKK30KKwordWludDY0X3QgQnVpbHRJblNpbXBsZVBERlZp
ZXc6OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5w
dXQoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2V0
TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQoreworfQorCisjZW5kaWYKKwordm9p
ZCBCdWlsdEluU2ltcGxlUERGVmlldzo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wp
Cit7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRl
Q2hhbmdlZChib29sKQoreworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpnZXRGb3Jt
VmFsdWUoU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNp
bXBsZVBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpo
b3Jpem9udGFsU2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LmdldCgpOworfQorCitTY3JvbGxiYXIqIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojp2ZXJ0aWNhbFNj
cm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Cit9CisK
K0ludFJlY3QgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAor
eworICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxi
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7CisgICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CisgICAgfQorICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIEJ1
aWx0SW5TaW1wbGVQREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xs
YWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisgICAgcmV0dXJuIDA7Cit9CisKK0lu
dFJlY3QgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBj
b25zdAoreworICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOworfQorCit2b2lk
IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0
LnkoKSk7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2Ug
dG8gYmxpdCBwYXJ0cyB0aGF0IHJlbWFpbiB2aXNpYmxlLgorICAgIGNvbnRyb2xsZXIoKS0+aW52
YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUu
aGVpZ2h0KCkpKTsKK30KKworaW50IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciog
c2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9y
aXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJldHVy
biBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJs
ZVNpemUoKSkgOiAwOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojppc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUo
KSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6aW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5t
b3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVn
aW5WaWV3KCktPmxvY2F0aW9uKCkpOworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0
eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGNvbnRyb2xsZXIoKS0+aW52
YWxpZGF0ZShyZWN0KTsKK30KKworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aXNTY3JvbGxD
b3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBCdWls
dEluU2ltcGxlUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0Cit7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzY3Jv
bGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0
LndpZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKK30KKworSW50UG9pbnQgQnVpbHRJ
blNpbXBsZVBERlZpZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEludFBvaW50KDAsIDApOworfQorCitJbnRQb2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6
bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSA6IDA7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNj
cm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBJbnRQb2ludCBtYXhpbXVt
T2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSAr
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9w
bHVnaW5TaXplLmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgbWF4
aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIG1heGltdW1PZmZz
ZXQ7Cit9CisKK2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKTsKK30KKworaW50IEJ1aWx0SW5T
aW1wbGVQREZWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdp
blNpemUud2lkdGgoKTsKK30KKworSW50U2l6ZSBCdWlsdEluU2ltcGxlUERGVmlldzo6Y29udGVu
dHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7Cit9CisKK2Jv
b2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCktPmluUGFnZUNh
Y2hlKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNjcm9sbGJhclN0eWxlQ2hh
bmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCit7CisgICAgaWYgKCFmb3JjZVVwZGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3
YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVybGF5IHN0eWxl
LCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxi
YXJzIHdlcmUuCisgICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9pbnQobV9zY3Jv
bGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKKyAgICBzZXRTY3Jv
bGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIC8vIEFzIHNpemUgb2YgdGhlIGNvbnRl
bnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVhciBvciB0byBkaXNh
cHBlYXIuCisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAgU2Nyb2xsYWJsZUFyZWE6OmNv
bnRlbnRzUmVzaXplZCgpOworfQorCitJbnRQb2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6Y29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQg
cG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIo
cGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92ZShw
bHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworCisgICAg
cmV0dXJuIHBvaW50OworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojppc0VkaXRpbmdD
b21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29s
IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXpl
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBCdWlsdEluU2lt
cGxlUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5TaW1wbGVQREZWaWV3Kj4o
SlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPnJlZigpOworfQorCitz
dGF0aWMgdm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBC
dWlsdEluU2ltcGxlUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5TaW1wbGVQ
REZWaWV3Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPmRlcmVm
KCk7Cit9CisKK0pTVmFsdWVSZWYgQnVpbHRJblNpbXBsZVBERlZpZXc6OmpzUERGRG9jUHJpbnQo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQnVpbHRJblNpbXBsZVBERlZpZXcqIHBk
ZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluU2ltcGxlUERGVmlldyo+KEpTT2JqZWN0R2V0UHJp
dmF0ZSh0aGlzT2JqZWN0KSk7CisKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBwZGZWaWV3LT5tX2Zy
YW1lOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5jb3JlRnJhbWUoKTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0
eCk7CisKKyAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdl
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIHBhZ2Ut
PmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVmIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptYWtl
SlNQREZEb2MoSlNDb250ZXh0UmVmIGN0eCkKK3sKKyAgICBzdGF0aWMgSlNTdGF0aWNGdW5jdGlv
biBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0geworICAgICAgICB7ICJwcmludCIsIGpzUERG
RG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAwLCAwLCAwIH0sCisgICAgfTsKKworICAgIHN0
YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAg
ICAgMCwKKyAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAorICAgICAgICAiRG9jIiwKKyAg
ICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAganNQREZEb2NTdGF0aWNGdW5jdGlvbnMsCisg
ICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NGaW5hbGl6ZSwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMAorICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0Ns
YXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRpb24pOworCisgICAgcmV0
dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERGRG9jQ2xhc3MsIHRoaXMpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4u
aAppbmRleCBkMTk3YTY3Li40NTdhNTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpbi5oCkBAIC0xODgsNiArMTg4LDE1IEBAIHB1YmxpYzoKICAgICAvLyBUZWxs
cyB0aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhlIHBhc3NlZCBpbiBrZXlib2FyZCBldmVudC4gVGhl
IHBsdWctaW4gc2hvdWxkIHJldHVybiB0cnVlIGlmIGl0IHByb2Nlc3NlZCB0aGUgZXZlbnQuCiAg
ICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYpID0gMDsKICAgICAKKyAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhlIHBh
c3NlZCBpbiBlZGl0aW5nIGNvbW1hbmQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBp
ZiBpdCBleGVjdXRlZCB0aGUgY29tbWFuZC4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCkgPSAwOworICAgIAorICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVyIGl0IHdpbGwgYmUg
YWJsZSB0byBoYW5kbGUgdGhlIGdpdmVuIGVkaXRpbmcgY29tbWFuZC4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkgPSAw
OworICAgIAorICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVyIGl0IHdhbnRzIHRvIG92ZXJy
aWRlIGZ1bGwtcGFnZSB6b29tLgorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VGdWxsUGFnZVBs
dWdpblNjYWxpbmcoKSA9IDA7CisgICAgCiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gYWJvdXQg
Zm9jdXMgY2hhbmdlcy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCkgPSAwOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcApp
bmRleCAwZjRmZDcwLi40MTNlMThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKQEAgLTQwMyw2ICs0MDMsMzMgQEAgdm9pZCBQbHVn
aW5Qcm94eTo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKICAgICBtX2Nvbm5lY3Rpb24tPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTZXRGb2N1cyho
YXNGb2N1cyksIG1fcGx1Z2luSW5zdGFuY2VJRCk7CiB9CiAKK2Jvb2wgUGx1Z2luUHJveHk6Omhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpCit7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nv
bm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6SGFuZGxlRWRpdGluZ0NvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KSwgTWVz
c2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlRWRpdGluZ0NvbW1hbmQ6OlJlcGx5
KGhhbmRsZWQpLCBtX3BsdWdpbkluc3RhbmNlSUQpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgcmV0dXJuIGhhbmRsZWQ7Cit9CisgICAgCitib29sIFBsdWdpblByb3h5Ojppc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIGJv
b2wgaXNFbmFibGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5
OjpJc0VkaXRpbmdDb21tYW5kRW5hYmxlZDo6UmVwbHkoaXNFbmFibGVkKSwgbV9wbHVnaW5JbnN0
YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBpc0VuYWJs
ZWQ7Cit9CisgICAgCitib29sIFBsdWdpblByb3h5OjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNj
YWxpbmcoKQoreworICAgIGJvb2wgaXNFbmFibGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5l
Y3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6U2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCksIE1lc3NhZ2VzOjpQbHVnaW5D
b250cm9sbGVyUHJveHk6OlNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZzo6UmVwbHkoaXNF
bmFibGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBpc0VuYWJsZWQ7Cit9CisKIE5QT2JqZWN0KiBQbHVnaW5Qcm94eTo6cGx1
Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKIHsKICAgICAvLyBTZW5kaW5nIHRoZSBzeW5jaHJvbm91
cyBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpHZXRQbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QgbWVzc2FnZSBjYW4gY2F1c2UgdXMgdG8gZGlzcGF0Y2ggYW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmgKaW5kZXggN2EzNmMxYS4uZjNm
NzVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmgKQEAgLTEwMSw2ICsxMDEsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgdmlydHVhbCBi
b29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUpIE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKTsKKyAgICAKICAgICB2aXJ0dWFsIE5Q
T2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBhMWU4MTI2Li4x
NzNiYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwCkBAIC0yNzEsNiArMjcxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmlldyhQYXNz
UmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBwbHVnaW5FbGVtZW50LCBQYXNzUmVmUHRyPFAKICNl
bmRpZgogICAgICwgbV9tYW51YWxTdHJlYW1TdGF0ZShTdHJlYW1TdGF0ZUluaXRpYWwpCiAgICAg
LCBtX3BsdWdpblNuYXBzaG90VGltZXIodGhpcywgJlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90
VGltZXJGaXJlZCwgcGx1Z2luU25hcHNob3RUaW1lckRlbGF5KQorICAgICwgbV9mdWxsUGFnZVBs
dWdpblNjYWxlRmFjdG9yKDEpCiB7CiAgICAgbV93ZWJQYWdlLT5hZGRQbHVnaW5WaWV3KHRoaXMp
OwogfQpAQCAtNDI3LDYgKzQyOCwxOCBAQCB2b2lkIFBsdWdpblZpZXc6OnBhZ2VTY2FsZUZhY3Rv
ckRpZENoYW5nZSgpCiAgICAgdmlld0dlb21ldHJ5RGlkQ2hhbmdlKCk7CiB9CiAKK3ZvaWQgUGx1
Z2luVmlldzo6c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3Is
IEludFBvaW50KQoreworICAgIG1fZnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3RvciA9IHNjYWxlRmFj
dG9yOworICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2Nh
bGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVGYWN0b3IpKTsKKyAgICBwYWdlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKTsKK30KKworZG91YmxlIFBsdWdpblZpZXc6OmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0
b3IoKQoreworICAgIHJldHVybiBtX2Z1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3I7Cit9CisKIHZv
aWQgUGx1Z2luVmlldzo6d2ViUGFnZURlc3Ryb3llZCgpCiB7CiAgICAgbV93ZWJQYWdlID0gMDsK
QEAgLTc2MCw2ICs3NzMsMTYgQEAgdm9pZCBQbHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCog
ZXZlbnQpCiAgICAgaWYgKGRpZEhhbmRsZUV2ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKIH0KKyAgICAKK2Jvb2wgUGx1Z2luVmlldzo6aGFuZGxlRWRpdGluZ0NvbW1h
bmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sK
KyAgICByZXR1cm4gbV9wbHVnaW4tPmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBh
cmd1bWVudCk7Cit9CisgICAgCitib29sIFBsdWdpblZpZXc6OmlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5p
c0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFtZSk7Cit9CiAKIHZvaWQgUGx1Z2luVmll
dzo6bm90aWZ5V2lkZ2V0KFdpZGdldE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCAxM2Uw
YTk3Li4yOTFlNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmgKQEAgLTc5LDEwICs3OSwxNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXM7IG5vYm9keSBzaG91bGQgaGF2ZSB0byBrbm93IGFib3V0IHRoZSBwbHVnLWlu
IHZpZXcncyByZW5kZXJlciBleGNlcHQgdGhlIHBsdWctaW4gdmlldyBpdHNlbGYuCiAgICAgV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyKCkgY29uc3Q7CisgICAgCisgICAg
dm9pZCBzZXRGdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3RvciwgV2Vi
Q29yZTo6SW50UG9pbnQgb3JpZ2luKTsKKyAgICBkb3VibGUgZnVsbFBhZ2VQbHVnaW5TY2FsZUZh
Y3RvcigpOworICAgIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgeyByZXR1
cm4gbV9wbHVnaW4tPnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygpOyB9CiAKICAgICB2
b2lkIHBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwogICAgIHZvaWQgd2ViUGFnZURlc3Ryb3ll
ZCgpOwogCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZpcnR1YWwgYm9v
bCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKKwog
cHJpdmF0ZToKICAgICBQbHVnaW5WaWV3KFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQ+LCBQYXNzUmVmUHRyPFBsdWdpbj4sIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYgcGFy
YW1ldGVycyk7CiAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwpAQCAtMjM2LDYgKzI0Myw4IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV90cmFuc2llbnRQYWludGlu
Z1NuYXBzaG90OwogICAgIC8vIFRoaXMgdGltZXIgaXMgdXNlZCB3aGVuIHBsdWdpbiBzbmFwc2hv
dHRpbmcgaXMgZW5hYmxlZCwgdG8gY2FwdHVyZSBhIHBsdWdpbiBwbGFjZWhvbGRlci4KICAgICBX
ZWJDb3JlOjpEZWZlcnJhYmxlT25lU2hvdFRpbWVyPFBsdWdpblZpZXc+IG1fcGx1Z2luU25hcHNo
b3RUaW1lcjsKKworICAgIGRvdWJsZSBtX2Z1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3I7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAK
aW5kZXggNmRhMjQyNS4uYzI5NDYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAKQEAgLTExNDYsMTAgKzExNDYsOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0
b3JlVmlld1N0YXRlKCkKICAgICAvLyBJbmZvcm0gdGhlIFVJIHByb2Nlc3Mgb2YgdGhlIHNjYWxl
IGZhY3Rvci4KICAgICBkb3VibGUgc2NhbGVGYWN0b3IgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+
bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0oKS0+cGFnZVNjYWxlRmFjdG9yKCk7CiAK
LSAgICAvLyBBIHNjYWxlIGZhY3RvciBvZiAwLjAgbWVhbnMgdGhlIGhpc3RvcnkgaXRlbSBhY3R1
YWxseSBoYXMgdGhlICJkZWZhdWx0IHNjYWxlIGZhY3RvciIgb2YgMS4wLgotICAgIGlmICghc2Nh
bGVGYWN0b3IpCi0gICAgICAgIHNjYWxlRmFjdG9yID0gMS4wOwotICAgIG1fZnJhbWUtPnBhZ2Uo
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uo
c2NhbGVGYWN0b3IpKTsKKyAgICAvLyBBIHNjYWxlIGZhY3RvciBvZiAwIG1lYW5zIHRoZSBoaXN0
b3J5IGl0ZW0gaGFzIHRoZSBkZWZhdWx0IHNjYWxlIGZhY3RvciwgdGh1cyB3ZSBkbyBub3QgbmVl
ZCB0byB1cGRhdGUgaXQuCisgICAgaWYgKHNjYWxlRmFjdG9yKQorICAgICAgICBtX2ZyYW1lLT5w
YWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hh
bmdlKHNjYWxlRmFjdG9yKSk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGJlIG5l
Y2Vzc2FyeS4gV2ViQ29yZSBzaG91bGQgYmUgY29ycmVjdGx5IGludmFsaWRhdGluZwogICAgIC8v
IHRoZSB2aWV3IG9uIHJlc3RvcmVzIGZyb20gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KQEAgLTEy
MTYsNyArMTIxNSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0Nv
bW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCiAgICAgYm9vbCBpc01haW5GcmFt
ZSA9IHdlYlBhZ2UtPm1haW5XZWJGcmFtZSgpID09IG1fZnJhbWU7CiAgICAgCiAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCk7Ci0gICAgbV9mcmFtZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxk
VXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV9mcmFt
ZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxk
VXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CiAgICAgbV9mcmFt
ZUNhbWVGcm9tUGFnZUNhY2hlID0gdHJ1ZTsKIH0KIApAQCAtMTIzMCw3ICsxMjI5LDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgp
CiAgICAgSW50UmVjdCBjdXJyZW50VmlzaWJsZUNvbnRlbnRCb3VuZHMgPSBtX2ZyYW1lLT52aXNp
YmxlQ29udGVudEJvdW5kcygpOwogCiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJl
c3BvbnNlKCk7Ci0gICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJh
bWUgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25G
b3JSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9u
ID0gaXNNYWluRnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25G
b3JSZXNwb25zZShyZXNwb25zZSk7CiAgICAgbV9mcmFtZUNhbWVGcm9tUGFnZUNhY2hlID0gZmFs
c2U7CiAKICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+Y3JlYXRlVmlldyh3ZWJQYWdlLT5zaXpl
KCksIGJhY2tncm91bmRDb2xvciwgLyogdHJhbnNwYXJlbnQgKi8gZmFsc2UsIEludFNpemUoKSwg
c2hvdWxkVXNlRml4ZWRMYXlvdXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IGUyNmViODguLjY3YjkwMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTEwNiw2ICsxMDYsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyVmlldy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KQEAgLTE1MCw3ICsxNTEsMTAgQEAKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisjaW5jbHVkZSAi
QnVpbHRJblNpbXBsZVBERlZpZXcuaCIKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyNpbmNs
dWRlICJCdWlsdEluUERGS2l0Vmlldy5oIgorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KFFUKQpAQCAtMjE4LDYgKzIyMiw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlE
LCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgICwgbV9h
c3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKGZhbHNl
KQogICAgICwgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFsc2UpCisg
ICAgLCBtX3BkZktpdFBsdWdpbkVuYWJsZWQoZmFsc2UpCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
ICwgbV93aW5kb3dJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX2lzU21hcnRJbnNlcnREZWxldGVF
bmFibGVkKHBhcmFtZXRlcnMuaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpCkBAIC00NjYsOCAr
NDcxLDE2IEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBXZWJQYWdlOjpjcmVhdGVQbHVnaW4oV2ViRnJh
bWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1CiAgICAgaWYgKHBsdWdpblBhdGguaXNO
dWxsKCkpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLm1pbWVU
eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiCi0gICAgICAgICAgICB8fCAocGFyYW1ldGVycy5taW1l
VHlwZS5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5kc1dpdGgo
Ii5wZGYiKSkpCi0gICAgICAgICAgICByZXR1cm4gQnVpbHRJblBERlZpZXc6OmNyZWF0ZShmcmFt
ZSk7CisgICAgICAgICAgICB8fCAocGFyYW1ldGVycy5taW1lVHlwZS5pc0VtcHR5KCkgJiYgcGFy
YW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5kc1dpdGgoIi5wZGYiKSkpIHsKKyNpZiBFTkFC
TEUoUERGS0lUX1BMVUdJTikKKyAgICAgICAgICAgIGlmIChwZGZLaXRQbHVnaW5FbmFibGVkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5QREZLaXRWaWV3OjpjcmVhdGUoZnJhbWUp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBCdWlsdEluU2ltcGxl
UERGVmlldzo6Y3JlYXRlKGZyYW1lKTsKKyNlbHNlCisgICAgICAgICAgICByZXR1cm4gQnVpbHRJ
blNpbXBsZVBERlZpZXc6OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYKKyAgICAgICAgfQogI2Vsc2UK
ICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKICNlbmRpZgpAQCAtNjE4LDExICs2MzEsMzAg
QEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViUGFnZTo6dHJhY2tlZFJlcGFpbnRSZWN0
cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0b3IpOwogfQogCitzdGF0
aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBp
ZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBQbHVn
aW5Eb2N1bWVudCogcGx1Z2luRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+
KGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0
YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOwor
ICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwog
dm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm47CisKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1
Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykgeworICAg
ICAgICBwbHVnaW5WaWV3LT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1l
bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+
Y29tbWFuZChjb21tYW5kTmFtZSkuZXhlY3V0ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMiw2ICs2
NjQsMTEgQEAgYm9vbCBXZWJQYWdlOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZy
YW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsKKyAgICAKICAgICBFZGl0
b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFt
ZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxl
ZCgpOwogfQpAQCAtMTA3MSw4ICsxMTA4LDE0IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2NyZWVu
RGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJRCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBhZ2Uo
ZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogeworICAgIFBsdWdpblZpZXcq
IHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7Cisg
ICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5T
Y2FsaW5nKCkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZh
Y3RvcihzY2FsZSwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBt
X3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAgIGZv
ciAoSGFzaFNldDxQbHVnaW5WaWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5WaWV3
cy5iZWdpbigpLCBlbmQgPSBtX3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgICgqaXQpLT5wYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2ICsx
MTI0LDEwIEBAIHZvaWQgV2ViUGFnZTo6c2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3QgSW50
UG9pbnQmIG9yaWdpbikKIAogZG91YmxlIFdlYlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0
CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3Bh
Z2UtPm1haW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5zaG91
bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXct
PmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKTsKKyAgICAKICAgICByZXR1cm4gbV9wYWdlLT5w
YWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTUzMSw5ICsxNTc4LDE1IEBAIHZvaWQgV2ViUGFn
ZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGZy
YW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAgICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRlKCk7
Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlz
RW5hYmxlZCgpOworICAgICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0Zv
ckZyYW1lKGZyYW1lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwbHVnaW5WaWV3KQorICAgICAg
ICAgICAgaXNFbmFibGVkID0gcGx1Z2luVmlldy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29t
bWFuZE5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKKyAgICAgICAg
ICAgIHN0YXRlID0gY29tbWFuZC5zdGF0ZSgpOworICAgICAgICAgICAgaXNFbmFibGVkID0gY29t
bWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZhbGlkYXRlQ29tbWFuZENh
bGxiYWNrKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlLCBjYWxsYmFja0lEKSk7CkBAIC0y
MDUxLDYgKzIxMDQsOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdl
YlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIG1fYXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxp
emF0aW9uRGVsYXlFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVu
Y2VzS2V5OjphcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWRLZXkoKSk7
CiAKICAgICBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRC
b29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9n
Z2luZ0VuYWJsZWRLZXkoKSk7CisgICAgCisgICAgbV9wZGZLaXRQbHVnaW5FbmFibGVkID0gc3Rv
cmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwZGZLaXRQbHVnaW5FbmFi
bGVkS2V5KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9t
IG1hY3JvIGV4cGFuc2lvbiBmb3IgYWxsIHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBjdXJy
ZW50bHkgZG9uJ3QgbWF0Y2ggdGhlIG5hbWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2UgYXJl
CkBAIC0zMzkxLDQgKzM0NDYsMjQgQEAgdm9pZCBXZWJQYWdlOjpzZXRTY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBmcmFtZVZpZXctPnNldFNjcm9s
bGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3N0YXRpYyBib29s
IGNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIFN0cmluZyBwbHVnaW5QYXRoOworICAgIGJvb2wgYmxvY2tlZDsKKyAgICAKKyAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgpLCBy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBs
dWdpblBhdGg6OlJlcGx5KHBsdWdpblBhdGgsIGJsb2NrZWQpLCAwKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0VtcHR5
KCk7Cit9CisKK2Jvb2wgV2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNwb25z
ZS5taW1lVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgYSBwbHVn
LWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNob3Vs
ZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgorICAgIHJl
dHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CmluZGV4IDRkOTUyNDYuLmI1MjM3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTEzLDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFByaW50Q29udGV4dDsKICAgICBjbGFzcyBSYW5n
ZTsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVz
dDsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
QEAgLTU4MSw2ICs1ODIsOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgbmF0aXZlV2luZG93SGFu
ZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KICNlbmRpZgogCisgICAgYm9v
bCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsKKwogICAgIGJvb2wgYXN5bmNocm9ub3VzUGx1Z2lu
SW5pdGlhbGl6YXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY2hyb25vdXNQbHVn
aW5Jbml0aWFsaXphdGlvbkVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1BsdWdp
bkluaXRpYWxpemF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hc3luY2hyb25vdXNQbHVn
aW5Jbml0aWFsaXphdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgYm9vbCBhc3luY2hyb25v
dXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKCkgY29uc3QgeyByZXR1
cm4gbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5z
OyB9CkBAIC01OTIsNiArNTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZChib29sKTsKKyAgICAKKyAgICBib29sIHBkZktpdFBsdWdpbkVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX3BkZktpdFBsdWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFBE
RktpdFBsdWdpbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGRmS2l0UGx1Z2luRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworI2VuZGlm
CiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VD
cmVhdGlvblBhcmFtZXRlcnMmKTsKQEAgLTc5NCw2ICs4MDQsOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQ7CiAKICAgICBi
b29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsKKyAgICAKKyAgICBib29s
IG1fcGRmS2l0UGx1Z2luRW5hYmxlZDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBXaGV0
aGVyIHRoZSBjb250YWluaW5nIHdpbmRvdyBpcyB2aXNpYmxlIG9yIG5vdC4KQEAgLTkyMyw2ICs5
MzUsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNp
YmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICBXZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9y
Q2xpZW50OworCisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlw
ZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0KaW5kZXggMjIyNzNjMS4uOWQzYmFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQgQEAg
dm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZl
cmVuY2VzU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9
IHRoaXMtPmluc3BlY3RvcigpKQogICAgICAgICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVzZXNX
ZWJLaXRVc2VySW50ZXJmYWNlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNl
c0tleTo6aW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAgQk9P
TCBvbWl0UERGU3VwcG9ydCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOworICAgIGlmICghcGRmS2l0UGx1
Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3VwcG9ydCkgeworICAgICAgICAvLyBXZSB3YW50IHRv
IHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KKyAg
ICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzID0gcGRmQW5k
UG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBDYXNl
Rm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9IG1pbWVUeXBlcy5iZWdpbigpOyBpdCAhPSBtaW1l
VHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXBy
ZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAgfQogfQogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKQEAgLTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBXZWJQ
YWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZEb2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4dCwg
UERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUgaWRl
YWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24uIChhbmQgbm93IGl0J3MgZHVwbGljYXRlZCBoZXJl
IGFuZCBpbiBXZWJDb250ZXh0TWFjKQorSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4g
V2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpCit7CisgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzOworICAgIAorICAgIG1pbWVUeXBlcy5hZGQo
ImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bvc3Rz
Y3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRkKCJ0ZXh0L3BkZiIpOworICAgIAorICAgIHJldHVy
biBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggOThjOTMwMi4uNmY2N2VkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAgIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVy
dmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNl
bnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVz
ZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlv
bltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENv
ZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsK
IApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQb3J0
Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGJvb2wgY2Fu
UGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17
Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0gICAgYm9vbCBibG9ja2VkOwotCi0gICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9uc2Uu
dXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRo
OjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0KLWJv
b2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWlt
ZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1lVHlw
ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgYSBwbHVnLWluIGV4aXN0
cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtlIHBy
ZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgotICAgIHJldHVybiAhY2Fu
UGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6OmNs
ZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9D
bGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMocmVzb3VyY2VDYWNoZXNU
b0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNzNmMDc5
Ni4uNjllODAzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTE1
MCwxNCArMTUwLDEzIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgcGlkX3QgcHJl
c2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0
aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsgfQorICAg
IGJvb2wgc2hvdWxkVXNlUERGS2l0UGx1Z2luKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VQ
REZLaXRQbHVnaW47IH0KICNlbmRpZiAKICAgICAKICNpZiBQTEFURk9STShRVCkKICAgICBRTmV0
d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3
b3JrQWNjZXNzTWFuYWdlcjsgfQogI2VuZGlmCiAKLSAgICBib29sIHNob3VsZFVzZUN1c3RvbVJl
cHJlc2VudGF0aW9uRm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYp
IGNvbnN0OwotCiAgICAgLy8gVGV4dCBDaGVja2luZwogICAgIGNvbnN0IFRleHRDaGVja2VyU3Rh
dGUmIHRleHRDaGVja2VyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7
IH0KIApAQCAtMzA2LDYgKzMwNSw3IEBAIHByaXZhdGU6CiAgICAgcGlkX3QgbV9wcmVzZW50ZXJB
cHBsaWNhdGlvblBpZDsKICAgICBkaXNwYXRjaF9ncm91cF90IG1fY2xlYXJSZXNvdXJjZUNhY2hl
c0Rpc3BhdGNoR3JvdXA7CiAgICAgYm9vbCBtX3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1
dGlvbjsKKyAgICBib29sIG1fc2hvdWxkVXNlUERGS2l0UGx1Z2luOwogI2VuZGlmCiAKICAgICBi
b29sIG1fZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZDsKQEAgLTMyMCw4ICszMjAsNiBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbD4gPiBtX21lc3NhZ2VQb3J0Q2hhbm5lbHM7CiAjZW5kaWYKIAotICAgIEhh
c2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJl
c2VudGF0aW9uczsKLQogICAgIFRleHRDaGVja2VyU3RhdGUgbV90ZXh0Q2hlY2tlclN0YXRlOwog
ICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0aW9uTWFuYWdlcjsKICNpZiBFTkFC
TEUoQkFUVEVSWV9TVEFUVVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L21hYy9XZWJQcm9jZXNzTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2Vi
UHJvY2Vzc01hYy5tbQppbmRleCA1MTlkNjJiLi42NzlmMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWMubW0KQEAgLTI3NCw2ICsyNzQsOCBAQCB2
b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycwogCiAgICAgbV9zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJz
dGl0dXRpb24gPSBwYXJhbWV0ZXJzLnNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsK
ICAgICBGb250OjpzZXREZWZhdWx0VHlwZXNldHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3Vs
ZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVz
IDogMCk7CisgICAgCisgICAgbV9zaG91bGRVc2VQREZLaXRQbHVnaW4gPSBwYXJhbWV0ZXJzLnNo
b3VsZFVzZVBERktpdFBsdWdpbjsKIAogICAgIG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0
ID0gcGFyYW1ldGVycy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nUG9ydC5wb3J0KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168485</attachid>
            <date>2012-10-12 14:37:36 -0700</date>
            <delta_ts>2012-10-12 15:32:09 -0700</delta_ts>
            <desc>this version doesn&apos;t have the BuiltInPDFView-&gt;BuiltInSimplePDFView rename, so it&apos;s easier to review but won&apos;t build.</desc>
            <filename>pdf.diff</filename>
            <type>text/plain</type>
            <size>106386</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZmQyY2Q3Ny4uOWE2YzcxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTI4NSwxMSArMjg1LDE0IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
NWNvbnRlbnRzUmVzaXplZEV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTZoYW5kbGVX
aGVlbEV2ZW50RVJLTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTd3aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVB
cmVhMTl3aWxsU3RhcnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
OWludmFsaWRhdGVTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFUktOU183SW50UmVjdEUKK19fWk5L
N1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjFtb3VzZUVudGVyZWRTY3JvbGxiYXJFUE5TXzlTY3Jv
bGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjJpbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjNkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyNHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZUVOU18yMVNjcm9sbGJhck92ZXJsYXlTdHls
ZUUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyNWRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjd3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCitfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMjdub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWRFUktOU184SW50UG9pbnRFCiBf
X1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjhzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxz
RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI5d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhNnNjcm9sbEVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFy
aXR5RWYKQEAgLTMyMSw2ICszMjQsOCBAQCBfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZwogX19aTjdX
ZWJDb3JlMTRzZXRNZXRhZGF0YVVSTEVSTjNXVEY2U3RyaW5nRVJLUzFfUzRfCiBfX1pON1dlYkNv
cmUxNUFmZmluZVRyYW5zZm9ybTVmbGlwWUV2CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9y
bTVzY2FsZUVkCitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKK19fWk5L
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTZ5U2NhbGVFdgogX19aTjdXZWJDb3JlMTVBZmZpbmVU
cmFuc2Zvcm04bXVsdGlwbHlFUktTMF8KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOXRy
YW5zbGF0ZUVkZAogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm1DMUVkZGRkZGQKQEAgLTM1
MSw2ICszNTYsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dF
dgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xv
ckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0Rmls
bEdyYWRpZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQxOHNldFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDE5c2V0SXNDQUxheWVyQ29udGV4dEViCiBfX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDIwZW5kVHJhbnNwYXJlbmN5TGF5ZXJFdgogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQyMHNldFNob3VsZFNtb290aEZvbnRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjFzZXRDb21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKQEAg
LTQ2Nyw2ICs0NzMsOCBAQCBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2
U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43
V2ViQ29yZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVQTlNfMTVET01XcmFwcGVy
V29ybGRFCiBfX1pON1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhEb2N1
bWVudEUKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE3Z2VuZXJhbFBhc3RlYm9hcmRFdgorX19a
TjdXZWJDb3JlMTBQYXN0ZWJvYXJkMTR3cml0ZVBsYWluVGV4dEVSS04zV1RGNlN0cmluZ0VOUzBf
MThTbWFydFJlcGxhY2VPcHRpb25FCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEw
dW5pcXVlTmFtZUV2CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9y
VHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNz
dHJpbmdGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhOGE5NzYuLjllMmE0MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE0NDAsNyArMTQ0MCw3IEBACiAJCTRBRDAxNzNEMTI3RTgyODYwMDE1MDM1RiAvKiBKU0hUTUxP
dXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QUQwMTczQjEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oICov
OyB9OwogCQk0QUYxQUQzRTEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRjFB
RDNDMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwICovOyB9Owog
CQk0QUYxQUQzRjEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUYxQUQzRDEzRkQy
M0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdG
IC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IH07CisJ
CTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0Yg
LyogUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRCMjcwOTgzMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi87IH07CiAJCTRCMzA0M0M3MEFFMDM3
MDMwMEE4MjY0NyAvKiBTb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEIzMDQzQzYwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggKi87IH07CiAJ
CTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M4MEFFMDM3MUQwMEE4MjY0NyAv
KiBTb3VuZE1hYy5tbSAqLzsgfTsKQEAgLTIyMjc3LDYgKzIyMjc3LDcgQEAKIAkJCWlzYSA9IFBC
WEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAorCQkJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REIxNTA1RjA3
NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRTFC
MUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDU3NSw3ICsyNDU3Niw2IEBACiAJCQkJRkQzMTYwQTMxMkIwMjZGNzAwQzFBMzU5IC8qIFBh
bm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NkFDMTMwREQ3QUQ1QzAwNDE1RjM0IC8qIFBh
cnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VG
MjY5IC8qIFBhc3N3b3JkSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0QjI3MDhDNzBB
RjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkw
NTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjI3NTM1ODAwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXgg
Yzc0NGFmNi4uOTMwY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
cihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0IHsgfQogCiAgICAgLy8gQ29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdl
ZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcgdmlldy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIvU291
cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5kZXgg
Y2U0MWQzMC4uM2Y0MGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTExNiw2ICsxMTYsMTEgQEAgRU5BQkxF
X05PVElGSUNBVElPTlNfbWFjb3N4XzEwNzAgPSA7CiBFTkFCTEVfTk9USUZJQ0FUSU9OU19tYWNv
c3hfMTA4MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxFX05PVElGSUNBVElPTlNfbWFj
b3N4XzEwOTAgPSBFTkFCTEVfTk9USUZJQ0FUSU9OUzsKIEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlf
QVBJID0gOworRU5BQkxFX1BERktJVF9QTFVHSU4gPSAkKEVOQUJMRV9QREZLSVRfUExVR0lOXyQo
UkVBTF9QTEFURk9STV9OQU1FKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3ggPSAkKEVO
QUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01BSk9S
KSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA3MCA9IDsKK0VOQUJMRV9QREZLSVRf
UExVR0lOX21hY29zeF8xMDgwID0gOworRU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XzEwOTAg
PSBFTkFCTEVfUERGS0lUX1BMVUdJTjsKIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UID0gRU5BQkxF
X1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7CkBAIC0xNDMsNCAr
MTQ4LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVOQUJM
RV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVT
ID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5ORUxf
TUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9O
X0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5H
KSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVOQUJM
RV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9OKSAk
KEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NTU19T
VElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNfVEVY
VF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxFX0RB
U0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRB
X1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RFVklD
RV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVDVE9S
WV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJT04p
ICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdI
X0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NFQU1M
RVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQo
RU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChFTkFC
TEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FM
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChF
TkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJRklD
QVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVE
SU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAkKEVO
QUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RBVElT
VElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxFX01J
Q1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FUT1Jf
Q09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9WSVNJ
QklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gp
ICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9T
UUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJM
RV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVY
VF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVf
VE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVP
KSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJ
TykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJ
REdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9E
RUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NI
QU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNP
UkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBP
U0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAk
KEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVU
SU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxF
X0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NT
UzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5B
QkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJM
RV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxF
X0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJ
UkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9D
QVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJM
RV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1F
X1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVF
Q0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkg
JChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElN
RUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJ
TUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dF
UikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9O
T1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9X
RUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVS
KSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFf
U1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5B
QkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJ
R0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFH
RV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJPR1JF
U1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5B
QkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxF
X1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQo
RU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhU
X05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJM
RV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChF
TkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQo
RU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktF
UlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDMxYTVkNjEuLjBjNjE3ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHAKQEAgLTUyMSw2ICs1MjEsMjEgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVyUHJv
eHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmQK
ICAgICBoYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVu
dCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBib29s
JiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+aGFuZGxlRWRpdGluZ0NvbW1h
bmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKK30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJvbGxl
clByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
LCBib29sJiBlbmFibGVkKQoreworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+aXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQorICAgIAordm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyhib29sJiBlbmFibGVkKQorewor
ICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCk7
Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdpbigpCiB7
CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCBiNGE0MDY3Li4z
MzIxNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2lu
Q29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBib29sJiBoYW5kbGVk
KTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jiwg
Ym9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktl
eWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhhbmRsZUVkaXRpbmdDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIGJv
b2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBzaG91bGRVc2VGdWxs
UGFnZVBsdWdpblNjYWxpbmcoYm9vbCYgZW5hYmxlZCk7CiAgICAgdm9pZCBwYWludEVudGlyZVBs
dWdpbigpOwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tp
bmdTdG9yZUhhbmRsZSk7CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW4KaW5kZXggZDdjMmQwMi4uOTQ4ZWI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVz
c2FnZXMuaW4KQEAgLTczLDYgKzczLDE1IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xsZXJQ
cm94eSB7CiAKICAgICAjIFNlbnQgd2hlbiBhIGtleWJvYXJkIHNob3VsZCBiZSBwcm9jZXNzZWQu
CiAgICAgSGFuZGxlS2V5Ym9hcmRFdmVudChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQga2V5Ym9h
cmRFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKKyAgICAKKyAgICAjIFNlbnQgd2hlbiBhbiBlZGl0
aW5nIGNvbW1hbmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICBIYW5kbGVFZGl0aW5nQ29tbWFu
ZChXVEY6OlN0cmluZyBjb21tYW5kTmFtZSwgV1RGOjpTdHJpbmcgYXJndW1lbnQpIC0+IChib29s
IGhhbmRsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdh
bnRzIHRvIGVuYWJsZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgIElzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVkKTsK
KyAgICAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBvdmVy
cmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICBTaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmco
KSAtPiAoYm9vbCBlbmFibGVkKTsKIAogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZvY3Vz
IGNoYW5nZXMuCiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAppbmRleCAxZTNjYTYzLi5hMTA3ZjllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTEzNyw2ICsx
MzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhTY3JlZW5Gb250U3Vic3RpdHV0
aW9uRW5hYmxlZCwgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQsIEJvb2wsIGJvb2wsIERF
RkFVTFRfU0NSRUVOX0ZPTlRfU1VCU1RJVFVUSU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhDb29r
aWVFbmFibGVkLCBjb29raWVFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFjcm8o
UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgcGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgQm9v
bCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhQREZLaXRQbHVnaW5FbmFibGVkLCBwZGZLaXRQ
bHVnaW5FbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBGT1Jf
RUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA4
MDAzMGFjLi45OTUyZjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC00Myw2ICs0Myw3IEBAIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMoKQogICAg
ICwgbnNVUkxDYWNoZURpc2tDYXBhY2l0eSgwKQogICAgICwgc2hvdWxkRm9yY2VTY3JlZW5Gb250
U3Vic3RpdHV0aW9uKGZhbHNlKQogICAgICwgc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJl
c0J5RGVmYXVsdChmYWxzZSkKKyAgICAsIHNob3VsZFVzZVBERktpdFBsdWdpbihmYWxzZSkKICNl
bGlmIFBMQVRGT1JNKFdJTikKICAgICAsIHNob3VsZFBhaW50TmF0aXZlQ29udHJvbHMoZmFsc2Up
CiAjZW5kaWYKQEAgLTY2LDcgKzY3LDYgQEAgdm9pZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb24KICAgICBl
bmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzKTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZCk7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JTRW5hYmxlZCk7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlKG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbik7CiAgICAg
ZW5jb2Rlci0+ZW5jb2RlRW51bShjYWNoZU1vZGVsKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hv
dWxkVHJhY2tWaXNpdGVkTGlua3MpOwogICAgIGVuY29kZXItPmVuY29kZShzaG91bGRBbHdheXNV
c2VDb21wbGV4VGV4dENvZGVQYXRoKTsKQEAgLTkyLDYgKzkyLDcgQEAgdm9pZCBXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyKSBjb24KICAgICBlbmNvZGVyLT5lbmNvZGUodWlQcm9jZXNzQnVuZGxlUmVzb3VyY2VQYXRo
RXh0ZW5zaW9uSGFuZGxlKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkRm9yY2VTY3JlZW5G
b250U3Vic3RpdHV0aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkRW5hYmxlS2Vybmlu
Z0FuZExpZ2F0dXJlc0J5RGVmYXVsdCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHNob3VsZFVzZVBE
RktpdFBsdWdpbik7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNo
b3VsZFBhaW50TmF0aXZlQ29udHJvbHMpOwogICAgIGVuY29kZXItPmVuY29kZShjZlVSTENhY2hl
UGF0aCk7CkBAIC0xNDcsOCArMTQ4LDYgQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJl
cHJlc2VudGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlRW51bShwYXJhbWV0ZXJzLmNhY2hlTW9kZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy5zaG91bGRUcmFja1Zpc2l0ZWRM
aW5rcykpCkBAIC0xOTcsNiArMTk2LDggQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMuc2hv
dWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFVzZVBERktp
dFBsdWdpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFBhaW50TmF0aXZlQ29udHJv
bHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAwZDU0M2ZhLi5kYzVlMzE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKQEAgLTY5LDkgKzY5LDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNw
bGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NP
UlNFbmFibGVkOwogCi0gICAgLy8gTUlNRSB0eXBlcyBmb3Igd2hpY2ggdGhlIFVJIHByb2Nlc3Mg
d2lsbCBoYW5kbGUgc2hvd2luZyB0aGUgZGF0YS4KLSAgICBWZWN0b3I8U3RyaW5nPiBtaW1lVHlw
ZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0KICAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWw7
CiAgICAgYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsKIApAQCAtMTEzLDYgKzExMCw4IEBA
IHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGJvb2wgc2hvdWxk
Rm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwogICAgIGJvb2wgc2hvdWxkRW5hYmxlS2Vybmlu
Z0FuZExpZ2F0dXJlc0J5RGVmYXVsdDsKKworICAgIGJvb2wgc2hvdWxkVXNlUERGS2l0UGx1Z2lu
OwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIFN0cmluZyBjZlVSTENhY2hlUGF0aDsKICAgICB1
aW50NjRfdCBjZlVSTENhY2hlRGlza0NhcGFjaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMuaAppbmRleCA0NGMzNzVjLi5jOWExZTBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaApAQCAtMzMsNiArMzMsMTAgQEAgQ2xhc3MgY2xh
c3NGcm9tUERGS2l0KE5TU3RyaW5nICpjbGFzc05hbWUpOwogQ2xhc3MgcGRmQW5ub3RhdGlvbkxp
bmtDbGFzcygpOwogQ2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwogCisjaWYgRU5BQkxFKFBERktJ
VF9QTFVHSU4pCitDbGFzcyBwZGZMYXllckNvbnRyb2xsZXJDbGFzcygpOworI2VuZGlmCisKIH0K
IAogI2VuZGlmIC8vIFBERktpdEltcG9ydHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Q
REZLaXRJbXBvcnRzLm1tCmluZGV4IDYyMzRhODMuLmJjY2ZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMubW0KQEAgLTU0LDUgKzU0LDE0IEBAIENsYXNzIHBk
ZkRvY3VtZW50Q2xhc3MoKQogICAgIEFTU0VSVChwZGZEb2N1bWVudENsYXNzKTsKICAgICByZXR1
cm4gcGRmRG9jdW1lbnRDbGFzczsKIH0KKyAgICAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
K0NsYXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcGRm
TGF5ZXJDb250cm9sbGVyQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZMYXllckNvbnRyb2xs
ZXIiKTsKKyAgICBBU1NFUlQocGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOworICAgIHJldHVybiBw
ZGZMYXllckNvbnRyb2xsZXJDbGFzczsKK30KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWNjZTIwNS4uN2Q5
NWZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVy
ZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzLmNwcApAQCAtOTMzLDMgKzkzMywxMyBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5T
bmFwc2hvdHRpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7CiAg
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJs
ZWQoKTsKIH0KKwordm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0UERGS2l0UGx1Z2luRW5hYmxlZChlbmFibGVkKTsKK30KKwor
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5w
ZGZLaXRQbHVnaW5FbmFibGVkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGMwMjYxMWMuLmEzNzY3MDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oCkBAIC0yMjMsNiArMjIzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
CiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29va2llRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzLCBib29sIGVuYWJsZWQpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldENvb2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAK
Ky8vIERlZmF1bHRzIHRvIGZhbHNlCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0UERG
S2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVu
YWJsZWQpOworV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBERktpdFBsdWdpbkVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7CisKIFdLX0VYUE9SVCB2b2lkIFdL
UHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlkZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAyZTBjOTRmLi4xMWI5NDM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtNDYsNyArNDYs
MTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1B
QykKLSNpbmNsdWRlICJCdWlsdEluUERGVmlldy5oIgorI2luY2x1ZGUgIkJ1aWx0SW5TaW1wbGVQ
REZWaWV3LmgiCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiQnVpbHRJblBE
RktpdFZpZXcuaCIKKyNlbmRpZgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtMzA1LDggKzMwOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdp
bnModWludDY0X3QgcmVxdWVzdElELCBQYXNzT3duUHRyPFZlY3RvcjxQbAogI2lmIFBMQVRGT1JN
KE1BQykKICAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNl
ZCB3aGVuIGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KICAgICAvLyBOT1RFOiBUaGlzIGhh
cyB0byBiZSBkb25lIG9uIHRoZSBtYWluIHRocmVhZCBhcyBpdCBjYWxscyBsb2NhbGl6ZWRTdHJp
bmcoKS4KLSAgICBpZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkKLSAgICAgICAgcGx1
Z2lucy0+YXBwZW5kKEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkpOworICAgIGlmICghbV9j
b250ZXh0LT5vbWl0UERGU3VwcG9ydCgpKSB7CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisg
ICAgICAgIHBsdWdpbnMtPmFwcGVuZChCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luSW5mbygpKTsK
KyNlbmRpZgorICAgICAgICBwbHVnaW5zLT5hcHBlbmQoQnVpbHRJblNpbXBsZVBERlZpZXc6OnBs
dWdpbkluZm8oKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpEaWRHZXRQbHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5
ODFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1t
CkBAIC03NywxMiArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdl
YlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFt
ZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21p
dFBERlN1cHBvcnQoKSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGlu
IHRoZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVz
KCk7Ci0gICAgICAgIHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9u
LmFwcGVuZFJhbmdlKG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0K
ICAgICBwYXJhbWV0ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nl
c3NJbmZvXSBwcm9jZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBj
YWNoZVBhdGgoQWRvcHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGQwYjBiY2YuLjU4ZmY5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUy
OTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEz
M0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURG
MTE2MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYx
NjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87
IH07CisJCTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcwRDBFMTYy
MkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLzsgfTsKIAkJMzEwOTk5NzMx
NDZDNzVBMjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAyOURF
QjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZDOUUz
RDAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdl
Yk5vdGlmaWNhdGlvbkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEg
LyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0
aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtOTM0LDcgKzkzNSw3IEBACiAJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQ
REZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi87IH07
CiAJCUUxOTY3RTM2MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblBy
b2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nl
c3Muc2IgKi87IH07CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2Vi
UHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICov
OyB9OwotCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk5ODc1QzE0MkJG
Qzk3MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gKi87IH07CisJCUUxOTk4NzVFMTQyQzA0
NTQwMEJCMkRFNyAvKiBCdWlsdEluU2ltcGxlUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBC
dWlsdEluU2ltcGxlUERGVmlldy5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRG
IC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5n
LmggKi87IH07CiAJCUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5n
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3
MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07CiAJCUUxQUVB
MjJGMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQUVBMjJEMTQ2ODdC
REIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLzsgfTsKQEAgLTEz
MzMsNiArMTMzNCw4IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3Jv
dXBQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8q
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8q
IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyRDg3MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnVpbHRJblBERktpdFZpZXcuaDsgcGF0
aCA9IFBERi9CdWlsdEluUERGS2l0Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRDg3MEQwRTE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluUERGS2l0Vmlldy5tbTsg
cGF0aCA9IFBERi9CdWlsdEluUERGS2l0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlv
bkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3Rp
ZmljYXRpb25DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJDMEM0
OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDY2LDggKzIwNjksOCBAQAogCQlFMTk1ODJENDE1M0ND
MDUzMDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBERktpdEltcG9ydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdp
blByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5QbHVn
aW5Qcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFC
NUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCdWlsdEluUERGVmlldy5oOyBwYXRoID0gUERGL0J1
aWx0SW5QREZWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVDMTQy
QkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1tOyBwYXRoID0gUERGL0J1aWx0SW5Q
REZWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QTE0MkJGOUI4
MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQnVpbHRJblNpbXBsZVBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluU2lt
cGxlUERGVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QzE0MkJG
Qzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluU2ltcGxlUERGVmlldy5tbTsgcGF0aCA9IFBE
Ri9CdWlsdEluU2ltcGxlUERGVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0
cmluZy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0
ZWRTdHJpbmcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJEMTQ2ODdC
REIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODk3LDggKzM5MDAsMTAgQEAKIAkJRTE5OTg3NUIx
NDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3
Lm1tICovLAotCQkJCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5o
ICovLAorCQkJCTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5o
ICovLAorCQkJCTJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5t
bSAqLywKKwkJCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZp
ZXcubW0gKi8sCisJCQkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFBERjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC00ODEyLDYgKzQ4MTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTVENTE4NDU1MTNCQ0Y5Q0MwMEM3RkY0QSAvKiBBUElD
bGllbnRUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEz
RjIwIC8qIEJ1aWx0SW5QREZLaXRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkx
NDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNE
NjEwNTEzQTdGMDNBMDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFBRjBDNEIxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00ODI4LDcgKzQ4MzQsNyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMw
MENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQx
MkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQzQxQUM4MTI2M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1t
IGluIFNvdXJjZXMgKi8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5T
aW1wbGVQREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0
OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1
NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlG
QjcxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggZTI4Yzc4ZC4uYjY2YjJkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUv
TmV0c2NhcGVQbHVnaW4uY3BwCkBAIC05MTMsNiArOTEzLDIxIEBAIGJvb2wgTmV0c2NhcGVQbHVn
aW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRF
dmVudCkKICAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZl
bnQpOwogfQogCitib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitib29sIE5ldHNjYXBlUGx1Z2luOjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxp
bmcoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0
Rm9jdXMoYm9vbCBoYXNGb2N1cykKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVQbHVnaW4uaAppbmRleCA2MWUyYmI3Li5kNTMzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uaApAQCAtMjAzLDYgKzIwMywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBh
Z2VQbHVnaW5TY2FsaW5nKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRh
YmxlTlBPYmplY3QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTgyNzU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGS2l0Vmll
dy5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCdWlsdElu
UERGS2l0Vmlld19oCisjZGVmaW5lIEJ1aWx0SW5QREZLaXRWaWV3X2gKKworI2lmIEVOQUJMRShQ
REZLSVRfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9B
ZmZpbmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+Cisj
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpT
T2JqZWN0UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJl
ZjsKKworT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUERGTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVn
aW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2Ns
YXNzIFdlYkZyYW1lOworCitjbGFzcyBCdWlsdEluUERGS2l0VmlldyA6IHB1YmxpYyBQbHVnaW4s
IHB1YmxpYyBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QnVpbHRJblBERktpdFZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOworICAgIH5CdWls
dEluUERGS2l0VmlldygpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2lu
SW5mbygpOworCisgICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFzeW5j
aHJvbm91cyBpbml0aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJv
bm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZv
aWQgcGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYp
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEJ1aWx0SW5QREZLaXRWaWV3KFdlYkZyYW1lKik7
CisKKyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1
dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZl
bnQgaGFuZGxpbmcuCisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0IFBs
dWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFy
cygpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIo
V2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJh
cihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBhZGRBcmNoaXZlUmVz
b3VyY2UoKTsKKyAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgY2FsY3Vs
YXRlU2l6ZXMoKTsKKworICAgIC8vIFBsdWctaW4gbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBp
bml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCop
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOworICAgIHZpcnR1YWwgYm9v
bCBpc1RyYW5zcGFyZW50KCk7CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3Qs
IGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9y
bSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdmly
dHVhbCB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2Vs
bGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJl
cXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1E
aWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwm
IHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmll
ZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29u
c3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURp
ZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxl
bmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qg
c3RyZWFtSUQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVh
bUlELCBib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMy
X3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9p
ZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVh
bFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBi
b29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBib29s
IGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0
cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgT1ZFUlJJREUgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCgpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHdpbmRv
d1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxl
RmFjdG9yQ2hhbmdlZChmbG9hdCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29s
IGdldEZvcm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRs
ZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFy
aXR5KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
cigpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
OworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJp
bnRpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAv
LyBTY3JvbGxhYmxlQXJlYSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBz
Y3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpT
Y3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXpl
KFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJs
ZUhlaWdodCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1Np
emUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNj
cm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIu
Z2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUs
IFNjcm9sbEFuaW1hdG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2Fp
dGluZyBmb3IgYSBnb29kIHRpbWUgdG8gYW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xs
YmFyU3R5bGVDaGFuZ2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFyZW50UmVjdCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0IE9WRVJSSURFOworCisgICAgSlNPYmplY3RSZWYgbWFrZUpTUERG
RG9jKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXpl
OworICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zv
cm07CisKKyAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOworCisgICAgU3RyaW5nIG1fc3Vn
Z2VzdGVkRmlsZW5hbWU7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1
ZmZlcjsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7CisgICAgV2ViQ29yZTo6SW50U2l6
ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KKworICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgV2Vi
RnJhbWUqIG1fZnJhbWU7CisKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250YWlu
ZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250ZW50TGF5ZXI7Cisg
ICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyOwor
ICAgIFJldGFpblB0cjxQbGF0Zm9ybUxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7Cisg
ICAgUmV0YWluUHRyPFBsYXRmb3JtTGF5ZXI+IG1fc2Nyb2xsQ29ybmVyTGF5ZXI7CisgICAgUmV0
YWluUHRyPFBERkxheWVyQ29udHJvbGxlcj4gbV9wZGZMYXllckNvbnRyb2xsZXI7CisKKyAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1f
bGFzdE1vdXNlUG9pbnQ7CisgICAgCisgICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU+IG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjZW5kaWYg
Ly8gQnVpbHRJblBERktpdFZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGS2l0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlOTdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KQEAgLTAs
MCArMSwxMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShQREZLSVRf
UExVR0lOKQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkJ1aWx0SW5QREZLaXRWaWV3
LmgiCisKKyNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIK
KyNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBv
cnQgIldlYkV2ZW50Q29udmVyc2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250
ZXh0UmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmQ0YuaD4KKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2Uu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50
TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFkZXJN
YXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvUGx1Z2luRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVj
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9TY3JvbGxiYXJUaGVtZS5oPgorCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdh
dGUgPE5TT2JqZWN0PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KSBu
ZXdQb3NpdGlvbjsKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKSBp
dGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsKKy0gKHZvaWQpc2hvd0RlZmluaXRpb25G
b3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDoo
Q0dQb2ludClwb2ludDsKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDooTlNTdHJpbmcgKilzdHJp
bmc7CistICh2b2lkKW9wZW5XaXRoUHJldmlldzsKKy0gKHZvaWQpc2F2ZVRvUERGOworCitAZW5k
CisKK0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIDogTlNPYmplY3QKK0BlbmQKKworQGlu
dGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgKFBERktpdFNlY3JldHNJS25vd0Fib3V0KQorCitA
cHJvcGVydHkgKHJldGFpbikgQ0FMYXllciAqcGFyZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFp
bikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRGcmFtZVNpemU6KENH
U2l6ZSlzaXplOworCistICh2b2lkKXNldERpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQp
c2V0RGlzcGxheXNQYWdlQnJlYWtzOihCT09MKXBhZ2VCcmVha3M7CisKKy0gKENHRmxvYXQpdGls
ZVNjYWxlRmFjdG9yOworLSAodm9pZClzZXRUaWxlU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVG
YWN0b3I7CisKKy0gKENHU2l6ZSljb250ZW50U2l6ZTsKKy0gKENHU2l6ZSljb250ZW50U2l6ZVJl
c3BlY3Rpbmdab29tOworCistICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y29udGV4dDsKKworLSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFn
bmlmaWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVk
aWF0ZWx5OworCistIChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOworLSAodm9pZClzZXRTY3JvbGxQ
b3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpc2Nyb2xsV2l0aERlbHRhOihD
R1NpemUpZGVsdGE7CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVu
dCAqKWV2ZW50OworLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZv
aWQpbW91c2VFbnRlcmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRXhpdGVkOihO
U0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0
cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVz
OihCT09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKGlkKSBjdXJyZW50U2VsZWN0aW9u
OworLSAodm9pZCljb3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKGJvb2wp
a2V5RG93bjooTlNFdmVudCAqKWV2ZW50OworCistICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wp
ZW5hYmxlZDsKKy0gKEJPT0wpaHVkRW5hYmxlZDsKKworQGVuZAorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK0BpbnRlcmZhY2UgV0tCdWlsdEluUERG
S2l0Vmlld1Njcm9sbGJhckxheWVyIDogQ0FMYXllcgoreworICAgIFdlYktpdDo6QnVpbHRJblBE
RktpdFZpZXcqIF9wZGZWaWV3OworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpCdWls
dEluUERGS2l0VmlldyogcGRmVmlldzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCdWls
dEluUERGS2l0Vmlld1Njcm9sbGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0g
KGlkKWluaXRXaXRoUERGVmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAKKyAgICBfcGRmVmlldyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgcmV0dXJu
IG5pbDsKK30KKworLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4Cit7Cisg
ICAgX3BkZlZpZXctPnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9
CisKK0BlbmQKKworQGludGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNP
YmplY3Q8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+Cit7CisgICAgV2ViS2l0OjpCdWlsdElu
UERGS2l0VmlldyogX3BkZlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OkJ1
aWx0SW5QREZLaXRWaWV3KiBwZGZWaWV3OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BE
RkxheWVyQ29udHJvbGxlckRlbGVnYXRlCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0gKGlk
KWluaXRXaXRoUERGVmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBfcGRmVmlldyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpdXBkYXRlU2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRm
Vmlldy0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9uKSk7
Cit9CisKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdp
dGhUeXBlczooTlNBcnJheSAqKXR5cGVzCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0eXBlcyBv
dGhlciB0aGFuIHBsYWluIHRleHQuCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgW2l0
ZW1zIGNvdW50XTsgKytpKSB7CisgICAgICAgIGlmIChbW3R5cGVzIG9iamVjdEF0SW5kZXg6aV0g
aXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwgW1t0eXBlcyBvYmplY3RBdElu
ZGV4OmldIGlzRXF1YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgeworICAgICAg
ICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcoQWRvcHROUywgW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOltpdGVtcyBvYmplY3RBdEluZGV4OmldIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChwbGFpblRleHRTdHJpbmcuZ2V0KCksIFBhc3Rl
Ym9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZv
aWQpIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzogKE5TQXR0cmlidXRlZFN0cmlu
ZyAqKSBzdHJpbmcgYXRQb2ludDogKENHUG9pbnQpIHBvaW50Cit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKworLSAodm9pZCkgcGVyZm9ybVdlYlNlYXJjaDogKE5TU3RyaW5nICopIHN0
cmluZworeworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIG9wZW5XaXRo
UHJldmlldworeworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIHNhdmVU
b1BERgoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0BlbmQKKworc3RhdGljIHZv
aWQgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGljdGlvbmFyeVJl
ZiBzdWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCit7CisgICAgQ0dQREZB
cnJheVJlZiBuYW1lczsKKyAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwg
Ik5hbWVzIiwgJm5hbWVzKSkgeworICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0gQ0dQREZBcnJh
eUdldENvdW50KG5hbWVzKSAvIDI7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFt
ZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVjdDsKKyAgICAg
ICAgICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9iamVjdCk7Cisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIENHUERGQXJyYXlSZWYga2lkczsKKyAgICBpZiAoIUNHUERGRGlj
dGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lkcyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGlj
dGlvbmFyeVJlZiBraWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rpb25hcnkoa2lk
cywgaSwgJmtpZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kVmFsdWVz
SW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5UmVmIHRyZWUs
IFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBlbmRWYWx1ZXNJ
blBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKworc3RhdGljIHZv
aWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVu
dCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKK3sKKyAgICBpZiAo
IXBkZkRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYg
cGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBp
ZiAoIXBkZkNhdGFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlv
bmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25h
cnlSZWYgbmFtZXNEaWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlv
bmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0
cmVlLgorICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYg
KCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3Jp
cHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
IG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVl
cy4KKyAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVz
SW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBv
YmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2Ny
aXB0QWN0aW9uOworICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRf
Y2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9u
YXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2
YVNjcmlwdCIuCisgICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICgh
Q0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBl
KSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXgg
bGVuZ3RoOworICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3Ry
aW5nUmVmIHN0cmluZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAg
ICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAm
c3RyZWFtKSkgeworICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAg
ICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOwor
ICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAgICAg
bGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYg
KENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5n
KSkgeworICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsK
KyAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9
PSAweEZFICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmljb2RlIDog
a0NGU3RyaW5nRW5jb2RpbmdVVEY4OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNj
cmlwdChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHNjcmlwdCk7
CisgICAgfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgdWludDY0X3QgcGRmRG9j
dW1lbnRSZXF1ZXN0SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxvYWRpbmcg
bXVsdGlwbGUgc3RyZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KKworUGFzc1Jl
ZlB0cjxCdWlsdEluUERGS2l0Vmlldz4gQnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShXZWJGcmFt
ZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdEluUERGS2l0Vmlldyhm
cmFtZSkpOworfQorCitCdWlsdEluUERGS2l0Vmlldzo6QnVpbHRJblBERktpdFZpZXcoV2ViRnJh
bWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIo
QWRvcHROUywgW1tDQUxheWVyIGFsbG9jXSBpbml0XSkKKyAgICAsIG1fY29udGVudExheWVyKEFk
b3B0TlMsIFtbQ0FMYXllciBhbGxvY10gaW5pdF0pCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxi
YXJMYXllcigwKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKDApCisgICAgLCBtX3Nj
cm9sbENvcm5lckxheWVyKEFkb3B0TlMsIFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJhckxh
eWVyIGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pCisgICAgLCBtX3BkZkxheWVyQ29udHJv
bGxlcihBZG9wdE5TLCBbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKQor
ICAgICwgbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZShBZG9wdE5TLCBbW1dLUERGTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGVmlldzp0aGlzXSkKK3sKKyAgICBb
bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xs
ZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldFBh
cmVudExheWVyOm1fY29udGVudExheWVyLmdldCgpXTsKKyAgICAKKyAgICBbbV9jb250YWluZXJM
YXllci5nZXQoKSBhZGRTdWJsYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07CisgICAgW21fY29u
dGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKV07
Cit9CisKK0J1aWx0SW5QREZLaXRWaWV3Ojp+QnVpbHRJblBERktpdFZpZXcoKQoreworfQorCitQ
bHVnaW5JbmZvIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5J
bmZvIGluZm87CisgICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKKworICAg
IE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKKyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJh
cHBsaWNhdGlvbi9wZGYiOworICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlw
ZURlc2NyaXB0aW9uKCk7CisgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRm
Iik7CisKKyAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4g
aW5mbzsKK30KKworUGx1Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKQor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30K
KworY29uc3QgUGx1Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKSBjb25z
dAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxl
cigpKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7
CisgICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVy
dGljYWxTY3JvbGxiYXI7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAg
ICAgIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgp
KQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAg
ICAgICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwor
ICAgIH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIo
VmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwor
ICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYg
IW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMu
aXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0
ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAg
ICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3
KCktPnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBz
Y3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOwor
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0
KTsKKyAgICB9CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9w
bHVnaW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1
bWVudFNpemUuaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVj
dChwbHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNj
cm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICAKKyAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFm
cmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRT
Y3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMp
CisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
CisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0RnJhbWU6bV92ZXJ0
aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCldOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmIChtX2hv
cml6b250YWxTY3JvbGxiYXJMYXllciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAg
ICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldEZyYW1lOm1faG9yaXpvbnRh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCldOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Ny
b2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0
RnJhbWU6c2Nyb2xsQ29ybmVyUmVjdCgpXTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIu
Z2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBCdWlsdEluUERGS2l0Vmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xs
YmFyKTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5hZG9wdE5TKFtbV0tCdWlsdEluUERGS2l0
Vmlld1Njcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pOworICAgICAg
ICBbbV9jb250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX2hvcml6b250YWxTY3JvbGxi
YXJMYXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKHdpZGdldC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhckxheWVyLmFkb3B0TlMoW1tXS0J1aWx0SW5QREZLaXRWaWV3U2Nyb2xsYmFyTGF5ZXIgYWxs
b2NdIGluaXRXaXRoUERGVmlldzp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVyLmdl
dCgpIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgICAg
IAorICAgICAgICBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIH0K
KyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgp
KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
K3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3Jv
bGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHdpbGxSZW1vdmVI
b3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisKKyAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KKworICAgIHNjcm9sbGJh
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3Jv
bGxhYmxlQXJlYSgpOworICAgIHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgQnVpbHRJblBERktp
dFZpZXc6OmFkZEFyY2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNr
IHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRz
IHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRk
IGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hp
dmVzIHRvIHdvcmsuCisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOwor
ICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRG
aWxlbmFtZSk7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAv
LyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCisgICAg
c3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7CisKKyAg
ICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3Jl
YXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJj
ZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRS
ZXNwb25zZSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIo
KS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQnVp
bHRJblBERktpdFZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJl
c291cmNlKCk7CisKKyAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNz
KCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CisK
KyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOm1fcGx1Z2luU2l6
ZV07CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldERvY3VtZW50Om1fcGRmRG9j
dW1lbnQuZ2V0KCldOworICAgIAorICAgIHBsdWdpblZpZXcoKS0+c2V0RnVsbFBhZ2VQbHVnaW5T
Y2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXSwg
SW50UG9pbnQoMCwgMCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzKCk7CisKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBt
X3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7CisKKyAgICBWZWN0
b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0lu
UERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsK
KworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgpOworICAgIGlmICghc2Ny
aXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHgg
PSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBt
YWtlSlNQREZEb2MoY3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291
bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdp
dGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChj
dHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uo
c2NyaXB0KTsKKyAgICB9CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Cit9CisK
K3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgY29tZSBzdHJhaWdodCBmcm9tIFBERktpdC4KKworICAgIHNpemVfdCBw
YWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5n
ZXQoKSBkb2N1bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50
OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0
UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAg
QVNTRVJUKHBkZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hS
ZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShi
b3gpKQorICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQ
REZNZWRpYUJveCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOwor
ICAgIH0KKworICAgIG1fcGRmRG9jdW1lbnRTaXplID0gSW50U2l6ZShbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pOworfQorCitib29sIEJ1aWx0
SW5QREZLaXRWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7
CisgICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VVUkwgPSBw
YXJhbWV0ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVy
ICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9h
ZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygp
LCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOwor
CisgICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmRlc3Ryb3koKQoreworICAgIGlmICht
X2ZyYW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNv
cmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFi
bGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNj
cm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAg
CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxh
eWVyXTsKKyAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKKyAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IDA7CisgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhckxheWVyID0gMDsKKyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJMYXllci5n
ZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExheWVyLmdldCgpIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSByZW1vdmVG
cm9tU3VwZXJsYXllcl07Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7
Cit9CisgICAgCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpwYWludENvbnRyb2xGb3JMYXllcklu
Q29udGV4dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGN0eCkKK3sKKyAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGN0eCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgCisgICAgZ3JhcGhpY3NDb250
ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CisgICAgCisgICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXIgJiYgbGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLW1fdmVydGljYWxTY3JvbGxiYXItPngoKSwgLW1f
dmVydGljYWxTY3JvbGxiYXItPnkoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBh
aW50KCZncmFwaGljc0NvbnRleHQsIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsK
KyAgICB9IGVsc2UgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiBsYXllciA9PSBtX2hvcml6
b250YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRl
KC1tX2hvcml6b250YWxTY3JvbGxiYXItPngoKSwgLW1faG9yaXpvbnRhbFNjcm9sbGJhci0+eSgp
KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5wYWludCgmZ3JhcGhpY3NDb250ZXh0
LCBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICB9IGVsc2UgaWYgKGxh
eWVyID09IG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3Ju
ZXJSZWN0ID0gdGhpcy0+c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQudHJhbnNsYXRlKC1zY3JvbGxDb3JuZXJSZWN0LngoKSwgLXNjcm9sbENvcm5lclJlY3QueSgp
KTsKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAs
ICZncmFwaGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgIH0KK30KKwordm9pZCBC
dWlsdEluUERGS2l0Vmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29u
dHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAg
ICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBCdWlsdEluUERGS2l0Vmlldzo6c25hcHNob3QoKQorewor
ICAgIGlmIChtX3BsdWdpblNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBub24tMSBwYWdlL2RldmljZVNjYWxlRmFjdG9yLgorICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IG1fcGx1Z2luU2l6ZTsKKworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxl
KGJhY2tpbmdTdG9yZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CisKKyAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0LT50cmFuc2xhdGUoMCwgLW1fcGx1Z2luU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCldOworCisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7Cit9CisKK1BsYXRm
b3JtTGF5ZXIqIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJu
IG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6Omlz
VHJhbnNwYXJlbnQoKQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9t
IHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OndhbnRzV2hlZWxFdmVudHMoKQor
eworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpnZW9tZXRy
eURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQoreworICAgIGlm
IChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPmZ1bGxQYWdlUGx1
Z2luU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxl
RmFjdG9yXSkgeworICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKKyAgICBtX3Jvb3RWaWV3VG9Q
bHVnaW5UcmFuc2Zvcm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKTsKKyAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOnBsdWdpblNpemVdOwor
CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2Fi
bGVBY3Rpb25zOllFU107CisgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9y
bTNETWFrZVNjYWxlKDEuMCwgLTEuMCwgMS4wKTsKKyAgICAKKyAgICBDR0Zsb2F0IG1hZ25pZmlj
YXRpb24gPSBwbHVnaW5WaWV3KCktPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKSAtIFttX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdOworICAgIAorICAgIC8vIEZJ
WE1FOiBJbnN0ZWFkIG9mIG1fbGFzdE1vdXNlUG9pbnQsIHdlIHNob3VsZCB1c2UgdGhlIHpvb20g
b3JpZ2luIGZyb20gUGx1Z2luVmlldzo6c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvci4KKyAg
ICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1h
Z25pZmljYXRpb24gYXRQb2ludDptX2xhc3RNb3VzZVBvaW50IGltbWVkaWF0ZWx5OllFU107Cisg
ICAgW21fY29udGVudExheWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3Jt
M0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCldOworICAg
IFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dmlzaWJpbGl0
eURpZENoYW5nZSgpCit7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmZyYW1lRGlkRmlu
aXNoTG9hZGluZyh1aW50NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBCdWlsdEluUERGS2l0Vmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3Ojpk
aWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c3Ry
ZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwgdWlu
dDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0
cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5h
bWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVl
c3RJRCk7CisKKyAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRl
cyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRl
cyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZpbmlz
aExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1J
RCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgcGRmRG9jdW1lbnRE
aWRMb2FkKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZhaWwodWlu
dDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQoreworICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fZGF0
YUJ1ZmZlci5jbGVhcigpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjptYW51YWxTdHJl
YW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0
cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSkKK3sKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9
CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghbV9kYXRhQnVmZmVyKQor
ICAgICAgICBtX2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsK
KworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCdWlsdEluUERG
S2l0Vmlldzo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCit7CisgICAgcGRmRG9jdW1l
bnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURp
ZEZhaWwoYm9vbCkKK3sKKyAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKK30KKyAgICAKK3N0YXRp
YyBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2
ZW50KQoreworICAgIHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSA/IE5TU2hpZnRLZXlNYXNrIDog
MCkKKyAgICAgICAgfCAoZXZlbnQuY29udHJvbEtleSgpID8gTlNDb250cm9sS2V5TWFzayA6IDAp
CisgICAgICAgIHwgKGV2ZW50LmFsdEtleSgpID8gTlNBbHRlcm5hdGVLZXlNYXNrIDogMCkKKyAg
ICAgICAgfCAoZXZlbnQubWV0YUtleSgpID8gTlNDb21tYW5kS2V5TWFzayA6IDApOworfQorICAg
IAorc3RhdGljIE5TRXZlbnRUeXBlIGV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVu
dCYgZXZlbnQsIGJvb2wgbW91c2VCdXR0b25Jc0Rvd24pCit7CisgICAgc3dpdGNoIChldmVudC50
eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gTlNL
ZXlEb3duOworICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgorICAgICAgICByZXR1cm4gTlNLZXlV
cDsKKworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAg
IGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU0xl
ZnRNb3VzZURvd247CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246Cisg
ICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
V2ViRXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
TW91c2VFdmVudCY+KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZl
bnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VVcDsKKyAgICAg
ICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBO
U1JpZ2h0TW91c2VVcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToK
KyAgICAgICAgaWYgKG1vdXNlQnV0dG9uSXNEb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gTlNMZWZ0TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50
OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRHJhZ2dl
ZDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5TTW91c2VNb3Zl
ZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgc3RhdGljIGJvb2wgc19pc0Rvd24gPSBmYWxz
ZTsKKworICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3KGV2ZW50LnBvc2l0aW9uKCkpOwor
ICAgIHBvc2l0aW9uSW5QREZWaWV3ID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBv
aW50KHBvc2l0aW9uSW5QREZWaWV3KTsKKyAgICBwb3NpdGlvbkluUERGVmlldy5zZXRZKG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKSAtIHBvc2l0aW9uSW5QREZWaWV3LnkoKSk7CisgICAgCisgICAgbV9s
YXN0TW91c2VQb2ludCA9IHBvc2l0aW9uSW5QREZWaWV3OworCisgICAgTlNFdmVudFR5cGUgZXZl
bnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBzX2lzRG93bik7CisgICAgTlNV
SW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7
CisgICAgCisgICAgaWYgKCFldmVudFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5
cGUgbG9jYXRpb246cG9zaXRpb25JblBERlZpZXcgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdz
IHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xp
Y2tDb3VudDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisKKyAgICBzd2l0Y2ggKGV2
ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYg
KHNfaXNEb3duKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNl
RHJhZ2dlZDpmYWtlRXZlbnRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZDpmYWtlRXZlbnRdOworICAgICAgICBtb3VzZU1v
dmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgc19pc0Rvd24gPSB0cnVlOworICAgICAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VEb3duOmZha2VFdmVudF07CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAg
IFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBtb3VzZVVwOmZha2VFdmVudF07CisgICAgICAg
IHNfaXNEb3duID0gZmFsc2U7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2
ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZl
bnQpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wg
QnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JikKK3sKKyAgICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZUNvbnRl
eHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQg
V2ViS2l0IGNvbnRleHQgbWVudS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJ
blBERktpdFZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCit7CisgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2
ZW50KGV2ZW50LCBmYWxzZSk7CisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZp
ZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50
ID0gW05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9p
bnQgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjow
IGNvbnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdNb2Rp
ZmllcnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0
KCkga2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBzd2l0
Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAgICAg
IHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkga2V5RG93bjpmYWtlRXZlbnRdOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCkKK3sKKyAgICBpZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgY29weVNlbGVjdGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5h
bWUgPT0gInNlbGVjdEFsbCIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBz
ZWxlY3RBbGxdOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJ1aWx0SW5QREZL
aXRWaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
KQoreworICAgIGlmIChjb21tYW5kTmFtZSA9PSAiY29weSIgJiYgW21fcGRmTGF5ZXJDb250cm9s
bGVyLmdldCgpIGN1cnJlbnRTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6
c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKK3sKK30KKworTlBPYmplY3QqIEJ1aWx0SW5QREZLaXRW
aWV3OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQoreworICAgIHJldHVybiAwOworfQorCit2
b2lkIEJ1aWx0SW5QREZLaXRWaWV3Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sKK30KKwor
dm9pZCBCdWlsdEluUERGS2l0Vmlldzo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQoreworfQorCit2
b2lkIEJ1aWx0SW5QREZLaXRWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKQorewor
fQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChm
bG9hdCkKK3sKK30KKwordWludDY0X3QgQnVpbHRJblBERktpdFZpZXc6OnBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBC
dWlsdEluUERGS2l0Vmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJikKK3sK
K30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhv
c3RpbmdNb2RlKQoreworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdG9yYWdlQmxvY2tp
bmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6cHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK2Jvb2wgQnVpbHRJblBERktp
dFZpZXc6OmdldEZvcm1WYWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHJldHVybiBzY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktp
dFZpZXc6Omhvcml6b250YWxTY3JvbGxiYXIoKQoreworICAgIHJldHVybiBtX2hvcml6b250YWxT
Y3JvbGxiYXIuZ2V0KCk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktpdFZpZXc6OnZlcnRp
Y2FsU2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsK
K30KKworSW50UmVjdCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKKyAgICB9CisgICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCks
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSog
QnVpbHRJblBERktpdFZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxh
YmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KKyAgICByZXR1cm4gMDsKK30KKworSW50
UmVjdCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFJlY3QoMCwgMCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwg
bV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgW21fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpIHNldFNjcm9sbFBvc2l0aW9uOkNHUG9pbnRNYWtlKG9mZnNldC54
KCksIG9mZnNldC55KCkpXTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxTaXpl
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJh
ciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJl
dHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlz
aWJsZVNpemUoKSkgOiAwOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc0FjdGl2ZSgp
IGNvbnN0Cit7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUo
KSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6aW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAg
ICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgICAgICBbbV9o
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRp
Y2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikg
eworICAgICAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rp
c3BsYXldOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSW50
UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9u
KCkpOworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOworfQorCit2b2lk
IEJ1aWx0SW5QREZLaXRWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIFtt
X3Njcm9sbENvcm5lckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQor
Citib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxQ
b3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBt
X3Njcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWln
aHQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50
UG9pbnQgQnVpbHRJblBERktpdFZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVp
Z2h0KCkpOworfQorCitJbnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK0ludFBv
aW50IEJ1aWx0SW5QREZLaXRWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAorewor
ICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJh
ciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsK
KworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAt
IG1fcGx1Z2luU2l6ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1
bWVudFNpemUuaGVpZ2h0KCkgLSBtX3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
KyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojp2
aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgp
OworfQorCitpbnQgQnVpbHRJblBERktpdFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS53aWR0aCgpOworfQorCitJbnRTaXplIEJ1aWx0SW5QREZL
aXRWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BkZkRvY3VtZW50
U2l6ZTsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQo
KS0+aW5QYWdlQ2FjaGUoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFy
U3R5bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBk
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBh
bGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJs
YXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJl
IHNjcm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2lu
dChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAg
IHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOworCisgICAgLy8gQXMgc2l6ZSBvZiB0
aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9y
IHRvIGRpc2FwcGVhci4KKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBTY3JvbGxhYmxl
QXJlYTo6Y29udGVudHNSZXNpemVkKCk7Cit9CisKK0ludFJlY3QgQnVpbHRJblBERktpdFZpZXc6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0
aW9uKCkgLSBwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZp
ZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZpZXcoKS0+
cmVuZGVyZXIoKSwgcmVjdCk7Cit9CisgICAgCitJbnRSZWN0IEJ1aWx0SW5QREZLaXRWaWV3Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBy
ZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBs
dWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKHBsdWdp
blZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisgICAg
cmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2lu
dCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigp
IC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gcGx1Z2luVmll
dygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIocGx1Z2luVmlldygpLT5y
ZW5kZXJlcigpLCBwb2ludCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBw
b2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihw
bHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKHBs
dWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisg
ICAgcmV0dXJuIHBvaW50OworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZLaXRW
aWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVjdEdl
dFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lk
IGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZL
aXRWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVj
dEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+ZGVyZWYoKTsKK30KKworSlNWYWx1
ZVJlZiBCdWlsdEluUERGS2l0Vmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBCdWlsdEluUERGS2l0VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1
aWx0SW5QREZLaXRWaWV3Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAg
IFdlYkZyYW1lKiBmcmFtZSA9IHBkZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gZnJhbWUtPmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIFBhZ2UqIHBhZ2UgPSBj
b3JlRnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFt
ZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKworSlNPYmpl
Y3RSZWYgQnVpbHRJblBERktpdFZpZXc6Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQor
eworICAgIHN0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10g
PSB7CisgICAgICAgIHsgInByaW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
IDAsIDAsIDAgfSwKKyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERG
RG9jQ2xhc3NEZWZpbml0aW9uID0geworICAgICAgICAwLAorICAgICAgICBrSlNDbGFzc0F0dHJp
YnV0ZU5vbmUsCisgICAgICAgICJEb2MiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAg
ICBqc1BERkRvY1N0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBq
c1BERkRvY0ZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKworICAg
IHN0YXRpYyBKU0NsYXNzUmVmIGpzUERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRv
Y0NsYXNzRGVmaW5pdGlvbik7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZE
b2NDbGFzcywgdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFBERktJVF9QTFVHSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luLmgKaW5kZXggZDE5N2E2Ny4uNDU3YTU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW4uaApAQCAtMTg4LDYgKzE4OCwxNSBAQCBwdWJsaWM6CiAgICAg
Ly8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4ga2V5Ym9hcmQgZXZl
bnQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBwcm9jZXNzZWQgdGhlIGV2
ZW50LgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJv
YXJkRXZlbnQmKSA9IDA7CiAgICAgCisgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxl
IHRoZSBwYXNzZWQgaW4gZWRpdGluZyBjb21tYW5kLiBUaGUgcGx1Zy1pbiBzaG91bGQgcmV0dXJu
IHRydWUgaWYgaXQgZXhlY3V0ZWQgdGhlIGNvbW1hbmQuCisgICAgdmlydHVhbCBib29sIGhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpID0gMDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3
aWxsIGJlIGFibGUgdG8gaGFuZGxlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgICAgdmly
dHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpID0gMDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0
byBvdmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVs
bFBhZ2VQbHVnaW5TY2FsaW5nKCkgPSAwOworICAgIAogICAgIC8vIFRlbGxzIHRoZSBwbHVnLWlu
IGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpID0g
MDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94
eS5jcHAKaW5kZXggMGY0ZmQ3MC4uNDEzZTE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBAIC00MDMsNiArNDAzLDMzIEBAIHZv
aWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCiAgICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U2V0
Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwogfQogCitib29sIFBsdWdpblBy
b3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlm
ICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5D
b250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVu
dCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5k
OjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBoYW5kbGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94
eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sK
KyAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OklzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6SXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQ6OlJlcGx5KGlzRW5hYmxlZCksIG1fcGx1
Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
aXNFbmFibGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94eTo6c2hvdWxkVXNlRnVsbFBhZ2VQ
bHVnaW5TY2FsaW5nKCkKK3sKKyAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNlOworICAgIGlmICgh
bV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250
cm9sbGVyUHJveHk6OlNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygpLCBNZXNzYWdlczo6
UGx1Z2luQ29udHJvbGxlclByb3h5OjpTaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmc6OlJl
cGx5KGlzRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gaXNFbmFibGVkOworfQorCiBOUE9iamVjdCogUGx1Z2luUHJv
eHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCiB7CiAgICAgLy8gU2VuZGluZyB0aGUgc3lu
Y2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNhdXNlIHVzIHRvIGRpc3BhdGNoIGFuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCmluZGV4IDdhMzZj
MWEuLmYzZjc1ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm94eS5oCkBAIC0xMDEsNiArMTAxLDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5h
YmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCk7CisgICAgCiAgICAgdmly
dHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCk7CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYTFl
ODEyNi4uMTczYmJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcApAQCAtMjcxLDYgKzI3MSw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZp
ZXcoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gcGx1Z2luRWxlbWVudCwgUGFzc1JlZlB0
cjxQCiAjZW5kaWYKICAgICAsIG1fbWFudWFsU3RyZWFtU3RhdGUoU3RyZWFtU3RhdGVJbml0aWFs
KQogICAgICwgbV9wbHVnaW5TbmFwc2hvdFRpbWVyKHRoaXMsICZQbHVnaW5WaWV3OjpwbHVnaW5T
bmFwc2hvdFRpbWVyRmlyZWQsIHBsdWdpblNuYXBzaG90VGltZXJEZWxheSkKKyAgICAsIG1fZnVs
bFBhZ2VQbHVnaW5TY2FsZUZhY3RvcigxKQogewogICAgIG1fd2ViUGFnZS0+YWRkUGx1Z2luVmll
dyh0aGlzKTsKIH0KQEAgLTQyNyw2ICs0MjgsMTggQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWdlU2Nh
bGVGYWN0b3JEaWRDaGFuZ2UoKQogICAgIHZpZXdHZW9tZXRyeURpZENoYW5nZSgpOwogfQogCit2
b2lkIFBsdWdpblZpZXc6OnNldEZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxl
RmFjdG9yLCBJbnRQb2ludCkKK3sKKyAgICBtX2Z1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IgPSBz
Y2FsZUZhY3RvcjsKKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNjYWxlRmFjdG9yKSk7CisgICAgcGFnZVNjYWxlRmFj
dG9yRGlkQ2hhbmdlKCk7Cit9CisKK2RvdWJsZSBQbHVnaW5WaWV3OjpmdWxsUGFnZVBsdWdpblNj
YWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gbV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yOwor
fQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBhZ2VEZXN0cm95ZWQoKQogewogICAgIG1fd2ViUGFn
ZSA9IDA7CkBAIC03NjAsNiArNzczLDE2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQo
RXZlbnQqIGV2ZW50KQogICAgIGlmIChkaWRIYW5kbGVFdmVudCkKICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CiB9CisgICAgCitib29sIFBsdWdpblZpZXc6OmhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpCit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5k
TmFtZSwgYXJndW1lbnQpOworfQorICAgIAorYm9vbCBQbHVnaW5WaWV3Ojppc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIHJldHVybiBtX3Bs
dWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQogCiB2b2lkIFBs
dWdpblZpZXc6Om5vdGlmeVdpZGdldChXaWRnZXROb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5k
ZXggMTNlMGE5Ny4uMjkxZTQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5oCkBAIC03OSwxMCArNzksMTcgQEAgcHVibGljOgogCiAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkgc2hvdWxkIGhhdmUgdG8ga25vdyBhYm91dCB0aGUg
cGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhjZXB0IHRoZSBwbHVnLWluIHZpZXcgaXRzZWxmLgog
ICAgIFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0OworICAg
IAorICAgIHZvaWQgc2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0
b3IsIFdlYkNvcmU6OkludFBvaW50IG9yaWdpbik7CisgICAgZG91YmxlIGZ1bGxQYWdlUGx1Z2lu
U2NhbGVGYWN0b3IoKTsKKyAgICBib29sIHNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygp
IHsgcmV0dXJuIG1fcGx1Z2luLT5zaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKTsgfQog
CiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKICAgICB2b2lkIHdlYlBhZ2VE
ZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2luVmlldyhQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxQ
bHVnSW5FbGVtZW50PiwgUGFzc1JlZlB0cjxQbHVnaW4+LCBjb25zdCBQbHVnaW46OlBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpOwogICAgIHZpcnR1YWwgflBsdWdpblZpZXcoKTsKQEAgLTIzNiw2ICsy
NDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fdHJhbnNpZW50
UGFpbnRpbmdTbmFwc2hvdDsKICAgICAvLyBUaGlzIHRpbWVyIGlzIHVzZWQgd2hlbiBwbHVnaW4g
c25hcHNob3R0aW5nIGlzIGVuYWJsZWQsIHRvIGNhcHR1cmUgYSBwbHVnaW4gcGxhY2Vob2xkZXIu
CiAgICAgV2ViQ29yZTo6RGVmZXJyYWJsZU9uZVNob3RUaW1lcjxQbHVnaW5WaWV3PiBtX3BsdWdp
blNuYXBzaG90VGltZXI7CisKKyAgICBkb3VibGUgbV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9y
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGll
bnQuY3BwCmluZGV4IDZkYTI0MjUuLmMyOTQ2M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuY3BwCkBAIC0xMTQ2LDEwICsxMTQ2LDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAgICAgLy8gSW5mb3JtIHRoZSBVSSBwcm9jZXNzIG9mIHRo
ZSBzY2FsZSBmYWN0b3IuCiAgICAgZG91YmxlIHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+Y29yZUZy
YW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCktPmN1cnJlbnRJdGVtKCktPnBhZ2VTY2FsZUZhY3Rv
cigpOwogCi0gICAgLy8gQSBzY2FsZSBmYWN0b3Igb2YgMC4wIG1lYW5zIHRoZSBoaXN0b3J5IGl0
ZW0gYWN0dWFsbHkgaGFzIHRoZSAiZGVmYXVsdCBzY2FsZSBmYWN0b3IiIG9mIDEuMC4KLSAgICBp
ZiAoIXNjYWxlRmFjdG9yKQotICAgICAgICBzY2FsZUZhY3RvciA9IDEuMDsKLSAgICBtX2ZyYW1l
LT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlk
Q2hhbmdlKHNjYWxlRmFjdG9yKSk7CisgICAgLy8gQSBzY2FsZSBmYWN0b3Igb2YgMCBtZWFucyB0
aGUgaGlzdG9yeSBpdGVtIGhhcyB0aGUgZGVmYXVsdCBzY2FsZSBmYWN0b3IsIHRodXMgd2UgZG8g
bm90IG5lZWQgdG8gdXBkYXRlIGl0LgorICAgIGlmIChzY2FsZUZhY3RvcikKKyAgICAgICAgbV9m
cmFtZS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3Rv
ckRpZENoYW5nZShzY2FsZUZhY3RvcikpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5v
dCBiZSBuZWNlc3NhcnkuIFdlYkNvcmUgc2hvdWxkIGJlIGNvcnJlY3RseSBpbnZhbGlkYXRpbmcK
ICAgICAvLyB0aGUgdmlldyBvbiByZXN0b3JlcyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUu
CkBAIC0xMjE2LDcgKzEyMTUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0
aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQogICAgIGJvb2wgaXNN
YWluRnJhbWUgPSB3ZWJQYWdlLT5tYWluV2ViRnJhbWUoKSA9PSBtX2ZyYW1lOwogICAgIAogICAg
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpOwotICAgIG1fZnJhbWVIYXND
dXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOworICAg
IG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIHdlYlBhZ2Ut
PnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOwogICAg
IG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9IHRydWU7CiB9CiAKQEAgLTEyMzAsNyArMTIyOSw3
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UoKQogICAgIEludFJlY3QgY3VycmVudFZpc2libGVDb250ZW50Qm91bmRzID0gbV9mcmFt
ZS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKTsKIAogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5yZXNwb25zZSgpOwotICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlz
TWFpbkZyYW1lICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNob3VsZFVzZUN1c3RvbVJlcHJlc2Vu
dGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNl
bnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIHdlYlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2Vu
dGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNo
ZSA9IGZhbHNlOwogCiAgICAgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmNyZWF0ZVZpZXcod2ViUGFn
ZS0+c2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3IsIC8qIHRyYW5zcGFyZW50ICovIGZhbHNlLCBJbnRT
aXplKCksIHNob3VsZFVzZUZpeGVkTGF5b3V0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlMjZlYjg4Li45MWQ5ODk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0xMDcsNiArMTA3
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1J1bkxvb3AuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TY3JpcHRWYWx1ZS5oPgpAQCAtMTUwLDcgKzE1MSwxMCBAQAogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQnVpbHRJblBERlZpZXcuaCIKKyNpbmNsdWRl
ICJCdWlsdEluU2ltcGxlUERGVmlldy5oIgorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2lu
Y2x1ZGUgIkJ1aWx0SW5QREZLaXRWaWV3LmgiCisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCkBAIC0yMTgsNiArMjIyLDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBt
X2FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoZmFs
c2UpCiAgICAgLCBtX2FydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZChm
YWxzZSkKICAgICAsIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkK
KyAgICAsIG1fcGRmS2l0UGx1Z2luRW5hYmxlZChmYWxzZSkKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1faXNTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCkKQEAgLTQ2Niw4
ICs0NzEsMTMgQEAgUGFzc1JlZlB0cjxQbHVnaW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJG
cmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVtZW50KiBwbHUKICAgICBpZiAocGx1Z2luUGF0aC5p
c051bGwoKSkgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgaWYgKHBhcmFtZXRlcnMubWlt
ZVR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIKLSAgICAgICAgICAgIHx8IChwYXJhbWV0ZXJzLm1p
bWVUeXBlLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLnVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0
aCgiLnBkZiIpKSkKLSAgICAgICAgICAgIHJldHVybiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKGZy
YW1lKTsKKyAgICAgICAgICAgIHx8IChwYXJhbWV0ZXJzLm1pbWVUeXBlLmlzRW1wdHkoKSAmJiBw
YXJhbWV0ZXJzLnVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkgeworI2lmIEVO
QUJMRShQREZLSVRfUExVR0lOKQorICAgICAgICAgICAgaWYgKHBkZktpdFBsdWdpbkVuYWJsZWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShmcmFt
ZSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBCdWlsdEluU2ltcGxlUERGVmlldzo6Y3Jl
YXRlKGZyYW1lKTsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1l
KTsKICNlbmRpZgpAQCAtNjE4LDExICs2MjgsMzAgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJh
eT4gV2ViUGFnZTo6dHJhY2tlZFJlcGFpbnRSZWN0cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFy
cmF5OjphZG9wdCh2ZWN0b3IpOwogfQogCitzdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0Zv
ckZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGx1
Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBQbHVnaW5Eb2N1bWVudCogcGx1Z2luRG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVudCo+KGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAg
ICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVn
aW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdGlu
Z0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVu
dCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CisKKyAg
ICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAg
ICAKKyAgICBpZiAocGx1Z2luVmlldykgeworICAgICAgICBwbHVnaW5WaWV3LT5oYW5kbGVFZGl0
aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSkuZXhlY3V0
ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMiw2ICs2NjEsMTEgQEAgYm9vbCBXZWJQYWdlOjppc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2lu
VmlldykKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVk
KGNvbW1hbmROYW1lKTsKKyAgICAKICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1l
LT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNT
dXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOwogfQpAQCAtMTA3MSw4ICsxMTA1LDE0
IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2NyZWVuRGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJ
RCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2lu
dCYgb3JpZ2luKQogeworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9y
RnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2lu
Vmlldy0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkpIHsKKyAgICAgICAgcGx1Z2lu
Vmlldy0+c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3Rvcihz
Y2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAgIGZvciAoSGFzaFNldDxQbHVnaW5WaWV3Kj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5WaWV3cy5iZWdpbigpLCBlbmQgPSBtX3BsdWdpblZp
ZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5wYWdlU2NhbGVGYWN0
b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2ICsxMTIxLDEwIEBAIHZvaWQgV2ViUGFnZTo6c2Nh
bGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbikKIAogZG91YmxlIFdl
YlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBpZiAo
cGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5zaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmco
KSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3Io
KTsKKyAgICAKICAgICByZXR1cm4gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAt
MTUzMSw5ICsxNTc1LDE1IEBAIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0
ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29t
bWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAg
ICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRlKCk7Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1h
bmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICBQbHVnaW5W
aWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChwbHVnaW5WaWV3KQorICAgICAgICAgICAgaXNFbmFibGVkID0gcGx1Z2luVmll
dy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKGNvbW1hbmROYW1lKTsKKyAgICAgICAgICAgIHN0YXRlID0gY29tbWFuZC5zdGF0ZSgp
OworICAgICAgICAgICAgaXNFbmFibGVkID0gY29tbWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1h
bmQuaXNFbmFibGVkKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlZhbGlkYXRlQ29tbWFuZENhbGxiYWNrKGNvbW1hbmROYW1lLCBpc0VuYWJs
ZWQsIHN0YXRlLCBjYWxsYmFja0lEKSk7CkBAIC0yMDUxLDYgKzIxMDEsOCBAQCB2b2lkIFdlYlBh
Z2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQog
ICAgIG1fYXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxpemF0aW9uRGVsYXlFbmFibGVkID0gc3RvcmUu
Z2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjphcnRpZmljaWFsUGx1Z2luSW5p
dGlhbGl6YXRpb25EZWxheUVuYWJsZWRLZXkoKSk7CiAKICAgICBtX3Njcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5j
ZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRLZXkoKSk7CisgICAgCisg
ICAgbV9wZGZLaXRQbHVnaW5FbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlBy
ZWZlcmVuY2VzS2V5OjpwZGZLaXRQbHVnaW5FbmFibGVkS2V5KCkpOwogCiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIG1hY3JvIGV4cGFuc2lvbiBmb3IgYWxsIHBy
ZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgbWF0Y2ggdGhlIG5hbWlu
ZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2UgYXJlCkBAIC0zMzkxLDQgKzM0NDMsMjQgQEAgdm9p
ZCBXZWJQYWdlOjpzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5h
YmxlZCkKICAgICBmcmFtZVZpZXctPnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKK3N0YXRpYyBib29sIGNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIFN0cmluZyBwbHVnaW5QYXRo
OworICAgIGJvb2wgYmxvY2tlZDsKKyAgICAKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgp
LmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1
Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgpLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSksIE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGg6OlJlcGx5KHBsdWdpblBhdGgs
IGJsb2NrZWQpLCAwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiAh
YmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0VtcHR5KCk7Cit9CisKK2Jvb2wgV2ViUGFnZTo6c2hv
dWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJl
cHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1lVHlwZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gSWYgYSBwbHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBz
dXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUg
Y3VzdG9tIHJlcHJlc2VudGF0aW9uLgorICAgIHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9u
c2UocmVzcG9uc2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDRkOTUyNDYuLmI1MjM3ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTEzLDYg
KzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNz
IFByaW50Q29udGV4dDsKICAgICBjbGFzcyBSYW5nZTsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7
CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTU4MSw2ICs1ODIsOCBAQCBwdWJsaWM6
CiAgICAgdWludDY0X3QgbmF0aXZlV2luZG93SGFuZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5k
b3dIYW5kbGU7IH0KICNlbmRpZgogCisgICAgYm9vbCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsK
KwogICAgIGJvb2wgYXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQ7IH0K
ICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZChib29s
IGVuYWJsZWQpIHsgbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQgPSBl
bmFibGVkOyB9CiAgICAgYm9vbCBhc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJs
ZWRGb3JBbGxQbHVnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0
aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zOyB9CkBAIC01OTIsNiArNTk1LDEzIEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQogICAg
IHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sKTsKKyAgICAK
KyAgICBib29sIHBkZktpdFBsdWdpbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BkZktpdFBs
dWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFBERktpdFBsdWdpbkVuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fcGRmS2l0UGx1Z2luRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gcGRmQW5k
UG9zdFNjcmlwdE1JTUVUeXBlcygpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1
aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKQEAgLTc5
NCw2ICs4MDQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlh
bGl6YXRpb25EZWxheUVuYWJsZWQ7CiAKICAgICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZDsKKyAgICAKKyAgICBib29sIG1fcGRmS2l0UGx1Z2luRW5hYmxlZDsKIAog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBXaGV0aGVyIHRoZSBjb250YWluaW5nIHdpbmRvdyBp
cyB2aXNpYmxlIG9yIG5vdC4KQEAgLTkyMyw2ICs5MzUsOCBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICBX
ZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9yQ2xpZW50OworCisgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25z
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMjIyNzNjMS4uOWQzYmFi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZl
cmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogewogICAg
IGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQogICAgICAg
ICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVzZXNXZWJLaXRVc2VySW50ZXJmYWNlKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6aW5zcGVjdG9yVXNlc1dlYktpdFVz
ZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAgQk9PTCBvbWl0UERGU3VwcG9ydCA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERG
U3VwcG9ydCJdOworICAgIGlmICghcGRmS2l0UGx1Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3Vw
cG9ydCkgeworICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBw
cm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KKyAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VG
b2xkaW5nSGFzaD4gbWltZVR5cGVzID0gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAg
ICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9
IG1pbWVUeXBlcy5iZWdpbigpOyBpdCAhPSBtaW1lVHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAg
ICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAg
fQogfQogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsK
QEAgLTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZE
b2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4dCwgUERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAK
Ky8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUgaWRlYWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24u
IChhbmQgbm93IGl0J3MgZHVwbGljYXRlZCBoZXJlIGFuZCBpbiBXZWJDb250ZXh0TWFjKQorSGFz
aFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gV2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1J
TUVUeXBlcygpCit7CisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5
cGVzOworICAgIAorICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1p
bWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRk
KCJ0ZXh0L3BkZiIpOworICAgIAorICAgIHJldHVybiBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5k
ZXggOThjOTMwMi4uNmY2N2VkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2Vi
UHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAg
IHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1p
bWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVy
cy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNV
c2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsKIApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lk
IFdlYlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQb3J0Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQp
CiB9CiAjZW5kaWYKIAotc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0g
ICAgYm9vbCBibG9ja2VkOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgo
cmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2Vk
KSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAh
cGx1Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3Vz
dG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0
aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1lVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gSWYgYSBwbHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRo
aXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJl
cHJlc2VudGF0aW9uLgotICAgIHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9u
c2UpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VD
YWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFy
UmVzb3VyY2VDYWNoZXMocmVzb3VyY2VDYWNoZXNUb0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNzNmMDc5Ni4uNjllODAzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTE1MCwxNCArMTUwLDEzIEBAIHB1YmxpYzoKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25z
dCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRG
b3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNl
U2NyZWVuRm9udFN1YnN0aXR1dGlvbjsgfQorICAgIGJvb2wgc2hvdWxkVXNlUERGS2l0UGx1Z2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRVc2VQREZLaXRQbHVnaW47IH0KICNlbmRpZiAKICAg
ICAKICNpZiBQTEFURk9STShRVCkKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsgfQogI2VuZGlm
CiAKLSAgICBib29sIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OwotCiAgICAgLy8gVGV4dCBDaGVj
a2luZwogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KIApAQCAtMzA2LDYgKzMwNSw3IEBAIHBy
aXZhdGU6CiAgICAgcGlkX3QgbV9wcmVzZW50ZXJBcHBsaWNhdGlvblBpZDsKICAgICBkaXNwYXRj
aF9ncm91cF90IG1fY2xlYXJSZXNvdXJjZUNhY2hlc0Rpc3BhdGNoR3JvdXA7CiAgICAgYm9vbCBt
X3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsKKyAgICBib29sIG1fc2hvdWxkVXNl
UERGS2l0UGx1Z2luOwogI2VuZGlmCiAKICAgICBib29sIG1fZnVsbEtleWJvYXJkQWNjZXNzRW5h
YmxlZDsKQEAgLTMyMCw4ICszMjAsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3Qs
IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gPiBtX21lc3NhZ2VQ
b3J0Q2hhbm5lbHM7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hh
c2g+IG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsKLQogICAgIFRleHRDaGVj
a2VyU3RhdGUgbV90ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBt
X2dlb2xvY2F0aW9uTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFjLm1tIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbQppbmRleCA1MTlkNjJi
Li42NzlmMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQ
cm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nl
c3NNYWMubW0KQEAgLTI3NCw2ICsyNzQsOCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5p
dGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycwogCiAg
ICAgbV9zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24gPSBwYXJhbWV0ZXJzLnNob3Vs
ZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsKICAgICBGb250OjpzZXREZWZhdWx0VHlwZXNl
dHRpbmdGZWF0dXJlcyhwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNC
eURlZmF1bHQgPyBLZXJuaW5nIHwgTGlnYXR1cmVzIDogMCk7CisgICAgCisgICAgbV9zaG91bGRV
c2VQREZLaXRQbHVnaW4gPSBwYXJhbWV0ZXJzLnNob3VsZFVzZVBERktpdFBsdWdpbjsKIAogICAg
IG1fY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0ID0gcGFyYW1ldGVycy5hY2NlbGVyYXRlZENv
bXBvc2l0aW5nUG9ydC5wb3J0KCk7CiAK
</data>
<flag name="commit-queue"
          id="181483"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168497</attachid>
            <date>2012-10-12 15:32:09 -0700</date>
            <delta_ts>2012-10-13 15:46:09 -0700</delta_ts>
            <desc>whole patch again, with changelogs this time</desc>
            <filename>pdf.diff</filename>
            <type>text/plain</type>
            <size>192871</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li4yN2U2YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMTAtMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHBsdWctaW4gdGhhdCB1c2Vz
IFBERktpdCB0byBkaXNwbGF5IFBERnMsIGluc3RlYWQgb2YgdXNpbmcgUERGS2l0IGluIHRoZQor
ICAgICAgICBVSVByb2Nlc3MgZm9yIGZ1bGwtcGFnZSBQREZzLiBUaGlzIG5ldyBwbHVnaW4gd2ls
bCBhbHNvIGJlIHVzZWQgZm9yIGlubGluZSBQREZzCisgICAgICAgIGluIHBsYWNlIG9mIEJ1aWx0
SW5TaW1wbGVQREZWaWV3IChuw6llIEJ1aWx0SW5QREZWaWV3KS4KKworICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgRXhwb3J0IGEgZmV3IG1vcmUgbWV0aG9kcyB0byBXZWJLaXQoMikuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICBNYWtlIGludmFsaWRhdGVT
Y3JvbGxiYXIvaW52YWxpZGF0ZVNjcm9sbENvcm5lciB2aXJ0dWFsLgorCiAyMDEyLTEwLTExICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCB3aWxsIG5ldmVyIHJlc3RvcmUgdGhlIGN1cnJlbnQgY29udGV4
dCB0byBudWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGZkMmNkNzcuLjlhNmM3MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCkBAIC0yODUsMTEgKzI4NSwxNCBAQCBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTVjb250ZW50c1Jlc2l6ZWRFdgogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTE3d2lsbEVuZExpdmVSZXNpemVFdgogX19aTjdXZWJDb3JlMTRT
Y3JvbGxhYmxlQXJlYTE5d2lsbFN0YXJ0TGl2ZVJlc2l6ZUV2CitfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTlpbnZhbGlkYXRlU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRVJLTlNfN0ludFJl
Y3RFCitfX1pOSzdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIxbW91c2VFbnRlcmVkU2Nyb2xsYmFy
RVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIyaW52YWxpZGF0
ZVNjcm9sbENvcm5lckVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTIzZGlkQWRkVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMjRzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGVFTlNfMjFTY3JvbGxiYXJP
dmVybGF5U3R5bGVFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjVkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTI3d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQorX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTI3bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRVJLTlNfOElu
dFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI4c2V0U2Nyb2xsT2Zmc2V0RnJv
bUludGVybmFsc0VSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEy
OXdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTZzY3JvbGxFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3Jv
bGxHcmFudWxhcml0eUVmCkBAIC0zMjEsNiArMzI0LDggQEAgX19aTjdXZWJDb3JlMTRlbmRPZlBh
cmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmcKIF9fWk43V2ViQ29yZTE0c2V0TWV0YWRhdGFVUkxFUk4zV1RGNlN0cmluZ0VSS1MxX1M0Xwog
X19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm01ZmxpcFlFdgogX19aTjdXZWJDb3JlMTVBZmZp
bmVUcmFuc2Zvcm01c2NhbGVFZAorX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNnhTY2Fs
ZUV2CitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eVNjYWxlRXYKIF9fWk43V2ViQ29y
ZTE1QWZmaW5lVHJhbnNmb3JtOG11bHRpcGx5RVJLUzBfCiBfX1pON1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybTl0cmFuc2xhdGVFZGQKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtQzFFZGRk
ZGRkCkBAIC0zNTEsNiArMzU2LDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMWNs
ZWFyU2hhZG93RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJzZXRGaWxsQ29sb3JF
UktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQxNXNldEZpbGxHcmFkaWVudEVOM1dURjEwUGFzc1JlZlB0cklOU184R3JhZGllbnRFRUUKIF9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MThzZXRTaG91bGRBbnRpYWxpYXNFYgorX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOXNldElzQ0FMYXllckNvbnRleHRFYgogX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQyMGVuZFRyYW5zcGFyZW5jeUxheWVyRXYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MjBzZXRTaG91bGRTbW9vdGhGb250c0ViCiBfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDIxc2V0Q29tcG9zaXRlT3BlcmF0aW9uRU5TXzE3Q29tcG9zaXRlT3Bl
cmF0b3JFCkBAIC00NjcsNiArNDczLDggQEAgX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5Rmls
ZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5T
VVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBOU181RnJhbWVFUE5TXzE1
RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThIVE1MQ29udGVudEVsZW1lbnQ2Y3JlYXRl
RVBOU184RG9jdW1lbnRFCitfX1pON1dlYkNvcmUxMFBhc3RlYm9hcmQxN2dlbmVyYWxQYXN0ZWJv
YXJkRXYKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE0d3JpdGVQbGFpblRleHRFUktOM1dURjZT
dHJpbmdFTlMwXzE4U21hcnRSZXBsYWNlT3B0aW9uRQogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBh
c3RlYm9hcmQxMHVuaXF1ZU5hbWVFdgogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQx
M2J1ZmZlckZvclR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFz
dGVib2FyZDEzc3RyaW5nRm9yVHlwZUVSS04zV1RGNlN0cmluZ0UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YThhOTc2Li45ZTJh
NDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCQk0QUQwMTczRDEyN0U4Mjg2MDAxNTAzNUYg
LyogSlNIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEFEMDE3M0IxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVs
ZW1lbnQuaCAqLzsgfTsKIAkJNEFGMUFEM0UxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QUYxQUQzQzEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNw
cCAqLzsgfTsKIAkJNEFGMUFEM0YxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0Y2hNZWRp
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFG
MUFEM0QxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTRCMjcwOEM3MEFGMTlF
RTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5o
ICovOyB9OworCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA4QzUwQUYxOUVF
NDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0QjI3MDk4MzBBRjJFNUUwMDA2NTEyN0YgLyogUGFzdGVib2Fy
ZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRC
MjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tICovOyB9OwogCQk0QjMw
NDNDNzBBRTAzNzAzMDBBODI2NDcgLyogU291bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M2MEFFMDM3MDMwMEE4MjY0NyAvKiBTb3VuZC5o
ICovOyB9OwogCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjMwNDNDODBBRTAzNzFE
MDBBODI2NDcgLyogU291bmRNYWMubW0gKi87IH07CkBAIC0yMjI3Nyw2ICsyMjI3Nyw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFz
dGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8q
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjQ1NzUsNyArMjQ1NzYsNiBAQAogCQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMx
QTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzZBQzEzMEREN0FENUMwMDQx
NUYzNCAvKiBQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENBMTI1
MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1OTg5MDU3MTRFOUMyODAwMEU4RDE4QiAvKiBQYXN0ZWJvYXJkU3RyYXRlZ3kuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyNzUzNTgwMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODhERDQ4NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0
YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCmluZGV4IGM3NDRhZjYuLjkzMGNkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaApAQCAtMTA2LDEwICsxMDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9z
aXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
cihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bENvcm5lcihjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhW
ZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KIAogICAgIC8vIENvbnZlcnQgcG9pbnRzIGFuZCBy
ZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWluaW5nIHZpZXcuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNzE2NjM1YS4uOWY2YjM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MyBAQAor
MjAxMi0xMC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAg
ICAgICBbd2syXSBJbXBsZW1lbnQgQnVpbHRJblBERktpdFZpZXcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjA2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgcGx1Zy1pbiB0aGF0IHVzZXMgUERG
S2l0IHRvIGRpc3BsYXkgUERGcywgaW5zdGVhZCBvZiB1c2luZyBQREZLaXQgaW4gdGhlCisgICAg
ICAgIFVJUHJvY2VzcyBmb3IgZnVsbC1wYWdlIFBERnMuIFRoaXMgbmV3IHBsdWdpbiB3aWxsIGFs
c28gYmUgdXNlZCBmb3IgaW5saW5lIFBERnMKKyAgICAgICAgaW4gcGxhY2Ugb2YgQnVpbHRJblNp
bXBsZVBERlZpZXcgKG7DqWUgQnVpbHRJblBERlZpZXcpLgorCisgICAgICAgICogQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgIEFkZCBFTkFCTEVfUERGS0lU
X1BMVUdJTi4KKworICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0
aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Db250cm9sbGVy
UHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgICogUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaDoKKyAgICAgICAgKFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb3h5OjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aGFu
ZGxlRWRpdGluZ0NvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojppc0VkaXRp
bmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46Omhh
bmRsZUVkaXRpbmdDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46Omlz
RWRpdGluZ0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46
OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmg6CisgICAgICAgIFN1cHBvcnQgdGhyZWUg
bmV3IFBsdWdpbiBtZXRob2RzOgorICAgICAgICAgICAgLSBoYW5kbGVFZGl0aW5nQ29tbWFuZCwg
d2hpY2ggaGFuZHMgZWRpdGluZyBjb21tYW5kcyB0byB0aGUgUGx1Z2luCisgICAgICAgICAgICAt
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCB3aGljaCB2YWxpZGF0ZXMgZWRpdGluZyBjb21tYW5k
cyB2aWEgdGhlIFBsdWdpbgorICAgICAgICAgICAgLSBzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNj
YWxpbmcsIHdoaWNoIGFza3MgdGhlIHBsdWdpbiB3aGV0aGVyIGl0IHdhbnRzIHRvCisgICAgICAg
ICAgICBvcHQgaW50byBhIG1vZGUgd2hlcmUgdGhlIFdlYlBhZ2UgZG9lc24ndCBzY2FsZSBpbiB0
aGUgb3JkaW5hcnkgZmFzaGlvbiwgYnV0IGluc3RlYWQKKyAgICAgICAgICAgIHByb3hpZXMgdGhl
IFBsdWdpbidzIHNjYWxlIGZhY3Rvciwgc28gdGhlIGZ1bGwtcGFnZSBwbHVnaW4gY2FuIGhhbmRs
ZSB6b29taW5nCisgICAgICAgICAgICBob3dldmVyIGl0IG5lZWRzIHRvLgorCisgICAgICAgICog
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2lu
RW5hYmxlZCk6CisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAg
ICAgIEFkZCBQREZLaXRQbHVnaW5FbmFibGVkIHByZWZlcmVuY2UuIElmIGl0IGlzIG5vdCBlbmFi
bGVkLCBvciB0aGUgcGx1Z2luIGlzIG5vdCBidWlsdCwgYmVoYXZpb3Igd2lsbCBiZSB0aGUgc2Ft
ZSBhcworICAgICAgICBiZWZvcmUgKHRoZSBVSVByb2Nlc3MgUERGIHZpZXcgd2lsbCBoYW5kbGUg
ZnVsbC1wYWdlIFBERnMsIGFuZCBCdWlsdEluU2ltcGxlUERGVmlldyB3aWxsIGhhbmRsZSBpbmxp
bmUgb25lcykuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6Oldl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgIChXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzaG91
bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJv
Y2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIE1vdmUgc3VwcG9ydCBmb3IgTUlNRSB0eXBlcyB3aXRoIGN1c3RvbSByZXByZXNlbnRh
dGlvbnMgb250byBXZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJvY2Vzcy4KKyAgICAgICAgVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIHByZWZlcmVuY2VzIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBjdXN0b20g
cmVwcmVzZW50YXRpb25zIChmb3IgZXhhbXBsZSwKKyAgICAgICAgaXQgYWxsb3dzIHVzIHRvIGhh
dmUgYSBwcmVmZXJlbmNlIHRvIHRvZ2dsZSBiZXR3ZWVuIHRoZSBVSVByb2Nlc3MgUERGIHZpZXcg
YW5kIEJ1aWx0SW5QREZLaXRWaWV3KS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1w
b3J0cy5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbToKKyAgICAgICAg
KFdlYktpdDo6cGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOgorICAgICAgICBBZGQgUERGTGF5ZXJD
b250cm9sbGVyIHRvIHRoZSBzZXQgb2YgY2xhc3NlcyByZXR1cm5lZCBieSBQREZLaXRJbXBvcnRz
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnMpOgorICAgICAgICBBZGQg
QnVpbHRJblBERktpdFZpZXcgdG8gdGhlIHNldCBvZiBzdXBwb3J0ZWQgcGx1Z2lucy4KKworICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIEJ1
aWx0SW5QREZLaXRWaWV3LCByZW5hbWUgQnVpbHRJblBERlZpZXcgLT4gQnVpbHRJblNpbXBsZVBE
RlZpZXcuCisKKyAgICAgICAgKC1bUERGTGF5ZXJDb250cm9sbGVyICpdKToKKyAgICAgICAgRm9y
d2FyZC1kZWNsYXJlIFBERktpdCBPYmplY3RpdmUtQyBTUEkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZLaXRWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW06IEFkZGVkLgorICAgICAg
ICBNdWNoIG9mIHRoaXMgY29kZSBpcyBzaGFyZWQgd2l0aCBCdWlsdEluU2ltcGxlUERGVmlldy5t
bSwgYnV0IEkgZXhwZWN0IHRoZW0gdG8KKyAgICAgICAgZGl2ZXJnZSBmdXJ0aGVyIGFzIHRpbWUg
Z29lcyBvbi4gU3RpbGwsIGl0IG1pZ2h0IGJlIHdvcnRoIGl0IHRvIGluaGVyaXQgZnJvbQorICAg
ICAgICB0aGF0IGNsYXNzIG9yIHNoYXJlIGEgYmFzZSBjbGFzcy4KKworICAgICAgICAoLVtXS0J1
aWx0SW5QREZLaXRWaWV3U2Nyb2xsYmFyTGF5ZXIgaW5pdFdpdGhQREZWaWV3OldlYktpdDo6XSk6
CisgICAgICAgICgtW1dLQnVpbHRJblBERktpdFZpZXdTY3JvbGxiYXJMYXllciBhY3Rpb25Gb3JL
ZXk6XSk6CisgICAgICAgICgtW1dLQnVpbHRJblBERktpdFZpZXdTY3JvbGxiYXJMYXllciBkcmF3
SW5Db250ZXh0Ol0pOgorICAgICAgICBCdWlsdEluUERGS2l0VmlldyB1c2VzIGxheWVycyBmb3Ig
c2Nyb2xsYmFycy4KKworICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlICpd
KToKKyAgICAgICAgSW1wbGVtZW50IHRoZSBQREZMYXllckNvbnRyb2xsZXIgZGVsZWdhdGUsIGV2
ZW50dWFsbHkgZm9yd2FyZGluZyBjYWxscyBiYWNrIHRvIEJ1aWx0SW5QREZLaXRWaWV3LgorCisg
ICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpwYWludCk6CisgICAgICAgIEJ1aWx0
SW5QREZLaXRWaWV3IGlzIGxheWVyLWJhc2VkLCBzbyB3ZSBwYWludCBub3RoaW5nIGludG8gdGhl
IHRpbGVzLgorCisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpzbmFwc2hvdCk6
CisgICAgICAgIFBlcmZvcm0gYSBwYWludCBpbnRvIGEgYml0bWFwIGNvbnRleHQgZm9yIHpvb21p
bmcgc25hcHNob3RzLgorCisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpldmVudFR5cGVGcm9tV2ViRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6QnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6Cisg
ICAgICAgIE1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMgYXJlIGNvbnZlcnRlZCBiYWNrIGludG8g
TlNFdmVudHMsIGJ1dCB3aXRoCisgICAgICAgIGxvY2F0aW9uSW5XaW5kb3cgYWN0dWFsbHkgaW4g
dGVybXMgb2YgdGhlIEJ1aWx0SW5QREZLaXRWaWV3J3MgbGF5ZXIsIG5vdAorICAgICAgICB0aGUg
d2luZG93IChzaW5jZSB0aGVyZSBpcyBubyB3aW5kb3cpLgorCisgICAgICAgIChXZWJLaXQ6OkJ1
aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6
OkJ1aWx0SW5QREZLaXRWaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIEhh
bmRsZSBjb3B5IGFuZCBzZWxlY3QtYWxsIGNvbW1hbmRzLCBhbmQgZm9yd2FyZCB0aGVtIHRvIFBE
RktpdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblNpbXBsZVBE
RlZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvQnVpbHRJblBERlZpZXcuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1
aWx0SW5TaW1wbGVQREZWaWV3Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnNo
b3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgIFJlcG9ydCB3aGV0aGVyIG9y
IG5vdCB0aGUgUGx1Z2luIGJhY2tlZCBieSB0aGlzIFBsdWdpblZpZXcgd2FudHMgdG8gaGFuZGxl
IHNjYWxpbmcgaXRzZWxmLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpzZXRGdWxsUGFnZVBsdWdpblNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6ZnVsbFBhZ2VQbHVnaW5T
Y2FsZUZhY3Rvcik6CisgICAgICAgIElmIHNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyBp
cyB0cnVlLCBXZWJQYWdlIHVzZXMgdGhlc2UgdG8gZ2V0L3NldCBpdHMgc2NhbGUgZmFjdG9yLAor
ICAgICAgICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKToKKyAgICAg
ICAgRG9uJ3QgdXBkYXRlIFdlYlBhZ2VQcm94eSdzIG5vdGlvbiBvZiB0aGUgc2NhbGUgZmFjdG9y
IGlmIGl0IHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KKyAgICAgICAgVGhpcyBQYWdlU2NhbGVGYWN0
b3JEaWRDaGFuZ2UgcHJldmVudHMgb3RoZXIgY29kZSBmcm9tIHVzaW5nIG5vbi0xLjAgc2NhbGUg
ZmFjdG9ycyBhcyB0aGUgZGVmYXVsdC4KKworICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UpOgorICAgICAgICBNYWtlIHVzZSBvZiBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlv
bkZvclJlc3BvbnNlIG9uIFdlYlBhZ2UgaW5zdGVhZCBvZiBXZWJQcm9jZXNzLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToK
KyAgICAgICAgQ3JlYXRlIGEgQnVpbHRJblBERktpdFZpZXcgaWYgYXBwcm9wcmlhdGUgKGlmIGl0
IGlzIGJ1aWx0IGFuZCB0aGUgc2V0dGluZyBpcyBlbmFibGVkKS4KKworICAgICAgICAoV2ViS2l0
OjpwbHVnaW5WaWV3Rm9yRnJhbWUpOgorICAgICAgICBSZXR1cm4gdGhlIFBsdWdpblZpZXcgYmFj
a2luZyB0aGUgZ2l2ZW4gZnJhbWUgKGlmIGFueTsgbnVsbCBvdGhlcndpc2UpLgorCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKToKKyAgICAgICAgSWYgdGhlIGZvY3VzZWQgb3IgbWFp
biBmcmFtZSBpcyBhIFBsdWdpbkRvY3VtZW50LCBmb3J3YXJkIGVkaXRpbmcgY29tbWFuZHMgdGhl
cmUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgSWYgdGhlIG1haW4gZnJh
bWUgaXMgYSBQbHVnaW5Eb2N1bWVudCB3aGljaCB3YW50cyB0byBwcm92aWRlIGl0cyBvd24gc2Nh
bGluZyBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgZm9yd2FyZCBzY2FsZVBhZ2UgYW5kIHBhZ2VT
Y2FsZUZhY3RvciB0by9mcm9tIHRoZSBQbHVnaW5WaWV3LCBpbnN0ZWFkIG9mIHVzaW5nIFdlYkNv
cmUncyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyk6CisgICAgICAgIFVwZGF0ZSBtX3BkZktpdFBsdWdpbkVuYWJsZWQuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpwZGZLaXRQbHVnaW5FbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2V0UERGS2l0UGx1Z2luRW5hYmxlZCk6CisKIDIwMTItMTAtMTEgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIGRlcHJlY2F0ZWRTZW5k
IGZvciBXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIv
U291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5k
ZXggY2U0MWQzMC4uM2Y0MGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTExNiw2ICsxMTYsMTEgQEAgRU5B
QkxFX05PVElGSUNBVElPTlNfbWFjb3N4XzEwNzAgPSA7CiBFTkFCTEVfTk9USUZJQ0FUSU9OU19t
YWNvc3hfMTA4MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxFX05PVElGSUNBVElPTlNf
bWFjb3N4XzEwOTAgPSBFTkFCTEVfTk9USUZJQ0FUSU9OUzsKIEVOQUJMRV9QQUdFX1ZJU0lCSUxJ
VFlfQVBJID0gOworRU5BQkxFX1BERktJVF9QTFVHSU4gPSAkKEVOQUJMRV9QREZLSVRfUExVR0lO
XyQoUkVBTF9QTEFURk9STV9OQU1FKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3ggPSAk
KEVOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01B
Sk9SKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA3MCA9IDsKK0VOQUJMRV9QREZL
SVRfUExVR0lOX21hY29zeF8xMDgwID0gOworRU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XzEw
OTAgPSBFTkFCTEVfUERGS0lUX1BMVUdJTjsKIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UID0gRU5B
QkxFX1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7CkBAIC0xNDMs
NCArMTQ4LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVO
QUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJ
TkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5O
RUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFU
SU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lU
SU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVO
QUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9O
KSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NT
U19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNf
VEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxF
X0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9E
QVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RF
VklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVD
VE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVO
QUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9I
SUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NF
QU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxP
Q0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikg
JChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJ
RklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJf
QVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAk
KEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RB
VElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxF
X01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FU
T1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9W
SVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEp
ICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVF
Q0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJM
RV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVO
QUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVf
VEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFC
TEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJ
REVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9B
VURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxF
X1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVS
RV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9E
RUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NP
TVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVT
KSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNP
TFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5B
QkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxF
X0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQo
RU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVO
QUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5B
QkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxF
X0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJT
KSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VP
TE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVO
QUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZS
QU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9T
UEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVO
REVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVE
SUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQo
RU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9O
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJP
R1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQo
RU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NU
WUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1Mp
ICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9U
RVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVO
QUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykg
JChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMp
ICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dP
UktFUlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDMxYTVkNjEuLjBjNjE3ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxl
clByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAKQEAgLTUyMSw2ICs1MjEsMjEgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmQKICAgICBoYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRF
dmVudCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBi
b29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+aGFuZGxlRWRpdGluZ0Nv
bW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKK30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBib29sJiBlbmFibGVkKQoreworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+aXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQorICAgIAordm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyhib29sJiBlbmFibGVkKQor
eworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5n
KCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdpbigp
CiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCBiNGE0MDY3
Li4zMzIxNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1
Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBib29sJiBoYW5k
bGVkKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiwgYm9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhhbmRsZUVkaXRpbmdD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQs
IGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBzaG91bGRVc2VG
dWxsUGFnZVBsdWdpblNjYWxpbmcoYm9vbCYgZW5hYmxlZCk7CiAgICAgdm9pZCBwYWludEVudGly
ZVBsdWdpbigpOwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJh
Y2tpbmdTdG9yZUhhbmRsZSk7CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggZDdjMmQwMi4uOTQ4ZWI5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW4KQEAgLTczLDYgKzczLDE1IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSB7CiAKICAgICAjIFNlbnQgd2hlbiBhIGtleWJvYXJkIHNob3VsZCBiZSBwcm9jZXNz
ZWQuCiAgICAgSGFuZGxlS2V5Ym9hcmRFdmVudChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQga2V5
Ym9hcmRFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKKyAgICAKKyAgICAjIFNlbnQgd2hlbiBhbiBl
ZGl0aW5nIGNvbW1hbmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICBIYW5kbGVFZGl0aW5nQ29t
bWFuZChXVEY6OlN0cmluZyBjb21tYW5kTmFtZSwgV1RGOjpTdHJpbmcgYXJndW1lbnQpIC0+IChi
b29sIGhhbmRsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2lu
IHdhbnRzIHRvIGVuYWJsZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgIElzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVk
KTsKKyAgICAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBv
dmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICBTaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxp
bmcoKSAtPiAoYm9vbCBlbmFibGVkKTsKIAogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZv
Y3VzIGNoYW5nZXMuCiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAppbmRleCAxZTNjYTYzLi5hMTA3ZjllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTEzNyw2
ICsxMzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhTY3JlZW5Gb250U3Vic3Rp
dHV0aW9uRW5hYmxlZCwgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQsIEJvb2wsIGJvb2ws
IERFRkFVTFRfU0NSRUVOX0ZPTlRfU1VCU1RJVFVUSU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhD
b29raWVFbmFibGVkLCBjb29raWVFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFj
cm8oUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgcGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhQREZLaXRQbHVnaW5FbmFibGVkLCBwZGZL
aXRQbHVnaW5FbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBG
T1JfRUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRl
eCA4MDAzMGFjLi4wMTIzNGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC02Niw3ICs2Niw2IEBAIHZvaWQg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciogZW5jb2RlcikgY29uCiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2Vzcyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVk
QXNEaXNwbGF5SXNvbGF0ZWQpOwogICAgIGVuY29kZXItPmVuY29kZSh1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzQ09SU0VuYWJsZWQpOwotICAgIGVuY29kZXItPmVuY29kZShtaW1lVHlwZXNXaXRoQ3Vz
dG9tUmVwcmVzZW50YXRpb24pOwogICAgIGVuY29kZXItPmVuY29kZUVudW0oY2FjaGVNb2RlbCk7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUoc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7CkBAIC0xNDcs
OCArMTQ2LDYgQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0NPUlNFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShwYXJh
bWV0ZXJzLmNhY2hlTW9kZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocGFyYW1ldGVycy5zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApp
bmRleCAwZDU0M2ZhLi5mOTU0OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTY5LDkgKzY5LDYgQEAgc3RydWN0
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkOwogCi0gICAgLy8gTUlNRSB0eXBlcyBmb3Ig
d2hpY2ggdGhlIFVJIHByb2Nlc3Mgd2lsbCBoYW5kbGUgc2hvd2luZyB0aGUgZGF0YS4KLSAgICBW
ZWN0b3I8U3RyaW5nPiBtaW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0KICAgICBD
YWNoZU1vZGVsIGNhY2hlTW9kZWw7CiAgICAgYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsK
IApAQCAtMTEzLDYgKzExMCw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHsKIAogICAgIGJvb2wgc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwogICAgIGJv
b2wgc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdDsKKwogI2VsaWYgUExB
VEZPUk0oV0lOKQogICAgIFN0cmluZyBjZlVSTENhY2hlUGF0aDsKICAgICB1aW50NjRfdCBjZlVS
TENhY2hlRGlza0NhcGFjaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9y
dHMuaAppbmRleCA0NGMzNzVjLi5jOWExZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMuaApAQCAtMzMsNiArMzMsMTAgQEAgQ2xhc3MgY2xhc3NGcm9tUERGS2l0
KE5TU3RyaW5nICpjbGFzc05hbWUpOwogQ2xhc3MgcGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpOwog
Q2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCitD
bGFzcyBwZGZMYXllckNvbnRyb2xsZXJDbGFzcygpOworI2VuZGlmCisKIH0KIAogI2VuZGlmIC8v
IFBERktpdEltcG9ydHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Q
REZLaXRJbXBvcnRzLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
Lm1tCmluZGV4IDYyMzRhODMuLmJjY2ZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMubW0KQEAgLTU0LDUgKzU0LDE0IEBAIENsYXNzIHBkZkRvY3VtZW50Q2xh
c3MoKQogICAgIEFTU0VSVChwZGZEb2N1bWVudENsYXNzKTsKICAgICByZXR1cm4gcGRmRG9jdW1l
bnRDbGFzczsKIH0KKyAgICAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKK0NsYXNzIHBkZkxh
eWVyQ29udHJvbGxlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcGRmTGF5ZXJDb250cm9s
bGVyQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZMYXllckNvbnRyb2xsZXIiKTsKKyAgICBB
U1NFUlQocGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOworICAgIHJldHVybiBwZGZMYXllckNvbnRy
b2xsZXJDbGFzczsKK30KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWNjZTIwNS4uN2Q5NWZhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAt
OTMzLDMgKzkzMywxMyBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5TbmFwc2hvdHRpbmdF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7CiAgICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoKTsKIH0KKwor
dm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0UERGS2l0UGx1Z2luRW5hYmxlZChlbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZl
cmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wZGZLaXRQbHVnaW5F
bmFibGVkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGMwMjYxMWMuLmEzNzY3MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
CkBAIC0yMjMsNiArMjIzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRTY3Jl
ZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByCiBXS19FWFBPUlQg
dm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29va2llRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzLCBib29sIGVuYWJsZWQpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldENv
b2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRz
IHRvIGZhbHNlCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpOworV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBERktpdFBsdWdpbkVuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7CisKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNS
ZXNldFRlc3RSdW5uZXJPdmVycmlkZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7
CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCAyZTBjOTRmLi4xMWI5NDM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtNDYsNyArNDYsMTAgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRl
ICJCdWlsdEluUERGVmlldy5oIgorI2luY2x1ZGUgIkJ1aWx0SW5TaW1wbGVQREZWaWV3LmgiCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiQnVpbHRJblBERktpdFZpZXcuaCIK
KyNlbmRpZgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzA1LDggKzMw
OCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnModWludDY0X3Qg
cmVxdWVzdElELCBQYXNzT3duUHRyPFZlY3RvcjxQbAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAv
LyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNlZCB3aGVuIGEgcmVh
bCBwbHVnLWluIGlzIGluc3RhbGxlZC4KICAgICAvLyBOT1RFOiBUaGlzIGhhcyB0byBiZSBkb25l
IG9uIHRoZSBtYWluIHRocmVhZCBhcyBpdCBjYWxscyBsb2NhbGl6ZWRTdHJpbmcoKS4KLSAgICBp
ZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkKLSAgICAgICAgcGx1Z2lucy0+YXBwZW5k
KEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkpOworICAgIGlmICghbV9jb250ZXh0LT5vbWl0
UERGU3VwcG9ydCgpKSB7CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisgICAgICAgIHBsdWdp
bnMtPmFwcGVuZChCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luSW5mbygpKTsKKyNlbmRpZgorICAg
ICAgICBwbHVnaW5zLT5hcHBlbmQoQnVpbHRJblNpbXBsZVBERlZpZXc6OnBsdWdpbkluZm8oKSk7
CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRHZXRQ
bHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5ODFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCkBAIC03NywxMiAr
NzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFtZXRlcnMucHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21pdFBERlN1cHBvcnQo
KSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9j
ZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xk
aW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLmFwcGVuZFJhbmdl
KG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0KICAgICBwYXJhbWV0
ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9j
ZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYWNoZVBhdGgoQWRv
cHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwYjBiY2YuLjU4
ZmY5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUg
LyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURGMTE2MUJGOUYxMDAz
MUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYxNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMjlE
NTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1REYwMTYxQkY5
RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCTJEODcw
RDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcwRDBFMTYyMkI3RjkwMDBBM0Yy
MCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLzsgfTsKIAkJMzEwOTk5NzMxNDZDNzVBMjAwMjlE
RUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90
aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZDOUUzRDAwMjlERUI5IC8q
IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlv
bkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmlj
YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTM0
LDcgKzkzNSw3IEBACiAJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NTgy
RDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi87IH07CiAJCUUxOTY3RTM2
MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM1MTUw
QUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgKi87IH07
CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdFMzcx
NTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovOyB9OwotCQlFMTk5
ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcg
LyogQnVpbHRJblBERlZpZXcubW0gKi87IH07CisJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAv
KiBCdWlsdEluU2ltcGxlUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluU2ltcGxl
UERGVmlldy5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi87IH07CiAJ
CUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3MzQxMzRDRUE4MDAw
N0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07CiAJCUUxQUVBMjJGMTQ2ODdCREIw
MDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAv
KiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLzsgfTsKQEAgLTEzMzMsNiArMTMzNCw4
IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFn
ZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDg3
MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQnVpbHRJblBERktpdFZpZXcuaDsgcGF0aCA9IFBERi9CdWls
dEluUERGS2l0Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDg3MEQwRTE2
MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluUERGS2l0Vmlldy5tbTsgcGF0aCA9IFBERi9C
dWlsdEluUERGS2l0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5
NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJDMEM0OTE0NkREQzhBMDAx
NkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDY2LDggKzIwNjksOCBAQAogCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4NzUg
LyogUERGS2l0SW1wb3J0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBERktpdEltcG9ydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTY3
RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2Ig
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkg
LyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFw
cGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVB
MTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCdWlsdEluUERGVmlldy5oOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRF
NyAvKiBCdWlsdEluUERGVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1tOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyog
QnVpbHRJblNpbXBsZVBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QnVpbHRJblNpbXBsZVBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluU2ltcGxlUERGVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcg
LyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBCdWlsdEluU2ltcGxlUERGVmlldy5tbTsgcGF0aCA9IFBERi9CdWlsdEluU2lt
cGxlUERGVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzExMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAv
KiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zODk3LDggKzM5MDAsMTAgQEAKIAkJRTE5OTg3NUIxNDJCRjlDRjAwQkIy
REU3IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovLAotCQkJ
CUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovLAorCQkJCTJE
ODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5oICovLAorCQkJCTJE
ODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLywKKwkJCQlF
MTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8sCisJ
CQkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQREZWaWV3LmggKi8s
CiAJCQkpOwogCQkJbmFtZSA9IFBERjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00
ODEyLDYgKzQ4MTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTVENTE4NDU1MTNCQ0Y5Q0MwMEM3RkY0QSAvKiBBUElDbGllbnRUcmFpdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIEJ1aWx0
SW5QREZLaXRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3
MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNENjEwNTEzQTdGMDNB
MDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjBD
NEIxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00ODI4LDcgKzQ4MzQsNyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBC
YWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FB
RTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzQxQUM4MTI2
M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQREZWaWV3
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRp
bGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1NjQwMDFFQjk2MiAv
KiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlGQjcxMUUxNDA4NTAw
REIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAKaW5kZXggZTI4Yzc4ZC4uYjY2YjJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCkBAIC05MTMsNiArOTEzLDIxIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUtl
eWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKICAgICBy
ZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOwogfQogCiti
b29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29s
IE5ldHNjYXBlUGx1Z2luOjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0Rm9jdXMoYm9vbCBo
YXNGb2N1cykKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
aAppbmRleCA2MWUyYmI3Li5kNTMzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaApAQCAtMjAz
LDYgKzIwMywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5
Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZp
cnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2Fs
aW5nKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Qo
KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMTgyNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGS2l0Vmlldy5oCkBAIC0wLDAg
KzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCdWlsdEluUERGS2l0Vmlld19o
CisjZGVmaW5lIEJ1aWx0SW5QREZLaXRWaWV3X2gKKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQorCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zv
cm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpT
Q29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKworT0JKQ19D
TEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1l
OworCitjbGFzcyBCdWlsdEluUERGS2l0VmlldyA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QnVp
bHRJblBERktpdFZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOworICAgIH5CdWlsdEluUERGS2l0Vmll
dygpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2luSW5mbygpOworCisg
ICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFzeW5jaHJvbm91cyBpbml0
aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJvbm91c2x5SW5pdGlh
bGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgcGFpbnRDb250
cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IEJ1aWx0SW5QREZLaXRWaWV3KFdlYkZyYW1lKik7CisKKyAgICAvLyBS
ZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Ny
b2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcu
CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBs
dWdpblZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAg
ICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsK
KworICAgIC8vIFBsdWctaW4gbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNv
bnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOworICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zcGFy
ZW50KCk7CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
cGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7CisgICAgdmly
dHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdmlydHVhbCB2b2lkIGZy
YW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgU3RyaW5nJiByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVz
cG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJM
LCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRh
KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7CisgICAg
dmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdh
c0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVu
Z3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZh
aWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50
ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1v
dXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOworICAgIHZp
cnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdp
bmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0Zy
YW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1l
SW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlD
aGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChj
b25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGlu
Z01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1
ZShTdHJpbmcmIGZvcm1WYWx1ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgdmly
dHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAvLyBTY3JvbGxhYmxl
QXJlYSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1h
dG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBn
b29kIHRpbWUgdG8gYW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bGJhclJlY3QpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBX
ZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0IE9WRVJSSURFOworCisgICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4
dFJlZik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOworICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm07CisKKyAgICBX
ZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOworCisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5h
bWU7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1ZmZlcjsKKworICAg
IFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3Vt
ZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJD
b3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJh
bWU7CisKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250YWluZXJMYXllcjsKKyAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyOworICAgIFJldGFpblB0
cjxQbGF0Zm9ybUxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+IG1fc2Nyb2xsQ29ybmVyTGF5ZXI7CisgICAgUmV0YWluUHRyPFBERkxh
eWVyQ29udHJvbGxlcj4gbV9wZGZMYXllckNvbnRyb2xsZXI7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2Nyb2xsT2Zmc2V0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdE1vdXNlUG9p
bnQ7CisgICAgCisgICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1f
cGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjZW5kaWYgLy8gQnVpbHRJblBE
RktpdFZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9CdWlsdEluUERGS2l0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjdlOTdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KQEAgLTAsMCArMSwxMjA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkJ1aWx0SW5QREZLaXRWaWV3LmgiCisKKyNpbXBv
cnQgIlBERktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNo
YXJlYWJsZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50
Q29udmVyc2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Q0YuaD4KKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2lu
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJU
aGVtZS5oPgorCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0
PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KSBuZXdQb3NpdGlvbjsK
Ky0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKSBpdGVtcyB3aXRoVHlw
ZXM6KE5TQXJyYXkgKil0eXBlczsKKy0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2lu
dDsKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lk
KW9wZW5XaXRoUHJldmlldzsKKy0gKHZvaWQpc2F2ZVRvUERGOworCitAZW5kCisKK0BpbnRlcmZh
Y2UgUERGTGF5ZXJDb250cm9sbGVyIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBQREZM
YXllckNvbnRyb2xsZXIgKFBERktpdFNlY3JldHNJS25vd0Fib3V0KQorCitAcHJvcGVydHkgKHJl
dGFpbikgQ0FMYXllciAqcGFyZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1l
bnQgKmRvY3VtZW50OworQHByb3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOwor
CistICh2b2lkKXNldERpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheXNQ
YWdlQnJlYWtzOihCT09MKXBhZ2VCcmVha3M7CisKKy0gKENHRmxvYXQpdGlsZVNjYWxlRmFjdG9y
OworLSAodm9pZClzZXRUaWxlU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CisKKy0g
KENHU2l6ZSljb250ZW50U2l6ZTsKKy0gKENHU2l6ZSljb250ZW50U2l6ZVJlc3BlY3Rpbmdab29t
OworCistICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKwor
LSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBh
dFBvaW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OworCist
IChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOworLSAodm9pZClzZXRTY3JvbGxQb3NpdGlvbjooQ0dQ
b2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpc2Nyb2xsV2l0aERlbHRhOihDR1NpemUpZGVsdGE7
CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlTW92
ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Owor
LSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZl
bnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vu
c2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNob3Vs
ZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKGlkKSBjdXJyZW50U2VsZWN0aW9uOworLSAodm9pZClj
b3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKGJvb2wpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50OworCistICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKKy0g
KEJPT0wpaHVkRW5hYmxlZDsKKworQGVuZAorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK0BpbnRlcmZhY2UgV0tCdWlsdEluUERGS2l0Vmlld1Njcm9s
bGJhckxheWVyIDogQ0FMYXllcgoreworICAgIFdlYktpdDo6QnVpbHRJblBERktpdFZpZXcqIF9w
ZGZWaWV3OworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpCdWlsdEluUERGS2l0Vmll
dyogcGRmVmlldzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCdWlsdEluUERGS2l0Vmll
d1Njcm9sbGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0gKGlkKWluaXRXaXRo
UERGVmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRm
VmlldyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkPENBQWN0aW9u
PilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKwor
LSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4Cit7CisgICAgX3BkZlZpZXct
PnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9CisKK0BlbmQKKwor
QGludGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGU+Cit7CisgICAgV2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldyog
X3BkZlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OkJ1aWx0SW5QREZLaXRW
aWV3KiBwZGZWaWV3OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0gKGlkKWluaXRXaXRoUERG
VmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmVmll
dyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRlU2Ny
b2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmVmlldy0+bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9uKSk7Cit9CisKKy0gKHZv
aWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNB
cnJheSAqKXR5cGVzCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0eXBlcyBvdGhlciB0aGFuIHBs
YWluIHRleHQuCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgW2l0ZW1zIGNvdW50XTsg
KytpKSB7CisgICAgICAgIGlmIChbW3R5cGVzIG9iamVjdEF0SW5kZXg6aV0gaXNFcXVhbFRvU3Ry
aW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwgW1t0eXBlcyBvYmplY3RBdEluZGV4OmldIGlzRXF1
YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgeworICAgICAgICAgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhEYXRhOltpdGVtcyBvYmplY3RBdEluZGV4OmldIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgp
LT53cml0ZVBsYWluVGV4dChwbGFpblRleHRTdHJpbmcuZ2V0KCksIFBhc3RlYm9hcmQ6OkNhbm5v
dFNtYXJ0UmVwbGFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzogKE5TQXR0cmlidXRlZFN0cmluZyAqKSBzdHJpbmcg
YXRQb2ludDogKENHUG9pbnQpIHBvaW50Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
KworLSAodm9pZCkgcGVyZm9ybVdlYlNlYXJjaDogKE5TU3RyaW5nICopIHN0cmluZworeworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIG9wZW5XaXRoUHJldmlldworewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIHNhdmVUb1BERgoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgYXBwZW5kVmFs
dWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGljdGlvbmFyeVJlZiBzdWJ0cmVlLCBW
ZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCit7CisgICAgQ0dQREZBcnJheVJlZiBuYW1l
czsKKyAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIk5hbWVzIiwgJm5h
bWVzKSkgeworICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0gQ0dQREZBcnJheUdldENvdW50KG5h
bWVzKSAvIDI7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZUNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVjdDsKKyAgICAgICAgICAgIENHUERG
QXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9iamVjdCk7CisgICAgICAgICAgICB2
YWx1ZXMuYXBwZW5kKG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIENHUERGQXJyYXlSZWYga2lkczsKKyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldEFy
cmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXpl
X3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lkcyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBr
aWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rpb25hcnkoa2lkcywgaSwgJmtpZCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdldEFs
bFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5UmVmIHRyZWUsIFZlY3RvcjxDR1BE
Rk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0
cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0QWxsU2Ny
aXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9
IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBpZiAoIXBkZkNhdGFs
b2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlvbmFyeSBvZiBhbGwg
ZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgbmFtZXNE
aWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShwZGZDYXRh
bG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENH
UERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rp
b25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNj
cmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5hbWVzIGFyZSBh
cmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KKyAgICBWZWN0
b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJl
ZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBvYmplY3RDb3VudCA9
IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RDb3Vu
dDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0QWN0aW9uOwor
ICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2FzdDxDR1BERk9i
amVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNj
cmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBIEphdmFT
Y3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNjcmlwdCIuCisg
ICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAo
YWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXggbGVuZ3RoOworICAg
ICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3RyaW5nUmVmIHN0cmlu
ZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKENHUERG
RGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyZWFtKSkgewor
ICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIGRhdGEuYWRv
cHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOworICAgICAgICAgICAg
aWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYnl0ZXMg
PSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAgICAgbGVuZ3RoID0gQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKENHUERGRGljdGlv
bmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5nKSkgeworICAgICAg
ICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsKKyAgICAgICAgICAg
IGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENGU3RyaW5n
RW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PSAweEZFICYmIGJ5
dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmljb2RlIDoga0NGU3RyaW5nRW5j
b2RpbmdVVEY4OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdChBZG9wdENG
LCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywgbGVu
Z3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHNjcmlwdCk7CisgICAgfQorfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgdWludDY0X3QgcGRmRG9jdW1lbnRSZXF1ZXN0
SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxvYWRpbmcgbXVsdGlwbGUgc3Ry
ZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KKworUGFzc1JlZlB0cjxCdWlsdElu
UERGS2l0Vmlldz4gQnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdEluUERGS2l0VmlldyhmcmFtZSkpOworfQor
CitCdWlsdEluUERGS2l0Vmlldzo6QnVpbHRJblBERktpdFZpZXcoV2ViRnJhbWUqIGZyYW1lKQor
ICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoQWRvcHROUywgW1tD
QUxheWVyIGFsbG9jXSBpbml0XSkKKyAgICAsIG1fY29udGVudExheWVyKEFkb3B0TlMsIFtbQ0FM
YXllciBhbGxvY10gaW5pdF0pCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcigwKQor
ICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKDApCisgICAgLCBtX3Njcm9sbENvcm5lckxh
eWVyKEFkb3B0TlMsIFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJhckxheWVyIGFsbG9jXSBp
bml0V2l0aFBERlZpZXc6dGhpc10pCisgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlcihBZG9wdE5T
LCBbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKQorICAgICwgbV9wZGZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZShBZG9wdE5TLCBbW1dLUERGTGF5ZXJDb250cm9sbGVyRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGVmlldzp0aGlzXSkKK3sKKyAgICBbbV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldFBhcmVudExheWVyOm1f
Y29udGVudExheWVyLmdldCgpXTsKKyAgICAKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBh
ZGRTdWJsYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07CisgICAgW21fY29udGFpbmVyTGF5ZXIu
Z2V0KCkgYWRkU3VibGF5ZXI6bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKV07Cit9CisKK0J1aWx0
SW5QREZLaXRWaWV3Ojp+QnVpbHRJblBERktpdFZpZXcoKQoreworfQorCitQbHVnaW5JbmZvIEJ1
aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87Cisg
ICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0lu
Zm8gbWltZUNsYXNzSW5mbzsKKyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9w
ZGYiOworICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9u
KCk7CisgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBp
bmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKwor
UGx1Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1
Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKwor
dm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBo
YWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxi
YXI7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3Bs
dWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYg
KG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3Jv
bGxiYXIpOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBp
ZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3Jv
bGxiYXIpOworCisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCkgOiAwOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8g
MCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgSW50UmVj
dCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1f
cGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0
LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9Cisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Cisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLmhl
aWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkpOworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChwbHVnaW5WaWV3
KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9
IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAg
ICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAg
IGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXJMYXllciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0RnJhbWU6bV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCldOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgp
IHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmIChtX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldEZyYW1lOm1faG9yaXpvbnRhbFNjcm9sbGJhci0+
ZnJhbWVSZWN0KCldOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkg
c2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5
ZXIpIHsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0RnJhbWU6c2Nyb2xs
Q29ybmVyUmVjdCgpXTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0TmVl
ZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERG
S2l0Vmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICBp
ZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXJMYXllci5hZG9wdE5TKFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJh
ckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pOworICAgICAgICBbbV9jb250YWlu
ZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQo
KV07CisgICAgICAgIAorICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHdpZGdldC5n
ZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmFk
b3B0TlMoW1tXS0J1aWx0SW5QREZLaXRWaWV3U2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRo
UERGVmlldzp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1Ymxh
eWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIH0KKyAgICBwbHVnaW5W
aWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICByZXR1
cm4gd2lkZ2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbGxSZW1vdmVWZXJ0
aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgIFttX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJv
bVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgp
OworICAgIHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmFkZEFy
Y2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFk
ZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0
IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdo
IGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsu
CisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNp
emVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7Cisg
ICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBt
YXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRS
ZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxp
Y2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7Cisg
ICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2
ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZp
ZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisK
KyAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CisKKyAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOm1fcGx1Z2luU2l6ZV07CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldERvY3VtZW50Om1fcGRmRG9jdW1lbnQuZ2V0KCld
OworICAgIAorICAgIHBsdWdpblZpZXcoKS0+c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvcihb
bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXSwgSW50UG9pbnQoMCwg
MCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisK
KyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUu
d2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7CisKKyAgICBWZWN0b3I8UmV0YWluUHRy
PENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQo
W21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVf
dCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENv
bnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2Mo
Y3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgewor
ICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhz
Y3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwg
anNQREZEb2MsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAg
ICB9CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Cit9CisKK3ZvaWQgQnVpbHRJ
blBERktpdFZpZXc6OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgY29tZSBzdHJhaWdodCBmcm9tIFBERktpdC4KKworICAgIHNpemVfdCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAg
ICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZE
b2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBh
Z2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2Us
IGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAg
ICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7
CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KKworICAg
IG1fcGRmRG9jdW1lbnRTaXplID0gSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkg
Y29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3
Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8gTG9h
ZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVy
bDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyICYmICFwYXJhbWV0
ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1
bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBTdHJpbmcoKSwg
SFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOworCisgICAgY29udHJv
bGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQnVpbHRJblBERktpdFZpZXc6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2ZyYW1lKSB7Cisg
ICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52
aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Cisg
ICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgCisgICAgW21faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBb
bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IDA7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyID0gMDsKKyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKSByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExheWVyLmdldCgpIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXll
cl07Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7Cit9CisgICAgCit2
b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxh
eWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGN0eCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGN0eCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgCisgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FM
YXllckNvbnRleHQodHJ1ZSk7CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYg
bGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC50cmFuc2xhdGUoLW1fdmVydGljYWxTY3JvbGxiYXItPngoKSwgLW1fdmVydGljYWxTY3Jv
bGxiYXItPnkoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KCZncmFwaGlj
c0NvbnRleHQsIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICB9IGVsc2Ug
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiBsYXllciA9PSBtX2hvcml6b250YWxTY3JvbGxi
YXJMYXllcikgeworICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1tX2hvcml6b250
YWxTY3JvbGxiYXItPngoKSwgLW1faG9yaXpvbnRhbFNjcm9sbGJhci0+eSgpKTsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCBtX2hvcml6b250
YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICB9IGVsc2UgaWYgKGxheWVyID09IG1fc2Ny
b2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0ID0gdGhp
cy0+c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRl
KC1zY3JvbGxDb3JuZXJSZWN0LngoKSwgLXNjcm9sbENvcm5lclJlY3QueSgpKTsKKyAgICAgICAg
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAsICZncmFwaGljc0Nv
bnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgIH0KK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkp
OworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBCdWlsdEluUERGS2l0Vmlldzo6c25hcHNob3QoKQoreworICAgIGlmIChtX3Bs
dWdpblNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBGSVhN
RTogU3VwcG9ydCBub24tMSBwYWdlL2RldmljZVNjYWxlRmFjdG9yLgorICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZSA9IG1fcGx1Z2luU2l6ZTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9y
ZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisK
KyAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LT50cmFu
c2xhdGUoMCwgLW1fcGx1Z2luU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgc25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCld
OworCisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEJ1
aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGFpbmVy
TGF5ZXIuZ2V0KCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmlzVHJhbnNwYXJlbnQo
KQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJv
Y2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OndhbnRzV2hlZWxFdmVudHMoKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQoreworICAgIGlmIChtX3BsdWdpblNp
emUgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0
b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXSkgewor
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKKyAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zv
cm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOnBsdWdpblNpemVdOworCisgICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllF
U107CisgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxl
KDEuMCwgLTEuMCwgMS4wKTsKKyAgICAKKyAgICBDR0Zsb2F0IG1hZ25pZmljYXRpb24gPSBwbHVn
aW5WaWV3KCktPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKSAtIFttX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdOworICAgIAorICAgIC8vIEZJWE1FOiBJbnN0ZWFk
IG9mIG1fbGFzdE1vdXNlUG9pbnQsIHdlIHNob3VsZCB1c2UgdGhlIHpvb20gb3JpZ2luIGZyb20g
UGx1Z2luVmlldzo6c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvci4KKyAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24g
YXRQb2ludDptX2xhc3RNb3VzZVBvaW50IGltbWVkaWF0ZWx5OllFU107CisgICAgW21fY29udGVu
dExheWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RUcmFuc2xhdGUo
dHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCldOworICAgIFtDQVRyYW5zYWN0
aW9uIGNvbW1pdF07CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJh
cnMoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgp
Cit7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1
aW50NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdElu
UERGS2l0Vmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpkaWRFdmFsdWF0ZUph
dmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c3RyZWFtRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwgdWludDMyX3QsIHVpbnQz
Ml90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBk
ZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAg
ICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZm
ZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7
Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3Qgc3RyZWFtSUQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9
CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFt
SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0
cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fZGF0YUJ1ZmZlci5jbGVh
cigpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwg
IHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgQnVp
bHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghbV9kYXRhQnVmZmVyKQorICAgICAgICBtX2Rh
dGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0
YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6bWFu
dWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCit7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7
Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkK
K3sKKyAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKK30KKyAgICAKK3N0YXRpYyBOU1VJbnRlZ2Vy
IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50KQoreworICAg
IHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSA/IE5TU2hpZnRLZXlNYXNrIDogMCkKKyAgICAgICAg
fCAoZXZlbnQuY29udHJvbEtleSgpID8gTlNDb250cm9sS2V5TWFzayA6IDApCisgICAgICAgIHwg
KGV2ZW50LmFsdEtleSgpID8gTlNBbHRlcm5hdGVLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZl
bnQubWV0YUtleSgpID8gTlNDb21tYW5kS2V5TWFzayA6IDApOworfQorICAgIAorc3RhdGljIE5T
RXZlbnRUeXBlIGV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIGJv
b2wgbW91c2VCdXR0b25Jc0Rvd24pCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gTlNLZXlEb3duOworICAg
IGNhc2UgV2ViRXZlbnQ6OktleVVwOgorICAgICAgICByZXR1cm4gTlNLZXlVcDsKKworICAgIGNh
c2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25z
dCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU0xlZnRNb3VzZURvd247
CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICBy
ZXR1cm4gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlVXA6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+
KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VVcDsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU1JpZ2h0TW91c2VV
cDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYg
KG1vdXNlQnV0dG9uSXNEb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNMZWZ0
TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRHJhZ2dlZDsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5TTW91c2VNb3ZlZDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jv
b2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgc3RhdGljIGJvb2wgc19pc0Rvd24gPSBmYWxzZTsKKworICAgIElu
dFBvaW50IHBvc2l0aW9uSW5QREZWaWV3KGV2ZW50LnBvc2l0aW9uKCkpOworICAgIHBvc2l0aW9u
SW5QREZWaWV3ID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvc2l0aW9u
SW5QREZWaWV3KTsKKyAgICBwb3NpdGlvbkluUERGVmlldy5zZXRZKG1fcGx1Z2luU2l6ZS5oZWln
aHQoKSAtIHBvc2l0aW9uSW5QREZWaWV3LnkoKSk7CisgICAgCisgICAgbV9sYXN0TW91c2VQb2lu
dCA9IHBvc2l0aW9uSW5QREZWaWV3OworCisgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZl
bnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBzX2lzRG93bik7CisgICAgTlNVSW50ZWdlciBtb2Rp
ZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAg
aWYgKCFldmVudFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5TRXZlbnQgKmZh
a2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246
cG9zaXRpb25JblBERlZpZXcgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDow
IHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpldmVu
dC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkg
eworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYgKHNfaXNEb3duKQor
ICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRHJhZ2dlZDpmYWtl
RXZlbnRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkgbW91c2VNb3ZlZDpmYWtlRXZlbnRdOworICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURv
d246IHsKKyAgICAgICAgc19pc0Rvd24gPSB0cnVlOworICAgICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgbW91c2VEb3duOmZha2VFdmVudF07CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIFttX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZVVwOmZha2VFdmVudF07CisgICAgICAgIHNfaXNEb3duID0g
ZmFsc2U7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZv
cm0oZXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworICAgICAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxh
dGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERktp
dFZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAg
ICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKQoreworICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRl
eHQgbWVudS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit7Cisg
ICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBm
YWxzZSk7CisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21X
ZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQg
a2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQgbW9kaWZpZXJG
bGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6MCBj
aGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6ZXZlbnQu
dW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0KCkga2V5Q29kZTpl
dmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBbbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkga2V5RG93bjpmYWtlRXZlbnRdOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorICAgIAorYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBp
ZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkgY29weVNlbGVjdGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5hbWUgPT0gInNlbGVj
dEFsbCIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZWxlY3RBbGxdOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIGlm
IChjb21tYW5kTmFtZSA9PSAiY29weSIgJiYgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGN1
cnJlbnRTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgaWYg
KGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2V0Rm9jdXMoYm9v
bCBoYXNGb2N1cykKK3sKK30KKworTlBPYmplY3QqIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5T
Y3JpcHRhYmxlTlBPYmplY3QoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEJ1aWx0SW5Q
REZLaXRWaWV3Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdElu
UERGS2l0Vmlldzo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQoreworfQorCit2b2lkIEJ1aWx0SW5Q
REZLaXRWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKQoreworfQorCit2b2lkIEJ1
aWx0SW5QREZLaXRWaWV3Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKK3sKK30K
KwordWludDY0X3QgQnVpbHRJblBERktpdFZpZXc6OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBC
dWlsdEluUERGS2l0Vmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQor
eworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6cHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmdldEZv
cm1WYWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdElu
UERGS2l0Vmlldzo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHJldHVybiBzY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktpdFZpZXc6Omhvcml6
b250YWxTY3JvbGxiYXIoKQoreworICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0
KCk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktpdFZpZXc6OnZlcnRpY2FsU2Nyb2xsYmFy
KCkKK3sKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsKK30KKworSW50UmVj
dCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogQnVpbHRJblBERktp
dFZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
V2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBm
cmFtZSBvciBSZW5kZXJMYXllci4KKyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBCdWlsdElu
UERGS2l0Vmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEludFJlY3QoMCwgMCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IElu
dFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpIHNldFNjcm9sbFBvc2l0aW9uOkNHUG9pbnRNYWtlKG9mZnNldC54KCksIG9mZnNldC55
KCkpXTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNj
cm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxi
YXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkg
OiAwOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6aW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKHNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgICAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICAg
ICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSW50UmVjdCBkaXJ0eVJl
Y3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsK
KyAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworICAgIGNv
bnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5QREZL
aXRWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIFttX3Njcm9sbENvcm5l
ckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCitib29sIEJ1aWx0
SW5QREZLaXRWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNl
dC53aWR0aCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQnVpbHRJ
blBERktpdFZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQor
CitJbnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5Q
REZLaXRWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICht
X3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIEludFBv
aW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6
ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkgLSBtX3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4g
bWF4aW11bU9mZnNldDsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojp2aXNpYmxlSGVpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOworfQorCitpbnQg
QnVpbHRJblBERktpdFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGx1Z2luU2l6ZS53aWR0aCgpOworfQorCitJbnRTaXplIEJ1aWx0SW5QREZLaXRWaWV3Ojpjb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsKK30KKwor
Ym9vbCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2Fj
aGUoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2Vk
KGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0
byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdl
IGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMg
d2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9m
ZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9m
ZnNldChuZXdTY3JvbGxPZmZzZXQpOworCisgICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBh
cmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVh
ci4KKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBTY3JvbGxhYmxlQXJlYTo6Y29udGVu
dHNSZXNpemVkKCk7Cit9CisKK0ludFJlY3QgQnVpbHRJblBERktpdFZpZXc6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBz
Y3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBwbHVn
aW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUo
KS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwg
cmVjdCk7Cit9CisgICAgCitJbnRSZWN0IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9j
YXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHJlY3Q7
Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmll
dygpLT5sb2NhdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBw
b2ludCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihwbHVnaW5WaWV3KCkt
PnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKHBsdWdpblZpZXcoKS0+
bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHBv
aW50OworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZLaXRWaWV3KiBwZGZWaWV3
ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmlu
YWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZLaXRWaWV3KiBwZGZW
aWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVjdEdldFByaXZhdGUo
b2JqZWN0KSk7CisgICAgcGRmVmlldy0+ZGVyZWYoKTsKK30KKworSlNWYWx1ZVJlZiBCdWlsdElu
UERGS2l0Vmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBCdWlsdEluUERGS2l0VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZLaXRW
aWV3Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIFdlYkZyYW1lKiBm
cmFtZSA9IHBkZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gZnJh
bWUtPmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworCisgICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKworSlNPYmplY3RSZWYgQnVpbHRJ
blBERktpdFZpZXc6Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQoreworICAgIHN0YXRp
YyBKU1N0YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAg
IHsgInByaW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwK
KyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZp
bml0aW9uID0geworICAgICAgICAwLAorICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCisg
ICAgICAgICJEb2MiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBqc1BERkRvY1N0
YXRpY0Z1bmN0aW9ucywKKyAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFs
aXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKworICAgIHN0YXRpYyBKU0Ns
YXNzUmVmIGpzUERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5p
dGlvbik7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhp
cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFBERktJ
VF9QTFVHSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODgy
OWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9C
dWlsdEluUERGVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEJ1aWx0SW5QREZWaWV3X2gKLSNkZWZpbmUgQnVpbHRJblBERlZp
ZXdfaAotCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxl
QXJlYS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU09iamVjdFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTVmFsdWVSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgUGx1Z2luSW5m
bzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpblZpZXc7Ci1jbGFzcyBX
ZWJGcmFtZTsKLQotY2xhc3MgQnVpbHRJblBERlZpZXcgOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRl
IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCdWlsdEluUERGVmlldz4gY3JlYXRlKFdlYkZyYW1lKik7Ci0gICAgfkJ1aWx0SW5QREZWaWV3
KCk7Ci0KLSAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7Ci0KLSAg
ICAvLyBJbi1wcm9jZXNzIFBERlZpZXdzIGRvbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGluaXRp
YWxpemF0aW9uLgotICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3VzbHlJbml0aWFs
aXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQg
QnVpbHRJblBERlZpZXcoV2ViRnJhbWUqKTsKLQotICAgIC8vIFJlZ3VsYXIgcGx1Zy1pbnMgZG9u
J3QgbmVlZCBhY2Nlc3MgdG8gdmlldywgYnV0IHdlIGFkZCBzY3JvbGxiYXJzIHRvIGVtYmVkZGlu
ZyBGcmFtZVZpZXcgZm9yIHByb3BlciBldmVudCBoYW5kbGluZy4KLSAgICBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3KCk7Ci0gICAgY29uc3QgUGx1Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0Owot
Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7
Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9u
KTsKLSAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotICAgIHZvaWQgcGRmRG9jdW1lbnRE
aWRMb2FkKCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOwotICAgIHZvaWQgcGFpbnRCYWNr
Z3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBwYWludENvbnRlbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHBhaW50
Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKLQotICAgIC8vIFBsdWctaW4gbWV0aG9kcwotICAgIHZpcnR1YWwgYm9v
bCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5
ZXIoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zcGFyZW50KCk7Ci0gICAgdmly
dHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2li
aWxpdHlEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5n
KHVpbnQ2NF90IHJlcXVlc3RJRCk7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmFpbCh1aW50
NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1
bHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qg
c3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFt
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVh
bUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0
cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCk7Ci0g
ICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6
U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5j
ZWxsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVl
bEV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoYm9vbCk7Ci0gICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0No
YW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1
YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVhbCB1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkg
T1ZFUlJJREU7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0
ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hh
bmdlZChib29sKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZh
bHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVj
dGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxQ
REZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIG1ldGhvZHMuCi0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVj
dCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b24pIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6
U2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2lu
dCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50IG5ld1N0eWxl
LCBib29sIGZvcmNlVXBkYXRlKSBPVkVSUklERTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSBvdGhlciBjb252ZXJzaW9uIGZ1bmN0aW9uczsgdGhpcyBvbmUgaXMgZW5vdWdoIHRvIGdldCBz
Y3JvbGxiYXIgaGl0IHRlc3Rpbmcgd29ya2luZy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpT
Y3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0IE9W
RVJSSURFOwotCi0gICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZik7Ci0g
ICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
LQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgV2ViQ29yZTo6S1VS
TCBtX3NvdXJjZVVSTDsKLQotICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOwotICAgIFJl
dGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGFCdWZmZXI7Ci0KLSAgICBSZXRhaW5QdHI8
UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+
IG1fcGFnZUJveGVzOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8v
IEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCi0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJh
cj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgIFdlYkZyYW1lKiBtX2ZyYW1lOwotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gQnVpbHRJblBERlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkY2FlYTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDg4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJCdWlsdEluUERGVmlldy5oIgotCi0jaW1wb3J0ICJQREZLaXRJbXBv
cnRzLmgiCi0jaW1wb3J0ICJQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAu
aCIKLSNpbXBvcnQgIldlYkV2ZW50LmgiCi0jaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+Ci0jaW1wb3J0
IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2Fk
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRv
ci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQotewotICAgIENHUERGQXJyYXlSZWYgbmFt
ZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZu
YW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChu
YW1lcykgLyAyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Ci0gICAgICAgICAgICBDR1BE
RkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwotICAgICAgICAgICAg
dmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRB
cnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6
ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYg
a2lkOwotICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1
YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBnZXRB
bGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQ
REZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17Ci0gICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFNj
cmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNjcmlwdHMpCi17Ci0gICAgaWYgKCFwZGZEb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cg
PSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7Ci0gICAgaWYgKCFwZGZDYXRh
bG9nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2YgYWxs
IGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5hbWVz
RGljdGlvbmFyeTsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRmQ2F0
YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KLSAgICBD
R1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOwotICAgIGlmICghQ0dQREZEaWN0
aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmphdmFT
Y3JpcHROYW1lVHJlZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBuYW1lcyBhcmUg
YXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCi0gICAgVmVj
dG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOwotICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRy
ZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKLSAgICBzaXplX3Qgb2JqZWN0Q291bnQg
PSBvYmplY3RzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0Q291
bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlvbjsK
LSAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQREZP
YmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmphdmFT
Y3JpcHRBY3Rpb24pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQSBKYXZh
U2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQiLgot
ICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOwotICAgICAgICBpZiAoIUNHUERGRGljdGlv
bmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3RyY21w
KGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOwotICAgICAgICBDRkluZGV4IGxlbmd0aDsKLSAg
ICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOwotICAgICAgICBDR1BERlN0cmluZ1JlZiBzdHJp
bmc7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmIChDR1BE
RkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkpIHsK
LSAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgICAgICBkYXRhLmFk
b3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShzdHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAgICAg
IGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5dGVz
ID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENG
RGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rp
b25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAgICAg
ICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdHZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAgICAg
ICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExlbmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghYnl0ZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRlN0cmlu
Z0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBi
eXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmluZ0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmluZ0Vu
Y29kaW5nVVRGODsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHRD
RiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIGxl
bmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBzY3JpcHRzLmFwcGVuZChzY3JpcHQpOwotICAgIH0KLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVz
dElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0
cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCi0KLWNvbnN0IGludCBndXR0ZXJI
ZWlnaHQgPSAxMDsKLWNvbnN0IGludCBzaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IGludCBzaGFk
b3dPZmZzZXRZID0gLTI7Ci1jb25zdCBpbnQgc2hhZG93U2l6ZSA9IDc7Ci0KLVBhc3NSZWZQdHI8
QnVpbHRJblBERlZpZXc+IEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVpbHRJblBERlZpZXcoZnJhbWUpKTsKLX0KLQot
QnVpbHRJblBERlZpZXc6OkJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUJ1aWx0SW5QREZWaWV3Ojp+QnVpbHRJblBERlZpZXcoKQot
ewotfQotCi1QbHVnaW5JbmZvIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkKLXsKLSAgICBQ
bHVnaW5JbmZvIGluZm87Ci0gICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsK
LQotICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKLSAgICBtaW1lQ2xhc3NJbmZvLnR5
cGUgPSJhcHBsaWNhdGlvbi9wZGYiOwotICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3Vt
ZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVu
ZCgicGRmIik7Ci0KLSAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKLSAgICBy
ZXR1cm4gaW5mbzsKLX0KLQotUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXco
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsK
LX0KLQotY29uc3QgUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXcoKSBjb25z
dAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxl
cigpKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCi17Ci0g
ICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGlj
YWxTY3JvbGxiYXI7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9
IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgo
KSkKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAg
ICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAg
IH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVy
dGljYWxTY3JvbGxiYXIpOwotCi0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1f
dmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNF
bXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBz
KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCkt
PnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3Jv
bGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOwotICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsK
LSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVn
aW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChw
bHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICAKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFt
ZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmIChoYWRTY3Jv
bGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0g
ICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwot
Ci0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLVBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERGVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdl
dCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBS
ZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwot
ICAgIGVsc2UgCi0gICAgICAgIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7
Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQo
KSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17
Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6
b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAob3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgd2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHdpbGxS
ZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwotCi0gICAgc2Nyb2xsYmFy
LT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNjcm9s
bGFibGVBcmVhKCk7Ci0gICAgc2Nyb2xsYmFyID0gMDsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6YWRkQXJjaGl2ZVJlc291cmNlKCkKLXsKLSAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sgdG8g
Zm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMgc2hv
dWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNvdXJjZXMuCi0KLSAgICAvLyBBZGQganVz
dCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMg
dG8gd29yay4KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXNpemVkUmVzcG9uc2U7Ci0gICAg
c3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVu
YW1lKTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFVSTChtX3NvdXJjZVVSTCk7IC8vIE5l
ZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZVBERlVSTC4KLSAgICBzeW50
aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBsaWNhdGlvbi9wZGYiKTsKLQotICAgIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1ZmZlci5nZXQoKSksIG1fc291cmNlVVJM
LCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBzeW50aGVzaXplZFJlc3Bv
bnNlKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigpLT5h
ZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKCkKLXsKLSAgICBhZGRBcmNoaXZlUmVzb3VyY2Uo
KTsKLQotICAgIG1fcGRmRG9jdW1lbnQuYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxv
Y10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKiltX2RhdGFCdWZmZXIuZ2V0KCldKTsKLQotICAgIGNh
bGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgY29udHJvbGxl
cigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
PiBzY3JpcHRzOwotICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50
LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7Ci0KLSAgICBzaXplX3Qgc2NyaXB0Q291bnQg
PSBzY3JpcHRzLnNpemUoKTsKLSAgICBpZiAoIXNjcmlwdENvdW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDAp
OwotICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKLSAgICAgICAgSlNTdHJp
bmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQo
KSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAw
LCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7Ci0gICAgfQotCi0gICAgSlNH
bG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpjYWxj
dWxhdGVTaXplcygpCi17Ci0gICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXRO
dW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBhZ2VS
ZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRv
Y3VtZW50UmVmXSwgaSArIDEpOwotICAgICAgICBBU1NFUlQocGRmUGFnZSk7Ci0KLSAgICAgICAg
Q0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJveCk7
Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBDR1BE
RlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9wYWdl
Qm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7Ci0gICAgICAgIG1fcGRmRG9jdW1lbnRTaXplLnNl
dFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJv
eC5zaXplLndpZHRoKSkpOwotICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5leHBhbmQoMCwgYm94
LnNpemUuaGVpZ2h0KTsKLSAgICB9Ci0gICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGd1
dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAg
ICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KLSAgICBtX3NvdXJjZVVSTCA9IHBhcmFt
ZXRlcnMudXJsOwotICAgIGlmICghcGFyYW1ldGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYg
IXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKLSAgICAgICAgY29udHJvbGxlcigpLT5sb2FkVVJM
KHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0
cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCBmYWxzZSk7Ci0KLSAg
ICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxpemVQbHVnaW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZnJhbWUp
IHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1l
KCktPnZpZXcoKSkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgfQotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOwot
Ci0gICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAg
IGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklYTUU6IERyYXcgbG9hZGluZyBwcm9ncmVzcy4KLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcGFpbnRDb250ZW50KGdyYXBoaWNzQ29udGV4dCwgZGlydHlS
ZWN0KTsKLSAgICBwYWludENvbnRyb2xzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLX0K
LQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBn
cmFwaGljc0NvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
bkhpZ2gpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOwotICAgIEludFJl
Y3QgY29udGVudFJlY3QoZGlydHlSZWN0KTsKLSAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9z
Y3JvbGxPZmZzZXQud2lkdGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIENH
Q29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLQotICAgIGludCBwYWdlVG9wID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIEludFJlY3QgcGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOwotICAgICAgICBmbG9hdCBl
eHRyYU9mZnNldEZvckNlbnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lkdGgo
KSAtIHBhZ2VCb3gud2lkdGgoKSkgLyAyLjBmKSwgMC4wZik7Ci0gICAgICAgIGZsb2F0IGV4dHJh
T2Zmc2V0Rm9yQ2VudGVyaW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91
bmRmKChtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zm
c2V0WSkgLyAyLjBmKSwgMC4wZikgOiAwOwotCi0gICAgICAgIGlmIChwYWdlVG9wID4gY29udGVu
dFJlY3QubWF4WSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwYWdlVG9wICsg
cGFnZUJveC5oZWlnaHQoKSArIGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdo
dCA+PSBjb250ZW50UmVjdC55KCkpIHsKLSAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdl
ID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZd
LCBpICsgMSk7Ci0KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdY
IC0gcGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94LnkoKSAt
IHBhZ2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
YWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1NpemUs
IENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmZpbGxSZWN0KHBhZ2VCb3gpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5jbGVhclNoYWRvdygpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocGFn
ZUJveCk7Ci0KLSAgICAgICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBh
Z2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcGFnZVRvcCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0OwotICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0KCkg
LSBndXR0ZXJIZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRD
b250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQotewotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhckRp
cnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgc2Nyb2xsYmFyRGlydHlSZWN0Lm1vdmVCeShw
bHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54KCksIC1wbHVnaW5W
aWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotCi0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotICAgIH0KLQotICAgIEludFJlY3QgZGlydHlD
b3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwgZGlydHlSZWN0KTsK
LSAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIoMCwgZ3JhcGhp
Y3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp1
cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCi17Ci0g
ICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSk7Ci0KLSAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPmludmFsaWRhdGUoKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGludmFsaWRhdGVTY3JvbGxD
b3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IEJ1aWx0SW5QREZWaWV3OjpzbmFwc2hvdCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi1QbGF0Zm9ybUxheWVyKiBCdWlsdEluUERGVmlldzo6cGx1Z2luTGF5
ZXIoKQotewotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotYm9vbCBCdWlsdEluUERGVmll
dzo6aXNUcmFuc3BhcmVudCgpCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IGZyb20gdGhlIHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6d2FudHNXaGVlbEV2ZW50cygp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Omdlb21ldHJ5
RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCi17
Ci0gICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5TaXplKSB7Ci0gICAgICAgIC8vIE5vdGhp
bmcgdG8gZG8uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3BsdWdpblNpemUgPSBw
bHVnaW5TaXplOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBi
b29sKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZW
aWV3OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwg
dWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQs
IHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKLX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVl
c3RJRCk7Ci0KLSAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKLSAgICAgICAgbV9kYXRhQnVmZmVyLmFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0KLSAgICBDRkRhdGFBcHBlbmRCeXRl
cyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRl
cyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZpbmlzaExv
YWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwg
c3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgcGRmRG9jdW1lbnREaWRM
b2FkKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZhaWwodWludDY0X3Qg
c3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFt
SUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fZGF0YUJ1ZmZl
ci5jbGVhcigpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0
aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKLXsK
LSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhQnVmZmVyKQotICAgICAgICBtX2Rh
dGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLQotICAgIENGRGF0
YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFs
U3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkKLXsKLSAg
ICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAgbW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBhbHNvIG5v
dGlmeSBzY3JvbGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNob3VsZCBhbHNvIHNlbmQgbW91
c2VFeGl0ZWQgdG8gaGlkZSBpdC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6
TW91c2VEb3duOiB7Ci0gICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBhcyB3aWxsIG1ha2UgRXZl
bnRIYW5kbGVyIHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4g
Y2xpY2tpbmcgc2Nyb2xsYmFycy4KLSAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGRuJ3QgY2hh
bmdlIGZvY3VzIGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFkeSBkaWQgdGhhdCBmb3IgdXMu
Ci0gICAgICAgIC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1zIGlzIGFkZGVkLCB3ZSdsbCBu
ZWVkIHRvIGFjdHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4gY2xpY2tpbmcgaW4gYSBmb3Jt
LgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDogewot
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50
KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5tb3Vz
ZVVwKHBsYXRmb3JtRXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgZXZlbnQpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0
Zm9ybShldmVudCk7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50
KHBsYXRmb3JtRXZlbnQpOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUVu
dGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgbW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6Omhh
bmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAgICBtb3VzZUV4
aXRlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5Q
REZWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewot
ICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLX0KLQotTlBPYmplY3QqIEJ1aWx0
SW5QREZWaWV3OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAgIHJldHVybiAwOwot
fQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dGb2N1
c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6d2luZG93QW5kVmll
d0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVl
bkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5
Q2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NjYWxl
RmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLX0KLQotdWludDY0X3QgQnVpbHRJblBERlZpZXc6OnBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3Ry
aW5nJikKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9kZShM
YXllckhvc3RpbmdNb2RlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBCdWlsdEluUERGVmlldzo6
c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAgICByZXR1cm4g
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5Q
REZWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLmdldCgpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5QREZWaWV3Ojp2ZXJ0aWNh
bFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Ci19
Ci0KLUludFJlY3QgQnVpbHRJblBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewot
ICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIEJ1aWx0
SW5QREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJl
bnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFJlY3QgQnVp
bHRJblBERlZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdAotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxpdCBwYXJ0cyB0aGF0IHJl
bWFpbiB2aXNpYmxlLgotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAs
IG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLX0KLQotaW50
IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAotewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGlj
YWxTY3JvbGxiYXIpLmdldCgpOwotICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50
b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNv
cmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5pc0FjdGl2ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLSAgICBkaXJ0
eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwotICAgIGNvbnRyb2xsZXIo
KS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGNvbnRy
b2xsZXIoKS0+aW52YWxpZGF0ZShyZWN0KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlu
dCBCdWlsdEluUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3Np
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBERlZp
ZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50
KDAsIDApOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hv
cml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9wbHVnaW5TaXplLmhlaWdodCgp
ICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4aW11bU9mZnNldC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Ci19Ci0KLWludCBCdWls
dEluUERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2lu
U2l6ZS5oZWlnaHQoKTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlV2lkdGgoKSBj
b25zdAotewotICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKLX0KLQotSW50U2l6ZSBC
dWlsdEluUERGVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wZGZE
b2N1bWVudFNpemU7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OnNjcm9sbGJhcnNDYW5CZUFj
dGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3Vt
ZW50KCktPmluUGFnZUNhY2hlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNjcm9sbGJh
clN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3JjZVVw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQg
YWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVy
bGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVy
ZSBzY3JvbGxiYXJzIHdlcmUuCi0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKLSAg
ICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIC8vIEFzIHNpemUgb2Yg
dGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVhciBv
ciB0byBkaXNhcHBlYXIuCi0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgU2Nyb2xsYWJs
ZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVy
ZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92
ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwotCi0g
ICAgcmV0dXJuIHBvaW50OwotfQotCi1zdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZWaWV3
KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+cmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGpzUERG
RG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZWaWV3KiBw
ZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUo
b2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+ZGVyZWYoKTsKLX0KLQotSlNWYWx1ZVJlZiBCdWlsdElu
UERGVmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBC
dWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IHBk
ZlZpZXctPm1fZnJhbWU7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUtPmNvcmVG
cmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKLSAg
ICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwot
Ci0gICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotSlNPYmplY3RSZWYgQnVpbHRJblBERlZpZXc6
Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1
bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInByaW50Iiwg
anNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfSwKLSAgICB9OwotCi0g
ICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9uID0gewot
ICAgICAgICAwLAotICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCi0gICAgICAgICJEb2Mi
LAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBqc1BERkRvY1N0YXRpY0Z1bmN0aW9u
cywKLSAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzUERG
RG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7Ci0KLSAg
ICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzkwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5TaW1wbGVQREZWaWV3LmgKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3X2gKKyNkZWZpbmUgQnVpbHRJblNpbXBsZVBERlZpZXdfaAorCisjaW5jbHVkZSAiUGx1
Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBK
U0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBCdWlsdElu
U2ltcGxlUERGVmlldyA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1aWx0SW5TaW1wbGVQREZW
aWV3PiBjcmVhdGUoV2ViRnJhbWUqKTsKKyAgICB+QnVpbHRJblNpbXBsZVBERlZpZXcoKTsKKwor
ICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdpbkluZm8oKTsKKworICAgIC8vIElu
LXByb2Nlc3MgUERGVmlld3MgZG9uJ3Qgc3VwcG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRp
b24uCisgICAgdmlydHVhbCBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCdWlsdElu
U2ltcGxlUERGVmlldyhXZWJGcmFtZSopOworCisgICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24n
dCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5n
IEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgorICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcoKTsKKyAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CisK
KyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24p
OworICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisgICAgdm9pZCBwZGZEb2N1bWVudERp
ZExvYWQoKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdm9pZCBwYWludEJhY2tn
cm91bmQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGlydHlSZWN0KTsKKyAgICB2b2lkIHBhaW50Q29udGVudChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgcGFpbnRD
b250cm9scyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBkaXJ0eVJlY3QpOworCisgICAgLy8gUGx1Zy1pbiBtZXRob2RzCisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc25hcHNob3QoKTsK
KyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXll
cigpOworI2VuZGlmCisgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJp
bGl0eURpZENoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmco
dWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2
NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRF
dmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3Vs
dCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVh
bUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFt
SUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7CisgICAgdmlydHVhbCB2b2lk
IHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxh
c3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpT
dHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZp
cnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywg
aW50IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRp
bmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNl
bGxlZCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVs
RXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29udGV4dE1lbnVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1cyhib29sKTsKKyAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hh
bmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHVp
bnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBP
VkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRl
Q2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFu
Z2VkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFs
dWUpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0
aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKKworICAgIHZpcnR1YWwgUmV0YWluUHRyPFBE
RkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9wZGZEb2N1bWVudDsgfQorCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgbWV0aG9kcy4KKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9s
bGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0
IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlv
bikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpT
Y3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBib29sIHNj
cm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3aWxsIGtlZXAg
Y3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1h
dGUuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUs
IGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJSSURFOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhl
IG90aGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zOyB0aGlzIG9uZSBpcyBlbm91Z2ggdG8gZ2V0IHNj
cm9sbGJhciBoaXQgdGVzdGluZyB3b3JraW5nLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNj
cm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QgT1ZF
UlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgT1ZFUlJJREU7CisKKyAgICBK
U09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgV2ViQ29yZTo6
SW50U2l6ZSBtX3BsdWdpblNpemU7CisKKyAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOwor
CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgUmV0YWluUHRyPENGTXV0YWJs
ZURhdGFSZWY+IG1fZGF0YUJ1ZmZlcjsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9w
ZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNs
dWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRh
bFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJhbWU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fc2Nyb2xsT2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBCdWlsdEluU2ltcGxlUERGVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5TaW1wbGVQREZWaWV3Lm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJhNjlhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmll
dy5tbQpAQCAtMCwwICsxLDg5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiQnVpbHRJblNpbXBsZVBERlZpZXcuaCIKKworI2ltcG9ydCAi
UERGS2l0SW1wb3J0cy5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiU2hhcmVh
YmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252
ZXJzaW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5o
PgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVz
b3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Rv
Y3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBI
ZWFkZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Ny
b2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgdm9p
ZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9uYXJ5UmVm
IHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKK3sKKyAgICBDR1BERkFy
cmF5UmVmIG5hbWVzOworICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAi
TmFtZXMiLCAmbmFtZXMpKSB7CisgICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BERkFycmF5
R2V0Q291bnQobmFtZXMpIC8gMjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1l
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0OworICAgICAg
ICAgICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0KTsKKyAg
ICAgICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQREZEaWN0
aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJldHVybjsK
KworICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0
aW9uYXJ5UmVmIGtpZDsKKyAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFyeShraWRz
LCBpLCAma2lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBlbmRWYWx1ZXNJ
blBERk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYgdHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQoreworICAgIGFwcGVuZFZhbHVlc0lu
UERGTmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOworfQorCitzdGF0aWMgdm9p
ZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRvY3VtZW50
LCBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQoreworICAgIGlmICgh
cGRmRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHUERGRGljdGlvbmFyeVJlZiBw
ZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQpOworICAgIGlm
ICghcGRmQ2F0YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBkaWN0aW9u
YXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgorICAgIENHUERGRGljdGlvbmFy
eVJlZiBuYW1lc0RpY3Rpb25hcnk7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9u
YXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0IiBuYW1lIHRy
ZWUuCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsKKyAgICBpZiAo
IUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAiSmF2YVNjcmlw
dCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUg
bmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVz
LgorICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKKyAgICBnZXRBbGxWYWx1ZXNJ
blBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7CisgICAgc2l6ZV90IG9i
amVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3Jp
cHRBY3Rpb247CisgICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVycHJldF9j
YXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25h
cnksICZqYXZhU2NyaXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBlIG9mICJKYXZh
U2NyaXB0Ii4KKyAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKKyAgICAgICAgaWYgKCFD
R1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFjdGlvblR5cGUp
IHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKKyAgICAgICAgQ0ZJbmRleCBs
ZW5ndGg7CisgICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKKyAgICAgICAgQ0dQREZTdHJp
bmdSZWYgc3RyaW5nOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOworICAgICAg
ICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZz
dHJlYW0pKSB7CisgICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0KSk7Cisg
ICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAgICAgICBs
ZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
Q0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJpbmcp
KSB7CisgICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJpbmcpOwor
ICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVzWzBdID09
IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgOiBr
Q0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2Ny
aXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlmICghc2NyaXB0KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRfdCBwZGZEb2N1
bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBt
dWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitjb25zdCBp
bnQgZ3V0dGVySGVpZ2h0ID0gMTA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7Citjb25z
dCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOworY29uc3QgaW50IHNoYWRvd1NpemUgPSA3OworCitQ
YXNzUmVmUHRyPEJ1aWx0SW5TaW1wbGVQREZWaWV3PiBCdWlsdEluU2ltcGxlUERGVmlldzo6Y3Jl
YXRlKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1aWx0SW5T
aW1wbGVQREZWaWV3KGZyYW1lKSk7Cit9CisKK0J1aWx0SW5TaW1wbGVQREZWaWV3OjpCdWlsdElu
U2ltcGxlUERGVmlldyhXZWJGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorewor
fQorCitCdWlsdEluU2ltcGxlUERGVmlldzo6fkJ1aWx0SW5TaW1wbGVQREZWaWV3KCkKK3sKK30K
KworUGx1Z2luSW5mbyBCdWlsdEluU2ltcGxlUERGVmlldzo6cGx1Z2luSW5mbygpCit7CisgICAg
UGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1lKCk7
CisKKyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAgbWltZUNsYXNzSW5mby50
eXBlID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZEb2N1
bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBl
bmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7CisgICAg
cmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVn
aW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRyb2xs
ZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVn
aW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmll
dyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikgeworICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1
bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZE
b2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1f
cGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0g
Y3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3Rl
cCA9IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsK
KworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1
Z2luU2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCkt
PngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpLCAwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3Jv
bGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgo
KSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3Qu
Y29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9Cisg
ICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmll
dygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhh
c1Njcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7CisgICAgICAgIGlm
IChoYXNTY3JvbGxiYXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKworICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVpbHRJblNpbXBsZVBERlZpZXc6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICBlbHNlIAorICAgICAgICBkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmll
dygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgp
OworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBz
Y3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSk7CisgICAgZWxzZQorICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Ny
b2xsYmFyLmdldCgpKTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAg
IHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOworICAgIHNjcm9sbGJh
ciA9IDA7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJj
ZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNl
IHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQg
YXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNv
bnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgUmVzb3Vy
Y2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uu
c2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc3ludGhlc2l6
ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0
VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRN
aW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIs
IFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmll
dygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJl
c291cmNlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBkZkRv
Y3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBtX3Bk
ZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0
YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygp
OworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0
ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0
KCkpKTsKKworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKKyAg
ICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0sIHNjcmlwdHMpOworCisgICAgc2l6ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0cy5zaXpl
KCk7CisgICAgaWYgKCFzY3JpcHRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKKyAgICBKU09iamVj
dFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9
IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNbaV0uZ2V0KCkpOworICAgICAgICBK
U0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRvYywgMCwgMCwgMCk7CisgICAgICAg
IEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOworICAgIH0KKworICAgIEpTR2xvYmFsQ29udGV4dFJl
bGVhc2UoY3R4KTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6Y2FsY3VsYXRlU2l6
ZXMoKQoreworICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQ
YWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBh
Z2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJl
Zl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBi
b3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgICAg
ICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0
Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFw
cGVuZChJbnRSZWN0KGJveCkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5zZXRXaWR0aCht
YXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3guc2l6ZS53
aWR0aCkpKTsKKyAgICAgICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGJveC5zaXplLmhl
aWdodCk7CisgICAgfQorICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFuZCgwLCBndXR0ZXJIZWln
aHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAg
Ly8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VVUkwgPSBwYXJhbWV0
ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyICYmICFw
YXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChw
ZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBTdHJp
bmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOworCisgICAg
Y29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2Zy
YW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVG
cmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Cit9CisKK3Zv
aWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgY29udGVudEFyZWFXaWxs
UGFpbnQoKTsKKworICAgIHBhaW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7CisKKyAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJv
Z3Jlc3MuCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRl
eHQsIGRpcnR5UmVjdCk7CisgICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5
UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50QmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3ND
b250ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChkaXJ0
eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwYWludENvbnRlbnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29u
dGV4dCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
b3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZFNtb290
aEZvbnRzKHRydWUpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3
aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBncmFwaGljc0NvbnRleHQtPmNsaXAo
ZGlydHlSZWN0KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7CisgICAgY29u
dGVudFJlY3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Njcm9sbE9mZnNl
dC5oZWlnaHQoKSk7CisKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisK
KyAgICBpbnQgcGFnZVRvcCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VC
b3hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBtX3BhZ2VCb3hl
c1tpXTsKKyAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0gbWF4KHJvdW5k
ZigobV9wbHVnaW5TaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4wZiksIDAuMGYp
OworICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9wYWdlQm94ZXMu
c2l6ZSgpID09IDEpID8gbWF4KHJvdW5kZigobV9wbHVnaW5TaXplLmhlaWdodCgpIC0gcGFnZUJv
eC5oZWlnaHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsKKworICAgICAg
ICBpZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9mZnNldEZvckNl
bnRlcmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7CisgICAgICAgICAg
ICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3Vt
ZW50LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4
dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdZIC0gcGFnZUJveC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKKworICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKKworICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKHBhZ2VCb3gpOworCisgICAgICAgICAgICBDR0NvbnRleHREcmF3
UERGUGFnZShjb250ZXh0LCBwZGZQYWdlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
cmVzdG9yZSgpOworICAgICAgICB9CisgICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQo
KSArIGd1dHRlckhlaWdodDsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIC1wYWdlQm94LmhlaWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQg
QnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsK
KyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAg
IHNjcm9sbGJhckRpcnR5UmVjdC5tb3ZlQnkocGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXco
KS0+ZnJhbWVSZWN0KCkueCgpLCAtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS55KCkpOworCisg
ICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsK
KworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsK
KyAgICB9CisKKyAgICBJbnRSZWN0IGRpcnR5Q29ybmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3Jv
bGxDb3JuZXJSZWN0KCksIGRpcnR5UmVjdCk7CisgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkt
PnBhaW50U2Nyb2xsQ29ybmVyKDAsIGdyYXBoaWNzQ29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsK
K30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRl
eHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3Qo
KSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBCdWlsdEluU2ltcGxlUERGVmll
dzo6c25hcHNob3QoKQoreworICAgIHJldHVybiAwOworfQorCisjaWYgUExBVEZPUk0oTUFDKQor
UGxhdGZvcm1MYXllciogQnVpbHRJblNpbXBsZVBERlZpZXc6OnBsdWdpbkxheWVyKCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKK2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6Omlz
VHJhbnNwYXJlbnQoKQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9t
IHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OndhbnRzV2hlZWxFdmVudHMo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKQoreworICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgeworICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wbHVnaW5T
aXplID0gcGx1Z2luU2l6ZTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgQnVp
bHRJblNpbXBsZVBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIEJ1
aWx0SW5TaW1wbGVQREZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6
OmZyYW1lRGlkRmFpbCh1aW50NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0
KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgS1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1
bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmls
ZW5hbWU7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit2
b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VO
VVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAg
aWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVy
LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwor
fQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVp
bnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlE
ID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgpOwor
fQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0
cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGFCdWZmZXIu
Y2xlYXIoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6bWFudWFsU3RyZWFtRGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1M
ZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
Cit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworfQorCit2
b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAg
ICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisK
KyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBs
ZVBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQoreworICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptYW51YWxTdHJl
YW1EaWRGYWlsKGJvb2wpCit7CisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK2Jvb2wg
QnVpbHRJblNpbXBsZVBERlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIg
ZWZmZWN0LiBTaG91bGQgYWxzbyBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICAvLyBSZXR1
cm5pbmcgZmFsc2UgYXMgd2lsbCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWlu
LCB3aGljaCBpcyBhcHByb3ByaWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCisgICAgICAg
IC8vIElkZWFsbHksIHdlIHdvdWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5W
aWV3IGFscmVhZHkgZGlkIHRoYXQgZm9yIHVzLgorICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9y
IFBERiBmb3JtcyBpcyBhZGRlZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1
Zy1pbiB3aGVuIGNsaWNraW5nIGluIGEgZm9ybS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBs
YXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxh
dGZvcm1FdmVudCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFBsYXRm
b3JtV2hlZWxFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKQoreworICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVNb3VzZUxl
YXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluU2ltcGxlUERGVmll
dzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICAv
LyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51LgorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBX
ZWJLZXlib2FyZEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0
KiBCdWlsdEluU2ltcGxlUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBCdWlsdEluU2ltcGxl
UERGVmlldzo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgQnVpbHRJblNp
bXBsZVBERlZpZXc6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sKK30KKwordm9pZCBCdWlsdElu
U2ltcGxlUERGVmlldzo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9p
ZCBCdWlsdEluU2ltcGxlUERGVmlldzo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQp
Cit7Cit9CisKK3VpbnQ2NF90IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVnaW5Db21wbGV4VGV4
dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQnVp
bHRJblNpbXBsZVBERlZpZXc6OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYpCit7
Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNldExheWVySG9zdGluZ01vZGUoTGF5
ZXJIb3N0aW5nTW9kZSkKK3sKK30KKworI2VuZGlmCisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZp
ZXc6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCit2b2lkIEJ1aWx0
SW5TaW1wbGVQREZWaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30K
KworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVT
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCit7CisgICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30K
KworU2Nyb2xsYmFyKiBCdWlsdEluU2ltcGxlUERGVmlldzo6aG9yaXpvbnRhbFNjcm9sbGJhcigp
Cit7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKK30KKworU2Nyb2xs
YmFyKiBCdWlsdEluU2ltcGxlUERGVmlldzo6dmVydGljYWxTY3JvbGxiYXIoKQoreworICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworfQorCitJbnRSZWN0IEJ1aWx0SW5TaW1w
bGVQREZWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxi
YXIoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpOworICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0KKyAgICByZXR1cm4g
SW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBCdWlsdEluU2ltcGxlUERGVmlldzo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXYWxrIHVw
IHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1lIG9y
IFJlbmRlckxheWVyLgorICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IEJ1aWx0SW5TaW1wbGVQ
REZWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmll
dzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3Jv
bGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgIC8vIEZJWE1F
OiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJsaXQgcGFydHMgdGhhdCBy
ZW1haW4gdmlzaWJsZS4KKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAw
LCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Cit9CisKK2lu
dCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9s
bGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJl
Y3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9j
YXRpb24oKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigp
KTsKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKK30KKwordm9pZCBC
dWlsdEluU2ltcGxlUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Cit9CisK
K2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
CitJbnRQb2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9m
ZnNldC5oZWlnaHQoKSk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsK
K30KKworSW50UG9pbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6Om1heGltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGlj
YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCkgOiAwOworCisgICAgSW50UG9pbnQgbWF4aW11bU9mZnNldChtX3BkZkRvY3VtZW50
U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAr
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgIG1heGltdW1PZmZzZXQuY2xhbXBOZWdh
dGl2ZVRvWmVybygpOworICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OworfQorCitpbnQgQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bs
dWdpblNpemUuaGVpZ2h0KCk7Cit9CisKK2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6dmlzaWJs
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7Cit9CisK
K0ludFNpemUgQnVpbHRJblNpbXBsZVBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZW
aWV3OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOworfQorCit2b2lkIEJ1
aWx0SW5TaW1wbGVQREZWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNl
VXBkYXRlKQoreworICAgIGlmICghZm9yY2VVcGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHRoZSBQREYgd2FzIHNjcm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBh
bmQgc2Nyb2xsYmFycyBjaGFuZ2UgdG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBk
aXNwbGF5IHdoaXRlIHJlY3RhbmdsZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgorICAgIEludFBv
aW50IG5ld1Njcm9sbE9mZnNldCA9IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyht
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9m
ZnNldCk7CisKKyAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Ny
b2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0ZVNj
cm9sbGJhcnMoKTsKKworICAgIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKK30K
KworSW50UG9pbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygp
LT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVy
ZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlv
bigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKworICAgIHJldHVybiBwb2ludDsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNpbXBsZVBE
RlZpZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBCdWlsdEluU2ltcGxlUERGVmll
dzo6c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblNpbXBsZVBERlZpZXcqIHBkZlZpZXcg
PSBzdGF0aWNfY2FzdDxCdWlsdEluU2ltcGxlUERGVmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShv
YmplY3QpKTsKKyAgICBwZGZWaWV3LT5yZWYoKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NG
aW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblNpbXBsZVBERlZpZXcq
IHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluU2ltcGxlUERGVmlldyo+KEpTT2JqZWN0R2V0
UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVlUmVm
IEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIEJ1aWx0SW5TaW1wbGVQREZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8
QnVpbHRJblNpbXBsZVBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
CisgICAgV2ViRnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgUGFnZSogcGFn
ZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29y
ZUZyYW1lKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCitK
U09iamVjdFJlZiBCdWlsdEluU2ltcGxlUERGVmlldzo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJl
ZiBjdHgpCit7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRp
b24ganNQREZEb2NDbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsCisgICAgICAgIGtKU0Ns
YXNzQXR0cmlidXRlTm9uZSwKKyAgICAgICAgIkRvYyIsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAorICAgICAgICBqc1BERkRvY0luaXRp
YWxpemUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9
OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUo
JmpzUERGRG9jQ2xhc3NEZWZpbml0aW9uKTsKKworICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4
LCBqc1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggZDE5N2E2Ny4uNDU3
YTU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaApAQCAt
MTg4LDYgKzE4OCwxNSBAQCBwdWJsaWM6CiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFu
ZGxlIHRoZSBwYXNzZWQgaW4ga2V5Ym9hcmQgZXZlbnQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1
cm4gdHJ1ZSBpZiBpdCBwcm9jZXNzZWQgdGhlIGV2ZW50LgogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSA9IDA7CiAgICAgCisgICAg
Ly8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4gZWRpdGluZyBjb21t
YW5kLiBUaGUgcGx1Zy1pbiBzaG91bGQgcmV0dXJuIHRydWUgaWYgaXQgZXhlY3V0ZWQgdGhlIGNv
bW1hbmQuCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpID0gMDsKKyAgICAKKyAgICAv
LyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIHRoZSBn
aXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRF
bmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpID0gMDsKKyAgICAKKyAgICAvLyBBc2sg
dGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0byBvdmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgPSAwOwor
ICAgIAogICAgIC8vIFRlbGxzIHRoZSBwbHVnLWluIGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKaW5kZXggMGY0ZmQ3MC4uNDEzZTE4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkuY3BwCkBAIC00MDMsNiArNDAzLDMzIEBAIHZvaWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJv
b2wgaGFzRm9jdXMpCiAgICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U2V0Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbklu
c3RhbmNlSUQpOwogfQogCitib29sIFBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9s
bGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5kOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBoYW5k
bGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNl
OworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OklzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmRO
YW1lKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQ6OlJlcGx5KGlzRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNFbmFibGVkOworfQorICAgIAorYm9vbCBQ
bHVnaW5Qcm94eTo6c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkKK3sKKyAgICBib29s
IGlzRW5hYmxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNob3VsZFVzZUZ1bGxQ
YWdlUGx1Z2luU2NhbGluZygpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTaG91
bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmc6OlJlcGx5KGlzRW5hYmxlZCksIG1fcGx1Z2luSW5z
dGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNFbmFi
bGVkOworfQorCiBOUE9iamVjdCogUGx1Z2luUHJveHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCgpCiB7CiAgICAgLy8gU2VuZGluZyB0aGUgc3luY2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNh
dXNlIHVzIHRvIGRpc3BhdGNoIGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5oCmluZGV4IDdhMzZjMWEuLmYzZjc1ZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCkBAIC0xMDEsNiArMTAx
LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
Ym9vbCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQ
bHVnaW5TY2FsaW5nKCk7CisgICAgCiAgICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0KCk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCB3aW5k
b3dGb2N1c0NoYW5nZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYTFlODEyNi4uMTczYmJjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjcxLDYg
KzI3MSw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxl
bWVudD4gcGx1Z2luRWxlbWVudCwgUGFzc1JlZlB0cjxQCiAjZW5kaWYKICAgICAsIG1fbWFudWFs
U3RyZWFtU3RhdGUoU3RyZWFtU3RhdGVJbml0aWFsKQogICAgICwgbV9wbHVnaW5TbmFwc2hvdFRp
bWVyKHRoaXMsICZQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQsIHBsdWdpblNu
YXBzaG90VGltZXJEZWxheSkKKyAgICAsIG1fZnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3RvcigxKQog
ewogICAgIG1fd2ViUGFnZS0+YWRkUGx1Z2luVmlldyh0aGlzKTsKIH0KQEAgLTQyNyw2ICs0Mjgs
MTggQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQogICAgIHZp
ZXdHZW9tZXRyeURpZENoYW5nZSgpOwogfQogCit2b2lkIFBsdWdpblZpZXc6OnNldEZ1bGxQYWdl
UGx1Z2luU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yLCBJbnRQb2ludCkKK3sKKyAgICBt
X2Z1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKKyAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNj
YWxlRmFjdG9yKSk7CisgICAgcGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCk7Cit9CisKK2RvdWJs
ZSBQbHVnaW5WaWV3OjpmdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4g
bV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBh
Z2VEZXN0cm95ZWQoKQogewogICAgIG1fd2ViUGFnZSA9IDA7CkBAIC03NjAsNiArNzczLDE2IEBA
IHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmIChkaWRI
YW5kbGVFdmVudCkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CisgICAg
Citib29sIFBsdWdpblZpZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgcmV0dXJuIG1fcGx1Z2lu
LT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworfQorICAgIAor
Ym9vbCBQbHVnaW5WaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lKQoreworICAgIHJldHVybiBtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQoY29tbWFuZE5hbWUpOworfQogCiB2b2lkIFBsdWdpblZpZXc6Om5vdGlmeVdpZGdldChXaWRn
ZXROb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMTNlMGE5Ny4uMjkxZTQxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC03OSwx
MCArNzksMTcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkg
c2hvdWxkIGhhdmUgdG8ga25vdyBhYm91dCB0aGUgcGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhj
ZXB0IHRoZSBwbHVnLWluIHZpZXcgaXRzZWxmLgogICAgIFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlcigpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0RnVsbFBhZ2VQbHVn
aW5TY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3IsIFdlYkNvcmU6OkludFBvaW50IG9yaWdp
bik7CisgICAgZG91YmxlIGZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKTsKKyAgICBib29sIHNo
b3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygpIHsgcmV0dXJuIG1fcGx1Z2luLT5zaG91bGRV
c2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKTsgfQogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JE
aWRDaGFuZ2UoKTsKICAgICB2b2lkIHdlYlBhZ2VEZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2lu
VmlldyhQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiwgUGFzc1JlZlB0cjxQ
bHVnaW4+LCBjb25zdCBQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOwogICAgIHZpcnR1
YWwgflBsdWdpblZpZXcoKTsKQEAgLTIzNiw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fdHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdDsKICAgICAvLyBU
aGlzIHRpbWVyIGlzIHVzZWQgd2hlbiBwbHVnaW4gc25hcHNob3R0aW5nIGlzIGVuYWJsZWQsIHRv
IGNhcHR1cmUgYSBwbHVnaW4gcGxhY2Vob2xkZXIuCiAgICAgV2ViQ29yZTo6RGVmZXJyYWJsZU9u
ZVNob3RUaW1lcjxQbHVnaW5WaWV3PiBtX3BsdWdpblNuYXBzaG90VGltZXI7CisKKyAgICBkb3Vi
bGUgbV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDZkYTI0MjUuLmMyOTQ2
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xMTQ2LDEwICsxMTQ2
LDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAgICAg
Ly8gSW5mb3JtIHRoZSBVSSBwcm9jZXNzIG9mIHRoZSBzY2FsZSBmYWN0b3IuCiAgICAgZG91Ymxl
IHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCkt
PmN1cnJlbnRJdGVtKCktPnBhZ2VTY2FsZUZhY3RvcigpOwogCi0gICAgLy8gQSBzY2FsZSBmYWN0
b3Igb2YgMC4wIG1lYW5zIHRoZSBoaXN0b3J5IGl0ZW0gYWN0dWFsbHkgaGFzIHRoZSAiZGVmYXVs
dCBzY2FsZSBmYWN0b3IiIG9mIDEuMC4KLSAgICBpZiAoIXNjYWxlRmFjdG9yKQotICAgICAgICBz
Y2FsZUZhY3RvciA9IDEuMDsKLSAgICBtX2ZyYW1lLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNjYWxlRmFjdG9yKSk7CisgICAg
Ly8gQSBzY2FsZSBmYWN0b3Igb2YgMCBtZWFucyB0aGUgaGlzdG9yeSBpdGVtIGhhcyB0aGUgZGVm
YXVsdCBzY2FsZSBmYWN0b3IsIHRodXMgd2UgZG8gbm90IG5lZWQgdG8gdXBkYXRlIGl0LgorICAg
IGlmIChzY2FsZUZhY3RvcikKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZShzY2FsZUZhY3RvcikpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuIFdlYkNvcmUgc2hv
dWxkIGJlIGNvcnJlY3RseSBpbnZhbGlkYXRpbmcKICAgICAvLyB0aGUgdmlldyBvbiByZXN0b3Jl
cyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCkBAIC0xMjE2LDcgKzEyMTUsNyBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJh
bWUoQ2FjaGVkRnJhbWUqKQogICAgIGJvb2wgaXNNYWluRnJhbWUgPSB3ZWJQYWdlLT5tYWluV2Vi
RnJhbWUoKSA9PSBtX2ZyYW1lOwogICAgIAogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXNwb25zZSgpOwotICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFp
bkZyYW1lICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0
aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRh
dGlvbiA9IGlzTWFpbkZyYW1lICYmIHdlYlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0
aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9
IHRydWU7CiB9CiAKQEAgLTEyMzAsNyArMTIyOSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogICAgIEludFJlY3QgY3VycmVu
dFZpc2libGVDb250ZW50Qm91bmRzID0gbV9mcmFtZS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKTsK
IAogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlID0gbV9mcmFtZS0+Y29yZUZy
YW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpOwotICAgIG1fZnJh
bWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2Up
OworICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIHdl
YlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2Up
OwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9IGZhbHNlOwogCiAgICAgbV9mcmFtZS0+
Y29yZUZyYW1lKCktPmNyZWF0ZVZpZXcod2ViUGFnZS0+c2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3Is
IC8qIHRyYW5zcGFyZW50ICovIGZhbHNlLCBJbnRTaXplKCksIHNob3VsZFVzZUZpeGVkTGF5b3V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRl
eCBlMjZlYjg4Li45MWQ5ODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCkBAIC0xMDcsNiArMTA3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRWYWx1ZS5oPgpA
QCAtMTUwLDcgKzE1MSwxMCBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVk
ZSAiQnVpbHRJblBERlZpZXcuaCIKKyNpbmNsdWRlICJCdWlsdEluU2ltcGxlUERGVmlldy5oIgor
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2luY2x1ZGUgIkJ1aWx0SW5QREZLaXRWaWV3Lmgi
CisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0yMTgsNiArMjIyLDcgQEAg
V2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX2FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxp
emF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoZmFsc2UpCiAgICAgLCBtX2FydGlmaWNpYWxQbHVn
aW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fcGRmS2l0UGx1Z2luRW5hYmxl
ZChmYWxzZSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxz
ZSkKICAgICAsIG1faXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCkKQEAgLTQ2Niw4ICs0NzEsMTMgQEAgUGFzc1JlZlB0cjxQbHVn
aW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVt
ZW50KiBwbHUKICAgICBpZiAocGx1Z2luUGF0aC5pc051bGwoKSkgewogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgaWYgKHBhcmFtZXRlcnMubWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIK
LSAgICAgICAgICAgIHx8IChwYXJhbWV0ZXJzLm1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwYXJhbWV0
ZXJzLnVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKLSAgICAgICAgICAgIHJl
dHVybiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKGZyYW1lKTsKKyAgICAgICAgICAgIHx8IChwYXJh
bWV0ZXJzLm1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLnVybC5wYXRoKCkubG93ZXIo
KS5lbmRzV2l0aCgiLnBkZiIpKSkgeworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorICAgICAg
ICAgICAgaWYgKHBkZktpdFBsdWdpbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
QnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiBCdWlsdEluU2ltcGxlUERGVmlldzo6Y3JlYXRlKGZyYW1lKTsKKyAgICAgICAgfQogI2Vs
c2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKICNlbmRpZgpAQCAtNjE4LDExICs2Mjgs
MzAgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViUGFnZTo6dHJhY2tlZFJlcGFpbnRS
ZWN0cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0b3IpOwogfQogCitz
dGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBQ
bHVnaW5Eb2N1bWVudCogcGx1Z2luRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVu
dCo+KGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkp
OworICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kwogdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47CisKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0g
cGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykgewor
ICAgICAgICBwbHVnaW5WaWV3LT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJn
dW1lbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZChjb21tYW5kTmFtZSkuZXhlY3V0ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMiw2
ICs2NjEsMTEgQEAgYm9vbCBXZWJQYWdlOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1l
KGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsKKyAgICAKICAgICBF
ZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5k
TmFtZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5h
YmxlZCgpOwogfQpAQCAtMTA3MSw4ICsxMTA1LDE0IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2Ny
ZWVuRGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJRCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBh
Z2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogeworICAgIFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7
CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVn
aW5TY2FsaW5nKCkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+c2V0RnVsbFBhZ2VQbHVnaW5TY2Fs
ZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAg
IGZvciAoSGFzaFNldDxQbHVnaW5WaWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5W
aWV3cy5iZWdpbigpLCBlbmQgPSBtX3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgICgqaXQpLT5wYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2
ICsxMTIxLDEwIEBAIHZvaWQgV2ViUGFnZTo6c2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3Qg
SW50UG9pbnQmIG9yaWdpbikKIAogZG91YmxlIFdlYlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNv
bnN0CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSht
X3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5z
aG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXctPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKTsKKyAgICAKICAgICByZXR1cm4gbV9wYWdl
LT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTUzMSw5ICsxNTc1LDE1IEBAIHZvaWQgV2Vi
UGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAgICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRl
KCk7Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5k
LmlzRW5hYmxlZCgpOworICAgICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmll
d0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwbHVnaW5WaWV3KQorICAg
ICAgICAgICAgaXNFbmFibGVkID0gcGx1Z2luVmlldy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
Y29tbWFuZE5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFu
ZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKKyAgICAg
ICAgICAgIHN0YXRlID0gY29tbWFuZC5zdGF0ZSgpOworICAgICAgICAgICAgaXNFbmFibGVkID0g
Y29tbWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZhbGlkYXRlQ29tbWFu
ZENhbGxiYWNrKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlLCBjYWxsYmFja0lEKSk7CkBA
IC0yMDUxLDYgKzIxMDEsOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIG1fYXJ0aWZpY2lhbFBsdWdpbkluaXRp
YWxpemF0aW9uRGVsYXlFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZl
cmVuY2VzS2V5OjphcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWRLZXko
KSk7CiAKICAgICBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWRLZXkoKSk7CisgICAgCisgICAgbV9wZGZLaXRQbHVnaW5FbmFibGVkID0g
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwZGZLaXRQbHVnaW5F
bmFibGVkS2V5KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBm
cm9tIG1hY3JvIGV4cGFuc2lvbiBmb3IgYWxsIHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBj
dXJyZW50bHkgZG9uJ3QgbWF0Y2ggdGhlIG5hbWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2Ug
YXJlCkBAIC0zMzkxLDQgKzM0NDMsMjQgQEAgdm9pZCBXZWJQYWdlOjpzZXRTY3JvbGxpbmdQZXJm
b3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBmcmFtZVZpZXctPnNldFNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3N0YXRpYyBi
b29sIGNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIFN0cmluZyBwbHVnaW5QYXRoOworICAgIGJvb2wgYmxvY2tlZDsKKyAgICAK
KyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgp
LCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dFBsdWdpblBhdGg6OlJlcGx5KHBsdWdpblBhdGgsIGJsb2NrZWQpLCAwKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0Vt
cHR5KCk7Cit9CisKK2Jvb2wgV2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25G
b3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNw
b25zZS5taW1lVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgYSBw
bHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNo
b3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgorICAg
IHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IDRkOTUyNDYuLmI1MjM3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTEzLDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFByaW50Q29udGV4dDsKICAgICBjbGFzcyBS
YW5nZTsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFJlc291cmNlUmVx
dWVzdDsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKQEAgLTU4MSw2ICs1ODIsOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgbmF0aXZlV2luZG93
SGFuZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KICNlbmRpZgogCisgICAg
Ym9vbCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsKKwogICAgIGJvb2wgYXN5bmNocm9ub3VzUGx1
Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY2hyb25vdXNQ
bHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1Bs
dWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hc3luY2hyb25vdXNQ
bHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgYm9vbCBhc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKCkgY29uc3QgeyBy
ZXR1cm4gbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVn
aW5zOyB9CkBAIC01OTIsNiArNTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZChib29sKTsKKyAgICAKKyAgICBib29sIHBkZktpdFBsdWdpbkVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BkZktpdFBsdWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lkIHNl
dFBERktpdFBsdWdpbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGRmS2l0UGx1Z2luRW5hYmxl
ZCA9IGVuYWJsZWQ7IH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgSGFzaFNldDxT
dHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworI2Vu
ZGlmCiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKQEAgLTc5NCw2ICs4MDQsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQ7CiAKICAg
ICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsKKyAgICAKKyAgICBi
b29sIG1fcGRmS2l0UGx1Z2luRW5hYmxlZDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBX
aGV0aGVyIHRoZSBjb250YWluaW5nIHdpbmRvdyBpcyB2aXNpYmxlIG9yIG5vdC4KQEAgLTkyMyw2
ICs5MzUsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92
aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICBXZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVj
dG9yQ2xpZW50OworCisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1l
VHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KaW5kZXggMjIyNzNjMS4uOWQzYmFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQg
QEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IHRoaXMtPmluc3BlY3RvcigpKQogICAgICAgICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVz
ZXNXZWJLaXRVc2VySW50ZXJmYWNlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6aW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAg
Qk9PTCBvbWl0UERGU3VwcG9ydCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOworICAgIGlmICghcGRmS2l0
UGx1Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3VwcG9ydCkgeworICAgICAgICAvLyBXZSB3YW50
IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4K
KyAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzID0gcGRm
QW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBD
YXNlRm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9IG1pbWVUeXBlcy5iZWdpbigpOyBpdCAhPSBt
aW1lVHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21S
ZXByZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAgfQogfQogCiB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKQEAgLTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBX
ZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZEb2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4
dCwgUERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUg
aWRlYWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24uIChhbmQgbm93IGl0J3MgZHVwbGljYXRlZCBo
ZXJlIGFuZCBpbiBXZWJDb250ZXh0TWFjKQorSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFz
aD4gV2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpCit7CisgICAgSGFzaFNldDxT
dHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzOworICAgIAorICAgIG1pbWVUeXBlcy5h
ZGQoImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bv
c3RzY3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRkKCJ0ZXh0L3BkZiIpOworICAgIAorICAgIHJl
dHVybiBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggOThjOTMwMi4uNmY2N2VkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAg
dm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAgIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXBy
ZXNlbnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVw
cmVzZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRh
dGlvbltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4
dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVl
KTsKIApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQ
b3J0Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGJvb2wg
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Ci17Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0gICAgYm9vbCBibG9ja2VkOwotCi0gICAgaWYg
KCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Q
YXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0K
LWJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
bWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1l
VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgYSBwbHVnLWluIGV4
aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtl
IHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgotICAgIHJldHVybiAh
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6
OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVz
VG9DbGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMocmVzb3VyY2VDYWNo
ZXNUb0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNzNm
MDc5Ni4uZWNjYmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAg
LTE1MCwxNCArMTUwLDEyIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgcGlkX3Qg
cHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsgfQot
I2VuZGlmIAorI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0d29ya0FjY2Vz
c01hbmFnZXI7IH0KICNlbmRpZgogCi0gICAgYm9vbCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsK
LQogICAgIC8vIFRleHQgQ2hlY2tpbmcKICAgICBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0
Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q2hlY2tlclN0YXRlOyB9CiAKQEAg
LTMyMCw4ICszMTgsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gPiBtX21lc3NhZ2VQb3J0Q2hhbm5l
bHM7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fbWlt
ZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsKLQogICAgIFRleHRDaGVja2VyU3RhdGUg
bV90ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0
aW9uTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCg==
</data>
<flag name="review"
          id="181491"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168567</attachid>
            <date>2012-10-13 15:46:09 -0700</date>
            <delta_ts>2012-10-13 15:48:33 -0700</delta_ts>
            <desc>patch with most of dan&apos;s comments</desc>
            <filename>pdf.diff</filename>
            <type>text/plain</type>
            <size>192871</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li4yN2U2YTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMTAtMTIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHBsdWctaW4gdGhhdCB1c2Vz
IFBERktpdCB0byBkaXNwbGF5IFBERnMsIGluc3RlYWQgb2YgdXNpbmcgUERGS2l0IGluIHRoZQor
ICAgICAgICBVSVByb2Nlc3MgZm9yIGZ1bGwtcGFnZSBQREZzLiBUaGlzIG5ldyBwbHVnaW4gd2ls
bCBhbHNvIGJlIHVzZWQgZm9yIGlubGluZSBQREZzCisgICAgICAgIGluIHBsYWNlIG9mIEJ1aWx0
SW5TaW1wbGVQREZWaWV3IChuw6llIEJ1aWx0SW5QREZWaWV3KS4KKworICAgICAgICAqIFdlYkNv
cmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgRXhwb3J0IGEgZmV3IG1vcmUgbWV0aG9kcyB0byBXZWJLaXQoMikuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICBNYWtlIGludmFsaWRhdGVT
Y3JvbGxiYXIvaW52YWxpZGF0ZVNjcm9sbENvcm5lciB2aXJ0dWFsLgorCiAyMDEyLTEwLTExICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCB3aWxsIG5ldmVyIHJlc3RvcmUgdGhlIGN1cnJlbnQgY29udGV4
dCB0byBudWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGZkMmNkNzcuLjlhNmM3MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCkBAIC0yODUsMTEgKzI4NSwxNCBAQCBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTVjb250ZW50c1Jlc2l6ZWRFdgogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTE3d2lsbEVuZExpdmVSZXNpemVFdgogX19aTjdXZWJDb3JlMTRT
Y3JvbGxhYmxlQXJlYTE5d2lsbFN0YXJ0TGl2ZVJlc2l6ZUV2CitfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTlpbnZhbGlkYXRlU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRVJLTlNfN0ludFJl
Y3RFCitfX1pOSzdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIxbW91c2VFbnRlcmVkU2Nyb2xsYmFy
RVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIyaW52YWxpZGF0
ZVNjcm9sbENvcm5lckVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTIzZGlkQWRkVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMjRzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGVFTlNfMjFTY3JvbGxiYXJP
dmVybGF5U3R5bGVFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjVkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJl
YTI3d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQorX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTI3bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRVJLTlNfOElu
dFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI4c2V0U2Nyb2xsT2Zmc2V0RnJv
bUludGVybmFsc0VSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEy
OXdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTZzY3JvbGxFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3Jv
bGxHcmFudWxhcml0eUVmCkBAIC0zMjEsNiArMzI0LDggQEAgX19aTjdXZWJDb3JlMTRlbmRPZlBh
cmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmcKIF9fWk43V2ViQ29yZTE0c2V0TWV0YWRhdGFVUkxFUk4zV1RGNlN0cmluZ0VSS1MxX1M0Xwog
X19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm01ZmxpcFlFdgogX19aTjdXZWJDb3JlMTVBZmZp
bmVUcmFuc2Zvcm01c2NhbGVFZAorX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtNnhTY2Fs
ZUV2CitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eVNjYWxlRXYKIF9fWk43V2ViQ29y
ZTE1QWZmaW5lVHJhbnNmb3JtOG11bHRpcGx5RVJLUzBfCiBfX1pON1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybTl0cmFuc2xhdGVFZGQKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtQzFFZGRk
ZGRkCkBAIC0zNTEsNiArMzU2LDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMWNs
ZWFyU2hhZG93RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJzZXRGaWxsQ29sb3JF
UktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQxNXNldEZpbGxHcmFkaWVudEVOM1dURjEwUGFzc1JlZlB0cklOU184R3JhZGllbnRFRUUKIF9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MThzZXRTaG91bGRBbnRpYWxpYXNFYgorX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOXNldElzQ0FMYXllckNvbnRleHRFYgogX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQyMGVuZFRyYW5zcGFyZW5jeUxheWVyRXYKIF9fWk43V2ViQ29y
ZTE1R3JhcGhpY3NDb250ZXh0MjBzZXRTaG91bGRTbW9vdGhGb250c0ViCiBfX1pON1dlYkNvcmUx
NUdyYXBoaWNzQ29udGV4dDIxc2V0Q29tcG9zaXRlT3BlcmF0aW9uRU5TXzE3Q29tcG9zaXRlT3Bl
cmF0b3JFCkBAIC00NjcsNiArNDczLDggQEAgX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9yYXJ5Rmls
ZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTd1c2VyVmlzaWJsZVN0cmluZ0VQNU5T
VVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBOU181RnJhbWVFUE5TXzE1
RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThIVE1MQ29udGVudEVsZW1lbnQ2Y3JlYXRl
RVBOU184RG9jdW1lbnRFCitfX1pON1dlYkNvcmUxMFBhc3RlYm9hcmQxN2dlbmVyYWxQYXN0ZWJv
YXJkRXYKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE0d3JpdGVQbGFpblRleHRFUktOM1dURjZT
dHJpbmdFTlMwXzE4U21hcnRSZXBsYWNlT3B0aW9uRQogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBh
c3RlYm9hcmQxMHVuaXF1ZU5hbWVFdgogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3RlYm9hcmQx
M2J1ZmZlckZvclR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFz
dGVib2FyZDEzc3RyaW5nRm9yVHlwZUVSS04zV1RGNlN0cmluZ0UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YThhOTc2Li45ZTJh
NDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCQk0QUQwMTczRDEyN0U4Mjg2MDAxNTAzNUYg
LyogSlNIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEFEMDE3M0IxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVs
ZW1lbnQuaCAqLzsgfTsKIAkJNEFGMUFEM0UxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QUYxQUQzQzEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNw
cCAqLzsgfTsKIAkJNEFGMUFEM0YxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0Y2hNZWRp
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFG
MUFEM0QxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTRCMjcwOEM3MEFGMTlF
RTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5o
ICovOyB9OworCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA4QzUwQUYxOUVF
NDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0QjI3MDk4MzBBRjJFNUUwMDA2NTEyN0YgLyogUGFzdGVib2Fy
ZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRC
MjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tICovOyB9OwogCQk0QjMw
NDNDNzBBRTAzNzAzMDBBODI2NDcgLyogU291bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M2MEFFMDM3MDMwMEE4MjY0NyAvKiBTb3VuZC5o
ICovOyB9OwogCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjMwNDNDODBBRTAzNzFE
MDBBODI2NDcgLyogU291bmRNYWMubW0gKi87IH07CkBAIC0yMjI3Nyw2ICsyMjI3Nyw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFz
dGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUyQUZCIC8q
IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QkM2
OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjQ1NzUsNyArMjQ1NzYsNiBAQAogCQkJCUZEMzE2MEEzMTJCMDI2RjcwMEMx
QTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzZBQzEzMEREN0FENUMwMDQx
NUYzNCAvKiBQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENBMTI1
MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUM1OTg5MDU3MTRFOUMyODAwMEU4RDE4QiAvKiBQYXN0ZWJvYXJkU3RyYXRlZ3kuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyNzUzNTgwMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODhERDQ4NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0
YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCmluZGV4IGM3NDRhZjYuLjkzMGNkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaApAQCAtMTA2LDEwICsxMDYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9z
aXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
cihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9v
bCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bENvcm5lcihjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhW
ZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KIAogICAgIC8vIENvbnZlcnQgcG9pbnRzIGFuZCBy
ZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWluaW5nIHZpZXcuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggNzE2NjM1YS4uOWY2YjM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MyBAQAor
MjAxMi0xMC0xMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAg
ICAgICBbd2syXSBJbXBsZW1lbnQgQnVpbHRJblBERktpdFZpZXcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjA2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgcGx1Zy1pbiB0aGF0IHVzZXMgUERG
S2l0IHRvIGRpc3BsYXkgUERGcywgaW5zdGVhZCBvZiB1c2luZyBQREZLaXQgaW4gdGhlCisgICAg
ICAgIFVJUHJvY2VzcyBmb3IgZnVsbC1wYWdlIFBERnMuIFRoaXMgbmV3IHBsdWdpbiB3aWxsIGFs
c28gYmUgdXNlZCBmb3IgaW5saW5lIFBERnMKKyAgICAgICAgaW4gcGxhY2Ugb2YgQnVpbHRJblNp
bXBsZVBERlZpZXcgKG7DqWUgQnVpbHRJblBERlZpZXcpLgorCisgICAgICAgICogQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWc6CisgICAgICAgIEFkZCBFTkFCTEVfUERGS0lU
X1BMVUdJTi4KKworICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0
aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Db250cm9sbGVy
UHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgICogUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaDoKKyAgICAgICAgKFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb3h5OjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aGFu
ZGxlRWRpdGluZ0NvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojppc0VkaXRp
bmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46Omhh
bmRsZUVkaXRpbmdDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46Omlz
RWRpdGluZ0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46
OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmg6CisgICAgICAgIFN1cHBvcnQgdGhyZWUg
bmV3IFBsdWdpbiBtZXRob2RzOgorICAgICAgICAgICAgLSBoYW5kbGVFZGl0aW5nQ29tbWFuZCwg
d2hpY2ggaGFuZHMgZWRpdGluZyBjb21tYW5kcyB0byB0aGUgUGx1Z2luCisgICAgICAgICAgICAt
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCB3aGljaCB2YWxpZGF0ZXMgZWRpdGluZyBjb21tYW5k
cyB2aWEgdGhlIFBsdWdpbgorICAgICAgICAgICAgLSBzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNj
YWxpbmcsIHdoaWNoIGFza3MgdGhlIHBsdWdpbiB3aGV0aGVyIGl0IHdhbnRzIHRvCisgICAgICAg
ICAgICBvcHQgaW50byBhIG1vZGUgd2hlcmUgdGhlIFdlYlBhZ2UgZG9lc24ndCBzY2FsZSBpbiB0
aGUgb3JkaW5hcnkgZmFzaGlvbiwgYnV0IGluc3RlYWQKKyAgICAgICAgICAgIHByb3hpZXMgdGhl
IFBsdWdpbidzIHNjYWxlIGZhY3Rvciwgc28gdGhlIGZ1bGwtcGFnZSBwbHVnaW4gY2FuIGhhbmRs
ZSB6b29taW5nCisgICAgICAgICAgICBob3dldmVyIGl0IG5lZWRzIHRvLgorCisgICAgICAgICog
U2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2lu
RW5hYmxlZCk6CisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAg
ICAgIEFkZCBQREZLaXRQbHVnaW5FbmFibGVkIHByZWZlcmVuY2UuIElmIGl0IGlzIG5vdCBlbmFi
bGVkLCBvciB0aGUgcGx1Z2luIGlzIG5vdCBidWlsdCwgYmVoYXZpb3Igd2lsbCBiZSB0aGUgc2Ft
ZSBhcworICAgICAgICBiZWZvcmUgKHRoZSBVSVByb2Nlc3MgUERGIHZpZXcgd2lsbCBoYW5kbGUg
ZnVsbC1wYWdlIFBERnMsIGFuZCBCdWlsdEluU2ltcGxlUERGVmlldyB3aWxsIGhhbmRsZSBpbmxp
bmUgb25lcykuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6Oldl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgIChXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzaG91
bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJv
Y2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01hYy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgIE1vdmUgc3VwcG9ydCBmb3IgTUlNRSB0eXBlcyB3aXRoIGN1c3RvbSByZXByZXNlbnRh
dGlvbnMgb250byBXZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJvY2Vzcy4KKyAgICAgICAgVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIHByZWZlcmVuY2VzIHRvIGNvbnRyb2wgdGhlIHVzZSBvZiBjdXN0b20g
cmVwcmVzZW50YXRpb25zIChmb3IgZXhhbXBsZSwKKyAgICAgICAgaXQgYWxsb3dzIHVzIHRvIGhh
dmUgYSBwcmVmZXJlbmNlIHRvIHRvZ2dsZSBiZXR3ZWVuIHRoZSBVSVByb2Nlc3MgUERGIHZpZXcg
YW5kIEJ1aWx0SW5QREZLaXRWaWV3KS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1w
b3J0cy5oOgorICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbToKKyAgICAgICAg
KFdlYktpdDo6cGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOgorICAgICAgICBBZGQgUERGTGF5ZXJD
b250cm9sbGVyIHRvIHRoZSBzZXQgb2YgY2xhc3NlcyByZXR1cm5lZCBieSBQREZLaXRJbXBvcnRz
LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnMpOgorICAgICAgICBBZGQg
QnVpbHRJblBERktpdFZpZXcgdG8gdGhlIHNldCBvZiBzdXBwb3J0ZWQgcGx1Z2lucy4KKworICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIEJ1
aWx0SW5QREZLaXRWaWV3LCByZW5hbWUgQnVpbHRJblBERlZpZXcgLT4gQnVpbHRJblNpbXBsZVBE
RlZpZXcuCisKKyAgICAgICAgKC1bUERGTGF5ZXJDb250cm9sbGVyICpdKToKKyAgICAgICAgRm9y
d2FyZC1kZWNsYXJlIFBERktpdCBPYmplY3RpdmUtQyBTUEkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZLaXRWaWV3Lmg6IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW06IEFkZGVkLgorICAgICAg
ICBNdWNoIG9mIHRoaXMgY29kZSBpcyBzaGFyZWQgd2l0aCBCdWlsdEluU2ltcGxlUERGVmlldy5t
bSwgYnV0IEkgZXhwZWN0IHRoZW0gdG8KKyAgICAgICAgZGl2ZXJnZSBmdXJ0aGVyIGFzIHRpbWUg
Z29lcyBvbi4gU3RpbGwsIGl0IG1pZ2h0IGJlIHdvcnRoIGl0IHRvIGluaGVyaXQgZnJvbQorICAg
ICAgICB0aGF0IGNsYXNzIG9yIHNoYXJlIGEgYmFzZSBjbGFzcy4KKworICAgICAgICAoLVtXS0J1
aWx0SW5QREZLaXRWaWV3U2Nyb2xsYmFyTGF5ZXIgaW5pdFdpdGhQREZWaWV3OldlYktpdDo6XSk6
CisgICAgICAgICgtW1dLQnVpbHRJblBERktpdFZpZXdTY3JvbGxiYXJMYXllciBhY3Rpb25Gb3JL
ZXk6XSk6CisgICAgICAgICgtW1dLQnVpbHRJblBERktpdFZpZXdTY3JvbGxiYXJMYXllciBkcmF3
SW5Db250ZXh0Ol0pOgorICAgICAgICBCdWlsdEluUERGS2l0VmlldyB1c2VzIGxheWVycyBmb3Ig
c2Nyb2xsYmFycy4KKworICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlICpd
KToKKyAgICAgICAgSW1wbGVtZW50IHRoZSBQREZMYXllckNvbnRyb2xsZXIgZGVsZWdhdGUsIGV2
ZW50dWFsbHkgZm9yd2FyZGluZyBjYWxscyBiYWNrIHRvIEJ1aWx0SW5QREZLaXRWaWV3LgorCisg
ICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpwYWludCk6CisgICAgICAgIEJ1aWx0
SW5QREZLaXRWaWV3IGlzIGxheWVyLWJhc2VkLCBzbyB3ZSBwYWludCBub3RoaW5nIGludG8gdGhl
IHRpbGVzLgorCisgICAgICAgIChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpzbmFwc2hvdCk6
CisgICAgICAgIFBlcmZvcm0gYSBwYWludCBpbnRvIGEgYml0bWFwIGNvbnRleHQgZm9yIHpvb21p
bmcgc25hcHNob3RzLgorCisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpldmVudFR5cGVGcm9tV2ViRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlTW91c2VFdmVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6QnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OkJ1aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6Cisg
ICAgICAgIE1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMgYXJlIGNvbnZlcnRlZCBiYWNrIGludG8g
TlNFdmVudHMsIGJ1dCB3aXRoCisgICAgICAgIGxvY2F0aW9uSW5XaW5kb3cgYWN0dWFsbHkgaW4g
dGVybXMgb2YgdGhlIEJ1aWx0SW5QREZLaXRWaWV3J3MgbGF5ZXIsIG5vdAorICAgICAgICB0aGUg
d2luZG93IChzaW5jZSB0aGVyZSBpcyBubyB3aW5kb3cpLgorCisgICAgICAgIChXZWJLaXQ6OkJ1
aWx0SW5QREZLaXRWaWV3OjpoYW5kbGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJLaXQ6
OkJ1aWx0SW5QREZLaXRWaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6CisgICAgICAgIEhh
bmRsZSBjb3B5IGFuZCBzZWxlY3QtYWxsIGNvbW1hbmRzLCBhbmQgZm9yd2FyZCB0aGVtIHRvIFBE
RktpdC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblNpbXBsZVBE
RlZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvQnVpbHRJblBERlZpZXcuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1
aWx0SW5TaW1wbGVQREZWaWV3Lm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnNo
b3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyk6CisgICAgICAgIFJlcG9ydCB3aGV0aGVyIG9y
IG5vdCB0aGUgUGx1Z2luIGJhY2tlZCBieSB0aGlzIFBsdWdpblZpZXcgd2FudHMgdG8gaGFuZGxl
IHNjYWxpbmcgaXRzZWxmLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpzZXRGdWxsUGFnZVBsdWdpblNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6ZnVsbFBhZ2VQbHVnaW5T
Y2FsZUZhY3Rvcik6CisgICAgICAgIElmIHNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyBp
cyB0cnVlLCBXZWJQYWdlIHVzZXMgdGhlc2UgdG8gZ2V0L3NldCBpdHMgc2NhbGUgZmFjdG9yLAor
ICAgICAgICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKToKKyAgICAg
ICAgRG9uJ3QgdXBkYXRlIFdlYlBhZ2VQcm94eSdzIG5vdGlvbiBvZiB0aGUgc2NhbGUgZmFjdG9y
IGlmIGl0IHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KKyAgICAgICAgVGhpcyBQYWdlU2NhbGVGYWN0
b3JEaWRDaGFuZ2UgcHJldmVudHMgb3RoZXIgY29kZSBmcm9tIHVzaW5nIG5vbi0xLjAgc2NhbGUg
ZmFjdG9ycyBhcyB0aGUgZGVmYXVsdC4KKworICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5l
d1BhZ2UpOgorICAgICAgICBNYWtlIHVzZSBvZiBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlv
bkZvclJlc3BvbnNlIG9uIFdlYlBhZ2UgaW5zdGVhZCBvZiBXZWJQcm9jZXNzLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKToK
KyAgICAgICAgQ3JlYXRlIGEgQnVpbHRJblBERktpdFZpZXcgaWYgYXBwcm9wcmlhdGUgKGlmIGl0
IGlzIGJ1aWx0IGFuZCB0aGUgc2V0dGluZyBpcyBlbmFibGVkKS4KKworICAgICAgICAoV2ViS2l0
OjpwbHVnaW5WaWV3Rm9yRnJhbWUpOgorICAgICAgICBSZXR1cm4gdGhlIFBsdWdpblZpZXcgYmFj
a2luZyB0aGUgZ2l2ZW4gZnJhbWUgKGlmIGFueTsgbnVsbCBvdGhlcndpc2UpLgorCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKToKKyAgICAgICAgSWYgdGhlIGZvY3VzZWQgb3IgbWFp
biBmcmFtZSBpcyBhIFBsdWdpbkRvY3VtZW50LCBmb3J3YXJkIGVkaXRpbmcgY29tbWFuZHMgdGhl
cmUuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2NhbGVQYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cGFnZVNjYWxlRmFjdG9yKToKKyAgICAgICAgSWYgdGhlIG1haW4gZnJh
bWUgaXMgYSBQbHVnaW5Eb2N1bWVudCB3aGljaCB3YW50cyB0byBwcm92aWRlIGl0cyBvd24gc2Nh
bGluZyBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgZm9yd2FyZCBzY2FsZVBhZ2UgYW5kIHBhZ2VT
Y2FsZUZhY3RvciB0by9mcm9tIHRoZSBQbHVnaW5WaWV3LCBpbnN0ZWFkIG9mIHVzaW5nIFdlYkNv
cmUncyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyk6CisgICAgICAgIFVwZGF0ZSBtX3BkZktpdFBsdWdpbkVuYWJsZWQuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpwZGZLaXRQbHVnaW5FbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2V0UERGS2l0UGx1Z2luRW5hYmxlZCk6CisKIDIwMTItMTAtMTEgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIGRlcHJlY2F0ZWRTZW5k
IGZvciBXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnIGIv
U291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKaW5k
ZXggY2U0MWQzMC4uM2Y0MGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJh
dGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdDIvQ29uZmln
dXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTExNiw2ICsxMTYsMTEgQEAgRU5B
QkxFX05PVElGSUNBVElPTlNfbWFjb3N4XzEwNzAgPSA7CiBFTkFCTEVfTk9USUZJQ0FUSU9OU19t
YWNvc3hfMTA4MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxFX05PVElGSUNBVElPTlNf
bWFjb3N4XzEwOTAgPSBFTkFCTEVfTk9USUZJQ0FUSU9OUzsKIEVOQUJMRV9QQUdFX1ZJU0lCSUxJ
VFlfQVBJID0gOworRU5BQkxFX1BERktJVF9QTFVHSU4gPSAkKEVOQUJMRV9QREZLSVRfUExVR0lO
XyQoUkVBTF9QTEFURk9STV9OQU1FKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3ggPSAk
KEVOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8kKFRBUkdFVF9NQUNfT1NfWF9WRVJTSU9OX01B
Sk9SKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA3MCA9IDsKK0VOQUJMRV9QREZL
SVRfUExVR0lOX21hY29zeF8xMDgwID0gOworRU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XzEw
OTAgPSBFTkFCTEVfUERGS0lUX1BMVUdJTjsKIEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UID0gRU5B
QkxFX1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBFTkFCTEVfUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUU7CkBAIC0xNDMs
NCArMTQ4LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBFTkFCTEVfV09SS0VSUyA9IEVO
QUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJ
TkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxFX0NIQU5O
RUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9ERUNPUkFU
SU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NPTVBPU0lU
SU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVTKSAkKEVO
QUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNPTFVUSU9O
KSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5BQkxFX0NT
U19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxFX0NTUzNf
VEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQoRU5BQkxF
X0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVOQUJMRV9E
QVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5BQkxFX0RF
VklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxFX0RJUkVD
VE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVO
QUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VPTE9DQVRJ
T04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVOQUJMRV9I
SUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZSQU1FX1NF
QU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9TUEVFQ0gp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURSkgJChF
TkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRUxP
Q0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1RJTUUp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikg
JChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9OT1RJ
RklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FDWV9XRUJf
QVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVOREVSKSAk
KEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVESUFfU1RB
VElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQoRU5BQkxF
X01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9OQVZJR0FU
T1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVfUEFHRV9W
SVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEp
ICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVF
Q0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJM
RV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVO
QUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVf
VEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFC
TEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJ
REVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9B
VURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxF
X1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOworRkVBVFVS
RV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0IpICQoRU5BQkxF
X0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVfQ1NTX0JPWF9E
RUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFCTEVfQ1NTX0NP
TVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJRVJBUkNISUVT
KSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19JTUFHRV9SRVNP
TFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURFUlMpICQoRU5B
QkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMpICQoRU5BQkxF
X0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIpICQo
RU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UKSAkKEVO
QUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1FTlQpICQoRU5B
QkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQpICQoRU5BQkxF
X0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJMRV9GSUxURVJT
KSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChFTkFCTEVfR0VP
TE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKSAkKEVO
QUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSUZS
QU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJMRV9JTlBVVF9T
UEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRF
VElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJV
R0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5BQkxFX0xFR0FD
WV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJTktfUFJFUkVO
REVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChFTkFCTEVfTUVE
SUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVfTUhUTUwpICQo
RU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAkKEVOQUJMRV9O
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykgJChFTkFCTEVf
UEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJTikgJChFTkFCTEVfUFJP
R1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQo
RU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NU
WUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1Mp
ICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9U
RVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVO
QUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykg
JChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMp
ICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dP
UktFUlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDMxYTVkNjEuLjBjNjE3ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxl
clByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAKQEAgLTUyMSw2ICs1MjEsMjEgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVy
UHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9h
cmQKICAgICBoYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9hcmRF
dmVudCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBi
b29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+aGFuZGxlRWRpdGluZ0Nv
bW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKK30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJv
bGxlclByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBib29sJiBlbmFibGVkKQoreworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+aXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQorICAgIAordm9pZCBQbHVnaW5Db250cm9s
bGVyUHJveHk6OnNob3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZyhib29sJiBlbmFibGVkKQor
eworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5n
KCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVudGlyZVBsdWdpbigp
CiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAppbmRleCBiNGE0MDY3
Li4zMzIxNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1
Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmLCBib29sJiBoYW5k
bGVkKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiwgYm9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhhbmRsZUVkaXRpbmdD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQs
IGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBzaG91bGRVc2VG
dWxsUGFnZVBsdWdpblNjYWxpbmcoYm9vbCYgZW5hYmxlZCk7CiAgICAgdm9pZCBwYWludEVudGly
ZVBsdWdpbigpOwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJh
Y2tpbmdTdG9yZUhhbmRsZSk7CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggZDdjMmQwMi4uOTQ4ZWI5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
bWVzc2FnZXMuaW4KQEAgLTczLDYgKzczLDE1IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSB7CiAKICAgICAjIFNlbnQgd2hlbiBhIGtleWJvYXJkIHNob3VsZCBiZSBwcm9jZXNz
ZWQuCiAgICAgSGFuZGxlS2V5Ym9hcmRFdmVudChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQga2V5
Ym9hcmRFdmVudCkgLT4gKGJvb2wgaGFuZGxlZCkKKyAgICAKKyAgICAjIFNlbnQgd2hlbiBhbiBl
ZGl0aW5nIGNvbW1hbmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICBIYW5kbGVFZGl0aW5nQ29t
bWFuZChXVEY6OlN0cmluZyBjb21tYW5kTmFtZSwgV1RGOjpTdHJpbmcgYXJndW1lbnQpIC0+IChi
b29sIGhhbmRsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2lu
IHdhbnRzIHRvIGVuYWJsZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgIElzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVk
KTsKKyAgICAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBv
dmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICBTaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxp
bmcoKSAtPiAoYm9vbCBlbmFibGVkKTsKIAogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZv
Y3VzIGNoYW5nZXMuCiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAppbmRleCAxZTNjYTYzLi5hMTA3ZjllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTEzNyw2
ICsxMzcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhTY3JlZW5Gb250U3Vic3Rp
dHV0aW9uRW5hYmxlZCwgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQsIEJvb2wsIGJvb2ws
IERFRkFVTFRfU0NSRUVOX0ZPTlRfU1VCU1RJVFVUSU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhD
b29raWVFbmFibGVkLCBjb29raWVFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFj
cm8oUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgcGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwg
Qm9vbCwgYm9vbCwgZmFsc2UpIFwKKyAgICBtYWNybyhQREZLaXRQbHVnaW5FbmFibGVkLCBwZGZL
aXRQbHVnaW5FbmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBG
T1JfRUFDSF9XRUJLSVRfRE9VQkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRl
eCA4MDAzMGFjLi4wMTIzNGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC02Niw3ICs2Niw2IEBAIHZvaWQg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciogZW5jb2RlcikgY29uCiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNOb0FjY2Vzcyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVk
QXNEaXNwbGF5SXNvbGF0ZWQpOwogICAgIGVuY29kZXItPmVuY29kZSh1cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzQ09SU0VuYWJsZWQpOwotICAgIGVuY29kZXItPmVuY29kZShtaW1lVHlwZXNXaXRoQ3Vz
dG9tUmVwcmVzZW50YXRpb24pOwogICAgIGVuY29kZXItPmVuY29kZUVudW0oY2FjaGVNb2RlbCk7
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKICAgICBlbmNv
ZGVyLT5lbmNvZGUoc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7CkBAIC0xNDcs
OCArMTQ2LDYgQEAgYm9vbCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWIKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0NPUlNFbmFibGVkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShwYXJh
bWV0ZXJzLmNhY2hlTW9kZWwpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocGFyYW1ldGVycy5zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApp
bmRleCAwZDU0M2ZhLi5mOTU0OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTY5LDkgKzY5LDYgQEAgc3RydWN0
IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNj
aGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkOwogCi0gICAgLy8gTUlNRSB0eXBlcyBmb3Ig
d2hpY2ggdGhlIFVJIHByb2Nlc3Mgd2lsbCBoYW5kbGUgc2hvd2luZyB0aGUgZGF0YS4KLSAgICBW
ZWN0b3I8U3RyaW5nPiBtaW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0KICAgICBD
YWNoZU1vZGVsIGNhY2hlTW9kZWw7CiAgICAgYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsK
IApAQCAtMTEzLDYgKzExMCw3IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHsKIAogICAgIGJvb2wgc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwogICAgIGJv
b2wgc2hvdWxkRW5hYmxlS2VybmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdDsKKwogI2VsaWYgUExB
VEZPUk0oV0lOKQogICAgIFN0cmluZyBjZlVSTENhY2hlUGF0aDsKICAgICB1aW50NjRfdCBjZlVS
TENhY2hlRGlza0NhcGFjaXR5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9QREZLaXRJbXBvcnRzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9y
dHMuaAppbmRleCA0NGMzNzVjLi5jOWExZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMuaApAQCAtMzMsNiArMzMsMTAgQEAgQ2xhc3MgY2xhc3NGcm9tUERGS2l0
KE5TU3RyaW5nICpjbGFzc05hbWUpOwogQ2xhc3MgcGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpOwog
Q2xhc3MgcGRmRG9jdW1lbnRDbGFzcygpOwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCitD
bGFzcyBwZGZMYXllckNvbnRyb2xsZXJDbGFzcygpOworI2VuZGlmCisKIH0KIAogI2VuZGlmIC8v
IFBERktpdEltcG9ydHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Q
REZLaXRJbXBvcnRzLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
Lm1tCmluZGV4IDYyMzRhODMuLmJjY2ZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMubW0KQEAgLTU0LDUgKzU0LDE0IEBAIENsYXNzIHBkZkRvY3VtZW50Q2xh
c3MoKQogICAgIEFTU0VSVChwZGZEb2N1bWVudENsYXNzKTsKICAgICByZXR1cm4gcGRmRG9jdW1l
bnRDbGFzczsKIH0KKyAgICAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKK0NsYXNzIHBkZkxh
eWVyQ29udHJvbGxlckNsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcGRmTGF5ZXJDb250cm9s
bGVyQ2xhc3MgPSBjbGFzc0Zyb21QREZLaXQoQCJQREZMYXllckNvbnRyb2xsZXIiKTsKKyAgICBB
U1NFUlQocGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOworICAgIHJldHVybiBwZGZMYXllckNvbnRy
b2xsZXJDbGFzczsKK30KKyNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWNjZTIwNS4uN2Q5NWZhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAt
OTMzLDMgKzkzMywxMyBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5TbmFwc2hvdHRpbmdF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7CiAgICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoKTsKIH0KKwor
dm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0UERGS2l0UGx1Z2luRW5hYmxlZChlbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZl
cmVuY2VzR2V0UERGS2l0UGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmKQoreworICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wZGZLaXRQbHVnaW5F
bmFibGVkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGMwMjYxMWMuLmEzNzY3MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
CkBAIC0yMjMsNiArMjIzLDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRTY3Jl
ZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByCiBXS19FWFBPUlQg
dm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29va2llRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzLCBib29sIGVuYWJsZWQpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldENv
b2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRz
IHRvIGZhbHNlCitXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGS2l0UGx1Z2luRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpOworV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBERktpdFBsdWdpbkVuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7CisKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNS
ZXNldFRlc3RSdW5uZXJPdmVycmlkZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZik7
CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAppbmRleCAyZTBjOTRmLi4xMWI5NDM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtNDYsNyArNDYsMTAgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRl
ICJCdWlsdEluUERGVmlldy5oIgorI2luY2x1ZGUgIkJ1aWx0SW5TaW1wbGVQREZWaWV3LmgiCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiQnVpbHRJblBERktpdFZpZXcuaCIK
KyNlbmRpZgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzA1LDggKzMw
OCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnModWludDY0X3Qg
cmVxdWVzdElELCBQYXNzT3duUHRyPFZlY3RvcjxQbAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAv
LyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNlZCB3aGVuIGEgcmVh
bCBwbHVnLWluIGlzIGluc3RhbGxlZC4KICAgICAvLyBOT1RFOiBUaGlzIGhhcyB0byBiZSBkb25l
IG9uIHRoZSBtYWluIHRocmVhZCBhcyBpdCBjYWxscyBsb2NhbGl6ZWRTdHJpbmcoKS4KLSAgICBp
ZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkKLSAgICAgICAgcGx1Z2lucy0+YXBwZW5k
KEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkpOworICAgIGlmICghbV9jb250ZXh0LT5vbWl0
UERGU3VwcG9ydCgpKSB7CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisgICAgICAgIHBsdWdp
bnMtPmFwcGVuZChCdWlsdEluUERGS2l0Vmlldzo6cGx1Z2luSW5mbygpKTsKKyNlbmRpZgorICAg
ICAgICBwbHVnaW5zLT5hcHBlbmQoQnVpbHRJblNpbXBsZVBERlZpZXc6OnBsdWdpbkluZm8oKSk7
CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRHZXRQ
bHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5ODFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCkBAIC03NywxMiAr
NzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFtZXRlcnMucHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21pdFBERlN1cHBvcnQo
KSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9j
ZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xk
aW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLmFwcGVuZFJhbmdl
KG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0KICAgICBwYXJhbWV0
ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBwcm9j
ZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYWNoZVBhdGgoQWRv
cHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwYjBiY2YuLjU4
ZmY5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUg
LyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAvKiBXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURGMTE2MUJGOUYxMDAz
MUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYxNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMjlE
NTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1REYwMTYxQkY5
RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87IH07CisJCTJEODcw
RDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcwRDBFMTYyMkI3RjkwMDBBM0Yy
MCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLzsgfTsKIAkJMzEwOTk5NzMxNDZDNzVBMjAwMjlE
RUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90
aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsKIAkJMzEwOTk5QzcxNDZDOUUzRDAwMjlERUI5IC8q
IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlv
bkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0QTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmlj
YXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTM0
LDcgKzkzNSw3IEBACiAJCUUxOTU4MkQ2MTUzQ0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRz
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NTgy
RDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gKi87IH07CiAJCUUxOTY3RTM2
MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM1MTUw
QUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgKi87IH07
CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdFMzcx
NTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiICovOyB9OwotCQlFMTk5
ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcg
LyogQnVpbHRJblBERlZpZXcubW0gKi87IH07CisJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAv
KiBCdWlsdEluU2ltcGxlUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluU2ltcGxl
UERGVmlldy5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi87IH07CiAJ
CUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3MzQxMzRDRUE4MDAw
N0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87IH07CiAJCUUxQUVBMjJGMTQ2ODdCREIw
MDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAv
KiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLzsgfTsKQEAgLTEzMzMsNiArMTMzNCw4
IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91
cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFn
ZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDg3
MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQnVpbHRJblBERktpdFZpZXcuaDsgcGF0aCA9IFBERi9CdWls
dEluUERGS2l0Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDg3MEQwRTE2
MjJCN0Y5MDAwQTNGMjAgLyogQnVpbHRJblBERktpdFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWlsdEluUERGS2l0Vmlldy5tbTsgcGF0aCA9IFBERi9C
dWlsdEluUERGS2l0Vmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5
NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGll
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJDMEM0OTE0NkREQzhBMDAx
NkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDY2LDggKzIwNjksOCBAQAogCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4NzUg
LyogUERGS2l0SW1wb3J0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFBERktpdEltcG9ydHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTY3
RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2Ig
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNi
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkg
LyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFw
cGxlLldlYlByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVB
MTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCdWlsdEluUERGVmlldy5oOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRF
NyAvKiBCdWlsdEluUERGVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1tOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyog
QnVpbHRJblNpbXBsZVBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QnVpbHRJblNpbXBsZVBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluU2ltcGxlUERGVmlldy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcg
LyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBCdWlsdEluU2ltcGxlUERGVmlldy5tbTsgcGF0aCA9IFBERi9CdWlsdEluU2lt
cGxlUERGVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzExMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAv
KiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zODk3LDggKzM5MDAsMTAgQEAKIAkJRTE5OTg3NUIxNDJCRjlDRjAwQkIy
REU3IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0J
CQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovLAotCQkJ
CUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovLAorCQkJCTJE
ODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5oICovLAorCQkJCTJE
ODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBCdWlsdEluUERGS2l0Vmlldy5tbSAqLywKKwkJCQlF
MTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblNpbXBsZVBERlZpZXcubW0gKi8sCisJ
CQkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQREZWaWV3LmggKi8s
CiAJCQkpOwogCQkJbmFtZSA9IFBERjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00
ODEyLDYgKzQ4MTcsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZp
bGVzID0gKAogCQkJCTVENTE4NDU1MTNCQ0Y5Q0MwMEM3RkY0QSAvKiBBUElDbGllbnRUcmFpdHMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ4NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIEJ1aWx0
SW5QREZLaXRWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3
MEI1IC8qIEFQSU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNENjEwNTEzQTdGMDNB
MDBGOTVENEUgLyogQXJndW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjBD
NEIxMkIxNjMzNDAwOEU0OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC00ODI4LDcgKzQ4MzQsNyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBC
YWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FB
RTJDIC8qIEJhY2tpbmdTdG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzQxQUM4MTI2
M0M4ODMwMDA1NEU5NCAvKiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
RTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0SW5TaW1wbGVQREZWaWV3
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRp
bGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5NTcwMTI4NDg1NjQwMDFFQjk2MiAv
KiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2RjlGQjcxMUUxNDA4NTAw
REIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAKaW5kZXggZTI4Yzc4ZC4uYjY2YjJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCkBAIC05MTMsNiArOTEzLDIxIEBAIGJvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUtl
eWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkKICAgICBy
ZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOwogfQogCiti
b29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29s
IE5ldHNjYXBlUGx1Z2luOjpzaG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0Rm9jdXMoYm9vbCBo
YXNGb2N1cykKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
aAppbmRleCA2MWUyYmI3Li5kNTMzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaApAQCAtMjAz
LDYgKzIwMywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVu
dUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5
Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEZvY3VzKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZp
cnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2Fs
aW5nKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3Qo
KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jMTgyNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGS2l0Vmlldy5oCkBAIC0wLDAg
KzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCdWlsdEluUERGS2l0Vmlld19o
CisjZGVmaW5lIEJ1aWx0SW5QREZLaXRWaWV3X2gKKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lO
KQorCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zv
cm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpT
Q29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwor
dHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKworT0JKQ19D
TEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUERGTGF5ZXJDb250cm9sbGVy
RGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1l
OworCitjbGFzcyBCdWlsdEluUERGS2l0VmlldyA6IHB1YmxpYyBQbHVnaW4sIHB1YmxpYyBXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QnVp
bHRJblBERktpdFZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOworICAgIH5CdWlsdEluUERGS2l0Vmll
dygpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2luSW5mbygpOworCisg
ICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFzeW5jaHJvbm91cyBpbml0
aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJvbm91c2x5SW5pdGlh
bGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgcGFpbnRDb250
cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IEJ1aWx0SW5QREZLaXRWaWV3KFdlYkZyYW1lKik7CisKKyAgICAvLyBS
ZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Ny
b2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcu
CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBs
dWdpblZpZXcoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAg
ICB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsK
KworICAgIC8vIFBsdWctaW4gbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNv
bnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1
YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7CisgICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOworICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zcGFy
ZW50KCk7CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
cGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7CisgICAgdmly
dHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVE
aWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdmlydHVhbCB2b2lkIGZy
YW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgU3RyaW5nJiByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVz
cG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJM
LCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRh
KHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7CisgICAg
dmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdh
c0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVu
Z3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZp
bGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29u
c3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZh
aWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50
KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50
ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1v
dXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1l
bnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOworICAgIHZp
cnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHdp
bmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0Zy
YW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1l
SW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlD
aGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChj
b25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGlu
Z01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2YXRl
QnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1
ZShTdHJpbmcmIGZvcm1WYWx1ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJD
b3JlOjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgdmly
dHVhbCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAvLyBTY3JvbGxhYmxl
QXJlYSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQo
KTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1h
dG9yTWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBn
b29kIHRpbWUgdG8gYW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9s
bGJhclJlY3QpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBX
ZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQp
IGNvbnN0IE9WRVJSSURFOworCisgICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4
dFJlZik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOworICAgIFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm07CisKKyAgICBX
ZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOworCisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5h
bWU7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1ZmZlcjsKKworICAg
IFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3Vt
ZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJD
b3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJh
bWU7CisKKyAgICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250YWluZXJMYXllcjsKKyAg
ICBSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyOworICAgIFJldGFpblB0
cjxQbGF0Zm9ybUxheWVyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRy
PFBsYXRmb3JtTGF5ZXI+IG1fc2Nyb2xsQ29ybmVyTGF5ZXI7CisgICAgUmV0YWluUHRyPFBERkxh
eWVyQ29udHJvbGxlcj4gbV9wZGZMYXllckNvbnRyb2xsZXI7CisKKyAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2Nyb2xsT2Zmc2V0OworICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdE1vdXNlUG9p
bnQ7CisgICAgCisgICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1f
cGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjZW5kaWYgLy8gQnVpbHRJblBE
RktpdFZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9CdWlsdEluUERGS2l0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjdlOTdjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERktpdFZpZXcubW0KQEAgLTAsMCArMSwxMjA1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkJ1aWx0SW5QREZLaXRWaWV3LmgiCisKKyNpbXBv
cnQgIlBERktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNo
YXJlYWJsZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50
Q29udmVyc2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Q0YuaD4KKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2lu
RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJU
aGVtZS5oPgorCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0
PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KSBuZXdQb3NpdGlvbjsK
Ky0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKSBpdGVtcyB3aXRoVHlw
ZXM6KE5TQXJyYXkgKil0eXBlczsKKy0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVk
U3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2lu
dDsKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lk
KW9wZW5XaXRoUHJldmlldzsKKy0gKHZvaWQpc2F2ZVRvUERGOworCitAZW5kCisKK0BpbnRlcmZh
Y2UgUERGTGF5ZXJDb250cm9sbGVyIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBQREZM
YXllckNvbnRyb2xsZXIgKFBERktpdFNlY3JldHNJS25vd0Fib3V0KQorCitAcHJvcGVydHkgKHJl
dGFpbikgQ0FMYXllciAqcGFyZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1l
bnQgKmRvY3VtZW50OworQHByb3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOwor
CistICh2b2lkKXNldERpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheXNQ
YWdlQnJlYWtzOihCT09MKXBhZ2VCcmVha3M7CisKKy0gKENHRmxvYXQpdGlsZVNjYWxlRmFjdG9y
OworLSAodm9pZClzZXRUaWxlU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CisKKy0g
KENHU2l6ZSljb250ZW50U2l6ZTsKKy0gKENHU2l6ZSljb250ZW50U2l6ZVJlc3BlY3Rpbmdab29t
OworCistICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKwor
LSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBh
dFBvaW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OworCist
IChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOworLSAodm9pZClzZXRTY3JvbGxQb3NpdGlvbjooQ0dQ
b2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpc2Nyb2xsV2l0aERlbHRhOihDR1NpemUpZGVsdGE7
CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlTW92
ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Owor
LSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZl
bnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vu
c2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNob3Vs
ZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKGlkKSBjdXJyZW50U2VsZWN0aW9uOworLSAodm9pZClj
b3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKGJvb2wpa2V5RG93bjooTlNF
dmVudCAqKWV2ZW50OworCistICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wpZW5hYmxlZDsKKy0g
KEJPT0wpaHVkRW5hYmxlZDsKKworQGVuZAorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3Vz
aW5nIG5hbWVzcGFjZSBzdGQ7CisKK0BpbnRlcmZhY2UgV0tCdWlsdEluUERGS2l0Vmlld1Njcm9s
bGJhckxheWVyIDogQ0FMYXllcgoreworICAgIFdlYktpdDo6QnVpbHRJblBERktpdFZpZXcqIF9w
ZGZWaWV3OworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpCdWlsdEluUERGS2l0Vmll
dyogcGRmVmlldzsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tCdWlsdEluUERGS2l0Vmll
d1Njcm9sbGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0gKGlkKWluaXRXaXRo
UERGVmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sKKyAgICBpZiAoIShz
ZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRm
VmlldyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkPENBQWN0aW9u
PilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKwor
LSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY3R4Cit7CisgICAgX3BkZlZpZXct
PnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KHNlbGYsIGN0eCk7Cit9CisKK0BlbmQKKwor
QGludGVyZmFjZSBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5
ZXJDb250cm9sbGVyRGVsZWdhdGU+Cit7CisgICAgV2ViS2l0OjpCdWlsdEluUERGS2l0Vmlldyog
X3BkZlZpZXc7Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OkJ1aWx0SW5QREZLaXRW
aWV3KiBwZGZWaWV3OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlCisKK0BzeW50aGVzaXplIHBkZlZpZXc7CisKKy0gKGlkKWluaXRXaXRoUERG
VmlldzooV2ViS2l0OjpCdWlsdEluUERGS2l0VmlldyAqKXZpZXcKK3sKKyAgICBpZiAoIShzZWxm
ID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmVmll
dyA9IHZpZXc7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRlU2Ny
b2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmVmlldy0+bm90aWZ5
U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9uKSk7Cit9CisKKy0gKHZv
aWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNB
cnJheSAqKXR5cGVzCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0eXBlcyBvdGhlciB0aGFuIHBs
YWluIHRleHQuCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgW2l0ZW1zIGNvdW50XTsg
KytpKSB7CisgICAgICAgIGlmIChbW3R5cGVzIG9iamVjdEF0SW5kZXg6aV0gaXNFcXVhbFRvU3Ry
aW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwgW1t0eXBlcyBvYmplY3RBdEluZGV4OmldIGlzRXF1
YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgeworICAgICAgICAgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10g
aW5pdFdpdGhEYXRhOltpdGVtcyBvYmplY3RBdEluZGV4OmldIGVuY29kaW5nOk5TVVRGOFN0cmlu
Z0VuY29kaW5nXSk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgp
LT53cml0ZVBsYWluVGV4dChwbGFpblRleHRTdHJpbmcuZ2V0KCksIFBhc3RlYm9hcmQ6OkNhbm5v
dFNtYXJ0UmVwbGFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzogKE5TQXR0cmlidXRlZFN0cmluZyAqKSBzdHJpbmcg
YXRQb2ludDogKENHUG9pbnQpIHBvaW50Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
KworLSAodm9pZCkgcGVyZm9ybVdlYlNlYXJjaDogKE5TU3RyaW5nICopIHN0cmluZworeworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIG9wZW5XaXRoUHJldmlldworewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpIHNhdmVUb1BERgoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgYXBwZW5kVmFs
dWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGljdGlvbmFyeVJlZiBzdWJ0cmVlLCBW
ZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCit7CisgICAgQ0dQREZBcnJheVJlZiBuYW1l
czsKKyAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIk5hbWVzIiwgJm5h
bWVzKSkgeworICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0gQ0dQREZBcnJheUdldENvdW50KG5h
bWVzKSAvIDI7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZUNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVjdDsKKyAgICAgICAgICAgIENHUERG
QXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9iamVjdCk7CisgICAgICAgICAgICB2
YWx1ZXMuYXBwZW5kKG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIENHUERGQXJyYXlSZWYga2lkczsKKyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldEFy
cmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXpl
X3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lkcyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBr
aWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rpb25hcnkoa2lkcywgaSwgJmtpZCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdldEFs
bFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5UmVmIHRyZWUsIFZlY3RvcjxDR1BE
Rk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0
cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0QWxsU2Ny
aXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9
IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBpZiAoIXBkZkNhdGFs
b2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlvbmFyeSBvZiBhbGwg
ZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgbmFtZXNE
aWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFyeShwZGZDYXRh
bG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENH
UERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rp
b25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNj
cmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5hbWVzIGFyZSBh
cmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KKyAgICBWZWN0
b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJl
ZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBvYmplY3RDb3VudCA9
IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RDb3Vu
dDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0QWN0aW9uOwor
ICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2FzdDxDR1BERk9i
amVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNj
cmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBIEphdmFT
Y3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNjcmlwdCIuCisg
ICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAo
YWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXggbGVuZ3RoOworICAg
ICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3RyaW5nUmVmIHN0cmlu
ZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAgaWYgKENHUERG
RGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyZWFtKSkgewor
ICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIGRhdGEuYWRv
cHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOworICAgICAgICAgICAg
aWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYnl0ZXMg
PSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAgICAgbGVuZ3RoID0gQ0ZE
YXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKENHUERGRGljdGlv
bmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5nKSkgeworICAgICAg
ICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsKKyAgICAgICAgICAg
IGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENGU3RyaW5n
RW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PSAweEZFICYmIGJ5
dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmljb2RlIDoga0NGU3RyaW5nRW5j
b2RpbmdVVEY4OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdChBZG9wdENG
LCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBieXRlcywgbGVu
Z3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHNjcmlwdCk7CisgICAgfQorfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgdWludDY0X3QgcGRmRG9jdW1lbnRSZXF1ZXN0
SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxvYWRpbmcgbXVsdGlwbGUgc3Ry
ZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KKworUGFzc1JlZlB0cjxCdWlsdElu
UERGS2l0Vmlldz4gQnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdEluUERGS2l0VmlldyhmcmFtZSkpOworfQor
CitCdWlsdEluUERGS2l0Vmlldzo6QnVpbHRJblBERktpdFZpZXcoV2ViRnJhbWUqIGZyYW1lKQor
ICAgIDogbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoQWRvcHROUywgW1tD
QUxheWVyIGFsbG9jXSBpbml0XSkKKyAgICAsIG1fY29udGVudExheWVyKEFkb3B0TlMsIFtbQ0FM
YXllciBhbGxvY10gaW5pdF0pCisgICAgLCBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcigwKQor
ICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKDApCisgICAgLCBtX3Njcm9sbENvcm5lckxh
eWVyKEFkb3B0TlMsIFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJhckxheWVyIGFsbG9jXSBp
bml0V2l0aFBERlZpZXc6dGhpc10pCisgICAgLCBtX3BkZkxheWVyQ29udHJvbGxlcihBZG9wdE5T
LCBbW3BkZkxheWVyQ29udHJvbGxlckNsYXNzKCkgYWxsb2NdIGluaXRdKQorICAgICwgbV9wZGZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZShBZG9wdE5TLCBbW1dLUERGTGF5ZXJDb250cm9sbGVyRGVs
ZWdhdGUgYWxsb2NdIGluaXRXaXRoUERGVmlldzp0aGlzXSkKK3sKKyAgICBbbV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCkgc2V0RGVsZWdhdGU6bV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZS5n
ZXQoKV07CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldFBhcmVudExheWVyOm1f
Y29udGVudExheWVyLmdldCgpXTsKKyAgICAKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBh
ZGRTdWJsYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07CisgICAgW21fY29udGFpbmVyTGF5ZXIu
Z2V0KCkgYWRkU3VibGF5ZXI6bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKV07Cit9CisKK0J1aWx0
SW5QREZLaXRWaWV3Ojp+QnVpbHRJblBERktpdFZpZXcoKQoreworfQorCitQbHVnaW5JbmZvIEJ1
aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87Cisg
ICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0lu
Zm8gbWltZUNsYXNzSW5mbzsKKyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9w
ZGYiOworICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9u
KCk7CisgICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBp
bmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKwor
UGx1Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1
Z2luVmlldyogQnVpbHRJblBERktpdFZpZXc6OnBsdWdpblZpZXcoKSBjb25zdAoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKwor
dm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBo
YWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxi
YXI7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3Bs
dWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYg
KG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3Jv
bGxiYXIpOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBp
ZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3Jv
bGxiYXIpOworCisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCkgOiAwOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8g
MCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgSW50UmVj
dCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1f
cGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0
LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9Cisg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Cisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLmhl
aWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkpOworICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChwbHVnaW5WaWV3
KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmll
dyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9
IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAg
ICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAg
IGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdmVy
dGljYWxTY3JvbGxiYXJMYXllciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIFtt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0RnJhbWU6bV92ZXJ0aWNhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCldOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgp
IHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmIChtX2hvcml6b250YWxTY3Jv
bGxiYXJMYXllciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgW21faG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldEZyYW1lOm1faG9yaXpvbnRhbFNjcm9sbGJhci0+
ZnJhbWVSZWN0KCldOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkg
c2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyTGF5
ZXIpIHsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0RnJhbWU6c2Nyb2xs
Q29ybmVyUmVjdCgpXTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0TmVl
ZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERG
S2l0Vmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICBp
ZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXJMYXllci5hZG9wdE5TKFtbV0tCdWlsdEluUERGS2l0Vmlld1Njcm9sbGJh
ckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlZpZXc6dGhpc10pOworICAgICAgICBbbV9jb250YWlu
ZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQo
KV07CisgICAgICAgIAorICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKHdpZGdldC5n
ZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmFk
b3B0TlMoW1tXS0J1aWx0SW5QREZLaXRWaWV3U2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRo
UERGVmlldzp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1Ymxh
eWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBk
aWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIH0KKyAgICBwbHVnaW5W
aWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICByZXR1
cm4gd2lkZ2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbGxSZW1vdmVWZXJ0
aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgIFttX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJv
bVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgp
OworICAgIHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmFkZEFy
Y2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFk
ZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0
IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdo
IGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsu
CisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNp
emVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7Cisg
ICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBt
YXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRS
ZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJj
aGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1
ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxp
Y2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7Cisg
ICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2
ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZp
ZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisK
KyAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGlu
aXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CisKKyAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOm1fcGx1Z2luU2l6ZV07CisgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldERvY3VtZW50Om1fcGRmRG9jdW1lbnQuZ2V0KCld
OworICAgIAorICAgIHBsdWdpblZpZXcoKS0+c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvcihb
bV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXSwgSW50UG9pbnQoMCwg
MCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisK
KyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUu
d2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7CisKKyAgICBWZWN0b3I8UmV0YWluUHRy
PENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQo
W21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVf
dCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENv
bnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2Mo
Y3R4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgewor
ICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhz
Y3JpcHRzW2ldLmdldCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwg
anNQREZEb2MsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAg
ICB9CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Cit9CisKK3ZvaWQgQnVpbHRJ
blBERktpdFZpZXc6OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgY29tZSBzdHJhaWdodCBmcm9tIFBERktpdC4KKworICAgIHNpemVfdCBwYWdlQ291bnQgPSBD
R1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAg
ICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZE
b2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBh
Z2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2Us
IGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAg
ICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7
CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KKworICAg
IG1fcGRmRG9jdW1lbnRTaXplID0gSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkg
Y29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3
Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgLy8gTG9h
ZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVy
bDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyICYmICFwYXJhbWV0
ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1
bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBTdHJpbmcoKSwg
SFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOworCisgICAgY29udHJv
bGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgQnVpbHRJblBERktpdFZpZXc6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2ZyYW1lKSB7Cisg
ICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52
aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Cisg
ICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgCisgICAgW21faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBb
bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IDA7CisgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ckxheWVyID0gMDsKKyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKSByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExheWVyLmdldCgpIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXll
cl07Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7Cit9CisgICAgCit2
b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxh
eWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGN0eCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGN0eCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgCisgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FM
YXllckNvbnRleHQodHJ1ZSk7CisgICAgCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIgJiYg
bGF5ZXIgPT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC50cmFuc2xhdGUoLW1fdmVydGljYWxTY3JvbGxiYXItPngoKSwgLW1fdmVydGljYWxTY3Jv
bGxiYXItPnkoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KCZncmFwaGlj
c0NvbnRleHQsIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICB9IGVsc2Ug
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiBsYXllciA9PSBtX2hvcml6b250YWxTY3JvbGxi
YXJMYXllcikgeworICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1tX2hvcml6b250
YWxTY3JvbGxiYXItPngoKSwgLW1faG9yaXpvbnRhbFNjcm9sbGJhci0+eSgpKTsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCBtX2hvcml6b250
YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICB9IGVsc2UgaWYgKGxheWVyID09IG1fc2Ny
b2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0ID0gdGhp
cy0+c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRl
KC1zY3JvbGxDb3JuZXJSZWN0LngoKSwgLXNjcm9sbENvcm5lclJlY3QueSgpKTsKKyAgICAgICAg
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAsICZncmFwaGljc0Nv
bnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgIH0KK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkp
OworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisg
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBCdWlsdEluUERGS2l0Vmlldzo6c25hcHNob3QoKQoreworICAgIGlmIChtX3Bs
dWdpblNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBGSVhN
RTogU3VwcG9ydCBub24tMSBwYWdlL2RldmljZVNjYWxlRmFjdG9yLgorICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZSA9IG1fcGx1Z2luU2l6ZTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9y
ZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisK
KyAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LT50cmFu
c2xhdGUoMCwgLW1fcGx1Z2luU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgc25hcHNob3RJbkNvbnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCld
OworCisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEJ1
aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJuIG1fY29udGFpbmVy
TGF5ZXIuZ2V0KCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmlzVHJhbnNwYXJlbnQo
KQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJv
Y2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OndhbnRzV2hlZWxFdmVudHMoKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQoreworICAgIGlmIChtX3BsdWdpblNp
emUgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0
b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXSkgewor
ICAgICAgICAvLyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9wbHVnaW5TaXplID0gcGx1Z2luU2l6ZTsKKyAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zv
cm0gPSBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOnBsdWdpblNpemVdOworCisgICAgW0NBVHJh
bnNhY3Rpb24gYmVnaW5dOworICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllF
U107CisgICAgQ0FUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxl
KDEuMCwgLTEuMCwgMS4wKTsKKyAgICAKKyAgICBDR0Zsb2F0IG1hZ25pZmljYXRpb24gPSBwbHVn
aW5WaWV3KCktPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKSAtIFttX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdOworICAgIAorICAgIC8vIEZJWE1FOiBJbnN0ZWFk
IG9mIG1fbGFzdE1vdXNlUG9pbnQsIHdlIHNob3VsZCB1c2UgdGhlIHpvb20gb3JpZ2luIGZyb20g
UGx1Z2luVmlldzo6c2V0RnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3Rvci4KKyAgICBbbV9wZGZMYXll
ckNvbnRyb2xsZXIuZ2V0KCkgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24g
YXRQb2ludDptX2xhc3RNb3VzZVBvaW50IGltbWVkaWF0ZWx5OllFU107CisgICAgW21fY29udGVu
dExheWVyLmdldCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RUcmFuc2xhdGUo
dHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCldOworICAgIFtDQVRyYW5zYWN0
aW9uIGNvbW1pdF07CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJh
cnMoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgp
Cit7Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1
aW50NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdElu
UERGS2l0Vmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpkaWRFdmFsdWF0ZUph
dmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c3RyZWFtRGlkUmVjZWl2
ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwgdWludDMyX3QsIHVpbnQz
Ml90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3Rl
ZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBk
ZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90
IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAg
ICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZm
ZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7
Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3Qgc3RyZWFtSUQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9
CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFt
SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0
cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fZGF0YUJ1ZmZlci5jbGVh
cigpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwg
IHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAg
ICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgQnVp
bHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQoreworICAgIGlmICghbV9kYXRhQnVmZmVyKQorICAgICAgICBtX2Rh
dGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0
YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6bWFu
dWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCit7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7
Cit9CisKK3ZvaWQgQnVpbHRJblBERktpdFZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkK
K3sKKyAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKK30KKyAgICAKK3N0YXRpYyBOU1VJbnRlZ2Vy
IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50KQoreworICAg
IHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSA/IE5TU2hpZnRLZXlNYXNrIDogMCkKKyAgICAgICAg
fCAoZXZlbnQuY29udHJvbEtleSgpID8gTlNDb250cm9sS2V5TWFzayA6IDApCisgICAgICAgIHwg
KGV2ZW50LmFsdEtleSgpID8gTlNBbHRlcm5hdGVLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZl
bnQubWV0YUtleSgpID8gTlNDb21tYW5kS2V5TWFzayA6IDApOworfQorICAgIAorc3RhdGljIE5T
RXZlbnRUeXBlIGV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIGJv
b2wgbW91c2VCdXR0b25Jc0Rvd24pCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gTlNLZXlEb3duOworICAg
IGNhc2UgV2ViRXZlbnQ6OktleVVwOgorICAgICAgICByZXR1cm4gTlNLZXlVcDsKKworICAgIGNh
c2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25z
dCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU0xlZnRNb3VzZURvd247
CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICBy
ZXR1cm4gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlVXA6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+
KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VVcDsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU1JpZ2h0TW91c2VV
cDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYg
KG1vdXNlQnV0dG9uSXNEb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNMZWZ0
TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRHJhZ2dlZDsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5TTW91c2VNb3ZlZDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jv
b2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgc3RhdGljIGJvb2wgc19pc0Rvd24gPSBmYWxzZTsKKworICAgIElu
dFBvaW50IHBvc2l0aW9uSW5QREZWaWV3KGV2ZW50LnBvc2l0aW9uKCkpOworICAgIHBvc2l0aW9u
SW5QREZWaWV3ID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtLm1hcFBvaW50KHBvc2l0aW9u
SW5QREZWaWV3KTsKKyAgICBwb3NpdGlvbkluUERGVmlldy5zZXRZKG1fcGx1Z2luU2l6ZS5oZWln
aHQoKSAtIHBvc2l0aW9uSW5QREZWaWV3LnkoKSk7CisgICAgCisgICAgbV9sYXN0TW91c2VQb2lu
dCA9IHBvc2l0aW9uSW5QREZWaWV3OworCisgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZl
bnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBzX2lzRG93bik7CisgICAgTlNVSW50ZWdlciBtb2Rp
ZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAg
aWYgKCFldmVudFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5TRXZlbnQgKmZh
a2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246
cG9zaXRpb25JblBERlZpZXcgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDow
IHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpldmVu
dC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkg
eworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYgKHNfaXNEb3duKQor
ICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRHJhZ2dlZDpmYWtl
RXZlbnRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkgbW91c2VNb3ZlZDpmYWtlRXZlbnRdOworICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURv
d246IHsKKyAgICAgICAgc19pc0Rvd24gPSB0cnVlOworICAgICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgbW91c2VEb3duOmZha2VFdmVudF07CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIFttX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZVVwOmZha2VFdmVudF07CisgICAgICAgIHNfaXNEb3duID0g
ZmFsc2U7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZv
cm0oZXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworICAgICAg
ICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlV2hlZWxFdmVudChj
b25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxh
dGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgQnVpbHRJblBERktp
dFZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAg
ICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKQoreworICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRl
eHQgbWVudS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6
OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQpCit7Cisg
ICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBm
YWxzZSk7CisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21X
ZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQg
a2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQgbW9kaWZpZXJG
bGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6MCBj
aGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnM6ZXZlbnQu
dW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0KCkga2V5Q29kZTpl
dmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBbbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkga2V5RG93bjpmYWtlRXZlbnRdOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorICAgIAorYm9vbCBCdWlsdEluUERGS2l0Vmlldzo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICBp
ZiAoY29tbWFuZE5hbWUgPT0gImNvcHkiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkgY29weVNlbGVjdGlvbl07CisgICAgZWxzZSBpZiAoY29tbWFuZE5hbWUgPT0gInNlbGVj
dEFsbCIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZWxlY3RBbGxdOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIGlm
IChjb21tYW5kTmFtZSA9PSAiY29weSIgJiYgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGN1
cnJlbnRTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgaWYg
KGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2V0Rm9jdXMoYm9v
bCBoYXNGb2N1cykKK3sKK30KKworTlBPYmplY3QqIEJ1aWx0SW5QREZLaXRWaWV3OjpwbHVnaW5T
Y3JpcHRhYmxlTlBPYmplY3QoKQoreworICAgIHJldHVybiAwOworfQorCit2b2lkIEJ1aWx0SW5Q
REZLaXRWaWV3Ojp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdElu
UERGS2l0Vmlldzo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQoreworfQorCit2b2lkIEJ1aWx0SW5Q
REZLaXRWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKQoreworfQorCit2b2lkIEJ1
aWx0SW5QREZLaXRWaWV3Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKK3sKK30K
KwordWludDY0X3QgQnVpbHRJblBERktpdFZpZXc6OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBCdWlsdEluUERGS2l0
Vmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBC
dWlsdEluUERGS2l0Vmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQor
eworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCkKK3sKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6cHJpdmF0ZUJyb3dzaW5n
U3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK2Jvb2wgQnVpbHRJblBERktpdFZpZXc6OmdldEZv
cm1WYWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdElu
UERGS2l0Vmlldzo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHJldHVybiBzY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktpdFZpZXc6Omhvcml6
b250YWxTY3JvbGxiYXIoKQoreworICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0
KCk7Cit9CisKK1Njcm9sbGJhciogQnVpbHRJblBERktpdFZpZXc6OnZlcnRpY2FsU2Nyb2xsYmFy
KCkKK3sKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsKK30KKworSW50UmVj
dCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogQnVpbHRJblBERktp
dFZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
V2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBm
cmFtZSBvciBSZW5kZXJMYXllci4KKyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBCdWlsdElu
UERGS2l0Vmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEludFJlY3QoMCwgMCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpOworfQorCit2b2lkIEJ1aWx0SW5QREZLaXRWaWV3OjpzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IElu
dFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpIHNldFNjcm9sbFBvc2l0aW9uOkNHUG9pbnRNYWtlKG9mZnNldC54KCksIG9mZnNldC55
KCkpXTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFy
ID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNj
cm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxi
YXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkg
OiAwOworfQorCitib29sIEJ1aWx0SW5QREZLaXRWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6aW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKHNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgICAgICBbbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICAg
ICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSW50UmVjdCBkaXJ0eVJl
Y3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsK
KyAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOworICAgIGNv
bnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5QREZL
aXRWaWV3OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmIChtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIFttX3Njcm9sbENvcm5l
ckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCitib29sIEJ1aWx0
SW5QREZLaXRWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNl
dC53aWR0aCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQnVpbHRJ
blBERktpdFZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQor
CitJbnRQb2ludCBCdWlsdEluUERGS2l0Vmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5Q
REZLaXRWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICht
X3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIEludFBv
aW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6
ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkgLSBtX3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4g
bWF4aW11bU9mZnNldDsKK30KKworaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojp2aXNpYmxlSGVpZ2h0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOworfQorCitpbnQg
QnVpbHRJblBERktpdFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cGx1Z2luU2l6ZS53aWR0aCgpOworfQorCitJbnRTaXplIEJ1aWx0SW5QREZLaXRWaWV3Ojpjb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsKK30KKwor
Ym9vbCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2Fj
aGUoKTsKK30KKwordm9pZCBCdWlsdEluUERGS2l0Vmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2Vk
KGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0
byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdl
IGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMg
d2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9m
ZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9m
ZnNldChuZXdTY3JvbGxPZmZzZXQpOworCisgICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBh
cmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVh
ci4KKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBTY3JvbGxhYmxlQXJlYTo6Y29udGVu
dHNSZXNpemVkKCk7Cit9CisKK0ludFJlY3QgQnVpbHRJblBERktpdFZpZXc6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBz
Y3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXItPmxvY2F0aW9uKCkgLSBwbHVn
aW5WaWV3KCktPmxvY2F0aW9uKCkpOworCisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUo
KS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwg
cmVjdCk7Cit9CisgICAgCitJbnRSZWN0IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9j
YXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHJlY3Q7
Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmll
dygpLT5sb2NhdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBw
b2ludCk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5QREZLaXRWaWV3Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihwbHVnaW5WaWV3KCkt
PnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKHBsdWdpblZpZXcoKS0+
bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHBv
aW50OworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlNDb250ZXh0UmVmIGN0
eCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZLaXRWaWV3KiBwZGZWaWV3
ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmlu
YWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEJ1aWx0SW5QREZLaXRWaWV3KiBwZGZW
aWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERktpdFZpZXcqPihKU09iamVjdEdldFByaXZhdGUo
b2JqZWN0KSk7CisgICAgcGRmVmlldy0+ZGVyZWYoKTsKK30KKworSlNWYWx1ZVJlZiBCdWlsdElu
UERGS2l0Vmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAg
ICBCdWlsdEluUERGS2l0VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZLaXRW
aWV3Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKworICAgIFdlYkZyYW1lKiBm
cmFtZSA9IHBkZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gZnJh
bWUtPmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworCisgICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7CisKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKworSlNPYmplY3RSZWYgQnVpbHRJ
blBERktpdFZpZXc6Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQoreworICAgIHN0YXRp
YyBKU1N0YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAg
IHsgInByaW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwK
KyAgICB9OworCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZp
bml0aW9uID0geworICAgICAgICAwLAorICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCisg
ICAgICAgICJEb2MiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBqc1BERkRvY1N0
YXRpY0Z1bmN0aW9ucywKKyAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFs
aXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKworICAgIHN0YXRpYyBKU0Ns
YXNzUmVmIGpzUERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5p
dGlvbik7CisKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhp
cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFBERktJ
VF9QTFVHSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL0J1aWx0SW5QREZWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODgy
OWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9C
dWlsdEluUERGVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEJ1aWx0SW5QREZWaWV3X2gKLSNkZWZpbmUgQnVpbHRJblBERlZp
ZXdfaAotCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxl
QXJlYS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU09iamVjdFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTVmFsdWVSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgUGx1Z2luSW5m
bzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpblZpZXc7Ci1jbGFzcyBX
ZWJGcmFtZTsKLQotY2xhc3MgQnVpbHRJblBERlZpZXcgOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRl
IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxCdWlsdEluUERGVmlldz4gY3JlYXRlKFdlYkZyYW1lKik7Ci0gICAgfkJ1aWx0SW5QREZWaWV3
KCk7Ci0KLSAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7Ci0KLSAg
ICAvLyBJbi1wcm9jZXNzIFBERlZpZXdzIGRvbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGluaXRp
YWxpemF0aW9uLgotICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3VzbHlJbml0aWFs
aXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQg
QnVpbHRJblBERlZpZXcoV2ViRnJhbWUqKTsKLQotICAgIC8vIFJlZ3VsYXIgcGx1Zy1pbnMgZG9u
J3QgbmVlZCBhY2Nlc3MgdG8gdmlldywgYnV0IHdlIGFkZCBzY3JvbGxiYXJzIHRvIGVtYmVkZGlu
ZyBGcmFtZVZpZXcgZm9yIHByb3BlciBldmVudCBoYW5kbGluZy4KLSAgICBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3KCk7Ci0gICAgY29uc3QgUGx1Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0Owot
Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7
Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9u
KTsKLSAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotICAgIHZvaWQgcGRmRG9jdW1lbnRE
aWRMb2FkKCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOwotICAgIHZvaWQgcGFpbnRCYWNr
Z3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBwYWludENvbnRlbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHBhaW50
Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKLQotICAgIC8vIFBsdWctaW4gbWV0aG9kcwotICAgIHZpcnR1YWwgYm9v
bCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5
ZXIoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zcGFyZW50KCk7Ci0gICAgdmly
dHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5z
Zm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2li
aWxpdHlEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5n
KHVpbnQ2NF90IHJlcXVlc3RJRCk7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmFpbCh1aW50
NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1
bHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qg
c3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFt
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVh
bUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0
cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCk7Ci0g
ICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBs
YXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6
U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAgICB2
aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMs
IGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2Fk
aW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5j
ZWxsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVl
bEV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
Rm9jdXMoYm9vbCk7Ci0gICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0No
YW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1
YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVhbCB1
aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkg
T1ZFUlJJREU7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0
ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hh
bmdlZChib29sKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZh
bHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVj
dGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxQ
REZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIG1ldGhvZHMuCi0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVj
dCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b24pIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6
U2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2lu
dCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBm
YWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVw
IGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmlt
YXRlLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50IG5ld1N0eWxl
LCBib29sIGZvcmNlVXBkYXRlKSBPVkVSUklERTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
ZSBvdGhlciBjb252ZXJzaW9uIGZ1bmN0aW9uczsgdGhpcyBvbmUgaXMgZW5vdWdoIHRvIGdldCBz
Y3JvbGxiYXIgaGl0IHRlc3Rpbmcgd29ya2luZy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpT
Y3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0IE9W
RVJSSURFOwotCi0gICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZik7Ci0g
ICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsK
LQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgV2ViQ29yZTo6S1VS
TCBtX3NvdXJjZVVSTDsKLQotICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOwotICAgIFJl
dGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGFCdWZmZXI7Ci0KLSAgICBSZXRhaW5QdHI8
UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+
IG1fcGFnZUJveGVzOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8v
IEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCi0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJh
cj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgIFdlYkZyYW1lKiBtX2ZyYW1lOwotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gQnVpbHRJblBERlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkY2FlYTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDg4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJCdWlsdEluUERGVmlldy5oIgotCi0jaW1wb3J0ICJQREZLaXRJbXBv
cnRzLmgiCi0jaW1wb3J0ICJQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAu
aCIKLSNpbXBvcnQgIldlYkV2ZW50LmgiCi0jaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+Ci0jaW1wb3J0
IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgot
I2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2Fk
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5o
PgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRv
ci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQotewotICAgIENHUERGQXJyYXlSZWYgbmFt
ZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIsICZu
YW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChu
YW1lcykgLyAyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Ci0gICAgICAgICAgICBDR1BE
RkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwotICAgICAgICAgICAg
dmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRB
cnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6
ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYg
a2lkOwotICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZraWQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1
YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBnZXRB
bGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8Q0dQ
REZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17Ci0gICAgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3Vi
dHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFNj
cmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3RvcjxS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNjcmlwdHMpCi17Ci0gICAgaWYgKCFwZGZEb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cg
PSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7Ci0gICAgaWYgKCFwZGZDYXRh
bG9nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2YgYWxs
IGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5hbWVz
RGljdGlvbmFyeTsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRmQ2F0
YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KLSAgICBD
R1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOwotICAgIGlmICghQ0dQREZEaWN0
aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmphdmFT
Y3JpcHROYW1lVHJlZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBuYW1lcyBhcmUg
YXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCi0gICAgVmVj
dG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOwotICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRy
ZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKLSAgICBzaXplX3Qgb2JqZWN0Q291bnQg
PSBvYmplY3RzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0Q291
bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlvbjsK
LSAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQREZP
YmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmphdmFT
Y3JpcHRBY3Rpb24pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQSBKYXZh
U2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQiLgot
ICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOwotICAgICAgICBpZiAoIUNHUERGRGljdGlv
bmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3RyY21w
KGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOwotICAgICAgICBDRkluZGV4IGxlbmd0aDsKLSAg
ICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOwotICAgICAgICBDR1BERlN0cmluZ1JlZiBzdHJp
bmc7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmIChDR1BE
RkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkpIHsK
LSAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgICAgICBkYXRhLmFk
b3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShzdHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAgICAg
IGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5dGVz
ID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENG
RGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rp
b25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAgICAg
ICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdHZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAgICAg
ICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExlbmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghYnl0ZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRlN0cmlu
Z0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBi
eXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmluZ0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmluZ0Vu
Y29kaW5nVVRGODsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHRD
RiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMsIGxl
bmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBzY3JpcHRzLmFwcGVuZChzY3JpcHQpOwotICAgIH0KLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVz
dElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0
cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCi0KLWNvbnN0IGludCBndXR0ZXJI
ZWlnaHQgPSAxMDsKLWNvbnN0IGludCBzaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IGludCBzaGFk
b3dPZmZzZXRZID0gLTI7Ci1jb25zdCBpbnQgc2hhZG93U2l6ZSA9IDc7Ci0KLVBhc3NSZWZQdHI8
QnVpbHRJblBERlZpZXc+IEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQot
ewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVpbHRJblBERlZpZXcoZnJhbWUpKTsKLX0KLQot
QnVpbHRJblBERlZpZXc6OkJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKiBmcmFtZSkKLSAgICA6IG1f
ZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUJ1aWx0SW5QREZWaWV3Ojp+QnVpbHRJblBERlZpZXcoKQot
ewotfQotCi1QbHVnaW5JbmZvIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkKLXsKLSAgICBQ
bHVnaW5JbmZvIGluZm87Ci0gICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsK
LQotICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKLSAgICBtaW1lQ2xhc3NJbmZvLnR5
cGUgPSJhcHBsaWNhdGlvbi9wZGYiOwotICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3Vt
ZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVu
ZCgicGRmIik7Ci0KLSAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKLSAgICBy
ZXR1cm4gaW5mbzsKLX0KLQotUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXco
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsK
LX0KLQotY29uc3QgUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXcoKSBjb25z
dAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxl
cigpKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCi17Ci0g
ICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGlj
YWxTY3JvbGxiYXI7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQot
ICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9
IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgo
KSkKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAg
ICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotICAg
IH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVy
dGljYWxTY3JvbGxiYXIpOwotCi0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1f
dmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNF
bXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBz
KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkgLSB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCkt
PnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3Jv
bGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOwotICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsK
LSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92ZXJ0aWNh
bFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVn
aW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVu
dFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChw
bHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICAKLSAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFmcmFt
ZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmIChoYWRTY3Jv
bGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCi0g
ICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwot
Ci0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLVBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERGVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdl
dCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBS
ZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwot
ICAgIGVsc2UgCi0gICAgICAgIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7
Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQo
KSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17
Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6
b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAob3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgd2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHdpbGxS
ZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwotCi0gICAgc2Nyb2xsYmFy
LT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNjcm9s
bGFibGVBcmVhKCk7Ci0gICAgc2Nyb2xsYmFyID0gMDsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6YWRkQXJjaGl2ZVJlc291cmNlKCkKLXsKLSAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sgdG8g
Zm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMgc2hv
dWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNvdXJjZXMuCi0KLSAgICAvLyBBZGQganVz
dCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMg
dG8gd29yay4KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXNpemVkUmVzcG9uc2U7Ci0gICAg
c3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVu
YW1lKTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFVSTChtX3NvdXJjZVVSTCk7IC8vIE5l
ZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZVBERlVSTC4KLSAgICBzeW50
aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBsaWNhdGlvbi9wZGYiKTsKLQotICAgIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUo
U2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1ZmZlci5nZXQoKSksIG1fc291cmNlVVJM
LCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBzeW50aGVzaXplZFJlc3Bv
bnNlKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigpLT5h
ZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKCkKLXsKLSAgICBhZGRBcmNoaXZlUmVzb3VyY2Uo
KTsKLQotICAgIG1fcGRmRG9jdW1lbnQuYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBhbGxv
Y10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKiltX2RhdGFCdWZmZXIuZ2V0KCldKTsKLQotICAgIGNh
bGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgY29udHJvbGxl
cigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
PiBzY3JpcHRzOwotICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3VtZW50
LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7Ci0KLSAgICBzaXplX3Qgc2NyaXB0Q291bnQg
PSBzY3JpcHRzLnNpemUoKTsKLSAgICBpZiAoIXNjcmlwdENvdW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDAp
OwotICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKLSAgICAgICAgSlNTdHJp
bmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQo
KSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAw
LCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7Ci0gICAgfQotCi0gICAgSlNH
bG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpjYWxj
dWxhdGVTaXplcygpCi17Ci0gICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXRO
dW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBhZ2VS
ZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRv
Y3VtZW50UmVmXSwgaSArIDEpOwotICAgICAgICBBU1NFUlQocGRmUGFnZSk7Ci0KLSAgICAgICAg
Q0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJveCk7
Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBDR1BE
RlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9wYWdl
Qm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7Ci0gICAgICAgIG1fcGRmRG9jdW1lbnRTaXplLnNl
dFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGJv
eC5zaXplLndpZHRoKSkpOwotICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5leHBhbmQoMCwgYm94
LnNpemUuaGVpZ2h0KTsKLSAgICB9Ci0gICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGd1
dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsKLSAg
ICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KLSAgICBtX3NvdXJjZVVSTCA9IHBhcmFt
ZXRlcnMudXJsOwotICAgIGlmICghcGFyYW1ldGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYg
IXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKLSAgICAgICAgY29udHJvbGxlcigpLT5sb2FkVVJM
KHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0
cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCBmYWxzZSk7Ci0KLSAg
ICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxpemVQbHVnaW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZnJhbWUp
IHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1l
KCktPnZpZXcoKSkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgfQotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBjb250ZW50QXJlYVdpbGxQYWludCgpOwot
Ci0gICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQotICAg
IGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklYTUU6IERyYXcgbG9hZGluZyBwcm9ncmVzcy4KLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcGFpbnRDb250ZW50KGdyYXBoaWNzQ29udGV4dCwgZGlydHlS
ZWN0KTsKLSAgICBwYWludENvbnRyb2xzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLX0K
LQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCog
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KGRpcnR5UmVjdCk7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBn
cmFwaGljc0NvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
bkhpZ2gpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7Ci0gICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOwotICAgIEludFJl
Y3QgY29udGVudFJlY3QoZGlydHlSZWN0KTsKLSAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9z
Y3JvbGxPZmZzZXQud2lkdGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAgIENH
Q29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLQotICAgIGludCBwYWdlVG9wID0gMDsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIEludFJlY3QgcGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOwotICAgICAgICBmbG9hdCBl
eHRyYU9mZnNldEZvckNlbnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lkdGgo
KSAtIHBhZ2VCb3gud2lkdGgoKSkgLyAyLjBmKSwgMC4wZik7Ci0gICAgICAgIGZsb2F0IGV4dHJh
T2Zmc2V0Rm9yQ2VudGVyaW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91
bmRmKChtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zm
c2V0WSkgLyAyLjBmKSwgMC4wZikgOiAwOwotCi0gICAgICAgIGlmIChwYWdlVG9wID4gY29udGVu
dFJlY3QubWF4WSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwYWdlVG9wICsg
cGFnZUJveC5oZWlnaHQoKSArIGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdo
dCA+PSBjb250ZW50UmVjdC55KCkpIHsKLSAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdl
ID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZd
LCBpICsgMSk7Ci0KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdY
IC0gcGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94LnkoKSAt
IHBhZ2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
YWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1NpemUs
IENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmZpbGxSZWN0KHBhZ2VCb3gpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5jbGVhclNoYWRvdygpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocGFn
ZUJveCk7Ci0KLSAgICAgICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBh
Z2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcGFnZVRvcCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0OwotICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0KCkg
LSBndXR0ZXJIZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRD
b250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQotewotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhckRp
cnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgc2Nyb2xsYmFyRGlydHlSZWN0Lm1vdmVCeShw
bHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54KCksIC1wbHVnaW5W
aWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotCi0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhpY3ND
b250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotICAgIH0KLQotICAgIEludFJlY3QgZGlydHlD
b3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwgZGlydHlSZWN0KTsK
LSAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIoMCwgZ3JhcGhp
Y3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp1
cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCi17Ci0g
ICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSk7Ci0KLSAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPmludmFsaWRhdGUoKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGludmFsaWRhdGVTY3JvbGxD
b3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IEJ1aWx0SW5QREZWaWV3OjpzbmFwc2hvdCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi1QbGF0Zm9ybUxheWVyKiBCdWlsdEluUERGVmlldzo6cGx1Z2luTGF5
ZXIoKQotewotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotYm9vbCBCdWlsdEluUERGVmll
dzo6aXNUcmFuc3BhcmVudCgpCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVk
IGZyb20gdGhlIHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6d2FudHNXaGVlbEV2ZW50cygp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Omdlb21ldHJ5
RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmIGNsaXBS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pCi17
Ci0gICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5TaXplKSB7Ci0gICAgICAgIC8vIE5vdGhp
bmcgdG8gZG8uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3BsdWdpblNpemUgPSBw
bHVnaW5TaXplOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBi
b29sKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZW
aWV3OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikK
LXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJMJiwg
dWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQs
IHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKLX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVl
c3RJRCk7Ci0KLSAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKLSAgICAgICAgbV9kYXRhQnVmZmVyLmFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0KLSAgICBDRkRhdGFBcHBlbmRCeXRl
cyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRl
cyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZpbmlzaExv
YWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwg
c3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgcGRmRG9jdW1lbnREaWRM
b2FkKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZhaWwodWludDY0X3Qg
c3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFt
SUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fZGF0YUJ1ZmZl
ci5jbGVhcigpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0
aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKLXsK
LSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhQnVmZmVyKQotICAgICAgICBtX2Rh
dGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLQotICAgIENGRGF0
YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFs
U3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkKLXsKLSAg
ICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2
ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAgbW91
c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBhbHNvIG5v
dGlmeSBzY3JvbGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNob3VsZCBhbHNvIHNlbmQgbW91
c2VFeGl0ZWQgdG8gaGlkZSBpdC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVudDo6
TW91c2VEb3duOiB7Ci0gICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBhcyB3aWxsIG1ha2UgRXZl
bnRIYW5kbGVyIHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdoZW4g
Y2xpY2tpbmcgc2Nyb2xsYmFycy4KLSAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGRuJ3QgY2hh
bmdlIGZvY3VzIGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFkeSBkaWQgdGhhdCBmb3IgdXMu
Ci0gICAgICAgIC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1zIGlzIGFkZGVkLCB3ZSdsbCBu
ZWVkIHRvIGFjdHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4gY2xpY2tpbmcgaW4gYSBmb3Jt
LgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDogewot
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50
KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5tb3Vz
ZVVwKHBsYXRmb3JtRXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVu
dCYgZXZlbnQpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0
Zm9ybShldmVudCk7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50
KHBsYXRmb3JtRXZlbnQpOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUVu
dGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgbW91c2VFbnRlcmVkQ29udGVu
dEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6Omhh
bmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAgICBtb3VzZUV4
aXRlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5Q
REZWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewot
ICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLX0KLQotTlBPYmplY3QqIEJ1aWx0
SW5QREZWaWV3OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAgIHJldHVybiAwOwot
fQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dGb2N1
c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6d2luZG93QW5kVmll
d0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVl
bkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nv
b3JkaW5hdGVzKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dWaXNpYmlsaXR5
Q2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NjYWxl
RmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLX0KLQotdWludDY0X3QgQnVpbHRJblBERlZpZXc6OnBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3Ry
aW5nJikKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9kZShM
YXllckhvc3RpbmdNb2RlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBCdWlsdEluUERGVmlldzo6
c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAgICByZXR1cm4g
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5Q
REZWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLmdldCgpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5QREZWaWV3Ojp2ZXJ0aWNh
bFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Ci19
Ci0KLUludFJlY3QgQnVpbHRJblBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewot
ICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIEJ1aWx0
SW5QREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgLy8gRklY
TUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJl
bnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFJlY3QgQnVp
bHRJblBERlZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdAotewotICAgIHJl
dHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3Njcm9s
bE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxpdCBwYXJ0cyB0aGF0IHJl
bWFpbiB2aXNpYmxlLgotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAs
IG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLX0KLQotaW50
IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdAotewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGlj
YWxTY3JvbGxiYXIpLmdldCgpOwotICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50
b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGNv
cmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5pc0FjdGl2ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0
OwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLSAgICBkaXJ0
eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwotICAgIGNvbnRyb2xsZXIo
KS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGNvbnRy
b2xsZXIoKS0+aW52YWxpZGF0ZShyZWN0KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWlu
dCBCdWlsdEluUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBpZiAo
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3Np
dGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBERlZp
ZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50
KDAsIDApOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hv
cml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0
aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9wbHVnaW5TaXplLmhlaWdodCgp
ICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4aW11bU9mZnNldC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Ci19Ci0KLWludCBCdWls
dEluUERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2lu
U2l6ZS5oZWlnaHQoKTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlV2lkdGgoKSBj
b25zdAotewotICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKLX0KLQotSW50U2l6ZSBC
dWlsdEluUERGVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wZGZE
b2N1bWVudFNpemU7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OnNjcm9sbGJhcnNDYW5CZUFj
dGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3Vt
ZW50KCktPmluUGFnZUNhY2hlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNjcm9sbGJh
clN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3JjZVVw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQg
YWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVy
bGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVy
ZSBzY3JvbGxiYXJzIHdlcmUuCi0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKLSAg
ICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIC8vIEFzIHNpemUgb2Yg
dGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVhciBv
ciB0byBkaXNhcHBlYXIuCi0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgU2Nyb2xsYWJs
ZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVy
ZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92
ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwotCi0g
ICAgcmV0dXJuIHBvaW50OwotfQotCi1zdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUoSlND
b250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZWaWV3
KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+cmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGpzUERG
RG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZWaWV3KiBw
ZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUo
b2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+ZGVyZWYoKTsKLX0KLQotSlNWYWx1ZVJlZiBCdWlsdElu
UERGVmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBC
dWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9IHBk
ZlZpZXctPm1fZnJhbWU7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUtPmNvcmVG
cmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY3R4KTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKLSAg
ICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwot
Ci0gICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotSlNPYmplY3RSZWYgQnVpbHRJblBERlZpZXc6
Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0YXRpYyBKU1N0YXRpY0Z1
bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInByaW50Iiwg
anNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfSwKLSAgICB9OwotCi0g
ICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9uID0gewot
ICAgICAgICAwLAotICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCi0gICAgICAgICJEb2Mi
LAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBqc1BERkRvY1N0YXRpY0Z1bmN0aW9u
cywKLSAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzUERG
RG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7Ci0KLSAg
ICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzkwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5TaW1wbGVQREZWaWV3LmgKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3X2gKKyNkZWZpbmUgQnVpbHRJblNpbXBsZVBERlZpZXdfaAorCisjaW5jbHVkZSAiUGx1
Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBK
U0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsK
K3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBCdWlsdElu
U2ltcGxlUERGVmlldyA6IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1aWx0SW5TaW1wbGVQREZW
aWV3PiBjcmVhdGUoV2ViRnJhbWUqKTsKKyAgICB+QnVpbHRJblNpbXBsZVBERlZpZXcoKTsKKwor
ICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdpbkluZm8oKTsKKworICAgIC8vIElu
LXByb2Nlc3MgUERGVmlld3MgZG9uJ3Qgc3VwcG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRp
b24uCisgICAgdmlydHVhbCBib29sIGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCdWlsdElu
U2ltcGxlUERGVmlldyhXZWJGcmFtZSopOworCisgICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24n
dCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5n
IEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgorICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcoKTsKKyAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CisK
KyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24p
OworICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisgICAgdm9pZCBwZGZEb2N1bWVudERp
ZExvYWQoKTsKKyAgICB2b2lkIGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdm9pZCBwYWludEJhY2tn
cm91bmQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
ZGlydHlSZWN0KTsKKyAgICB2b2lkIHBhaW50Q29udGVudChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgcGFpbnRD
b250cm9scyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBkaXJ0eVJlY3QpOworCisgICAgLy8gUGx1Zy1pbiBtZXRob2RzCisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gc25hcHNob3QoKTsK
KyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXll
cigpOworI2VuZGlmCisgICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJp
bGl0eURpZENoYW5nZSgpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmco
dWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2
NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRF
dmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3Vs
dCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVh
bUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFt
SUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7CisgICAgdmlydHVhbCB2b2lk
IHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxh
c3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpT
dHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZp
cnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywg
aW50IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRp
bmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNl
bGxlZCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVs
RXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29udGV4dE1lbnVF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRG
b2N1cyhib29sKTsKKyAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hh
bmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHVp
bnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBP
VkVSUklERTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRl
Q2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFu
Z2VkKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFs
dWUpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0
aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKKworICAgIHZpcnR1YWwgUmV0YWluUHRyPFBE
RkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9wZGZEb2N1bWVudDsgfQorCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgbWV0aG9kcy4KKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9s
bGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0
IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlv
bikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpT
Y3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBib29sIHNj
cm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3aWxsIGtlZXAg
Y3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1h
dGUuCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUs
IGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJSSURFOworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhl
IG90aGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zOyB0aGlzIG9uZSBpcyBlbm91Z2ggdG8gZ2V0IHNj
cm9sbGJhciBoaXQgdGVzdGluZyB3b3JraW5nLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNj
cm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QgT1ZF
UlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNv
bnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgT1ZFUlJJREU7CisKKyAgICBK
U09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMgSlNWYWx1
ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgV2ViQ29yZTo6
SW50U2l6ZSBtX3BsdWdpblNpemU7CisKKyAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOwor
CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgUmV0YWluUHRyPENGTXV0YWJs
ZURhdGFSZWY+IG1fZGF0YUJ1ZmZlcjsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9w
ZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7Cisg
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNs
dWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRh
bFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJhbWU7CisKKyAgICBXZWJDb3JlOjpJbnRTaXpl
IG1fc2Nyb2xsT2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBCdWlsdEluU2ltcGxlUERGVmlld19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5TaW1wbGVQREZWaWV3Lm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmlldy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWJhNjlhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluU2ltcGxlUERGVmll
dy5tbQpAQCAtMCwwICsxLDg5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiQnVpbHRJblNpbXBsZVBERlZpZXcuaCIKKworI2ltcG9ydCAi
UERGS2l0SW1wb3J0cy5oIgorI2ltcG9ydCAiUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiU2hhcmVh
YmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJFdmVudC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252
ZXJzaW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KKyNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5o
PgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVz
b3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Rv
Y3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBI
ZWFkZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Ny
b2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgdm9p
ZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9uYXJ5UmVm
IHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKK3sKKyAgICBDR1BERkFy
cmF5UmVmIG5hbWVzOworICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAi
TmFtZXMiLCAmbmFtZXMpKSB7CisgICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BERkFycmF5
R2V0Q291bnQobmFtZXMpIC8gMjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1l
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0OworICAgICAg
ICAgICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0KTsKKyAg
ICAgICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQREZEaWN0
aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJldHVybjsK
KworICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0
aW9uYXJ5UmVmIGtpZDsKKyAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFyeShraWRz
LCBpLCAma2lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBlbmRWYWx1ZXNJ
blBERk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYgdHJlZSwg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQoreworICAgIGFwcGVuZFZhbHVlc0lu
UERGTmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOworfQorCitzdGF0aWMgdm9p
ZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRvY3VtZW50
LCBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQoreworICAgIGlmICgh
cGRmRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHUERGRGljdGlvbmFyeVJlZiBw
ZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQpOworICAgIGlm
ICghcGRmQ2F0YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRoZSBkaWN0aW9u
YXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgorICAgIENHUERGRGljdGlvbmFy
eVJlZiBuYW1lc0RpY3Rpb25hcnk7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9u
YXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0IiBuYW1lIHRy
ZWUuCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsKKyAgICBpZiAo
IUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAiSmF2YVNjcmlw
dCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUg
bmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVz
LgorICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKKyAgICBnZXRBbGxWYWx1ZXNJ
blBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7CisgICAgc2l6ZV90IG9i
amVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3Jp
cHRBY3Rpb247CisgICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVycHJldF9j
YXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25h
cnksICZqYXZhU2NyaXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBlIG9mICJKYXZh
U2NyaXB0Ii4KKyAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKKyAgICAgICAgaWYgKCFD
R1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFjdGlvblR5cGUp
IHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKKyAgICAgICAgQ0ZJbmRleCBs
ZW5ndGg7CisgICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKKyAgICAgICAgQ0dQREZTdHJp
bmdSZWYgc3RyaW5nOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOworICAgICAg
ICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZz
dHJlYW0pKSB7CisgICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0KSk7Cisg
ICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAgICAgICAgICBs
ZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
Q0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJpbmcp
KSB7CisgICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJpbmcpOwor
ICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVzWzBdID09
IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgOiBr
Q0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2Ny
aXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlmICghc2NyaXB0KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsK
KyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRfdCBwZGZEb2N1
bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBt
dWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitjb25zdCBp
bnQgZ3V0dGVySGVpZ2h0ID0gMTA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7Citjb25z
dCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOworY29uc3QgaW50IHNoYWRvd1NpemUgPSA3OworCitQ
YXNzUmVmUHRyPEJ1aWx0SW5TaW1wbGVQREZWaWV3PiBCdWlsdEluU2ltcGxlUERGVmlldzo6Y3Jl
YXRlKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1aWx0SW5T
aW1wbGVQREZWaWV3KGZyYW1lKSk7Cit9CisKK0J1aWx0SW5TaW1wbGVQREZWaWV3OjpCdWlsdElu
U2ltcGxlUERGVmlldyhXZWJGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorewor
fQorCitCdWlsdEluU2ltcGxlUERGVmlldzo6fkJ1aWx0SW5TaW1wbGVQREZWaWV3KCkKK3sKK30K
KworUGx1Z2luSW5mbyBCdWlsdEluU2ltcGxlUERGVmlldzo6cGx1Z2luSW5mbygpCit7CisgICAg
UGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5OYW1lKCk7
CisKKyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAgbWltZUNsYXNzSW5mby50
eXBlID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBwZGZEb2N1
bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9ucy5hcHBl
bmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7CisgICAg
cmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVn
aW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRyb2xs
ZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVn
aW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmll
dyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnVwZGF0
ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikgeworICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1
bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZE
b2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1f
cGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0g
Y3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3Rl
cCA9IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsK
KworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1
Z2luU2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCkt
PngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFy
KQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpLCAwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJl
Y3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3Jv
bGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgo
KSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3Qu
Y29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9Cisg
ICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmll
dygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhh
c1Njcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7CisgICAgICAgIGlm
IChoYXNTY3JvbGxiYXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKworICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVpbHRJblNpbXBsZVBERlZpZXc6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9s
bGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGRpZEFkZEhvcml6b250YWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICBlbHNlIAorICAgICAgICBkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmll
dygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgp
OworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBz
Y3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSk7CisgICAgZWxzZQorICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Ny
b2xsYmFyLmdldCgpKTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAg
IHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOworICAgIHNjcm9sbGJh
ciA9IDA7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJj
ZSgpCit7CisgICAgLy8gRklYTUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNl
IHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQg
YXMgQ2FjaGVkUmVzb3VyY2VzLgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNv
bnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgUmVzb3Vy
Y2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uu
c2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc3ludGhlc2l6
ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0
VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRN
aW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNl
PiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENG
RGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIs
IFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmll
dygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJl
c291cmNlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBkZkRv
Y3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBtX3Bk
ZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0
YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygp
OworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0
ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0
KCkpKTsKKworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKKyAg
ICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVu
dFJlZl0sIHNjcmlwdHMpOworCisgICAgc2l6ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0cy5zaXpl
KCk7CisgICAgaWYgKCFzY3JpcHRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNHbG9i
YWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgwKTsKKyAgICBKU09iamVj
dFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9
IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNbaV0uZ2V0KCkpOworICAgICAgICBK
U0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRvYywgMCwgMCwgMCk7CisgICAgICAg
IEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOworICAgIH0KKworICAgIEpTR2xvYmFsQ29udGV4dFJl
bGVhc2UoY3R4KTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6Y2FsY3VsYXRlU2l6
ZXMoKQoreworICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQ
YWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBh
Z2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJl
Zl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBi
b3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgICAg
ICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0
Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFw
cGVuZChJbnRSZWN0KGJveCkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5zZXRXaWR0aCht
YXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3guc2l6ZS53
aWR0aCkpKTsKKyAgICAgICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGJveC5zaXplLmhl
aWdodCk7CisgICAgfQorICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFuZCgwLCBndXR0ZXJIZWln
aHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAg
Ly8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VVUkwgPSBwYXJhbWV0
ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9hZGVyICYmICFw
YXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVSTChw
ZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBTdHJp
bmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOworCisgICAg
Y29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmRlc3Ryb3koKQoreworICAgIGlmIChtX2Zy
YW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVG
cmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Cit9CisKK3Zv
aWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgY29udGVudEFyZWFXaWxs
UGFpbnQoKTsKKworICAgIHBhaW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7CisKKyAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJv
Z3Jlc3MuCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRl
eHQsIGRpcnR5UmVjdCk7CisgICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5
UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50QmFja2dyb3VuZChH
cmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3ND
b250ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChkaXJ0
eVJlY3QpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwYWludENvbnRlbnQoR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29u
dGV4dCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
b3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZFNtb290
aEZvbnRzKHRydWUpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3
aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBncmFwaGljc0NvbnRleHQtPmNsaXAo
ZGlydHlSZWN0KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7CisgICAgY29u
dGVudFJlY3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7CisgICAgZ3JhcGhpY3ND
b250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Njcm9sbE9mZnNl
dC5oZWlnaHQoKSk7CisKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisK
KyAgICBpbnQgcGFnZVRvcCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VC
b3hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBtX3BhZ2VCb3hl
c1tpXTsKKyAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0gbWF4KHJvdW5k
ZigobV9wbHVnaW5TaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4wZiksIDAuMGYp
OworICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9wYWdlQm94ZXMu
c2l6ZSgpID09IDEpID8gbWF4KHJvdW5kZigobV9wbHVnaW5TaXplLmhlaWdodCgpIC0gcGFnZUJv
eC5oZWlnaHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsKKworICAgICAg
ICBpZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9mZnNldEZvckNl
bnRlcmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7CisgICAgICAgICAg
ICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3Vt
ZW50LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworCisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4
dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdZIC0gcGFnZUJveC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKKworICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRv
d09mZnNldFkpLCBzaGFkb3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKKworICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwKHBhZ2VCb3gpOworCisgICAgICAgICAgICBDR0NvbnRleHREcmF3
UERGUGFnZShjb250ZXh0LCBwZGZQYWdlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
cmVzdG9yZSgpOworICAgICAgICB9CisgICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQo
KSArIGd1dHRlckhlaWdodDsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQs
IDAsIC1wYWdlQm94LmhlaWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQg
QnVpbHRJblNpbXBsZVBERlZpZXc6OnBhaW50Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsK
KyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAg
IHNjcm9sbGJhckRpcnR5UmVjdC5tb3ZlQnkocGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2Nh
dGlvbigpKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXco
KS0+ZnJhbWVSZWN0KCkueCgpLCAtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS55KCkpOworCisg
ICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsK
KworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsK
KyAgICB9CisKKyAgICBJbnRSZWN0IGRpcnR5Q29ybmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3Jv
bGxDb3JuZXJSZWN0KCksIGRpcnR5UmVjdCk7CisgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkt
PnBhaW50U2Nyb2xsQ29ybmVyKDAsIGdyYXBoaWNzQ29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsK
K30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRl
eHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3Qo
KSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBCdWlsdEluU2ltcGxlUERGVmll
dzo6c25hcHNob3QoKQoreworICAgIHJldHVybiAwOworfQorCisjaWYgUExBVEZPUk0oTUFDKQor
UGxhdGZvcm1MYXllciogQnVpbHRJblNpbXBsZVBERlZpZXc6OnBsdWdpbkxheWVyKCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKK2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6Omlz
VHJhbnNwYXJlbnQoKQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9t
IHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OndhbnRzV2hlZWxFdmVudHMo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKQoreworICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgeworICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wbHVnaW5T
aXplID0gcGx1Z2luU2l6ZTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgQnVp
bHRJblNpbXBsZVBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIEJ1
aWx0SW5TaW1wbGVQREZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6
OmZyYW1lRGlkRmFpbCh1aW50NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0
KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNw
b25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgS1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
bmFtZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1
bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmls
ZW5hbWU7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCit2
b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBz
dHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgQVNTRVJUX1VO
VVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAg
aWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVy
LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwor
fQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVp
bnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlE
ID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgpOwor
fQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0
cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGFCdWZmZXIu
Y2xlYXIoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmlldzo6bWFudWFsU3RyZWFtRGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1M
ZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
Cit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworfQorCit2
b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKKyAg
ICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisK
KyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBs
ZVBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQoreworICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOworfQorCit2b2lkIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptYW51YWxTdHJl
YW1EaWRGYWlsKGJvb2wpCit7CisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK2Jvb2wg
QnVpbHRJblNpbXBsZVBERlZpZXc6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVu
dCYgZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIg
ZWZmZWN0LiBTaG91bGQgYWxzbyBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICAvLyBSZXR1
cm5pbmcgZmFsc2UgYXMgd2lsbCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWlu
LCB3aGljaCBpcyBhcHByb3ByaWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCisgICAgICAg
IC8vIElkZWFsbHksIHdlIHdvdWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5W
aWV3IGFscmVhZHkgZGlkIHRoYXQgZm9yIHVzLgorICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9y
IFBERiBmb3JtcyBpcyBhZGRlZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1
Zy1pbiB3aGVuIGNsaWNraW5nIGluIGEgZm9ybS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBs
YXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxh
dGZvcm1FdmVudCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFBsYXRm
b3JtV2hlZWxFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdl
Yk1vdXNlRXZlbnQmKQoreworICAgIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVNb3VzZUxl
YXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdEluU2ltcGxlUERGVmll
dzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICAv
LyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51LgorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBX
ZWJLZXlib2FyZEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0
KiBCdWlsdEluU2ltcGxlUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKK3sKKyAg
ICByZXR1cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBCdWlsdEluU2ltcGxl
UERGVmlldzo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgQnVpbHRJblNp
bXBsZVBERlZpZXc6OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sKK30KKwordm9pZCBCdWlsdElu
U2ltcGxlUERGVmlldzo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9p
ZCBCdWlsdEluU2ltcGxlUERGVmlldzo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQp
Cit7Cit9CisKK3VpbnQ2NF90IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpwbHVnaW5Db21wbGV4VGV4
dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQnVp
bHRJblNpbXBsZVBERlZpZXc6OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYpCit7
Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNldExheWVySG9zdGluZ01vZGUoTGF5
ZXJIb3N0aW5nTW9kZSkKK3sKK30KKworI2VuZGlmCisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZp
ZXc6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCit2b2lkIEJ1aWx0
SW5TaW1wbGVQREZWaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30K
KworYm9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZWaWV3OjpoYW5kbGVT
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCit7CisgICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30K
KworU2Nyb2xsYmFyKiBCdWlsdEluU2ltcGxlUERGVmlldzo6aG9yaXpvbnRhbFNjcm9sbGJhcigp
Cit7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKK30KKworU2Nyb2xs
YmFyKiBCdWlsdEluU2ltcGxlUERGVmlldzo6dmVydGljYWxTY3JvbGxiYXIoKQoreworICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworfQorCitJbnRSZWN0IEJ1aWx0SW5TaW1w
bGVQREZWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxi
YXIoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkpOworICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0KKyAgICByZXR1cm4g
SW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBCdWlsdEluU2ltcGxlUERGVmlldzo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXYWxrIHVw
IHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1lIG9y
IFJlbmRlckxheWVyLgorICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IEJ1aWx0SW5TaW1wbGVQ
REZWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKTsKK30KKwordm9pZCBCdWlsdEluU2ltcGxlUERGVmll
dzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3Jv
bGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgIC8vIEZJWE1F
OiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJsaXQgcGFydHMgdGhhdCBy
ZW1haW4gdmlzaWJsZS4KKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAw
LCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Cit9CisKK2lu
dCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9s
bGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJl
Y3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9j
YXRpb24oKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigp
KTsKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKK30KKwordm9pZCBC
dWlsdEluU2ltcGxlUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Cit9CisK
K2Jvb2wgQnVpbHRJblNpbXBsZVBERlZpZXc6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0
LmhlaWdodCgpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
CitJbnRQb2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAor
eworICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9m
ZnNldC5oZWlnaHQoKSk7Cit9CisKK0ludFBvaW50IEJ1aWx0SW5TaW1wbGVQREZWaWV3OjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsK
K30KKworSW50UG9pbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6Om1heGltdW1TY3JvbGxQb3NpdGlv
bigpIGNvbnN0Cit7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGlj
YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCkgOiAwOworCisgICAgSW50UG9pbnQgbWF4aW11bU9mZnNldChtX3BkZkRvY3VtZW50
U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAr
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgIG1heGltdW1PZmZzZXQuY2xhbXBOZWdh
dGl2ZVRvWmVybygpOworICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OworfQorCitpbnQgQnVpbHRJ
blNpbXBsZVBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bs
dWdpblNpemUuaGVpZ2h0KCk7Cit9CisKK2ludCBCdWlsdEluU2ltcGxlUERGVmlldzo6dmlzaWJs
ZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7Cit9CisK
K0ludFNpemUgQnVpbHRJblNpbXBsZVBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOworfQorCitib29sIEJ1aWx0SW5TaW1wbGVQREZW
aWV3OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhcGx1Z2lu
VmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOworfQorCit2b2lkIEJ1
aWx0SW5TaW1wbGVQREZWaWV3OjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNl
VXBkYXRlKQoreworICAgIGlmICghZm9yY2VVcGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIElmIHRoZSBQREYgd2FzIHNjcm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBh
bmQgc2Nyb2xsYmFycyBjaGFuZ2UgdG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBk
aXNwbGF5IHdoaXRlIHJlY3RhbmdsZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgorICAgIEludFBv
aW50IG5ld1Njcm9sbE9mZnNldCA9IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyht
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisgICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9m
ZnNldCk7CisKKyAgICAvLyBBcyBzaXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Ny
b2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3IgdG8gZGlzYXBwZWFyLgorICAgIHVwZGF0ZVNj
cm9sbGJhcnMoKTsKKworICAgIFNjcm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKK30K
KworSW50UG9pbnQgQnVpbHRJblNpbXBsZVBERlZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygp
LT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVy
ZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlv
bigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKworICAgIHJldHVybiBwb2ludDsKK30KKwor
Ym9vbCBCdWlsdEluU2ltcGxlUERGVmlldzo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQnVpbHRJblNpbXBsZVBE
RlZpZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBCdWlsdEluU2ltcGxlUERGVmll
dzo6c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBK
U09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblNpbXBsZVBERlZpZXcqIHBkZlZpZXcg
PSBzdGF0aWNfY2FzdDxCdWlsdEluU2ltcGxlUERGVmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShv
YmplY3QpKTsKKyAgICBwZGZWaWV3LT5yZWYoKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NG
aW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgQnVpbHRJblNpbXBsZVBERlZpZXcq
IHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluU2ltcGxlUERGVmlldyo+KEpTT2JqZWN0R2V0
UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVlUmVm
IEJ1aWx0SW5TaW1wbGVQREZWaWV3Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIEJ1aWx0SW5TaW1wbGVQREZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8
QnVpbHRJblNpbXBsZVBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
CisgICAgV2ViRnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworCisgICAgUGFnZSogcGFn
ZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7CisKKyAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29y
ZUZyYW1lKTsKKworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCitK
U09iamVjdFJlZiBCdWlsdEluU2ltcGxlUERGVmlldzo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJl
ZiBjdHgpCit7CisgICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5j
dGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgMCwgMCwgMCB9LAorICAgIH07CisKKyAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRp
b24ganNQREZEb2NDbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgIDAsCisgICAgICAgIGtKU0Ns
YXNzQXR0cmlidXRlTm9uZSwKKyAgICAgICAgIkRvYyIsCisgICAgICAgIDAsCisgICAgICAgIDAs
CisgICAgICAgIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAorICAgICAgICBqc1BERkRvY0luaXRp
YWxpemUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyAgICB9
OworCisgICAgc3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUo
JmpzUERGRG9jQ2xhc3NEZWZpbml0aW9uKTsKKworICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4
LCBqc1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggZDE5N2E2Ny4uNDU3
YTU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
bi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaApAQCAt
MTg4LDYgKzE4OCwxNSBAQCBwdWJsaWM6CiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFu
ZGxlIHRoZSBwYXNzZWQgaW4ga2V5Ym9hcmQgZXZlbnQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1
cm4gdHJ1ZSBpZiBpdCBwcm9jZXNzZWQgdGhlIGV2ZW50LgogICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSA9IDA7CiAgICAgCisgICAg
Ly8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4gZWRpdGluZyBjb21t
YW5kLiBUaGUgcGx1Zy1pbiBzaG91bGQgcmV0dXJuIHRydWUgaWYgaXQgZXhlY3V0ZWQgdGhlIGNv
bW1hbmQuCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpID0gMDsKKyAgICAKKyAgICAv
LyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIHRoZSBn
aXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRF
bmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpID0gMDsKKyAgICAKKyAgICAvLyBBc2sg
dGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0byBvdmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4K
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkgPSAwOwor
ICAgIAogICAgIC8vIFRlbGxzIHRoZSBwbHVnLWluIGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAg
dmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKaW5kZXggMGY0ZmQ3MC4uNDEzZTE4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkuY3BwCkBAIC00MDMsNiArNDAzLDMzIEBAIHZvaWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJv
b2wgaGFzRm9jdXMpCiAgICAgbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U2V0Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbklu
c3RhbmNlSUQpOwogfQogCitib29sIFBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRp
bmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9s
bGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5kOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBoYW5k
bGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICBib29sIGlzRW5hYmxlZCA9IGZhbHNl
OworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OklzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmRO
YW1lKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQ6OlJlcGx5KGlzRW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNFbmFibGVkOworfQorICAgIAorYm9vbCBQ
bHVnaW5Qcm94eTo6c2hvdWxkVXNlRnVsbFBhZ2VQbHVnaW5TY2FsaW5nKCkKK3sKKyAgICBib29s
IGlzRW5hYmxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNob3VsZFVzZUZ1bGxQ
YWdlUGx1Z2luU2NhbGluZygpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpTaG91
bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmc6OlJlcGx5KGlzRW5hYmxlZCksIG1fcGx1Z2luSW5z
dGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaXNFbmFi
bGVkOworfQorCiBOUE9iamVjdCogUGx1Z2luUHJveHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCgpCiB7CiAgICAgLy8gU2VuZGluZyB0aGUgc3luY2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNh
dXNlIHVzIHRvIGRpc3BhdGNoIGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5oCmluZGV4IDdhMzZjMWEuLmYzZjc1ZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCkBAIC0xMDEsNiArMTAx
LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMo
Ym9vbCk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKSBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlRnVsbFBhZ2VQ
bHVnaW5TY2FsaW5nKCk7CisgICAgCiAgICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0
YWJsZU5QT2JqZWN0KCk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCB3aW5k
b3dGb2N1c0NoYW5nZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggYTFlODEyNi4uMTczYmJjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMjcxLDYg
KzI3MSw3IEBAIFBsdWdpblZpZXc6OlBsdWdpblZpZXcoUGFzc1JlZlB0cjxIVE1MUGx1Z0luRWxl
bWVudD4gcGx1Z2luRWxlbWVudCwgUGFzc1JlZlB0cjxQCiAjZW5kaWYKICAgICAsIG1fbWFudWFs
U3RyZWFtU3RhdGUoU3RyZWFtU3RhdGVJbml0aWFsKQogICAgICwgbV9wbHVnaW5TbmFwc2hvdFRp
bWVyKHRoaXMsICZQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQsIHBsdWdpblNu
YXBzaG90VGltZXJEZWxheSkKKyAgICAsIG1fZnVsbFBhZ2VQbHVnaW5TY2FsZUZhY3RvcigxKQog
ewogICAgIG1fd2ViUGFnZS0+YWRkUGx1Z2luVmlldyh0aGlzKTsKIH0KQEAgLTQyNyw2ICs0Mjgs
MTggQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQogICAgIHZp
ZXdHZW9tZXRyeURpZENoYW5nZSgpOwogfQogCit2b2lkIFBsdWdpblZpZXc6OnNldEZ1bGxQYWdl
UGx1Z2luU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yLCBJbnRQb2ludCkKK3sKKyAgICBt
X2Z1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IgPSBzY2FsZUZhY3RvcjsKKyAgICBtX3dlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNj
YWxlRmFjdG9yKSk7CisgICAgcGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKCk7Cit9CisKK2RvdWJs
ZSBQbHVnaW5WaWV3OjpmdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4g
bV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBh
Z2VEZXN0cm95ZWQoKQogewogICAgIG1fd2ViUGFnZSA9IDA7CkBAIC03NjAsNiArNzczLDE2IEBA
IHZvaWQgUGx1Z2luVmlldzo6aGFuZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmIChkaWRI
YW5kbGVFdmVudCkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CisgICAg
Citib29sIFBsdWdpblZpZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgcmV0dXJuIG1fcGx1Z2lu
LT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworfQorICAgIAor
Ym9vbCBQbHVnaW5WaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lKQoreworICAgIHJldHVybiBtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQoY29tbWFuZE5hbWUpOworfQogCiB2b2lkIFBsdWdpblZpZXc6Om5vdGlmeVdpZGdldChXaWRn
ZXROb3RpZmljYXRpb24gbm90aWZpY2F0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKaW5kZXggMTNlMGE5Ny4uMjkxZTQxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC03OSwx
MCArNzksMTcgQEAgcHVibGljOgogCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkg
c2hvdWxkIGhhdmUgdG8ga25vdyBhYm91dCB0aGUgcGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhj
ZXB0IHRoZSBwbHVnLWluIHZpZXcgaXRzZWxmLgogICAgIFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlcigpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0RnVsbFBhZ2VQbHVn
aW5TY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3IsIFdlYkNvcmU6OkludFBvaW50IG9yaWdp
bik7CisgICAgZG91YmxlIGZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKTsKKyAgICBib29sIHNo
b3VsZFVzZUZ1bGxQYWdlUGx1Z2luU2NhbGluZygpIHsgcmV0dXJuIG1fcGx1Z2luLT5zaG91bGRV
c2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKTsgfQogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JE
aWRDaGFuZ2UoKTsKICAgICB2b2lkIHdlYlBhZ2VEZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2lu
VmlldyhQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiwgUGFzc1JlZlB0cjxQ
bHVnaW4+LCBjb25zdCBQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOwogICAgIHZpcnR1
YWwgflBsdWdpblZpZXcoKTsKQEAgLTIzNiw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fdHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdDsKICAgICAvLyBU
aGlzIHRpbWVyIGlzIHVzZWQgd2hlbiBwbHVnaW4gc25hcHNob3R0aW5nIGlzIGVuYWJsZWQsIHRv
IGNhcHR1cmUgYSBwbHVnaW4gcGxhY2Vob2xkZXIuCiAgICAgV2ViQ29yZTo6RGVmZXJyYWJsZU9u
ZVNob3RUaW1lcjxQbHVnaW5WaWV3PiBtX3BsdWdpblNuYXBzaG90VGltZXI7CisKKyAgICBkb3Vi
bGUgbV9mdWxsUGFnZVBsdWdpblNjYWxlRmFjdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDZkYTI0MjUuLmMyOTQ2
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xMTQ2LDEwICsxMTQ2
LDkgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzdG9yZVZpZXdTdGF0ZSgpCiAgICAg
Ly8gSW5mb3JtIHRoZSBVSSBwcm9jZXNzIG9mIHRoZSBzY2FsZSBmYWN0b3IuCiAgICAgZG91Ymxl
IHNjYWxlRmFjdG9yID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5oaXN0b3J5KCkt
PmN1cnJlbnRJdGVtKCktPnBhZ2VTY2FsZUZhY3RvcigpOwogCi0gICAgLy8gQSBzY2FsZSBmYWN0
b3Igb2YgMC4wIG1lYW5zIHRoZSBoaXN0b3J5IGl0ZW0gYWN0dWFsbHkgaGFzIHRoZSAiZGVmYXVs
dCBzY2FsZSBmYWN0b3IiIG9mIDEuMC4KLSAgICBpZiAoIXNjYWxlRmFjdG9yKQotICAgICAgICBz
Y2FsZUZhY3RvciA9IDEuMDsKLSAgICBtX2ZyYW1lLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNjYWxlRmFjdG9yKSk7CisgICAg
Ly8gQSBzY2FsZSBmYWN0b3Igb2YgMCBtZWFucyB0aGUgaGlzdG9yeSBpdGVtIGhhcyB0aGUgZGVm
YXVsdCBzY2FsZSBmYWN0b3IsIHRodXMgd2UgZG8gbm90IG5lZWQgdG8gdXBkYXRlIGl0LgorICAg
IGlmIChzY2FsZUZhY3RvcikKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZShzY2FsZUZhY3RvcikpOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuIFdlYkNvcmUgc2hv
dWxkIGJlIGNvcnJlY3RseSBpbnZhbGlkYXRpbmcKICAgICAvLyB0aGUgdmlldyBvbiByZXN0b3Jl
cyBmcm9tIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCkBAIC0xMjE2LDcgKzEyMTUsNyBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJh
bWUoQ2FjaGVkRnJhbWUqKQogICAgIGJvb2wgaXNNYWluRnJhbWUgPSB3ZWJQYWdlLT5tYWluV2Vi
RnJhbWUoKSA9PSBtX2ZyYW1lOwogICAgIAogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXNwb25zZSgpOwotICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFp
bkZyYW1lICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0
aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOworICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRh
dGlvbiA9IGlzTWFpbkZyYW1lICYmIHdlYlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0
aW9uRm9yUmVzcG9uc2UocmVzcG9uc2UpOwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9
IHRydWU7CiB9CiAKQEAgLTEyMzAsNyArMTIyOSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogICAgIEludFJlY3QgY3VycmVu
dFZpc2libGVDb250ZW50Qm91bmRzID0gbV9mcmFtZS0+dmlzaWJsZUNvbnRlbnRCb3VuZHMoKTsK
IAogICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlID0gbV9mcmFtZS0+Y29yZUZy
YW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpOwotICAgIG1fZnJh
bWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2Up
OworICAgIG1fZnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlvbiA9IGlzTWFpbkZyYW1lICYmIHdl
YlBhZ2UtPnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UocmVzcG9uc2Up
OwogICAgIG1fZnJhbWVDYW1lRnJvbVBhZ2VDYWNoZSA9IGZhbHNlOwogCiAgICAgbV9mcmFtZS0+
Y29yZUZyYW1lKCktPmNyZWF0ZVZpZXcod2ViUGFnZS0+c2l6ZSgpLCBiYWNrZ3JvdW5kQ29sb3Is
IC8qIHRyYW5zcGFyZW50ICovIGZhbHNlLCBJbnRTaXplKCksIHNob3VsZFVzZUZpeGVkTGF5b3V0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRl
eCBlMjZlYjg4Li45MWQ5ODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCkBAIC0xMDcsNiArMTA3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlQnVmZmVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVzcG9uc2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRWYWx1ZS5oPgpA
QCAtMTUwLDcgKzE1MSwxMCBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVk
ZSAiQnVpbHRJblBERlZpZXcuaCIKKyNpbmNsdWRlICJCdWlsdEluU2ltcGxlUERGVmlldy5oIgor
I2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2luY2x1ZGUgIkJ1aWx0SW5QREZLaXRWaWV3Lmgi
CisjZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0yMTgsNiArMjIyLDcgQEAg
V2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLCBtX2FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxp
emF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoZmFsc2UpCiAgICAgLCBtX2FydGlmaWNpYWxQbHVn
aW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fcGRmS2l0UGx1Z2luRW5hYmxl
ZChmYWxzZSkKICNpZiBQTEFURk9STShNQUMpCiAgICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxz
ZSkKICAgICAsIG1faXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCkKQEAgLTQ2Niw4ICs0NzEsMTMgQEAgUGFzc1JlZlB0cjxQbHVn
aW4+IFdlYlBhZ2U6OmNyZWF0ZVBsdWdpbihXZWJGcmFtZSogZnJhbWUsIEhUTUxQbHVnSW5FbGVt
ZW50KiBwbHUKICAgICBpZiAocGx1Z2luUGF0aC5pc051bGwoKSkgewogI2lmIFBMQVRGT1JNKE1B
QykKICAgICAgICAgaWYgKHBhcmFtZXRlcnMubWltZVR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIK
LSAgICAgICAgICAgIHx8IChwYXJhbWV0ZXJzLm1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwYXJhbWV0
ZXJzLnVybC5wYXRoKCkubG93ZXIoKS5lbmRzV2l0aCgiLnBkZiIpKSkKLSAgICAgICAgICAgIHJl
dHVybiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKGZyYW1lKTsKKyAgICAgICAgICAgIHx8IChwYXJh
bWV0ZXJzLm1pbWVUeXBlLmlzRW1wdHkoKSAmJiBwYXJhbWV0ZXJzLnVybC5wYXRoKCkubG93ZXIo
KS5lbmRzV2l0aCgiLnBkZiIpKSkgeworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorICAgICAg
ICAgICAgaWYgKHBkZktpdFBsdWdpbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
QnVpbHRJblBERktpdFZpZXc6OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiBCdWlsdEluU2ltcGxlUERGVmlldzo6Y3JlYXRlKGZyYW1lKTsKKyAgICAgICAgfQogI2Vs
c2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKICNlbmRpZgpAQCAtNjE4LDExICs2Mjgs
MzAgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViUGFnZTo6dHJhY2tlZFJlcGFpbnRS
ZWN0cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0b3IpOwogfQogCitz
dGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCktPmlzUGx1Z2luRG9jdW1lbnQoKSkgeworICAgICAgICBQ
bHVnaW5Eb2N1bWVudCogcGx1Z2luRG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxQbHVnaW5Eb2N1bWVu
dCo+KGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9
IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkp
OworICAgICAgICByZXR1cm4gcGx1Z2luVmlldzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kwogdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47CisKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0g
cGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykgewor
ICAgICAgICBwbHVnaW5WaWV3LT5oYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJn
dW1lbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGZyYW1lLT5lZGl0b3Io
KS0+Y29tbWFuZChjb21tYW5kTmFtZSkuZXhlY3V0ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMiw2
ICs2NjEsMTEgQEAgYm9vbCBXZWJQYWdlOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1l
KGZyYW1lKTsKKyAgICAKKyAgICBpZiAocGx1Z2luVmlldykKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsKKyAgICAKICAgICBF
ZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5k
TmFtZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5h
YmxlZCgpOwogfQpAQCAtMTA3MSw4ICsxMTA1LDE0IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2Ny
ZWVuRGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJRCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBh
Z2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogeworICAgIFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7
CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+c2hvdWxkVXNlRnVsbFBhZ2VQbHVn
aW5TY2FsaW5nKCkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+c2V0RnVsbFBhZ2VQbHVnaW5TY2Fs
ZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAg
IGZvciAoSGFzaFNldDxQbHVnaW5WaWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5W
aWV3cy5iZWdpbigpLCBlbmQgPSBtX3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgICgqaXQpLT5wYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2
ICsxMTIxLDEwIEBAIHZvaWQgV2ViUGFnZTo6c2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3Qg
SW50UG9pbnQmIG9yaWdpbikKIAogZG91YmxlIFdlYlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNv
bnN0CiB7CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZSht
X3BhZ2UtPm1haW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5z
aG91bGRVc2VGdWxsUGFnZVBsdWdpblNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZp
ZXctPmZ1bGxQYWdlUGx1Z2luU2NhbGVGYWN0b3IoKTsKKyAgICAKICAgICByZXR1cm4gbV9wYWdl
LT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTUzMSw5ICsxNTc1LDE1IEBAIHZvaWQgV2Vi
UGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0ZSA9IDA7CiAgICAgRnJhbWUqIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRv
cigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAgICAgICAgc3RhdGUgPSBjb21tYW5kLnN0YXRl
KCk7Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5k
LmlzRW5hYmxlZCgpOworICAgICAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmll
d0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwbHVnaW5WaWV3KQorICAg
ICAgICAgICAgaXNFbmFibGVkID0gcGx1Z2luVmlldy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
Y29tbWFuZE5hbWUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFu
ZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKKyAgICAg
ICAgICAgIHN0YXRlID0gY29tbWFuZC5zdGF0ZSgpOworICAgICAgICAgICAgaXNFbmFibGVkID0g
Y29tbWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZhbGlkYXRlQ29tbWFu
ZENhbGxiYWNrKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQsIHN0YXRlLCBjYWxsYmFja0lEKSk7CkBA
IC0yMDUxLDYgKzIxMDEsOCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0
IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogICAgIG1fYXJ0aWZpY2lhbFBsdWdpbkluaXRp
YWxpemF0aW9uRGVsYXlFbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZl
cmVuY2VzS2V5OjphcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWRLZXko
KSk7CiAKICAgICBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5n
ZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWRLZXkoKSk7CisgICAgCisgICAgbV9wZGZLaXRQbHVnaW5FbmFibGVkID0g
c3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwZGZLaXRQbHVnaW5F
bmFibGVkS2V5KCkpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBm
cm9tIG1hY3JvIGV4cGFuc2lvbiBmb3IgYWxsIHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBj
dXJyZW50bHkgZG9uJ3QgbWF0Y2ggdGhlIG5hbWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2Ug
YXJlCkBAIC0zMzkxLDQgKzM0NDMsMjQgQEAgdm9pZCBXZWJQYWdlOjpzZXRTY3JvbGxpbmdQZXJm
b3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKICAgICBmcmFtZVZpZXctPnNldFNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKK3N0YXRpYyBi
b29sIGNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIFN0cmluZyBwbHVnaW5QYXRoOworICAgIGJvb2wgYmxvY2tlZDsKKyAgICAK
KyAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgp
LCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Okdl
dFBsdWdpblBhdGg6OlJlcGx5KHBsdWdpblBhdGgsIGJsb2NrZWQpLCAwKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0Vt
cHR5KCk7Cit9CisKK2Jvb2wgV2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25G
b3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNw
b25zZS5taW1lVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgYSBw
bHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNo
b3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgorICAg
IHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IDRkOTUyNDYuLmI1MjM3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTEzLDYgKzExMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFByaW50Q29udGV4dDsKICAgICBjbGFzcyBS
YW5nZTsKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogICAgIGNsYXNzIFJlc291cmNlUmVx
dWVzdDsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAgICAgY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKQEAgLTU4MSw2ICs1ODIsOCBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgbmF0aXZlV2luZG93
SGFuZGxlKCkgeyByZXR1cm4gbV9uYXRpdmVXaW5kb3dIYW5kbGU7IH0KICNlbmRpZgogCisgICAg
Ym9vbCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsKKwogICAgIGJvb2wgYXN5bmNocm9ub3VzUGx1
Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hc3luY2hyb25vdXNQ
bHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQ7IH0KICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1Bs
dWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hc3luY2hyb25vdXNQ
bHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQgPSBlbmFibGVkOyB9CiAgICAgYm9vbCBhc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVnaW5zKCkgY29uc3QgeyBy
ZXR1cm4gbV9hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWRGb3JBbGxQbHVn
aW5zOyB9CkBAIC01OTIsNiArNTk1LDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVy
Zm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZChib29sKTsKKyAgICAKKyAgICBib29sIHBkZktpdFBsdWdpbkVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BkZktpdFBsdWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lkIHNl
dFBERktpdFBsdWdpbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGRmS2l0UGx1Z2luRW5hYmxl
ZCA9IGVuYWJsZWQ7IH0KKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgSGFzaFNldDxT
dHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworI2Vu
ZGlmCiAKIHByaXZhdGU6CiAgICAgV2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBh
Z2VDcmVhdGlvblBhcmFtZXRlcnMmKTsKQEAgLTc5NCw2ICs4MDQsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQ7CiAKICAg
ICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsKKyAgICAKKyAgICBi
b29sIG1fcGRmS2l0UGx1Z2luRW5hYmxlZDsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBX
aGV0aGVyIHRoZSBjb250YWluaW5nIHdpbmRvdyBpcyB2aXNpYmxlIG9yIG5vdC4KQEAgLTkyMyw2
ICs5MzUsOCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92
aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICBXZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVj
dG9yQ2xpZW50OworCisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1l
VHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KaW5kZXggMjIyNzNjMS4uOWQzYmFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQg
QEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlBy
ZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogewogICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
ciA9IHRoaXMtPmluc3BlY3RvcigpKQogICAgICAgICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVz
ZXNXZWJLaXRVc2VySW50ZXJmYWNlKHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJl
bmNlc0tleTo6aW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAg
Qk9PTCBvbWl0UERGU3VwcG9ydCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOworICAgIGlmICghcGRmS2l0
UGx1Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3VwcG9ydCkgeworICAgICAgICAvLyBXZSB3YW50
IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4K
KyAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzID0gcGRm
QW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBD
YXNlRm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9IG1pbWVUeXBlcy5iZWdpbigpOyBpdCAhPSBt
aW1lVHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21S
ZXByZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAgfQogfQogCiB0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKQEAgLTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBX
ZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZEb2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4
dCwgUERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAKKy8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUg
aWRlYWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24uIChhbmQgbm93IGl0J3MgZHVwbGljYXRlZCBo
ZXJlIGFuZCBpbiBXZWJDb250ZXh0TWFjKQorSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFz
aD4gV2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpCit7CisgICAgSGFzaFNldDxT
dHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVzOworICAgIAorICAgIG1pbWVUeXBlcy5h
ZGQoImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bv
c3RzY3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRkKCJ0ZXh0L3BkZiIpOworICAgIAorICAgIHJl
dHVybiBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggOThjOTMwMi4uNmY2N2VkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAg
dm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAgIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwpOwogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXBy
ZXNlbnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVw
cmVzZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRh
dGlvbltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4
dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVl
KTsKIApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQ
b3J0Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQpCiB9CiAjZW5kaWYKIAotc3RhdGljIGJvb2wg
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Ci17Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0gICAgYm9vbCBibG9ja2VkOwotCi0gICAgaWYg
KCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9u
c2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Q
YXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0K
LWJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
bWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1l
VHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSWYgYSBwbHVnLWluIGV4
aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtl
IHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJlc2VudGF0aW9uLgotICAgIHJldHVybiAh
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2UpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6
OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVz
VG9DbGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMocmVzb3VyY2VDYWNo
ZXNUb0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNzNm
MDc5Ni4uZWNjYmI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAg
LTE1MCwxNCArMTUwLDEyIEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAgcGlkX3Qg
cHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsgfQot
I2VuZGlmIAorI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUU5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpIHsgcmV0dXJuIG1fbmV0d29ya0FjY2Vz
c01hbmFnZXI7IH0KICNlbmRpZgogCi0gICAgYm9vbCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsK
LQogICAgIC8vIFRleHQgQ2hlY2tpbmcKICAgICBjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0
Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Q2hlY2tlclN0YXRlOyB9CiAKQEAg
LTMyMCw4ICszMTgsNiBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gPiBtX21lc3NhZ2VQb3J0Q2hhbm5l
bHM7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fbWlt
ZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsKLQogICAgIFRleHRDaGVja2VyU3RhdGUg
bV90ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdlb2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0
aW9uTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168568</attachid>
            <date>2012-10-13 15:48:33 -0700</date>
            <delta_ts>2012-10-13 15:55:32 -0700</delta_ts>
            <desc>attached the wrong patch</desc>
            <filename>pdfkit.diff</filename>
            <type>text/plain</type>
            <size>228064</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li4yNmQ5MTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgV2ViUERGRG9jdW1lbnRFeHRy
YXMgYW5kIHBhcnRzIG9mIFdlYkpTUERGRG9jIGludG8gV2ViQ29yZTo6UERGRG9jdW1lbnRTY3Jp
cHRpbmcsCisgICAgICAgIHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gV2ViS2l0
IGFuZCBXZWJLaXQyLgorCisgICAgICAgIEFkZCBhIHBsdWctaW4gdGhhdCB1c2VzIFBERktpdCB0
byBkaXNwbGF5IFBERnMsIGluc3RlYWQgb2YgdXNpbmcgUERGS2l0IGluIHRoZQorICAgICAgICBV
SVByb2Nlc3MgZm9yIGZ1bGwtcGFnZSBQREZzLiBUaGlzIG5ldyBwbHVnaW4gd2lsbCBhbHNvIGJl
IHVzZWQgZm9yIGlubGluZSBQREZzCisgICAgICAgIGluIHBsYWNlIG9mIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3IChuw6llIEJ1aWx0SW5QREZWaWV3KS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmlu
OgorICAgICAgICBFeHBvcnQgYSBmZXcgbW9yZSBtZXRob2RzIHRvIFdlYktpdCgyKS4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3Nl
IFBhc3RlYm9hcmQuaCBhcyBhIHByaXZhdGUgaGVhZGVyIHNvIFBERlBsdWdpbiBjYW4gdXNlIGl0
LgorICAgICAgICBBZGQgUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwL2guCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICBNYWtlIGludmFsaWRhdGVTY3JvbGxi
YXIvaW52YWxpZGF0ZVNjcm9sbENvcm5lciB2aXJ0dWFsLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBERkRvY3VtZW50U2NyaXB0aW5nOjptYWtlSlNQREZEb2MpOiBGYWN0b3JlZCBvdXQg
b2YgQnVpbHRJblBERlZpZXcgYW5kIFBERlZpZXcuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRW
YWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IpOiBGYWN0b3JlZCBvdXQgb2YgQnVpbHRJblBE
RlZpZXcgYW5kIFBERlZpZXcuCisgICAgICAgIChXZWJDb3JlOjpnZXRBbGxWYWx1ZXNJblBERk5h
bWVUcmVlKTogRmFjdG9yZWQgb3V0IG9mIEJ1aWx0SW5QREZWaWV3IGFuZCBQREZWaWV3LgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRTY3JpcHRpbmc6OmdldEFsbFNjcmlwdHNJblBERkRv
Y3VtZW50KTogRmFjdG9yZWQgb3V0IG9mIEJ1aWx0SW5QREZWaWV3IGFuZCBQREZWaWV3LgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50U2NyaXB0aW5nLmg6IEFkZGVk
LgorICAgICAgICAoUERGRG9jdW1lbnRTY3JpcHRpbmcpOiBFeHBvc2UgbWFrZUpTUERGRG9jIGFu
ZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudCwgZm9yIHVzZSBpbiBQREZQbHVnaW4vU2ltcGxl
UERGUGx1Z2luL1BERlZpZXcuCisKIDIwMTItMTAtMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHdp
bGwgbmV2ZXIgcmVzdG9yZSB0aGUgY3VycmVudCBjb250ZXh0IHRvIG51bGwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KaW5kZXggZmQyY2Q3Ny4uMzMwZjU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI4
NSwxMSArMjg1LDE0IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWExNWNvbnRlbnRzUmVz
aXplZEV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTZoYW5kbGVXaGVlbEV2ZW50RVJL
TlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTd3
aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTl3aWxsU3Rh
cnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWExOWludmFsaWRhdGVT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFUktOU183SW50UmVjdEUKK19fWk5LN1dlYkNvcmUxNFNj
cm9sbGFibGVBcmVhMjFtb3VzZUVudGVyZWRTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pO
N1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjJpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyRVJLTlNfN0lu
dFJlY3RFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjNkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyNHNldFNj
cm9sbGJhck92ZXJsYXlTdHlsZUVOU18yMVNjcm9sbGJhck92ZXJsYXlTdHlsZUUKIF9fWk43V2Vi
Q29yZTE0U2Nyb2xsYWJsZUFyZWEyNWRpZEFkZEhvcml6b250YWxTY3JvbGxiYXJFUE5TXzlTY3Jv
bGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjd3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCitfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjdu
b3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMjhzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzRVJLTlNfOEludFBv
aW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI5d2lsbFJlbW92ZUhvcml6b250YWxT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhNnNj
cm9sbEVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RWYKQEAgLTMy
MSw2ICszMjQsOCBAQCBfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZwogX19aTjdXZWJDb3JlMTRzZXRN
ZXRhZGF0YVVSTEVSTjNXVEY2U3RyaW5nRVJLUzFfUzRfCiBfX1pON1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybTVmbGlwWUV2CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTVzY2FsZUVkCitf
X1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKK19fWk5LN1dlYkNvcmUxNUFm
ZmluZVRyYW5zZm9ybTZ5U2NhbGVFdgogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm04bXVs
dGlwbHlFUktTMF8KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOXRyYW5zbGF0ZUVkZAog
X19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm1DMUVkZGRkZGQKQEAgLTM1MSw2ICszNTYsNyBA
QCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dFdgogX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0RmlsbEdyYWRpZW50RU4z
V1RGMTBQYXNzUmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxOHNldFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDE5c2V0SXNDQUxheWVyQ29udGV4dEViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIw
ZW5kVHJhbnNwYXJlbmN5TGF5ZXJFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMHNl
dFNob3VsZFNtb290aEZvbnRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjFzZXRD
b21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKQEAgLTQ2Nyw2ICs0NzMs
OCBAQCBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJpCiBf
X1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43V2ViQ29yZTE4RE9N
V2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pO
N1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhEb2N1bWVudEUKK19fWk43
V2ViQ29yZTEwUGFzdGVib2FyZDE3Z2VuZXJhbFBhc3RlYm9hcmRFdgorX19aTjdXZWJDb3JlMTBQ
YXN0ZWJvYXJkMTR3cml0ZVBsYWluVGV4dEVSS04zV1RGNlN0cmluZ0VOUzBfMThTbWFydFJlcGxh
Y2VPcHRpb25FCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEwdW5pcXVlTmFtZUV2
CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9yVHlwZUVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNzdHJpbmdGb3JUeXBl
RVJLTjNXVEY2U3RyaW5nRQpAQCAtNTQyLDYgKzU1MCw4IEBAIF9fWk43V2ViQ29yZTIwVXNlckdl
c3R1cmVJbmRpY2F0b3JEMUV2CiBfX1pON1dlYkNvcmUyMG1ha2VSR0JBMzJGcm9tRmxvYXRzRWZm
ZmYKIF9fWk43V2ViQ29yZTIwcHJvdG9jb2xJc0phdmFTY3JpcHRFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUyMFNwYWNlU3BsaXRTdHJpbmdEYXRhRDFFdgorX19aTjdXZWJDb3JlMjBQREZE
b2N1bWVudFNjcmlwdGluZzEybWFrZUpTUERGRG9jRVBLMTVPcGFxdWVKU0NvbnRleHRQRnZTM19Q
MTNPcGFxdWVKU1ZhbHVlRVBGUEtTNF9TM19TNV9TNV9tUEtTOV9QUzlfRVBGdlM1X0VQdgorX19a
TjdXZWJDb3JlMjBQREZEb2N1bWVudFNjcmlwdGluZzI2Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1l
bnRFUDEzQ0dQREZEb2N1bWVudFJOM1dURjZWZWN0b3JJTlMzXzlSZXRhaW5QdHJJUEsxMF9fQ0ZT
dHJpbmdFRUxtMEVFRQogX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENvbnRyb2xsZXIxMWl0ZW1B
dEluZGV4RWkKIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgog
X19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25F
dmVudEVOU18xM1BsYXRmb3JtRXZlbnQ0VHlwZUViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE4YTk3Ni4uOGIxODNjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNzg1LDYgKzc4NSw4IEBACiAJCTJEOUEyNDc1MTVCOUMyRTMwMEQzNDUyNyAvKiBET01ET01T
ZWN1cml0eVBvbGljeUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDlBMjQ3MTE1QjlDMjk1MDBEMzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQ
b2xpY3lJbnRlcm5hbC5oICovOyB9OwogCQkyRDlBMjQ3NjE1QjlDMkY0MDBEMzQ1MjcgLyogRE9N
RE9NU2VjdXJpdHlQb2xpY3kuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUEyNDcwMTVCOUMyOTUwMEQzNDUyNyAvKiBET01E
T01TZWN1cml0eVBvbGljeS5oICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyog
bGluZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsK
KwkJMkRBMjA4NjUxNjI5NzlFQTAwRTc5QjBDIC8qIFBERkRvY3VtZW50U2NyaXB0aW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTIwODYzMTYy
OTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGluZy5jcHAgKi87IH07CisJCTJEQTIw
ODY2MTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMjA4NjQxNjI5NzlFQTAwRTc5
QjBDIC8qIFBERkRvY3VtZW50U2NyaXB0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9N
Rm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkUwODg4RDIxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwICovOyB9Owog
CQkyRTA4ODhENTExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUwODg4RDMxMTQ4ODQ4QTAwQUY0
MjY1IC8qIEpTRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJMkUwODg4RTYxMTQ4ODRFMjAwQUY0MjY1
IC8qIEpTRE9NRm9ybURhdGFDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkUwODg4RTUxMTQ4ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURh
dGFDdXN0b20uY3BwICovOyB9OwpAQCAtMTQ0MCw3ICsxNDQyLDcgQEAKIAkJNEFEMDE3M0QxMjdF
ODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDAxNzNCMTI3RTgyODYwMDE1MDM1RiAvKiBK
U0hUTUxPdXRwdXRFbGVtZW50LmggKi87IH07CiAJCTRBRjFBRDNFMTNGRDIzQTQwMEFBOTU5MCAv
KiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEFGMUFEM0MxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvci5jcHAgKi87IH07CiAJCTRBRjFBRDNGMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVu
dERpc3BhdGNoTWVkaWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBRjFBRDNEMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0
QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA4QzUwQUYxOUVFNDAwNjUxMjdGIC8q
IFBhc3RlYm9hcmQuaCAqLzsgfTsKKwkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3Rl
Ym9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRC
MjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEIyNzA5ODMwQUYyRTVFMDAwNjUxMjdG
IC8qIFBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QjI3MDk4MTBBRjJFNUUwMDA2NTEyN0YgLyogUGFzdGVib2FyZE1hYy5tbSAq
LzsgfTsKIAkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjMwNDNDNjBBRTAzNzAzMDBBODI2
NDcgLyogU291bmQuaCAqLzsgfTsKIAkJNEIzMDQzQzkwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5k
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIz
MDQzQzgwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5kTWFjLm1tICovOyB9OwpAQCAtNzg5MSw2ICs3
ODkzLDggQEAKIAkJMkQ5QTI0NzExNUI5QzI5NTAwRDM0NTI3IC8qIERPTURPTVNlY3VyaXR5UG9s
aWN5SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9NU2Vj
dXJpdHlQb2xpY3lJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlB
MjQ3MjE1QjlDMkM3MDBEMzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQb2xpY3kubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01ET01TZWN1cml0eVBvbGljeS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEwRkY3IC8q
IGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyREEyMDg2MzE2Mjk3OUVBMDBFNzlCMEMgLyogUERGRG9jdW1lbnRTY3JpcHRp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUERGRG9jdW1lbnRT
Y3JpcHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREEyMDg2NDE2Mjk3
OUVBMDBFNzlCMEMgLyogUERGRG9jdW1lbnRTY3JpcHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUERGRG9jdW1lbnRTY3JpcHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkUwODg4QzMxMTQ4ODNBOTAwQUY0MjY1IC8qIERPTUZvcm1EYXRhLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01Gb3JtRGF0YS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRm9ybURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUg
LyogSlNET01Gb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RP
TUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTc5Myw2ICsxOTc5
Nyw4IEBACiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2Uu
Y3BwICovLAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdl
LmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwICovLAorCQkJCTJEQTIwODYzMTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVu
dFNjcmlwdGluZy5jcHAgKi8sCisJCQkJMkRBMjA4NjQxNjI5NzlFQTAwRTc5QjBDIC8qIFBERkRv
Y3VtZW50U2NyaXB0aW5nLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNnOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIyMjc3LDYgKzIyMjgzLDggQEAKIAkJCWlzYSA9IFBCWEhlYWRl
cnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAorCQkJCTJEQTIwODY2MTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGlu
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3Rl
Ym9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlE
QjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI0NTc1LDcgKzI0NTgzLDYgQEAKIAkJCQlGRDMxNjBBMzEyQjAyNkY3MDBDMUEz
NTkgLyogUGFubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc2QUMxMzBERDdBRDVDMDA0MTVG
MzQgLyogUGFyc2VyVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDQTEyNTFG
MTJEMDAzRUYyNjkgLyogUGFzc3dvcmRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTRC
MjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTk4OTA1NzE0RTlDMjgwMDBFOEQxOEIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjc1MzU4MDBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg4REQ0ODcwQjQ2MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODY3OCw2ICsyODY4NSw3IEBACiAJCQkJMzE5NTVBODYx
NjBEMTk5MDAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNEJDODNGMTYxQ0YwNEEwMDRENTJGNCAvKiBSZXNvdXJjZUJ1ZmZlci5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxNEJDODQyMTYxQ0YwNUMwMDRENTJGNCAvKiBSZXNvdXJjZUJ1
ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyREEyMDg2NTE2Mjk3OUVBMDBFNzlCMEMgLyog
UERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCBjNzQ0YWY2Li45MzBjZGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAgLTEwNiwxMCArMTA2LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0ID0gMDsKLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgPSAwOwotICAgIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKICAgICAvLyBD
b252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0d2VlbiB0aGUgc2Nyb2xsYmFyIGFuZCBpdHMgY29u
dGFpbmluZyB2aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZlZjZjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudFNjcmlwdGluZy5jcHAKQEAgLTAsMCAr
MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBERkRvY3VtZW50U2NyaXB0aW5nLmgiCisKKyNpZiBVU0UoQ0cpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNPYmplY3RSZWYgUERGRG9jdW1lbnRTY3JpcHRpbmc6Om1ha2VKU1BERkRv
YyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlh
bGl6ZSwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIHByaW50LCBKU09iamVjdEZpbmFs
aXplQ2FsbGJhY2sgZmluYWxpemUsIHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljIEpTU3RhdGlj
RnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQi
LCBwcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwKKyAgICB9OworICAgIAorICAg
IHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsKKyAg
ICAgICAgMCwKKyAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAorICAgICAgICAiRG9jIiwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAganNQREZEb2NTdGF0aWNGdW5jdGlvbnMs
CisgICAgICAgIGluaXRpYWxpemUsIGZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlND
bGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRpb24pOworICAgIAorICAgIHJldHVybiBK
U09iamVjdE1ha2UoY29udGV4dCwganNQREZEb2NDbGFzcywgZGF0YSk7Cit9CisKK3N0YXRpYyB2
b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlS
ZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENHUERG
QXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUs
ICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJy
YXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5h
bWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7CisgICAg
ICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwor
ICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQ
REZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lk
cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAg
IENHUERGRGljdGlvbmFyeVJlZiBraWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rp
b25hcnkoa2lkcywgaSwgJmtpZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBw
ZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5
UmVmIHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBl
bmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKwor
dm9pZCBQREZEb2N1bWVudFNjcmlwdGluZzo6Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQ
REZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
PiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0
Q2F0YWxvZyhwZGZEb2N1bWVudCk7CisgICAgaWYgKCFwZGZDYXRhbG9nKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZl
bCBuYW1lIHRyZWVzLgorICAgIENHUERGRGljdGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7Cisg
ICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIs
ICZuYW1lc0RpY3Rpb25hcnkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IHRo
ZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENHUERGRGljdGlv
bmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRE
aWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVU
cmVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRoZSBuYW1lcyBhcmUgYXJiaXRy
YXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCisgICAgVmVjdG9yPENH
UERGT2JqZWN0UmVmPiBvYmplY3RzOworICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoamF2
YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKKyAgICBzaXplX3Qgb2JqZWN0Q291bnQgPSBvYmpl
Y3RzLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdENvdW50
OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHRBY3Rpb247Cisg
ICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVycHJldF9jYXN0PENHUERGT2Jq
ZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25hcnksICZqYXZhU2Ny
aXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8g
QSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3Jp
cHQiLgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOworICAgICAgICBpZiAoIUNHUERG
RGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwg
c3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5k
ZXggbGVuZ3RoOworICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERG
U3RyaW5nUmVmIHN0cmluZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAg
ICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMi
LCAmc3RyZWFtKSkgeworICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAg
ICAgICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkp
OworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAg
ICAgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2Ug
aWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3Ry
aW5nKSkgeworICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5n
KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYm
IGJ5dGVzWzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGlu
Z1VuaWNvZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc2NyaXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlm
ICghc2NyaXB0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzY3Jp
cHRzLmFwcGVuZChzY3JpcHQpOworICAgIH0KK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50U2NyaXB0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudFNjcmlwdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjJiMGNkM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudFNjcmlwdGluZy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQREZEb2N1bWVudFNjcmlwdGluZ19oCisjZGVmaW5lIFBERkRv
Y3VtZW50U2NyaXB0aW5nX2gKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlv
bi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBERkRvY3VtZW50U2NyaXB0aW5nIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdEluaXRpYWxpemVDYWxsYmFjayBpbml0aWFsaXplLCBKU09iamVjdENhbGxB
c0Z1bmN0aW9uQ2FsbGJhY2sgcHJpbnQsIEpTT2JqZWN0RmluYWxpemVDYWxsYmFjayBmaW5hbGl6
ZSwgdm9pZCogZGF0YSk7CisgICAgc3RhdGljIHZvaWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1l
bnQoQ0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gPiYgc2NyaXB0cyk7CisKK3ByaXZhdGU6CisKK307CisKK30KKworI2VuZGlmIC8vIFVT
RShDRykKKworI2VuZGlmIC8vIFBERkRvY3VtZW50SW1hZ2VfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNTM5NmM4
Li5kNjUzYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTEwLTEzICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFt3azJdIEltcGxlbWVu
dCBCdWlsdEluUERGS2l0VmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTkyMDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNb3ZlIFdlYlBERkRvY3VtZW50RXh0cmFzIGFuZCBwYXJ0cyBvZiBXZWJKU1BE
RkRvYyBpbnRvIFdlYkNvcmU6OlBERkRvY3VtZW50U2NyaXB0aW5nLgorCisgICAgICAgICogV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJQREZEb2N1
bWVudEV4dHJhcy5oL21tLgorICAgICAgICBSZW1vdmUgV2ViSlNQREZEb2MuaC9tbS4KKwogMjAx
Mi0xMC0xMSAgQ2hyaXMgR3VhbiAgPGNocmlzLmd1YW5AdG9yY2htb2JpbGUuY29tLmNuPgogCiAg
ICAgICAgIFtCbGFja2JlcnJ5XSBtYWtlcyBOYXZpZ2F0b3JDb250ZW50VXRpbHMgd29yawpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNzVh
OTNmNi4uMWFiYTVlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC03NywxMCArNzcsNiBAQAogCQkzMTJFMkZFOTE0RTQ4MjE1MDA3Q0NB
MTggLyogV2ViTm90aWZpY2F0aW9uSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkUyRkU4MTRFNDgyMTUwMDdDQ0ExOCAvKiBXZWJOb3Rp
ZmljYXRpb25JbnRlcm5hbC5oICovOyB9OwogCQkzMUMxMUE2RTE0NzY1NTJFMDA0OUE0Q0MgLyog
V2ViTm90aWZpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMUMxMUE2QzE0NzY1NTJFMDA0OUE0Q0MgLyogV2ViTm90aWZpY2F0aW9u
Q2xpZW50LmggKi87IH07CiAJCTMxQzExQTZGMTQ3NjU1MkUwMDQ5QTRDQyAvKiBXZWJOb3RpZmlj
YXRpb25DbGllbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMUMxMUE2RDE0NzY1NTJFMDA0OUE0Q0MgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50Lm1t
ICovOyB9OwotCQkzN0I2RkI0RTEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRy
YXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QjZG
QjRDMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5oICovOyB9OwotCQkz
N0I2RkI0RjEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0I2RkI0RDEwNjM1MzBD
MDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gKi87IH07Ci0JCTM3RDFEQ0E4MTA2
NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERG
RG9jLmggKi87IH07Ci0JCTM3RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RDFEQ0E3
MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSAqLzsgfTsKIAkJM0FCMDJBRjYxMkMx
MzE5QjAwRkJCNjk0IC8qIFdlYlN0b3JhZ2VNYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gM0FCMDJBRjUxMkMxMzE5QjAwRkJCNjk0IC8qIFdl
YlN0b3JhZ2VNYW5hZ2VyLm1tICovOyB9OwogCQkzQUIwMkIwMDEyQzEzMkIyMDBGQkI2OTQgLyog
V2ViU3RvcmFnZU1hbmFnZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkFGRjEyQzEzMkIyMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1h
bmFnZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJM0FCQjNDN0ExMzA5QzNCNTAwRTkzRDk0IC8qIFdlYlN0b3JhZ2VUcmFja2VyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUJC
M0M3ODEzMDlDM0I1MDBFOTNEOTQgLyogV2ViU3RvcmFnZVRyYWNrZXJDbGllbnQuaCAqLzsgfTsK
QEAgLTQ3MCwxMCArNDY2LDYgQEAKIAkJMzUwODFEOTUwMkI2RDREODBBQ0EyQUNBIC8qIFdlYkhU
TUxWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJIVE1MVmlldy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM1MDgxRDk2MDJCNkQ0RDgwQUNBMkFDQSAvKiBX
ZWJIVE1MVmlld1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJIVE1MVmlld1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM1MDgxREFFMDJCNkQ0RjUwQUNB
MkFDQSAvKiBXZWJEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYkRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQkzN0I2RkI0QzEwNjM1MzBDMDAwRkRCM0Ig
LyogV2ViUERGRG9jdW1lbnRFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViUERGRG9jdW1lbnRFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MzdCNkZCNEQxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0cmFzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUERGRG9jdW1lbnRFeHRyYXMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3RDFEQ0E2MTA2NTkyOEMwMDY4RjdF
RiAvKiBXZWJKU1BERkRvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJK
U1BERkRvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzN0QxRENBNzEwNjU5MjhD
MDA2OEY3RUYgLyogV2ViSlNQREZEb2MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVuY29kaW5nID0g
NDsgcGF0aCA9IFdlYkpTUERGRG9jLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
OTQ0NjA2QjAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRHluYW1p
Y1Njcm9sbEJhcnNWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQkzOTQ0NjA2QzAyMEY1MEVEMEVDQTE3NjcgLyogV2ViRHluYW1p
Y1Njcm9sbEJhcnNWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgcGF0aCA9IFdlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDZF
MDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJQcmVmZXJlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByZWZlcmVuY2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMTA4NCwx
MCArMTA3Niw2IEBACiAJCTUxRTk0QzA3MDZDMDJDQTMwMEE5QjA5RSAvKiBQREYgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3RDFEQ0E2MTA2NTkyOEMw
MDY4RjdFRiAvKiBXZWJKU1BERkRvYy5oICovLAotCQkJCTM3RDFEQ0E3MTA2NTkyOEMwMDY4RjdF
RiAvKiBXZWJKU1BERkRvYy5tbSAqLywKLQkJCQkzN0I2RkI0QzEwNjM1MzBDMDAwRkRCM0IgLyog
V2ViUERGRG9jdW1lbnRFeHRyYXMuaCAqLywKLQkJCQkzN0I2RkI0RDEwNjM1MzBDMDAwRkRCM0Ig
LyogV2ViUERGRG9jdW1lbnRFeHRyYXMubW0gKi8sCiAJCQkJNTFFOTRDNjgwNkMwMzQ3NTAwQTlC
MDlFIC8qIFdlYlBERlJlcHJlc2VudGF0aW9uLmggKi8sCiAJCQkJNTFFOTRDNjkwNkMwMzQ3NTAw
QTlCMDlFIC8qIFdlYlBERlJlcHJlc2VudGF0aW9uLm1tICovLAogCQkJCTUxRTk0QzM0MDZDMDMy
MTIwMEE5QjA5RSAvKiBXZWJQREZWaWV3LmggKi8sCkBAIC0xNTM5LDcgKzE1MjcsNiBAQAogCQkJ
CTdBOEZGMEQxMTA3NTAyNEEwMEE4MEEwOCAvKiBXZWJJbnNwZWN0b3JQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5Mzk4MTBBMDA4MjRCRjAxMDA4REYwMzggLyogV2ViSmF2YVBsdWdJbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNDIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkphdmFT
Y3JpcHRUZXh0SW5wdXRQYW5lbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzdEMURDQTgxMDY1OTI4
QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA4NTA4
MjRCRjAxMDA4REYwMzggLyogV2ViS2V5R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTAxQjA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
Mzk4MTAxQzA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0RXJyb3JzLmggaW4gSGVhZGVycyAqLywK
QEAgLTE1OTEsNyArMTU3OCw2IEBACiAJCQkJOTM5ODEwMjUwODI0QkYwMTAwOERGMDM4IC8qIFdl
Yk5TV2luZG93RXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThBNTc5OTE0M0U3MjcwMDAx
MjVGNTAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzOTgxMDJBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzdCNkZCNEUxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBE
RkRvY3VtZW50RXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBNTA4MjRCRjAxMDA4
REYwMzggLyogV2ViUERGUmVwcmVzZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgx
MEE0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQREZWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUE4NzlCNjExQ0JFOUJGMDAzQzY2NEYgLyogV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTE5NTksNyArMTk0NSw2IEBACiAJCQkJMUM3QjBDNjYwRUIyNDY0RDAwQTI4
NTAyIC8qIFdlYkluc3BlY3RvckNsaWVudENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI4MDQx
NzcwMTIxN0E4MzEwMDQ2NkJBRSAvKiBXZWJJbnNwZWN0b3JGcm9udGVuZC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzOTgxMEU0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJKYXZhU2NyaXB0VGV4dElu
cHV0UGFuZWwubSBpbiBTb3VyY2VzICovLAotCQkJCTM3RDFEQ0E5MTA2NTkyOEMwMDY4RjdFRiAv
KiBXZWJKU1BERkRvYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTgxMTE3MDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJLZXlHZW5lcmF0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTEwMzA4
MjRCRjAxMDA4REYwMzggLyogV2ViS2l0RXJyb3JzLm0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTBDMzA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0TG9nZ2luZy5tIGluIFNvdXJjZXMgKi8sCkBA
IC0yMDAzLDcgKzE5ODgsNiBAQAogCQkJCTkzOTgxMENBMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJO
U1dpbmRvd0V4dHJhcy5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4QTU3OUExNDNFNzI3MDAwMTI1
RjUwIC8qIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM5ODEwRDAwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBhbmVsQXV0aGVudGljYXRpb25IYW5kbGVy
Lm0gaW4gU291cmNlcyAqLywKLQkJCQkzN0I2RkI0RjEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERG
RG9jdW1lbnRFeHRyYXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4MTExRjA4MjRCRjAxMDA4
REYwMzggLyogV2ViUERGUmVwcmVzZW50YXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4
MTExRTA4MjRCRjAxMDA4REYwMzggLyogV2ViUERGVmlldy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQTg3OUI3MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA2Y2ZmNGNiLi40ZmUwZGM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1v
dGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5Q
REZLaXRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgV2ViUERGRG9jdW1lbnRFeHRyYXMgYW5kIHBhcnRzIG9mIFdlYkpTUERGRG9jIGludG8g
V2ViQ29yZTo6UERGRG9jdW1lbnRTY3JpcHRpbmcuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkpT
UERGRG9jLm1tOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViSlNQREZEb2MuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAoanNQREZE
b2NJbml0aWFsaXplKTogQWRkZWQgZnJvbSBXZWJKU1BERkRvYy5tbSAodGhlc2UgYXJlIG5vdCBz
aGFyYWJsZSBpbiBXZWJDb3JlKS4KKyAgICAgICAgKGpzUERGRG9jRmluYWxpemUpOiBBZGRlZCBm
cm9tIFdlYkpTUERGRG9jLm1tICh0aGVzZSBhcmUgbm90IHNoYXJhYmxlIGluIFdlYkNvcmUpLgor
ICAgICAgICAoanNQREZEb2NQcmludCk6IEFkZGVkIGZyb20gV2ViSlNQREZEb2MubW0gKHRoZXNl
IGFyZSBub3Qgc2hhcmFibGUgaW4gV2ViQ29yZSkuCisgICAgICAgICgtW1dlYlBERlJlcHJlc2Vu
dGF0aW9uIGZpbmlzaGVkTG9hZGluZ1dpdGhEYXRhU291cmNlOl0pOiBVc2UgV2ViQ29yZTo6UERG
RG9jdW1lbnRTY3JpcHRpbmcuCisKIDIwMTItMTAtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRh
KCkgZnJvbSBTaGFyZWRCdWZmZXIgdG8gUmVzb3VyY2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSlNQREZEb2MuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSlNQREZEb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlNzU2
Yy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkpTUERGRG9jLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgot
Ci1AY2xhc3MgV2ViRGF0YVNvdXJjZTsKLQotSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29u
dGV4dFJlZiwgV2ViRGF0YVNvdXJjZSAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSlNQREZEb2MubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkpT
UERGRG9jLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDE2OWZlLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSlNQREZEb2MubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbXBvcnQgIldlYkpTUERGRG9jLmgiCi0KLSNpbXBvcnQgIldlYkRhdGFT
b3VyY2UuaCIKLSNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgiCi0j
aW1wb3J0ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2ViVmlldy5oIgotI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLQotc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXpl
KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBXZWJEYXRhU291
cmNlICpkYXRhU291cmNlID0gKFdlYkRhdGFTb3VyY2UgKilKU09iamVjdEdldFByaXZhdGUob2Jq
ZWN0KTsKLSAgICBDRlJldGFpbihkYXRhU291cmNlKTsKLX0KLQotc3RhdGljIHZvaWQganNQREZE
b2NGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCi17Ci0gICAgV2ViRGF0YVNvdXJjZSAqZGF0
YVNvdXJjZSA9IChXZWJEYXRhU291cmNlICopSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCk7Ci0g
ICAgQ0ZSZWxlYXNlKGRhdGFTb3VyY2UpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRv
Y1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIFdlYkRhdGFTb3VyY2UgKmRh
dGFTb3VyY2UgPSAoV2ViRGF0YVNvdXJjZSAqKUpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KTsKLQotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW2RhdGFTb3VyY2Ugd2ViRnJhbWVdIHdlYlZp
ZXddOwotICAgIENhbGxVSURlbGVnYXRlKHdlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnByaW50
RnJhbWVWaWV3OiksIFtbZGF0YVNvdXJjZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XSk7Ci0KLSAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotc3RhdGljIEpTU3RhdGljRnVu
Y3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKLSAgICB7ICJwcmludCIsIGpzUERG
RG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKLSAgICB7IDAsIDAsIDAgfSwKLX07Ci0KLXN0YXRpYyBKU0NsYXNz
RGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsKLSAgICAwLAotICAgIGtKU0Ns
YXNzQXR0cmlidXRlTm9uZSwKLSAgICAiRG9jIiwKLSAgICAwLAotICAgIDAsCi0gICAganNQREZE
b2NTdGF0aWNGdW5jdGlvbnMsCi0gICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFs
aXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCi19OwotCi1KU09iamVjdFJlZiBtYWtlSlNQ
REZEb2MoSlNDb250ZXh0UmVmIGN0eCwgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSkKLXsKLSAg
ICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZE
b2NDbGFzc0RlZmluaXRpb24pOwotCi0gICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERG
RG9jQ2xhc3MsIGRhdGFTb3VyY2UpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQREZEb2N1bWVudEV4dHJhcy5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQREZEb2N1bWVudEV4dHJhcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
ZGNlNDNlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9j
dW1lbnRFeHRyYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotQGNsYXNzIFBERkRvY3VtZW50Owot
Ci1OU0FycmF5ICphbGxTY3JpcHRzSW5QREZEb2N1bWVudChQREZEb2N1bWVudCAqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLm1tCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTJlZGY3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1lbnRFeHRyYXMubW0KKysrIC9kZXYvbnVsbApA
QCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW1wb3J0ICJXZWJQREZEb2N1bWVudEV4dHJhcy5oIgotCi0jaW1wb3J0ICJXZWJU
eXBlc0ludGVybmFsLmgiCi0jaW1wb3J0IDx3dGYvVmVjdG9yLmg+Ci0jaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW1wb3J0IDxQREZLaXQvUERGRG9jdW1lbnQuaD4KLSNpbXBvcnQgPG9iamMv
b2JqYy1ydW50aW1lLmg+Ci0KLSNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID09
IDEwNTAKLUBpbnRlcmZhY2UgUERGRG9jdW1lbnQgKEludGVybmFsKQotLSAoQ0dQREZEb2N1bWVu
dFJlZilkb2N1bWVudFJlZjsKLUBlbmQKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBhcHBlbmRWYWx1
ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9uYXJ5UmVmIHN1YnRyZWUsIFZl
Y3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKLXsKLSAgICBDR1BERkFycmF5UmVmIG5hbWVz
OwotICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiTmFtZXMiLCAmbmFt
ZXMpKSB7Ci0gICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQobmFt
ZXMpIC8gMjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lQ291bnQ7ICsraSkg
ewotICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0OwotICAgICAgICAgICAgQ0dQREZB
cnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0KTsKLSAgICAgICAgICAgIHZh
bHVlcy5hcHBlbmQob2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQ0dQREZBcnJheVJlZiBraWRzOwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0QXJy
YXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVf
dCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGtp
ZDsKLSAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFyeShraWRzLCBpLCAma2lkKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0
cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZ2V0QWxs
VmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYgdHJlZSwgVmVjdG9yPENHUERG
T2JqZWN0UmVmPiYgYWxsVmFsdWVzKQotewotICAgIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRy
ZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOwotfQotCi1OU0FycmF5ICphbGxTY3JpcHRzSW5Q
REZEb2N1bWVudChQREZEb2N1bWVudCAqZG9jdW1lbnQpCi17Ci0gICAgTlNNdXRhYmxlQXJyYXkg
KnNjcmlwdHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXldOwotICAgIENHUERGRG9jdW1lbnRSZWYg
cGRmRG9jdW1lbnQgPSBbZG9jdW1lbnQgZG9jdW1lbnRSZWZdOwotICAgIGlmICghcGRmRG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiBzY3JpcHRzOwotCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBk
ZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7Ci0gICAgaWYg
KCFwZGZDYXRhbG9nKQotICAgICAgICByZXR1cm4gc2NyaXB0czsKLQotICAgIC8vIEdldCB0aGUg
ZGljdGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KLSAgICBDR1BERkRp
Y3Rpb25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0
RGljdGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKLSAgICAg
ICAgcmV0dXJuIHNjcmlwdHM7Ci0KLSAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZh
U2NyaXB0IiBuYW1lIHRyZWUuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1l
VHJlZTsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9u
YXJ5LCAiSmF2YVNjcmlwdCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQotICAgICAgICByZXR1cm4g
c2NyaXB0czsKLQotICAgIC8vIFRoZSBuYW1lcyBhcmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBp
bnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCi0gICAgVmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmpl
Y3RzOwotICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBv
YmplY3RzKTsKLSAgICBzaXplX3Qgb2JqZWN0Q291bnQgPSBvYmplY3RzLnNpemUoKTsKLQotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7ICsraSkgewotICAgICAgICBDR1BE
RkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlvbjsKLSAgICAgICAgaWYgKCFDR1BERk9iamVj
dEdldFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQREZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBr
Q0dQREZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmphdmFTY3JpcHRBY3Rpb24pKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUg
YW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQiLgotICAgICAgICBjb25zdCBjaGFyKiBhY3Rp
b25UeXBlOwotICAgICAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFj
dGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0
IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMg
PSAwOwotICAgICAgICBDRkluZGV4IGxlbmd0aDsKLSAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3Ry
ZWFtOwotICAgICAgICBDR1BERlN0cmluZ1JlZiBzdHJpbmc7Ci0gICAgICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2
YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkpIHsKLSAgICAgICAgICAgIENHUERGRGF0YUZv
cm1hdCBmb3JtYXQ7Ci0gICAgICAgICAgICBkYXRhLmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0
YShzdHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRh
LmdldCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgp
KTsKLSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRpY3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlw
dEFjdGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAgICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJp
bmdHZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAgICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dl
dExlbmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYnl0ZXMpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBOU1N0cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxl
bmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAmJiBieXRlc1sxXSA9PSAweEZGKSA/IE5TVW5p
Y29kZVN0cmluZ0VuY29kaW5nIDogTlNVVEY4U3RyaW5nRW5jb2Rpbmc7Ci0gICAgICAgIE5TU3Ry
aW5nICpzY3JpcHQgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzOmJ5dGVzIGxlbmd0
aDpsZW5ndGggZW5jb2Rpbmc6ZW5jb2RpbmddOwotICAgICAgICBpZiAoIXNjcmlwdCkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFtzY3JpcHRzIGFkZE9iamVjdDpzY3JpcHRdOwot
ICAgICAgICBbc2NyaXB0IHJlbGVhc2VdOwotICAgIH0KLQotICAgIHJldHVybiBzY3JpcHRzOwot
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZSZXByZXNlbnRh
dGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRpb24u
bW0KaW5kZXggYTM2ODUzMy4uZGE2YmZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQREZSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tCkBAIC0yOSwxNiArMjksMTggQEAKICNpbXBv
cnQgIldlYlBERlJlcHJlc2VudGF0aW9uLmgiCiAKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VQcml2
YXRlLmgiCisjaW1wb3J0ICJXZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGluZy5oIgogI2lt
cG9ydCAiV2ViRnJhbWUuaCIKLSNpbXBvcnQgIldlYkpTUERGRG9jLmgiCiAjaW1wb3J0ICJXZWJO
U09iamVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViUERGRG9jdW1lbnRFeHRyYXMuaCIKICNpbXBv
cnQgIldlYlBERlZpZXcuaCIKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJp
bmdSZWZDRi5oPgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
REZEb2N1bWVudFNjcmlwdGluZy5oPgogCiBAaW1wbGVtZW50YXRpb24gV2ViUERGUmVwcmVzZW50
YXRpb24KIApAQCAtMTEwLDYgKzExMiwyOCBAQAogICAgIHJldHVybiBXZWJDRkF1dG9yZWxlYXNl
KHJlc3VsdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRS
ZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNv
dXJjZSA9IChXZWJEYXRhU291cmNlICopSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCk7CisgICAg
Q0ZSZXRhaW4oZGF0YVNvdXJjZSk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUo
SlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UgPSAo
V2ViRGF0YVNvdXJjZSAqKUpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpOworICAgIENGUmVsZWFz
ZShkYXRhU291cmNlKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0Nv
bnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlID0g
KFdlYkRhdGFTb3VyY2UgKilKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCk7CisgICAgCisg
ICAgV2ViVmlldyAqd2ViVmlldyA9IFtbZGF0YVNvdXJjZSB3ZWJGcmFtZV0gd2ViVmlld107Cisg
ICAgQ2FsbFVJRGVsZWdhdGUod2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cHJpbnRGcmFtZVZp
ZXc6KSwgW1tkYXRhU291cmNlIHdlYkZyYW1lXSBmcmFtZVZpZXddKTsKKyAgICAKKyAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKK30KKwogLSAodm9pZClmaW5pc2hlZExvYWRp
bmdXaXRoRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKIHsKICAgICBOU0Rh
dGEgKmRhdGEgPSBbZGF0YVNvdXJjZSBkYXRhXTsKQEAgLTEyNiwxOSArMTUwLDIwIEBACiAgICAg
UERGRG9jdW1lbnQgKmRvYyA9IFtbW1tzZWxmIGNsYXNzXSBQREZEb2N1bWVudENsYXNzXSBhbGxv
Y10gaW5pdFdpdGhEYXRhOmRhdGFdOwogICAgIFt2aWV3IHNldFBERkRvY3VtZW50OmRvY107CiAK
LSAgICBOU0FycmF5ICpzY3JpcHRzID0gYWxsU2NyaXB0c0luUERGRG9jdW1lbnQoZG9jKTsKKyAg
ICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7CisgICAgV2ViQ29yZTo6
UERGRG9jdW1lbnRTY3JpcHRpbmc6OmdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFtkb2MgZG9j
dW1lbnRSZWZdLCBzY3JpcHRzKTsKICAgICBbZG9jIHJlbGVhc2VdOwogICAgIGRvYyA9IG5pbDsK
IAotICAgIE5TVUludGVnZXIgc2NyaXB0Q291bnQgPSBbc2NyaXB0cyBjb3VudF07CisgICAgc2l6
ZV90IHNjcmlwdENvdW50ID0gc2NyaXB0cy5zaXplKCk7CiAgICAgaWYgKCFzY3JpcHRDb3VudCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFs
Q29udGV4dENyZWF0ZSgwKTsKLSAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRv
YyhjdHgsIGRhdGFTb3VyY2UpOworICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gV2ViQ29yZTo6
UERGRG9jdW1lbnRTY3JpcHRpbmc6Om1ha2VKU1BERkRvYyhjdHgsIGpzUERGRG9jSW5pdGlhbGl6
ZSwganNQREZEb2NQcmludCwganNQREZEb2NGaW5hbGl6ZSwgZGF0YVNvdXJjZSk7CiAKLSAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7Ci0gICAgICAgIEpT
U3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0cmluZ1Jl
Zilbc2NyaXB0cyBvYmplY3RBdEluZGV4OmldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNjcmlwdENvdW50OyArK2kpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7CiAgICAgICAgIEpTRXZhbHVh
dGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKICAgICAgICAgSlNTdHJp
bmdSZWxlYXNlKHNjcmlwdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDcxNjYzNWEuLjYwOTFjNDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMzMgQEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0
SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05OTIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBQREZQbHVnaW4sIHdoaWNoIHVzZXMgUERGS2l0IHRvIGRpc3BsYXkgUERGcywgaW5z
dGVhZCBvZiB1c2luZyBQREZLaXQgaW4gdGhlCisgICAgICAgIFVJUHJvY2VzcyBmb3IgZnVsbC1w
YWdlIFBERnMuIFRoaXMgbmV3IHBsdWdpbiB3aWxsIGFsc28gYmUgdXNlZCBmb3IgaW5saW5lIFBE
RnMKKyAgICAgICAgaW4gcGxhY2Ugb2YgU2ltcGxlUERGUGx1Z2luIChuw6llIEJ1aWx0SW5QREZW
aWV3KS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
OiBBZGQgRU5BQkxFX1BERl9QTFVHSU4uCisKKyAgICAgICAgU3VwcG9ydCB0aHJlZSBuZXcgUGx1
Z2luIG1ldGhvZHM6CisgICAgICAgICAgICAtIGhhbmRsZUVkaXRpbmdDb21tYW5kLCB3aGljaCBo
YW5kcyBlZGl0aW5nIGNvbW1hbmRzIHRvIHRoZSBQbHVnaW4KKyAgICAgICAgICAgIC0gaXNFZGl0
aW5nQ29tbWFuZEVuYWJsZWQsIHdoaWNoIHZhbGlkYXRlcyBlZGl0aW5nIGNvbW1hbmRzIHZpYSB0
aGUgUGx1Z2luCisgICAgICAgICAgICAtIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IsIHdoaWNoIGFz
a3MgdGhlIHBsdWdpbiB3aGV0aGVyIGl0IHdhbnRzIHRvCisgICAgICAgICAgICBvcHQgaW50byBh
IG1vZGUgd2hlcmUgdGhlIFdlYlBhZ2UgZG9lc24ndCBzY2FsZSBpbiB0aGUgb3JkaW5hcnkgZmFz
aGlvbiwKKyAgICAgICAgICAgIGJ1dCBpbnN0ZWFkIHByb3hpZXMgdGhlIFBsdWdpbidzIHNjYWxl
IGZhY3Rvciwgc28gZnVsbC1wYWdlIHBsdWdpbnMKKyAgICAgICAgICAgIGNhbiBoYW5kbGUgc2Nh
bGUgZmFjdG9yIGNoYW5nZXMgaG93ZXZlciB0aGV5IG5lZWQgdG8uCisKKyAgICAgICAgKiBQbHVn
aW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBs
dWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQpOiBQcm94eSBoYW5kbGVF
ZGl0aW5nQ29tbWFuZCB0byB0aGUgUGx1Z2luLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Db250
cm9sbGVyUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogUHJveHkgaXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQgdG8gdGhlIFBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJv
bGxlclByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKTogUHJveHkgaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvciB0byB0aGUgUGx1Z2luLgorICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29u
dHJvbGxlclByb3h5Lmg6CisgICAgICAgIChQbHVnaW5Db250cm9sbGVyUHJveHkpOiBBZGQgaGFu
ZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCBhbmQgaGFuZGxlc1Bh
Z2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5tZXNzYWdlcy5pbjogQWRkIEhhbmRsZUVkaXRpbmdDb21tYW5kLCBJc0VkaXRpbmdDb21t
YW5kRW5hYmxlZCwgYW5kIEhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogTlBBUEkgcGx1Z2lucyBz
dXBwb3J0IG5vIGVkaXRpbmcgY29tbWFuZHMgYnkgZGVmYXVsdC4KKyAgICAgICAgKFdlYktpdDo6
TmV0c2NhcGVQbHVnaW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogTlBBUEkgcGx1Z2lucyBl
bmFibGUgbm8gZWRpdGluZyBjb21tYW5kcyBieSBkZWZhdWx0LgorICAgICAgICAoV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcik6IE5QQVBJIHBsdWdpbnMgZG8g
bm90IGhhbmRsZSBwYWdlIHNjYWxlIGZhY3RvciBjaGFuZ2VzIHRoZW1zZWx2ZXMgYnkgZGVmYXVs
dC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
aDogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCwgYW5k
IGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisKKyAgICAgICAgQWRkIFBERlBsdWdpbkVuYWJsZWQg
cHJlZmVyZW5jZS4gSWYgaXQgaXMgbm90IGVuYWJsZWQsIG9yIHRoZSBwbHVnaW4gaXMKKyAgICAg
ICAgbm90IGJ1aWx0LCBiZWhhdmlvciB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZSAodGhlIFVJ
UHJvY2VzcyBQREZWaWV3IHdpbGwKKyAgICAgICAgaGFuZGxlIGZ1bGwtcGFnZSBQREZzLCBhbmQg
U2ltcGxlUERGUGx1Z2luIHdpbGwgaGFuZGxlIGlubGluZSBvbmVzKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6IEFkZCBQREZQbHVnaW5FbmFibGVkIHByZWZlcmVu
Y2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFBERlBsdWdpbkVuYWJsZWQpOiBTZXR0ZXIgZm9yIFBERlBsdWdp
bkVuYWJsZWQgcHJlZmVyZW5jZS4KKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRQREZQbHVnaW5F
bmFibGVkKTogR2V0dGVyIGZvciBQREZQbHVnaW5FbmFibGVkIHByZWZlcmVuY2UuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6IEV4cG9zZSBXS1ByZWZl
cmVuY2VzKFNldHxHZXQpUERGUGx1Z2luRW5hYmxlZCBhcyBhIHByaXZhdGUgcHJlZmVyZW5jZS4K
KworICAgICAgICBNb3ZlIHN1cHBvcnQgZm9yIE1JTUUgdHlwZXMgd2l0aCBjdXN0b20gcmVwcmVz
ZW50YXRpb25zIG9udG8gV2ViUGFnZSBpbnN0ZWFkIG9mIFdlYlByb2Nlc3MuCisgICAgICAgIFRo
aXMgYWxsb3dzIHVzIHRvIHVzZSBwcmVmZXJlbmNlcyB0byBjb250cm9sIHRoZSB1c2Ugb2YgY3Vz
dG9tIHJlcHJlc2VudGF0aW9ucyAoZm9yIGV4YW1wbGUsCisgICAgICAgIGl0IGFsbG93cyB1cyB0
byBoYXZlIGEgcHJlZmVyZW5jZSB0byB0b2dnbGUgYmV0d2VlbiBVSVByb2Nlc3MnIFBERlZpZXcg
YW5kIFBERlBsdWdpbikuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM6OmVuY29kZSk6IERvbid0IHBhc3MgbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9u
CisgICAgICAgIGludG8gdGhlIFdlYlByb2Nlc3MsIGFzIHdlIGNhbiBjb21wdXRlIGl0IGxhdGVy
LgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUp
OiBTYW1lLCBvbiB0aGUgZGVjb2RlIHNpZGUuCisgICAgICAgICogU2hhcmVkL1dlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaDogUmVtb3ZlIG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRh
dGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MpOiBEb24n
dCBhZGQgcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcyB0byBtaW1lVHlwZXNXaXRoQ3VzdG9tUmVw
cmVzZW50YXRpb24gaGVyZSwgYXMgd2UncmUgbm93IGNvbXB1dGluZyBpdCBvbiBXZWJQYWdlIGlu
c3RlYWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpjYW5QbHVnaW5IYW5kbGVSZXNwb25zZSk6IE1vdmUgdG8gV2ViUGFnZSBmcm9t
IFdlYlByb2Nlc3Mgc28gd2UgY2FuIHVzZSBXZWJQYWdlJ3MgbmV3IG5vdGlvbiBvZiBtaW1lVHlw
ZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNo
b3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UpOiBNb3ZlIHRvIFdlYlBhZ2Ug
ZnJvbSBXZWJQcm9jZXNzIHNvIHdlIGNhbiB1c2UgV2ViUGFnZSdzIG5ldyBub3Rpb24gb2YgbWlt
ZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmQW5k
UG9zdFNjcmlwdE1JTUVUeXBlcyk6IFJldHVybiB0aGUgc2V0IG9mIE1JTUUgdHlwZXMgdXNlZCBm
b3IgUERGIGFuZCBQb3N0U2NyaXB0LCB3aGljaCBhcmUgaGFuZGxlZCB3aXRoIFBERlZpZXcgaWYg
UERGUGx1Z2luIGlzIG5vdCBhdmFpbGFibGUgb3IgZW5hYmxlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFs
aXplV2ViUHJvY2Vzcyk6IERvbid0IGtlZXAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50
YXRpb25zIG9uIFdlYlByb2Nlc3MsIGl0J3Mgb3duZWQgYnkgV2ViUGFnZSBub3cuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6IE1vdmUgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2Ug
YW5kIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UgdG8gV2ViUGFnZS4K
KworICAgICAgICBBZGQgUERGTGF5ZXJDb250cm9sbGVyIHRvIHRoZSBzZXQgb2YgY2xhc3NlcyBy
ZXR1cm5lZCBieSBQREZLaXRJbXBvcnRzLgorCisgICAgICAgICogU2hhcmVkL21hYy9QREZLaXRJ
bXBvcnRzLmg6IEFkZCBwZGZMYXllckNvbnRyb2xsZXJDbGFzcy4KKyAgICAgICAgKiBTaGFyZWQv
bWFjL1BERktpdEltcG9ydHMubW06CisgICAgICAgIChXZWJLaXQ6OnBkZkxheWVyQ29udHJvbGxl
ckNsYXNzKTogRmluZCBhbmQgcmV0dXJuIHRoZSBQREZMYXllckNvbnRyb2xsZXIgY2xhc3MuCisK
KyAgICAgICAgQWRkIFBERlBsdWdpbi4gTXVjaCBvZiB0aGlzIGNvZGUgaXMgZHVwbGljYXRlZCBp
biBTaW1wbGVQREZQbHVnaW4sIGJ1dAorICAgICAgICBJIGV4cGVjdCB0aGUgdHdvIHBsdWdpbnMg
dG8gZGl2ZXJnZSBmdXJ0aGVyIGFzIHRpbWUgZ29lcyBvbiwgc28gSSBhbSBub3QKKyAgICAgICAg
aW5oZXJpdGluZyBmcm9tIFNpbXBsZVBERlBsdWdpbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnNl
bmREaWRHZXRQbHVnaW5zKTogQWRkIFBERlBsdWdpbiB0byB0aGUgc2V0IG9mIHN1cHBvcnRlZCBw
bHVnaW5zLgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRk
IFBERlBsdWdpbiwgcmVuYW1lIEJ1aWx0SW5QREZWaWV3IHRvIFNpbXBsZVBERlBsdWdpbi4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbTogQWRkZWQuCisKKyAgICAg
ICAgUERGUGx1Z2luIHVzZXMgbGF5ZXJzIGZvciBzY3JvbGxiYXJzLgorCisgICAgICAgICgtW1dL
UERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgaW5pdFdpdGhQREZQbHVnaW46V2ViS2l0OjpdKTogSW5p
dGlhbGl6ZSBvdXIgQ0FMYXllciBzdWJjbGFzcywKKyAgICAgICAgc3RvcmluZyBpdHMgcGFyZW50
IFBERlBsdWdpbiBzbyBpdCBjYW4gZGVsZWdhdGUgZHJhd2luZyB0aGVyZS4KKyAgICAgICAgKC1b
V0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhY3Rpb25Gb3JLZXk6XSk6IERpc2FibGUgQ29yZUFu
aW1hdGlvbiBpbXBsaWNpdCBhY3Rpb25zLgorICAgICAgICAoLVtXS1BERlBsdWdpblNjcm9sbGJh
ckxheWVyIGRyYXdJbkNvbnRleHQ6XSk6IERlbGVnYXRlIHNjcm9sbGJhciBkcmF3aW5nIHRvIFBE
RlBsdWdpbi4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIFBERkxheWVyQ29udHJvbGxlciBkZWxl
Z2F0ZSwgZXZlbnR1YWxseSBmb3J3YXJkaW5nIGNhbGxzIGJhY2sgdG8gUERGUGx1Z2luLgorCisg
ICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgaW5pdFdpdGhQREZQbHVnaW46
V2ViS2l0OjpdKTogSW5pdGlhbGl6ZSBvdXIgZGVsZWdhdGUsCisgICAgICAgIHN0b3JpbmcgaXRz
IHBhcmVudCBQREZQbHVnaW4gc28gaXQgY2FuIGZvcndhcmQgZGVsZWdhdGUgY2FsbHMgdGhlcmUu
CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgdXBkYXRlU2Nyb2xsUG9z
aXRpb246XSk6IFVwZGF0ZSBQREZQbHVnaW4ncyBub3Rpb24gb2YgdGhlCisgICAgICAgIGN1cnJl
bnQgc2Nyb2xsIHBvc2l0aW9uLCB3aGVuIFBERktpdCBjaGFuZ2VzIHRoZSBzY3JvbGwgcG9zaXRp
b24gaXRzZWxmLgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHdyaXRl
SXRlbXNUb1Bhc3RlYm9hcmQ6d2l0aFR5cGVzOl0pOiBXcml0ZSB0aGUgZ2l2ZW4KKyAgICAgICAg
YXJyYXkgb2YgTlNEYXRhIG9iamVjdHMgdG8gdGhlIHBhc3RlYm9hcmQgd2l0aCB0aGUgZ2l2ZW4g
dHlwZXMuCisKKyAgICAgICAgVGhlIGZvbGxvd2luZyBQREZMYXllckNvbnRyb2xsZXIgZGVsZWdh
dGUgbWV0aG9kcyB3aWxsIGJlIGltcGxlbWVudGVkIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAg
KC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0
ZWRTdHJpbmc6YXRQb2ludDpdKToKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZSBwZXJmb3JtV2ViU2VhcmNoOl0pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxl
ckRlbGVnYXRlIG9wZW5XaXRoUHJldmlld10pOgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlIHNhdmVUb1BERl0pOgorCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
UERGUGx1Z2luKTogU2V0IHVwIHRoZSByZXF1aXNpdGUgbGF5ZXIgaGllcmFyY2h5LCBhbmQgY3Jl
YXRlIGEgUERGTGF5ZXJDb250cm9sbGVyIChhbmQgaXRzIGRlbGVnYXRlIHByb3h5KS4KKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjpwbHVnaW5JbmZvKTogUmVwb3J0IHRoYXQgd2Ugc3VwcG9y
dCB0aGUgYXBwbGljYXRpb24vcGRmIE1JTUUgdHlwZS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpwbHVnaW5WaWV3KTogUmV0dXJuIG91ciBhc3NvY2lhdGVkIFBsdWdpblZpZXcuCisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFycyk6IFVwZGF0ZSB0aGUgc2l6
ZSBhbmQgZXhpc3RlbmNlIG9mIHNjcm9sbGJhcnMuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6Y3JlYXRlU2Nyb2xsYmFyKTogQ3JlYXRlIGEgc2Nyb2xsYmFyIGFuZCBob3N0aW5nIGxheWVy
LCBhdHRhY2hpbmcgaXRzIGxheWVyCisgICAgICAgIHRvIFBERlBsdWdpbidzIGNvbnRhaW5lciBs
YXllci4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKTogRGVz
dHJveSBhIHNjcm9sbGJhciwgZGV0YWNoaW5nIGFuZCBkZXN0cm95aW5nIGl0cyBob3N0aW5nIGxh
eWVyIGluIHRoZSBwcm9jZXNzLgorICAgICAgICAoV2ViS2l0Ojpqc1BERkRvY0luaXRpYWxpemUp
OiBFbnN1cmUgdGhhdCB3ZSBrZWVwIHRoZSBQREZQbHVnaW4gYWxpdmUgd2hpbGUgcnVubmluZyBp
dHMgc2NyaXB0cy4KKyAgICAgICAgKFdlYktpdDo6anNQREZEb2NGaW5hbGl6ZSk6CisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6anNQREZEb2NQcmludCk6IFNob3cgdGhlIHByaW50IGRpYWxv
ZyB3aGVuIGludm9rZWQgdmlhIGEgc2NyaXB0IGluc2lkZSBhIGRvY3VtZW50LgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCk6IENhbGxlZCB3aGVuIHRoZSBk
b2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nOyBoYW5kCisgICAgICAgIHRoZSBsb2FkZWQgZG9jdW1l
bnQgdG8gUERGS2l0LCB1cGRhdGUgYWxsIG9mIG91ciBzdGF0ZSAoY2FjaGVkIGRvY3VtZW50IHNp
emUsIHNjcm9sbGJhcnMsIGV0Yy4pLCBhbmQgdGhlbiBleGVjdXRlIGFueSBzY3JpcHRzIGluIHRo
ZSBkb2N1bWVudCAodG8gYWxsb3cgZm9yIGF1dG9tYXRpYyBwcmludGluZykuCisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMpOiBEZXRlcm1pbmUgdGhlIHNpemUgb2Yg
dGhlIFBERiBhbmQgaXRzIHBhZ2VzLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmluaXRp
YWxpemUpOiBBdHRlbXB0IHRvIGxvYWQgdGhlIGRlc2lyZWQgUERGLCBpZiBuZWNlc3NhcnkuCisg
ICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6ZGVzdHJveSk6IFRlYXIgZG93biB0aGUgbGF5ZXIg
aGllcmFyY2h5LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50KTogUERGUGx1Z2lu
IGlzIGxheWVyLWJhc2VkLCBzbyB3ZSBwYWludCBub3RoaW5nIGludG8gdGhlIHRpbGVzLgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KTog
U2Nyb2xsYmFyIGNvbnRyb2xzIGFyZSBkcmF3biBpbnRvIGxheWVycywgYnV0IHRoZWlyIHBhaW50
aW5nIGlzIGRlbGVnYXRlZCBoZXJlIGZyb20gV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllci4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1cGRhdGVDb250cm9sVGludHMpOiBTY3JvbGxiYXJz
IGNhbiBoYXZlIHRpbnRzLCBzbyBpbnZhbGlkYXRlCisgICAgICAgIHRoZW0gd2hlbiBjb250cm9s
IHRpbnRzIGNoYW5nZS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzbmFwc2hvdCk6IFBl
cmZvcm0gYSBwYWludCBpbnRvIGEgYml0bWFwIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6cGx1Z2luTGF5ZXIpOiBSZXR1cm4gUERGUGx1Z2luJ3Mgcm9vdCBsYXllci4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppc1RyYW5zcGFyZW50KTogaXNUcmFuc3BhcmVudCBp
cyBvbmx5IGNhbGxlZCBmb3IgUGx1Z2luUHJvY2Vzcy1ob3N0ZWQKKyAgICAgICAgcGx1Z2lucywg
c28gaXQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZTsgaW4gYW55IGNhc2UsIFBERlBs
dWdpbiBpcyBub3QgdHJhbnNwYXJlbnQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6d2Fu
dHNXaGVlbEV2ZW50cyk6IFBERlBsdWdpbiB3YW50cyB0byByZWNlaXZlIHdoZWVsIGV2ZW50cyB0
byBmb3J3YXJkCisgICAgICAgIHRoZW0gdG8gUERGTGF5ZXJDb250cm9sbGVyIGZvciBzY3JvbGxp
bmcgdGhlIGRvY3VtZW50LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Omdlb21ldHJ5RGlk
Q2hhbmdlKTogVGhlIHNpemUgb3Igc2NhbGUgb2YgdGhlIHBsdWdpbiBjaGFuZ2VkOyB1cGRhdGUK
KyAgICAgICAgUERGTGF5ZXJDb250cm9sbGVyJ3Mgbm90aW9uIG9mIHRoZSBzaXplIGFuZCBwYWdl
IHNjYWxlLCBhbmQgaW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFycy4KKworICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZURhdGEpOiBDb25jYXRlbmF0ZSByZWNlaXZlZCBk
YXRhIG9uIHRvIG1fZGF0YS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKTogbV9kYXRhIGlzIGNvbXBsZXRlLCB3ZSBjYW4gdXNlIGl0IHRvIGNyZWF0
ZSBhIFBERkRvY3VtZW50IG5vdy4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzdHJlYW1E
aWRGYWlsKTogQ2xlYXIgbV9kYXRhLCBzaW5jZSB3ZSBjYW4ndCBjb21wbGV0ZSB0aGUgbG9hZC4K
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9u
c2UpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVE
YXRhKTogIENvbmNhdGVuYXRlIHJlY2VpdmVkIGRhdGEgb24gdG8gbV9kYXRhLgorICAgICAgICAo
V2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcpOiBtX2RhdGEg
aXMgY29tcGxldGUsIHdlIGNhbiB1c2UgaXQgdG8gY3JlYXRlIGEgUERGRG9jdW1lbnQgbm93Lgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZhaWwpOiBDbGVhciBt
X2RhdGEsIHNpbmNlIHdlIGNhbid0IGNvbXBsZXRlIHRoZSBsb2FkLgorCisgICAgICAgIE1vdXNl
IGFuZCBrZXlib2FyZCBldmVudHMgYXJlIGNvbnZlcnRlZCBiYWNrIGludG8gTlNFdmVudHMsIGJ1
dCB3aXRoCisgICAgICAgIGxvY2F0aW9uSW5XaW5kb3cgYWN0dWFsbHkgaW4gdGVybXMgb2YgdGhl
IFBERlBsdWdpbidzIGxheWVyLCBub3QKKyAgICAgICAgdGhlIHdpbmRvdyAoc2luY2UgdGhlcmUg
aXMgbm8gd2luZG93KS4KKworICAgICAgICAoV2ViS2l0Ojptb2RpZmllckZsYWdzRnJvbVdlYkV2
ZW50KTogQ29uc3RydWN0IGFuIEFwcEtpdC1zdHlsZSBtb2RpZmllciBiaXRtYXNrIGZyb20gV2Vi
RXZlbnQncyBtb2RpZmllciBrZXkgZ2V0dGVycy4KKyAgICAgICAgKFdlYktpdDo6ZXZlbnRUeXBl
RnJvbVdlYkV2ZW50KTogUmV0dXJuIHRoZSBOU0V2ZW50VHlwZSBlcXVpdmFsZW50IHRvIHRoZSBn
aXZlbiBXZWJFdmVudC4gT25seSBzdXBwb3J0cyBrZXlib2FyZCBhbmQgbW91c2UgZXZlbnRzLCBh
bmQgb25seSB0aGUgbGVmdCBhbmQgcmlnaHQgbW91c2UgYnV0dG9uLgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OmhhbmRsZU1vdXNlRXZlbnQpOiBDb25zdHJ1Y3QgYSBjdXN0b20gTlNFdmVu
dCBmcm9tIHRoZSBnaXZlbiBXZWJNb3VzZUV2ZW50IGFuZCBoYW5kIGl0IHRvIFBERkxheWVyQ29u
dHJvbGxlci4gTW91c2UgY29vcmRpbmF0ZXMgYXJlIGluIHRlcm1zIG9mIG1fY29udGVudExheWVy
J3Mgb3JpZ2luLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZVdoZWVsRXZlbnQp
OiBXaGVlbCBldmVudHMgYXJlIGhhbmRsZWQgaW50ZXJuYWxseTsgc2Nyb2xsIHBvc2l0aW9uIGNo
YW5nZXMgYXJlIGxhdGVyIHBhc3NlZCBvZmYgdG8gUERGTGF5ZXJDb250cm9sbGVyLgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50ZXJFdmVudCk6IEluZm9ybSBTY3Jv
bGxhYmxlQXJlYSB0aGF0IHRoZSBtb3VzZSBlbnRlcmVkIHRoZSBjb250ZW50IGFyZWEuCisgICAg
ICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KTogSW5mb3JtIFNj
cm9sbGFibGVBcmVhIHRoYXQgdGhlIG1vdXNlIGxlZnQgdGhlIGNvbnRlbnQgYXJlYS4KKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KTogQ3VycmVudGx5
LCB1c2UgdGhlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQgbWVudS4KKyAgICAgICAgKFdlYktpdDo6
UERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KTogQ29uc3RydWN0IGEgY3VzdG9tIE5TRXZl
bnQgZnJvbSB0aGUgZ2l2ZW4gV2ViS2V5Ym9hcmRFdmVudCBhbmQgaGFuZCBpdCB0byBQREZMYXll
ckNvbnRyb2xsZXIuIFBERkxheWVyQ29udHJvbGxlciBjdXJyZW50bHkgb25seSBoYW5kbGVzIGtl
eURvd24gZXZlbnRzLgorCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlRWRpdGlu
Z0NvbW1hbmQpOiBIYW5kbGUgY29weSBhbmQgc2VsZWN0LWFsbCBjb21tYW5kcywgYW5kIGZvcndh
cmQgdGhlbSB0byBQREZMYXllckNvbnRyb2xsZXIuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdp
bjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQpOiBUaGUgJ2NvcHknIGNvbW1hbmQgc2hvdWxkIGJl
IGVuYWJsZWQgaWYgdGhlcmUgaXMKKyAgICAgICAgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgcGFy
dCBvZiB0aGUgUERGLiBUaGUgJ3NlbGVjdCBhbGwnIGNvbW1hbmQgc2hvdWxkIGFsd2F5cyBiZSBl
bmFibGVkLgorCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlU2Nyb2xsKTogU2Ny
b2xsaW5nIGlzIGhhbmRsZWQgYnkgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6aG9yaXpvbnRhbFNjcm9sbGJhcik6IFJldHVybiB0aGUgY3VycmVudCBob3Jpem9u
dGFsIHNjcm9sbGJhciwgaWYgYW55LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZlcnRp
Y2FsU2Nyb2xsYmFyKTogUmV0dXJuIHRoZSBjdXJyZW50IHZlcnRpY2FsIHNjcm9sbGJhciwgaWYg
YW55LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjcm9sbENvcm5lclJlY3QpOiBSZXR1
cm4gdGhlIGZyYW1lIG9mIHRoZSBzY3JvbGwgY29ybmVyLCBpZiBhbnkuCisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCk6IEluIG91ciBjYXNlLCB0
aGUgYm91bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEgYXJlIGV4YWN0bHkgdGhlIGJvdW5kcyBv
ZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zm
c2V0KTogVXBkYXRlIGJvdGggUERGUGx1Z2luIGFuZCBQREZMYXllckNvbnRyb2xsZXIncyBub3Rp
b24KKyAgICAgICAgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46
OmlzQWN0aXZlKTogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoaXMgUERGUGx1Z2luIGlzIHRoZSBm
b2N1c2VkIHdpZGdldC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdCk6IEludmFsaWRhdGUgdGhlIHdob2xlIHNjcm9sbGJhciBsYXllci4KKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6IEludmFs
aWRhdGUgdGhlIHdob2xlIHNjcm9sbCBjb3JuZXIgbGF5ZXIuCisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKTogRG9uJ3QgZHJhdyBzY3JvbGwgY29ybmVy
cy4gVGhpcyBtYXkgbmVlZCB0byBiZSByZXZpc2VkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnNjcm9sbFBvc2l0aW9uKTogUmV0dXJuIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4K
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOiBSZXR1
cm4gdGhlIG1pbmltdW0gcG9zc2libGUgc2Nyb2xsIHBvc2l0aW9uIGdpdmVuIHRoZSBjdXJyZW50
IGRvY3VtZW50IHNpemUuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWF4aW11bVNjcm9s
bFBvc2l0aW9uKTogUmV0dXJuIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNjcm9sbCBwb3NpdGlvbiBn
aXZlbiB0aGUgY3VycmVudCBkb2N1bWVudCBzaXplLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnZpc2libGVIZWlnaHQpOiBSZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUgcGx1Z2luLgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnZpc2libGVXaWR0aCk6IFJldHVybiB0aGUgd2lkdGgg
b2YgdGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb250ZW50c1NpemUp
OiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlcHJlc2VudGVkIFBERiBhdCB0aGUgY3VycmVudCBz
Y2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsYmFyc0NhbkJl
QWN0aXZlKTogU2Nyb2xsYmFycyBjYW4gYmUgYWN0aXZlIGFzIGxvbmcgYXMgd2UncmUgbm90IGlu
IHRoZSBwYWdlIGNhY2hlLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNjcm9sbGJhclN0
eWxlQ2hhbmdlZCk6IEludmFsaWRhdGUgc2Nyb2xsYmFycyBpZiB3ZSBzd2l0Y2ggdG8vZnJvbSBv
dmVybGF5IHNjcm9sbGJhcnMuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KTogQ29udmVydCBwb2ludHMgdG8gYW5kIGZyb20g
dGhlIHNjcm9sbGJhci4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIpOiBDb252ZXJ0IHBvaW50cyB0byBhbmQgZnJvbSB0aGUg
c2Nyb2xsYmFyLgorCisgICAgICAgIFJlbmFtZSBCdWlsdEluUERGVmlldyB0byBTaW1wbGVQREZQ
bHVnaW4sIHRvIGRpZmZlcmVudGlhdGUgaXQgZnJvbSBQREZQbHVnaW4KKyAgICAgICAgYW5kIHRv
IGJldHRlciBkZW5vdGUgaXRzIGluaGVyaXRhbmNlIGZyb20gUGx1Z2luLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVnaW4uaDogUmVuYW1lZCBmcm9tIFdl
YlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbTogUmVuYW1lZCBmcm9tIFdlYlByb2Nl
c3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0uCisgICAgICAgIChXZWJLaXQ6OlNpbXBs
ZVBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKTogQWRvcHQgV2ViQ29yZTo6UERGRG9jdW1l
bnRTY3JpcHRpbmcgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGF0IGNvZGUgaGVyZS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaDoKKyAgICAgICAgKFBsdWdpbik6IEFk
ZCBoYW5kbGVFZGl0aW5nQ29tbWFuZCwgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQsIGFuZCBoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5OjpoYW5kbGVFZGl0aW5nQ29t
bWFuZCk6IFByb3h5IGhhbmRsZUVkaXRpbmdDb21tYW5kIHRvIHRoZSBQbHVnaW5Qcm9jZXNzLgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQpOiBQ
cm94eSBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZAorICAgICAgICB0byB0aGUgUGx1Z2luUHJvY2Vz
cy4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3Ip
OiBQcm94eSBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yCisgICAgICAgIHRvIHRoZSBQbHVnaW5Qcm9j
ZXNzLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oOiBBZGQgaGFu
ZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLAorICAgICAgICBhbmQg
aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnNldFBhZ2VTY2FsZUZh
Y3Rvcik6IFNldCB0aGUgcGx1Z2luJ3MgY3VycmVudCBwYWdlIHNjYWxlIGZhY3Rvci4gQWxzbywK
KyAgICAgICAgdXBkYXRlIFdlYlBhZ2VQcm94eSdzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBwYWdl
U2NhbGVGYWN0b3Igd2hlbiB0aGlzIGlzIGNhbGxlZC4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6cGFnZVNjYWxlRmFjdG9yKTogUmV0dXJuIHRoZSBwbHVnaW4ncyBjdXJyZW50IHBhZ2Ug
c2NhbGUgZmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpoYW5kbGVFZGl0aW5n
Q29tbWFuZCk6IFByb3h5IGhhbmRsZUVkaXRpbmdDb21tYW5kIHRvIHRoZSBwbHVnaW4uCisgICAg
ICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogUHJveHkg
aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQgdG8gdGhlIHBsdWdpbi4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oOgorICAgICAgICAoUGx1Z2luVmlldyk6IEFkZCBoYW5k
bGVFZGl0aW5nQ29tbWFuZCwgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQsCisgICAgICAgIHNldFBh
Z2VTY2FsZUZhY3Rvci9wYWdlU2NhbGVGYWN0b3IsIGFuZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9y
LiBBZGQgbV9wYWdlU2NhbGVGYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6Omhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IpOiBQcm94eSBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yIHRvIHRo
ZSBwbHVnaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojpy
ZXN0b3JlVmlld1N0YXRlKTogRG9uJ3QgdXBkYXRlIFdlYlBhZ2VQcm94eSdzIG5vdGlvbiBvZiB0
aGUgc2NhbGUgZmFjdG9yIGlmIGl0IHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNo
ZWRGcmFtZSk6IE1ha2UgdXNlIG9mIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVz
cG9uc2Ugb24gV2ViUGFnZSBpbnN0ZWFkIG9mIFdlYlByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKTog
TWFrZSB1c2Ugb2Ygc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZSBvbiBX
ZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJvY2Vzcy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNyZWF0ZVBsdWdpbik6
IENyZWF0ZSBhIFBERlBsdWdpbiBpZiBhcHByb3ByaWF0ZSAoaWYgaXQgaXMgYnVpbHQgYW5kIHRo
ZSBzZXR0aW5nIGlzIGVuYWJsZWQpLgorICAgICAgICAoV2ViS2l0OjpwbHVnaW5WaWV3Rm9yRnJh
bWUpOiBSZXR1cm4gdGhlIFBsdWdpblZpZXcgZm9yIHRoZSBnaXZlbiBmcmFtZSBpZiBpdHMgZG9j
dW1lbnQgaXMgYSBQbHVnaW5Eb2N1bWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZXhl
Y3V0ZUVkaXRpbmdDb21tYW5kKTogQXR0ZW1wdCB0byBleGVjdXRlIGVkaXRpbmcgY29tbWFuZHMg
b24gdGhlCisgICAgICAgIGN1cnJlbnRseSBmb2N1c2VkIChvciBtYWluLWZyYW1lKSBwbHVnaW4u
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogVmFs
aWRhdGUgZWRpdGluZyBjb21tYW5kcyBhZ2FpbnN0IHRoZQorICAgICAgICBjdXJyZW50bHkgZm9j
dXNlZCAob3IgbWFpbi1mcmFtZSkgcGx1Z2luLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpz
Y2FsZVBhZ2UpOiBJZiB0aGUgcGx1Z2luIHJlcG9ydHMgdGhhdCBpdCBoYW5kbGVzIHBhZ2Ugc2Nh
bGUgZmFjdG9yCisgICAgICAgIGl0c2VsZiwgaGFuZCBpdCB0aGUgbmV3IHNjYWxlIGluc3RlYWQg
b2YgV2ViQ29yZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFnZVNjYWxlRmFjdG9yKTog
SWYgdGhlIHBsdWdpbiByZXBvcnRzIHRoYXQgaXQgaGFuZGxlcyBwYWdlIHNjYWxlCisgICAgICAg
IGZhY3RvciBpdHNlbGYsIHJldHVybiBpdHMgbm90aW9uIG9mIHRoZSBjdXJyZW50IHNjYWxlIGlu
c3RlYWQgb2YgV2ViQ29yZSdzLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp2YWxpZGF0ZUNv
bW1hbmQpOiBWYWxpZGF0ZSBlZGl0aW5nIGNvbW1hbmRzIGFnYWluc3QgdGhlCisgICAgICAgIGN1
cnJlbnRseSBmb2N1c2VkIChvciBtYWluLWZyYW1lKSBwbHVnaW4uCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKTogVXBkYXRlIG1fcGRmUGx1Z2luRW5hYmxlZCBn
aXZlbiB0aGUgcmVsZXZhbnQgV2ViUHJlZmVyZW5jZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZGZQbHVnaW5FbmFi
bGVkKTogUmV0dXJuIHdoZXRoZXIgb3Igbm90IFBERlBsdWdpbiBzaG91bGQgYmUgdXNlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0UERGUGx1Z2luRW5hYmxlZCk6IFNldCB3aGV0aGVy
IG9yIG5vdCBQREZQbHVnaW4gc2hvdWxkIGJlIHVzZWQuCisKKwogMjAxMi0xMC0xMSAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcgZGVw
cmVjYXRlZFNlbmQgZm9yIFdlYkNvbnRleHQ6OnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMu
eGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZwppbmRleCBjZTQxZDMwLi4zZjQwYzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZworKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpAQCAtMTE2LDYgKzEx
NiwxMSBAQCBFTkFCTEVfTk9USUZJQ0FUSU9OU19tYWNvc3hfMTA3MCA9IDsKIEVOQUJMRV9OT1RJ
RklDQVRJT05TX21hY29zeF8xMDgwID0gRU5BQkxFX05PVElGSUNBVElPTlM7CiBFTkFCTEVfTk9U
SUZJQ0FUSU9OU19tYWNvc3hfMTA5MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxFX1BB
R0VfVklTSUJJTElUWV9BUEkgPSA7CitFTkFCTEVfUERGS0lUX1BMVUdJTiA9ICQoRU5BQkxFX1BE
RktJVF9QTFVHSU5fJChSRUFMX1BMQVRGT1JNX05BTUUpKTsKK0VOQUJMRV9QREZLSVRfUExVR0lO
X21hY29zeCA9ICQoRU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XyQoVEFSR0VUX01BQ19PU19Y
X1ZFUlNJT05fTUFKT1IpKTsKK0VOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8xMDcwID0gOwor
RU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4XzEwODAgPSA7CitFTkFCTEVfUERGS0lUX1BMVUdJ
Tl9tYWNvc3hfMTA5MCA9IEVOQUJMRV9QREZLSVRfUExVR0lOOwogRU5BQkxFX1BST0dSRVNTX0VM
RU1FTlQgPSBFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVDsKIEVOQUJMRV9RVU9UQSA9IDsKIEVOQUJM
RV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSA9IEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFN
RTsKQEAgLTE0Myw0ICsxNDgsNCBAQCBFTkFCTEVfV0lER0VUX1JFR0lPTiA9IDsKIEVOQUJMRV9X
T1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1G
RUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxPQikgJChF
TkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJMRV9DU1Nf
Qk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVOQUJMRV9D
U1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1NfSElFUkFS
Q0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NTX0lNQUdF
X1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hBREVSUykg
JChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxFUykgJChF
TkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFORExF
UikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQp
ICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxFTUVOVCkg
JChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVOVCkgJChF
TkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5BQkxFX0ZJ
TFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9UVExJTkcp
ICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJM
RV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5BQkxFX0lO
UFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5QVVRfVFlQ
RV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxFX0lOUFVU
X1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZBU0NSSVBU
X0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVf
TEVHQUNZX05PVElGSUNBVElPTlMpICQoTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChFTkFCTEVf
TEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVfTElOS19Q
UkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAkKEVOQUJM
RV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJMRV9NSFRN
TCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMpICQoRU5B
QkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVO
QUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVO
QUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1ND
UklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hBRE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktF
UlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkgJChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJM
RV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRT
KSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcpICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19P
TkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikg
JChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJREVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChF
TkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlO
RykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFNM
VCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0FD
Q0VMRVJBVEVEXzJEX0NBTlZBUykgJChFTkFCTEVfQU5JTUFUSU9OX0FQSSkgJChFTkFCTEVfQkxP
QikgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0NTUF9ORVhUKSAkKEVOQUJM
RV9DU1NfQk9YX0RFQ09SQVRJT05fQlJFQUspICQoRU5BQkxFX0NTU19FWENMVVNJT05TKSAkKEVO
QUJMRV9DU1NfQ09NUE9TSVRJTkcpICQoRU5BQkxFX0NTU19GSUxURVJTKSAkKEVOQUJMRV9DU1Nf
SElFUkFSQ0hJRVMpICQoRU5BQkxFX0NTU19JTUFHRV9PUklFTlRBVElPTikgJChFTkFCTEVfQ1NT
X0lNQUdFX1JFU09MVVRJT04pICQoRU5BQkxFX0NTU19SRUdJT05TKSAkKEVOQUJMRV9DU1NfU0hB
REVSUykgJChFTkFCTEVfQ1NTX1NUSUNLWV9QT1NJVElPTikgJChFTkFCTEVfQ1NTX1ZBUklBQkxF
UykgJChFTkFCTEVfQ1NTM19URVhUX0RFQ09SQVRJT04pICQoRU5BQkxFX0NVU1RPTV9TQ0hFTUVf
SEFORExFUikgJChFTkFCTEVfREFTSEJPQVJEX1NVUFBPUlQpICQoRU5BQkxFX0RBVEFMSVNUX0VM
RU1FTlQpICQoRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVMpICQoRU5BQkxFX0RFVEFJTFNfRUxF
TUVOVCkgJChFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OKSAkKEVOQUJMRV9ESUFMT0dfRUxFTUVO
VCkgJChFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCkgJChFTkFCTEVfRklMRV9TWVNURU0pICQoRU5B
QkxFX0ZJTFRFUlMpICQoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJKSAkKEVOQUJMRV9HQU1FUEFEKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSElEREVOX1BBR0VfRE9NX1RJTUVSX1RIUk9U
VExJTkcpICQoRU5BQkxFX0hJR0hfRFBJX0NBTlZBUykgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAk
KEVOQUJMRV9JRlJBTUVfU0VBTUxFU1MpICQoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpICQoRU5B
QkxFX0lOUFVUX1NQRUVDSCkgJChFTkFCTEVfSU5QVVRfVFlQRV9DT0xPUikgJChFTkFCTEVfSU5Q
VVRfVFlQRV9EQVRFKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEVUSU1FKSAkKEVOQUJMRV9JTlBV
VF9UWVBFX0RBVEVUSU1FTE9DQUwpICQoRU5BQkxFX0lOUFVUX1RZUEVfTU9OVEgpICQoRU5BQkxF
X0lOUFVUX1RZUEVfVElNRSkgJChFTkFCTEVfSU5QVVRfVFlQRV9XRUVLKSAkKEVOQUJMRV9KQVZB
U0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9MRUdBQ1lfQ1NTX1ZFTkRPUl9QUkVGSVhFUykgJChF
TkFCTEVfTEVHQUNZX05PVElGSUNBVElPTlMpICQoTEVHQUNZX1ZFTkRPUl9QUkVGSVhFUykgJChF
TkFCTEVfTEVHQUNZX1dFQl9BVURJTykgJChFTkFCTEVfTElOS19QUkVGRVRDSCkgJChFTkFCTEVf
TElOS19QUkVSRU5ERVIpICQoRU5BQkxFX01BVEhNTCkgJChFTkFCTEVfTUVESUFfU09VUkNFKSAk
KEVOQUJMRV9NRURJQV9TVEFUSVNUSUNTKSAkKEVOQUJMRV9NRVRFUl9FTEVNRU5UKSAkKEVOQUJM
RV9NSFRNTCkgJChFTkFCTEVfTUlDUk9EQVRBKSAkKEVOQUJMRV9NVVRBVElPTl9PQlNFUlZFUlMp
ICQoRU5BQkxFX05BVklHQVRPUl9DT05URU5UX1VUSUxTKSAkKEVOQUJMRV9OT1RJRklDQVRJT05T
KSAkKEVOQUJMRV9QQUdFX1ZJU0lCSUxJVFlfQVBJKSAkKEVOQUJMRV9QREZLSVRfUExVR0lOKSAk
KEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UKSAkKEVOQUJMRV9RVU9UQSkgJChFTkFCTEVfUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpICQoRU5BQkxFX1NDUklQVEVEX1NQRUVDSCkgJChFTkFCTEVfU0hB
RE9XX0RPTSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NRTF9EQVRBQkFTRSkg
JChFTkFCTEVfU1RZTEVfU0NPUEVEKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19ET01fT0JK
Q19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9URVhUX0FVVE9TSVpJTkcp
ICQoRU5BQkxFX1RFWFRfTk9USUZJQ0FUSU9OU19PTkxZKSAkKEVOQUJMRV9UT1VDSF9JQ09OX0xP
QURJTkcpICQoRU5BQkxFX1VORE9fTUFOQUdFUikgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1ZJ
REVPX1RSQUNLKSAkKEVOQUJMRV9XRUJHTCkgJChFTkFCTEVfV0VCX0FVRElPKSAkKEVOQUJMRV9X
RUJfU09DS0VUUykgJChFTkFCTEVfV0VCX1RJTUlORykgJChFTkFCTEVfV0lER0VUX1JFR0lPTikg
JChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFNMVCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKaW5kZXggMzFhNWQ2
MS4uMTdjMTZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3Mv
UGx1Z2luQ29udHJvbGxlclByb3h5LmNwcApAQCAtNTIxLDYgKzUyMSwyMSBAQCB2b2lkIFBsdWdp
bkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2
ZW50JiBrZXlib2FyZAogICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+aGFuZGxlS2V5Ym9hcmRFdmVu
dChrZXlib2FyZEV2ZW50KTsKIH0KIAordm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQsIGJvb2wmIGhhbmRsZWQpCit7CisgICAgaGFuZGxlZCA9IG1fcGx1Z2luLT5oYW5k
bGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworfQorICAgIAordm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGJvb2wmIGVuYWJsZWQpCit7CisgICAgZW5hYmxlZCA9IG1fcGx1Z2lu
LT5pc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFtZSk7Cit9CisgICAgCit2b2lkIFBs
dWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcihib29sJiBlbmFibGVk
KQoreworICAgIGVuYWJsZWQgPSBtX3BsdWdpbi0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOwor
fQorCiB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGFpbnRFbnRpcmVQbHVnaW4oKQogewog
ICAgIGlmIChtX3BsdWdpblNpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgKaW5kZXggYjRhNDA2Ny4uMTll
ZTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250
cm9sbGVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5oCkBAIC0xMzcsNiArMTM3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhh
bmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7
CiAgICAgdm9pZCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYsIGJv
b2wmIGhhbmRsZWQpOwogICAgIHZvaWQgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXli
b2FyZEV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBoYW5kbGVFZGl0aW5nQ29tbWFu
ZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50LCBib29s
JiBoYW5kbGVkKTsKKyAgICB2b2lkIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3Rvcihib29sJiBlbmFibGVkKTsKICAgICB2b2lkIHBhaW50RW50aXJlUGx1Z2luKCk7CiAg
ICAgdm9pZCBzbmFwc2hvdChTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgYmFja2luZ1N0b3JlSGFu
ZGxlKTsKICAgICB2b2lkIHNldEZvY3VzKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdlcy5p
bgppbmRleCBkN2MyZDAyLi4wNjcxYTIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4K
QEAgLTczLDYgKzczLDE1IEBAIG1lc3NhZ2VzIC0+IFBsdWdpbkNvbnRyb2xsZXJQcm94eSB7CiAK
ICAgICAjIFNlbnQgd2hlbiBhIGtleWJvYXJkIHNob3VsZCBiZSBwcm9jZXNzZWQuCiAgICAgSGFu
ZGxlS2V5Ym9hcmRFdmVudChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQga2V5Ym9hcmRFdmVudCkg
LT4gKGJvb2wgaGFuZGxlZCkKKyAgICAKKyAgICAjIFNlbnQgd2hlbiBhbiBlZGl0aW5nIGNvbW1h
bmQgc2hvdWxkIGJlIHByb2Nlc3NlZC4KKyAgICBIYW5kbGVFZGl0aW5nQ29tbWFuZChXVEY6OlN0
cmluZyBjb21tYW5kTmFtZSwgV1RGOjpTdHJpbmcgYXJndW1lbnQpIC0+IChib29sIGhhbmRsZWQp
OworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdhbnRzIHRvIGVu
YWJsZSB0aGUgZ2l2ZW4gZWRpdGluZyBjb21tYW5kLgorICAgIElzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lKSAtPiAoYm9vbCBlbmFibGVkKTsKKyAgICAKKyAg
ICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0byBoYW5kbGUgcGFnZSBz
Y2FsZSBmYWN0b3IgaXRzZWxmLgorICAgIEhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSAtPiAoYm9v
bCBlbmFibGVkKTsKIAogICAgICMgU2VudCB3aGVuIHRoZSBwbHVnLWluIGZvY3VzIGNoYW5nZXMu
CiAgICAgU2V0Rm9jdXMoYm9vbCBpc0ZvY3VzZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dl
YlByZWZlcmVuY2VzU3RvcmUuaAppbmRleCAxZTNjYTYzLi4xODU4OTgzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKQEAgLTEzNyw2ICsxMzcsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKICAgICBtYWNybyhTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxl
ZCwgc2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQsIEJvb2wsIGJvb2wsIERFRkFVTFRfU0NS
RUVOX0ZPTlRfU1VCU1RJVFVUSU9OX0VOQUJMRUQpIFwKICAgICBtYWNybyhDb29raWVFbmFibGVk
LCBjb29raWVFbmFibGVkLCBCb29sLCBib29sLCB0cnVlKSBcCiAgICAgbWFjcm8oUGx1Z0luU25h
cHNob3R0aW5nRW5hYmxlZCwgcGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCwgQm9vbCwgYm9vbCwg
ZmFsc2UpIFwKKyAgICBtYWNybyhQREZQbHVnaW5FbmFibGVkLCBwZGZQbHVnaW5FbmFibGVkLCBC
b29sLCBib29sLCBmYWxzZSkgXAogICAgIFwKIAogI2RlZmluZSBGT1JfRUFDSF9XRUJLSVRfRE9V
QkxFX1BSRUZFUkVOQ0UobWFjcm8pIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCA4MDAzMGFjLi4wMTIzNGY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCkBAIC02Niw3ICs2Niw2IEBAIHZvaWQgV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29u
CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVkQXNOb0FjY2Vzcyk7CiAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQp
OwogICAgIGVuY29kZXItPmVuY29kZSh1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQp
OwotICAgIGVuY29kZXItPmVuY29kZShtaW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24p
OwogICAgIGVuY29kZXItPmVuY29kZUVudW0oY2FjaGVNb2RlbCk7CiAgICAgZW5jb2Rlci0+ZW5j
b2RlKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxk
QWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCk7CkBAIC0xNDcsOCArMTQ2LDYgQEAgYm9vbCBX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBXZWIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFibGVkKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBhcmFtZXRl
cnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShwYXJhbWV0ZXJzLmNhY2hlTW9kZWwp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1l
dGVycy5zaG91bGRUcmFja1Zpc2l0ZWRMaW5rcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAwZDU0M2ZhLi5mOTU0
OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKQEAgLTY5LDkgKzY5LDYgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNE
aXNwbGF5SXNvbGF0ZWQ7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0NPUlNFbmFibGVkOwogCi0gICAgLy8gTUlNRSB0eXBlcyBmb3Igd2hpY2ggdGhlIFVJIHByb2Nl
c3Mgd2lsbCBoYW5kbGUgc2hvd2luZyB0aGUgZGF0YS4KLSAgICBWZWN0b3I8U3RyaW5nPiBtaW1l
VHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb247Ci0KICAgICBDYWNoZU1vZGVsIGNhY2hlTW9k
ZWw7CiAgICAgYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsKIApAQCAtMTEzLDYgKzExMCw3
IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKIAogICAgIGJvb2wgc2hv
dWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOwogICAgIGJvb2wgc2hvdWxkRW5hYmxlS2Vy
bmluZ0FuZExpZ2F0dXJlc0J5RGVmYXVsdDsKKwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIFN0
cmluZyBjZlVSTENhY2hlUGF0aDsKICAgICB1aW50NjRfdCBjZlVSTENhY2hlRGlza0NhcGFjaXR5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaAppbmRleCA0NGMzNzVj
Li5jOWExZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdElt
cG9ydHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMuaApA
QCAtMzMsNiArMzMsMTAgQEAgQ2xhc3MgY2xhc3NGcm9tUERGS2l0KE5TU3RyaW5nICpjbGFzc05h
bWUpOwogQ2xhc3MgcGRmQW5ub3RhdGlvbkxpbmtDbGFzcygpOwogQ2xhc3MgcGRmRG9jdW1lbnRD
bGFzcygpOwogCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCitDbGFzcyBwZGZMYXllckNvbnRy
b2xsZXJDbGFzcygpOworI2VuZGlmCisKIH0KIAogI2VuZGlmIC8vIFBERktpdEltcG9ydHNfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tCmluZGV4IDYyMzRhODMu
LmJjY2ZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1w
b3J0cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMubW0K
QEAgLTU0LDUgKzU0LDE0IEBAIENsYXNzIHBkZkRvY3VtZW50Q2xhc3MoKQogICAgIEFTU0VSVChw
ZGZEb2N1bWVudENsYXNzKTsKICAgICByZXR1cm4gcGRmRG9jdW1lbnRDbGFzczsKIH0KKyAgICAK
KyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKK0NsYXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNz
KCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MgPSBjbGFzc0Zy
b21QREZLaXQoQCJQREZMYXllckNvbnRyb2xsZXIiKTsKKyAgICBBU1NFUlQocGRmTGF5ZXJDb250
cm9sbGVyQ2xhc3MpOworICAgIHJldHVybiBwZGZMYXllckNvbnRyb2xsZXJDbGFzczsKK30KKyNl
bmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQ
cmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlcy5jcHAKaW5kZXggZWNjZTIwNS4uNTMyZDgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAtOTMzLDMgKzkzMywxMyBAQCBi
b29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7CiAgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoKTsKIH0KKwordm9pZCBXS1ByZWZlcmVuY2Vz
U2V0UERGUGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29s
IGVuYWJsZWQpCit7CisgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UERGUGx1Z2luRW5h
YmxlZChlbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZlcmVuY2VzR2V0UERGUGx1Z2luRW5hYmxl
ZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQoreworICAgIHJldHVybiB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5wZGZQbHVnaW5FbmFibGVkKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGMw
MjYxMWMuLmFmNWY3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0yMjMsNiArMjIzLDEwIEBAIFdLX0VYUE9S
VCBib29sIFdLUHJlZmVyZW5jZXNHZXRTY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0Q29va2llRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzLCBib29sIGVuYWJsZWQpOwogV0tfRVhQ
T1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldENvb2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRzIHRvIGZhbHNlCitXS19FWFBPUlQgdm9pZCBXS1By
ZWZlcmVuY2VzU2V0UERGUGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
LCBib29sIGVuYWJsZWQpOworV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBERlBsdWdp
bkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CisKIFdLX0VYUE9SVCB2b2lk
IFdLUHJlZmVyZW5jZXNSZXNldFRlc3RSdW5uZXJPdmVycmlkZXMoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAyZTBjOTRmLi5lZjc0NjhjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtNDYsNyAr
NDYsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogI2lmIFBMQVRGT1JN
KE1BQykKLSNpbmNsdWRlICJCdWlsdEluUERGVmlldy5oIgorI2luY2x1ZGUgIlNpbXBsZVBERlBs
dWdpbi5oIgorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorI2luY2x1ZGUgIlBERlBsdWdpbi5o
IgorI2VuZGlmCiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zMDUsOCAr
MzA4LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0UGx1Z2lucyh1aW50NjRf
dCByZXF1ZXN0SUQsIFBhc3NPd25QdHI8VmVjdG9yPFBsCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IC8vIEFkZCBidWlsdC1pbiBQREYgbGFzdCwgc28gdGhhdCBpdCdzIG5vdCB1c2VkIHdoZW4gYSBy
ZWFsIHBsdWctaW4gaXMgaW5zdGFsbGVkLgogICAgIC8vIE5PVEU6IFRoaXMgaGFzIHRvIGJlIGRv
bmUgb24gdGhlIG1haW4gdGhyZWFkIGFzIGl0IGNhbGxzIGxvY2FsaXplZFN0cmluZygpLgotICAg
IGlmICghbV9jb250ZXh0LT5vbWl0UERGU3VwcG9ydCgpKQotICAgICAgICBwbHVnaW5zLT5hcHBl
bmQoQnVpbHRJblBERlZpZXc6OnBsdWdpbkluZm8oKSk7CisgICAgaWYgKCFtX2NvbnRleHQtPm9t
aXRQREZTdXBwb3J0KCkpIHsKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyAgICAgICAgcGx1
Z2lucy0+YXBwZW5kKFBERlBsdWdpbjo6cGx1Z2luSW5mbygpKTsKKyNlbmRpZgorICAgICAgICBw
bHVnaW5zLT5hcHBlbmQoU2ltcGxlUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkpOworICAgIH0KICNl
bmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkR2V0UGx1Z2lucyhyZXF1
ZXN0SUQsICpwbHVnaW5zKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dlYkNvbnRleHRNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YkNvbnRleHRNYWMubW0KaW5kZXggMTVhYTA1MC4uYmJiOTgxYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQpAQCAtNzcsMTIgKzc3LDYgQEAgdm9p
ZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmEKIHsKICAgICBwYXJhbWV0ZXJzLnByZXNlbnRlckFwcGxpY2F0
aW9uUGlkID0gZ2V0cGlkKCk7CiAKLSAgICBpZiAoIW9taXRQREZTdXBwb3J0KCkpIHsKLSAgICAg
ICAgLy8gV2Ugd2FudCB0byB1c2UgYSBQREYgdmlldyBpbiB0aGUgVUkgcHJvY2VzcyBmb3IgUERG
IE1JTUUgdHlwZXMuCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1p
bWVUeXBlID0gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOwotICAgICAgICBwYXJhbWV0ZXJz
Lm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi5hcHBlbmRSYW5nZShtaW1lVHlwZS5i
ZWdpbigpLCBtaW1lVHlwZS5lbmQoKSk7Ci0gICAgfQotCiAgICAgcGFyYW1ldGVycy5wYXJlbnRQ
cm9jZXNzTmFtZSA9IFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gcHJvY2Vzc05hbWVdOyAg
ICAKIAogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2FjaGVQYXRoKEFkb3B0Q0YsIFdLQ29w
eUZvdW5kYXRpb25DYWNoZURpcmVjdG9yeSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkMGIwYmNmLi42ZTZlOWUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yNTgsNiArMjU4LDcgQEAKIAkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNz
aWJpbGl0eVdlYlBhZ2VPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyOUNENTVBOTEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5
V2ViUGFnZU9iamVjdC5tbSAqLzsgfTsKIAkJMjlENTVERjExNjFCRjlGMTAwMzFBMkUzIC8qIFdl
YlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQ
YWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTI5RDU1REYyMTYxQkY5
RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ1NURGMDE2MUJGOUYxMDAzMUEyRTMg
LyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICovOyB9OworCQkyRDg3MEQxMDE2MjM0RkZF
MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSAq
LzsgfTsKIAkJMzEwOTk5NzMxNDZDNzVBMjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA5
OTk3MTE0NkM3NTlCMDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLzsgfTsK
IAkJMzEwOTk5QzcxNDZDOUUzRDAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwOTk5NjgxNDZD
NzFGNTAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5oICovOyB9OwogCQkzMTJDMEM0
QTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQzBDNDkxNDZEREM4QTAwMTZD
OTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTM0LDcgKzkzNSw3IEBACiAJCUUxOTU4MkQ2MTUz
Q0MwNTQwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktp
dEltcG9ydHMubW0gKi87IH07CiAJCUUxOTY3RTM2MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBw
bGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUu
V2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgKi87IH07CiAJCUUxOTY3RTM4MTUwQUI1RTIwMEM3MzE2
OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBs
ZS5XZWJQcm9jZXNzLnNiICovOyB9OwotCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVp
bHRJblBERlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gKi87IH07
CisJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk5ODc1QzE0MkJGQzk3
MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLm1tICovOyB9OwogCQlFMUEzMTczMjEzNENFQTZD
MDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcuaCAqLzsgfTsKIAkJRTFBMzE3MzUxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLzsgfTsK
IAkJRTFBRUEyMkYxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBRUEy
MkQxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oICovOyB9
OwpAQCAtMTMzMyw2ICsxMzM0LDggQEAKIAkJMjlENTVERUUxNjFCRjg3ODAwMzFBMkUzIC8qIFdl
YlBhZ2VHcm91cFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5Lm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ1NURFRjE2MUJGOUYxMDAz
MUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOUQ1NURGMDE2MUJGOUYxMDAz
MUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUERGUGx1Z2luLmg7IHBhdGggPSBQREYv
UERGUGx1Z2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJEODcwRDBFMTYyMkI3
RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBQREZQbHVnaW4ubW07IHBhdGggPSBQREYvUERGUGx1Z2luLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90
aWZpY2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA5OTk3MTE0NkM3NTlCMDAyOURFQjkg
LyogV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxMkMwQzQ5MTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3Zp
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTm90aWZpY2F0aW9uUHJv
dmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjYsOCArMjA2OSw4IEBA
CiAJCUUxOTU4MkQ0MTUzQ0MwNTMwMEI2MDg3NSAvKiBQREZLaXRJbXBvcnRzLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUERGS2l0SW1wb3J0cy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NjdFMzUxNTBBQjVENTAwQzczMTY5IC8qIGNvbS5h
cHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20u
YXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBjb20uYXBwbGUuV2ViUHJvY2Vzcy5zYjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5Q
REZWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3
Lmg7IHBhdGggPSBQREYvQnVpbHRJblBERlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gQnVpbHRJblBERlZpZXcubW07IHBh
dGggPSBQREYvQnVpbHRJblBERlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2ltcGxlUERGUGx1Z2luLmg7IHBhdGggPSBQREYvU2lt
cGxlUERGUGx1Z2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxOTk4NzVDMTQy
QkZDOTcwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBTaW1wbGVQREZQbHVnaW4ubW07IHBhdGggPSBQREYvU2ltcGxl
UERGUGx1Z2luLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUEzMTczMTEzNENF
QTZDMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBdHRyaWJ1dGVkU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBRUEyMkQxNDY4N0JEQjAwODA0NTY5IC8q
IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTM4OTcsOCArMzkwMCwxMCBAQAogCQlFMTk5ODc1QjE0MkJGOUNGMDBCQjJE
RTcgLyogUERGICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJ
CQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcubW0gKi8sCi0JCQkJ
RTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3LmggKi8sCisJCQkJMkQ4
NzBEMEQxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5oICovLAorCQkJCTJEODcwRDBFMTYy
MkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gKi8sCisJCQkJRTE5OTg3NUMxNDJCRkM5NzAw
QkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSAqLywKKwkJCQlFMTk5ODc1QTE0MkJGOUI4MDBC
QjJERTcgLyogU2ltcGxlUERGUGx1Z2luLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFBERjsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC00ODEyLDYgKzQ4MTcsNyBAQAogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTVENTE4NDU1MTNCQ0Y5
Q0MwMEM3RkY0QSAvKiBBUElDbGllbnRUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ4
NzBEMTAxNjIzNEZGRTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUI2MzQwM0Y5MTQ5MTBENTcwMDEwNzBCNSAvKiBBUElPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEzRDYxMDUxM0E3RjAzQTAwRjk1RDRFIC8qIEFyZ3VtZW50Q29kZXJzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBQUYwQzRCMTJCMTYzMzQwMDhFNDlFMiAvKiBBcmd1bWVudENvZGVy
c0NGLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDgyOCw3ICs0ODM0LDcgQEAKIAkJCQkxQTY0MjU2
OTEyREU0MkVDMDBDQUFFMkMgLyogQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBNjQyOTJEMTJERTVGOTgwMENBQUUyQyAvKiBCYWNraW5nU3RvcmVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQUM0MUFDODEyNjNDODgzMDAwNTRFOTQgLyogQmluYXJ5U2VtYXBob3JlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAvKiBCdWlsdElu
UERGVmlldy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxOTk4NzVFMTQyQzA0NTQwMEJCMkRFNyAv
KiBTaW1wbGVQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUEyRTUxRTEyRTRDMDVF
MDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUEyRDk1NzAx
Mjg0ODU2NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTZGOUZCNzExRTE0MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVNYWMuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVQbHVnaW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAppbmRleCBlMjhjNzhkLi41YWYwNzI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKQEAgLTkxMyw2ICs5MTMsMjEgQEAgYm9vbCBOZXRzY2Fw
ZVBsdWdpbjo6aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBrZXli
b2FyZEV2ZW50KQogICAgIHJldHVybiBwbGF0Zm9ybUhhbmRsZUtleWJvYXJkRXZlbnQoa2V5Ym9h
cmRFdmVudCk7CiB9CiAKK2Jvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE5ldHNjYXBlUGx1Z2luOjppc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKyAgICAKK2Jvb2wgTmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3Io
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBOZXRzY2FwZVBsdWdpbjo6c2V0Rm9j
dXMoYm9vbCBoYXNGb2N1cykKIHsKICAgICBBU1NFUlQobV9pc1N0YXJ0ZWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uaAppbmRleCA2MWUyYmI3Li4yOTk1M2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4u
aApAQCAtMjAzLDYgKzIwMywxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVD
b250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CiAgICAgdmlydHVh
bCB2b2lkIHNldEZvY3VzKGJvb2wpOworCisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdD
b21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQp
OworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcm
KTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOworCiAg
ICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCk7CiAKICNpZiBQ
TEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL0J1aWx0SW5QREZWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL0J1aWx0SW5QREZWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFj
ODgyOWQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9CdWlsdEluUERGVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIEJ1aWx0SW5QREZWaWV3X2gKLSNkZWZpbmUgQnVpbHRJblBE
RlZpZXdfaAotCi0jaW5jbHVkZSAiUGx1Z2luLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxh
YmxlQXJlYS5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFx
dWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFs
dWUqIEpTVmFsdWVSZWY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgUGx1Z2lu
SW5mbzsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFBsdWdpblZpZXc7Ci1jbGFz
cyBXZWJGcmFtZTsKLQotY2xhc3MgQnVpbHRJblBERlZpZXcgOiBwdWJsaWMgUGx1Z2luLCBwcml2
YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxCdWlsdEluUERGVmlldz4gY3JlYXRlKFdlYkZyYW1lKik7Ci0gICAgfkJ1aWx0SW5QREZW
aWV3KCk7Ci0KLSAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7Ci0K
LSAgICAvLyBJbi1wcm9jZXNzIFBERlZpZXdzIGRvbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGlu
aXRpYWxpemF0aW9uLgotICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3VzbHlJbml0
aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgQnVpbHRJblBERlZpZXcoV2ViRnJhbWUqKTsKLQotICAgIC8vIFJlZ3VsYXIgcGx1Zy1pbnMg
ZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmlldywgYnV0IHdlIGFkZCBzY3JvbGxiYXJzIHRvIGVtYmVk
ZGluZyBGcmFtZVZpZXcgZm9yIHByb3BlciBldmVudCBoYW5kbGluZy4KLSAgICBQbHVnaW5WaWV3
KiBwbHVnaW5WaWV3KCk7Ci0gICAgY29uc3QgUGx1Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0
OwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlv
bik7Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0
aW9uKTsKLSAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotICAgIHZvaWQgcGRmRG9jdW1l
bnREaWRMb2FkKCk7Ci0gICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOwotICAgIHZvaWQgcGFpbnRC
YWNrZ3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBwYWludENvbnRlbnQoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHBh
aW50Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIC8vIFBsdWctaW4gbWV0aG9kcwotICAgIHZpcnR1YWwg
Ym9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveSgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90
KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2lu
TGF5ZXIoKTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zcGFyZW50KCk7Ci0gICAg
dmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRy
YW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7Ci0gICAgdmlydHVhbCB2b2lkIHZp
c2liaWxpdHlEaWRDaGFuZ2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2Fk
aW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmFpbCh1
aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBy
ZXN1bHQpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0
X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBz
dHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
TmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0
cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lk
IHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpOwotICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCk7
Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBX
ZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJf
dCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0
ZXMsIGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hM
b2FkaW5nKCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXND
YW5jZWxsZWQpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1v
dXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJX
aGVlbEV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVu
dChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRN
ZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVL
ZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0Rm9jdXMoYm9vbCk7Ci0gICAgdmlydHVhbCBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5Q
T2JqZWN0KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1
c0NoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFu
Z2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRl
cywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpOwotICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCk7Ci0gICAgdmlydHVh
bCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1
dCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9k
ZSkgT1ZFUlJJREU7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBzdG9yYWdlQmxvY2tpbmdT
dGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRl
Q2hhbmdlZChib29sKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9y
bVZhbHVlKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERp
cmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkpOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0gICAgdmlydHVhbCBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICB2aXJ0dWFsIFJldGFpblB0
cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIG1ldGhvZHMu
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50
YXRpb24pIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJD
b3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxl
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29y
ZTo6U2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQ
b2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBmYWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBr
ZWVwIGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBh
bmltYXRlLgotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50IG5ld1N0
eWxlLCBib29sIGZvcmNlVXBkYXRlKSBPVkVSUklERTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoZSBvdGhlciBjb252ZXJzaW9uIGZ1bmN0aW9uczsgdGhpcyBvbmUgaXMgZW5vdWdoIHRvIGdl
dCBzY3JvbGxiYXIgaGl0IHRlc3Rpbmcgd29ya2luZy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0
IE9WRVJSSURFOwotCi0gICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZik7
Ci0gICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgbV9wbHVnaW5TaXplOwotCi0gICAgV2ViQ29yZTo6
S1VSTCBtX3NvdXJjZVVSTDsKLQotICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOwotICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGFCdWZmZXI7Ci0KLSAgICBSZXRhaW5Q
dHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1lbnQ7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJl
Y3Q+IG1fcGFnZUJveGVzOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7
IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdhcHMuCi0KLSAgICBSZWZQdHI8V2ViQ29yZTo6U2Ny
b2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9s
bGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgIFdlYkZyYW1lKiBtX2ZyYW1lOwotCi0g
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gQnVpbHRJblBERlZpZXdfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkY2FlYTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbQorKysgL2Rldi9u
dWxsCkBAIC0xLDg4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAi
Y29uZmlnLmgiCi0jaW1wb3J0ICJCdWlsdEluUERGVmlldy5oIgotCi0jaW1wb3J0ICJQREZLaXRJ
bXBvcnRzLmgiCi0jaW1wb3J0ICJQbHVnaW5WaWV3LmgiCi0jaW1wb3J0ICJTaGFyZWFibGVCaXRt
YXAuaCIKLSNpbXBvcnQgIldlYkV2ZW50LmgiCi0jaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24u
aCIKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+Ci0jaW1w
b3J0IDxQREZLaXQvUERGS2l0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRM
b2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1h
cC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmlt
YXRvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyB2b2lkIGFwcGVu
ZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlSZWYgc3VidHJl
ZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQotewotICAgIENHUERGQXJyYXlSZWYg
bmFtZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJOYW1lcyIs
ICZuYW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJyYXlHZXRDb3Vu
dChuYW1lcykgLyAyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hbWVDb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Ci0gICAgICAgICAgICBD
R1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwotICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlH
ZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlS
ZWYga2lkOwotICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5KGtpZHMsIGksICZr
aWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFwcGVuZFZhbHVlc0luUERGTmFt
ZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBn
ZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0cmVlLCBWZWN0b3I8
Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17Ci0gICAgYXBwZW5kVmFsdWVzSW5QREZOYW1l
U3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFs
bFNjcmlwdHNJblBERkRvY3VtZW50KENHUERGRG9jdW1lbnRSZWYgcGRmRG9jdW1lbnQsIFZlY3Rv
cjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4mIHNjcmlwdHMpCi17Ci0gICAgaWYgKCFwZGZEb2N1
bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFs
b2cgPSBDR1BERkRvY3VtZW50R2V0Q2F0YWxvZyhwZGZEb2N1bWVudCk7Ci0gICAgaWYgKCFwZGZD
YXRhbG9nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIGRpY3Rpb25hcnkgb2Yg
YWxsIGRvY3VtZW50LWxldmVsIG5hbWUgdHJlZXMuCi0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIG5h
bWVzRGljdGlvbmFyeTsKLSAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkocGRm
Q2F0YWxvZywgIk5hbWVzIiwgJm5hbWVzRGljdGlvbmFyeSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEdldCB0aGUgZG9jdW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KLSAg
ICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdE5hbWVUcmVlOwotICAgIGlmICghQ0dQREZE
aWN0aW9uYXJ5R2V0RGljdGlvbmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmph
dmFTY3JpcHROYW1lVHJlZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBuYW1lcyBh
cmUgYXJiaXRyYXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCi0gICAg
VmVjdG9yPENHUERGT2JqZWN0UmVmPiBvYmplY3RzOwotICAgIGdldEFsbFZhbHVlc0luUERGTmFt
ZVRyZWUoamF2YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKLSAgICBzaXplX3Qgb2JqZWN0Q291
bnQgPSBvYmplY3RzLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
Q291bnQ7ICsraSkgewotICAgICAgICBDR1BERkRpY3Rpb25hcnlSZWYgamF2YVNjcmlwdEFjdGlv
bjsKLSAgICAgICAgaWYgKCFDR1BERk9iamVjdEdldFZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQ
REZPYmplY3RSZWY+KG9iamVjdHNbaV0pLCBrQ0dQREZPYmplY3RUeXBlRGljdGlvbmFyeSwgJmph
dmFTY3JpcHRBY3Rpb24pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQSBK
YXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3JpcHQi
LgotICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOwotICAgICAgICBpZiAoIUNHUERGRGlj
dGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwgc3Ry
Y21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBjb25zdCBVSW50OCogYnl0ZXMgPSAwOwotICAgICAgICBDRkluZGV4IGxlbmd0aDsK
LSAgICAgICAgQ0dQREZTdHJlYW1SZWYgc3RyZWFtOwotICAgICAgICBDR1BERlN0cmluZ1JlZiBz
dHJpbmc7Ci0gICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAgICAgIGlmIChD
R1BERkRpY3Rpb25hcnlHZXRTdHJlYW0oamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmVhbSkp
IHsKLSAgICAgICAgICAgIENHUERGRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgICAgICBkYXRh
LmFkb3B0Q0YoQ0dQREZTdHJlYW1Db3B5RGF0YShzdHJlYW0sICZmb3JtYXQpKTsKLSAgICAgICAg
ICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJ5
dGVzID0gQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9
IENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChDR1BERkRp
Y3Rpb25hcnlHZXRTdHJpbmcoamF2YVNjcmlwdEFjdGlvbiwgIkpTIiwgJnN0cmluZykpIHsKLSAg
ICAgICAgICAgIGJ5dGVzID0gQ0dQREZTdHJpbmdHZXRCeXRlUHRyKHN0cmluZyk7Ci0gICAgICAg
ICAgICBsZW5ndGggPSBDR1BERlN0cmluZ0dldExlbmd0aChzdHJpbmcpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICghYnl0ZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRlN0
cmluZ0VuY29kaW5nIGVuY29kaW5nID0gKGxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT0gMHhGRSAm
JiBieXRlc1sxXSA9PSAweEZGKSA/IGtDRlN0cmluZ0VuY29kaW5nVW5pY29kZSA6IGtDRlN0cmlu
Z0VuY29kaW5nVVRGODsKLSAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHQoQWRv
cHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQnl0ZXMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnl0ZXMs
IGxlbmd0aCwgZW5jb2RpbmcsIHRydWUpKTsKLSAgICAgICAgaWYgKCFzY3JpcHQpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBzY3JpcHRzLmFwcGVuZChzY3JpcHQpOwotICAgIH0K
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNvbnN0IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVx
dWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBzdXBwb3J0cyBsb2FkaW5nIG11bHRpcGxl
IHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZvciBQREYuCi0KLWNvbnN0IGludCBndXR0
ZXJIZWlnaHQgPSAxMDsKLWNvbnN0IGludCBzaGFkb3dPZmZzZXRYID0gMDsKLWNvbnN0IGludCBz
aGFkb3dPZmZzZXRZID0gLTI7Ci1jb25zdCBpbnQgc2hhZG93U2l6ZSA9IDc7Ci0KLVBhc3NSZWZQ
dHI8QnVpbHRJblBERlZpZXc+IEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1l
KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQnVpbHRJblBERlZpZXcoZnJhbWUpKTsKLX0K
LQotQnVpbHRJblBERlZpZXc6OkJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKiBmcmFtZSkKLSAgICA6
IG1fZnJhbWUoZnJhbWUpCi17Ci19Ci0KLUJ1aWx0SW5QREZWaWV3Ojp+QnVpbHRJblBERlZpZXco
KQotewotfQotCi1QbHVnaW5JbmZvIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkKLXsKLSAg
ICBQbHVnaW5JbmZvIGluZm87Ci0gICAgaW5mby5uYW1lID0gYnVpbHRJblBERlBsdWdpbk5hbWUo
KTsKLQotICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKLSAgICBtaW1lQ2xhc3NJbmZv
LnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOwotICAgIG1pbWVDbGFzc0luZm8uZGVzYyA9IHBkZkRv
Y3VtZW50VHlwZURlc2NyaXB0aW9uKCk7Ci0gICAgbWltZUNsYXNzSW5mby5leHRlbnNpb25zLmFw
cGVuZCgicGRmIik7Ci0KLSAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1lQ2xhc3NJbmZvKTsKLSAg
ICByZXR1cm4gaW5mbzsKLX0KLQotUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZp
ZXcoKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigp
KTsKLX0KLQotY29uc3QgUGx1Z2luVmlldyogQnVpbHRJblBERlZpZXc6OnBsdWdpblZpZXcoKSBj
b25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJv
bGxlcigpKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCi17
Ci0gICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVy
dGljYWxTY3JvbGxiYXI7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAg
ICAgIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgp
KQotICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAg
ICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSkKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwot
ICAgIH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIo
VmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwot
ICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYg
IW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMu
aXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOwotCi0gICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0
ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLndpZHRoKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3
KCktPnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBz
Y3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOwot
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0
KTsKLSAgICB9Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9w
bHVnaW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1
bWVudFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVj
dChwbHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNj
cm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBpZiAobV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICAKLSAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7Ci0gICAgaWYgKCFm
cmFtZVZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1f
aG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotICAgIGlmIChoYWRT
Y3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKLSAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMp
Ci0gICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OwotCi0gICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLVBh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdEluUERGVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikKLSAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkp
OwotICAgIGVsc2UgCi0gICAgICAgIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQo
KSk7Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5n
ZXQoKSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgd2lsbFJlbW92ZUhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHdp
bGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwotCi0gICAgc2Nyb2xs
YmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyLT5kaXNjb25uZWN0RnJvbVNj
cm9sbGFibGVBcmVhKCk7Ci0gICAgc2Nyb2xsYmFyID0gMDsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6YWRkQXJjaGl2ZVJlc291cmNlKCkKLXsKLSAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sg
dG8gZm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMg
c2hvdWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNvdXJjZXMuCi0KLSAgICAvLyBBZGQg
anVzdCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2
ZXMgdG8gd29yay4KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHN5bnRoZXNpemVkUmVzcG9uc2U7Ci0g
ICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShtX3N1Z2dlc3RlZEZp
bGVuYW1lKTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFVSTChtX3NvdXJjZVVSTCk7IC8v
IE5lZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZVBERlVSTC4KLSAgICBz
eW50aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBsaWNhdGlvbi9wZGYiKTsKLQotICAg
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVh
dGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1ZmZlci5nZXQoKSksIG1fc291cmNl
VVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0cmluZygpLCBzeW50aGVzaXplZFJl
c3BvbnNlKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50KCktPmxvYWRlcigp
LT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6cGRmRG9jdW1lbnREaWRMb2FkKCkKLXsKLSAgICBhZGRBcmNoaXZlUmVzb3Vy
Y2UoKTsKLQotICAgIG1fcGRmRG9jdW1lbnQuYWRvcHROUyhbW3BkZkRvY3VtZW50Q2xhc3MoKSBh
bGxvY10gaW5pdFdpdGhEYXRhOihOU0RhdGEgKiltX2RhdGFCdWZmZXIuZ2V0KCldKTsKLQotICAg
IGNhbGN1bGF0ZVNpemVzKCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgY29udHJv
bGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1f
cGx1Z2luU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gPiBzY3JpcHRzOwotICAgIGdldEFsbFNjcmlwdHNJblBERkRvY3VtZW50KFttX3BkZkRvY3Vt
ZW50LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7Ci0KLSAgICBzaXplX3Qgc2NyaXB0Q291
bnQgPSBzY3JpcHRzLnNpemUoKTsKLSAgICBpZiAoIXNjcmlwdENvdW50KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRl
KDApOwotICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gbWFrZUpTUERGRG9jKGN0eCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKLSAgICAgICAgSlNT
dHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5n
ZXQoKSk7Ci0gICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAw
LCAwLCAwKTsKLSAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7Ci0gICAgfQotCi0gICAg
SlNHbG9iYWxDb250ZXh0UmVsZWFzZShjdHgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpj
YWxjdWxhdGVTaXplcygpCi17Ci0gICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRH
ZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgewotICAgICAgICBDR1BERlBh
Z2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgp
IGRvY3VtZW50UmVmXSwgaSArIDEpOwotICAgICAgICBBU1NFUlQocGRmUGFnZSk7Ci0KLSAgICAg
ICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGQ3JvcEJv
eCk7Ci0gICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCi0gICAgICAgICAgICBib3ggPSBD
R1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKLSAgICAgICAgbV9w
YWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7Ci0gICAgICAgIG1fcGRmRG9jdW1lbnRTaXpl
LnNldFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGJveC5zaXplLndpZHRoKSkpOwotICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5leHBhbmQoMCwg
Ym94LnNpemUuaGVpZ2h0KTsKLSAgICB9Ci0gICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAs
IGd1dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Ci19Ci0KLWJvb2wgQnVp
bHRJblBERlZpZXc6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKLXsK
LSAgICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRlZC4KLSAgICBtX3NvdXJjZVVSTCA9IHBh
cmFtZXRlcnMudXJsOwotICAgIGlmICghcGFyYW1ldGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIg
JiYgIXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKLSAgICAgICAgY29udHJvbGxlcigpLT5sb2Fk
VVJMKHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCks
IFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rvcjx1aW50OF90PigpLCBmYWxzZSk7Ci0K
LSAgICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxpemVQbHVnaW4oKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZnJh
bWUpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZy
YW1lKCktPnZpZXcoKSkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEodGhpcyk7Ci0gICAgfQotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xs
YmFyKTsKLSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLX0KLQotdm9p
ZCBCdWlsdEluUERGVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBjb250ZW50QXJlYVdpbGxQYWludCgp
OwotCi0gICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKLQot
ICAgIGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklYTUU6IERyYXcgbG9hZGluZyBwcm9ncmVzcy4K
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFpbnRDb250ZW50KGdyYXBoaWNzQ29udGV4dCwgZGly
dHlSZWN0KTsKLSAgICBwYWludENvbnRyb2xzKGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLSAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0KGRpcnR5UmVjdCk7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAg
ICBncmFwaGljc0NvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvbkhpZ2gpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUp
OwotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7Ci0gICAg
Z3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOwotICAgIElu
dFJlY3QgY29udGVudFJlY3QoZGlydHlSZWN0KTsKLSAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgt
bV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLQotICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLQotICAgIGludCBwYWdlVG9wID0g
MDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEludFJlY3QgcGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOwotICAgICAgICBmbG9h
dCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lk
dGgoKSAtIHBhZ2VCb3gud2lkdGgoKSkgLyAyLjBmKSwgMC4wZik7Ci0gICAgICAgIGZsb2F0IGV4
dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgo
cm91bmRmKChtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93
T2Zmc2V0WSkgLyAyLjBmKSwgMC4wZikgOiAwOwotCi0gICAgICAgIGlmIChwYWdlVG9wID4gY29u
dGVudFJlY3QubWF4WSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwYWdlVG9w
ICsgcGFnZUJveC5oZWlnaHQoKSArIGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhl
aWdodCA+PSBjb250ZW50UmVjdC55KCkpIHsKLSAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQ
YWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRS
ZWZdLCBpICsgMSk7Ci0KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJp
bmdYIC0gcGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94Lnko
KSAtIHBhZ2VCb3guaGVpZ2h0KCkpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFNoYWRvdyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1Np
emUsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPmZpbGxSZWN0KHBhZ2VCb3gpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5jbGVhclNoYWRvdygpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAo
cGFnZUJveCk7Ci0KLSAgICAgICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBk
ZlBhZ2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcGFnZVRvcCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0Owot
ICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0
KCkgLSBndXR0ZXJIZWlnaHQpOwotICAgIH0KLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFp
bnRDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQotewotICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJh
ckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKLSAgICAgICAgc2Nyb2xsYmFyRGlydHlSZWN0Lm1vdmVC
eShwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOwotICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54KCksIC1wbHVn
aW5WaWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7Ci0KLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhp
Y3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotCi0gICAgICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoZ3JhcGhp
Y3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOwotICAgIH0KLQotICAgIEludFJlY3QgZGly
dHlDb3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwgZGlydHlSZWN0
KTsKLSAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIoMCwgZ3Jh
cGhpY3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
Ojp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCi17
Ci0gICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSk7Ci0K
LSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmludmFsaWRhdGUoKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGludmFsaWRhdGVTY3Jv
bGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKLX0KLQotUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IEJ1aWx0SW5QREZWaWV3OjpzbmFwc2hvdCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LSNpZiBQTEFURk9STShNQUMpCi1QbGF0Zm9ybUxheWVyKiBCdWlsdEluUERGVmlldzo6cGx1Z2lu
TGF5ZXIoKQotewotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotYm9vbCBCdWlsdEluUERG
Vmlldzo6aXNUcmFuc3BhcmVudCgpCi17Ci0gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6d2FudHNXaGVlbEV2ZW50
cygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Omdlb21l
dHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmIGNs
aXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0p
Ci17Ci0gICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5TaXplKSB7Ci0gICAgICAgIC8vIE5v
dGhpbmcgdG8gZG8uCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3BsdWdpblNpemUg
PSBwbHVnaW5TaXplOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6dmlzaWJpbGl0eURpZENoYW5nZSgpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90
LCBib29sKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3OjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5n
JikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBLVVJM
JiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFt
SUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fc3VnZ2VzdGVk
RmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKLX0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZFJlY2Vp
dmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkK
LXsKLSAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJl
cXVlc3RJRCk7Ci0KLSAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKLSAgICAgICAgbV9kYXRhQnVmZmVy
LmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0KLSAgICBDRkRhdGFBcHBlbmRC
eXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihi
eXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZpbmlz
aExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1J
RCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwotCi0gICAgcGRmRG9jdW1lbnRE
aWRMb2FkKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnN0cmVhbURpZEZhaWwodWludDY0
X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3Ry
ZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIG1fZGF0YUJ1
ZmZlci5jbGVhcigpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRS
ZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxl
bmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkK
LXsKLSAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghbV9kYXRhQnVmZmVyKQotICAgICAgICBt
X2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLQotICAgIENG
RGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFu
dWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCi17Ci0gICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7
Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkKLXsK
LSAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFu
ZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKLXsKLSAgICBzd2l0Y2gg
KGV2ZW50LnR5cGUoKSkgewotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKLSAgICAgICAg
bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKLSAgICAgICAgLy8gRklYTUU6IFNob3VsZCBhbHNv
IG5vdGlmeSBzY3JvbGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNob3VsZCBhbHNvIHNlbmQg
bW91c2VFeGl0ZWQgdG8gaGlkZSBpdC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXZWJFdmVu
dDo6TW91c2VEb3duOiB7Ci0gICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBhcyB3aWxsIG1ha2Ug
RXZlbnRIYW5kbGVyIHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlzIGFwcHJvcHJpYXRlIHdo
ZW4gY2xpY2tpbmcgc2Nyb2xsYmFycy4KLSAgICAgICAgLy8gSWRlYWxseSwgd2Ugd291bGRuJ3Qg
Y2hhbmdlIGZvY3VzIGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFkeSBkaWQgdGhhdCBmb3Ig
dXMuCi0gICAgICAgIC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1zIGlzIGFkZGVkLCB3ZSds
bCBuZWVkIHRvIGFjdHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4gY2xpY2tpbmcgaW4gYSBm
b3JtLgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDog
ewotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2
ZW50KTsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgaWYg
KG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5t
b3VzZVVwKHBsYXRmb3JtRXZlbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxF
dmVudCYgZXZlbnQpCi17Ci0gICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBsYXRmb3JtRXZlbnQgPSBw
bGF0Zm9ybShldmVudCk7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2
ZW50KHBsYXRmb3JtRXZlbnQpOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVNb3Vz
ZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgbW91c2VFbnRlcmVkQ29u
dGVudEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6
OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAgICBtb3Vz
ZUV4aXRlZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0
SW5QREZWaWV3OjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQot
ewotICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1lbnUuCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKLXsKLX0KLQotTlBPYmplY3QqIEJ1
aWx0SW5QREZWaWV3OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQotewotICAgIHJldHVybiAw
OwotfQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dG
b2N1c0NoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6d2luZG93QW5k
Vmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNj
cmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRv
d0Nvb3JkaW5hdGVzKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp3aW5kb3dWaXNpYmls
aXR5Q2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1Nj
YWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKLXsKLX0KLQotdWludDY0X3QgQnVpbHRJblBERlZpZXc6
OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3Qg
U3RyaW5nJikKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c2V0TGF5ZXJIb3N0aW5nTW9k
ZShMYXllckhvc3RpbmdNb2RlKQotewotfQotCi0jZW5kaWYKLQotdm9pZCBCdWlsdEluUERGVmll
dzo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQotCi1ib29s
IEJ1aWx0SW5QREZWaWV3OjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKLXsKLSAgICByZXR1
cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0
SW5QREZWaWV3Ojpob3Jpem9udGFsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLmdldCgpOwotfQotCi1TY3JvbGxiYXIqIEJ1aWx0SW5QREZWaWV3Ojp2ZXJ0
aWNhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7
Ci19Ci0KLUludFJlY3QgQnVpbHRJblBERlZpZXc6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAot
ewotICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFy
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxi
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7Ci0gICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgfQotICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIEJ1
aWx0SW5QREZWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgLy8g
RklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBw
YXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFJlY3Qg
QnVpbHRJblBERlZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdAotewotICAg
IHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZW
aWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX3Nj
cm9sbE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxpdCBwYXJ0cyB0aGF0
IHJlbWFpbiB2aXNpYmxlLgotICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAs
IDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLX0KLQot
aW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAotewotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVy
dGljYWxTY3JvbGxiYXIpLmdldCgpOwotICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwotfQotCi1ib29s
IEJ1aWx0SW5QREZWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgewotICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5pc0FjdGl2ZSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBCdWlsdEluUERGVmlldzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgSW50UmVjdCBkaXJ0eVJlY3QgPSBy
ZWN0OwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKLSAgICBk
aXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkpOwotICAgIGNvbnRyb2xs
ZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGNv
bnRyb2xsZXIoKS0+aW52YWxpZGF0ZShyZWN0KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWludCBCdWlsdEluUERGVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0Ci17Ci0gICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQotICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKLSAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0Lndp
ZHRoKCksIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBE
RlZpZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBv
aW50KDAsIDApOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6bWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKLXsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9ICht
X2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92
ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkgLSBtX3BsdWdpblNpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpIC0gbV9wbHVnaW5TaXplLmhlaWdo
dCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgbWF4aW11bU9mZnNldC5jbGFt
cE5lZ2F0aXZlVG9aZXJvKCk7Ci0gICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Ci19Ci0KLWludCBC
dWlsdEluUERGVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1
Z2luU2l6ZS5oZWlnaHQoKTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlV2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKLX0KLQotSW50U2l6
ZSBCdWlsdEluUERGVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
ZGZEb2N1bWVudFNpemU7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OnNjcm9sbGJhcnNDYW5C
ZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRv
Y3VtZW50KCktPmluUGFnZUNhY2hlKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNjcm9s
bGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCi17Ci0gICAgaWYgKCFmb3Jj
ZVVwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xs
ZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBv
dmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3
aGVyZSBzY3JvbGxiYXJzIHdlcmUuCi0gICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsK
LSAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIC8vIEFzIHNpemUg
b2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVh
ciBvciB0byBkaXNhcHBlYXIuCi0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwotCi0gICAgU2Nyb2xs
YWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmll
dzo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50
UG9pbnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVydFRvUmVu
ZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQu
bW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwot
Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1zdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxpemUo
SlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZW
aWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFBy
aXZhdGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+cmVmKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGpz
UERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQotewotICAgIEJ1aWx0SW5QREZWaWV3
KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KSk7Ci0gICAgcGRmVmlldy0+ZGVyZWYoKTsKLX0KLQotSlNWYWx1ZVJlZiBCdWls
dEluUERGVmlldzo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBCdWlsdEluUERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4o
SlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLQotICAgIFdlYkZyYW1lKiBmcmFtZSA9
IHBkZlZpZXctPm1fZnJhbWU7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUtPmNv
cmVGcmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY3R4KTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsK
LSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgp
OwotCi0gICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7Ci0KLSAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLX0KLQotSlNPYmplY3RSZWYgQnVpbHRJblBERlZp
ZXc6Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQotewotICAgIHN0YXRpYyBKU1N0YXRp
Y0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7Ci0gICAgICAgIHsgInByaW50
IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7IDAsIDAsIDAgfSwKLSAgICB9Owot
Ci0gICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9uID0g
ewotICAgICAgICAwLAotICAgICAgICBrSlNDbGFzc0F0dHJpYnV0ZU5vbmUsCi0gICAgICAgICJE
b2MiLAotICAgICAgICAwLAotICAgICAgICAwLAotICAgICAgICBqc1BERkRvY1N0YXRpY0Z1bmN0
aW9ucywKLSAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY0ZpbmFsaXplLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0gICAgfTsKLQotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpz
UERGRG9jQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7Ci0K
LSAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgdGhpcyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjA2NGI0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFBERlBsdWdpbl9oCisjZGVmaW5lIFBERlBsdWdpbl9oCisKKyNpZiBFTkFC
TEUoUERGS0lUX1BMVUdJTikKKworI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQWZmaW5lVHJhbnNmb3JtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVl
KiBKU09iamVjdFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFs
dWVSZWY7CisKK09CSkNfQ0xBU1MgUERGTGF5ZXJDb250cm9sbGVyOworT0JKQ19DTEFTUyBXS1BE
RkxheWVyQ29udHJvbGxlckRlbGVnYXRlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3Qg
UGx1Z2luSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBsdWdpblZpZXc7
CitjbGFzcyBXZWJGcmFtZTsKKworY2xhc3MgUERGUGx1Z2luIDogcHVibGljIFBsdWdpbiwgcHVi
bGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFtZSopOworICAgIH5QREZQbHVnaW4oKTsKKwor
ICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZvIHBsdWdpbkluZm8oKTsKKworICAgIC8vIElu
LVdlYlByb2Nlc3MgcGx1Z2lucyBkb24ndCBzdXBwb3J0IGFzeW5jaHJvbm91cyBpbml0aWFsaXph
dGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJvbm91c2x5SW5pdGlhbGl6ZWQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgcGFpbnRDb250cm9sRm9y
TGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqLCBDR0NvbnRleHRSZWYpOworCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFBERlBsdWdpbihXZWJGcmFtZSopOworCisgICAgUGx1Z2luVmlldyogcGx1Z2lu
VmlldygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAg
IHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAg
IHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7Cisg
ICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAgICB2b2lkIHBkZkRvY3VtZW50RGlkTG9h
ZCgpOworICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCopOwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7CisgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOworICAgIHZpcnR1YWwgYm9vbCBp
c1RyYW5zcGFyZW50KCk7CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QsIGNv
bnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5zZm9ybSk7
CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAgdmlydHVh
bCB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2FuY2VsbGVk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRS
ZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHJl
c3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRp
bWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJl
Y2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0
aCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3Ry
ZWFtSUQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlE
LCBib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qg
c3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBt
YW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0
cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVN
b3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
V2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRs
ZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29s
IGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5k
RW5hYmxlZChjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVu
Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29v
cmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpOwor
ICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9k
ZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVDaGFu
Z2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQo
Ym9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHkpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CisKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRm
RG9jdW1lbnRGb3JQcmludGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGRmRG9jdW1l
bnQ7IH0KKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhcios
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBj
b25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGlu
dCB2aXNpYmxlV2lkdGgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFNpemUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5C
ZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5k
U2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUsIGJvb2wgZm9y
Y2VVcGRhdGUpIE9WRVJSSURFOworCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHBhcmVudFJlY3QpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdCBPVkVSUklERTsKKworICAgIHN0
YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKyAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
bV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtOworCisgICAgV2ViQ29yZTo6S1VSTCBtX3NvdXJj
ZVVSTDsKKworICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOworICAgIFJldGFpblB0cjxD
Rk11dGFibGVEYXRhUmVmPiBtX2RhdGE7CisKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1f
cGRmRG9jdW1lbnQ7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOwor
ICAgIFdlYkNvcmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5j
bHVkaW5nIGdhcHMuCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250
YWxTY3JvbGxiYXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNj
cm9sbGJhcjsKKworICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworCisgICAgUmV0YWluUHRyPENBTGF5
ZXIgKj4gbV9jb250YWluZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX2NvbnRl
bnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX2hvcml6b250YWxTY3JvbGxiYXJM
YXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXI7
CisgICAgUmV0YWluUHRyPENBTGF5ZXIgKj4gbV9zY3JvbGxDb3JuZXJMYXllcjsKKyAgICBSZXRh
aW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29udHJvbGxlcjsKKworICAgIFdl
YkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9s
YXN0TW91c2VQb2ludDsKKyAgICAKKyAgICBSZXRhaW5QdHI8V0tQREZMYXllckNvbnRyb2xsZXJE
ZWxlZ2F0ZT4gbV9wZGZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKFBERktJVF9QTFVHSU4pCisKKyNlbmRpZiAv
LyBQREZQbHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWJh
MDhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW0KQEAgLTAsMCArMSwxMDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlBERlBsdWdpbi5oIgorCisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCisjaW1wb3J0
ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbXBvcnQgIldl
YkV2ZW50LmgiCisjaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFBERktp
dC9QREZLaXQuaD4KKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3Vz
Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVk
U3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bh
c3RlYm9hcmQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9QREZEb2N1bWVudFNjcmlwdGluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgorCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9s
bGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihD
R1BvaW50KW5ld1Bvc2l0aW9uOworLSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0Fy
cmF5ICopaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0
UG9pbnQ6KENHUG9pbnQpcG9pbnQ7CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5n
ICopc3RyaW5nOworLSAodm9pZClvcGVuV2l0aFByZXZpZXc7CistICh2b2lkKXNhdmVUb1BERjsK
KworQGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0CitAZW5k
CisKK0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVyIChEZXRhaWxzKQorCitAcHJvcGVydHkg
KHJldGFpbikgQ0FMYXllciAqcGFyZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9j
dW1lbnQgKmRvY3VtZW50OworQHByb3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxl
ckRlbGVnYXRlPiBkZWxlZ2F0ZTsKKworLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXpl
OworCistICh2b2lkKXNldERpc3BsYXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxh
eXNQYWdlQnJlYWtzOihCT09MKXBhZ2VCcmVha3M7CisKKy0gKENHRmxvYXQpdGlsZVNjYWxlRmFj
dG9yOworLSAodm9pZClzZXRUaWxlU2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CisK
Ky0gKENHU2l6ZSljb250ZW50U2l6ZTsKKy0gKENHU2l6ZSljb250ZW50U2l6ZVJlc3BlY3Rpbmda
b29tOworCistICh2b2lkKXNuYXBzaG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsK
KworLSAodm9pZCltYWduaWZ5V2l0aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlv
biBhdFBvaW50OihDR1BvaW50KXBvaW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5Owor
CistIChDR1BvaW50KXNjcm9sbFBvc2l0aW9uOworLSAodm9pZClzZXRTY3JvbGxQb3NpdGlvbjoo
Q0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpc2Nyb2xsV2l0aERlbHRhOihDR1NpemUpZGVs
dGE7CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNl
TW92ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50
OworLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VF
bnRlcmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICop
ZXZlbnQ7CisKKy0gKE5TQXJyYXkgKilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNl
U2Vuc2l0aXZlOihCT09MKWlzQ2FzZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNo
b3VsZEhpZ2hsaWdodE1hdGNoZXM7CisKKy0gKGlkKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lk
KWNvcHlTZWxlY3Rpb247CistICh2b2lkKXNlbGVjdEFsbDsKKworLSAoYm9vbClrZXlEb3duOihO
U0V2ZW50ICopZXZlbnQ7CisKKy0gKHZvaWQpc2V0SFVERW5hYmxlZDooQk9PTCllbmFibGVkOwor
LSAoQk9PTClodWRFbmFibGVkOworCitAZW5kCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitAaW50ZXJmYWNlIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgOiBDQUxheWVyCit7CisgICAg
V2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBX
ZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
S1BERlBsdWdpblNjcm9sbGJhckxheWVyCisKK0BzeW50aGVzaXplIHBkZlBsdWdpbjsKKworLSAo
aWQpaW5pdFdpdGhQREZQbHVnaW46KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luCit7CisgICAg
aWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisg
ICAgX3BkZlBsdWdpbiA9IHBsdWdpbjsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
aWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCistICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKK3sKKyAg
ICBfcGRmUGx1Z2luLT5wYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChzZWxmLCBjdHgpOwor
fQorCitAZW5kCisKK0BpbnRlcmZhY2UgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5T
T2JqZWN0PFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPgoreworICAgIFdlYktpdDo6UERGUGx1
Z2luKiBfcGRmUGx1Z2luOworfQorCitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQREZQbHVn
aW4qIHBkZlBsdWdpbjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tQREZMYXllckNvbnRy
b2xsZXJEZWxlZ2F0ZQorCitAc3ludGhlc2l6ZSBwZGZQbHVnaW47CisKKy0gKGlkKWluaXRXaXRo
UERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdpbgoreworICAgIGlmICghKHNlbGYg
PSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9wZGZQbHVn
aW4gPSBwbHVnaW47CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRl
U2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5u
b3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKK30KKwor
LSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVz
OihOU0FycmF5ICopdHlwZXMKK3sKKyAgICAvLyBGSVhNRTogSGFuZGxlIHR5cGVzIG90aGVyIHRo
YW4gcGxhaW4gdGV4dC4KKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBpdGVt
cy5jb3VudDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNTdHJpbmcgKnR5cGUgPSBbdHlw
ZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpO
U1N0cmluZ1Bib2FyZFR5cGVdIHx8IFt0eXBlIGlzRXF1YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRU
eXBlU3RyaW5nXSkgeworICAgICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBwbGFpblRleHRT
dHJpbmcoQWRvcHROUywgW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOltpdGVtcyBvYmpl
Y3RBdEluZGV4OmldIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgICAg
ICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChwbGFpblRl
eHRTdHJpbmcuZ2V0KCksIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKKy0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5n
OihOU0F0dHJpYnV0ZWRTdHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludAorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDoo
TlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2
b2lkKW9wZW5XaXRoUHJldmlldworeworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0g
KHZvaWQpc2F2ZVRvUERGCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworQGVuZAor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgdWludDY0X3QgcGRmRG9jdW1lbnRSZXF1ZXN0
SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxvYWRpbmcgbXVsdGlwbGUgc3Ry
ZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KKworUGFzc1JlZlB0cjxQREZQbHVn
aW4+IFBERlBsdWdpbjo6Y3JlYXRlKFdlYkZyYW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBERlBsdWdpbihmcmFtZSkpOworfQorCitQREZQbHVnaW46OlBERlBsdWdpbihX
ZWJGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQorICAgICwgbV9jb250YWluZXJM
YXllcihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKQorICAgICwgbV9jb250ZW50TGF5
ZXIoQWRvcHROUywgW1tDQUxheWVyIGFsbG9jXSBpbml0XSkKKyAgICAsIG1fc2Nyb2xsQ29ybmVy
TGF5ZXIoQWRvcHROUywgW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0
aFBERlBsdWdpbjp0aGlzXSkKKyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKEFkb3B0TlMsIFtb
cGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10gaW5pdF0pCisgICAgLCBtX3BkZkxheWVy
Q29udHJvbGxlckRlbGVnYXRlKEFkb3B0TlMsIFtbV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pCit7CisgICAgbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgp
OworICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250ZW50
TGF5ZXIuZ2V0KCk7CisgICAgCisgICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5
ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFttX2NvbnRhaW5lckxheWVyLmdldCgpIGFk
ZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOworfQorCitQREZQbHVnaW46On5Q
REZQbHVnaW4oKQoreworfQorCitQbHVnaW5JbmZvIFBERlBsdWdpbjo6cGx1Z2luSW5mbygpCit7
CisgICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5O
YW1lKCk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAgbWltZUNsYXNz
SW5mby50eXBlID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBw
ZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5hcHBlbmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7
CisgICAgcmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIFBERlBsdWdpbjo6cGx1Z2luVmll
dygpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihjb250cm9sbGVyKCkp
OworfQorCitjb25zdCBQbHVnaW5WaWV3KiBQREZQbHVnaW46OnBsdWdpblZpZXcoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigp
KTsKK30KKwordm9pZCBQREZQbHVnaW46OnVwZGF0ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wg
aGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAobV9z
aXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3Np
emUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKwor
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3NpemUuaGVpZ2h0
KCkgPj0gbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQo
KSA8IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9ICht
X3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKKworICAgIGludCBw
YWdlU3RlcCA9IG1fcGFnZUJveGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWln
aHQoKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fc2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCkt
PngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3NpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmhlaWdodCgpLCBtX3NpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAg
ICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAw
KTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFy
UmVjdCk7CisgICAgfQorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1l
bnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZp
ZXcoKS0+eCgpICsgbV9zaXplLndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LCBwbHVnaW5WaWV3KCktPnkoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
ICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxi
YXJSZWN0KTsKKyAgICB9CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1l
LT5jb3JlRnJhbWUoKS0+dmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIGhhc1Njcm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwg
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxi
YXJzKSB7CisgICAgICAgIGlmIChoYXNTY3JvbGxiYXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3
LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJh
bWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworICAgICAgICBmcmFtZVZpZXct
PnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpLmZyYW1l
ID0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCk7CisgICAgICAgIFttX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyLmdldCgpLmZyYW1lID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJl
Y3QoKTsKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldE5lZWRz
RGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmIChtX3Njcm9sbENvcm5lckxheWVyKSB7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkuZnJhbWUgPSBzY3JvbGxDb3JuZXJSZWN0
KCk7CisgICAgICAgIFttX3Njcm9sbENvcm5lckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUERGUGx1Z2luOjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNj
cm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywg
b3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIGlmIChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
LmFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0V2l0aFBERlBs
dWdpbjp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVy
Om1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpXTsKKyAgICAgICAgCisgICAgICAgIGRp
ZEFkZEhvcml6b250YWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xs
YmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29u
dGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdl
dCgpXTsKKyAgICAgICAgCisgICAgICAgIGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5n
ZXQoKSk7CisgICAgfQorICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5hZGRDaGls
ZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOworfQorCit2b2lk
IFBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGlj
YWxTY3JvbGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHdpbGxS
ZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisKKyAgICAgICAgW21f
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAg
ICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJd
OworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KKworICAgIHNj
cm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZy
b21TY3JvbGxhYmxlQXJlYSgpOworICAgIHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgUERGUGx1
Z2luOjphZGRBcmNoaXZlUmVzb3VyY2UoKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0
byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBz
aG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNlcy4KKworICAgIC8vIEFkZCBq
dXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1lbnUgaGFuZGxpbmcgYW5kIHdlYiBhcmNoaXZl
cyB0byB3b3JrLgorICAgIFJlc291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25zZTsKKyAg
ICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKG1fc3VnZ2VzdGVkRmls
ZW5hbWUpOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0VVJMKG1fc291cmNlVVJMKTsgLy8g
TmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMLgorICAgIHN5
bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUoImFwcGxpY2F0aW9uL3BkZiIpOworCisgICAg
UmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0
ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhLmdldCgpKSwgbV9zb3VyY2VVUkwsICJh
cHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3RyaW5nKCksIHN5bnRoZXNpemVkUmVzcG9uc2Up
OworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPmFkZEFy
Y2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkpOworfQorCitzdGF0aWMgdm9pZCBqc1BE
RkRvY0luaXRpYWxpemUoSlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAg
UERGUGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8UERGUGx1Z2luKj4oSlNPYmplY3RHZXRQ
cml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPnJlZigpOworfQorCitzdGF0aWMgdm9pZCBq
c1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBk
ZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSk7CisgICAgcGRmVmlldy0+ZGVyZWYoKTsKK30KKworSlNWYWx1ZVJlZiBQREZQbHVnaW46Ompz
UERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFBERlBsdWdp
biogcGRmVmlldyA9IHN0YXRpY19jYXN0PFBERlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0
aGlzT2JqZWN0KSk7CisgICAgCisgICAgV2ViRnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFt
ZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5jb3JlRnJhbWUo
KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKyAgICAKKyAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29yZUZyYW1lKTsKKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQoreworICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgp
OworCisgICAgbV9wZGZEb2N1bWVudC5hZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9j
XSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fZGF0YS5nZXQoKV0pOworCisgICAgW21fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpIHNldEZyYW1lU2l6ZTptX3NpemVdOworICAgIG1fcGRmTGF5ZXJD
b250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gbV9wZGZEb2N1bWVudC5nZXQoKTsKKyAgICAKKyAg
ICBwbHVnaW5WaWV3KCktPnNldFBhZ2VTY2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkgdGlsZVNjYWxlRmFjdG9yXSwgSW50UG9pbnQoMCwgMCkpOworCisgICAgY2FsY3VsYXRl
U2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBjb250cm9sbGVyKCktPmlu
dmFsaWRhdGUoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpKTsKKworICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKKyAgICBQREZEb2N1bWVudFNjcmlwdGluZzo6
Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRS
ZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgp
OworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmplY3RS
ZWYganNQREZEb2MgPSBQREZEb2N1bWVudFNjcmlwdGluZzo6bWFrZUpTUERGRG9jKGN0eCwganNQ
REZEb2NJbml0aWFsaXplLCBqc1BERkRvY1ByaW50LCBqc1BERkRvY0ZpbmFsaXplLCB0aGlzKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAg
ICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRz
W2ldLmdldCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZE
b2MsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisK
KyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpj
YWxjdWxhdGVTaXplcygpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbWUgc3RyYWln
aHQgZnJvbSBQREZLaXQuCisKKyAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1bWVudEdl
dE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGUGFn
ZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkg
ZG9jdW1lbnRSZWZdLCBpICsgMSk7CisgICAgICAgIEFTU0VSVChwZGZQYWdlKTsKKworICAgICAg
ICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZDcm9wQm94
KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkKKyAgICAgICAgICAgIGJveCA9IENH
UERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVkaWFCb3gpOworICAgICAgICBtX3Bh
Z2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKKyAgICB9CisKKyAgICBtX3BkZkRvY3VtZW50
U2l6ZSA9IEludFNpemUoW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGNvbnRlbnRTaXplUmVz
cGVjdGluZ1pvb21dKTsKK30KKworYm9vbCBQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBMb2FkIHRoZSBzb3VyY2UgVVJMIGlmIG5l
ZWRlZC4KKyAgICBtX3NvdXJjZVVSTCA9IHBhcmFtZXRlcnMudXJsOworICAgIGlmICghcGFyYW1l
dGVycy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkK
KyAgICAgICAgY29udHJvbGxlcigpLT5sb2FkVVJMKHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VU
IiwgcGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZl
Y3Rvcjx1aW50OF90PigpLCBmYWxzZSk7CisKKyAgICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxp
emVQbHVnaW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQREZQbHVnaW46OmRlc3Ry
b3koKQoreworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZp
ZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNh
bFNjcm9sbGJhcik7CisgICAgCisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgcmVtb3Zl
RnJvbVN1cGVybGF5ZXJdOworICAgIFttX2NvbnRlbnRMYXllci5nZXQoKSByZW1vdmVGcm9tU3Vw
ZXJsYXllcl07CisgICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5
ZXJdOworfQorCit2b2lkIFBERlBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKK30KKyAgICAKK3ZvaWQgUERG
UGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dD
b250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dCh0cnVlKTsKKyAgICAKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiBsYXllciA9
PSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRy
YW5zbGF0ZSgtbV92ZXJ0aWNhbFNjcm9sbGJhci0+eCgpLCAtbV92ZXJ0aWNhbFNjcm9sbGJhci0+
eSgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQoJmdyYXBoaWNzQ29udGV4
dCwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworICAgIH0gZWxzZSBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyICYmIGxheWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
KSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLW1faG9yaXpvbnRhbFNjcm9s
bGJhci0+eCgpLCAtbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT55KCkpOworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnBhaW50KCZncmFwaGljc0NvbnRleHQsIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+ZnJhbWVSZWN0KCkpOworICAgIH0gZWxzZSBpZiAobGF5ZXIgPT0gbV9zY3JvbGxDb3Ju
ZXJMYXllcikgeworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QgPSB0aGlzLT5zY3Jv
bGxDb3JuZXJSZWN0KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoLXNjcm9s
bENvcm5lclJlY3QueCgpLCAtc2Nyb2xsQ29ybmVyUmVjdC55KCkpOworICAgICAgICBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIoMCwgJmdyYXBoaWNzQ29udGV4dCwg
c2Nyb2xsQ29ybmVyUmVjdCk7CisgICAgfQorfQorCit2b2lkIFBERlBsdWdpbjo6dXBkYXRlQ29u
dHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0KQoreworICAgIEFTU0VS
VChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkpOworCisgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNj
cm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBQREZQ
bHVnaW46OnNuYXBzaG90KCkKK3sKKyAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgCisgICAgLy8gRklYTUU6IFN1cHBvcnQgbm9uLTEgcGFnZS9kZXZpY2VT
Y2FsZUZhY3Rvci4KKyAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7CisKKyAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShiYWNraW5nU3RvcmVTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxw
aGEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpOworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7CisgICAgY29udGV4dC0+dHJhbnNsYXRlKDAsIC1tX3NpemUuaGVpZ2h0KCkpOworCisgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNuYXBzaG90SW5Db250ZXh0OmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpXTsKKworICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworfQorCitQ
bGF0Zm9ybUxheWVyKiBQREZQbHVnaW46OnBsdWdpbkxheWVyKCkKK3sKKyAgICByZXR1cm4gbV9j
b250YWluZXJMYXllci5nZXQoKTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzVHJhbnNwYXJlbnQo
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBQREZQbHVnaW46OndhbnRzV2hlZWxFdmVudHMoKQoreworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1
Z2luU2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9zaXplID09IHBsdWdpblNpemUgJiYgcGx1
Z2luVmlldygpLT5wYWdlU2NhbGVGYWN0b3IoKSA9PSBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkgdGlsZVNjYWxlRmFjdG9yXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaXplID0gcGx1
Z2luU2l6ZTsKKyAgICBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0gPSBwbHVnaW5Ub1Jvb3RW
aWV3VHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkg
c2V0RnJhbWVTaXplOnBsdWdpblNpemVdOworCisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOwor
ICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisgICAgQ0FUcmFuc2Zv
cm0zRCB0cmFuc2Zvcm0gPSBDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEsIC0xLCAxKTsKKyAgICAK
KyAgICBDR0Zsb2F0IG1hZ25pZmljYXRpb24gPSBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3Rv
cigpIC0gW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHRpbGVTY2FsZUZhY3Rvcl07CisgICAg
CisgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgbV9sYXN0TW91c2VQb2ludCwgd2Ugc2hvdWxkIHVz
ZSB0aGUgem9vbSBvcmlnaW4gZnJvbSBQbHVnaW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IuCisg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjpt
YWduaWZpY2F0aW9uIGF0UG9pbnQ6bV9sYXN0TW91c2VQb2ludCBpbW1lZGlhdGVseTpZRVNdOwor
ICAgIFttX2NvbnRlbnRMYXllci5nZXQoKSBzZXRTdWJsYXllclRyYW5zZm9ybTpDQVRyYW5zZm9y
bTNEVHJhbnNsYXRlKHRyYW5zZm9ybSwgMCwgLXBsdWdpblNpemUuaGVpZ2h0KCksIDApXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hh
bmdlKCkKK3sKK30KKwordm9pZCBQREZQbHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50
NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBQREZQbHVnaW46
OmZyYW1lRGlkRmFpbCh1aW50NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBQREZQbHVnaW46OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwg
Y29uc3QgV1RGOjpTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlE
LCBjb25zdCBLVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9V
TlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAg
IG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1E
aWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9j
dW1lbnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIG1fZGF0YS5hZG9w
dENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMo
bV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5n
dGgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRf
dCBzdHJlYW1JRCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBw
ZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKK30KKwor
dm9pZCBQREZQbHVnaW46OnN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2Fz
Q2FuY2VsbGVkKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBk
ZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fZGF0YS5jbGVhcigpOworfQorCit2b2lkIFBE
RlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3Bv
bnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1l
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0
cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZEZpbGVuYW1lOworfQorCit2b2lkIFBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX2Rh
dGEpCisgICAgICAgIG1fZGF0YS5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwor
CisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhLmdldCgpLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIFBERlBsdWdpbjo6bWFudWFs
U3RyZWFtRGlkRmluaXNoTG9hZGluZygpCit7CisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9
CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wpCit7CisgICAgbV9k
YXRhLmNsZWFyKCk7Cit9CisgICAgCitzdGF0aWMgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzRnJv
bVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCkKK3sKKyAgICByZXR1cm4gKGV2ZW50LnNo
aWZ0S2V5KCkgPyBOU1NoaWZ0S2V5TWFzayA6IDApCisgICAgICAgIHwgKGV2ZW50LmNvbnRyb2xL
ZXkoKSA/IE5TQ29udHJvbEtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5hbHRLZXkoKSA/
IE5TQWx0ZXJuYXRlS2V5TWFzayA6IDApCisgICAgICAgIHwgKGV2ZW50Lm1ldGFLZXkoKSA/IE5T
Q29tbWFuZEtleU1hc2sgOiAwKTsKK30KKyAgICAKK3N0YXRpYyBOU0V2ZW50VHlwZSBldmVudFR5
cGVGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50LCBib29sIG1vdXNlQnV0dG9uSXNE
b3duKQoreworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6
S2V5RG93bjoKKyAgICAgICAgcmV0dXJuIE5TS2V5RG93bjsKKyAgICBjYXNlIFdlYkV2ZW50OjpL
ZXlVcDoKKyAgICAgICAgcmV0dXJuIE5TS2V5VXA7CisKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3Vz
ZURvd246CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+
KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VEb3duOworICAgICAgICBjYXNlIFdl
Yk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIE5TUmlnaHRNb3Vz
ZURvd247CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBz
d2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkp
IHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAg
cmV0dXJuIE5TTGVmdE1vdXNlVXA7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRC
dXR0b246CisgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlVXA7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIGlmIChtb3VzZUJ1dHRvbklzRG93
bikgeworICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50
Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6Okxl
ZnRCdXR0b246CisgICAgICAgICAgICAgICAgcmV0dXJuIE5TTGVmdE1vdXNlRHJhZ2dlZDsKKyAg
ICAgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE5TUmlnaHRNb3VzZURyYWdnZWQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBOU01vdXNlTW92ZWQ7CisgICAgICAgIGJyZWFrOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIFBERlBsdWdpbjo6aGFu
ZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBzdGF0aWMg
Ym9vbCBtb3VzZUJ1dHRvbklzRG93biA9IGZhbHNlOworCisgICAgSW50UG9pbnQgbW91c2VQb3Np
dGlvbiA9IGV2ZW50LnBvc2l0aW9uKCk7CisKKyAgICAvLyBGSVhNRTogRm9yd2FyZCBtb3VzZSBl
dmVudHMgdG8gdGhlIGFwcHJvcHJpYXRlIHNjcm9sbGJhci4KKyAgICBpZiAoSW50UmVjdChtX3Zl
cnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24p
CisgICAgICAgIHx8IEludFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJh
bWUpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pCisgICAgICAgIHx8IEludFJlY3QobV9zY3JvbGxD
b3JuZXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEludFBvaW50IHBvc2l0aW9uSW5QREZWaWV3KG1vdXNlUG9z
aXRpb24pOworICAgIHBvc2l0aW9uSW5QREZWaWV3ID0gbV9yb290Vmlld1RvUGx1Z2luVHJhbnNm
b3JtLm1hcFBvaW50KHBvc2l0aW9uSW5QREZWaWV3KTsKKyAgICBwb3NpdGlvbkluUERGVmlldy5z
ZXRZKG1fc2l6ZS5oZWlnaHQoKSAtIHBvc2l0aW9uSW5QREZWaWV3LnkoKSk7CisgICAgCisgICAg
bV9sYXN0TW91c2VQb2ludCA9IHBvc2l0aW9uSW5QREZWaWV3OworCisgICAgTlNFdmVudFR5cGUg
ZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2ZW50KGV2ZW50LCBtb3VzZUJ1dHRvbklzRG93
bik7CisKKyAgICBpZiAoIWV2ZW50VHlwZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
TlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVu
dCk7CisKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5
cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOnBvc2l0aW9uSW5QREZWaWV3IG1vZGlmaWVyRmxhZ3M6bW9k
aWZpZXJGbGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0Om5pbCBldmVudE51
bWJlcjowIGNsaWNrQ291bnQ6ZXZlbnQuY2xpY2tDb3VudCgpIHByZXNzdXJlOjBdOworCisgICAg
c3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Cisg
ICAgICAgIGlmIChtb3VzZUJ1dHRvbklzRG93bikKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29u
dHJvbGxlci5nZXQoKSBtb3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlTW92ZWQ6ZmFrZUV2ZW50
XTsKKyAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOiB7CisgICAgICAgIG1vdXNlQnV0dG9u
SXNEb3duID0gdHJ1ZTsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNl
RG93bjpmYWtlRXZlbnRdOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBX
ZWJFdmVudDo6TW91c2VVcDogeworICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkg
bW91c2VVcDpmYWtlRXZlbnRdOworICAgICAgICBtb3VzZUJ1dHRvbklzRG93biA9IGZhbHNlOwor
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBERlBs
dWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAg
ICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7
Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpCit7CisgICAgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRl
eHQgbWVudS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVL
ZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIE5TRXZl
bnRUeXBlIGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgZmFsc2UpOwor
ICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQo
ZXZlbnQpOworICAgIAorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGtleUV2ZW50
V2l0aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6bW9k
aWZpZXJGbGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0OjAgY2hhcmFjdGVy
czpldmVudC50ZXh0KCkgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOmV2ZW50LnVubW9kaWZp
ZWRUZXh0KCkgaXNBUmVwZWF0OmV2ZW50LmlzQXV0b1JlcGVhdCgpIGtleUNvZGU6ZXZlbnQubmF0
aXZlVmlydHVhbEtleUNvZGUoKV07CisgICAgCisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsK
KyAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJD
b250cm9sbGVyLmdldCgpIGtleURvd246ZmFrZUV2ZW50XTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAK
K2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIGlmIChjb21tYW5kTmFtZSA9
PSAiY29weSIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBjb3B5U2VsZWN0
aW9uXTsKKyAgICBlbHNlIGlmIChjb21tYW5kTmFtZSA9PSAic2VsZWN0QWxsIikKKyAgICAgICAg
W21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNlbGVjdEFsbF07CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25z
dCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIGlmIChjb21tYW5kTmFtZSA9PSAiY29weSIg
JiYgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGN1cnJlbnRTZWxlY3Rpb25dKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RB
bGwiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQREZQbHVnaW46OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0KiBQ
REZQbHVnaW46OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCit7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgUERGUGx1Z2luOjp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sKK30KKwordm9p
ZCBQREZQbHVnaW46OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sKK30KKwordm9pZCBQREZQbHVn
aW46OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
Ojpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKK3sKK30KKwordWludDY0X3QgUERG
UGx1Z2luOjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzZW5kQ29tcGxleFRleHRJbnB1dChjb25z
dCBTdHJpbmcmKQoreworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0TGF5ZXJIb3N0aW5nTW9kZShM
YXllckhvc3RpbmdNb2RlKQoreworfQorCit2b2lkIFBERlBsdWdpbjo6c3RvcmFnZUJsb2NraW5n
U3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwcml2YXRlQnJvd3Np
bmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKworYm9vbCBQREZQbHVnaW46OmdldEZvcm1WYWx1
ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQREZQbHVnaW46Omhh
bmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkp
OworfQorCitTY3JvbGxiYXIqIFBERlBsdWdpbjo6aG9yaXpvbnRhbFNjcm9sbGJhcigpCit7Cisg
ICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKK30KKworU2Nyb2xsYmFyKiBQ
REZQbHVnaW46OnZlcnRpY2FsU2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV92ZXJ0aWNhbFNj
cm9sbGJhci5nZXQoKTsKK30KKworSW50UmVjdCBQREZQbHVnaW46OnNjcm9sbENvcm5lclJlY3Qo
KSBjb25zdAoreworICAgIGlmICghbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSB7CisgICAgICAgIEFTU0VSVChtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CisgICAgfQorICAgIHJldHVybiBJbnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgo
KSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkg
LSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53
aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJs
ZUFyZWEqIFBERlBsdWdpbjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFi
bGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVyLgorICAgIHJldHVybiAwOworfQorCitJbnRS
ZWN0IFBERlBsdWdpbjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9wZGZEb2N1bWVudFNpemUpOworfQorCit2b2lk
IFBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7Cisg
ICAgbV9zY3JvbGxPZmZzZXQgPSB0b1NpemUob2Zmc2V0KTsKKyAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgc2V0U2Nyb2xsUG9zaXRpb246b2Zmc2V0XTsKK30KKworaW50IFBERlBsdWdp
bjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5n
ZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBz
Y3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKK30KKworYm9vbCBQREZQbHVnaW46OmlzQWN0
aXZlKCkgY29uc3QKK3sKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVG
cmFtZSgpKSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBERlBsdWdpbjo6aW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgaWYgKHNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
IFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAg
IGVsc2UgaWYgKHNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBbbV92
ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIFttX3Njcm9sbENvcm5lckxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07Cit9
CisKK2Jvb2wgUERGUGx1Z2luOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW50IFBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQu
d2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IFBERlBsdWdp
bjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiB0b1BvaW50KG1fc2Nyb2xs
T2Zmc2V0KTsKK30KKworSW50UG9pbnQgUERGUGx1Z2luOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgpOworfQorCitJbnRQb2ludCBQREZQbHVn
aW46Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgaW50IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxT
Y3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGlj
YWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigp
KSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgSW50UG9pbnQgbWF4
aW11bU9mZnNldChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9zaXplLndpZHRoKCkgKyB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fc2l6
ZS5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgIG1heGltdW1PZmZz
ZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OworfQor
CitpbnQgUERGUGx1Z2luOjp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
aXplLmhlaWdodCgpOworfQorCitpbnQgUERGUGx1Z2luOjp2aXNpYmxlV2lkdGgoKSBjb25zdAor
eworICAgIHJldHVybiBtX3NpemUud2lkdGgoKTsKK30KKworSW50U2l6ZSBQREZQbHVnaW46OmNv
bnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOworfQor
Citib29sIFBERlBsdWdpbjo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKTsK
K30KKwordm9pZCBQREZQbHVnaW46OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9y
Y2VVcGRhdGUpCit7CisgICAgaWYgKCFmb3JjZVVwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgdGhlIFBERiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0
IGFuZCBzY3JvbGxiYXJzIGNoYW5nZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRv
IGRpc3BsYXkgd2hpdGUgcmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUuCisgICAgSW50
UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1Rv
KG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsKKyAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xs
T2Zmc2V0KTsKKworICAgIC8vIEFzIHNpemUgb2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBz
Y3JvbGxiYXJzIG1heSBuZWVkIHRvIGFwcGVhciBvciB0byBkaXNhcHBlYXIuCisgICAgdXBkYXRl
U2Nyb2xsYmFycygpOworCisgICAgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOwor
fQorCitJbnRSZWN0IFBERlBsdWdpbjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJS
ZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVj
dC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRpb24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7
CisKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9t
UmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCByZWN0KTsKK30KKyAgICAKK0ludFJl
Y3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7
CisgICAgSW50UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZl
cnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAg
cmVjdC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24o
KSk7CisgICAgCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFBERlBsdWdpbjo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9p
bnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhci0+bG9j
YXRpb24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHBs
dWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZp
ZXcoKS0+cmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBQREZQbHVnaW46OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBv
aW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHBs
dWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUocGx1
Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICAKKyAg
ICByZXR1cm4gcG9pbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKFBERktJVF9QTFVHSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jNDQ1ZjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVnaW4uaApAQCAtMCwwICsxLDE3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2ltcGxlUERGUGx1Z2luX2gKKyNkZWZpbmUg
U2ltcGxlUERGUGx1Z2luX2gKKworI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVk
ZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBz
dHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBP
cGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3Qg
UGx1Z2luSW5mbzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBsdWdpblZpZXc7
CitjbGFzcyBXZWJGcmFtZTsKKworY2xhc3MgU2ltcGxlUERGUGx1Z2luIDogcHVibGljIFBsdWdp
biwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2ltcGxlUERGUGx1Z2luPiBjcmVhdGUoV2ViRnJhbWUqKTsKKyAgICB+U2lt
cGxlUERGUGx1Z2luKCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5J
bmZvKCk7CisKKyAgICAvLyBJbi1wcm9jZXNzIFBERlZpZXdzIGRvbid0IHN1cHBvcnQgYXN5bmNo
cm9ub3VzIGluaXRpYWxpemF0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9u
b3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgU2ltcGxlUERGUGx1Z2luKFdlYkZyYW1lKik7CisKKyAgICAvLyBSZWd1bGFy
IHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xsYmFy
cyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcuCisgICAg
UGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFy
T3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxi
YXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAgICB2b2lk
IHBkZkRvY3VtZW50RGlkTG9hZCgpOworICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB2
b2lkIHBhaW50QmFja2dyb3VuZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgcGFpbnRDb250ZW50KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Cisg
ICAgdm9pZCBwYWludENvbnRyb2xzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisKKyAgICAvLyBQbHVnLWluIG1ldGhvZHMKKyAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7CisgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29y
ZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBzbmFwc2hvdCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsdWdpbkxheWVyKCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVu
dCgpOworICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBs
dWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3Jl
OjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlk
RmluaXNoTG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpOworICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZURpZEZhaWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFN0cmluZyYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJlc3Bv
bnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwg
dWludDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1
aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXND
YW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9u
c2UoY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0
aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxl
TmFtZSk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0
IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFt
RGlkRmluaXNoTG9hZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWls
KGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVudChj
b25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgV2ViV2hlZWxFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVy
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3Vz
ZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CisgICAgdmly
dHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNj
cmlwdGFibGVOUE9iamVjdCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQg
d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3
RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVu
Q29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29v
cmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpOwor
ICAgIHZpcnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5n
JiB0ZXh0SW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVy
SG9zdGluZ01vZGUpIE9WRVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmFn
ZUJsb2NraW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJv
d3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShT
dHJpbmcmIGZvcm1WYWx1ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3Jl
OjpTY3JvbGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgdmlydHVh
bCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAvLyBTY3JvbGxhYmxlQXJl
YSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9s
bGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0
aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2Vi
Q29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsg
fQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1hdG9y
TWFjIHdpbGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBnb29k
IHRpbWUgdG8gYW5pbWF0ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2Vk
KGludCBuZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGUgb3RoZXIgY29udmVyc2lvbiBmdW5jdGlvbnM7IHRoaXMgb25lIGlzIGVu
b3VnaCB0byBnZXQgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nIHdvcmtpbmcuCisgICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zdCBPVkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgT1ZFUlJJREU7CisK
KyAgICBKU09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX3BsdWdpblNpemU7CisKKyAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNl
VVJMOworCisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgUmV0YWluUHRyPENG
TXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1ZmZlcjsKKworICAgIFJldGFpblB0cjxQREZEb2N1bWVu
dD4gbV9wZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94
ZXM7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2Vz
LCBpbmNsdWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9y
aXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJhbWU7CisKKyAgICBXZWJDb3JlOjpJ
bnRTaXplIG1fc2Nyb2xsT2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBTaW1wbGVQREZQbHVnaW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iZmZiNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVnaW4ubW0KQEAgLTAsMCAr
MSw3ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIlNpbXBsZVBERlBsdWdpbi5oIgorCisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCisj
aW1wb3J0ICJQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbXBv
cnQgIldlYkV2ZW50LmgiCisjaW1wb3J0ICJXZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNPYmplY3RSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+Cisj
aW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQv
UERGS2l0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9DaHJvbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QREZEb2N1
bWVudFNjcmlwdGluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
Y3JvbGxiYXJUaGVtZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRfdCBwZGZEb2N1
bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBt
dWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitjb25zdCBp
bnQgZ3V0dGVySGVpZ2h0ID0gMTA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7Citjb25z
dCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOworY29uc3QgaW50IHNoYWRvd1NpemUgPSA3OworCitQ
YXNzUmVmUHRyPFNpbXBsZVBERlBsdWdpbj4gU2ltcGxlUERGUGx1Z2luOjpjcmVhdGUoV2ViRnJh
bWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxlUERGUGx1Z2luKGZy
YW1lKSk7Cit9CisKK1NpbXBsZVBERlBsdWdpbjo6U2ltcGxlUERGUGx1Z2luKFdlYkZyYW1lKiBm
cmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK1NpbXBsZVBERlBsdWdpbjo6flNp
bXBsZVBERlBsdWdpbigpCit7Cit9CisKK1BsdWdpbkluZm8gU2ltcGxlUERGUGx1Z2luOjpwbHVn
aW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87CisgICAgaW5mby5uYW1lID0gYnVpbHRJ
blBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5mbzsKKyAg
ICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIG1pbWVDbGFzc0lu
Zm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgbWltZUNsYXNzSW5m
by5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBpbmZvLm1pbWVzLmFwcGVuZChtaW1l
Q2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworUGx1Z2luVmlldyogU2ltcGxlUERG
UGx1Z2luOjpwbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIFNpbXBsZVBERlBsdWdp
bjo6cGx1Z2luVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBs
dWdpblZpZXcqPihjb250cm9sbGVyKCkpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6dXBk
YXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBpZiAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA+PSBtX3BkZkRv
Y3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpIDwgbV9w
ZGZEb2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0g
Y3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworCisgICAgaWYgKG1fdmVydGlj
YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA+PSBtX3Bk
ZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVy
dGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpIDwg
bV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIg
PSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaW50IGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250
YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVy
dGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgaW50IHBhZ2VT
dGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgp
OworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9w
bHVnaW5TaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50
U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXco
KS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fcGx1Z2luU2l6ZS53aWR0aCgpLCBtX2hvcml6
b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3JvbGxi
YXItPndpZHRoKCksIDApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1l
UmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIp
IHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNldFByb3BvcnRpb24obV9wbHVnaW5TaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IHNj
cm9sbGJhclJlY3QoSW50UmVjdChwbHVnaW5WaWV3KCktPngoKSArIG1fcGx1Z2luU2l6ZS53aWR0
aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworICAg
ICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVj
dC5jb250cmFjdCgwLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0K
KyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52
aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
aGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAg
aWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNj
cm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQo
KTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTaW1wbGVQREZQbHVnaW46OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9yaWVudGF0
aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGRpZEFkZEhvcml6b250YWxTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICBlbHNlIAorICAgICAgICBkaWRBZGRWZXJ0aWNhbFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygp
LT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwor
fQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFy
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9s
bGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwor
ICAgIGVsc2UKKyAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSk7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxi
YXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBzY3JvbGxiYXIgPSAwOwor
fQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6YWRkQXJjaGl2ZVJlc291cmNlKCkKK3sKKyAgICAv
LyBGSVhNRTogSXQncyBhIGhhY2sgdG8gZm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9jdW1lbnRM
b2FkZXIuIFBERiBkb2N1bWVudHMgc2hvdWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNoZWRSZXNv
dXJjZXMuCisKKyAgICAvLyBBZGQganVzdCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBtZW51IGhh
bmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMgdG8gd29yay4KKyAgICBSZXNvdXJjZVJlc3BvbnNlIHN5
bnRoZXNpemVkUmVzcG9uc2U7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdnZXN0ZWRG
aWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNl
dFVSTChtX3NvdXJjZVVSTCk7IC8vIE5lZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVzdWx0Ojph
YnNvbHV0ZVBERlVSTC4KKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBlKCJhcHBs
aWNhdGlvbi9wZGYiKTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlID0g
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1fZGF0YUJ1
ZmZlci5nZXQoKSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0
cmluZygpLCBzeW50aGVzaXplZFJlc3BvbnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCkt
PmRvY3VtZW50KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFz
ZSgpKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBTaW1wbGVQREZQbHVnaW4qIHBkZlZpZXcg
PSBzdGF0aWNfY2FzdDxTaW1wbGVQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxp
emUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFNpbXBsZVBERlBsdWdpbiogcGRmVmlldyA9
IHN0YXRpY19jYXN0PFNpbXBsZVBERlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3Qp
KTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVlUmVmIFNpbXBsZVBERlBsdWdp
bjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBTaW1wbGVQ
REZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxTaW1wbGVQREZQbHVnaW4qPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIAorICAgIFdlYkZyYW1lKiBmcmFtZSA9IHBk
ZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5j
b3JlRnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGN0eCk7CisgICAgCisgICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7CisgICAg
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQoKQoreworICAgIGFkZEFyY2hpdmVSZXNvdXJj
ZSgpOworCisgICAgbV9wZGZEb2N1bWVudC5hZG9wdE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFs
bG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fZGF0YUJ1ZmZlci5nZXQoKV0pOworCisgICAg
Y2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBjb250cm9s
bGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9w
bHVnaW5TaXplLmhlaWdodCgpKSk7CisKKyAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVm
PiA+IHNjcmlwdHM7CisgICAgUERGRG9jdW1lbnRTY3JpcHRpbmc6OmdldEFsbFNjcmlwdHNJblBE
RkRvY3VtZW50KFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSwgc2NyaXB0cyk7CisK
KyAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRzLnNpemUoKTsKKyAgICBpZiAoIXNjcmlw
dENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgY3R4ID0g
SlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOworICAgIEpTT2JqZWN0UmVmIGpzUERGRG9jID0gUERG
RG9jdW1lbnRTY3JpcHRpbmc6Om1ha2VKU1BERkRvYyhjdHgsIGpzUERGRG9jSW5pdGlhbGl6ZSwg
anNQREZEb2NQcmludCwganNQREZEb2NGaW5hbGl6ZSwgdGhpcyk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNjcmlwdENvdW50OyArK2kpIHsKKyAgICAgICAgSlNTdHJpbmdSZWYgc2Ny
aXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoc2NyaXB0c1tpXS5nZXQoKSk7CisgICAg
ICAgIEpTRXZhbHVhdGVTY3JpcHQoY3R4LCBzY3JpcHQsIGpzUERGRG9jLCAwLCAwLCAwKTsKKyAg
ICAgICAgSlNTdHJpbmdSZWxlYXNlKHNjcmlwdCk7CisgICAgfQorCisgICAgSlNHbG9iYWxDb250
ZXh0UmVsZWFzZShjdHgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6
ZXMoKQoreworICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQ
YWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBh
Z2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJl
Zl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBi
b3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgICAg
ICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0
Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFw
cGVuZChJbnRSZWN0KGJveCkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5zZXRXaWR0aCht
YXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8aW50Pihib3guc2l6ZS53
aWR0aCkpKTsKKyAgICAgICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5kKDAsIGJveC5zaXplLmhl
aWdodCk7CisgICAgfQorICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFuZCgwLCBndXR0ZXJIZWln
aHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOworfQorCitib29sIFNpbXBsZVBERlBsdWdp
bjo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIC8vIExv
YWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgorICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51
cmw7CisgICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1l
dGVycy51cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9j
dW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCks
IEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKKworICAgIGNvbnRy
b2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIFNpbXBsZVBERlBsdWdpbjo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1fZnJhbWUpIHsKKyAg
ICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZp
ZXcoKSkKKyAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisgICAgfQorCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKK30KKwordm9pZCBTaW1wbGVQ
REZQbHVnaW46OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgY29udGVudEFyZWFXaWxsUGFpbnQoKTsKKworICAg
IHBhaW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7CisKKyAgICBpZiAo
IW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJvZ3Jlc3MuCisgICAgICAg
IHJldHVybjsKKworICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7
CisgICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7Cit9CisKK3Zv
aWQgU2ltcGxlUERGUGx1Z2luOjpwYWludEJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CisgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OmdyYXksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBT
aW1wbGVQREZQbHVnaW46OnBhaW50Q29udGVudChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBncmFw
aGljc0NvbnRleHQtPnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvbkhp
Z2gpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U2hvdWxkU21vb3RoRm9udHModHJ1ZSk7CisgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OndoaXRlLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcChkaXJ0eVJlY3QpOworICAgIEludFJlY3Qg
Y29udGVudFJlY3QoZGlydHlSZWN0KTsKKyAgICBjb250ZW50UmVjdC5tb3ZlQnkoSW50UG9pbnQo
bV9zY3JvbGxPZmZzZXQpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9zY3Jv
bGxPZmZzZXQud2lkdGgoKSwgLW1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKTsKKworICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKworICAgIGludCBwYWdlVG9wID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGFnZUJveGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEludFJlY3QgcGFnZUJveCA9IG1fcGFnZUJveGVzW2ldOworICAgICAgICBmbG9hdCBleHRy
YU9mZnNldEZvckNlbnRlcmluZ1ggPSBtYXgocm91bmRmKChtX3BsdWdpblNpemUud2lkdGgoKSAt
IHBhZ2VCb3gud2lkdGgoKSkgLyAyLjBmKSwgMC4wZik7CisgICAgICAgIGZsb2F0IGV4dHJhT2Zm
c2V0Rm9yQ2VudGVyaW5nWSA9IChtX3BhZ2VCb3hlcy5zaXplKCkgPT0gMSkgPyBtYXgocm91bmRm
KChtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBwYWdlQm94LmhlaWdodCgpICsgc2hhZG93T2Zmc2V0
WSkgLyAyLjBmKSwgMC4wZikgOiAwOworCisgICAgICAgIGlmIChwYWdlVG9wID4gY29udGVudFJl
Y3QubWF4WSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwYWdlVG9wICsgcGFn
ZUJveC5oZWlnaHQoKSArIGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSArIGd1dHRlckhlaWdodCA+
PSBjb250ZW50UmVjdC55KCkpIHsKKyAgICAgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0g
Q0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBp
ICsgMSk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYIC0g
cGFnZUJveC54KCksIC1leHRyYU9mZnNldEZvckNlbnRlcmluZ1kgLSBwYWdlQm94LnkoKSAtIHBh
Z2VCb3guaGVpZ2h0KCkpOworCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFNoYWRv
dyhGbG9hdFNpemUoc2hhZG93T2Zmc2V0WCwgc2hhZG93T2Zmc2V0WSksIHNoYWRvd1NpemUsIENv
bG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmZpbGxSZWN0KHBhZ2VCb3gpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGVhclNoYWRvdygpOworCisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXAocGFnZUJv
eCk7CisKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdQREZQYWdlKGNvbnRleHQsIHBkZlBhZ2Up
OworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcGFnZVRvcCArPSBwYWdlQm94LmhlaWdodCgpICsgZ3V0dGVySGVpZ2h0OworICAgICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLXBhZ2VCb3guaGVpZ2h0KCkgLSBn
dXR0ZXJIZWlnaHQpOworICAgIH0KK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnBhaW50Q29u
dHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJEaXJ0
eVJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgICAgIHNjcm9sbGJhckRpcnR5UmVjdC5tb3ZlQnkocGx1
Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueCgpLCAtcGx1Z2luVmll
dygpLT5mcmFtZVJlY3QoKS55KCkpOworCisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29u
dGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKKworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KGdyYXBoaWNzQ29u
dGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKKyAgICB9CisKKyAgICBJbnRSZWN0IGRpcnR5Q29y
bmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3JvbGxDb3JuZXJSZWN0KCksIGRpcnR5UmVjdCk7Cisg
ICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAsIGdyYXBoaWNz
Q29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnVw
ZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCkKK3sKKyAg
ICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKTsKKworICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaW52YWxpZGF0ZVNjcm9sbENv
cm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gU2ltcGxlUERGUGx1Z2luOjpzbmFwc2hvdCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNp
ZiBQTEFURk9STShNQUMpCitQbGF0Zm9ybUxheWVyKiBTaW1wbGVQREZQbHVnaW46OnBsdWdpbkxh
eWVyKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCisKK2Jvb2wgU2ltcGxlUERGUGx1
Z2luOjppc1RyYW5zcGFyZW50KCkKK3sKKyAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxs
ZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6d2FudHNXaGVlbEV2ZW50
cygpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpnZW9t
ZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3Jt
KQoreworICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgeworICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wbHVnaW5TaXpl
ID0gcGx1Z2luU2l6ZTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKK3sKK30KKwordm9pZCBTaW1wbGVQREZQ
bHVnaW46OmZyYW1lRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OmZyYW1lRGlkRmFpbCh1aW50
NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBTaW1w
bGVQREZQbHVnaW46OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwgY29uc3QgV1RGOjpT
dHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFNpbXBsZVBE
RlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0cmVhbUlELCBjb25z
dCBLVVJMJiwgdWludDMyX3QsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIEFTU0VSVF9VTlVTRUQo
c3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIG1fc3Vn
Z2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzdHJlYW1E
aWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBs
ZW5ndGgpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9j
dW1lbnRSZXF1ZXN0SUQpOworCisgICAgaWYgKCFtX2RhdGFCdWZmZXIpCisgICAgICAgIG1fZGF0
YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOworCisgICAgQ0ZEYXRh
QXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJ
bnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c3RyZWFt
RGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBwZGZE
b2N1bWVudERpZExvYWQoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnN0cmVhbURpZEZh
aWwodWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKQoreworICAgIEFTU0VSVF9V
TlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAg
IG1fZGF0YUJ1ZmZlci5jbGVhcigpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6bWFudWFs
U3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJf
dCBzdHJlYW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZW5hbWUpCit7CisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX2RhdGFCdWZmZXIp
CisgICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkp
OworCisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJl
dF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lkIFNpbXBsZVBE
RlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGluZygpCit7CisgICAgcGRmRG9jdW1l
bnREaWRMb2FkKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRG
YWlsKGJvb2wpCit7CisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK2Jvb2wgU2ltcGxl
UERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQor
eworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VN
b3ZlOgorICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICAvLyBGSVhN
RTogU2hvdWxkIGFsc28gbm90aWZ5IHNjcm9sbGJhciB0byBzaG93IGhvdmVyIGVmZmVjdC4gU2hv
dWxkIGFsc28gc2VuZCBtb3VzZUV4aXRlZCB0byBoaWRlIGl0LgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgLy8gUmV0dXJuaW5nIGZhbHNl
IGFzIHdpbGwgbWFrZSBFdmVudEhhbmRsZXIgdW5mb2N1cyB0aGUgcGx1Zy1pbiwgd2hpY2ggaXMg
YXBwcm9wcmlhdGUgd2hlbiBjbGlja2luZyBzY3JvbGxiYXJzLgorICAgICAgICAvLyBJZGVhbGx5
LCB3ZSB3b3VsZG4ndCBjaGFuZ2UgZm9jdXMgYXQgYWxsLCBidXQgUGx1Z2luVmlldyBhbHJlYWR5
IGRpZCB0aGF0IGZvciB1cy4KKyAgICAgICAgLy8gV2hlbiBzdXBwb3J0IGZvciBQREYgZm9ybXMg
aXMgYWRkZWQsIHdlJ2xsIG5lZWQgdG8gYWN0dWFsbHkgZm9jdXMgdGhlIHBsdWctaW4gd2hlbiBj
bGlja2luZyBpbiBhIGZvcm0uCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYkV2
ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50
ID0gcGxhdGZvcm0oZXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQor
ICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQp
OworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgV2ViV2hlZWxFdmVudCYgZXZlbnQpCit7CisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHBs
YXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVh
OjpoYW5kbGVXaGVlbEV2ZW50KHBsYXRmb3JtRXZlbnQpOworfQorCitib29sIFNpbXBsZVBERlBs
dWdpbjo6aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAg
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKQoreworICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0
IFdlYk1vdXNlRXZlbnQmKQoreworICAgIC8vIFVzZSBkZWZhdWx0IFdlYktpdCBjb250ZXh0IG1l
bnUuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxl
S2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQor
eworfQorCitOUE9iamVjdCogU2ltcGxlUERGUGx1Z2luOjpwbHVnaW5TY3JpcHRhYmxlTlBPYmpl
Y3QoKQoreworICAgIHJldHVybiAwOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorCit2b2lkIFNp
bXBsZVBERlBsdWdpbjo6d2luZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgU2lt
cGxlUERGUGx1Z2luOjp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCit7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjp3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKQoreworfQorCit2b2lkIFNp
bXBsZVBERlBsdWdpbjo6Y29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCit7Cit9CisK
K3VpbnQ2NF90IFNpbXBsZVBERlBsdWdpbjo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZp
ZXIoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6
c2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJikKK3sKK30KKwordm9pZCBTaW1wbGVQ
REZQbHVnaW46OnNldExheWVySG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKK3sKK30KKwor
I2VuZGlmCisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCkKK3sKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnByaXZhdGVCcm93c2luZ1N0
YXRlQ2hhbmdlZChib29sKQoreworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6Z2V0Rm9ybVZh
bHVlKFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNpbXBsZVBERlBs
dWdpbjo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHJldHVybiBzY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7Cit9CisKK1Njcm9sbGJhciogU2ltcGxlUERGUGx1Z2luOjpob3Jpem9udGFsU2Ny
b2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOworfQor
CitTY3JvbGxiYXIqIFNpbXBsZVBERlBsdWdpbjo6dmVydGljYWxTY3JvbGxiYXIoKQoreworICAg
IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworfQorCitJbnRSZWN0IFNpbXBsZVBE
RlBsdWdpbjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hvcml6b250
YWxTY3JvbGxiYXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIElu
dFJlY3QocGx1Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgo
KSwgcGx1Z2luVmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogU2ltcGxlUERGUGx1Z2luOjplbmNsb3Np
bmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZy
YW1lIHRyZWUgYW5kIGxvb2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVy
TGF5ZXIuCisgICAgcmV0dXJuIDA7Cit9CisKK0ludFJlY3QgU2ltcGxlUERGUGx1Z2luOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGx1Z2luVmlldygp
LT5mcmFtZVJlY3QoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnNldFNjcm9sbE9mZnNl
dChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6
ZShvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKKyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0
dGVyIGZvciBwZXJmb3JtYW5jZSB0byBibGl0IHBhcnRzIHRoYXQgcmVtYWluIHZpc2libGUuCisg
ICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndp
ZHRoKCksIG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSkpOworfQorCitpbnQgU2ltcGxlUERGUGx1Z2lu
OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAorewor
ICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXIpLmdl
dCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNj
cm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6
aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gbV9mcmFtZS0+
Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2lu
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CisgICAgZGlydHlS
ZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIGRpcnR5UmVjdC5tb3ZlQnko
LXBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRl
KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGNvbnRyb2xsZXIoKS0+aW52
YWxpZGF0ZShyZWN0KTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmlzU2Nyb2xsQ29ybmVy
VmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgU2ltcGxlUERG
UGx1Z2luOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAg
ICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworSW50UG9pbnQgU2ltcGxlUERGUGx1Z2luOjpzY3JvbGxQb3NpdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIG1fc2Ny
b2xsT2Zmc2V0LmhlaWdodCgpKTsKK30KKworSW50UG9pbnQgU2ltcGxlUERGUGx1Z2luOjptaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsK
K30KKworSW50UG9pbnQgU2ltcGxlUERGUGx1Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRh
bFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUu
d2lkdGgoKSAtIG1fcGx1Z2luU2l6ZS53aWR0aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwg
bV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKKyAgICByZXR1cm4gbWF4aW11bU9mZnNldDsKK30KKworaW50IFNpbXBsZVBERlBs
dWdpbjo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS5o
ZWlnaHQoKTsKK30KKworaW50IFNpbXBsZVBERlBsdWdpbjo6dmlzaWJsZVdpZHRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7Cit9CisKK0ludFNpemUgU2ltcGxl
UERGUGx1Z2luOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BkZkRvY3Vt
ZW50U2l6ZTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbGJhcnNDYW5CZUFjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFwbHVnaW5WaWV3KCktPmZyYW1lKCktPmRvY3VtZW50
KCktPmluUGFnZUNhY2hlKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzY3JvbGxiYXJT
dHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNlVXBkYXRlKQoreworICAgIGlmICghZm9yY2VVcGRh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBQREYgd2FzIHNjcm9sbGVkIGFs
bCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Nyb2xsYmFycyBjaGFuZ2UgdG8gb3Zlcmxh
eSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHdoaXRlIHJlY3RhbmdsZXMgd2hlcmUg
c2Nyb2xsYmFycyB3ZXJlLgorICAgIEludFBvaW50IG5ld1Njcm9sbE9mZnNldCA9IEludFBvaW50
KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisgICAg
c2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisKKyAgICAvLyBBcyBzaXplIG9mIHRo
ZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0byBhcHBlYXIgb3Ig
dG8gZGlzYXBwZWFyLgorICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIFNjcm9sbGFibGVB
cmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKK30KKworSW50UG9pbnQgU2ltcGxlUERGUGx1Z2luOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2lu
dCBwb2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0VG9SZW5kZXJl
cihwbHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3Zl
KHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisKKyAg
ICByZXR1cm4gcG9pbnQ7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjppc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBTaW1wbGVQ
REZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luLmgKaW5kZXggZDE5N2E2Ny4uOThmODc3MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaApAQCAtMTg4LDYgKzE4OCwxNSBAQCBwdWJsaWM6
CiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4ga2V5Ym9h
cmQgZXZlbnQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBwcm9jZXNzZWQg
dGhlIGV2ZW50LgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmKSA9IDA7CiAgICAgCisgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8g
aGFuZGxlIHRoZSBwYXNzZWQgaW4gZWRpdGluZyBjb21tYW5kLiBUaGUgcGx1Zy1pbiBzaG91bGQg
cmV0dXJuIHRydWUgaWYgaXQgZXhlY3V0ZWQgdGhlIGNvbW1hbmQuCisgICAgdmlydHVhbCBib29s
IGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0
cmluZyYgYXJndW1lbnQpID0gMDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hldGhl
ciBpdCB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCisg
ICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpID0g
MDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0byBvdmVy
cmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZh
Y3RvcigpID0gMDsKKyAgICAKICAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiBhYm91dCBmb2N1cyBj
aGFuZ2VzLgogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCmluZGV4IDBm
NGZkNzAuLjk4ZjMzMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5LmNwcApAQCAtNDAzLDYgKzQwMywzMyBAQCB2b2lkIFBsdWdpblByb3h5
OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQogICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNldEZvY3VzKGhhc0ZvY3Vz
KSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKIH0KIAorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlRWRp
dGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1
bWVudCkKK3sKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fY29ubmVjdGlv
bi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5
OjpIYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBNZXNzYWdlczo6
UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVFZGl0aW5nQ29tbWFuZDo6UmVwbHkoaGFuZGxl
ZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gaGFuZGxlZDsKK30KKyAgICAKK2Jvb2wgUGx1Z2luUHJveHk6OmlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgYm9vbCBlbmFi
bGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQoY29tbWFuZE5hbWUpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0VkaXRp
bmdDb21tYW5kRW5hYmxlZDo6UmVwbHkoZW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZW5hYmxlZDsKK30KKyAgICAK
K2Jvb2wgUGx1Z2luUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQoreworICAgIGJvb2wg
aGFuZGxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlc1BhZ2VTY2Fs
ZUZhY3Rvcjo6UmVwbHkoaGFuZGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwogTlBPYmplY3QqIFBs
dWdpblByb3h5OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQogewogICAgIC8vIFNlbmRpbmcg
dGhlIHN5bmNocm9ub3VzIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldFBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCBtZXNzYWdlIGNhbiBjYXVzZSB1cyB0byBkaXNwYXRjaCBhbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaAppbmRl
eCA3YTM2YzFhLi4wMmZhMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkuaApAQCAtMTAxLDYgKzEwMSwxMSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2
ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkgT1ZFUlJJREU7CisgICAgCisg
ICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAKICAgICB2aXJ0
dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBhMWU4
MTI2Li5kMGE1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCkBAIC0yNzEsNiArMjcxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2luVmll
dyhQYXNzUmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBwbHVnaW5FbGVtZW50LCBQYXNzUmVmUHRy
PFAKICNlbmRpZgogICAgICwgbV9tYW51YWxTdHJlYW1TdGF0ZShTdHJlYW1TdGF0ZUluaXRpYWwp
CiAgICAgLCBtX3BsdWdpblNuYXBzaG90VGltZXIodGhpcywgJlBsdWdpblZpZXc6OnBsdWdpblNu
YXBzaG90VGltZXJGaXJlZCwgcGx1Z2luU25hcHNob3RUaW1lckRlbGF5KQorICAgICwgbV9wYWdl
U2NhbGVGYWN0b3IoMSkKIHsKICAgICBtX3dlYlBhZ2UtPmFkZFBsdWdpblZpZXcodGhpcyk7CiB9
CkBAIC00MjcsNiArNDI4LDE4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFnZVNjYWxlRmFjdG9yRGlk
Q2hhbmdlKCkKICAgICB2aWV3R2VvbWV0cnlEaWRDaGFuZ2UoKTsKIH0KIAordm9pZCBQbHVnaW5W
aWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yLCBJbnRQb2ludCkKK3sK
KyAgICBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOworICAgIG1fd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVG
YWN0b3IpKTsKKyAgICBwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKK30KKworZG91YmxlIFBs
dWdpblZpZXc6OnBhZ2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIG1fcGFnZVNjYWxlRmFj
dG9yOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBhZ2VEZXN0cm95ZWQoKQogewogICAgIG1f
d2ViUGFnZSA9IDA7CkBAIC03NjAsNiArNzczLDE2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFuZGxl
RXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmIChkaWRIYW5kbGVFdmVudCkKICAgICAgICAgZXZl
bnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CisgICAgCitib29sIFBsdWdpblZpZXc6OmhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQpCit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5oYW5kbGVFZGl0aW5nQ29tbWFuZChj
b21tYW5kTmFtZSwgYXJndW1lbnQpOworfQorICAgIAorYm9vbCBQbHVnaW5WaWV3Ojppc0VkaXRp
bmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIHJldHVy
biBtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQogCiB2
b2lkIFBsdWdpblZpZXc6Om5vdGlmeVdpZGdldChXaWRnZXROb3RpZmljYXRpb24gbm90aWZpY2F0
aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3
LmgKaW5kZXggMTNlMGE5Ny4uMGQwZGZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC03OSwxMCArNzksMTcgQEAgcHVibGljOgogCiAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkgc2hvdWxkIGhhdmUgdG8ga25vdyBhYm91
dCB0aGUgcGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhjZXB0IHRoZSBwbHVnLWluIHZpZXcgaXRz
ZWxmLgogICAgIFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0
OworICAgIAorICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3Rvciwg
V2ViQ29yZTo6SW50UG9pbnQgb3JpZ2luKTsKKyAgICBkb3VibGUgcGFnZVNjYWxlRmFjdG9yKCk7
CisgICAgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9wbHVnaW4tPmhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsgfQogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JEaWRD
aGFuZ2UoKTsKICAgICB2b2lkIHdlYlBhZ2VEZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBT
dHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2luVmll
dyhQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiwgUGFzc1JlZlB0cjxQbHVn
aW4+LCBjb25zdCBQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOwogICAgIHZpcnR1YWwg
flBsdWdpblZpZXcoKTsKQEAgLTIzNiw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IG1fdHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdDsKICAgICAvLyBUaGlz
IHRpbWVyIGlzIHVzZWQgd2hlbiBwbHVnaW4gc25hcHNob3R0aW5nIGlzIGVuYWJsZWQsIHRvIGNh
cHR1cmUgYSBwbHVnaW4gcGxhY2Vob2xkZXIuCiAgICAgV2ViQ29yZTo6RGVmZXJyYWJsZU9uZVNo
b3RUaW1lcjxQbHVnaW5WaWV3PiBtX3BsdWdpblNuYXBzaG90VGltZXI7CisKKyAgICBkb3VibGUg
bV9wYWdlU2NhbGVGYWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggNmRhMjQyNS4uYzI5NDYzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRl
ckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTExNDYsMTAgKzExNDYsOSBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKCkKICAgICAvLyBJbmZvcm0gdGhl
IFVJIHByb2Nlc3Mgb2YgdGhlIHNjYWxlIGZhY3Rvci4KICAgICBkb3VibGUgc2NhbGVGYWN0b3Ig
PSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0ZW0o
KS0+cGFnZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBBIHNjYWxlIGZhY3RvciBvZiAwLjAgbWVh
bnMgdGhlIGhpc3RvcnkgaXRlbSBhY3R1YWxseSBoYXMgdGhlICJkZWZhdWx0IHNjYWxlIGZhY3Rv
ciIgb2YgMS4wLgotICAgIGlmICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHNjYWxlRmFjdG9yID0g
MS4wOwotICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQ
YWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVGYWN0b3IpKTsKKyAgICAvLyBBIHNjYWxlIGZh
Y3RvciBvZiAwIG1lYW5zIHRoZSBoaXN0b3J5IGl0ZW0gaGFzIHRoZSBkZWZhdWx0IHNjYWxlIGZh
Y3RvciwgdGh1cyB3ZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgaXQuCisgICAgaWYgKHNjYWxlRmFj
dG9yKQorICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNjYWxlRmFjdG9yKSk7CiAKICAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gV2ViQ29yZSBzaG91bGQgYmUgY29ycmVj
dGx5IGludmFsaWRhdGluZwogICAgIC8vIHRoZSB2aWV3IG9uIHJlc3RvcmVzIGZyb20gdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZS4KQEAgLTEyMTYsNyArMTIxNSw3IEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFt
ZSopCiAgICAgYm9vbCBpc01haW5GcmFtZSA9IHdlYlBhZ2UtPm1haW5XZWJGcmFtZSgpID09IG1f
ZnJhbWU7CiAgICAgCiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBtX2Zy
YW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCk7
Ci0gICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25z
ZShyZXNwb25zZSk7CisgICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWlu
RnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25z
ZShyZXNwb25zZSk7CiAgICAgbV9mcmFtZUNhbWVGcm9tUGFnZUNhY2hlID0gdHJ1ZTsKIH0KIApA
QCAtMTIzMCw3ICsxMjI5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlv
blRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCiAgICAgSW50UmVjdCBjdXJyZW50VmlzaWJsZUNvbnRl
bnRCb3VuZHMgPSBtX2ZyYW1lLT52aXNpYmxlQ29udGVudEJvdW5kcygpOwogCiAgICAgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVy
KCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCk7Ci0gICAgbV9mcmFtZUhhc0N1c3RvbVJl
cHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxk
VXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV9mcmFt
ZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxk
VXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CiAgICAgbV9mcmFt
ZUNhbWVGcm9tUGFnZUNhY2hlID0gZmFsc2U7CiAKICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+
Y3JlYXRlVmlldyh3ZWJQYWdlLT5zaXplKCksIGJhY2tncm91bmRDb2xvciwgLyogdHJhbnNwYXJl
bnQgKi8gZmFsc2UsIEludFNpemUoKSwgc2hvdWxkVXNlRml4ZWRMYXlvdXQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGUyNmViODguLjkw
YmJhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVn
aXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFZhbHVlLmg+CkBAIC0xNTAsNyArMTUx
LDEwIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJCdWlsdEluUERG
Vmlldy5oIgorI2luY2x1ZGUgIlNpbXBsZVBERlBsdWdpbi5oIgorI2lmIEVOQUJMRShQREZLSVRf
UExVR0lOKQorI2luY2x1ZGUgIlBERlBsdWdpbi5oIgorI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtMjE5LDYgKzIyMyw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3Qg
cGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAg
ICwgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoZmFsc2UpCiAg
ICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFsc2UpCiAjaWYgUExB
VEZPUk0oTUFDKQorICAgICwgbV9wZGZQbHVnaW5FbmFibGVkKGZhbHNlKQogICAgICwgbV93aW5k
b3dJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX2lzU21hcnRJbnNlcnREZWxldGVFbmFibGVkKHBh
cmFtZXRlcnMuaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpCiAgICAgLCBtX2xheWVySG9zdGlu
Z01vZGUocGFyYW1ldGVycy5sYXllckhvc3RpbmdNb2RlKQpAQCAtNDY2LDggKzQ3MSwxMyBAQCBQ
YXNzUmVmUHRyPFBsdWdpbj4gV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSwg
SFRNTFBsdWdJbkVsZW1lbnQqIHBsdQogICAgIGlmIChwbHVnaW5QYXRoLmlzTnVsbCgpKSB7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAocGFyYW1ldGVycy5taW1lVHlwZSA9PSAiYXBw
bGljYXRpb24vcGRmIgotICAgICAgICAgICAgfHwgKHBhcmFtZXRlcnMubWltZVR5cGUuaXNFbXB0
eSgpICYmIHBhcmFtZXRlcnMudXJsLnBhdGgoKS5sb3dlcigpLmVuZHNXaXRoKCIucGRmIikpKQot
ICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoZnJhbWUpOworICAgICAg
ICAgICAgfHwgKHBhcmFtZXRlcnMubWltZVR5cGUuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMudXJs
LnBhdGgoKS5sb3dlcigpLmVuZHNXaXRoKCIucGRmIikpKSB7CisjaWYgRU5BQkxFKFBERktJVF9Q
TFVHSU4pCisgICAgICAgICAgICBpZiAocGRmUGx1Z2luRW5hYmxlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBQREZQbHVnaW46OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYKKyAgICAgICAgICAg
IHJldHVybiBTaW1wbGVQREZQbHVnaW46OmNyZWF0ZShmcmFtZSk7CisgICAgICAgIH0KICNlbHNl
CiAgICAgICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CiAjZW5kaWYKQEAgLTYxOCwxMSArNjI4LDI3
IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYlBhZ2U6OnRyYWNrZWRSZXBhaW50UmVj
dHMoKQogICAgIHJldHVybiBJbW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKIH0KIAorc3Rh
dGljIFBsdWdpblZpZXcqIHBsdWdpblZpZXdGb3JGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAg
aWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19jYXN0
PFBsdWdpbkRvY3VtZW50Kj4oZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFBsdWdpblZpZXcqIHBs
dWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luRG9jdW1lbnQtPnBsdWdp
bldpZGdldCgpKTsKKyAgICByZXR1cm4gcGx1Z2luVmlldzsKK30KKwogdm9pZCBXZWJQYWdlOjpl
eGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JG
cmFtZShmcmFtZSkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+aGFuZGxlRWRpdGluZ0NvbW1hbmQo
Y29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmV4ZWN1dGUoYXJndW1lbnQp
OwogfQogCkBAIC02MzEsNiArNjU3LDkgQEAgYm9vbCBXZWJQYWdlOjppc0VkaXRpbmdDb21tYW5k
RW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChQbHVnaW5WaWV3KiBwbHVn
aW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHBsdWdp
blZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsKICAgICAKICAgICBF
ZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5k
TmFtZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5h
YmxlZCgpOwpAQCAtMTA3MSw4ICsxMTAwLDE0IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2NyZWVu
RGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJRCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBhZ2Uo
ZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogeworICAgIFBsdWdpblZpZXcq
IHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7Cisg
ICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
KSB7CisgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgb3JpZ2lu
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBtX3BhZ2UtPnNldFBhZ2VTY2Fs
ZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAgIGZvciAoSGFzaFNldDxQbHVnaW5W
aWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5WaWV3cy5iZWdpbigpLCBlbmQgPSBt
X3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5wYWdl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2ICsxMTE2LDEwIEBAIHZvaWQgV2Vi
UGFnZTo6c2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbikKIAog
ZG91YmxlIFdlYlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CisgICAgUGx1Z2luVmll
dyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgpKTsK
KyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFjdG9y
KCkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5wYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAK
ICAgICByZXR1cm4gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTUzMSw5ICsx
NTcwLDEzIEBAIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0ZSA9IDA7CiAg
ICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21t
YW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAgICAgICAgc3Rh
dGUgPSBjb21tYW5kLnN0YXRlKCk7Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNTdXBw
b3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICBpZiAoUGx1Z2luVmlldyog
cGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShmcmFtZSkpCisgICAgICAgICAgICBpc0Vu
YWJsZWQgPSBwbHVnaW5WaWV3LT5pc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFtZSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBm
cmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpOworICAgICAgICAgICAgc3RhdGUg
PSBjb21tYW5kLnN0YXRlKCk7CisgICAgICAgICAgICBpc0VuYWJsZWQgPSBjb21tYW5kLmlzU3Vw
cG9ydGVkKCkgJiYgY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2soY29t
bWFuZE5hbWUsIGlzRW5hYmxlZCwgc3RhdGUsIGNhbGxiYWNrSUQpKTsKQEAgLTIwNTIsNiArMjA5
NSwxMCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVu
Y2VzU3RvcmUmIHN0b3JlKQogCiAgICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkS2V5KCkpOwogCisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIG1fcGRmUGx1Z2luRW5hYmxlZCA9IHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVm
ZXJlbmNlc0tleTo6cGRmUGx1Z2luRW5hYmxlZEtleSgpKTsKKyNlbmRpZgorCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIG1hY3JvIGV4cGFuc2lvbiBmb3IgYWxs
IHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgbWF0Y2ggdGhlIG5h
bWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2UgYXJlCiAgICAgLy8gaGFuZHJvbGxpbmcgdGhl
IGJvb2xlYW4gYW5kIGludGVnZXIgcHJlZmVyZW5jZXMgdW50aWwgdGhhdCBpcyBmaXhlZC4KQEAg
LTMzOTEsNCArMzQzOCwyNCBAQCB2b2lkIFdlYlBhZ2U6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNl
TG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAorc3RhdGljIGJvb2wgY2Fu
UGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgU3RyaW5nIHBsdWdpblBhdGg7CisgICAgYm9vbCBibG9ja2VkOworICAgIAorICAgIGlm
ICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRoKHJlc3BvbnNlLm1pbWVUeXBlKCksIHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2lu
UGF0aDo6UmVwbHkocGx1Z2luUGF0aCwgYmxvY2tlZCksIDApKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuICFibG9ja2VkICYmICFwbHVnaW5QYXRoLmlzRW1wdHkoKTsK
K30KKworYm9vbCBXZWJQYWdlOjpzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3Bv
bnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBjb25zdAoreworICAgIGlmICgh
bV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmNvbnRhaW5zKHJlc3BvbnNlLm1p
bWVUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBhIHBsdWctaW4g
ZXhpc3RzIHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQgdGhpcyByZXNwb25zZSwgaXQgc2hvdWxkIHRh
a2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBjdXN0b20gcmVwcmVzZW50YXRpb24uCisgICAgcmV0dXJu
ICFjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShyZXNwb25zZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggNGQ5NTI0Ni4uNjVhMDRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCkBAIC0xMTMsNiArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgUHJpbnRDb250ZXh0OwogICAgIGNsYXNzIFJhbmdlOwor
ICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0Owog
ICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAt
NTgxLDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5kbGUo
KSB7IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQogI2VuZGlmCiAKKyAgICBib29sIHNo
b3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpIGNvbnN0OworCiAgICAgYm9vbCBhc3luY2hyb25vdXNQbHVnaW5Jbml0
aWFsaXphdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FzeW5jaHJvbm91c1BsdWdpbklu
aXRpYWxpemF0aW9uRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzUGx1Z2luSW5p
dGlhbGl6YXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FzeW5jaHJvbm91c1BsdWdpbklu
aXRpYWxpemF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICBib29sIGFzeW5jaHJvbm91c1Bs
dWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoKSBjb25zdCB7IHJldHVybiBt
X2FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnM7IH0K
QEAgLTU5Myw2ICs1OTYsMTUgQEAgcHVibGljOgogICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5n
RW5hYmxlZChib29sKTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIHBkZlBsdWdpbkVu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BkZlBsdWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lkIHNl
dFBERlBsdWdpbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGRmUGx1Z2luRW5hYmxlZCA9IGVu
YWJsZWQ7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHN0YXRpYyBIYXNoU2V0
PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7Cisj
ZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwogCkBAIC03OTYsNiArODA4LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsKIAogI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBib29sIG1fcGRmUGx1Z2luRW5hYmxlZDsKKwogICAgIC8vIFdoZXRo
ZXIgdGhlIGNvbnRhaW5pbmcgd2luZG93IGlzIHZpc2libGUgb3Igbm90LgogICAgIGJvb2wgbV93
aW5kb3dJc1Zpc2libGU7CiAKQEAgLTkyMyw2ICs5MzcsOCBAQCBwcml2YXRlOgogICAgIFdlYkNv
cmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAgICBX
ZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9yQ2xpZW50OworCisgICAgSGFzaFNldDxTdHJp
bmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25z
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMjIyNzNjMS4uMmFjZjg1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQ
YWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2Vi
UGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVByZWZl
cmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogewogICAg
IGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQogICAgICAg
ICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVzZXNXZWJLaXRVc2VySW50ZXJmYWNlKHN0b3JlLmdl
dEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6aW5zcGVjdG9yVXNlc1dlYktpdFVz
ZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAgQk9PTCBvbWl0UERGU3VwcG9ydCA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERG
U3VwcG9ydCJdOworICAgIGlmICghcGRmUGx1Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3VwcG9y
dCkgeworICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBwcm9j
ZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KKyAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xk
aW5nSGFzaD4gbWltZVR5cGVzID0gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAgICAg
ICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9IG1p
bWVUeXBlcy5iZWdpbigpOyBpdCAhPSBtaW1lVHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAgICAg
ICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAgfQog
fQogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKQEAg
LTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZEb2N1
bWVudChDR0NvbnRleHRSZWYgY29udGV4dCwgUERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAKKy8v
IEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUgaWRlYWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24gKGFu
ZCBub3cgaXQncyBkdXBsaWNhdGVkIGhlcmUgYW5kIGluIFdlYkNvbnRleHRNYWMpLgorSGFzaFNl
dDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gV2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1JTUVU
eXBlcygpCit7CisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGVz
OworICAgIAorICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1pbWVU
eXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRkKCJ0
ZXh0L3BkZiIpOworICAgIAorICAgIHJldHVybiBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXgg
OThjOTMwMi4uNmY2N2VkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3Mu
Y3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJv
Y2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAgIHNl
dERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVlc3RU
aW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJz
Lm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAgICAg
bV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1pbWVU
eXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVycy5z
aG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNVc2Vz
Q29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsKIApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lkIFdl
YlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQb3J0Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQpCiB9
CiAjZW5kaWYKIAotc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0gICAg
Ym9vbCBibG9ja2VkOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVz
cG9uc2UubWltZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwg
MCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAhcGx1
Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3VzdG9t
UmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9u
cy5jb250YWlucyhyZXNwb25zZS5taW1lVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gSWYgYSBwbHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRoaXMg
cmVzcG9uc2UsIGl0IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJlcHJl
c2VudGF0aW9uLgotICAgIHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9uc2Up
OwotfQotCiB2b2lkIFdlYlByb2Nlc3M6OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNo
ZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFyUmVz
b3VyY2VDYWNoZXMocmVzb3VyY2VDYWNoZXNUb0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgKaW5kZXggNzNmMDc5Ni4uZWNjYmI4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTE1MCwxNCArMTUwLDEyIEBAIHB1YmxpYzoKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25zdCB7
IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRGb3Jj
ZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNlU2Ny
ZWVuRm9udFN1YnN0aXR1dGlvbjsgfQotI2VuZGlmIAorI2VuZGlmCiAgICAgCiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdlcigp
IHsgcmV0dXJuIG1fbmV0d29ya0FjY2Vzc01hbmFnZXI7IH0KICNlbmRpZgogCi0gICAgYm9vbCBz
aG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmKSBjb25zdDsKLQogICAgIC8vIFRleHQgQ2hlY2tpbmcKICAgICBjb25z
dCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0Q2hlY2tlclN0YXRlOyB9CiAKQEAgLTMyMCw4ICszMTgsNiBAQCBwcml2YXRlOgogICAgIEhh
c2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5l
bD4gPiBtX21lc3NhZ2VQb3J0Q2hhbm5lbHM7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8U3RyaW5n
LCBDYXNlRm9sZGluZ0hhc2g+IG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uczsK
LQogICAgIFRleHRDaGVja2VyU3RhdGUgbV90ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdlb2xv
Y2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0aW9uTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168569</attachid>
            <date>2012-10-13 15:55:32 -0700</date>
            <delta_ts>2012-10-14 00:55:21 -0700</delta_ts>
            <desc>stylebot</desc>
            <filename>pdfkit.diff</filename>
            <type>text/plain</type>
            <size>228024</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li4yNmQ5MTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgV2ViUERGRG9jdW1lbnRFeHRy
YXMgYW5kIHBhcnRzIG9mIFdlYkpTUERGRG9jIGludG8gV2ViQ29yZTo6UERGRG9jdW1lbnRTY3Jp
cHRpbmcsCisgICAgICAgIHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gV2ViS2l0
IGFuZCBXZWJLaXQyLgorCisgICAgICAgIEFkZCBhIHBsdWctaW4gdGhhdCB1c2VzIFBERktpdCB0
byBkaXNwbGF5IFBERnMsIGluc3RlYWQgb2YgdXNpbmcgUERGS2l0IGluIHRoZQorICAgICAgICBV
SVByb2Nlc3MgZm9yIGZ1bGwtcGFnZSBQREZzLiBUaGlzIG5ldyBwbHVnaW4gd2lsbCBhbHNvIGJl
IHVzZWQgZm9yIGlubGluZSBQREZzCisgICAgICAgIGluIHBsYWNlIG9mIEJ1aWx0SW5TaW1wbGVQ
REZWaWV3IChuw6llIEJ1aWx0SW5QREZWaWV3KS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmlu
OgorICAgICAgICBFeHBvcnQgYSBmZXcgbW9yZSBtZXRob2RzIHRvIFdlYktpdCgyKS4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgRXhwb3Nl
IFBhc3RlYm9hcmQuaCBhcyBhIHByaXZhdGUgaGVhZGVyIHNvIFBERlBsdWdpbiBjYW4gdXNlIGl0
LgorICAgICAgICBBZGQgUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwL2guCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICBNYWtlIGludmFsaWRhdGVTY3JvbGxi
YXIvaW52YWxpZGF0ZVNjcm9sbENvcm5lciB2aXJ0dWFsLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBERkRvY3VtZW50U2NyaXB0aW5nOjptYWtlSlNQREZEb2MpOiBGYWN0b3JlZCBvdXQg
b2YgQnVpbHRJblBERlZpZXcgYW5kIFBERlZpZXcuCisgICAgICAgIChXZWJDb3JlOjphcHBlbmRW
YWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IpOiBGYWN0b3JlZCBvdXQgb2YgQnVpbHRJblBE
RlZpZXcgYW5kIFBERlZpZXcuCisgICAgICAgIChXZWJDb3JlOjpnZXRBbGxWYWx1ZXNJblBERk5h
bWVUcmVlKTogRmFjdG9yZWQgb3V0IG9mIEJ1aWx0SW5QREZWaWV3IGFuZCBQREZWaWV3LgorICAg
ICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRTY3JpcHRpbmc6OmdldEFsbFNjcmlwdHNJblBERkRv
Y3VtZW50KTogRmFjdG9yZWQgb3V0IG9mIEJ1aWx0SW5QREZWaWV3IGFuZCBQREZWaWV3LgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50U2NyaXB0aW5nLmg6IEFkZGVk
LgorICAgICAgICAoUERGRG9jdW1lbnRTY3JpcHRpbmcpOiBFeHBvc2UgbWFrZUpTUERGRG9jIGFu
ZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudCwgZm9yIHVzZSBpbiBQREZQbHVnaW4vU2ltcGxl
UERGUGx1Z2luL1BERlZpZXcuCisKIDIwMTItMTAtMTEgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IHdp
bGwgbmV2ZXIgcmVzdG9yZSB0aGUgY3VycmVudCBjb250ZXh0IHRvIG51bGwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KaW5kZXggZmQyY2Q3Ny4uMzMwZjU5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTI4
NSwxMSArMjg1LDE0IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWExNWNvbnRlbnRzUmVz
aXplZEV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTZoYW5kbGVXaGVlbEV2ZW50RVJL
TlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTd3
aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTl3aWxsU3Rh
cnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWExOWludmFsaWRhdGVT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFUktOU183SW50UmVjdEUKK19fWk5LN1dlYkNvcmUxNFNj
cm9sbGFibGVBcmVhMjFtb3VzZUVudGVyZWRTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pO
N1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjJpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyRVJLTlNfN0lu
dFJlY3RFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjNkaWRBZGRWZXJ0aWNhbFNjcm9s
bGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyNHNldFNj
cm9sbGJhck92ZXJsYXlTdHlsZUVOU18yMVNjcm9sbGJhck92ZXJsYXlTdHlsZUUKIF9fWk43V2Vi
Q29yZTE0U2Nyb2xsYWJsZUFyZWEyNWRpZEFkZEhvcml6b250YWxTY3JvbGxiYXJFUE5TXzlTY3Jv
bGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjd3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCitfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjdu
b3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMjhzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxzRVJLTlNfOEludFBv
aW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI5d2lsbFJlbW92ZUhvcml6b250YWxT
Y3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhNnNj
cm9sbEVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFyaXR5RWYKQEAgLTMy
MSw2ICszMjQsOCBAQCBfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZwogX19aTjdXZWJDb3JlMTRzZXRN
ZXRhZGF0YVVSTEVSTjNXVEY2U3RyaW5nRVJLUzFfUzRfCiBfX1pON1dlYkNvcmUxNUFmZmluZVRy
YW5zZm9ybTVmbGlwWUV2CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTVzY2FsZUVkCitf
X1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKK19fWk5LN1dlYkNvcmUxNUFm
ZmluZVRyYW5zZm9ybTZ5U2NhbGVFdgogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm04bXVs
dGlwbHlFUktTMF8KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOXRyYW5zbGF0ZUVkZAog
X19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm1DMUVkZGRkZGQKQEAgLTM1MSw2ICszNTYsNyBA
QCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dFdgogX19aTjdXZWJD
b3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xvckVOU18xMENvbG9y
U3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0RmlsbEdyYWRpZW50RU4z
V1RGMTBQYXNzUmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0Nv
bnRleHQxOHNldFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4
dDE5c2V0SXNDQUxheWVyQ29udGV4dEViCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIw
ZW5kVHJhbnNwYXJlbmN5TGF5ZXJFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMHNl
dFNob3VsZFNtb290aEZvbnRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjFzZXRD
b21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKQEAgLTQ2Nyw2ICs0NzMs
OCBAQCBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJpCiBf
X1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43V2ViQ29yZTE4RE9N
V2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVQTlNfMTVET01XcmFwcGVyV29ybGRFCiBfX1pO
N1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhEb2N1bWVudEUKK19fWk43
V2ViQ29yZTEwUGFzdGVib2FyZDE3Z2VuZXJhbFBhc3RlYm9hcmRFdgorX19aTjdXZWJDb3JlMTBQ
YXN0ZWJvYXJkMTR3cml0ZVBsYWluVGV4dEVSS04zV1RGNlN0cmluZ0VOUzBfMThTbWFydFJlcGxh
Y2VPcHRpb25FCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEwdW5pcXVlTmFtZUV2
CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9yVHlwZUVSS04zV1RG
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNzdHJpbmdGb3JUeXBl
RVJLTjNXVEY2U3RyaW5nRQpAQCAtNTQyLDYgKzU1MCw4IEBAIF9fWk43V2ViQ29yZTIwVXNlckdl
c3R1cmVJbmRpY2F0b3JEMUV2CiBfX1pON1dlYkNvcmUyMG1ha2VSR0JBMzJGcm9tRmxvYXRzRWZm
ZmYKIF9fWk43V2ViQ29yZTIwcHJvdG9jb2xJc0phdmFTY3JpcHRFUktOM1dURjZTdHJpbmdFCiBf
X1pON1dlYkNvcmUyMFNwYWNlU3BsaXRTdHJpbmdEYXRhRDFFdgorX19aTjdXZWJDb3JlMjBQREZE
b2N1bWVudFNjcmlwdGluZzEybWFrZUpTUERGRG9jRVBLMTVPcGFxdWVKU0NvbnRleHRQRnZTM19Q
MTNPcGFxdWVKU1ZhbHVlRVBGUEtTNF9TM19TNV9TNV9tUEtTOV9QUzlfRVBGdlM1X0VQdgorX19a
TjdXZWJDb3JlMjBQREZEb2N1bWVudFNjcmlwdGluZzI2Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1l
bnRFUDEzQ0dQREZEb2N1bWVudFJOM1dURjZWZWN0b3JJTlMzXzlSZXRhaW5QdHJJUEsxMF9fQ0ZT
dHJpbmdFRUxtMEVFRQogX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENvbnRyb2xsZXIxMWl0ZW1B
dEluZGV4RWkKIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5kbGVyN2luc3RhbGxFdgog
X19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2FtYmlndWF0ZUtleURvd25F
dmVudEVOU18xM1BsYXRmb3JtRXZlbnQ0VHlwZUViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmE4YTk3Ni4uOGIxODNjZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNzg1LDYgKzc4NSw4IEBACiAJCTJEOUEyNDc1MTVCOUMyRTMwMEQzNDUyNyAvKiBET01ET01T
ZWN1cml0eVBvbGljeUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDlBMjQ3MTE1QjlDMjk1MDBEMzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQ
b2xpY3lJbnRlcm5hbC5oICovOyB9OwogCQkyRDlBMjQ3NjE1QjlDMkY0MDBEMzQ1MjcgLyogRE9N
RE9NU2VjdXJpdHlQb2xpY3kuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUEyNDcwMTVCOUMyOTUwMEQzNDUyNyAvKiBET01E
T01TZWN1cml0eVBvbGljeS5oICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyog
bGluZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsK
KwkJMkRBMjA4NjUxNjI5NzlFQTAwRTc5QjBDIC8qIFBERkRvY3VtZW50U2NyaXB0aW5nLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTIwODYzMTYy
OTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGluZy5jcHAgKi87IH07CisJCTJEQTIw
ODY2MTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMjA4NjQxNjI5NzlFQTAwRTc5
QjBDIC8qIFBERkRvY3VtZW50U2NyaXB0aW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkUwODg4RDQxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9N
Rm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkUwODg4RDIxMTQ4ODQ4QTAwQUY0MjY1IC8qIEpTRE9NRm9ybURhdGEuY3BwICovOyB9Owog
CQkyRTA4ODhENTExNDg4NDhBMDBBRjQyNjUgLyogSlNET01Gb3JtRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkUwODg4RDMxMTQ4ODQ4QTAwQUY0
MjY1IC8qIEpTRE9NRm9ybURhdGEuaCAqLzsgfTsKIAkJMkUwODg4RTYxMTQ4ODRFMjAwQUY0MjY1
IC8qIEpTRE9NRm9ybURhdGFDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkUwODg4RTUxMTQ4ODRFMjAwQUY0MjY1IC8qIEpTRE9NRm9ybURh
dGFDdXN0b20uY3BwICovOyB9OwpAQCAtMTQ0MCw3ICsxNDQyLDcgQEAKIAkJNEFEMDE3M0QxMjdF
ODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91dHB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDAxNzNCMTI3RTgyODYwMDE1MDM1RiAvKiBK
U0hUTUxPdXRwdXRFbGVtZW50LmggKi87IH07CiAJCTRBRjFBRDNFMTNGRDIzQTQwMEFBOTU5MCAv
KiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEFGMUFEM0MxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvci5jcHAgKi87IH07CiAJCTRBRjFBRDNGMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVu
dERpc3BhdGNoTWVkaWF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBRjFBRDNEMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0
QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA4QzUwQUYxOUVFNDAwNjUxMjdGIC8q
IFBhc3RlYm9hcmQuaCAqLzsgfTsKKwkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3Rl
Ym9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRC
MjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEIyNzA5ODMwQUYyRTVFMDAwNjUxMjdG
IC8qIFBhc3RlYm9hcmRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QjI3MDk4MTBBRjJFNUUwMDA2NTEyN0YgLyogUGFzdGVib2FyZE1hYy5tbSAq
LzsgfTsKIAkJNEIzMDQzQzcwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjMwNDNDNjBBRTAzNzAzMDBBODI2
NDcgLyogU291bmQuaCAqLzsgfTsKIAkJNEIzMDQzQzkwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5k
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIz
MDQzQzgwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5kTWFjLm1tICovOyB9OwpAQCAtNzg5MSw2ICs3
ODkzLDggQEAKIAkJMkQ5QTI0NzExNUI5QzI5NTAwRDM0NTI3IC8qIERPTURPTVNlY3VyaXR5UG9s
aWN5SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9NU2Vj
dXJpdHlQb2xpY3lJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlB
MjQ3MjE1QjlDMkM3MDBEMzQ1MjcgLyogRE9NRE9NU2VjdXJpdHlQb2xpY3kubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01ET01TZWN1cml0eVBvbGljeS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEwRkY3IC8q
IGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkyREEyMDg2MzE2Mjk3OUVBMDBFNzlCMEMgLyogUERGRG9jdW1lbnRTY3JpcHRp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUERGRG9jdW1lbnRT
Y3JpcHRpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREEyMDg2NDE2Mjk3
OUVBMDBFNzlCMEMgLyogUERGRG9jdW1lbnRTY3JpcHRpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUERGRG9jdW1lbnRTY3JpcHRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkUwODg4QzMxMTQ4ODNBOTAwQUY0MjY1IC8qIERPTUZvcm1EYXRhLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBET01Gb3JtRGF0YS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJFMDg4OEQyMTE0ODg0OEEwMEFGNDI2NSAvKiBKU0RPTUZvcm1EYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRm9ybURhdGEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTA4ODhEMzExNDg4NDhBMDBBRjQyNjUg
LyogSlNET01Gb3JtRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RP
TUZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTc5Myw2ICsxOTc5
Nyw4IEBACiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2Uu
Y3BwICovLAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdl
LmggKi8sCiAJCQkJQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0
cml4Q0cuY3BwICovLAorCQkJCTJEQTIwODYzMTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVu
dFNjcmlwdGluZy5jcHAgKi8sCisJCQkJMkRBMjA4NjQxNjI5NzlFQTAwRTc5QjBDIC8qIFBERkRv
Y3VtZW50U2NyaXB0aW5nLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGNnOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKQEAgLTIyMjc3LDYgKzIyMjgzLDggQEAKIAkJCWlzYSA9IFBCWEhlYWRl
cnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVz
ID0gKAorCQkJCTJEQTIwODY2MTYyOTc5RUEwMEU3OUIwQyAvKiBQREZEb2N1bWVudFNjcmlwdGlu
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3Rl
Ym9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0N0UyNzY1MTYwMzZFRDIwMEVFMkFGQiAvKiBE
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNjlE
QjE1MDVGMDc2MDAxQjc0QUMgLyogQWJzdHJhY3REYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDFFMUIxRDEwRkY1OTg2OTAwNTc2QjNCIC8qIEFic3RyYWN0V29ya2VyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI0NTc1LDcgKzI0NTgzLDYgQEAKIAkJCQlGRDMxNjBBMzEyQjAyNkY3MDBDMUEz
NTkgLyogUGFubmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc2QUMxMzBERDdBRDVDMDA0MTVG
MzQgLyogUGFyc2VyVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDQTEyNTFG
MTJEMDAzRUYyNjkgLyogUGFzc3dvcmRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTRC
MjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDNTk4OTA1NzE0RTlDMjgwMDBFOEQxOEIgLyogUGFzdGVib2FyZFN0cmF0ZWd5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjc1MzU4MDBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTg4REQ0ODcwQjQ2MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODY3OCw2ICsyODY4NSw3IEBACiAJCQkJMzE5NTVBODYx
NjBEMTk5MDAwODU4MDI1IC8qIFJlbmRlclNuYXBzaG90dGVkUGx1Z0luLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNEJDODNGMTYxQ0YwNEEwMDRENTJGNCAvKiBSZXNvdXJjZUJ1ZmZlci5tbSBp
biBTb3VyY2VzICovLAogCQkJCTUxNEJDODQyMTYxQ0YwNUMwMDRENTJGNCAvKiBSZXNvdXJjZUJ1
ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyREEyMDg2NTE2Mjk3OUVBMDBFNzlCMEMgLyog
UERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRleCBjNzQ0YWY2Li45MzBjZGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKQEAgLTEwNiwxMCArMTA2LDEwIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0ID0gMDsKLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgPSAwOwotICAgIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKICAgICAvLyBD
b252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0d2VlbiB0aGUgc2Nyb2xsYmFyIGFuZCBpdHMgY29u
dGFpbmluZyB2aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRTY3JpcHRpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmZlZjZjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudFNjcmlwdGluZy5jcHAKQEAgLTAsMCAr
MSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBERkRvY3VtZW50U2NyaXB0aW5nLmgiCisKKyNpZiBVU0UoQ0cpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNPYmplY3RSZWYgUERGRG9jdW1lbnRTY3JpcHRpbmc6Om1ha2VKU1BERkRv
YyhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RJbml0aWFsaXplQ2FsbGJhY2sgaW5pdGlh
bGl6ZSwgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrIHByaW50LCBKU09iamVjdEZpbmFs
aXplQ2FsbGJhY2sgZmluYWxpemUsIHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljIEpTU3RhdGlj
RnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAicHJpbnQi
LCBwcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwKKyAgICB9OworICAgIAorICAg
IHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlvbiA9IHsKKyAg
ICAgICAgMCwKKyAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAorICAgICAgICAiRG9jIiwK
KyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAganNQREZEb2NTdGF0aWNGdW5jdGlvbnMs
CisgICAgICAgIGluaXRpYWxpemUsIGZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
CisgICAgfTsKKyAgICAKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlND
bGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRpb24pOworICAgIAorICAgIHJldHVybiBK
U09iamVjdE1ha2UoY29udGV4dCwganNQREZEb2NDbGFzcywgZGF0YSk7Cit9CisKK3N0YXRpYyB2
b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25hcnlS
ZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQoreworICAgIENHUERG
QXJyYXlSZWYgbmFtZXM7CisgICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUs
ICJOYW1lcyIsICZuYW1lcykpIHsKKyAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERGQXJy
YXlHZXRDb3VudChuYW1lcykgLyAyOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5h
bWVDb3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7CisgICAg
ICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3QpOwor
ICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICghQ0dQ
REZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lk
cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAg
IENHUERGRGljdGlvbmFyeVJlZiBraWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rp
b25hcnkoa2lkcywgaSwgJmtpZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBw
ZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5
UmVmIHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBl
bmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKwor
dm9pZCBQREZEb2N1bWVudFNjcmlwdGluZzo6Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQ
REZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
PiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBkZkRvY3VtZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIHBkZkNhdGFsb2cgPSBDR1BERkRvY3VtZW50R2V0
Q2F0YWxvZyhwZGZEb2N1bWVudCk7CisgICAgaWYgKCFwZGZDYXRhbG9nKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZl
bCBuYW1lIHRyZWVzLgorICAgIENHUERGRGljdGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7Cisg
ICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIs
ICZuYW1lc0RpY3Rpb25hcnkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR2V0IHRo
ZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVlLgorICAgIENHUERGRGljdGlv
bmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXRE
aWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVU
cmVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRoZSBuYW1lcyBhcmUgYXJiaXRy
YXJ5LiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSB2YWx1ZXMuCisgICAgVmVjdG9yPENH
UERGT2JqZWN0UmVmPiBvYmplY3RzOworICAgIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoamF2
YVNjcmlwdE5hbWVUcmVlLCBvYmplY3RzKTsKKyAgICBzaXplX3Qgb2JqZWN0Q291bnQgPSBvYmpl
Y3RzLnNpemUoKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdENvdW50
OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHRBY3Rpb247Cisg
ICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVycHJldF9jYXN0PENHUERGT2Jq
ZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25hcnksICZqYXZhU2Ny
aXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8g
QSBKYXZhU2NyaXB0IGFjdGlvbiBtdXN0IGhhdmUgYW4gYWN0aW9uIHR5cGUgb2YgIkphdmFTY3Jp
cHQiLgorICAgICAgICBjb25zdCBjaGFyKiBhY3Rpb25UeXBlOworICAgICAgICBpZiAoIUNHUERG
RGljdGlvbmFyeUdldE5hbWUoamF2YVNjcmlwdEFjdGlvbiwgIlMiLCAmYWN0aW9uVHlwZSkgfHwg
c3RyY21wKGFjdGlvblR5cGUsICJKYXZhU2NyaXB0IikpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5k
ZXggbGVuZ3RoOworICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERG
U3RyaW5nUmVmIHN0cmluZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAg
ICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMi
LCAmc3RyZWFtKSkgeworICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAg
ICAgICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkp
OworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAg
ICAgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2Ug
aWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3Ry
aW5nKSkgeworICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5n
KTsKKyAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYm
IGJ5dGVzWzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGlu
Z1VuaWNvZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gc2NyaXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlm
ICghc2NyaXB0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzY3Jp
cHRzLmFwcGVuZChzY3JpcHQpOworICAgIH0KK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50U2NyaXB0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudFNjcmlwdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM4MTYzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudFNjcmlwdGluZy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBQREZEb2N1bWVudFNjcmlwdGluZ19oCisjZGVmaW5lIFBERkRv
Y3VtZW50U2NyaXB0aW5nX2gKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgPENvcmVGb3VuZGF0
aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGlj
cy5oPgorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKworI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBERkRvY3VtZW50U2NyaXB0aW5nIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiwgSlNP
YmplY3RJbml0aWFsaXplQ2FsbGJhY2ssIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjayBw
cmludCwgSlNPYmplY3RGaW5hbGl6ZUNhbGxiYWNrLCB2b2lkKiBkYXRhKTsKKyAgICBzdGF0aWMg
dm9pZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmLCBWZWN0b3I8
UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKTsKKworcHJpdmF0ZToKKworfTsKKwor
fQorCisjZW5kaWYgLy8gVVNFKENHKQorCisjZW5kaWYgLy8gUERGRG9jdW1lbnRJbWFnZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDM1Mzk2YzguLmQ2NTNjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgW3drMl0gSW1wbGVtZW50IEJ1aWx0SW5QREZLaXRWaWV3CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgV2ViUERGRG9jdW1lbnRFeHRyYXMgYW5k
IHBhcnRzIG9mIFdlYkpTUERGRG9jIGludG8gV2ViQ29yZTo6UERGRG9jdW1lbnRTY3JpcHRpbmcu
CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
UmVtb3ZlIFdlYlBERkRvY3VtZW50RXh0cmFzLmgvbW0uCisgICAgICAgIFJlbW92ZSBXZWJKU1BE
RkRvYy5oL21tLgorCiAyMDEyLTEwLTExICBDaHJpcyBHdWFuICA8Y2hyaXMuZ3VhbkB0b3JjaG1v
YmlsZS5jb20uY24+CiAKICAgICAgICAgW0JsYWNrYmVycnldIG1ha2VzIE5hdmlnYXRvckNvbnRl
bnRVdGlscyB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA3NWE5M2Y2Li4xYWJhNWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc3LDEwICs3Nyw2IEBACiAJCTMxMkUy
RkU5MTRFNDgyMTUwMDdDQ0ExOCAvKiBXZWJOb3RpZmljYXRpb25JbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyRTJGRTgxNEU0ODIxNTAw
N0NDQTE4IC8qIFdlYk5vdGlmaWNhdGlvbkludGVybmFsLmggKi87IH07CiAJCTMxQzExQTZFMTQ3
NjU1MkUwMDQ5QTRDQyAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzExQTZDMTQ3NjU1MkUwMDQ5QTRDQyAv
KiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAqLzsgfTsKIAkJMzFDMTFBNkYxNDc2NTUyRTAwNDlB
NENDIC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxQzExQTZEMTQ3NjU1MkUwMDQ5QTRDQyAvKiBXZWJOb3Rp
ZmljYXRpb25DbGllbnQubW0gKi87IH07Ci0JCTM3QjZGQjRFMTA2MzUzMEMwMDBGREIzQiAvKiBX
ZWJQREZEb2N1bWVudEV4dHJhcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzdCNkZCNEMxMDYzNTMwQzAwMEZEQjNCIC8qIFdlYlBERkRvY3VtZW50RXh0
cmFzLmggKi87IH07Ci0JCTM3QjZGQjRGMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVu
dEV4dHJhcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3QjZGQjREMTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLzsg
fTsKLQkJMzdEMURDQTgxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0QxRENBNjEwNjU5MjhDMDA2
OEY3RUYgLyogV2ViSlNQREZEb2MuaCAqLzsgfTsKLQkJMzdEMURDQTkxMDY1OTI4QzAwNjhGN0VG
IC8qIFdlYkpTUERGRG9jLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzdEMURDQTcxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tICovOyB9
OwogCQkzQUIwMkFGNjEyQzEzMTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzQUIwMkFGNTEyQzEz
MTlCMDBGQkI2OTQgLyogV2ViU3RvcmFnZU1hbmFnZXIubW0gKi87IH07CiAJCTNBQjAyQjAwMTJD
MTMyQjIwMEZCQjY5NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDNBQjAyQUZGMTJDMTMyQjIwMEZCQjY5
NCAvKiBXZWJTdG9yYWdlTWFuYWdlclByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzQUJCM0M3QTEzMDlDM0I1MDBFOTNEOTQgLyogV2Vi
U3RvcmFnZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDNBQkIzQzc4MTMwOUMzQjUwMEU5M0Q5NCAvKiBXZWJTdG9yYWdlVHJhY2tl
ckNsaWVudC5oICovOyB9OwpAQCAtNDcwLDEwICs0NjYsNiBAQAogCQkzNTA4MUQ5NTAyQjZENEQ4
MEFDQTJBQ0EgLyogV2ViSFRNTFZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhUTUxWaWV3Lm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzUwODFEOTYwMkI2
RDREODBBQ0EyQUNBIC8qIFdlYkhUTUxWaWV3UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhUTUxWaWV3UHJpdmF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJMzUw
ODFEQUUwMkI2RDRGNTBBQ0EyQUNBIC8qIFdlYkRvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRG9jdW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCTM3QjZGQjRD
MTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQREZEb2N1bWVudEV4dHJhcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzN0I2RkI0RDEwNjM1MzBDMDAwRkRCM0IgLyogV2ViUERGRG9jdW1l
bnRFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQ
REZEb2N1bWVudEV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdEMURD
QTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkpTUERGRG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTM3RDFEQ0E3MTA2NTkyOEMwMDY4RjdFRiAvKiBXZWJKU1BERkRvYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gV2ViSlNQREZEb2MubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM5NDQ2MDZCMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJEeW5hbWljU2Ny
b2xsQmFyc1ZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTM5NDQ2MDZDMDIwRjUwRUQwRUNB
MTc2NyAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgZmlsZUVu
Y29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBwYXRoID0gV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKIAkJMzk0NDYwNkUwMjBGNTBFRDBFQ0ExNzY3IC8qIFdlYlByZWZlcmVuY2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJlZmVy
ZW5jZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CkBAIC0xMDg0LDEwICsxMDc2LDYgQEAKIAkJNTFFOTRDMDcwNkMwMkNBMzAwQTlCMDlF
IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
MzdEMURDQTYxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLmggKi8sCi0JCQkJMzdEMURD
QTcxMDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tICovLAotCQkJCTM3QjZGQjRDMTA2
MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5oICovLAotCQkJCTM3QjZGQjRE
MTA2MzUzMEMwMDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSAqLywKIAkJCQk1MUU5
NEM2ODA2QzAzNDc1MDBBOUIwOUUgLyogV2ViUERGUmVwcmVzZW50YXRpb24uaCAqLywKIAkJCQk1
MUU5NEM2OTA2QzAzNDc1MDBBOUIwOUUgLyogV2ViUERGUmVwcmVzZW50YXRpb24ubW0gKi8sCiAJ
CQkJNTFFOTRDMzQwNkMwMzIxMjAwQTlCMDlFIC8qIFdlYlBERlZpZXcuaCAqLywKQEAgLTE1Mzks
NyArMTUyNyw2IEBACiAJCQkJN0E4RkYwRDExMDc1MDI0QTAwQTgwQTA4IC8qIFdlYkluc3BlY3Rv
clByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMEEwMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJKYXZhUGx1Z0luLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA0MjA4MjRCRjAxMDA4
REYwMzggLyogV2ViSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkzN0QxRENBODEwNjU5MjhDMDA2OEY3RUYgLyogV2ViSlNQREZEb2MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzOTgxMDg1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLZXlHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTgxMDFCMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzOTgxMDFDMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRFcnJvcnMu
aCBpbiBIZWFkZXJzICovLApAQCAtMTU5MSw3ICsxNTc4LDYgQEAKIAkJCQk5Mzk4MTAyNTA4MjRC
RjAxMDA4REYwMzggLyogV2ViTlNXaW5kb3dFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
OEE1Nzk5MTQzRTcyNzAwMDEyNUY1MCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwMkEwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBhbmVsQXV0
aGVudGljYXRpb25IYW5kbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzN0I2RkI0RTEwNjM1MzBD
MDAwRkRCM0IgLyogV2ViUERGRG9jdW1lbnRFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
OTgxMEE1MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQREZSZXByZXNlbnRhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwQTQwODI0QkYwMTAwOERGMDM4IC8qIFdlYlBERlZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBQTg3OUI2MTFDQkU5QkYwMDNDNjY0RiAvKiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMTk1OSw3ICsxOTQ1LDYgQEAKIAkJCQkxQzdC
MEM2NjBFQjI0NjREMDBBMjg1MDIgLyogV2ViSW5zcGVjdG9yQ2xpZW50Q0YuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQjgwNDE3NzAxMjE3QTgzMTAwNDY2QkFFIC8qIFdlYkluc3BlY3RvckZyb250
ZW5kLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODEwRTQwODI0QkYwMTAwOERGMDM4IC8qIFdl
YkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC5tIGluIFNvdXJjZXMgKi8sCi0JCQkJMzdEMURDQTkx
MDY1OTI4QzAwNjhGN0VGIC8qIFdlYkpTUERGRG9jLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
ODExMTcwODI0QkYwMTAwOERGMDM4IC8qIFdlYktleUdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTkzOTgxMTAzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRFcnJvcnMubSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzOTgxMEMzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRMb2dnaW5nLm0g
aW4gU291cmNlcyAqLywKQEAgLTIwMDMsNyArMTk4OCw2IEBACiAJCQkJOTM5ODEwQ0EwODI0QkYw
MTAwOERGMDM4IC8qIFdlYk5TV2luZG93RXh0cmFzLm0gaW4gU291cmNlcyAqLywKIAkJCQlBNThB
NTc5QTE0M0U3MjcwMDAxMjVGNTAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5Mzk4MTBEMDA4MjRCRjAxMDA4REYwMzggLyogV2ViUGFuZWxBdXRo
ZW50aWNhdGlvbkhhbmRsZXIubSBpbiBTb3VyY2VzICovLAotCQkJCTM3QjZGQjRGMTA2MzUzMEMw
MDBGREIzQiAvKiBXZWJQREZEb2N1bWVudEV4dHJhcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkz
OTgxMTFGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQREZSZXByZXNlbnRhdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzOTgxMTFFMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJQREZWaWV3Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFBODc5QjcxMUNCRTlCRjAwM0M2NjRGIC8qIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDZjZmY0Y2Iu
LjRmZTBkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0xMC0xMyAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBbd2syXSBJ
bXBsZW1lbnQgQnVpbHRJblBERktpdFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBXZWJQREZEb2N1bWVudEV4dHJhcyBhbmQgcGFydHMgb2Yg
V2ViSlNQREZEb2MgaW50byBXZWJDb3JlOjpQREZEb2N1bWVudFNjcmlwdGluZy4KKworICAgICAg
ICAqIFdlYlZpZXcvV2ViSlNQREZEb2MubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViVmlldy9X
ZWJKU1BERkRvYy5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGRG9jdW1lbnRF
eHRyYXMubW06IFJlbW92ZWQuCisgICAgICAgICogV2ViVmlldy9XZWJQREZEb2N1bWVudEV4dHJh
cy5oOiBSZW1vdmVkLgorICAgICAgICAqIFdlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRpb24ubW06
CisgICAgICAgIChqc1BERkRvY0luaXRpYWxpemUpOiBBZGRlZCBmcm9tIFdlYkpTUERGRG9jLm1t
ICh0aGVzZSBhcmUgbm90IHNoYXJhYmxlIGluIFdlYkNvcmUpLgorICAgICAgICAoanNQREZEb2NG
aW5hbGl6ZSk6IEFkZGVkIGZyb20gV2ViSlNQREZEb2MubW0gKHRoZXNlIGFyZSBub3Qgc2hhcmFi
bGUgaW4gV2ViQ29yZSkuCisgICAgICAgIChqc1BERkRvY1ByaW50KTogQWRkZWQgZnJvbSBXZWJK
U1BERkRvYy5tbSAodGhlc2UgYXJlIG5vdCBzaGFyYWJsZSBpbiBXZWJDb3JlKS4KKyAgICAgICAg
KC1bV2ViUERGUmVwcmVzZW50YXRpb24gZmluaXNoZWRMb2FkaW5nV2l0aERhdGFTb3VyY2U6XSk6
IFVzZSBXZWJDb3JlOjpQREZEb2N1bWVudFNjcmlwdGluZy4KKwogMjAxMi0xMC0xMCAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIFJlc291cmNlTG9h
ZGVyOjpyZXNvdXJjZURhdGEoKSBmcm9tIFNoYXJlZEJ1ZmZlciB0byBSZXNvdXJjZUJ1ZmZlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJKU1BERkRvYy5oIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJKU1BERkRvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkM2U3NTZjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViSlNQREZEb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNCYXNlLmg+Ci0KLUBjbGFzcyBXZWJEYXRhU291cmNlOwotCi1KU09iamVjdFJlZiBt
YWtlSlNQREZEb2MoSlNDb250ZXh0UmVmLCBXZWJEYXRhU291cmNlICopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJKU1BERkRvYy5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSlNQREZEb2MubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI0MTY5ZmUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJKU1BE
RkRvYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiV2ViSlNQREZEb2MuaCIKLQot
I2ltcG9ydCAiV2ViRGF0YVNvdXJjZS5oIgotI2ltcG9ydCAiV2ViRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hpbmcuaCIKLSNpbXBvcnQgIldlYkZyYW1lLmgiCi0jaW1wb3J0ICJXZWJWaWV3Lmgi
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotCi1zdGF0aWMgdm9pZCBq
c1BERkRvY0luaXRpYWxpemUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQot
ewotICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UgPSAoV2ViRGF0YVNvdXJjZSAqKUpTT2Jq
ZWN0R2V0UHJpdmF0ZShvYmplY3QpOwotICAgIENGUmV0YWluKGRhdGFTb3VyY2UpOwotfQotCi1z
dGF0aWMgdm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBX
ZWJEYXRhU291cmNlICpkYXRhU291cmNlID0gKFdlYkRhdGFTb3VyY2UgKilKU09iamVjdEdldFBy
aXZhdGUob2JqZWN0KTsKLSAgICBDRlJlbGVhc2UoZGF0YVNvdXJjZSk7Ci19Ci0KLXN0YXRpYyBK
U1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
V2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSA9IChXZWJEYXRhU291cmNlICopSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpOwotCi0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtbZGF0YVNvdXJj
ZSB3ZWJGcmFtZV0gd2ViVmlld107Ci0gICAgQ2FsbFVJRGVsZWdhdGUod2ViVmlldywgQHNlbGVj
dG9yKHdlYlZpZXc6cHJpbnRGcmFtZVZpZXc6KSwgW1tkYXRhU291cmNlIHdlYkZyYW1lXSBmcmFt
ZVZpZXddKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotCi1z
dGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0gewotICAg
IHsgInByaW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgMCwgMCwgMCB9LAotfTsK
LQotc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9jQ2xhc3NEZWZpbml0aW9uID0gewot
ICAgIDAsCi0gICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAotICAgICJEb2MiLAotICAgIDAsCi0g
ICAgMCwKLSAgICBqc1BERkRvY1N0YXRpY0Z1bmN0aW9ucywKLSAgICBqc1BERkRvY0luaXRpYWxp
emUsIGpzUERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLX07Ci0KLUpT
T2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4LCBXZWJEYXRhU291cmNlICpk
YXRhU291cmNlKQotewotICAgIHN0YXRpYyBKU0NsYXNzUmVmIGpzUERGRG9jQ2xhc3MgPSBKU0Ns
YXNzQ3JlYXRlKCZqc1BERkRvY0NsYXNzRGVmaW5pdGlvbik7Ci0KLSAgICByZXR1cm4gSlNPYmpl
Y3RNYWtlKGN0eCwganNQREZEb2NDbGFzcywgZGF0YVNvdXJjZSk7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLmggYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERkRvY3VtZW50RXh0cmFzLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDBkY2U0M2UuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQREZEb2N1bWVudEV4dHJhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1AY2xh
c3MgUERGRG9jdW1lbnQ7Ci0KLU5TQXJyYXkgKmFsbFNjcmlwdHNJblBERkRvY3VtZW50KFBERkRv
Y3VtZW50ICopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZE
b2N1bWVudEV4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGRG9jdW1l
bnRFeHRyYXMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5MmVkZjcuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQREZEb2N1bWVudEV4dHJhcy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgIldlYlBERkRvY3VtZW50RXh0cmFzLmgi
Ci0KLSNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKLSNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4K
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPFBERktpdC9QREZEb2N1bWVudC5o
PgotI2ltcG9ydCA8b2JqYy9vYmpjLXJ1bnRpbWUuaD4KLQotI2lmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPT0gMTA1MAotQGludGVyZmFjZSBQREZEb2N1bWVudCAoSW50ZXJuYWwp
Ci0tIChDR1BERkRvY3VtZW50UmVmKWRvY3VtZW50UmVmOwotQGVuZAotI2VuZGlmCi0KLXN0YXRp
YyB2b2lkIGFwcGVuZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihDR1BERkRpY3Rpb25h
cnlSZWYgc3VidHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgdmFsdWVzKQotewotICAgIENH
UERGQXJyYXlSZWYgbmFtZXM7Ci0gICAgaWYgKENHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRy
ZWUsICJOYW1lcyIsICZuYW1lcykpIHsKLSAgICAgICAgc2l6ZV90IG5hbWVDb3VudCA9IENHUERG
QXJyYXlHZXRDb3VudChuYW1lcykgLyAyOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5hbWVDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDR1BERk9iamVjdFJlZiBvYmplY3Q7Ci0g
ICAgICAgICAgICBDR1BERkFycmF5R2V0T2JqZWN0KG5hbWVzLCAyICogaSArIDEsICZvYmplY3Qp
OwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBDR1BERkFycmF5UmVmIGtpZHM7Ci0gICAgaWYgKCFDR1BE
RkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiS2lkcyIsICZraWRzKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2l6ZV90IGtpZENvdW50ID0gQ0dQREZBcnJheUdldENvdW50KGtpZHMpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga2lkQ291bnQ7ICsraSkgewotICAgICAgICBDR1BE
RkRpY3Rpb25hcnlSZWYga2lkOwotICAgICAgICBpZiAoIUNHUERGQXJyYXlHZXREaWN0aW9uYXJ5
KGtpZHMsIGksICZraWQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGFwcGVuZFZh
bHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3RvcihraWQsIHZhbHVlcyk7Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZCBnZXRBbGxWYWx1ZXNJblBERk5hbWVUcmVlKENHUERGRGljdGlvbmFyeVJlZiB0
cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiBhbGxWYWx1ZXMpCi17Ci0gICAgYXBwZW5kVmFs
dWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKHRyZWUsIGFsbFZhbHVlcyk7Ci19Ci0KLU5TQXJy
YXkgKmFsbFNjcmlwdHNJblBERkRvY3VtZW50KFBERkRvY3VtZW50ICpkb2N1bWVudCkKLXsKLSAg
ICBOU011dGFibGVBcnJheSAqc2NyaXB0cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0gICAg
Q0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCA9IFtkb2N1bWVudCBkb2N1bWVudFJlZl07Ci0g
ICAgaWYgKCFwZGZEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIHNjcmlwdHM7Ci0KLSAgICBDR1BE
RkRpY3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRv
Y3VtZW50KTsKLSAgICBpZiAoIXBkZkNhdGFsb2cpCi0gICAgICAgIHJldHVybiBzY3JpcHRzOwot
Ci0gICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRy
ZWVzLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7Ci0gICAgaWYgKCFD
R1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0Rp
Y3Rpb25hcnkpKQotICAgICAgICByZXR1cm4gc2NyaXB0czsKLQotICAgIC8vIEdldCB0aGUgZG9j
dW1lbnQtbGV2ZWwgIkphdmFTY3JpcHQiIG5hbWUgdHJlZS4KLSAgICBDR1BERkRpY3Rpb25hcnlS
ZWYgamF2YVNjcmlwdE5hbWVUcmVlOwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlv
bmFyeShuYW1lc0RpY3Rpb25hcnksICJKYXZhU2NyaXB0IiwgJmphdmFTY3JpcHROYW1lVHJlZSkp
Ci0gICAgICAgIHJldHVybiBzY3JpcHRzOwotCi0gICAgLy8gVGhlIG5hbWVzIGFyZSBhcmJpdHJh
cnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4KLSAgICBWZWN0b3I8Q0dQ
REZPYmplY3RSZWY+IG9iamVjdHM7Ci0gICAgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShqYXZh
U2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOwotICAgIHNpemVfdCBvYmplY3RDb3VudCA9IG9iamVj
dHMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytp
KSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0QWN0aW9uOwotICAgICAg
ICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2FzdDxDR1BERk9iamVjdFJl
Zj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNjcmlwdEFj
dGlvbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBBIEphdmFTY3JpcHQg
YWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNjcmlwdCIuCi0gICAgICAg
IGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7Ci0gICAgICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0
TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAoYWN0aW9u
VHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNv
bnN0IFVJbnQ4KiBieXRlcyA9IDA7Ci0gICAgICAgIENGSW5kZXggbGVuZ3RoOwotICAgICAgICBD
R1BERlN0cmVhbVJlZiBzdHJlYW07Ci0gICAgICAgIENHUERGU3RyaW5nUmVmIHN0cmluZzsKLSAg
ICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKLSAgICAgICAgaWYgKENHUERGRGljdGlv
bmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyZWFtKSkgewotICAgICAg
ICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgICAgIGRhdGEuYWRvcHRDRihD
R1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOwotICAgICAgICAgICAgaWYgKCFk
YXRhKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnl0ZXMgPSBDRkRh
dGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOwotICAgICAgICAgICAgbGVuZ3RoID0gQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgaWYgKENHUERGRGljdGlvbmFyeUdl
dFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5nKSkgewotICAgICAgICAgICAg
Ynl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsKLSAgICAgICAgICAgIGxlbmd0
aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFieXRlcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIE5TU3RyaW5nRW5jb2Rp
bmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PSAweEZFICYmIGJ5dGVzWzFd
ID09IDB4RkYpID8gTlNVbmljb2RlU3RyaW5nRW5jb2RpbmcgOiBOU1VURjhTdHJpbmdFbmNvZGlu
ZzsKLSAgICAgICAgTlNTdHJpbmcgKnNjcmlwdCA9IFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOmxlbmd0aCBlbmNvZGluZzplbmNvZGluZ107Ci0gICAgICAgIGlm
ICghc2NyaXB0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgW3NjcmlwdHMgYWRk
T2JqZWN0OnNjcmlwdF07Ci0gICAgICAgIFtzY3JpcHQgcmVsZWFzZV07Ci0gICAgfQotCi0gICAg
cmV0dXJuIHNjcmlwdHM7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQ
REZSZXByZXNlbnRhdGlvbi5tbQppbmRleCBhMzY4NTMzLi5kYTZiZmYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlBERlJlcHJlc2VudGF0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUERGUmVwcmVzZW50YXRpb24ubW0KQEAgLTI5LDE2
ICsyOSwxOCBAQAogI2ltcG9ydCAiV2ViUERGUmVwcmVzZW50YXRpb24uaCIKIAogI2ltcG9ydCAi
V2ViRGF0YVNvdXJjZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkRlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoaW5nLmgiCiAjaW1wb3J0ICJXZWJGcmFtZS5oIgotI2ltcG9ydCAiV2ViSlNQREZEb2Mu
aCIKICNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJQREZEb2N1bWVu
dEV4dHJhcy5oIgogI2ltcG9ydCAiV2ViUERGVmlldy5oIgogI2ltcG9ydCAiV2ViVHlwZXNJbnRl
cm5hbC5oIgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0pTQ29udGV4dFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYu
aD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU1N0cmluZ1JlZkNGLmg+CisjaW1wb3J0IDxQREZLaXQvUERGS2l0Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1BERkRvY3VtZW50U2NyaXB0aW5nLmg+CiAKIEBpbXBsZW1lbnRhdGlv
biBXZWJQREZSZXByZXNlbnRhdGlvbgogCkBAIC0xMTAsNiArMTEyLDI4IEBACiAgICAgcmV0dXJu
IFdlYkNGQXV0b3JlbGVhc2UocmVzdWx0KTsKIH0KIAorc3RhdGljIHZvaWQganNQREZEb2NJbml0
aWFsaXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBXZWJE
YXRhU291cmNlICpkYXRhU291cmNlID0gKFdlYkRhdGFTb3VyY2UgKilKU09iamVjdEdldFByaXZh
dGUob2JqZWN0KTsKKyAgICBDRlJldGFpbihkYXRhU291cmNlKTsKK30KKworc3RhdGljIHZvaWQg
anNQREZEb2NGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgV2ViRGF0YVNvdXJj
ZSAqZGF0YVNvdXJjZSA9IChXZWJEYXRhU291cmNlICopSlNPYmplY3RHZXRQcml2YXRlKG9iamVj
dCk7CisgICAgQ0ZSZWxlYXNlKGRhdGFTb3VyY2UpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBq
c1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIFdlYkRhdGFTb3Vy
Y2UgKmRhdGFTb3VyY2UgPSAoV2ViRGF0YVNvdXJjZSAqKUpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KTsKKyAgICAKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tkYXRhU291cmNlIHdlYkZy
YW1lXSB3ZWJWaWV3XTsKKyAgICBDYWxsVUlEZWxlZ2F0ZSh3ZWJWaWV3LCBAc2VsZWN0b3Iod2Vi
VmlldzpwcmludEZyYW1lVmlldzopLCBbW2RhdGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmlld10p
OworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCiAtICh2
b2lkKWZpbmlzaGVkTG9hZGluZ1dpdGhEYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNv
dXJjZQogewogICAgIE5TRGF0YSAqZGF0YSA9IFtkYXRhU291cmNlIGRhdGFdOwpAQCAtMTI2LDE5
ICsxNTAsMjAgQEAKICAgICBQREZEb2N1bWVudCAqZG9jID0gW1tbW3NlbGYgY2xhc3NdIFBERkRv
Y3VtZW50Q2xhc3NdIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YV07CiAgICAgW3ZpZXcgc2V0UERG
RG9jdW1lbnQ6ZG9jXTsKIAotICAgIE5TQXJyYXkgKnNjcmlwdHMgPSBhbGxTY3JpcHRzSW5QREZE
b2N1bWVudChkb2MpOworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0
czsKKyAgICBXZWJDb3JlOjpQREZEb2N1bWVudFNjcmlwdGluZzo6Z2V0QWxsU2NyaXB0c0luUERG
RG9jdW1lbnQoW2RvYyBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOwogICAgIFtkb2MgcmVsZWFzZV07
CiAgICAgZG9jID0gbmlsOwogCi0gICAgTlNVSW50ZWdlciBzY3JpcHRDb3VudCA9IFtzY3JpcHRz
IGNvdW50XTsKKyAgICBzaXplX3Qgc2NyaXB0Q291bnQgPSBzY3JpcHRzLnNpemUoKTsKICAgICBp
ZiAoIXNjcmlwdENvdW50KQogICAgICAgICByZXR1cm47CiAKICAgICBKU0dsb2JhbENvbnRleHRS
ZWYgY3R4ID0gSlNHbG9iYWxDb250ZXh0Q3JlYXRlKDApOwotICAgIEpTT2JqZWN0UmVmIGpzUERG
RG9jID0gbWFrZUpTUERGRG9jKGN0eCwgZGF0YVNvdXJjZSk7CisgICAgSlNPYmplY3RSZWYganNQ
REZEb2MgPSBXZWJDb3JlOjpQREZEb2N1bWVudFNjcmlwdGluZzo6bWFrZUpTUERGRG9jKGN0eCwg
anNQREZEb2NJbml0aWFsaXplLCBqc1BERkRvY1ByaW50LCBqc1BERkRvY0ZpbmFsaXplLCBkYXRh
U291cmNlKTsKIAotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IHNjcmlwdENvdW50OyAr
K2kpIHsKLSAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcoKENGU3RyaW5nUmVmKVtzY3JpcHRzIG9iamVjdEF0SW5kZXg6aV0pOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1Jl
ZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsK
ICAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDAp
OwogICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzE2NjM1YS4uNjA5MWM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMyBAQAorMjAxMi0xMC0x
MyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBbd2sy
XSBJbXBsZW1lbnQgQnVpbHRJblBERktpdFZpZXcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFBERlBsdWdpbiwgd2hpY2ggdXNlcyBQREZLaXQgdG8g
ZGlzcGxheSBQREZzLCBpbnN0ZWFkIG9mIHVzaW5nIFBERktpdCBpbiB0aGUKKyAgICAgICAgVUlQ
cm9jZXNzIGZvciBmdWxsLXBhZ2UgUERGcy4gVGhpcyBuZXcgcGx1Z2luIHdpbGwgYWxzbyBiZSB1
c2VkIGZvciBpbmxpbmUgUERGcworICAgICAgICBpbiBwbGFjZSBvZiBTaW1wbGVQREZQbHVnaW4g
KG7DqWUgQnVpbHRJblBERlZpZXcpLgorCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvRmVhdHVy
ZURlZmluZXMueGNjb25maWc6IEFkZCBFTkFCTEVfUERGX1BMVUdJTi4KKworICAgICAgICBTdXBw
b3J0IHRocmVlIG5ldyBQbHVnaW4gbWV0aG9kczoKKyAgICAgICAgICAgIC0gaGFuZGxlRWRpdGlu
Z0NvbW1hbmQsIHdoaWNoIGhhbmRzIGVkaXRpbmcgY29tbWFuZHMgdG8gdGhlIFBsdWdpbgorICAg
ICAgICAgICAgLSBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCwgd2hpY2ggdmFsaWRhdGVzIGVkaXRp
bmcgY29tbWFuZHMgdmlhIHRoZSBQbHVnaW4KKyAgICAgICAgICAgIC0gaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3Rvciwgd2hpY2ggYXNrcyB0aGUgcGx1Z2luIHdoZXRoZXIgaXQgd2FudHMgdG8KKyAgICAg
ICAgICAgIG9wdCBpbnRvIGEgbW9kZSB3aGVyZSB0aGUgV2ViUGFnZSBkb2Vzbid0IHNjYWxlIGlu
IHRoZSBvcmRpbmFyeSBmYXNoaW9uLAorICAgICAgICAgICAgYnV0IGluc3RlYWQgcHJveGllcyB0
aGUgUGx1Z2luJ3Mgc2NhbGUgZmFjdG9yLCBzbyBmdWxsLXBhZ2UgcGx1Z2lucworICAgICAgICAg
ICAgY2FuIGhhbmRsZSBzY2FsZSBmYWN0b3IgY2hhbmdlcyBob3dldmVyIHRoZXkgbmVlZCB0by4K
KworICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFu
ZCk6IFByb3h5IGhhbmRsZUVkaXRpbmdDb21tYW5kIHRvIHRoZSBQbHVnaW4uCisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQpOiBQ
cm94eSBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCB0byB0aGUgUGx1Z2luLgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IpOiBQcm94
eSBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yIHRvIHRoZSBQbHVnaW4uCisgICAgICAgICogUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaDoKKyAgICAgICAgKFBsdWdpbkNvbnRyb2xs
ZXJQcm94eSk6IEFkZCBoYW5kbGVFZGl0aW5nQ29tbWFuZCwgaXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQsIGFuZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yLgorICAgICAgICAqIFBsdWdpblByb2Nlc3Mv
UGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluOiBBZGQgSGFuZGxlRWRpdGluZ0NvbW1h
bmQsIElzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCBhbmQgSGFuZGxlc1BhZ2VTY2FsZUZhY3Rvci4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQp
OiBOUEFQSSBwbHVnaW5zIHN1cHBvcnQgbm8gZWRpdGluZyBjb21tYW5kcyBieSBkZWZhdWx0Lgor
ICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQp
OiBOUEFQSSBwbHVnaW5zIGVuYWJsZSBubyBlZGl0aW5nIGNvbW1hbmRzIGJ5IGRlZmF1bHQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKTog
TlBBUEkgcGx1Z2lucyBkbyBub3QgaGFuZGxlIHBhZ2Ugc2NhbGUgZmFjdG9yIGNoYW5nZXMgdGhl
bXNlbHZlcyBieSBkZWZhdWx0LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbi5oOiBBZGQgaGFuZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkLCBhbmQgaGFuZGxlc1BhZ2VTY2FsZUZhY3Rvci4KKworICAgICAgICBBZGQg
UERGUGx1Z2luRW5hYmxlZCBwcmVmZXJlbmNlLiBJZiBpdCBpcyBub3QgZW5hYmxlZCwgb3IgdGhl
IHBsdWdpbiBpcworICAgICAgICBub3QgYnVpbHQsIGJlaGF2aW9yIHdpbGwgYmUgdGhlIHNhbWUg
YXMgYmVmb3JlICh0aGUgVUlQcm9jZXNzIFBERlZpZXcgd2lsbAorICAgICAgICBoYW5kbGUgZnVs
bC1wYWdlIFBERnMsIGFuZCBTaW1wbGVQREZQbHVnaW4gd2lsbCBoYW5kbGUgaW5saW5lIG9uZXMp
LgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaDogQWRkIFBERlBsdWdp
bkVuYWJsZWQgcHJlZmVyZW5jZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlcy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0UERGUGx1Z2luRW5hYmxlZCk6IFNl
dHRlciBmb3IgUERGUGx1Z2luRW5hYmxlZCBwcmVmZXJlbmNlLgorICAgICAgICAoV0tQcmVmZXJl
bmNlc0dldFBERlBsdWdpbkVuYWJsZWQpOiBHZXR0ZXIgZm9yIFBERlBsdWdpbkVuYWJsZWQgcHJl
ZmVyZW5jZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUu
aDogRXhwb3NlIFdLUHJlZmVyZW5jZXMoU2V0fEdldClQREZQbHVnaW5FbmFibGVkIGFzIGEgcHJp
dmF0ZSBwcmVmZXJlbmNlLgorCisgICAgICAgIE1vdmUgc3VwcG9ydCBmb3IgTUlNRSB0eXBlcyB3
aXRoIGN1c3RvbSByZXByZXNlbnRhdGlvbnMgb250byBXZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJv
Y2Vzcy4KKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8gdXNlIHByZWZlcmVuY2VzIHRvIGNvbnRy
b2wgdGhlIHVzZSBvZiBjdXN0b20gcmVwcmVzZW50YXRpb25zIChmb3IgZXhhbXBsZSwKKyAgICAg
ICAgaXQgYWxsb3dzIHVzIHRvIGhhdmUgYSBwcmVmZXJlbmNlIHRvIHRvZ2dsZSBiZXR3ZWVuIFVJ
UHJvY2VzcycgUERGVmlldyBhbmQgUERGUGx1Z2luKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKTogRG9uJ3QgcGFzcyBtaW1lVHlwZXNXaXRoQ3Vz
dG9tUmVwcmVzZW50YXRpb24KKyAgICAgICAgaW50byB0aGUgV2ViUHJvY2VzcywgYXMgd2UgY2Fu
IGNvbXB1dGUgaXQgbGF0ZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZSk6IFNhbWUsIG9uIHRoZSBkZWNvZGUgc2lkZS4KKyAgICAgICAgKiBT
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOiBSZW1vdmUgbWltZVR5cGVzV2l0
aEN1c3RvbVJlcHJlc2VudGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViQ29udGV4
dE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXpl
V2ViUHJvY2Vzcyk6IERvbid0IGFkZCBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzIHRvIG1pbWVU
eXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbiBoZXJlLCBhcyB3ZSdyZSBub3cgY29tcHV0aW5n
IGl0IG9uIFdlYlBhZ2UgaW5zdGVhZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKTogTW92
ZSB0byBXZWJQYWdlIGZyb20gV2ViUHJvY2VzcyBzbyB3ZSBjYW4gdXNlIFdlYlBhZ2UncyBuZXcg
bm90aW9uIG9mIG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZSk6
IE1vdmUgdG8gV2ViUGFnZSBmcm9tIFdlYlByb2Nlc3Mgc28gd2UgY2FuIHVzZSBXZWJQYWdlJ3Mg
bmV3IG5vdGlvbiBvZiBtaW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24uCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKTogUmV0dXJuIHRoZSBzZXQgb2Yg
TUlNRSB0eXBlcyB1c2VkIGZvciBQREYgYW5kIFBvc3RTY3JpcHQsIHdoaWNoIGFyZSBoYW5kbGVk
IHdpdGggUERGVmlldyBpZiBQREZQbHVnaW4gaXMgbm90IGF2YWlsYWJsZSBvciBlbmFibGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKTogRG9uJ3Qga2VlcCBtX21pbWVUeXBlc1dp
dGhDdXN0b21SZXByZXNlbnRhdGlvbnMgb24gV2ViUHJvY2VzcywgaXQncyBvd25lZCBieSBXZWJQ
YWdlIG5vdy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuaDogTW92ZSBjYW5QbHVn
aW5IYW5kbGVSZXNwb25zZSBhbmQgc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNw
b25zZSB0byBXZWJQYWdlLgorCisgICAgICAgIEFkZCBQREZMYXllckNvbnRyb2xsZXIgdG8gdGhl
IHNldCBvZiBjbGFzc2VzIHJldHVybmVkIGJ5IFBERktpdEltcG9ydHMuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL1BERktpdEltcG9ydHMuaDogQWRkIHBkZkxheWVyQ29udHJvbGxlckNsYXNzLgor
ICAgICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbToKKyAgICAgICAgKFdlYktpdDo6
cGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MpOiBGaW5kIGFuZCByZXR1cm4gdGhlIFBERkxheWVyQ29u
dHJvbGxlciBjbGFzcy4KKworICAgICAgICBBZGQgUERGUGx1Z2luLiBNdWNoIG9mIHRoaXMgY29k
ZSBpcyBkdXBsaWNhdGVkIGluIFNpbXBsZVBERlBsdWdpbiwgYnV0CisgICAgICAgIEkgZXhwZWN0
IHRoZSB0d28gcGx1Z2lucyB0byBkaXZlcmdlIGZ1cnRoZXIgYXMgdGltZSBnb2VzIG9uLCBzbyBJ
IGFtIG5vdAorICAgICAgICBpbmhlcml0aW5nIGZyb20gU2ltcGxlUERGUGx1Z2luLgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnMpOiBBZGQgUERGUGx1Z2luIHRvIHRoZSBz
ZXQgb2Ygc3VwcG9ydGVkIHBsdWdpbnMuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGQgUERGUGx1Z2luLCByZW5hbWUgQnVpbHRJblBERlZpZXcgdG8gU2lt
cGxlUERGUGx1Z2luLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
OiBBZGRlZC4KKworICAgICAgICBQREZQbHVnaW4gdXNlcyBsYXllcnMgZm9yIHNjcm9sbGJhcnMu
CisKKyAgICAgICAgKC1bV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBpbml0V2l0aFBERlBsdWdp
bjpXZWJLaXQ6Ol0pOiBJbml0aWFsaXplIG91ciBDQUxheWVyIHN1YmNsYXNzLAorICAgICAgICBz
dG9yaW5nIGl0cyBwYXJlbnQgUERGUGx1Z2luIHNvIGl0IGNhbiBkZWxlZ2F0ZSBkcmF3aW5nIHRo
ZXJlLgorICAgICAgICAoLVtXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFjdGlvbkZvcktleTpd
KTogRGlzYWJsZSBDb3JlQW5pbWF0aW9uIGltcGxpY2l0IGFjdGlvbnMuCisgICAgICAgICgtW1dL
UERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgZHJhd0luQ29udGV4dDpdKTogRGVsZWdhdGUgc2Nyb2xs
YmFyIGRyYXdpbmcgdG8gUERGUGx1Z2luLgorCisgICAgICAgIEltcGxlbWVudCB0aGUgUERGTGF5
ZXJDb250cm9sbGVyIGRlbGVnYXRlLCBldmVudHVhbGx5IGZvcndhcmRpbmcgY2FsbHMgYmFjayB0
byBQREZQbHVnaW4uCisKKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBp
bml0V2l0aFBERlBsdWdpbjpXZWJLaXQ6Ol0pOiBJbml0aWFsaXplIG91ciBkZWxlZ2F0ZSwKKyAg
ICAgICAgc3RvcmluZyBpdHMgcGFyZW50IFBERlBsdWdpbiBzbyBpdCBjYW4gZm9yd2FyZCBkZWxl
Z2F0ZSBjYWxscyB0aGVyZS4KKyAgICAgICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbjpdKTogVXBkYXRlIFBERlBsdWdpbidzIG5vdGlvbiBvZiB0
aGUKKyAgICAgICAgY3VycmVudCBzY3JvbGwgcG9zaXRpb24sIHdoZW4gUERGS2l0IGNoYW5nZXMg
dGhlIHNjcm9sbCBwb3NpdGlvbiBpdHNlbGYuCisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9s
bGVyRGVsZWdhdGUgd3JpdGVJdGVtc1RvUGFzdGVib2FyZDp3aXRoVHlwZXM6XSk6IFdyaXRlIHRo
ZSBnaXZlbgorICAgICAgICBhcnJheSBvZiBOU0RhdGEgb2JqZWN0cyB0byB0aGUgcGFzdGVib2Fy
ZCB3aXRoIHRoZSBnaXZlbiB0eXBlcy4KKworICAgICAgICBUaGUgZm9sbG93aW5nIFBERkxheWVy
Q29udHJvbGxlciBkZWxlZ2F0ZSBtZXRob2RzIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1
dHVyZS4KKworICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHNob3dEZWZp
bml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdFBvaW50Ol0pOgorICAgICAgICAoLVtXS1BERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIHBlcmZvcm1XZWJTZWFyY2g6XSk6CisgICAgICAgICgtW1dL
UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhQcmV2aWV3XSk6CisgICAgICAgICgt
W1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRvUERGXSk6CisKKyAgICAgICAgKFdl
YktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOiBTZXQgdXAgdGhlIHJlcXVpc2l0ZSBsYXllciBo
aWVyYXJjaHksIGFuZCBjcmVhdGUgYSBQREZMYXllckNvbnRyb2xsZXIgKGFuZCBpdHMgZGVsZWdh
dGUgcHJveHkpLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBsdWdpbkluZm8pOiBSZXBv
cnQgdGhhdCB3ZSBzdXBwb3J0IHRoZSBhcHBsaWNhdGlvbi9wZGYgTUlNRSB0eXBlLgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OnBsdWdpblZpZXcpOiBSZXR1cm4gb3VyIGFzc29jaWF0ZWQg
UGx1Z2luVmlldy4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjp1cGRhdGVTY3JvbGxiYXJz
KTogVXBkYXRlIHRoZSBzaXplIGFuZCBleGlzdGVuY2Ugb2Ygc2Nyb2xsYmFycy4KKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpjcmVhdGVTY3JvbGxiYXIpOiBDcmVhdGUgYSBzY3JvbGxiYXIg
YW5kIGhvc3RpbmcgbGF5ZXIsIGF0dGFjaGluZyBpdHMgbGF5ZXIKKyAgICAgICAgdG8gUERGUGx1
Z2luJ3MgY29udGFpbmVyIGxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRlc3Ry
b3lTY3JvbGxiYXIpOiBEZXN0cm95IGEgc2Nyb2xsYmFyLCBkZXRhY2hpbmcgYW5kIGRlc3Ryb3lp
bmcgaXRzIGhvc3RpbmcgbGF5ZXIgaW4gdGhlIHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6Ompz
UERGRG9jSW5pdGlhbGl6ZSk6IEVuc3VyZSB0aGF0IHdlIGtlZXAgdGhlIFBERlBsdWdpbiBhbGl2
ZSB3aGlsZSBydW5uaW5nIGl0cyBzY3JpcHRzLgorICAgICAgICAoV2ViS2l0Ojpqc1BERkRvY0Zp
bmFsaXplKToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpqc1BERkRvY1ByaW50KTogU2hv
dyB0aGUgcHJpbnQgZGlhbG9nIHdoZW4gaW52b2tlZCB2aWEgYSBzY3JpcHQgaW5zaWRlIGEgZG9j
dW1lbnQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKTog
Q2FsbGVkIHdoZW4gdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmc7IGhhbmQKKyAgICAgICAg
dGhlIGxvYWRlZCBkb2N1bWVudCB0byBQREZLaXQsIHVwZGF0ZSBhbGwgb2Ygb3VyIHN0YXRlIChj
YWNoZWQgZG9jdW1lbnQgc2l6ZSwgc2Nyb2xsYmFycywgZXRjLiksIGFuZCB0aGVuIGV4ZWN1dGUg
YW55IHNjcmlwdHMgaW4gdGhlIGRvY3VtZW50ICh0byBhbGxvdyBmb3IgYXV0b21hdGljIHByaW50
aW5nKS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6IERldGVy
bWluZSB0aGUgc2l6ZSBvZiB0aGUgUERGIGFuZCBpdHMgcGFnZXMuCisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6aW5pdGlhbGl6ZSk6IEF0dGVtcHQgdG8gbG9hZCB0aGUgZGVzaXJlZCBQREYs
IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpkZXN0cm95KTogVGVh
ciBkb3duIHRoZSBsYXllciBoaWVyYXJjaHkuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
cGFpbnQpOiBQREZQbHVnaW4gaXMgbGF5ZXItYmFzZWQsIHNvIHdlIHBhaW50IG5vdGhpbmcgaW50
byB0aGUgdGlsZXMuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9y
TGF5ZXJJbkNvbnRleHQpOiBTY3JvbGxiYXIgY29udHJvbHMgYXJlIGRyYXduIGludG8gbGF5ZXJz
LCBidXQgdGhlaXIgcGFpbnRpbmcgaXMgZGVsZWdhdGVkIGhlcmUgZnJvbSBXS1BERlBsdWdpblNj
cm9sbGJhckxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnVwZGF0ZUNvbnRyb2xU
aW50cyk6IFNjcm9sbGJhcnMgY2FuIGhhdmUgdGludHMsIHNvIGludmFsaWRhdGUKKyAgICAgICAg
dGhlbSB3aGVuIGNvbnRyb2wgdGludHMgY2hhbmdlLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnNuYXBzaG90KTogUGVyZm9ybSBhIHBhaW50IGludG8gYSBiaXRtYXAgY29udGV4dC4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwbHVnaW5MYXllcik6IFJldHVybiBQREZQbHVnaW4n
cyByb290IGxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmlzVHJhbnNwYXJlbnQp
OiBpc1RyYW5zcGFyZW50IGlzIG9ubHkgY2FsbGVkIGZvciBQbHVnaW5Qcm9jZXNzLWhvc3RlZAor
ICAgICAgICBwbHVnaW5zLCBzbyBpdCBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjYXNlOyBp
biBhbnkgY2FzZSwgUERGUGx1Z2luIGlzIG5vdCB0cmFuc3BhcmVudC4KKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjp3YW50c1doZWVsRXZlbnRzKTogUERGUGx1Z2luIHdhbnRzIHRvIHJlY2Vp
dmUgd2hlZWwgZXZlbnRzIHRvIGZvcndhcmQKKyAgICAgICAgdGhlbSB0byBQREZMYXllckNvbnRy
b2xsZXIgZm9yIHNjcm9sbGluZyB0aGUgZG9jdW1lbnQuCisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UpOiBUaGUgc2l6ZSBvciBzY2FsZSBvZiB0aGUgcGx1Z2lu
IGNoYW5nZWQ7IHVwZGF0ZQorICAgICAgICBQREZMYXllckNvbnRyb2xsZXIncyBub3Rpb24gb2Yg
dGhlIHNpemUgYW5kIHBhZ2Ugc2NhbGUsIGFuZCBpbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzLgor
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlRGF0YSk6IENvbmNh
dGVuYXRlIHJlY2VpdmVkIGRhdGEgb24gdG8gbV9kYXRhLgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OnN0cmVhbURpZEZpbmlzaExvYWRpbmcpOiBtX2RhdGEgaXMgY29tcGxldGUsIHdlIGNh
biB1c2UgaXQgdG8gY3JlYXRlIGEgUERGRG9jdW1lbnQgbm93LgorICAgICAgICAoV2ViS2l0OjpQ
REZQbHVnaW46OnN0cmVhbURpZEZhaWwpOiBDbGVhciBtX2RhdGEsIHNpbmNlIHdlIGNhbid0IGNv
bXBsZXRlIHRoZSBsb2FkLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1hbnVhbFN0cmVh
bURpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFudWFs
U3RyZWFtRGlkUmVjZWl2ZURhdGEpOiAgQ29uY2F0ZW5hdGUgcmVjZWl2ZWQgZGF0YSBvbiB0byBt
X2RhdGEuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFudWFsU3RyZWFtRGlkRmluaXNo
TG9hZGluZyk6IG1fZGF0YSBpcyBjb21wbGV0ZSwgd2UgY2FuIHVzZSBpdCB0byBjcmVhdGUgYSBQ
REZEb2N1bWVudCBub3cuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6bWFudWFsU3RyZWFt
RGlkRmFpbCk6IENsZWFyIG1fZGF0YSwgc2luY2Ugd2UgY2FuJ3QgY29tcGxldGUgdGhlIGxvYWQu
CisKKyAgICAgICAgTW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cyBhcmUgY29udmVydGVkIGJhY2sg
aW50byBOU0V2ZW50cywgYnV0IHdpdGgKKyAgICAgICAgbG9jYXRpb25JbldpbmRvdyBhY3R1YWxs
eSBpbiB0ZXJtcyBvZiB0aGUgUERGUGx1Z2luJ3MgbGF5ZXIsIG5vdAorICAgICAgICB0aGUgd2lu
ZG93IChzaW5jZSB0aGVyZSBpcyBubyB3aW5kb3cpLgorCisgICAgICAgIChXZWJLaXQ6Om1vZGlm
aWVyRmxhZ3NGcm9tV2ViRXZlbnQpOiBDb25zdHJ1Y3QgYW4gQXBwS2l0LXN0eWxlIG1vZGlmaWVy
IGJpdG1hc2sgZnJvbSBXZWJFdmVudCdzIG1vZGlmaWVyIGtleSBnZXR0ZXJzLgorICAgICAgICAo
V2ViS2l0OjpldmVudFR5cGVGcm9tV2ViRXZlbnQpOiBSZXR1cm4gdGhlIE5TRXZlbnRUeXBlIGVx
dWl2YWxlbnQgdG8gdGhlIGdpdmVuIFdlYkV2ZW50LiBPbmx5IHN1cHBvcnRzIGtleWJvYXJkIGFu
ZCBtb3VzZSBldmVudHMsIGFuZCBvbmx5IHRoZSBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b24u
CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudCk6IENvbnN0cnVj
dCBhIGN1c3RvbSBOU0V2ZW50IGZyb20gdGhlIGdpdmVuIFdlYk1vdXNlRXZlbnQgYW5kIGhhbmQg
aXQgdG8gUERGTGF5ZXJDb250cm9sbGVyLiBNb3VzZSBjb29yZGluYXRlcyBhcmUgaW4gdGVybXMg
b2YgbV9jb250ZW50TGF5ZXIncyBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
aGFuZGxlV2hlZWxFdmVudCk6IFdoZWVsIGV2ZW50cyBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5OyBz
Y3JvbGwgcG9zaXRpb24gY2hhbmdlcyBhcmUgbGF0ZXIgcGFzc2VkIG9mZiB0byBQREZMYXllckNv
bnRyb2xsZXIuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFbnRlckV2
ZW50KTogSW5mb3JtIFNjcm9sbGFibGVBcmVhIHRoYXQgdGhlIG1vdXNlIGVudGVyZWQgdGhlIGNv
bnRlbnQgYXJlYS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZl
RXZlbnQpOiBJbmZvcm0gU2Nyb2xsYWJsZUFyZWEgdGhhdCB0aGUgbW91c2UgbGVmdCB0aGUgY29u
dGVudCBhcmVhLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51
RXZlbnQpOiBDdXJyZW50bHksIHVzZSB0aGUgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51Lgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZlbnQpOiBDb25zdHJ1
Y3QgYSBjdXN0b20gTlNFdmVudCBmcm9tIHRoZSBnaXZlbiBXZWJLZXlib2FyZEV2ZW50IGFuZCBo
YW5kIGl0IHRvIFBERkxheWVyQ29udHJvbGxlci4gUERGTGF5ZXJDb250cm9sbGVyIGN1cnJlbnRs
eSBvbmx5IGhhbmRsZXMga2V5RG93biBldmVudHMuCisKKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZCk6IEhhbmRsZSBjb3B5IGFuZCBzZWxlY3QtYWxsIGNv
bW1hbmRzLCBhbmQgZm9yd2FyZCB0aGVtIHRvIFBERkxheWVyQ29udHJvbGxlci4KKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6IFRoZSAnY29weScg
Y29tbWFuZCBzaG91bGQgYmUgZW5hYmxlZCBpZiB0aGVyZSBpcworICAgICAgICB0aGUgdXNlciBo
YXMgc2VsZWN0ZWQgYSBwYXJ0IG9mIHRoZSBQREYuIFRoZSAnc2VsZWN0IGFsbCcgY29tbWFuZCBz
aG91bGQgYWx3YXlzIGJlIGVuYWJsZWQuCisKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpo
YW5kbGVTY3JvbGwpOiBTY3JvbGxpbmcgaXMgaGFuZGxlZCBieSBTY3JvbGxhYmxlQXJlYS4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpob3Jpem9udGFsU2Nyb2xsYmFyKTogUmV0dXJuIHRo
ZSBjdXJyZW50IGhvcml6b250YWwgc2Nyb2xsYmFyLCBpZiBhbnkuCisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6dmVydGljYWxTY3JvbGxiYXIpOiBSZXR1cm4gdGhlIGN1cnJlbnQgdmVydGlj
YWwgc2Nyb2xsYmFyLCBpZiBhbnkuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xs
Q29ybmVyUmVjdCk6IFJldHVybiB0aGUgZnJhbWUgb2YgdGhlIHNjcm9sbCBjb3JuZXIsIGlmIGFu
eS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KTogSW4gb3VyIGNhc2UsIHRoZSBib3VuZHMgb2YgdGhlIHNjcm9sbGFibGUgYXJlYSBhcmUgZXhh
Y3RseSB0aGUgYm91bmRzIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjpzZXRTY3JvbGxPZmZzZXQpOiBVcGRhdGUgYm90aCBQREZQbHVnaW4gYW5kIFBERkxheWVy
Q29udHJvbGxlcidzIG5vdGlvbgorICAgICAgICBvZiB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRp
b24uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsU2l6ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6aXNBY3RpdmUpOiBSZXR1cm4gd2hldGhlciBvciBub3QgdGhpcyBQ
REZQbHVnaW4gaXMgdGhlIGZvY3VzZWQgd2lkZ2V0LgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogSW52YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xs
YmFyIGxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxD
b3JuZXJSZWN0KTogSW52YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xsIGNvcm5lciBsYXllci4KKyAg
ICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppc1Njcm9sbENvcm5lclZpc2libGUpOiBEb24ndCBk
cmF3IHNjcm9sbCBjb3JuZXJzLiBUaGlzIG1heSBuZWVkIHRvIGJlIHJldmlzZWQuCisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24pOiBSZXR1cm4gdGhlIGN1cnJlbnQg
c2Nyb2xsIHBvc2l0aW9uLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Om1pbmltdW1TY3Jv
bGxQb3NpdGlvbik6IFJldHVybiB0aGUgbWluaW11bSBwb3NzaWJsZSBzY3JvbGwgcG9zaXRpb24g
Z2l2ZW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1
Z2luOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24pOiBSZXR1cm4gdGhlIG1heGltdW0gcG9zc2libGUg
c2Nyb2xsIHBvc2l0aW9uIGdpdmVuIHRoZSBjdXJyZW50IGRvY3VtZW50IHNpemUuCisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJsZUhlaWdodCk6IFJldHVybiB0aGUgaGVpZ2h0IG9m
IHRoZSBwbHVnaW4uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dmlzaWJsZVdpZHRoKTog
UmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgcGx1Z2luLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmNvbnRlbnRzU2l6ZSk6IFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVwcmVzZW50ZWQgUERG
IGF0IHRoZSBjdXJyZW50IHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUpOiBTY3JvbGxiYXJzIGNhbiBiZSBhY3RpdmUgYXMgbG9u
ZyBhcyB3ZSdyZSBub3QgaW4gdGhlIHBhZ2UgY2FjaGUuCisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKTogSW52YWxpZGF0ZSBzY3JvbGxiYXJzIGlmIHdl
IHN3aXRjaCB0by9mcm9tIG92ZXJsYXkgc2Nyb2xsYmFycy4KKyAgICAgICAgKFdlYktpdDo6UERG
UGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcpOiBDb252ZXJ0IHBv
aW50cyB0byBhbmQgZnJvbSB0aGUgc2Nyb2xsYmFyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcik6IENvbnZlcnQgcG9pbnRz
IHRvIGFuZCBmcm9tIHRoZSBzY3JvbGxiYXIuCisKKyAgICAgICAgUmVuYW1lIEJ1aWx0SW5QREZW
aWV3IHRvIFNpbXBsZVBERlBsdWdpbiwgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9tIFBERlBsdWdp
bgorICAgICAgICBhbmQgdG8gYmV0dGVyIGRlbm90ZSBpdHMgaW5oZXJpdGFuY2UgZnJvbSBQbHVn
aW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5o
OiBSZW5hbWVkIGZyb20gV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLm1tOiBSZW5h
bWVkIGZyb20gV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5tbS4KKyAgICAg
ICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQpOiBBZG9wdCBX
ZWJDb3JlOjpQREZEb2N1bWVudFNjcmlwdGluZyBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIHRoYXQg
Y29kZSBoZXJlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oOgorICAg
ICAgICAoUGx1Z2luKTogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5k
RW5hYmxlZCwgYW5kIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgICogV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJveHk6
OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogUHJveHkgaGFuZGxlRWRpdGluZ0NvbW1hbmQgdG8gdGhl
IFBsdWdpblByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5Ojppc0VkaXRpbmdD
b21tYW5kRW5hYmxlZCk6IFByb3h5IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkCisgICAgICAgIHRv
IHRoZSBQbHVnaW5Qcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm94eTo6aGFuZGxl
c1BhZ2VTY2FsZUZhY3Rvcik6IFByb3h5IGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IKKyAgICAgICAg
dG8gdGhlIFBsdWdpblByb2Nlc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb3h5Lmg6IEFkZCBoYW5kbGVFZGl0aW5nQ29tbWFuZCwgaXNFZGl0aW5nQ29tbWFuZEVuYWJs
ZWQsCisgICAgICAgIGFuZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmll
dzo6c2V0UGFnZVNjYWxlRmFjdG9yKTogU2V0IHRoZSBwbHVnaW4ncyBjdXJyZW50IHBhZ2Ugc2Nh
bGUgZmFjdG9yLiBBbHNvLAorICAgICAgICB1cGRhdGUgV2ViUGFnZVByb3h5J3Mgbm90aW9uIG9m
IHRoZSBjdXJyZW50IHBhZ2VTY2FsZUZhY3RvciB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAgICAg
ICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwYWdlU2NhbGVGYWN0b3IpOiBSZXR1cm4gdGhlIHBsdWdp
bidzIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZp
ZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogUHJveHkgaGFuZGxlRWRpdGluZ0NvbW1hbmQgdG8g
dGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQpOiBQcm94eSBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCB0byB0aGUgcGx1Z2luLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgIChQbHVn
aW5WaWV3KTogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5kRW5hYmxl
ZCwKKyAgICAgICAgc2V0UGFnZVNjYWxlRmFjdG9yL3BhZ2VTY2FsZUZhY3RvciwgYW5kIGhhbmRs
ZXNQYWdlU2NhbGVGYWN0b3IuIEFkZCBtX3BhZ2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luVmlldzo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcik6IFByb3h5IGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IgdG8gdGhlIHBsdWdpbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUpOiBEb24ndCB1cGRhdGUgV2ViUGFnZVBy
b3h5J3Mgbm90aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3IgaWYgaXQgc2hvdWxkIGJlIHRoZSBkZWZh
dWx0LgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRv
Q29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKTogTWFrZSB1c2Ugb2Ygc2hvdWxkVXNlQ3VzdG9tUmVw
cmVzZW50YXRpb25Gb3JSZXNwb25zZSBvbiBXZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJvY2Vzcy4K
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1p
dHRlZEZvck5ld1BhZ2UpOiBNYWtlIHVzZSBvZiBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlv
bkZvclJlc3BvbnNlIG9uIFdlYlBhZ2UgaW5zdGVhZCBvZiBXZWJQcm9jZXNzLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6Y3JlYXRlUGx1Z2luKTogQ3JlYXRlIGEgUERGUGx1Z2luIGlmIGFwcHJvcHJpYXRlIChpZiBp
dCBpcyBidWlsdCBhbmQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCkuCisgICAgICAgIChXZWJLaXQ6
OnBsdWdpblZpZXdGb3JGcmFtZSk6IFJldHVybiB0aGUgUGx1Z2luVmlldyBmb3IgdGhlIGdpdmVu
IGZyYW1lIGlmIGl0cyBkb2N1bWVudCBpcyBhIFBsdWdpbkRvY3VtZW50LgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1hbmQpOiBBdHRlbXB0IHRvIGV4ZWN1dGUg
ZWRpdGluZyBjb21tYW5kcyBvbiB0aGUKKyAgICAgICAgY3VycmVudGx5IGZvY3VzZWQgKG9yIG1h
aW4tZnJhbWUpIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQpOiBWYWxpZGF0ZSBlZGl0aW5nIGNvbW1hbmRzIGFnYWluc3QgdGhlCisgICAg
ICAgIGN1cnJlbnRseSBmb2N1c2VkIChvciBtYWluLWZyYW1lKSBwbHVnaW4uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnNjYWxlUGFnZSk6IElmIHRoZSBwbHVnaW4gcmVwb3J0cyB0aGF0IGl0
IGhhbmRsZXMgcGFnZSBzY2FsZSBmYWN0b3IKKyAgICAgICAgaXRzZWxmLCBoYW5kIGl0IHRoZSBu
ZXcgc2NhbGUgaW5zdGVhZCBvZiBXZWJDb3JlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
YWdlU2NhbGVGYWN0b3IpOiBJZiB0aGUgcGx1Z2luIHJlcG9ydHMgdGhhdCBpdCBoYW5kbGVzIHBh
Z2Ugc2NhbGUKKyAgICAgICAgZmFjdG9yIGl0c2VsZiwgcmV0dXJuIGl0cyBub3Rpb24gb2YgdGhl
IGN1cnJlbnQgc2NhbGUgaW5zdGVhZCBvZiBXZWJDb3JlJ3MuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnZhbGlkYXRlQ29tbWFuZCk6IFZhbGlkYXRlIGVkaXRpbmcgY29tbWFuZHMgYWdhaW5z
dCB0aGUKKyAgICAgICAgY3VycmVudGx5IGZvY3VzZWQgKG9yIG1haW4tZnJhbWUpIHBsdWdpbi4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOiBVcGRhdGUgbV9w
ZGZQbHVnaW5FbmFibGVkIGdpdmVuIHRoZSByZWxldmFudCBXZWJQcmVmZXJlbmNlLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OnBkZlBsdWdpbkVuYWJsZWQpOiBSZXR1cm4gd2hldGhlciBvciBub3QgUERGUGx1Z2luIHNo
b3VsZCBiZSB1c2VkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRQREZQbHVnaW5FbmFi
bGVkKTogU2V0IHdoZXRoZXIgb3Igbm90IFBERlBsdWdpbiBzaG91bGQgYmUgdXNlZC4KKworCiAy
MDEyLTEwLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgU3RvcCB1c2luZyBkZXByZWNhdGVkU2VuZCBmb3IgV2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VU
b0luamVjdGVkQnVuZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25z
L0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGNlNDFkMzAuLjNmNDBjNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCkBAIC0xMTYsNiArMTE2LDExIEBAIEVOQUJMRV9OT1RJRklDQVRJT05TX21hY29zeF8xMDcw
ID0gOwogRU5BQkxFX05PVElGSUNBVElPTlNfbWFjb3N4XzEwODAgPSBFTkFCTEVfTk9USUZJQ0FU
SU9OUzsKIEVOQUJMRV9OT1RJRklDQVRJT05TX21hY29zeF8xMDkwID0gRU5BQkxFX05PVElGSUNB
VElPTlM7CiBFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSA9IDsKK0VOQUJMRV9QREZLSVRfUExV
R0lOID0gJChFTkFCTEVfUERGS0lUX1BMVUdJTl8kKFJFQUxfUExBVEZPUk1fTkFNRSkpOworRU5B
QkxFX1BERktJVF9QTFVHSU5fbWFjb3N4ID0gJChFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hf
JChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpOworRU5BQkxFX1BERktJVF9QTFVHSU5f
bWFjb3N4XzEwNzAgPSA7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA4MCA9IDsKK0VO
QUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8xMDkwID0gRU5BQkxFX1BERktJVF9QTFVHSU47CiBF
TkFCTEVfUFJPR1JFU1NfRUxFTUVOVCA9IEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UOwogRU5BQkxF
X1FVT1RBID0gOwogRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FID0gRU5BQkxFX1JFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FOwpAQCAtMTQzLDQgKzE0OCw0IEBAIEVOQUJMRV9XSURHRVRfUkVH
SU9OID0gOwogRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YU0xUID0g
RU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykg
JChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJKSAk
KEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQX05F
WFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VYQ0xV
U0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMpICQo
RU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9OKSAk
KEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQoRU5B
QkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJMRV9D
U1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChFTkFCTEVfQ1VT
VE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFCTEVf
REFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFCTEVf
REVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0RJ
QUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9GSUxFX1NZ
U1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5BQkxF
X0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9ET01f
VElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9JQ09O
REFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9EQVRB
QkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SKSAk
KEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUpICQo
RU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9NT05U
SCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUspICQo
RU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9SX1BS
RUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lfVkVORE9SX1BS
RUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZFVENI
KSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9NRURJ
QV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VMRU1F
TlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFUSU9O
X09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxFX05P
VElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BST0dS
RVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVO
QUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlM
RV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAk
KEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVY
VF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFC
TEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQo
RU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAk
KEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JL
RVJTKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRF
UklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05f
QVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVf
Q1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NT
X0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRF
UlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFU
SU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMp
ICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVO
QUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChFTkFC
TEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChF
TkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChF
TkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5B
QkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9G
SUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQo
RU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFH
RV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJM
RV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhF
RF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NP
TE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJ
TUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQ
RV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dF
RUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVO
RE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lfVkVO
RE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BS
RUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJM
RV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVS
X0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01V
VEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5B
QkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxF
X1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RB
KSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BF
RUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFC
TEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChF
TkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxF
X1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5B
QkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9W
SURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJf
QVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJM
RV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcAppbmRleCAzMWE1ZDYxLi4xN2MxNmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCkBAIC01MjEsNiArNTIx
LDIxIEBAIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50KGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkCiAgICAgaGFuZGxlZCA9IG1fcGx1Z2luLT5o
YW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOwogfQogCit2b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5kbGVk
ID0gbV9wbHVnaW4tPmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7
Cit9CisgICAgCit2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgZW5hYmxlZCkKK3sKKyAgICBl
bmFibGVkID0gbV9wbHVnaW4tPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsK
K30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKGJvb2wmIGVuYWJsZWQpCit7CisgICAgZW5hYmxlZCA9IG1fcGx1Z2luLT5oYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWludEVu
dGlyZVBsdWdpbigpCiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaApp
bmRleCBiNGE0MDY3Li4xOWVlMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBwcml2
YXRlOgogICAgIHZvaWQgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
LCBib29sJiBoYW5kbGVkKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2FyZEV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAgdm9p
ZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKGJvb2wmIGVuYWJsZWQpOwogICAgIHZvaWQgcGFpbnRF
bnRpcmVQbHVnaW4oKTsKICAgICB2b2lkIHNuYXBzaG90KFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
JiBiYWNraW5nU3RvcmVIYW5kbGUpOwogICAgIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxl
clByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGQ3YzJkMDIuLjA2NzFhMjNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5tZXNzYWdlcy5pbgpAQCAtNzMsNiArNzMsMTUgQEAgbWVzc2FnZXMgLT4gUGx1Z2luQ29u
dHJvbGxlclByb3h5IHsKIAogICAgICMgU2VudCB3aGVuIGEga2V5Ym9hcmQgc2hvdWxkIGJlIHBy
b2Nlc3NlZC4KICAgICBIYW5kbGVLZXlib2FyZEV2ZW50KFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVu
dCBrZXlib2FyZEV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQorICAgIAorICAgICMgU2VudCB3aGVu
IGFuIGVkaXRpbmcgY29tbWFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLgorICAgIEhhbmRsZUVkaXRp
bmdDb21tYW5kKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lLCBXVEY6OlN0cmluZyBhcmd1bWVudCkg
LT4gKGJvb2wgaGFuZGxlZCk7CisgICAgCisgICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBw
bHVnaW4gd2FudHMgdG8gZW5hYmxlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgICAgSXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQoV1RGOjpTdHJpbmcgY29tbWFuZE5hbWUpIC0+IChib29sIGVu
YWJsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdhbnRz
IHRvIGhhbmRsZSBwYWdlIHNjYWxlIGZhY3RvciBpdHNlbGYuCisgICAgSGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpIC0+IChib29sIGVuYWJsZWQpOwogCiAgICAgIyBTZW50IHdoZW4gdGhlIHBsdWct
aW4gZm9jdXMgY2hhbmdlcy4KICAgICBTZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IDFlM2NhNjMuLjE4NTg5
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaApAQCAt
MTM3LDYgKzEzNyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIG1hY3JvKFNjcmVlbkZvbnRT
dWJzdGl0dXRpb25FbmFibGVkLCBzY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCwgQm9vbCwg
Ym9vbCwgREVGQVVMVF9TQ1JFRU5fRk9OVF9TVUJTVElUVVRJT05fRU5BQkxFRCkgXAogICAgIG1h
Y3JvKENvb2tpZUVuYWJsZWQsIGNvb2tpZUVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUpIFwKICAg
ICBtYWNybyhQbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkLCBwbHVnSW5TbmFwc2hvdHRpbmdFbmFi
bGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAorICAgIG1hY3JvKFBERlBsdWdpbkVuYWJsZWQsIHBk
ZlBsdWdpbkVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgXAogCiAjZGVmaW5lIEZP
Ul9FQUNIX1dFQktJVF9ET1VCTEVfUFJFRkVSRU5DRShtYWNybykgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4
IDgwMDMwYWMuLjAxMjM0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdm9pZCBX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb24KICAgICBlbmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc05vQWNjZXNzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRB
c0Rpc3BsYXlJc29sYXRlZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNDT1JTRW5hYmxlZCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVUeXBlc1dpdGhDdXN0
b21SZXByZXNlbnRhdGlvbik7CiAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShjYWNoZU1vZGVsKTsK
ICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpOwogICAgIGVuY29k
ZXItPmVuY29kZShzaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKTsKQEAgLTE0Nyw4
ICsxNDYsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzQ09SU0VuYWJsZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUocGFyYW1ldGVycy5taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24pKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHBhcmFt
ZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFRyYWNrVmlzaXRlZExpbmtzKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmlu
ZGV4IDBkNTQzZmEuLmY5NTQ4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNjksOSArNjksNiBAQCBzdHJ1Y3Qg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZDsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxT
Y2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQ7CiAKLSAgICAvLyBNSU1FIHR5cGVzIGZvciB3
aGljaCB0aGUgVUkgcHJvY2VzcyB3aWxsIGhhbmRsZSBzaG93aW5nIHRoZSBkYXRhLgotICAgIFZl
Y3RvcjxTdHJpbmc+IG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbjsKLQogICAgIENh
Y2hlTW9kZWwgY2FjaGVNb2RlbDsKICAgICBib29sIHNob3VsZFRyYWNrVmlzaXRlZExpbmtzOwog
CkBAIC0xMTMsNiArMTEwLDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMg
ewogCiAgICAgYm9vbCBzaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247CiAgICAgYm9v
bCBzaG91bGRFbmFibGVLZXJuaW5nQW5kTGlnYXR1cmVzQnlEZWZhdWx0OworCiAjZWxpZiBQTEFU
Rk9STShXSU4pCiAgICAgU3RyaW5nIGNmVVJMQ2FjaGVQYXRoOwogICAgIHVpbnQ2NF90IGNmVVJM
Q2FjaGVEaXNrQ2FwYWNpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0
cy5oCmluZGV4IDQ0YzM3NWMuLmM5YTFlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UERGS2l0SW1wb3J0cy5oCkBAIC0zMyw2ICszMywxMCBAQCBDbGFzcyBjbGFzc0Zyb21QREZLaXQo
TlNTdHJpbmcgKmNsYXNzTmFtZSk7CiBDbGFzcyBwZGZBbm5vdGF0aW9uTGlua0NsYXNzKCk7CiBD
bGFzcyBwZGZEb2N1bWVudENsYXNzKCk7CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKK0Ns
YXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNzKCk7CisjZW5kaWYKKwogfQogCiAjZW5kaWYgLy8g
UERGS2l0SW1wb3J0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BE
RktpdEltcG9ydHMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9ydHMu
bW0KaW5kZXggNjIzNGE4My4uYmNjZmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9QREZLaXRJbXBvcnRzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UERGS2l0SW1wb3J0cy5tbQpAQCAtNTQsNSArNTQsMTQgQEAgQ2xhc3MgcGRmRG9jdW1lbnRDbGFz
cygpCiAgICAgQVNTRVJUKHBkZkRvY3VtZW50Q2xhc3MpOwogICAgIHJldHVybiBwZGZEb2N1bWVu
dENsYXNzOwogfQorICAgIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorQ2xhc3MgcGRmTGF5
ZXJDb250cm9sbGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBwZGZMYXllckNvbnRyb2xs
ZXJDbGFzcyA9IGNsYXNzRnJvbVBERktpdChAIlBERkxheWVyQ29udHJvbGxlciIpOworICAgIEFT
U0VSVChwZGZMYXllckNvbnRyb2xsZXJDbGFzcyk7CisgICAgcmV0dXJuIHBkZkxheWVyQ29udHJv
bGxlckNsYXNzOworfQorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCBlY2NlMjA1Li41MzJkODJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBAIC05
MzMsMyArOTMzLDEzIEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBsdWdJblNuYXBzaG90dGluZ0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKICAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+cGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpOwogfQorCit2
b2lkIFdLUHJlZmVyZW5jZXNTZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRQREZQbHVnaW5FbmFibGVkKGVuYWJsZWQpOworfQorCitib29sIFdLUHJlZmVyZW5jZXNH
ZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCit7Cisg
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBkZlBsdWdpbkVuYWJsZWQoKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQ
cml2YXRlLmgKaW5kZXggYzAyNjExYy4uYWY1ZjczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTIyMyw2ICsy
MjMsMTAgQEAgV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNjcmVlbkZvbnRTdWJzdGl0
dXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHIKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVy
ZW5jZXNTZXRDb29raWVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wg
ZW5hYmxlZCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0Q29va2llRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2UKK1dL
X0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgZW5hYmxlZCk7CitXS19FWFBPUlQgYm9vbCBXS1ByZWZl
cmVuY2VzR2V0UERGUGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKTsK
KwogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1Jlc2V0VGVzdFJ1bm5lck92ZXJyaWRlcyhX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IDJlMGM5
NGYuLmVmNzQ2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCkBAIC00Niw3ICs0NiwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisjaW5j
bHVkZSAiU2ltcGxlUERGUGx1Z2luLmgiCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5j
bHVkZSAiUERGUGx1Z2luLmgiCisjZW5kaWYKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTMwNSw4ICszMDgsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmREaWRH
ZXRQbHVnaW5zKHVpbnQ2NF90IHJlcXVlc3RJRCwgUGFzc093blB0cjxWZWN0b3I8UGwKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLy8gQWRkIGJ1aWx0LWluIFBERiBsYXN0LCBzbyB0aGF0IGl0J3Mg
bm90IHVzZWQgd2hlbiBhIHJlYWwgcGx1Zy1pbiBpcyBpbnN0YWxsZWQuCiAgICAgLy8gTk9URTog
VGhpcyBoYXMgdG8gYmUgZG9uZSBvbiB0aGUgbWFpbiB0aHJlYWQgYXMgaXQgY2FsbHMgbG9jYWxp
emVkU3RyaW5nKCkuCi0gICAgaWYgKCFtX2NvbnRleHQtPm9taXRQREZTdXBwb3J0KCkpCi0gICAg
ICAgIHBsdWdpbnMtPmFwcGVuZChCdWlsdEluUERGVmlldzo6cGx1Z2luSW5mbygpKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkgeworI2lmIEVOQUJMRShQREZLSVRfUExV
R0lOKQorICAgICAgICBwbHVnaW5zLT5hcHBlbmQoUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkpOwor
I2VuZGlmCisgICAgICAgIHBsdWdpbnMtPmFwcGVuZChTaW1wbGVQREZQbHVnaW46OnBsdWdpbklu
Zm8oKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpE
aWRHZXRQbHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5ODFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCkBAIC03
NywxMiArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nl
c3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFtZXRlcnMu
cHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21pdFBERlN1
cHBvcnQoKSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBV
SSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJpbmcsIENh
c2VGb2xkaW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7Ci0g
ICAgICAgIHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLmFwcGVu
ZFJhbmdlKG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0KICAgICBw
YXJhbWV0ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZv
XSBwcm9jZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYWNoZVBh
dGgoQWRvcHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwYjBi
Y2YuLjZlNmU5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUyOTRGMDAx
MzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4NSAv
KiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURGMTE2MUJG
OUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYxNjFCRjlG
MTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
IAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1REYw
MTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87IH07CisJ
CTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDg3MEQwRTE2MjJCN0Y5MDAwQTNGMjAg
LyogUERGUGx1Z2luLm1tICovOyB9OwogCQkzMTA5OTk3MzE0NkM3NUEyMDAyOURFQjkgLyogV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25D
bGllbnQuY3BwICovOyB9OwogCQkzMTA5OTlDNzE0NkM5RTNEMDAyOURFQjkgLyogV2ViTm90aWZp
Y2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50Lmgg
Ki87IH07CiAJCTMxMkMwQzRBMTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3Zp
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJD
MEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MzQsNyArOTM1LDcg
QEAKIAkJRTE5NTgyRDYxNTNDQzA1NDAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk1ODJENDE1M0NDMDUz
MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLzsgfTsKIAkJRTE5NjdFMzYxNTBBQjVENTAw
QzczMTY5IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdFMzUxNTBBQjVENTAwQzcz
MTY5IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE5NjdF
MzgxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBD
NzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07Ci0JCUUxOTk4NzVFMTQyQzA0
NTQwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdElu
UERGVmlldy5tbSAqLzsgfTsKKwkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIFNpbXBsZVBE
RlBsdWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4ubW0gKi87IH07CiAJ
CUUxQTMxNzMyMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUEzMTczMTEzNENFQTZDMDA3
QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oICovOyB9OwogCQlFMUEzMTczNTEzNENFQTgwMDA3
QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVk
U3RyaW5nLm1tICovOyB9OwogCQlFMUFFQTIyRjE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5
Ym9hcmRBY2Nlc3NXYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUFFQTIyRDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nl
c3NXYXRjaGVyLmggKi87IH07CkBAIC0xMzMzLDYgKzEzMzQsOCBAQAogCQkyOUQ1NURFRTE2MUJG
ODc4MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUGFn
ZUdyb3VwUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5
RDU1REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlR3JvdXBQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5
RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ4NzBEMEQxNjIyQjdGOTAwMEEzRjIw
IC8qIFBERlBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQREZQbHVn
aW4uaDsgcGF0aCA9IFBERi9QREZQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBsdWdpbi5tbTsgcGF0aCA9IFBERi9QREZQ
bHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5OTY4MTQ2QzcxRjUw
MDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTm90
aWZpY2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5OTcx
MTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8qIFdL
Tm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjA2Niw4ICsyMDY5LDggQEAKIAkJRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktpdElt
cG9ydHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQREZLaXRJ
bXBvcnRzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNTE1MEFCNUQ1
MDBDNzMxNjkgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBs
ZS5XZWJQcm9jZXNzLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJQcm9j
ZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTk5ODc1QTE0MkJGOUI4MDBC
QjJERTcgLyogQnVpbHRJblBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQnVpbHRJblBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVpbHRJ
blBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBCdWls
dEluUERGVmlldy5tbTsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIFNpbXBsZVBERlBs
dWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaW1wbGVQREZQbHVnaW4u
aDsgcGF0aCA9IFBERi9TaW1wbGVQREZQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNpbXBsZVBERlBsdWdpbi5tbTsg
cGF0aCA9IFBERi9TaW1wbGVQREZQbHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0
ZWRTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdHRy
aWJ1dGVkU3RyaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFFQTIyRDE0
Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg5Nyw4ICszOTAwLDEwIEBACiAJCUUxOTk4
NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERG
Vmlldy5tbSAqLywKLQkJCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyogQnVpbHRJblBERlZp
ZXcuaCAqLywKKwkJCQkyRDg3MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLmggKi8s
CisJCQkJMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSAqLywKKwkJCQlF
MTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLm1tICovLAorCQkJCUUx
OTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4uaCAqLywKIAkJCSk7CiAJ
CQluYW1lID0gUERGOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ4MTIsNiArNDgx
Nyw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJ
CQkJNUQ1MTg0NTUxM0JDRjlDQzAwQzdGRjRBIC8qIEFQSUNsaWVudFRyYWl0cy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkyRDg3MEQxMDE2MjM0RkZFMDAwQTNGMjAgLyogUERGUGx1Z2luLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVjdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNENjEwNTEzQTdGMDNBMDBGOTVENEUgLyogQXJndW1l
bnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjBDNEIxMkIxNjMzNDAwOEU0OUUy
IC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00ODI4LDcgKzQ4MzQs
NyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9y
ZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzQxQUM4MTI2M0M4ODMwMDA1NEU5NCAvKiBC
aW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE5OTg3NUUxNDJDMDQ1NDAw
QkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE5OTg3NUUx
NDJDMDQ1NDAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQTJFNTFFMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTJEOTU3MDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBNkY5RkI3MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZU1h
Yy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCmluZGV4IGUyOGM3
OGQuLjVhZjA3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcApAQCAtOTEzLDYgKzkxMywy
MSBAQCBib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktl
eWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCiAgICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxlS2V5
Ym9hcmRFdmVudChrZXlib2FyZEV2ZW50KTsKIH0KIAorYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFu
ZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5n
JiBhcmd1bWVudCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTmV0c2NhcGVQbHVn
aW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFuZGxl
c1BhZ2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5ldHNj
YXBlUGx1Z2luOjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQogewogICAgIEFTU0VSVChtX2lzU3Rh
cnRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0
c2NhcGUvTmV0c2NhcGVQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCmluZGV4IDYxZTJiYjcuLjI5OTUzZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2Fw
ZS9OZXRzY2FwZVBsdWdpbi5oCkBAIC0yMDMsNiArMjAzLDEyIEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwog
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudCk7CisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKGNvbnN0IFN0cmluZyYpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNj
YWxlRmFjdG9yKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBP
YmplY3QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWM4ODI5ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQnVpbHRJblBERlZpZXdfaAot
I2RlZmluZSBCdWlsdEluUERGVmlld19oCi0KLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKLXR5
cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwotdHlwZWRlZiBjb25zdCBz
dHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIHN0cnVjdCBQbHVnaW5JbmZvOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
UGx1Z2luVmlldzsKLWNsYXNzIFdlYkZyYW1lOwotCi1jbGFzcyBCdWlsdEluUERGVmlldyA6IHB1
YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgewotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1aWx0SW5QREZWaWV3PiBjcmVhdGUoV2ViRnJhbWUqKTsK
LSAgICB+QnVpbHRJblBERlZpZXcoKTsKLQotICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5JbmZv
IHBsdWdpbkluZm8oKTsKLQotICAgIC8vIEluLXByb2Nlc3MgUERGVmlld3MgZG9uJ3Qgc3VwcG9y
dCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBib29sIGlzQmVpbmdB
c3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBCdWlsdEluUERGVmlldyhXZWJGcmFtZSopOwotCi0gICAgLy8g
UmVndWxhciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNj
cm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5n
LgotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKLSAgICBjb25zdCBQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6
U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7Ci0g
ICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVNpemVzKCk7
Ci0gICAgdm9pZCBwYWludEJhY2tncm91bmQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHBhaW50Q29udGVudChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJl
Y3QpOwotICAgIHZvaWQgcGFpbnRDb250cm9scyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotCi0gICAgLy8gUGx1Zy1pbiBtZXRo
b2RzCi0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOwotICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2lu
ZG93Q29vcmRpbmF0ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gc25hcHNob3QoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCBQbGF0
Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOwotI2VuZGlmCi0gICAgdmlydHVhbCBib29sIGlzVHJh
bnNwYXJlbnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3Qg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOwotICAgIHZpcnR1YWwgdm9pZCBm
cmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQpOwot
ICAgIHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVzdElE
LCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2Vp
dmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9u
c2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2
ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1J
RCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQsIGJv
b2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVjZWl2
ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2Vz
dGVkRmlsZU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVh
bFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFt
RGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCk7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVl
bEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91
c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmly
dHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKLSAgICB2aXJ0dWFsIE5QT2JqZWN0KiBw
bHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVh
bCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93
QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJ
blNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldp
bmRvd0Nvb3JkaW5hdGVzKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNoYW5n
ZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZs
b2F0KTsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0
IFN0cmluZyYgdGV4dElucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9k
ZShMYXllckhvc3RpbmdNb2RlKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lk
IHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHJp
dmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGb3Jt
VmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwo
V2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKLQotICAg
IHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQotCi0gICAgLy8gU2Nyb2xs
YWJsZUFyZWEgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3Jl
OjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzY3Jv
bGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIu
Z2V0KCk7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9
Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3JvbGxB
bmltYXRvck1hYyB3aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcgZm9y
IGEgZ29vZCB0aW1lIHRvIGFuaW1hdGUuCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhclN0eWxl
Q2hhbmdlZChpbnQgbmV3U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJSSURFOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhlIG90aGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zOyB0aGlzIG9u
ZSBpcyBlbm91Z2ggdG8gZ2V0IHNjcm9sbGJhciBoaXQgdGVzdGluZyB3b3JraW5nLgotICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBKU09iamVjdFJlZiBtYWtlSlNQREZE
b2MoSlNDb250ZXh0UmVmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BsdWdpblNpemU7
Ci0KLSAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOwotCi0gICAgU3RyaW5nIG1fc3VnZ2Vz
dGVkRmlsZW5hbWU7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1ZmZl
cjsKLQotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKLSAgICBWZWN0
b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBt
X3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KLQotICAgIFJl
ZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgV2ViRnJh
bWUqIG1fZnJhbWU7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBCdWlsdEluUERGVmlld19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5Q
REZWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdElu
UERGVmlldy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjYWVhOS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZW
aWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsODgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkJ1aWx0SW5QREZWaWV3LmgiCi0K
LSNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKLSNpbXBvcnQgIlBsdWdpblZpZXcuaCIKLSNpbXBv
cnQgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIKLSNpbXBvcnQgIldl
YkV2ZW50Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVm
Lmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3Ry
aW5nUmVmQ0YuaD4KLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
QXJjaGl2ZVJlc291cmNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xs
ZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9IVFRQSGVhZGVyTWFwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3Mu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRh
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1l
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQot
c3RhdGljIHZvaWQgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGlj
dGlvbmFyeVJlZiBzdWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCi17Ci0g
ICAgQ0dQREZBcnJheVJlZiBuYW1lczsKLSAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXko
c3VidHJlZSwgIk5hbWVzIiwgJm5hbWVzKSkgewotICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0g
Q0dQREZBcnJheUdldENvdW50KG5hbWVzKSAvIDI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVj
dDsKLSAgICAgICAgICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9i
amVjdCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVjdCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHUERGQXJyYXlSZWYga2lkczsKLSAgICBpZiAo
IUNHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lk
cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7Ci0gICAgICAg
IENHUERGRGljdGlvbmFyeVJlZiBraWQ7Ci0gICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rp
b25hcnkoa2lkcywgaSwgJmtpZCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXBw
ZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5
UmVmIHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKLXsKLSAgICBhcHBl
bmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKLX0KLQot
c3RhdGljIHZvaWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBw
ZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKLXsK
LSAgICBpZiAoIXBkZkRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR1BERkRpY3Rp
b25hcnlSZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50
KTsKLSAgICBpZiAoIXBkZkNhdGFsb2cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0
aGUgZGljdGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KLSAgICBDR1BE
RkRpY3Rpb25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OwotICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5
R2V0RGljdGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlw
dCIgbmFtZSB0cmVlLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7
Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwg
IkphdmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gVGhlIG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4g
dGhlIHZhbHVlcy4KLSAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7Ci0gICAgZ2V0
QWxsVmFsdWVzSW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOwotICAg
IHNpemVfdCBvYmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFyeVJl
ZiBqYXZhU2NyaXB0QWN0aW9uOwotICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVp
bnRlcnByZXRfY2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5
cGVEaWN0aW9uYXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlw
ZSBvZiAiSmF2YVNjcmlwdCIuCi0gICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7Ci0gICAg
ICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZh
Y3Rpb25UeXBlKSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7Ci0gICAgICAg
IENGSW5kZXggbGVuZ3RoOwotICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07Ci0gICAgICAg
IENHUERGU3RyaW5nUmVmIHN0cmluZzsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0
YTsKLSAgICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9u
LCAiSlMiLCAmc3RyZWFtKSkgewotICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsK
LSAgICAgICAgICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZv
cm1hdCkpOwotICAgICAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOwotICAg
ICAgICAgICAgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOwotICAgICAgICB9
IGVsc2UgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMi
LCAmc3RyaW5nKSkgewotICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIo
c3RyaW5nKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmlu
Zyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFieXRlcykKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBi
eXRlc1swXSA9PSAweEZFICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdV
bmljb2RlIDoga0NGU3RyaW5nRW5jb2RpbmdVVEY4OwotICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHNjcmlwdChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOwotICAgICAgICBpZiAo
IXNjcmlwdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNjcmlwdHMuYXBwZW5k
KHNjcmlwdCk7Ci0gICAgfQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgdWludDY0
X3QgcGRmRG9jdW1lbnRSZXF1ZXN0SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRz
IGxvYWRpbmcgbXVsdGlwbGUgc3RyZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4K
LQotY29uc3QgaW50IGd1dHRlckhlaWdodCA9IDEwOwotY29uc3QgaW50IHNoYWRvd09mZnNldFgg
PSAwOwotY29uc3QgaW50IHNoYWRvd09mZnNldFkgPSAtMjsKLWNvbnN0IGludCBzaGFkb3dTaXpl
ID0gNzsKLQotUGFzc1JlZlB0cjxCdWlsdEluUERGVmlldz4gQnVpbHRJblBERlZpZXc6OmNyZWF0
ZShXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdEluUERG
VmlldyhmcmFtZSkpOwotfQotCi1CdWlsdEluUERGVmlldzo6QnVpbHRJblBERlZpZXcoV2ViRnJh
bWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQnVpbHRJblBERlZpZXc6
On5CdWlsdEluUERGVmlldygpCi17Ci19Ci0KLVBsdWdpbkluZm8gQnVpbHRJblBERlZpZXc6OnBs
dWdpbkluZm8oKQotewotICAgIFBsdWdpbkluZm8gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSBidWls
dEluUERGUGx1Z2luTmFtZSgpOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lQ2xhc3NJbmZvOwot
ICAgIG1pbWVDbGFzc0luZm8udHlwZSA9ImFwcGxpY2F0aW9uL3BkZiI7Ci0gICAgbWltZUNsYXNz
SW5mby5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsKLSAgICBtaW1lQ2xhc3NJ
bmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKLQotICAgIGluZm8ubWltZXMuYXBwZW5kKG1p
bWVDbGFzc0luZm8pOwotICAgIHJldHVybiBpbmZvOwotfQotCi1QbHVnaW5WaWV3KiBCdWlsdElu
UERGVmlldzo6cGx1Z2luVmlldygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZp
ZXcqPihjb250cm9sbGVyKCkpOwotfQotCi1jb25zdCBQbHVnaW5WaWV3KiBCdWlsdEluUERGVmll
dzo6cGx1Z2luVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBs
dWdpblZpZXcqPihjb250cm9sbGVyKCkpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp1cGRh
dGVTY3JvbGxiYXJzKCkKLXsKLSAgICBib29sIGhhZFNjcm9sbGJhcnMgPSBtX2hvcml6b250YWxT
Y3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpID49IG1fcGRmRG9j
dW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOwotICAgIH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPCBtX3Bk
ZkRvY3VtZW50U2l6ZS53aWR0aCgpKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIgPSBj
cmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhcikgewotICAgICAgICBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpID49IG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0
aWNhbFNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPCBt
X3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9
IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpbnQgaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0
aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBpbnQgcGFnZVN0
ZXAgPSBtX3BhZ2VCb3hlcy5pc0VtcHR5KCkgPyAwIDogbV9wYWdlQm94ZXNbMF0uaGVpZ2h0KCk7
Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3Bs
dWdpblNpemUud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRT
aXplLndpZHRoKCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QocGx1Z2luVmlldygp
LT54KCksIHBsdWdpblZpZXcoKS0+eSgpICsgbV9wbHVnaW5TaXplLmhlaWdodCgpIC0gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJh
cikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QobV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwgMCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikg
ewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVs
c1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0LCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEludFJlY3Qgc2Ny
b2xsYmFyUmVjdChJbnRSZWN0KHBsdWdpblZpZXcoKS0+eCgpICsgbV9wbHVnaW5TaXplLndpZHRo
KCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPnkoKSwgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Ci0gICAg
ICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3JvbGxiYXJSZWN0
LmNvbnRyYWN0KDAsIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQot
ICAgIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZp
ZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBo
YXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxi
YXI7Ci0gICAgaWYgKGhhZFNjcm9sbGJhcnMgIT0gaGFzU2Nyb2xsYmFycykgewotICAgICAgICBp
ZiAoaGFzU2Nyb2xsYmFycykKLSAgICAgICAgICAgIGZyYW1lVmlldy0+YWRkU2Nyb2xsYWJsZUFy
ZWEodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Ny
b2xsYWJsZUFyZWEodGhpcyk7Ci0KLSAgICAgICAgZnJhbWVWaWV3LT5zZXROZWVkc0xheW91dCgp
OwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEJ1aWx0SW5QREZWaWV3OjpjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVm
UHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIo
dGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgIGlmIChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKHdpZGdldC5nZXQoKSk7Ci0gICAgZWxzZSAKLSAgICAgICAgZGlkQWRkVmVydGljYWxTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+
YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKLX0K
LQotdm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0g
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJh
ciA6IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAg
ICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwotICAg
IGVsc2UKLSAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQo
KSk7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIt
PmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICBzY3JvbGxiYXIgPSAwOwotfQot
Ci12b2lkIEJ1aWx0SW5QREZWaWV3OjphZGRBcmNoaXZlUmVzb3VyY2UoKQotewotICAgIC8vIEZJ
WE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExvYWRl
ci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291cmNl
cy4KLQotICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1lbnUgaGFuZGxp
bmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgotICAgIFJlc291cmNlUmVzcG9uc2Ugc3ludGhl
c2l6ZWRSZXNwb25zZTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVu
YW1lKG1fc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0VVJM
KG1fc291cmNlVVJMKTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1bHQ6OmFic29s
dXRlUERGVVJMLgotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUoImFwcGxpY2F0
aW9uL3BkZiIpOwotCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBBcmNo
aXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhQnVmZmVy
LmdldCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3RyaW5n
KCksIHN5bnRoZXNpemVkUmVzcG9uc2UpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNlKCkp
OwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoKQotewotICAg
IGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotCi0gICAgbV9wZGZEb2N1bWVudC5hZG9wdE5TKFtbcGRm
RG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fZGF0YUJ1ZmZl
ci5nZXQoKV0pOwotCi0gICAgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7Ci0KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3BsdWdp
blNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Ci0KLSAgICBWZWN0b3I8UmV0
YWluUHRyPENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7Ci0gICAgZ2V0QWxsU2NyaXB0c0luUERGRG9j
dW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKLQotICAg
IHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgpOwotICAgIGlmICghc2NyaXB0Q291
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0ds
b2JhbENvbnRleHRDcmVhdGUoMCk7Ci0gICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQ
REZEb2MoY3R4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsr
aSkgewotICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0
cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNj
cmlwdCwganNQREZEb2MsIDAsIDAsIDApOwotICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0
KTsKLSAgICB9Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OmNhbGN1bGF0ZVNpemVzKCkKLXsKLSAgICBzaXplX3QgcGFnZUNvdW50
ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9j
dW1lbnRSZWZdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytpKSB7
Ci0gICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21f
cGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7Ci0gICAgICAgIEFTU0VSVChw
ZGZQYWdlKTsKLQotICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQ
YWdlLCBrQ0dQREZDcm9wQm94KTsKLSAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkKLSAg
ICAgICAgICAgIGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVkaWFC
b3gpOwotICAgICAgICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKLSAgICAgICAg
bV9wZGZEb2N1bWVudFNpemUuc2V0V2lkdGgobWF4KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCks
IHN0YXRpY19jYXN0PGludD4oYm94LnNpemUud2lkdGgpKSk7Ci0gICAgICAgIG1fcGRmRG9jdW1l
bnRTaXplLmV4cGFuZCgwLCBib3guc2l6ZS5oZWlnaHQpOwotICAgIH0KLSAgICBtX3BkZkRvY3Vt
ZW50U2l6ZS5leHBhbmQoMCwgZ3V0dGVySGVpZ2h0ICogKG1fcGFnZUJveGVzLnNpemUoKSAtIDEp
KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQotewotICAgIC8vIExvYWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgotICAg
IG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNob3Vs
ZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVycy51cmwuaXNFbXB0eSgpKQotICAgICAgICBj
b250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0
ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4
X3Q+KCksIGZhbHNlKTsKLQotICAgIGNvbnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0cm95KCkK
LXsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5y
ZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3Jv
bGxiYXIpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIGNvbnRl
bnRBcmVhV2lsbFBhaW50KCk7Ci0KLSAgICBwYWludEJhY2tncm91bmQoZ3JhcGhpY3NDb250ZXh0
LCBkaXJ0eVJlY3QpOwotCi0gICAgaWYgKCFtX3BkZkRvY3VtZW50KSAvLyBGSVhNRTogRHJhdyBs
b2FkaW5nIHByb2dyZXNzLgotICAgICAgICByZXR1cm47Ci0KLSAgICBwYWludENvbnRlbnQoZ3Jh
cGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIHBhaW50Q29udHJvbHMoZ3JhcGhpY3NDb250
ZXh0LCBkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludEJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBo
aWNzQ29udGV4dCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6Omdy
YXksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3Qo
ZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17
Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRl
eHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91
bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRTbW9vdGhG
b250cyh0cnVlKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6d2hp
dGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKGRp
cnR5UmVjdCk7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdChkaXJ0eVJlY3QpOwotICAgIGNvbnRl
bnRSZWN0Lm1vdmVCeShJbnRQb2ludChtX3Njcm9sbE9mZnNldCkpOwotICAgIGdyYXBoaWNzQ29u
dGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9zY3JvbGxPZmZzZXQu
aGVpZ2h0KCkpOwotCi0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotCi0g
ICAgaW50IHBhZ2VUb3AgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlQm94
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW50UmVjdCBwYWdlQm94ID0gbV9wYWdlQm94ZXNb
aV07Ci0gICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCA9IG1heChyb3VuZGYo
KG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gcGFnZUJveC53aWR0aCgpKSAvIDIuMGYpLCAwLjBmKTsK
LSAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZID0gKG1fcGFnZUJveGVzLnNp
emUoKSA9PSAxKSA/IG1heChyb3VuZGYoKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIHBhZ2VCb3gu
aGVpZ2h0KCkgKyBzaGFkb3dPZmZzZXRZKSAvIDIuMGYpLCAwLjBmKSA6IDA7Ci0KLSAgICAgICAg
aWYgKHBhZ2VUb3AgPiBjb250ZW50UmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgaWYgKHBhZ2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZzZXRGb3JDZW50
ZXJpbmdZICsgZ3V0dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgewotICAgICAgICAgICAg
Q0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVu
dC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLQotICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShleHRy
YU9mZnNldEZvckNlbnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9yQ2VudGVy
aW5nWSAtIHBhZ2VCb3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dP
ZmZzZXRZKSwgc2hhZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+Y2xpcChwYWdlQm94KTsKLQotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BE
RlBhZ2UoY29udGV4dCwgcGRmUGFnZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJl
c3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVpZ2h0KCkg
KyBndXR0ZXJIZWlnaHQ7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAw
LCAtcGFnZUJveC5oZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7Ci0gICAgfQotfQotCi12b2lkIEJ1
aWx0SW5QREZWaWV3OjpwYWludENvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0gICAgICAg
IEludFJlY3Qgc2Nyb2xsYmFyRGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgICAgICBzY3JvbGxi
YXJEaXJ0eVJlY3QubW92ZUJ5KHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1wbHVnaW5WaWV3KCktPmZyYW1l
UmVjdCgpLngoKSwgLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueSgpKTsKLQotICAgICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0KLSAgICAg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0gICAgfQot
Ci0gICAgSW50UmVjdCBkaXJ0eUNvcm5lclJlY3QgPSBpbnRlcnNlY3Rpb24oc2Nyb2xsQ29ybmVy
UmVjdCgpLCBkaXJ0eVJlY3QpOwotICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNj
cm9sbENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGluZ0Nv
bnRyb2xUaW50cygpKTsKLQotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0g
ICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOwotfQotCi1QYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gQnVpbHRJblBERlZpZXc6OnNuYXBzaG90KCkKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLVBsYXRmb3JtTGF5ZXIqIEJ1aWx0
SW5QREZWaWV3OjpwbHVnaW5MYXllcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQot
Ci1ib29sIEJ1aWx0SW5QREZWaWV3Ojppc1RyYW5zcGFyZW50KCkKLXsKLSAgICAvLyBUaGlzIHNo
b3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3
Ojp3YW50c1doZWVsRXZlbnRzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6ZSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkKLXsKLSAgICBpZiAobV9wbHVnaW5TaXplID09IHBsdWdpblNpemUp
IHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygpOwot
fQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKLXsKLX0KLQot
dm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90KQotewot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpmcmFt
ZURpZEZhaWwodWludDY0X3QsIGJvb2wpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCwg
Y29uc3QgV1RGOjpTdHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3Ry
ZWFtSUQsIGNvbnN0IEtVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCi17Ci0gICAgQVNT
RVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOwot
Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOwotfQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotdm9pZCBCdWlsdEluUERGVmll
dzo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5
dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlE
ID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIGlmICghbV9kYXRhQnVmZmVyKQotICAg
ICAgICBtX2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLQot
ICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBBU1NF
UlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0K
LSAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6c3Ry
ZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQp
OwotCi0gICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBLVVJMJiByZXNwb25zZVVSTCwg
dWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1
Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0ZWRG
aWxlbmFtZTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkUmVjZWl2
ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFtX2RhdGFC
dWZmZXIpCi0gICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUo
MCwgMCkpOwotCi0gICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lkIEJ1
aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBwZGZE
b2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFt
RGlkRmFpbChib29sKQotewotICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOwotfQotCi1ib29sIEJ1
aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50
KQotewotICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6TW91
c2VNb3ZlOgotICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwotICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIGFsc28gbm90aWZ5IHNjcm9sbGJhciB0byBzaG93IGhvdmVyIGVmZmVjdC4g
U2hvdWxkIGFsc28gc2VuZCBtb3VzZUV4aXRlZCB0byBoaWRlIGl0LgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKLSAgICAgICAgLy8gUmV0dXJuaW5nIGZh
bHNlIGFzIHdpbGwgbWFrZSBFdmVudEhhbmRsZXIgdW5mb2N1cyB0aGUgcGx1Zy1pbiwgd2hpY2gg
aXMgYXBwcm9wcmlhdGUgd2hlbiBjbGlja2luZyBzY3JvbGxiYXJzLgotICAgICAgICAvLyBJZGVh
bGx5LCB3ZSB3b3VsZG4ndCBjaGFuZ2UgZm9jdXMgYXQgYWxsLCBidXQgUGx1Z2luVmlldyBhbHJl
YWR5IGRpZCB0aGF0IGZvciB1cy4KLSAgICAgICAgLy8gV2hlbiBzdXBwb3J0IGZvciBQREYgZm9y
bXMgaXMgYWRkZWQsIHdlJ2xsIG5lZWQgdG8gYWN0dWFsbHkgZm9jdXMgdGhlIHBsdWctaW4gd2hl
biBjbGlja2luZyBpbiBhIGZvcm0uCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFdl
YkV2ZW50OjpNb3VzZVVwOiB7Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2
ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFy
KQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZl
bnQpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlV2hlZWxFdmVu
dChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnQg
cGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Ci19Ci0KLWJvb2wgQnVpbHRJblBE
RlZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsKLSAg
ICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBCdWlsdEluUERGVmlldzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKQotewotICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpCi17Ci0gICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQgbWVu
dS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpCi17Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQotewot
fQotCi1OUE9iamVjdCogQnVpbHRJblBERlZpZXc6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgp
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OndpbmRvd0ZvY3VzQ2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KQotewotfQotCi11aW50NjRf
dCBCdWlsdEluUERGVmlldzo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25z
dAotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
ZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpCi17Ci19Ci0KLSNlbmRpZgotCi12
b2lkIEJ1aWx0SW5QREZWaWV3OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKLXsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJv
b2wpCi17Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmdldEZvcm1WYWx1ZShTdHJpbmcmKQot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlU2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KQotewotICAgIHJldHVybiBzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci19Ci0K
LVNjcm9sbGJhciogQnVpbHRJblBERlZpZXc6Omhvcml6b250YWxTY3JvbGxiYXIoKQotewotICAg
IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7Ci19Ci0KLVNjcm9sbGJhciogQnVp
bHRJblBERlZpZXc6OnZlcnRpY2FsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV92ZXJ0aWNh
bFNjcm9sbGJhci5nZXQoKTsKLX0KLQotSW50UmVjdCBCdWlsdEluUERGVmlldzo6c2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgIW1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgQVNT
RVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKLSAgICAgICAg
cmV0dXJuIEludFJlY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmlldygp
LT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT5o
ZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotfQotCi1T
Y3JvbGxhYmxlQXJlYSogQnVpbHRJblBERlZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBm
b3IgYSBzY3JvbGxhYmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KLSAgICByZXR1cm4g
MDsKLX0KLQotSW50UmVjdCBCdWlsdEluUERGVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCk7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQotewotICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZzZXQu
eSgpKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIGZvciBwZXJmb3JtYW5jZSB0
byBibGl0IHBhcnRzIHRoYXQgcmVtYWluIHZpc2libGUuCi0gICAgY29udHJvbGxlcigpLT5pbnZh
bGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6ZS5o
ZWlnaHQoKSkpOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNjcm9s
bGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgp
KSA6IDA7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAgICAg
IGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1cm4g
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxv
Y2F0aW9uKCkpOwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRpb24o
KSk7Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOwotfQotCi1ib29s
IEJ1aWx0SW5QREZWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNl
dC53aWR0aCgpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxT
Y3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50UG9pbnQgQnVpbHRJ
blBERlZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQo
bV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotfQotCi1J
bnRQb2ludCBCdWlsdEluUERGVmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZWaWV3
OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIGludCBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkg
PyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIEludFBvaW50IG1heGlt
dW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6ZS53aWR0aCgp
ICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkgLSBt
X3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICBt
YXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICByZXR1cm4gbWF4aW11bU9m
ZnNldDsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOwotfQotCi1pbnQgQnVpbHRJblBERlZp
ZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS53aWR0
aCgpOwotfQotCi1JbnRTaXplIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmll
dzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXBsdWdpblZp
ZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkK
LXsKLSAgICBpZiAoIWZvcmNlVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0
aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9s
bGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3
aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KLSAgICBJbnRQb2ludCBuZXdT
Y3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkpOwotICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwot
Ci0gICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMg
bWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7Ci0KLSAgICBTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKCk7Ci19Ci0KLUludFBv
aW50IEJ1aWx0SW5QREZWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkg
Y29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmll
dygpLT5jb252ZXJ0VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVudFBv
aW50KTsKLSAgICBwb2ludC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGpz
UERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3QpCi17
Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmll
dyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBwZGZWaWV3LT5yZWYoKTsKLX0K
LQotc3RhdGljIHZvaWQganNQREZEb2NGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCi17Ci0g
ICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmlldyo+
KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBwZGZWaWV3LT5kZXJlZigpOwotfQot
Ci1KU1ZhbHVlUmVmIEJ1aWx0SW5QREZWaWV3Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQotewotICAgIEJ1aWx0SW5QREZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8
QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0gICAg
V2ViRnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgUGFnZSogcGFnZSA9IGNv
cmVGcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29yZUZyYW1l
KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotCi1KU09iamVj
dFJlZiBCdWlsdEluUERGVmlldzo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCi17Ci0g
ICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsK
LSAgICAgICAgeyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgMCwg
MCwgMCB9LAotICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZEb2ND
bGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsCi0gICAgICAgIGtKU0NsYXNzQXR0cmlidXRl
Tm9uZSwKLSAgICAgICAgIkRvYyIsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAgIGpz
UERGRG9jU3RhdGljRnVuY3Rpb25zLAotICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpzUERG
RG9jRmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLSAgICB9OwotCi0gICAgc3Rh
dGljIEpTQ2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xh
c3NEZWZpbml0aW9uKTsKLQotICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRvY0Ns
YXNzLCB0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMDY0YjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaApAQCAtMCwwICsxLDE5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUERGUGx1Z2luX2gKKyNkZWZpbmUgUERGUGx1
Z2luX2gKKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2luLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BZmZpbmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1Njcm9sbGFibGVBcmVhLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVm
IGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3Ry
dWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3Bh
cXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKworT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7
CitPQkpDX0NMQVNTIFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBQREZQbHVnaW4gOiBw
dWJsaWMgUGx1Z2luLCBwdWJsaWMgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CisgICAg
flBERlBsdWdpbigpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2luSW5m
bygpOworCisgICAgLy8gSW4tV2ViUHJvY2VzcyBwbHVnaW5zIGRvbid0IHN1cHBvcnQgYXN5bmNo
cm9ub3VzIGluaXRpYWxpemF0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9u
b3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgdm9p
ZCBwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICosIENHQ29udGV4dFJlZik7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUERGUGx1Z2luKFdlYkZyYW1lKik7CisKKyAgICBQ
bHVnaW5WaWV3KiBwbHVnaW5WaWV3KCk7CisgICAgY29uc3QgUGx1Z2luVmlldyogcGx1Z2luVmll
dygpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJP
cmllbnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJh
ck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworICAgIHZvaWQg
cGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgdm9pZCBjYWxjdWxhdGVTaXplcygpOworCisgICAg
dmlydHVhbCBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdEluV2luZG93Q29vcmRp
bmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
c25hcHNob3QoKTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVyKCk7Cisg
ICAgdmlydHVhbCBib29sIGlzVHJhbnNwYXJlbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgd2FudHNX
aGVlbEV2ZW50cygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jv
b3RWaWV3VHJhbnNmb3JtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgp
OworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVz
dElEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3Jp
cHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdmlydHVh
bCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMy
X3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5n
JiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIq
IGJ5dGVzLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9h
ZGluZyh1aW50NjRfdCBzdHJlYW1JRCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwo
dWludDY0X3Qgc3RyZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQg
bWFudWFsU3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3Bv
bnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUs
IGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhlYWRlcnMs
IGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBtYW51
YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmly
dHVhbCBib29sIGhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOwor
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2li
aWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9y
Q2hhbmdlZChmbG9hdCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJ
bnB1dChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5nTW9k
ZShMYXllckhvc3RpbmdNb2RlKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzdG9yYWdl
QmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHByaXZhdGVCcm93
c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Rm9ybVZhbHVlKFN0
cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGly
ZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKKworICAgIHZpcnR1YWwgUmV0YWluUHRy
PFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5nKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV9wZGZEb2N1bWVudDsgfQorCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgZnVuY3Rpb25z
LgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5n
U2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVu
dGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2Vi
Q29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJs
ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFdlYkNv
cmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50
UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZp
cnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCBu
ZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFdlYkNv
cmU6OkludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFdl
YkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbGJhclJlY3Qp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNj
cm9sbGJhclBvaW50KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpT
Y3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0IE9W
RVJSSURFOworCisgICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRS
ZWYsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKTsKKworICAgIFdlYkNvcmU6OkludFNpemUgbV9zaXplOworICAgIFdlYkNvcmU6
OkFmZmluZVRyYW5zZm9ybSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm07CisKKyAgICBXZWJD
b3JlOjpLVVJMIG1fc291cmNlVVJMOworCisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkRmlsZW5hbWU7
CisgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YTsKKworICAgIFJldGFpblB0
cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVj
dD4gbV9wYWdlQm94ZXM7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BkZkRvY3VtZW50U2l6ZTsg
Ly8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KKworICAgIFJlZlB0cjxXZWJDb3JlOjpTY3Jv
bGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgV2ViRnJhbWUqIG1fZnJhbWU7CisKKyAg
ICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX2NvbnRhaW5lckxheWVyOworICAgIFJldGFpblB0cjxD
QUxheWVyICo+IG1fY29udGVudExheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyICo+IG1faG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyICo+IG1fdmVydGlj
YWxTY3JvbGxiYXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX3Njcm9sbENvcm5l
ckxheWVyOworICAgIFJldGFpblB0cjxQREZMYXllckNvbnRyb2xsZXI+IG1fcGRmTGF5ZXJDb250
cm9sbGVyOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBtX2xhc3RNb3VzZVBvaW50OworICAgIAorICAgIFJldGFpblB0cjxXS1BE
RkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BM
VUdJTikKKworI2VuZGlmIC8vIFBERlBsdWdpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjM5YmEwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMCwwICsxLDEwNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUERGUGx1Z2luLmgiCisKKyNpbXBvcnQgIlBERktpdElt
cG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlYWJsZUJpdG1h
cC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5o
IgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9DaHJvbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRh
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BERkRvY3VtZW50U2NyaXB0aW5nLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbEFu
aW1hdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CisKK0Bwcm90b2Nv
bCBQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CisKKy0gKHZvaWQpdXBkYXRl
U2Nyb2xsUG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247CistICh2b2lkKXdyaXRlSXRlbXNU
b1Bhc3RlYm9hcmQ6KE5TQXJyYXkgKilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlczsK
Ky0gKHZvaWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRT
dHJpbmcgKilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludDsKKy0gKHZvaWQpcGVyZm9ybVdl
YlNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmc7CistICh2b2lkKW9wZW5XaXRoUHJldmlldzsKKy0g
KHZvaWQpc2F2ZVRvUERGOworCitAZW5kCisKK0BpbnRlcmZhY2UgUERGTGF5ZXJDb250cm9sbGVy
IDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgKERldGFp
bHMpCisKK0Bwcm9wZXJ0eSAocmV0YWluKSBDQUxheWVyICpwYXJlbnRMYXllcjsKK0Bwcm9wZXJ0
eSAocmV0YWluKSBQREZEb2N1bWVudCAqZG9jdW1lbnQ7CitAcHJvcGVydHkgKHJldGFpbikgaWQ8
UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IGRlbGVnYXRlOworCistICh2b2lkKXNldEZyYW1l
U2l6ZTooQ0dTaXplKXNpemU7CisKKy0gKHZvaWQpc2V0RGlzcGxheU1vZGU6KGludCltb2RlOwor
LSAodm9pZClzZXREaXNwbGF5c1BhZ2VCcmVha3M6KEJPT0wpcGFnZUJyZWFrczsKKworLSAoQ0dG
bG9hdCl0aWxlU2NhbGVGYWN0b3I7CistICh2b2lkKXNldFRpbGVTY2FsZUZhY3RvcjooQ0dGbG9h
dClzY2FsZUZhY3RvcjsKKworLSAoQ0dTaXplKWNvbnRlbnRTaXplOworLSAoQ0dTaXplKWNvbnRl
bnRTaXplUmVzcGVjdGluZ1pvb207CisKKy0gKHZvaWQpc25hcHNob3RJbkNvbnRleHQ6KENHQ29u
dGV4dFJlZiljb250ZXh0OworCistICh2b2lkKW1hZ25pZnlXaXRoTWFnbmlmaWNhdGlvbjooQ0dG
bG9hdCltYWduaWZpY2F0aW9uIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQgaW1tZWRpYXRlbHk6KEJP
T0wpaW1tZWRpYXRlbHk7CisKKy0gKENHUG9pbnQpc2Nyb2xsUG9zaXRpb247CistICh2b2lkKXNl
dFNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOworLSAodm9pZClzY3JvbGxXaXRo
RGVsdGE6KENHU2l6ZSlkZWx0YTsKKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVu
dDsKKy0gKHZvaWQpbW91c2VNb3ZlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZVVw
OihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50
OworLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VF
eGl0ZWQ6KE5TRXZlbnQgKilldmVudDsKKworLSAoTlNBcnJheSAqKWZpbmRTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpaXNDYXNlU2Vuc2l0aXZlIGhpZ2hsaWdo
dE1hdGNoZXM6KEJPT0wpc2hvdWxkSGlnaGxpZ2h0TWF0Y2hlczsKKworLSAoaWQpY3VycmVudFNl
bGVjdGlvbjsKKy0gKHZvaWQpY29weVNlbGVjdGlvbjsKKy0gKHZvaWQpc2VsZWN0QWxsOworCist
IChib29sKWtleURvd246KE5TRXZlbnQgKilldmVudDsKKworLSAodm9pZClzZXRIVURFbmFibGVk
OihCT09MKWVuYWJsZWQ7CistIChCT09MKWh1ZEVuYWJsZWQ7CisKK0BlbmQKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK0BpbnRlcmZhY2UgV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciA6
IENBTGF5ZXIKK3sKKyAgICBXZWJLaXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30KKworQHBy
b3BlcnR5IChhc3NpZ24pIFdlYktpdDo6UERGUGx1Z2luKiBwZGZQbHVnaW47CisKK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFdLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIKKworQHN5bnRoZXNpemUg
cGRmUGx1Z2luOworCistIChpZClpbml0V2l0aFBERlBsdWdpbjooV2ViS2l0OjpQREZQbHVnaW4g
KilwbHVnaW4KK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAKKyAgICBfcGRmUGx1Z2luID0gcGx1Z2luOworICAgIAorICAgIHJldHVy
biBzZWxmOworfQorCistIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtl
eQoreworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250
ZXh0UmVmKWN0eAoreworICAgIF9wZGZQbHVnaW4tPnBhaW50Q29udHJvbEZvckxheWVySW5Db250
ZXh0KHNlbGYsIGN0eCk7Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlIDogTlNPYmplY3Q8UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+Cit7Cisg
ICAgV2ViS2l0OjpQREZQbHVnaW4qIF9wZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWdu
KSBXZWJLaXQ6OlBERlBsdWdpbiogcGRmUGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlCisKK0BzeW50aGVzaXplIHBkZlBsdWdpbjsK
KworLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgCisgICAgX3BkZlBsdWdpbiA9IHBsdWdpbjsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZCl1cGRhdGVTY3JvbGxQb3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbgorewor
ICAgIF9wZGZQbHVnaW4tPm5vdGlmeVNjcm9sbFBvc2l0aW9uQ2hhbmdlZChJbnRQb2ludChuZXdQ
b3NpdGlvbikpOworfQorCistICh2b2lkKXdyaXRlSXRlbXNUb1Bhc3RlYm9hcmQ6KE5TQXJyYXkg
KilpdGVtcyB3aXRoVHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAgIC8vIEZJWE1FOiBIYW5k
bGUgdHlwZXMgb3RoZXIgdGhhbiBwbGFpbiB0ZXh0LgorCisgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwLCBjb3VudCA9IGl0ZW1zLmNvdW50OyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU1N0
cmluZyAqdHlwZSA9IFt0eXBlcyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW3R5cGUg
aXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0gfHwgW3R5cGUgaXNFcXVhbFRvU3Ry
aW5nOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddKSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNT
dHJpbmc+IHBsYWluVGV4dFN0cmluZyhBZG9wdE5TLCBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0
aERhdGE6W2l0ZW1zIG9iamVjdEF0SW5kZXg6aV0gZW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2Rp
bmddKTsKKyAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPndyaXRl
UGxhaW5UZXh0KHBsYWluVGV4dFN0cmluZy5nZXQoKSwgUGFzdGVib2FyZDo6Q2Fubm90U21hcnRS
ZXBsYWNlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClzaG93RGVmaW5pdGlvbkZv
ckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKXN0cmluZyBhdFBvaW50OihD
R1BvaW50KXBvaW50Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworLSAodm9pZClw
ZXJmb3JtV2ViU2VhcmNoOihOU1N0cmluZyAqKXN0cmluZworeworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCit9CisKKy0gKHZvaWQpb3BlbldpdGhQcmV2aWV3Cit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKworLSAodm9pZClzYXZlVG9QREYKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVt
ZW50LgorfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRfdCBw
ZGZEb2N1bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9h
ZGluZyBtdWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgorCitQ
YXNzUmVmUHRyPFBERlBsdWdpbj4gUERGUGx1Z2luOjpjcmVhdGUoV2ViRnJhbWUqIGZyYW1lKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUERGUGx1Z2luKGZyYW1lKSk7Cit9CisKK1BERlBs
dWdpbjo6UERGUGx1Z2luKFdlYkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCisg
ICAgLCBtX2NvbnRhaW5lckxheWVyKEFkb3B0TlMsIFtbQ0FMYXllciBhbGxvY10gaW5pdF0pCisg
ICAgLCBtX2NvbnRlbnRMYXllcihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKQorICAg
ICwgbV9zY3JvbGxDb3JuZXJMYXllcihBZG9wdE5TLCBbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5
ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKQorICAgICwgbV9wZGZMYXllckNvbnRy
b2xsZXIoQWRvcHROUywgW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFsbG9jXSBpbml0XSkK
KyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoQWRvcHROUywgW1tXS1BERkxheWVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSkKK3sKKyAg
ICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRmTGF5ZXJDb250cm9s
bGVyRGVsZWdhdGUuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkucGFyZW50
TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKKyAgICAKKyAgICBbbV9jb250YWluZXJMYXll
ci5nZXQoKSBhZGRTdWJsYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07CisgICAgW21fY29udGFp
bmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKV07Cit9
CisKK1BERlBsdWdpbjo6flBERlBsdWdpbigpCit7Cit9CisKK1BsdWdpbkluZm8gUERGUGx1Z2lu
OjpwbHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87CisgICAgaW5mby5uYW1lID0g
YnVpbHRJblBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNzSW5m
bzsKKyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIG1pbWVD
bGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgbWltZUNs
YXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBpbmZvLm1pbWVzLmFwcGVu
ZChtaW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworUGx1Z2luVmlldyogUERG
UGx1Z2luOjpwbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmll
dyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIFBERlBsdWdpbjo6cGx1
Z2luVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFBsdWdpblZp
ZXcqPihjb250cm9sbGVyKCkpOworfQorCit2b2lkIFBERlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFy
cygpCit7CisgICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8
IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7
CisgICAgICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgp
KQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICB9IGVsc2UgaWYgKG1fc2l6ZS53aWR0aCgpIDwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSkK
KyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOworCisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAg
aWYgKG1fc2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBp
ZiAobV9zaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpCisgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIp
OworCisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxi
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkg
OiAwOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94ZXMuaXNFbXB0eSgpID8gMCA6IG1f
cGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikg
eworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPnNldFByb3BvcnRpb24obV9zaXplLndpZHRoKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
LCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJS
ZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCktPnkoKSArIG1fc2l6ZS5oZWlnaHQo
KSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fc2l6ZS53aWR0aCgpLCBtX2hv
cml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZy
YW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldFByb3BvcnRpb24obV9zaXplLmhlaWdodCgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOworICAgICAgICBJbnRSZWN0IHNjcm9s
bGJhclJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3NpemUud2lkdGgoKSAtIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICAKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxi
YXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAgICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAg
ICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisg
ICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXIuZ2V0KCkuZnJhbWUgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKTsKKyAg
ICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSBtX2hvcml6b250YWxT
Y3JvbGxiYXItPmZyYW1lUmVjdCgpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xs
Q29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFtZSA9
IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkg
c2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQREZQ
bHVnaW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
K3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2
ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYg
KG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIuYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWxs
b2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29udGFpbmVyTGF5ZXIu
Z2V0KCkgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAg
ICAgICAKKyAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5hZG9wdE5TKFtb
V0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10p
OworICAgICAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX3ZlcnRpY2Fs
U2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxi
YXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIp
IHsKKyAgICAgICAgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
KTsKKworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJv
bVN1cGVybGF5ZXJdOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllciA9IDA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJh
ci5nZXQoKSk7CisKKyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSByZW1v
dmVGcm9tU3VwZXJsYXllcl07CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllciA9IDA7
CisgICAgfQorCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xs
YmFyLT5kaXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7CisgICAgc2Nyb2xsYmFyID0gMDsK
K30KKwordm9pZCBQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklY
TUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVy
LiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2Vz
LgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGlu
ZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVz
aXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5h
bWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwo
bV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1
dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRp
b24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hp
dmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGEuZ2V0KCkp
LCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3lu
dGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVm
IG9iamVjdCkKK3sKKyAgICBQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxQREZQbHVn
aW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9
CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxpemUoSlNPYmplY3RSZWYgb2JqZWN0KQorewor
ICAgIFBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFBERlBsdWdpbio+KEpTT2JqZWN0
R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVl
UmVmIFBERlBsdWdpbjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgUERGUGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8UERGUGx1Z2luKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICAKKyAgICBXZWJGcmFtZSogZnJhbWUg
PSBwZGZWaWV3LT5tX2ZyYW1lOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICAKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
ZnJhbWUtPmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGNv
cmVGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIAorICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChj
b3JlRnJhbWUpOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKK30KKwordm9pZCBQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAgYWRk
QXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1
bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhLmdldCgpXSk7
CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0RnJhbWVTaXplOm1fc2l6ZV07
CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkuZG9jdW1lbnQgPSBtX3BkZkRvY3VtZW50
LmdldCgpOworICAgIAorICAgIHBsdWdpblZpZXcoKS0+c2V0UGFnZVNjYWxlRmFjdG9yKFttX3Bk
ZkxheWVyQ29udHJvbGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdLCBJbnRQb2ludCgwLCAwKSk7
CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAg
IGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOwor
CisgICAgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiBzY3JpcHRzOworICAgIFBERkRv
Y3VtZW50U2NyaXB0aW5nOjpnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1bWVu
dC5nZXQoKSBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworCisgICAgc2l6ZV90IHNjcmlwdENvdW50
ID0gc2NyaXB0cy5zaXplKCk7CisgICAgaWYgKCFzY3JpcHRDb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgw
KTsKKyAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IFBERkRvY3VtZW50U2NyaXB0aW5nOjptYWtl
SlNQREZEb2MoY3R4LCBqc1BERkRvY0luaXRpYWxpemUsIGpzUERGRG9jUHJpbnQsIGpzUERGRG9j
RmluYWxpemUsIHRoaXMpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRDb3Vu
dDsgKytpKSB7CisgICAgICAgIEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0
aENGU3RyaW5nKHNjcmlwdHNbaV0uZ2V0KCkpOworICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0
eCwgc2NyaXB0LCBqc1BERkRvYywgMCwgMCwgMCk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShz
Y3JpcHQpOworICAgIH0KKworICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKK30KKwor
dm9pZCBQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgY29tZSBzdHJhaWdodCBmcm9tIFBERktpdC4KKworICAgIHNpemVfdCBwYWdlQ291bnQg
PSBDR1BERkRvY3VtZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1
bWVudFJlZl0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsK
KyAgICAgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9w
ZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKyAgICAgICAgQVNTRVJUKHBk
ZlBhZ2UpOworCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBh
Z2UsIGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAg
ICAgICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJv
eCk7CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KKwor
ICAgIG1fcGRmRG9jdW1lbnRTaXplID0gSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkgY29udGVudFNpemVSZXNwZWN0aW5nWm9vbV0pOworfQorCitib29sIFBERlBsdWdpbjo6aW5p
dGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIC8vIExvYWQgdGhl
IHNvdXJjZSBVUkwgaWYgbmVlZGVkLgorICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7
CisgICAgaWYgKCFwYXJhbWV0ZXJzLnNob3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVy
cy51cmwuaXNFbXB0eSgpKQorICAgICAgICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1l
bnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJhbWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhU
VFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVpbnQ4X3Q+KCksIGZhbHNlKTsKKworICAgIGNvbnRyb2xs
ZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdpbigpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFBERlBsdWdpbjo6ZGVzdHJveSgpCit7CisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgaWYg
KEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKKyAg
ICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgfQor
CisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95
U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJM
YXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExheWVyLmdl
dCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBy
ZW1vdmVGcm9tU3VwZXJsYXllcl07Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
fQorICAgIAordm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENB
TGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOworICAgIAorICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOworICAgIAorICAgIGlmIChtX3ZlcnRpY2FsU2Ny
b2xsYmFyICYmIGxheWVyID09IG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBn
cmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1tX3ZlcnRpY2FsU2Nyb2xsYmFyLT54KCksIC1tX3Zl
cnRpY2FsU2Nyb2xsYmFyLT55KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5wYWlu
dCgmZ3JhcGhpY3NDb250ZXh0LCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Cisg
ICAgfSBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbGF5ZXIgPT0gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgt
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT54KCksIC1tX2hvcml6b250YWxTY3JvbGxiYXItPnkoKSk7
CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgfSBlbHNlIGlmIChsYXll
ciA9PSBtX3Njcm9sbENvcm5lckxheWVyKSB7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVy
UmVjdCA9IHRoaXMtPnNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVyUmVjdC54KCksIC1zY3JvbGxDb3JuZXJSZWN0LnkoKSk7
CisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNjcm9sbENvcm5lcigwLCAm
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxDb3JuZXJSZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQpCit7CisgICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMo
KSk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGludmFsaWRh
dGVTY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKK30KKworUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IFBERlBsdWdpbjo6c25hcHNob3QoKQoreworICAgIGlmIChtX3NpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBu
b24tMSBwYWdlL2RldmljZVNjYWxlRmFjdG9yLgorICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSA9IG1fc2l6ZTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJhY2tpbmdTdG9yZVNpemUsIFNoYXJlYWJsZUJp
dG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4
dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoMCwgLW1fc2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc25hcHNob3RJbkNv
bnRleHQ6Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCldOworCisgICAgcmV0dXJuIGJpdG1hcC5y
ZWxlYXNlKCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFBERlBsdWdpbjo6cGx1Z2luTGF5ZXIoKQor
eworICAgIHJldHVybiBtX2NvbnRhaW5lckxheWVyLmdldCgpOworfQorCitib29sIFBERlBsdWdp
bjo6aXNUcmFuc3BhcmVudCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFBERlBsdWdpbjo6d2FudHNXaGVlbEV2ZW50cygpCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpnZW9tZXRyeURpZENoYW5nZShj
b25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQoreworICAgIGlmIChtX3NpemUgPT0g
cGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZhY3RvcigpID09IFttX3BkZkxh
eWVyQ29udHJvbGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3NpemUgPSBwbHVnaW5TaXplOworICAgIG1fcm9vdFZpZXdUb1BsdWdpblRyYW5zZm9y
bSA9IHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIFttX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKSBzZXRGcmFtZVNpemU6cGx1Z2luU2l6ZV07CisKKyAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKKyAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJhbnNmb3JtM0RNYWtlU2NhbGUo
MSwgLTEsIDEpOworICAgIAorICAgIENHRmxvYXQgbWFnbmlmaWNhdGlvbiA9IHBsdWdpblZpZXco
KS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNj
YWxlRmFjdG9yXTsKKyAgICAKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBtX2xhc3RNb3VzZVBv
aW50LCB3ZSBzaG91bGQgdXNlIHRoZSB6b29tIG9yaWdpbiBmcm9tIFBsdWdpblZpZXc6OnNldFBh
Z2VTY2FsZUZhY3Rvci4KKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbWFnbmlmeVdp
dGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24gYXRQb2ludDptX2xhc3RNb3VzZVBvaW50IGlt
bWVkaWF0ZWx5OllFU107CisgICAgW21fY29udGVudExheWVyLmdldCgpIHNldFN1YmxheWVyVHJh
bnNmb3JtOkNBVHJhbnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3JtLCAwLCAtcGx1Z2luU2l6ZS5o
ZWlnaHQoKSwgMCldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisKKyAgICBjYWxjdWxh
dGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBQREZQbHVnaW46
OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIFBERlBsdWdpbjo6ZnJhbWVEaWRG
aW5pc2hMb2FkaW5nKHVpbnQ2NF90KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIFBERlBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6ZGlkRXZhbHVhdGVKYXZh
U2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uo
dWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IEtVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRS
ZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1l
OworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAordm9pZCBQ
REZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBj
aGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBz
dHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgbV9kYXRhLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBD
RkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUlu
dDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5p
c2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQoreworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFt
SUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKKworICAgIHBkZkRvY3VtZW50
RGlkTG9hZCgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBz
dHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1J
RCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9kYXRhLmNsZWFy
KCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90
IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYg
aGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBtX3N1Z2dl
c3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpt
YW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkK
K3sKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9kYXRhLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBwZGZEb2N1
bWVudERpZExvYWQoKTsKK30KKwordm9pZCBQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCkKK3sKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKyAgICAKK3N0YXRpYyBOU1VJbnRlZ2Vy
IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3QgV2ViRXZlbnQmIGV2ZW50KQoreworICAg
IHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSA/IE5TU2hpZnRLZXlNYXNrIDogMCkKKyAgICAgICAg
fCAoZXZlbnQuY29udHJvbEtleSgpID8gTlNDb250cm9sS2V5TWFzayA6IDApCisgICAgICAgIHwg
KGV2ZW50LmFsdEtleSgpID8gTlNBbHRlcm5hdGVLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZl
bnQubWV0YUtleSgpID8gTlNDb21tYW5kS2V5TWFzayA6IDApOworfQorICAgIAorc3RhdGljIE5T
RXZlbnRUeXBlIGV2ZW50VHlwZUZyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQsIGJv
b2wgbW91c2VCdXR0b25Jc0Rvd24pCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gTlNLZXlEb3duOworICAg
IGNhc2UgV2ViRXZlbnQ6OktleVVwOgorICAgICAgICByZXR1cm4gTlNLZXlVcDsKKworICAgIGNh
c2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25z
dCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91
c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU0xlZnRNb3VzZURvd247
CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6UmlnaHRCdXR0b246CisgICAgICAgICAgICBy
ZXR1cm4gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1v
dXNlVXA6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+
KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0
b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VVcDsKKyAgICAgICAgY2FzZSBXZWJN
b3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBOU1JpZ2h0TW91c2VV
cDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYg
KG1vdXNlQnV0dG9uSXNEb3duKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNv
bnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
V2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNMZWZ0
TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRv
bjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRHJhZ2dlZDsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5TTW91c2VNb3ZlZDsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jv
b2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50
KQoreworICAgIHN0YXRpYyBib29sIG1vdXNlQnV0dG9uSXNEb3duID0gZmFsc2U7CisKKyAgICBJ
bnRQb2ludCBtb3VzZVBvc2l0aW9uID0gZXZlbnQucG9zaXRpb24oKTsKKworICAgIC8vIEZJWE1F
OiBGb3J3YXJkIG1vdXNlIGV2ZW50cyB0byB0aGUgYXBwcm9wcmlhdGUgc2Nyb2xsYmFyLgorICAg
IGlmIChJbnRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFp
bnMobW91c2VQb3NpdGlvbikKKyAgICAgICAgfHwgSW50UmVjdChtX2hvcml6b250YWxTY3JvbGxi
YXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikKKyAgICAgICAgfHwg
SW50UmVjdChtX3Njcm9sbENvcm5lckxheWVyLmdldCgpLmZyYW1lKS5jb250YWlucyhtb3VzZVBv
c2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW50UG9pbnQgcG9zaXRpb25J
blBERlZpZXcobW91c2VQb3NpdGlvbik7CisgICAgcG9zaXRpb25JblBERlZpZXcgPSBtX3Jvb3RW
aWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFwUG9pbnQocG9zaXRpb25JblBERlZpZXcpOworICAgIHBv
c2l0aW9uSW5QREZWaWV3LnNldFkobV9zaXplLmhlaWdodCgpIC0gcG9zaXRpb25JblBERlZpZXcu
eSgpKTsKKyAgICAKKyAgICBtX2xhc3RNb3VzZVBvaW50ID0gcG9zaXRpb25JblBERlZpZXc7CisK
KyAgICBOU0V2ZW50VHlwZSBldmVudFR5cGUgPSBldmVudFR5cGVGcm9tV2ViRXZlbnQoZXZlbnQs
IG1vdXNlQnV0dG9uSXNEb3duKTsKKworICAgIGlmICghZXZlbnRUeXBlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3MgPSBtb2RpZmllckZsYWdz
RnJvbVdlYkV2ZW50KGV2ZW50KTsKKworICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50
IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246cG9zaXRpb25JblBERlZpZXcg
bW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNv
bnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDpldmVudC5jbGlja0NvdW50KCkgcHJl
c3N1cmU6MF07CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZl
bnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYgKG1vdXNlQnV0dG9uSXNEb3duKQorICAgICAgICAg
ICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRHJhZ2dlZDpmYWtlRXZlbnRdOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbW91
c2VNb3ZlZDpmYWtlRXZlbnRdOworICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAg
ICAgICAgbW91c2VCdXR0b25Jc0Rvd24gPSB0cnVlOworICAgICAgICBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgbW91c2VEb3duOmZha2VFdmVudF07CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOiB7CisgICAgICAgIFttX3BkZkxheWVy
Q29udHJvbGxlci5nZXQoKSBtb3VzZVVwOmZha2VFdmVudF07CisgICAgICAgIG1vdXNlQnV0dG9u
SXNEb3duID0gZmFsc2U7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50
ID0gcGxhdGZvcm0oZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZl
bnQmIGV2ZW50KQoreworICAgIFBsYXRmb3JtV2hlZWxFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxh
dGZvcm0oZXZlbnQpOworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVu
dChwbGF0Zm9ybUV2ZW50KTsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNlRW50ZXJF
dmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICBtb3VzZUVudGVyZWRDb250ZW50QXJl
YSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQREZQbHVnaW46OmhhbmRsZU1vdXNl
TGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICBtb3VzZUV4aXRlZENvbnRl
bnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBERlBsdWdpbjo6aGFuZGxl
Q29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICAvLyBVc2UgZGVm
YXVsdCBXZWJLaXQgY29udGV4dCBtZW51LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBQ
REZQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCit7CisgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdlYkV2ZW50
KGV2ZW50LCBmYWxzZSk7CisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9kaWZpZXJG
bGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0g
W05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJvUG9pbnQg
bW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJlcjowIGNv
bnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVwZWF0KCkg
a2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBzd2l0Y2gg
KGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAgICAgIHJl
dHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkga2V5RG93bjpmYWtlRXZlbnRdOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorICAgIAorYm9vbCBQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAg
aWYgKGNvbW1hbmROYW1lID09ICJjb3B5IikKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpIGNvcHlTZWxlY3Rpb25dOworICAgIGVsc2UgaWYgKGNvbW1hbmROYW1lID09ICJzZWxl
Y3RBbGwiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2VsZWN0QWxsXTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRWRpdGluZ0Nv
bW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgaWYgKGNvbW1h
bmROYW1lID09ICJjb3B5IiAmJiBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgY3VycmVudFNl
bGVjdGlvbl0pCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBpZiAoY29tbWFu
ZE5hbWUgPT0gInNlbGVjdEFsbCIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykKK3sK
K30KKworTlBPYmplY3QqIFBERlBsdWdpbjo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQREZQbHVnaW46OndpbmRvd0ZvY3VzQ2hhbmdlZChi
b29sKQoreworfQorCit2b2lkIFBERlBsdWdpbjo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQorewor
fQorCit2b2lkIFBERlBsdWdpbjo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKK30K
Kwordm9pZCBQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KQorewor
fQorCit1aW50NjRfdCBQREZQbHVnaW46OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQREZQbHVnaW46OnNlbmRDb21w
bGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzZXRM
YXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpCit7Cit9CisKK3ZvaWQgUERGUGx1Z2lu
OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBQREZQbHVn
aW46OnByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCitib29sIFBERlBs
dWdpbjo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFBERlBsdWdpbjo6aGFuZGxlU2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIHJldHVybiBzY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSk7Cit9CisKK1Njcm9sbGJhciogUERGUGx1Z2luOjpob3Jpem9udGFs
U2Nyb2xsYmFyKCkKK3sKKyAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwor
fQorCitTY3JvbGxiYXIqIFBERlBsdWdpbjo6dmVydGljYWxTY3JvbGxiYXIoKQoreworICAgIHJl
dHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOworfQorCitJbnRSZWN0IFBERlBsdWdpbjo6
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxi
YXIgfHwgIW1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKKyAg
ICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIEludFJlY3QocGx1
Z2luVmlldygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2lu
VmlldygpLT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVy
dGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkp
OworfQorCitTY3JvbGxhYmxlQXJlYSogUERGUGx1Z2luOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJl
YSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdhbGsgdXAgdGhlIGZyYW1lIHRyZWUgYW5kIGxv
b2sgZm9yIGEgc2Nyb2xsYWJsZSBwYXJlbnQgZnJhbWUgb3IgUmVuZGVyTGF5ZXIuCisgICAgcmV0
dXJuIDA7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3BkZkRvY3VtZW50
U2l6ZSk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IHRvU2l6ZShvZmZzZXQpOworICAg
IFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZXRTY3JvbGxQb3NpdGlvbjpvZmZzZXRdOwor
fQorCitpbnQgUERGUGx1Z2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdAoreworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gKChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhciA6IG1fdmVy
dGljYWxTY3JvbGxiYXIpLmdldCgpOworICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFy
LT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOworfQorCitib29s
IFBERlBsdWdpbjo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3Jl
RnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+aXNBY3RpdmUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxTY3Jv
bGxiYXIoKSkKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNldE5l
ZWRzRGlzcGxheV07CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xsYmFy
KCkpCisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNw
bGF5XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgc2V0
TmVlZHNEaXNwbGF5XTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzU2Nyb2xsQ29ybmVyVmlzaWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUERGUGx1Z2luOjpzY3Jv
bGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVy
biBtX3Njcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5o
ZWlnaHQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
SW50UG9pbnQgUERGUGx1Z2luOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRvUG9pbnQobV9zY3JvbGxPZmZzZXQpOworfQorCitJbnRQb2ludCBQREZQbHVnaW46Om1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KCk7Cit9CisK
K0ludFBvaW50IFBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIg
JiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7CisK
KyAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBt
X3NpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXpl
LmhlaWdodCgpIC0gbV9zaXplLmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7
CisgICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIG1h
eGltdW1PZmZzZXQ7Cit9CisKK2ludCBQREZQbHVnaW46OnZpc2libGVIZWlnaHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Cit9CisKK2ludCBQREZQbHVnaW46OnZpc2li
bGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworfQorCitJbnRT
aXplIFBERlBsdWdpbjo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wZGZE
b2N1bWVudFNpemU7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiAhcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT5pblBhZ2VDYWNoZSgpOworfQorCit2b2lkIFBERlBsdWdpbjo6c2Nyb2xsYmFyU3R5bGVDaGFu
Z2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkKK3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdh
eSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUs
IHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJh
cnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9s
bE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9s
bE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOworCisgICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVu
dCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2Fw
cGVhci4KKyAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisKKyAgICBTY3JvbGxhYmxlQXJlYTo6Y29u
dGVudHNSZXNpemVkKCk7Cit9CisKK0ludFJlY3QgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xs
YmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmll
dygpLT5sb2NhdGlvbigpKTsKKworICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZp
ZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcihwbHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHJlY3Qp
OworfQorICAgIAorSW50UmVjdCBQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBwbHVnaW5WaWV3KCktPmZyYW1l
KCktPnZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBw
YXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Ny
b2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICAKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9p
bnQgUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1v
dmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKyAg
ICAKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9t
UmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwb2ludCk7Cit9CisKK0ludFBvaW50
IFBERlBsdWdpbjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7
CisgICAgSW50UG9pbnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29u
dmVydFRvUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Cisg
ICAgcG9pbnQubW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0
aW9uKCkpOworICAgIAorICAgIHJldHVybiBwb2ludDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NDVmNjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5o
CkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaW1wbGVQREZQ
bHVnaW5faAorI2RlZmluZSBTaW1wbGVQREZQbHVnaW5faAorCisjaW5jbHVkZSAiUGx1Z2luLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRl
eHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKK3R5cGVk
ZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUGx1Z2luVmlldzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBTaW1wbGVQREZQbHVn
aW4gOiBwdWJsaWMgUGx1Z2luLCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaW1wbGVQREZQbHVnaW4+IGNyZWF0ZShXZWJG
cmFtZSopOworICAgIH5TaW1wbGVQREZQbHVnaW4oKTsKKworICAgIHN0YXRpYyBXZWJDb3JlOjpQ
bHVnaW5JbmZvIHBsdWdpbkluZm8oKTsKKworICAgIC8vIEluLXByb2Nlc3MgUERGVmlld3MgZG9u
J3Qgc3VwcG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24uCisgICAgdmlydHVhbCBib29s
IGlzQmVpbmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTaW1wbGVQREZQbHVnaW4oV2ViRnJhbWUqKTsK
KworICAgIC8vIFJlZ3VsYXIgcGx1Zy1pbnMgZG9uJ3QgbmVlZCBhY2Nlc3MgdG8gdmlldywgYnV0
IHdlIGFkZCBzY3JvbGxiYXJzIHRvIGVtYmVkZGluZyBGcmFtZVZpZXcgZm9yIHByb3BlciBldmVu
dCBoYW5kbGluZy4KKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCk7CisgICAgY29uc3QgUGx1
Z2luVmlldyogcGx1Z2luVmlldygpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJz
KCk7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihX
ZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFy
KFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGFkZEFyY2hpdmVSZXNv
dXJjZSgpOworICAgIHZvaWQgcGRmRG9jdW1lbnREaWRMb2FkKCk7CisgICAgdm9pZCBjYWxjdWxh
dGVTaXplcygpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBwYWlu
dENvbnRlbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KTsKKyAgICB2b2lkIHBhaW50Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKworICAgIC8vIFBs
dWctaW4gbWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRl
cnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJv
bFRpbnRzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCopOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCk7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZp
cnR1YWwgUGxhdGZvcm1MYXllciogcGx1Z2luTGF5ZXIoKTsKKyNlbmRpZgorICAgIHZpcnR1YWwg
Ym9vbCBpc1RyYW5zcGFyZW50KCk7CisgICAgdmlydHVhbCBib29sIHdhbnRzV2hlZWxFdmVudHMo
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJl
Y3QsIGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9Sb290Vmlld1RyYW5z
Zm9ybSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxpdHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisgICAg
dmlydHVhbCB2b2lkIGZyYW1lRGlkRmFpbCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgd2FzQ2Fu
Y2VsbGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90
IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IFdlYkNvcmU6OktV
UkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2Rp
ZmllZFRpbWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVh
bURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50
IGxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0
X3Qgc3RyZWFtSUQpOworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0
cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVh
bURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWlu
dDMyX3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwg
dm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
bnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29s
IGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAgdmlydHVh
bCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CisgICAg
dmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
OworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisgICAgdmlydHVhbCBO
UE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCk7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIHdpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHdpbmRvd1Zpc2li
aWxpdHlDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NjYWxlRmFjdG9y
Q2hhbmdlZChmbG9hdCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVnaW5Db21wbGV4VGV4dElu
cHV0SWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZW5kQ29tcGxleFRleHRJ
bnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIHNldExheWVy
SG9zdGluZ01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkgT1ZFUlJJREU7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCBzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVh
bCB2b2lkIHByaXZhdGVCcm93c2luZ1N0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0Rm9ybVZhbHVlKFN0cmluZyYgZm9ybVZhbHVlKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlU2Nyb2xsKFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiwgV2ViQ29yZTo6U2Nyb2xsR3JhbnVs
YXJpdHkpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xs
YmFyKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFy
KCk7CisKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnRGb3JQ
cmludGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKworICAg
IC8vIFNjcm9sbGFibGVBcmVhIG1ldGhvZHMuCisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNp
emUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxD
b3JuZXJSZWN0KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNp
YmxlSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRo
KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRz
U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJh
ci5nZXQoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfSAvLyBJZiB3ZSByZXR1cm4gdHJ1
ZSwgU2Nyb2xsQW5pbWF0b3JNYWMgd2lsbCBrZWVwIGN5Y2xpbmcgYSB0aW1lciBmb3JldmVyLCB3
YWl0aW5nIGZvciBhIGdvb2QgdGltZSB0byBhbmltYXRlLgorICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGxiYXJTdHlsZUNoYW5nZWQoaW50IG5ld1N0eWxlLCBib29sIGZvcmNlVXBkYXRlKSBPVkVSUklE
RTsKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSBvdGhlciBjb252ZXJzaW9uIGZ1bmN0aW9u
czsgdGhpcyBvbmUgaXMgZW5vdWdoIHRvIGdldCBzY3JvbGxiYXIgaGl0IHRlc3Rpbmcgd29ya2lu
Zy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0IE9WRVJSSURFOworICAgIAorICAgIHZpcnR1YWwg
Ym9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0
b3IoKSBPVkVSUklERTsKKworICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRS
ZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGx1Z2luU2l6ZTsKKworICAgIFdlYkNv
cmU6OktVUkwgbV9zb3VyY2VVUkw7CisKKyAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsK
KyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhQnVmZmVyOworCisgICAgUmV0
YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworICAgIFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiBtX3BhZ2VCb3hlczsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRT
aXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgorCisgICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNpbXBsZVBERlBsdWdpbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZmI0YzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBs
dWdpbi5tbQpAQCAtMCwwICsxLDc4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2ltcGxlUERGUGx1Z2luLmgiCisKKyNpbXBvcnQgIlBE
RktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50Q29udmVy
c2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4K
KyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291
cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVFRQSGVh
ZGVyTWFwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BERkRvY3VtZW50U2NyaXB0aW5nLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0
IHVpbnQ2NF90IHBkZkRvY3VtZW50UmVxdWVzdElEID0gMTsgLy8gUGx1Z2luQ29udHJvbGxlciBz
dXBwb3J0cyBsb2FkaW5nIG11bHRpcGxlIHN0cmVhbXMsIGJ1dCB3ZSBvbmx5IG5lZWQgb25lIGZv
ciBQREYuCisKK2NvbnN0IGludCBndXR0ZXJIZWlnaHQgPSAxMDsKK2NvbnN0IGludCBzaGFkb3dP
ZmZzZXRYID0gMDsKK2NvbnN0IGludCBzaGFkb3dPZmZzZXRZID0gLTI7Citjb25zdCBpbnQgc2hh
ZG93U2l6ZSA9IDc7CisKK1Bhc3NSZWZQdHI8U2ltcGxlUERGUGx1Z2luPiBTaW1wbGVQREZQbHVn
aW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
aW1wbGVQREZQbHVnaW4oZnJhbWUpKTsKK30KKworU2ltcGxlUERGUGx1Z2luOjpTaW1wbGVQREZQ
bHVnaW4oV2ViRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworU2lt
cGxlUERGUGx1Z2luOjp+U2ltcGxlUERGUGx1Z2luKCkKK3sKK30KKworUGx1Z2luSW5mbyBTaW1w
bGVQREZQbHVnaW46OnBsdWdpbkluZm8oKQoreworICAgIFBsdWdpbkluZm8gaW5mbzsKKyAgICBp
bmZvLm5hbWUgPSBidWlsdEluUERGUGx1Z2luTmFtZSgpOworCisgICAgTWltZUNsYXNzSW5mbyBt
aW1lQ2xhc3NJbmZvOworICAgIG1pbWVDbGFzc0luZm8udHlwZSA9ImFwcGxpY2F0aW9uL3BkZiI7
CisgICAgbWltZUNsYXNzSW5mby5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsK
KyAgICBtaW1lQ2xhc3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKKworICAgIGluZm8u
bWltZXMuYXBwZW5kKG1pbWVDbGFzc0luZm8pOworICAgIHJldHVybiBpbmZvOworfQorCitQbHVn
aW5WaWV3KiBTaW1wbGVQREZQbHVnaW46OnBsdWdpblZpZXcoKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxQbHVnaW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKworY29uc3QgUGx1Z2luVmll
dyogU2ltcGxlUERGUGx1Z2luOjpwbHVnaW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK3ZvaWQgU2lt
cGxlUERGUGx1Z2luOjp1cGRhdGVTY3JvbGxiYXJzKCkKK3sKKyAgICBib29sIGhhZFNjcm9sbGJh
cnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKworICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fcGx1Z2luU2l6ZS53
aWR0aCgpID49IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAgICAgICAgICBkZXN0cm95
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9wbHVnaW5T
aXplLndpZHRoKCkgPCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisK
KyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBpZiAobV9wbHVnaW5TaXpl
LmhlaWdodCgpID49IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQorICAgICAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgfSBlbHNlIGlmIChtX3BsdWdp
blNpemUuaGVpZ2h0KCkgPCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisK
KyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxi
YXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7
CisKKyAgICBpbnQgcGFnZVN0ZXAgPSBtX3BhZ2VCb3hlcy5pc0VtcHR5KCkgPyAwIDogbV9wYWdl
Qm94ZXNbMF0uaGVpZ2h0KCk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihtX3BsdWdpblNpemUud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgsIG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpOworICAgICAgICBJbnRSZWN0IHNjcm9sbGJh
clJlY3QocGx1Z2luVmlldygpLT54KCksIHBsdWdpblZpZXcoKS0+eSgpICsgbV9wbHVnaW5TaXpl
LmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV9wbHVnaW5TaXpl
LndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAgICBpZiAo
bV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3Qo
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgMCk7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICBpZiAobV92
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92
ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChJbnRSZWN0KHBsdWdpblZpZXcoKS0+eCgpICsg
bV9wbHVnaW5TaXplLndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVn
aW5WaWV3KCktPnkoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9wbHVnaW5TaXpl
LmhlaWdodCgpKSk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KDAsIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xs
YmFyUmVjdCk7CisgICAgfQorICAgIAorICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFt
ZS0+Y29yZUZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIWZyYW1lVmlldykKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBoYXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8
IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgaWYgKGhhZFNjcm9sbGJhcnMgIT0gaGFzU2Nyb2xs
YmFycykgeworICAgICAgICBpZiAoaGFzU2Nyb2xsYmFycykKKyAgICAgICAgICAgIGZyYW1lVmll
dy0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZy
YW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyAgICAgICAgZnJhbWVWaWV3
LT5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFNp
bXBsZVBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3Jl
YXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsK
KyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIGVsc2UgCisgICAgICAg
IGRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CisgICAgcGx1Z2luVmlldygp
LT5mcmFtZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdp
ZGdldC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xs
YmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3Jv
bGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBpZiAoIXNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhci5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3Jv
bGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYSgpOworICAg
IHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjphZGRBcmNoaXZlUmVz
b3VyY2UoKQoreworICAgIC8vIEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNv
dXJjZSB0byBEb2N1bWVudExvYWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRj
aGVkIGFzIENhY2hlZFJlc291cmNlcy4KKworICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZv
ciBjb250ZXh0IG1lbnUgaGFuZGxpbmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgorICAgIFJl
c291cmNlUmVzcG9uc2Ugc3ludGhlc2l6ZWRSZXNwb25zZTsKKyAgICBzeW50aGVzaXplZFJlc3Bv
bnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKG1fc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIHN5bnRo
ZXNpemVkUmVzcG9uc2Uuc2V0VVJMKG1fc291cmNlVVJMKTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhl
IEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlUERGVVJMLgorICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uu
c2V0TWltZVR5cGUoImFwcGxpY2F0aW9uL3BkZiIpOworCisgICAgUmVmUHRyPEFyY2hpdmVSZXNv
dXJjZT4gcmVzb3VyY2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6Ondy
YXBDRkRhdGEobV9kYXRhQnVmZmVyLmdldCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9w
ZGYiLCBTdHJpbmcoKSwgU3RyaW5nKCksIHN5bnRoZXNpemVkUmVzcG9uc2UpOworICAgIHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJj
ZShyZXNvdXJjZS5yZWxlYXNlKCkpOworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0luaXRpYWxp
emUoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFNpbXBsZVBE
RlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFNpbXBsZVBERlBsdWdpbio+KEpTT2JqZWN0
R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBwZGZWaWV3LT5yZWYoKTsKK30KKworc3RhdGljIHZv
aWQganNQREZEb2NGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgU2ltcGxlUERG
UGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nhc3Q8U2ltcGxlUERGUGx1Z2luKj4oSlNPYmplY3RH
ZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBkZlZpZXctPmRlcmVmKCk7Cit9CisKK0pTVmFsdWVS
ZWYgU2ltcGxlUERGUGx1Z2luOjpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiBjdHgsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIFNpbXBsZVBERlBsdWdpbiogcGRmVmlldyA9IHN0YXRpY19jYXN0PFNpbXBsZVBE
RlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgCisgICAgV2Vi
RnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICAKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gZnJhbWUtPmNvcmVGcmFtZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICAKKyAgICBQYWdlKiBwYWdl
ID0gY29yZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKKyAgICAKKyAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQo
Y29yZUZyYW1lKTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsK
K30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnBkZkRvY3VtZW50RGlkTG9hZCgpCit7CisgICAg
YWRkQXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZE
b2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVy
LmdldCgpXSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMo
KTsKKworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2lu
U2l6ZS53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKKworICAgIFZlY3RvcjxSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+ID4gc2NyaXB0czsKKyAgICBQREZEb2N1bWVudFNjcmlwdGluZzo6
Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRS
ZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgp
OworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpTR2xvYmFs
Q29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNPYmplY3RS
ZWYganNQREZEb2MgPSBQREZEb2N1bWVudFNjcmlwdGluZzo6bWFrZUpTUERGRG9jKGN0eCwganNQ
REZEb2NJbml0aWFsaXplLCBqc1BERkRvY1ByaW50LCBqc1BERkRvY0ZpbmFsaXplLCB0aGlzKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAg
ICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRz
W2ldLmdldCgpKTsKKyAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZE
b2MsIDAsIDAsIDApOworICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisK
KyAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1
Z2luOjpjYWxjdWxhdGVTaXplcygpCit7CisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9j
dW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgeworICAgICAgICBD
R1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50
LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworICAgICAgICBBU1NFUlQocGRmUGFnZSk7CisK
KyAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERG
Q3JvcEJveCk7CisgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCisgICAgICAgICAgICBi
b3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKKyAgICAg
ICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7CisgICAgICAgIG1fcGRmRG9jdW1l
bnRTaXplLnNldFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGJveC5zaXplLndpZHRoKSkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6ZS5leHBh
bmQoMCwgYm94LnNpemUuaGVpZ2h0KTsKKyAgICB9CisgICAgbV9wZGZEb2N1bWVudFNpemUuZXhw
YW5kKDAsIGd1dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Cit9CisKK2Jv
b2wgU2ltcGxlUERGUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCit7CisgICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9zb3VyY2VV
UkwgPSBwYXJhbWV0ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFs
TG9hZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIo
KS0+bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0
cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFs
c2UpOworCisgICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpkZXN0cm95KCkKK3sKKyAgICBp
ZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1l
LT5jb3JlRnJhbWUoKS0+dmlldygpKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwor
fQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBjb250ZW50QXJlYVdp
bGxQYWludCgpOworCisgICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwgZGlydHlS
ZWN0KTsKKworICAgIGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklYTUU6IERyYXcgbG9hZGluZyBw
cm9ncmVzcy4KKyAgICAgICAgcmV0dXJuOworCisgICAgcGFpbnRDb250ZW50KGdyYXBoaWNzQ29u
dGV4dCwgZGlydHlSZWN0KTsKKyAgICBwYWludENvbnRyb2xzKGdyYXBoaWNzQ29udGV4dCwgZGly
dHlSZWN0KTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnBhaW50QmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQor
eworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250
ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChkaXJ0eVJl
Y3QpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cGFpbnRDb250ZW50KEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOwor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRBbnRp
YWxpYXModHJ1ZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRTbW9vdGhGb250cyh0
cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6d2hpdGUsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKGRpcnR5UmVj
dCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChkaXJ0eVJlY3QpOworICAgIGNvbnRlbnRSZWN0
Lm1vdmVCeShJbnRQb2ludChtX3Njcm9sbE9mZnNldCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+
dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9zY3JvbGxPZmZzZXQuaGVpZ2h0
KCkpOworCisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworCisgICAgaW50
IHBhZ2VUb3AgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlQm94ZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBwYWdlQm94ID0gbV9wYWdlQm94ZXNbaV07Cisg
ICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCA9IG1heChyb3VuZGYoKG1fcGx1
Z2luU2l6ZS53aWR0aCgpIC0gcGFnZUJveC53aWR0aCgpKSAvIDIuMGYpLCAwLjBmKTsKKyAgICAg
ICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZID0gKG1fcGFnZUJveGVzLnNpemUoKSA9
PSAxKSA/IG1heChyb3VuZGYoKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIHBhZ2VCb3guaGVpZ2h0
KCkgKyBzaGFkb3dPZmZzZXRZKSAvIDIuMGYpLCAwLjBmKSA6IDA7CisKKyAgICAgICAgaWYgKHBh
Z2VUb3AgPiBjb250ZW50UmVjdC5tYXhZKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aWYgKHBhZ2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZ
ICsgZ3V0dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgeworICAgICAgICAgICAgQ0dQREZQ
YWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQo
KSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKKworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
YXZlKCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShleHRyYU9mZnNl
dEZvckNlbnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSAt
IHBhZ2VCb3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZ
KSwgc2hhZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7CisgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+Y2xpcChwYWdlQm94KTsKKworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2Uo
Y29udGV4dCwgcGRmUGFnZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUo
KTsKKyAgICAgICAgfQorICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVpZ2h0KCkgKyBndXR0
ZXJIZWlnaHQ7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtcGFn
ZUJveC5oZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7CisgICAgfQorfQorCit2b2lkIFNpbXBsZVBE
RlBsdWdpbjo6cGFpbnRDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOworICAgICAgICBJbnRS
ZWN0IHNjcm9sbGJhckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgc2Nyb2xsYmFyRGly
dHlSZWN0Lm1vdmVCeShwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3Qo
KS54KCksIC1wbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICAgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworCisgICAgICAgIGlm
IChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworICAgIH0KKworICAg
IEludFJlY3QgZGlydHlDb3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3Qo
KSwgZGlydHlSZWN0KTsKKyAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxD
b3JuZXIoMCwgZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOworfQorCit2b2lkIFNp
bXBsZVBERlBsdWdpbjo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJv
bFRpbnRzKCkpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3Jv
bGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBTaW1wbGVQREZQbHVnaW46OnNuYXBzaG90KCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK1BsYXRmb3JtTGF5ZXIqIFNpbXBsZVBE
RlBsdWdpbjo6cGx1Z2luTGF5ZXIoKQoreworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKwor
Ym9vbCBTaW1wbGVQREZQbHVnaW46OmlzVHJhbnNwYXJlbnQoKQoreworICAgIC8vIFRoaXMgc2hv
dWxkIG5ldmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2lu
Ojp3YW50c1doZWVsRXZlbnRzKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1w
bGVQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHBsdWdpblNpemUs
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRv
Um9vdFZpZXdUcmFuc2Zvcm0pCit7CisgICAgaWYgKG1fcGx1Z2luU2l6ZSA9PSBwbHVnaW5TaXpl
KSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3BsdWdpblNpemUgPSBwbHVnaW5TaXplOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsK
K30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQoreworfQor
Cit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90KQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6
ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2
NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0
X3Qgc3RyZWFtSUQsIGNvbnN0IEtVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCit7Cisg
ICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0
SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOworfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAordm9pZCBTaW1wbGVQ
REZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBj
aGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBz
dHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBpZiAoIW1fZGF0YUJ1ZmZl
cikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQorewor
ICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVz
dElEKTsKKworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgpOworfQorCit2b2lkIFNpbXBsZVBERlBs
dWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRS
ZXF1ZXN0SUQpOworCisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVz
cG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRp
bWUsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0g
c3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjptYW51YWxTdHJl
YW1EaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBp
ZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIu
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9
CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkK
K3sKKyAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
Om1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCkKK3sKKyAgICBtX2RhdGFCdWZmZXIuY2xlYXIoKTsK
K30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgZXZlbnQpCit7CisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNl
IFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7
CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cg
aG92ZXIgZWZmZWN0LiBTaG91bGQgYWxzbyBzZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICAv
LyBSZXR1cm5pbmcgZmFsc2UgYXMgd2lsbCBtYWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBw
bHVnLWluLCB3aGljaCBpcyBhcHByb3ByaWF0ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCisg
ICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxkbid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQ
bHVnaW5WaWV3IGFscmVhZHkgZGlkIHRoYXQgZm9yIHVzLgorICAgICAgICAvLyBXaGVuIHN1cHBv
cnQgZm9yIFBERiBmb3JtcyBpcyBhZGRlZCwgd2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0
aGUgcGx1Zy1pbiB3aGVuIGNsaWNraW5nIGluIGEgZm9ybS4KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9ybShldmVudCk7CisgICAgICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNl
VXAocGxhdGZvcm1FdmVudCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAg
ICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6
aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0
Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisK
K2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYpCit7CisgICAgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZUNvbnRl
eHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQg
V2ViS2l0IGNvbnRleHQgbWVudS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxl
UERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnNldEZvY3Vz
KGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05QT2JqZWN0KiBTaW1wbGVQREZQbHVnaW46OnBsdWdp
blNjcmlwdGFibGVOUE9iamVjdCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBQTEFURk9S
TShNQUMpCisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkK
K3sKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sK
K30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wp
Cit7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdl
ZChmbG9hdCkKK3sKK30KKwordWludDY0X3QgU2ltcGxlUERGUGx1Z2luOjpwbHVnaW5Db21wbGV4
VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
U2ltcGxlUERGUGx1Z2luOjpzZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmKQorewor
fQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3Rp
bmdNb2RlKQoreworfQorCisjZW5kaWYKKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnN0b3JhZ2VC
bG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQoreworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpCit7Cit9CisKK2Jvb2wgU2ltcGxlUERG
UGx1Z2luOjpnZXRGb3JtVmFsdWUoU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCit7CisgICAgcmV0dXJuIHNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30KKworU2Nyb2xsYmFyKiBTaW1wbGVQREZQbHVn
aW46Omhvcml6b250YWxTY3JvbGxiYXIoKQoreworICAgIHJldHVybiBtX2hvcml6b250YWxTY3Jv
bGxiYXIuZ2V0KCk7Cit9CisKK1Njcm9sbGJhciogU2ltcGxlUERGUGx1Z2luOjp2ZXJ0aWNhbFNj
cm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Cit9CisK
K0ludFJlY3QgU2ltcGxlUERGUGx1Z2luOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAg
IH0KKyAgICByZXR1cm4gSW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBTaW1wbGVQ
REZQbHVnaW46OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBGSVhN
RTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVu
dCBmcmFtZSBvciBSZW5kZXJMYXllci4KKyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBTaW1w
bGVQREZQbHVnaW46OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJl
dHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdp
bjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3Jv
bGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgIC8vIEZJWE1F
OiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJsaXQgcGFydHMgdGhhdCBy
ZW1haW4gdmlzaWJsZS4KKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAw
LCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Cit9CisKK2lu
dCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAoKG9yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0
aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7Cit9CisKK2Jvb2wg
U2ltcGxlUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBTaW1wbGVQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEludFJlY3QgZGlydHlSZWN0ID0g
cmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAg
ZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKyAgICBjb250cm9s
bGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
Y29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCitib29sIFNpbXBsZVBERlBsdWdp
bjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAoreworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7Cisg
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitJbnRQb2ludCBTaW1wbGVQREZQbHVnaW46OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQobV9zY3JvbGxPZmZz
ZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQorCitJbnRQb2ludCBTaW1w
bGVQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEludFBvaW50KDAsIDApOworfQorCitJbnRQb2ludCBTaW1wbGVQREZQbHVnaW46Om1heGltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAw
OworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIg
JiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgSW50UG9pbnQgbWF4aW11bU9mZnNldCht
X3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgIG1heGltdW1PZmZz
ZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OworfQor
CitpbnQgU2ltcGxlUERGUGx1Z2luOjp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOworfQorCitpbnQgU2ltcGxlUERGUGx1Z2luOjp2aXNp
YmxlV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpblNpemUud2lkdGgoKTsKK30K
KworSW50U2l6ZSBTaW1wbGVQREZQbHVnaW46OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6c2Ny
b2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKTsKK30KKwordm9pZCBTaW1wbGVQREZQ
bHVnaW46OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCit7Cisg
ICAgaWYgKCFmb3JjZVVwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIFBE
RiB3YXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJz
IGNoYW5nZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUg
cmVjdGFuZ2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUuCisgICAgSW50UG9pbnQgbmV3U2Nyb2xs
T2Zmc2V0ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKworICAg
IC8vIEFzIHNpemUgb2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBu
ZWVkIHRvIGFwcGVhciBvciB0byBkaXNhcHBlYXIuCisgICAgdXBkYXRlU2Nyb2xsYmFycygpOwor
CisgICAgU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOworfQorCitJbnRQb2ludCBT
aW1wbGVQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAoreworICAgIEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCkt
PmNvbnZlcnRUb1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQp
OworICAgIHBvaW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5s
b2NhdGlvbigpKTsKKworICAgIHJldHVybiBwb2ludDsKK30KKworYm9vbCBTaW1wbGVQREZQbHVn
aW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQo
Y29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisg
ICAgCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAppbmRleCBkMTk3YTY3Li45OGY4NzcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCkBAIC0xODgsNiAr
MTg4LDE1IEBAIHB1YmxpYzoKICAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhl
IHBhc3NlZCBpbiBrZXlib2FyZCBldmVudC4gVGhlIHBsdWctaW4gc2hvdWxkIHJldHVybiB0cnVl
IGlmIGl0IHByb2Nlc3NlZCB0aGUgZXZlbnQuCiAgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJv
YXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpID0gMDsKICAgICAKKyAgICAvLyBUZWxs
cyB0aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhlIHBhc3NlZCBpbiBlZGl0aW5nIGNvbW1hbmQuIFRo
ZSBwbHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBleGVjdXRlZCB0aGUgY29tbWFuZC4K
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgPSAwOworICAgIAorICAgIC8vIEFzayB0
aGUgcGx1Zy1pbiB3aGV0aGVyIGl0IHdpbGwgYmUgYWJsZSB0byBoYW5kbGUgdGhlIGdpdmVuIGVk
aXRpbmcgY29tbWFuZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
Y29uc3QgU3RyaW5nJikgPSAwOworICAgIAorICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVy
IGl0IHdhbnRzIHRvIG92ZXJyaWRlIGZ1bGwtcGFnZSB6b29tLgorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgPSAwOworICAgIAogICAgIC8vIFRlbGxzIHRoZSBwbHVn
LWluIGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wp
ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Q
cm94eS5jcHAKaW5kZXggMGY0ZmQ3MC4uOThmMzMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBAIC00MDMsNiArNDAzLDMzIEBA
IHZvaWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCiAgICAgbV9jb25uZWN0
aW9uLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
U2V0Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwogfQogCitib29sIFBsdWdp
blByb3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBj
b25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAg
IGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVn
aW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1
bWVudCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21t
YW5kOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBoYW5kbGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Q
cm94eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkK
K3sKKyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFtZSksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9s
bGVyUHJveHk6OklzRWRpdGluZ0NvbW1hbmRFbmFibGVkOjpSZXBseShlbmFibGVkKSwgbV9wbHVn
aW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBl
bmFibGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rv
cigpCit7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24t
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
SGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5
OjpIYW5kbGVzUGFnZVNjYWxlRmFjdG9yOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5j
ZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBoYW5kbGVkOwor
fQorCiBOUE9iamVjdCogUGx1Z2luUHJveHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCiB7
CiAgICAgLy8gU2VuZGluZyB0aGUgc3luY2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xs
ZXJQcm94eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNhdXNlIHVz
IHRvIGRpc3BhdGNoIGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm94eS5oCmluZGV4IDdhMzZjMWEuLjAyZmExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCkBAIC0xMDEsNiArMTAxLDExIEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3Qg
V2ViTW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBP
VkVSUklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
OworICAgIAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgp
OwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2Vk
KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCmluZGV4IGExZTgxMjYuLmQwYTVlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTI3MSw2ICsyNzEsNyBAQCBQbHVn
aW5WaWV3OjpQbHVnaW5WaWV3KFBhc3NSZWZQdHI8SFRNTFBsdWdJbkVsZW1lbnQ+IHBsdWdpbkVs
ZW1lbnQsIFBhc3NSZWZQdHI8UAogI2VuZGlmCiAgICAgLCBtX21hbnVhbFN0cmVhbVN0YXRlKFN0
cmVhbVN0YXRlSW5pdGlhbCkKICAgICAsIG1fcGx1Z2luU25hcHNob3RUaW1lcih0aGlzLCAmUGx1
Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkLCBwbHVnaW5TbmFwc2hvdFRpbWVyRGVs
YXkpCisgICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogewogICAgIG1fd2ViUGFnZS0+YWRkUGx1
Z2luVmlldyh0aGlzKTsKIH0KQEAgLTQyNyw2ICs0MjgsMTggQEAgdm9pZCBQbHVnaW5WaWV3Ojpw
YWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQogICAgIHZpZXdHZW9tZXRyeURpZENoYW5nZSgpOwog
fQogCit2b2lkIFBsdWdpblZpZXc6OnNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0
b3IsIEludFBvaW50KQoreworICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7Cisg
ICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3Rv
ckRpZENoYW5nZShzY2FsZUZhY3RvcikpOworICAgIHBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgp
OworfQorCitkb3VibGUgUGx1Z2luVmlldzo6cGFnZVNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1
cm4gbV9wYWdlU2NhbGVGYWN0b3I7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6d2ViUGFnZURlc3Ry
b3llZCgpCiB7CiAgICAgbV93ZWJQYWdlID0gMDsKQEAgLTc2MCw2ICs3NzMsMTYgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKGRpZEhhbmRsZUV2
ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KKyAgICAKK2Jvb2wg
UGx1Z2luVmlldzo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFt
ZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICByZXR1cm4gbV9wbHVnaW4tPmhhbmRs
ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7Cit9CisgICAgCitib29sIFBs
dWdpblZpZXc6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUpCit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5pc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21t
YW5kTmFtZSk7Cit9CiAKIHZvaWQgUGx1Z2luVmlldzo6bm90aWZ5V2lkZ2V0KFdpZGdldE5vdGlm
aWNhdGlvbiBub3RpZmljYXRpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuaAppbmRleCAxM2UwYTk3Li4wZDBkZmEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTc5LDEwICs3OSwx
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXM7IG5vYm9keSBzaG91bGQg
aGF2ZSB0byBrbm93IGFib3V0IHRoZSBwbHVnLWluIHZpZXcncyByZW5kZXJlciBleGNlcHQgdGhl
IHBsdWctaW4gdmlldyBpdHNlbGYuCiAgICAgV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Qq
IHJlbmRlcmVyKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRQYWdlU2NhbGVGYWN0b3IoZG91
YmxlIHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpJbnRQb2ludCBvcmlnaW4pOworICAgIGRvdWJsZSBw
YWdlU2NhbGVGYWN0b3IoKTsKKyAgICBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSB7IHJl
dHVybiBtX3BsdWdpbi0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOyB9CiAKICAgICB2b2lkIHBh
Z2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwogICAgIHZvaWQgd2ViUGFnZURlc3Ryb3llZCgpOwog
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBpc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKKwogcHJpdmF0
ZToKICAgICBQbHVnaW5WaWV3KFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+
LCBQYXNzUmVmUHRyPFBsdWdpbj4sIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYgcGFyYW1ldGVy
cyk7CiAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwpAQCAtMjM2LDYgKzI0Myw4IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV90cmFuc2llbnRQYWludGluZ1NuYXBz
aG90OwogICAgIC8vIFRoaXMgdGltZXIgaXMgdXNlZCB3aGVuIHBsdWdpbiBzbmFwc2hvdHRpbmcg
aXMgZW5hYmxlZCwgdG8gY2FwdHVyZSBhIHBsdWdpbiBwbGFjZWhvbGRlci4KICAgICBXZWJDb3Jl
OjpEZWZlcnJhYmxlT25lU2hvdFRpbWVyPFBsdWdpblZpZXc+IG1fcGx1Z2luU25hcHNob3RUaW1l
cjsKKworICAgIGRvdWJsZSBtX3BhZ2VTY2FsZUZhY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA2ZGEyNDI1Li5j
Mjk0NjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTE0NiwxMCAr
MTE0Niw5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUoKQog
ICAgIC8vIEluZm9ybSB0aGUgVUkgcHJvY2VzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLgogICAgIGRv
dWJsZSBzY2FsZUZhY3RvciA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9y
eSgpLT5jdXJyZW50SXRlbSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKIAotICAgIC8vIEEgc2NhbGUg
ZmFjdG9yIG9mIDAuMCBtZWFucyB0aGUgaGlzdG9yeSBpdGVtIGFjdHVhbGx5IGhhcyB0aGUgImRl
ZmF1bHQgc2NhbGUgZmFjdG9yIiBvZiAxLjAuCi0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAg
ICAgc2NhbGVGYWN0b3IgPSAxLjA7Ci0gICAgbV9mcmFtZS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZShzY2FsZUZhY3RvcikpOwor
ICAgIC8vIEEgc2NhbGUgZmFjdG9yIG9mIDAgbWVhbnMgdGhlIGhpc3RvcnkgaXRlbSBoYXMgdGhl
IGRlZmF1bHQgc2NhbGUgZmFjdG9yLCB0aHVzIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSBpdC4K
KyAgICBpZiAoc2NhbGVGYWN0b3IpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVGYWN0b3Ip
KTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiBXZWJDb3Jl
IHNob3VsZCBiZSBjb3JyZWN0bHkgaW52YWxpZGF0aW5nCiAgICAgLy8gdGhlIHZpZXcgb24gcmVz
dG9yZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgpAQCAtMTIxNiw3ICsxMjE1LDcgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hl
ZEZyYW1lKENhY2hlZEZyYW1lKikKICAgICBib29sIGlzTWFpbkZyYW1lID0gd2ViUGFnZS0+bWFp
bldlYkZyYW1lKCkgPT0gbV9mcmFtZTsKICAgICAKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2UoKTsKLSAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBp
c01haW5GcmFtZSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zaG91bGRVc2VDdXN0b21SZXByZXNl
bnRhdGlvbkZvclJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVz
ZW50YXRpb24gPSBpc01haW5GcmFtZSAmJiB3ZWJQYWdlLT5zaG91bGRVc2VDdXN0b21SZXByZXNl
bnRhdGlvbkZvclJlc3BvbnNlKHJlc3BvbnNlKTsKICAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2Fj
aGUgPSB0cnVlOwogfQogCkBAIC0xMjMwLDcgKzEyMjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKICAgICBJbnRSZWN0IGN1
cnJlbnRWaXNpYmxlQ29udGVudEJvdW5kcyA9IG1fZnJhbWUtPnZpc2libGVDb250ZW50Qm91bmRz
KCk7CiAKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSA9IG1fZnJhbWUtPmNv
cmVGcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKTsKLSAgICBt
X2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01haW5GcmFtZSAmJiBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKHJlc3Bv
bnNlKTsKKyAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01haW5GcmFtZSAm
JiB3ZWJQYWdlLT5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKHJlc3Bv
bnNlKTsKICAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGUgPSBmYWxzZTsKIAogICAgIG1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5jcmVhdGVWaWV3KHdlYlBhZ2UtPnNpemUoKSwgYmFja2dyb3VuZENv
bG9yLCAvKiB0cmFuc3BhcmVudCAqLyBmYWxzZSwgSW50U2l6ZSgpLCBzaG91bGRVc2VGaXhlZExh
eW91dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggZTI2ZWI4OC4uOTBiYmEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTA3LDYgKzEwNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TY2hlbWVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0VmFsdWUu
aD4KQEAgLTE1MCw3ICsxNTEsMTAgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2lu
Y2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisjaW5jbHVkZSAiU2ltcGxlUERGUGx1Z2luLmgiCisj
aWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjZW5kaWYK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0yMTksNiArMjIzLDcgQEAgV2ViUGFnZTo6
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpCiAgICAgLCBtX2FydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5
RW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZChmYWxzZSkKICNpZiBQTEFURk9STShNQUMpCisgICAgLCBtX3BkZlBsdWdpbkVuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1faXNTbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCkKICAg
ICAsIG1fbGF5ZXJIb3N0aW5nTW9kZShwYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGUpCkBAIC00
NjYsOCArNDcxLDEzIEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBXZWJQYWdlOjpjcmVhdGVQbHVnaW4o
V2ViRnJhbWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1CiAgICAgaWYgKHBsdWdpblBh
dGguaXNOdWxsKCkpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJz
Lm1pbWVUeXBlID09ICJhcHBsaWNhdGlvbi9wZGYiCi0gICAgICAgICAgICB8fCAocGFyYW1ldGVy
cy5taW1lVHlwZS5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5k
c1dpdGgoIi5wZGYiKSkpCi0gICAgICAgICAgICByZXR1cm4gQnVpbHRJblBERlZpZXc6OmNyZWF0
ZShmcmFtZSk7CisgICAgICAgICAgICB8fCAocGFyYW1ldGVycy5taW1lVHlwZS5pc0VtcHR5KCkg
JiYgcGFyYW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5kc1dpdGgoIi5wZGYiKSkpIHsKKyNp
ZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyAgICAgICAgICAgIGlmIChwZGZQbHVnaW5FbmFibGVk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBERlBsdWdpbjo6Y3JlYXRlKGZyYW1lKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVBERlBsdWdpbjo6Y3JlYXRlKGZyYW1lKTsK
KyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKICNlbmRpZgpA
QCAtNjE4LDExICs2MjgsMjcgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViUGFnZTo6
dHJhY2tlZFJlcGFpbnRSZWN0cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2
ZWN0b3IpOwogfQogCitzdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0ZvckZyYW1lKEZyYW1l
KiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGx1Z2luRG9jdW1lbnQqIHBsdWdpbkRvY3Vt
ZW50ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKSk7Cisg
ICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVn
aW5Eb2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgIHJldHVybiBwbHVnaW5WaWV3OworfQor
CiB2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChQbHVnaW5WaWV3KiBwbHVnaW5WaWV3
ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICBwbHVnaW5WaWV3LT5oYW5k
bGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSku
ZXhlY3V0ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMSw2ICs2NTcsOSBAQCBib29sIFdlYlBhZ2U6
OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoZnJhbWUpKQorICAg
ICAgICByZXR1cm4gcGx1Z2luVmlldy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5h
bWUpOwogICAgIAogICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigp
LT5jb21tYW5kKGNvbW1hbmROYW1lKTsKICAgICByZXR1cm4gY29tbWFuZC5pc1N1cHBvcnRlZCgp
ICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CkBAIC0xMDcxLDggKzExMDAsMTQgQEAgdm9pZCBXZWJQ
YWdlOjp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UodWludDY0X3QgZGlzcGxheUlEKQogCiB2b2lkIFdl
YlBhZ2U6OnNjYWxlUGFnZShkb3VibGUgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4pCiB7
CisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2Ut
Pm1haW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVz
UGFnZVNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFj
dG9yKHNjYWxlLCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIG1f
cGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlLCBvcmlnaW4pOwotCisgICAgCiAgICAgZm9y
IChIYXNoU2V0PFBsdWdpblZpZXcqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblZpZXdz
LmJlZ2luKCksIGVuZCA9IG1fcGx1Z2luVmlld3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAg
ICAgICAgKCppdCktPnBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwogCkBAIC0xMDgxLDYgKzEx
MTYsMTAgQEAgdm9pZCBXZWJQYWdlOjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQ
b2ludCYgb3JpZ2luKQogCiBkb3VibGUgV2ViUGFnZTo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QK
IHsKKyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fcGFn
ZS0+bWFpbkZyYW1lKCkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhhbmRs
ZXNQYWdlU2NhbGVGYWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPnBhZ2VTY2Fs
ZUZhY3RvcigpOworICAgIAogICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwog
fQogCkBAIC0xNTMxLDkgKzE1NzAsMTMgQEAgdm9pZCBXZWJQYWdlOjp2YWxpZGF0ZUNvbW1hbmQo
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBpbnQz
Ml90IHN0YXRlID0gMDsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5h
bWUpOwotICAgICAgICBzdGF0ZSA9IGNvbW1hbmQuc3RhdGUoKTsKLSAgICAgICAgaXNFbmFibGVk
ID0gY29tbWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAg
IGlmIChQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkK
KyAgICAgICAgICAgIGlzRW5hYmxlZCA9IHBsdWdpblZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKGNvbW1hbmROYW1lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBFZGl0b3I6OkNv
bW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7Cisg
ICAgICAgICAgICBzdGF0ZSA9IGNvbW1hbmQuc3RhdGUoKTsKKyAgICAgICAgICAgIGlzRW5hYmxl
ZCA9IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWYWxpZGF0ZUNv
bW1hbmRDYWxsYmFjayhjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSwgY2FsbGJhY2tJRCkp
OwpAQCAtMjA1Miw2ICsyMDk1LDEwIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMo
Y29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKICAgICBtX3Njcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVy
ZW5jZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRLZXkoKSk7CiAKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgbV9wZGZQbHVnaW5FbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZh
bHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwZGZQbHVnaW5FbmFibGVkS2V5KCkpOworI2Vu
ZGlmCisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGZyb20gbWFjcm8g
ZXhwYW5zaW9uIGZvciBhbGwgcHJlZmVyZW5jZXMsCiAgICAgLy8gYnV0IHdlIGN1cnJlbnRseSBk
b24ndCBtYXRjaCB0aGUgbmFtaW5nIG9mIFdlYkNvcmUgZXhhY3RseSBzbyB3ZSBhcmUKICAgICAv
LyBoYW5kcm9sbGluZyB0aGUgYm9vbGVhbiBhbmQgaW50ZWdlciBwcmVmZXJlbmNlcyB1bnRpbCB0
aGF0IGlzIGZpeGVkLgpAQCAtMzM5MSw0ICszNDM4LDI0IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgZnJhbWVW
aWV3LT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVuYWJsZWQpOwogfQog
CitzdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSkKK3sKKyAgICBTdHJpbmcgcGx1Z2luUGF0aDsKKyAgICBib29sIGJsb2Nr
ZWQ7CisgICAgCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVzcG9uc2Uu
bWltZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXRQbHVnaW5QYXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwgMCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gIWJsb2NrZWQgJiYgIXBsdWdp
blBhdGguaXNFbXB0eSgpOworfQorCitib29sIFdlYlBhZ2U6OnNob3VsZFVzZUN1c3RvbVJlcHJl
c2VudGF0aW9uRm9yUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIGNv
bnN0Cit7CisgICAgaWYgKCFtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuY29u
dGFpbnMocmVzcG9uc2UubWltZVR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIElmIGEgcGx1Zy1pbiBleGlzdHMgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydCB0aGlzIHJlc3Bv
bnNlLCBpdCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIGN1c3RvbSByZXByZXNlbnRh
dGlvbi4KKyAgICByZXR1cm4gIWNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCA0ZDk1MjQ2Li42NWEwNGI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQcmludENvbnRleHQ7CiAg
ICAgY2xhc3MgUmFuZ2U7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBjbGFzcyBS
ZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVyOwogICAgIGNsYXNzIFZpc2li
bGVTZWxlY3Rpb247CkBAIC01ODEsNiArNTgyLDggQEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5h
dGl2ZVdpbmRvd0hhbmRsZSgpIHsgcmV0dXJuIG1fbmF0aXZlV2luZG93SGFuZGxlOyB9CiAjZW5k
aWYKIAorICAgIGJvb2wgc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgY29uc3Q7CisKICAgICBib29sIGFzeW5j
aHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5
bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBc3lu
Y2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYXN5
bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkID0gZW5hYmxlZDsgfQogICAgIGJv
b2wgYXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkRm9yQWxsUGx1Z2lucygp
IGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVk
Rm9yQWxsUGx1Z2luczsgfQpAQCAtNTkzLDYgKzU5NiwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
Y3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxpbmdQ
ZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAg
IGJvb2wgcGRmUGx1Z2luRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGRmUGx1Z2luRW5hYmxl
ZDsgfQorICAgIHZvaWQgc2V0UERGUGx1Z2luRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wZGZQ
bHVnaW5FbmFibGVkID0gZW5hYmxlZDsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IHBkZkFuZFBvc3RTY3Jp
cHRNSU1FVHlwZXMoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0X3Qg
cGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTc5Niw2ICs4
MDgsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdF
bmFibGVkOwogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgbV9wZGZQbHVnaW5FbmFibGVk
OworCiAgICAgLy8gV2hldGhlciB0aGUgY29udGFpbmluZyB3aW5kb3cgaXMgdmlzaWJsZSBvciBu
b3QuCiAgICAgYm9vbCBtX3dpbmRvd0lzVmlzaWJsZTsKIApAQCAtOTIzLDYgKzkzNyw4IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0
ZTsKICNlbmRpZgogICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisK
KyAgICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtX21pbWVUeXBlc1dpdGhDdXN0
b21SZXByZXNlbnRhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRl
eCAyMjI3M2MxLi4yYWNmODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC05NCw2ICs5NCwxNCBAQCB2b2lkIFdlYlBh
Z2U6OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9y
ZSYgc3RvcmUpCiB7CiAgICAgaWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gdGhpcy0+aW5z
cGVjdG9yKCkpCiAgICAgICAgIGluc3BlY3Rvci0+c2V0SW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJ
bnRlcmZhY2Uoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjppbnNw
ZWN0b3JVc2VzV2ViS2l0VXNlckludGVyZmFjZUtleSgpKSk7CisKKyAgICBCT09MIG9taXRQREZT
dXBwb3J0ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktl
eTpAIldlYktpdE9taXRQREZTdXBwb3J0Il07CisgICAgaWYgKCFwZGZQbHVnaW5FbmFibGVkKCkg
JiYgIW9taXRQREZTdXBwb3J0KSB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gdXNlIGEgUERGIHZp
ZXcgaW4gdGhlIFVJIHByb2Nlc3MgZm9yIFBERiBNSU1FIHR5cGVzLgorICAgICAgICBIYXNoU2V0
PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtaW1lVHlwZXMgPSBwZGZBbmRQb3N0U2NyaXB0TUlN
RVR5cGVzKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD46
Oml0ZXJhdG9yIGl0ID0gbWltZVR5cGVzLmJlZ2luKCk7IGl0ICE9IG1pbWVUeXBlcy5lbmQoKTsg
KytpdCkKKyAgICAgICAgICAgIG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5h
ZGQoKml0KTsKKyAgICB9CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2Vs
ZWN0b3JOYW1lTWFwOwpAQCAtODY2LDQgKzg3NCwxNiBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdl
c1RvUERGRnJvbVBERkRvY3VtZW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQREZEb2N1bWVudCAq
cAogICAgIH0KIH0KIAorLy8gRklYTUU6IFRoaXMgaXMgbm90IHRoZSBpZGVhbCBwbGFjZSBmb3Ig
dGhpcyBmdW5jdGlvbiAoYW5kIG5vdyBpdCdzIGR1cGxpY2F0ZWQgaGVyZSBhbmQgaW4gV2ViQ29u
dGV4dE1hYykuCitIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBXZWJQYWdlOjpwZGZB
bmRQb3N0U2NyaXB0TUlNRVR5cGVzKCkKK3sKKyAgICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRp
bmdIYXNoPiBtaW1lVHlwZXM7CisgICAgCisgICAgbWltZVR5cGVzLmFkZCgiYXBwbGljYXRpb24v
cGRmIik7CisgICAgbWltZVR5cGVzLmFkZCgiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIpOworICAg
IG1pbWVUeXBlcy5hZGQoInRleHQvcGRmIik7CisgICAgCisgICAgcmV0dXJuIG1pbWVUeXBlczsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcAppbmRleCA5OGM5MzAyLi42ZjY3ZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI0Niw5ICsyNDYsNiBAQCB2b2lkIFdlYlByb2Nlc3M6
OmluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZQogCiAgICAgc2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwocGFyYW1ldGVy
cy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLnNpemUo
KTsgKytpKQotICAgICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuYWRk
KHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uW2ldKTsKLQogICAg
IGlmIChwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGgpCiAgICAg
ICAgIHNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKHRydWUpOwogCkBAIC04MTMsMjYg
KzgxMCw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlTWVzc2FnZVBvcnRDaGFubmVsKHVpbnQ2
NF90IGNoYW5uZWxJRCkKIH0KICNlbmRpZgogCi1zdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBTdHJpbmcg
cGx1Z2luUGF0aDsKLSAgICBib29sIGJsb2NrZWQ7Ci0KLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
R2V0UGx1Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgpLCByZXNwb25zZS51cmwoKS5zdHJpbmco
KSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGg6OlJlcGx5KHBsdWdp
blBhdGgsIGJsb2NrZWQpLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICFibG9ja2VkICYmICFwbHVnaW5QYXRoLmlzRW1wdHkoKTsKLX0KLQotYm9vbCBXZWJQcm9jZXNz
OjpzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlKSBjb25zdAotewotICAgIGlmICghbV9taW1lVHlwZXNXaXRoQ3Vz
dG9tUmVwcmVzZW50YXRpb25zLmNvbnRhaW5zKHJlc3BvbnNlLm1pbWVUeXBlKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiBhIHBsdWctaW4gZXhpc3RzIHRoYXQgY2xhaW1z
IHRvIHN1cHBvcnQgdGhpcyByZXNwb25zZSwgaXQgc2hvdWxkIHRha2UgcHJlY2VkZW5jZSBvdmVy
IHRoZSBjdXN0b20gcmVwcmVzZW50YXRpb24uCi0gICAgcmV0dXJuICFjYW5QbHVnaW5IYW5kbGVS
ZXNwb25zZShyZXNwb25zZSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJSZXNvdXJjZUNh
Y2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFyKQogewogICAg
IHBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhyZXNvdXJjZUNhY2hlc1RvQ2xlYXIpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCA3M2YwNzk2Li5lY2NiYjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAtMTUwLDE0ICsxNTAsMTIg
QEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBwaWRfdCBwcmVzZW50ZXJBcHBsaWNh
dGlvblBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7IH0KICAg
ICBib29sIHNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOyB9Ci0jZW5kaWYgCisjZW5kaWYK
ICAgICAKICNpZiBQTEFURk9STShRVCkKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsgfQogI2Vu
ZGlmCiAKLSAgICBib29sIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OwotCiAgICAgLy8gVGV4dCBD
aGVja2luZwogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KIApAQCAtMzIwLDggKzMxOCw2IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsPiA+IG1fbWVzc2FnZVBvcnRDaGFubmVsczsKICNlbmRpZgogCi0g
ICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9t
UmVwcmVzZW50YXRpb25zOwotCiAgICAgVGV4dENoZWNrZXJTdGF0ZSBtX3RleHRDaGVja2VyU3Rh
dGU7CiAgICAgV2ViR2VvbG9jYXRpb25NYW5hZ2VyIG1fZ2VvbG9jYXRpb25NYW5hZ2VyOwogI2lm
IEVOQUJMRShCQVRURVJZX1NUQVRVUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168579</attachid>
            <date>2012-10-14 00:55:21 -0700</date>
            <delta_ts>2012-10-14 00:59:35 -0700</delta_ts>
            <desc>Undo PDFDocumentScripting changes, and PDFPlugin can inherit from SimplePDFPlugin and be a lot smaller.</desc>
            <filename>pdfkit.diff</filename>
            <type>text/plain</type>
            <size>174099</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li42OGYzMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IFBERlBsdWdpbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyMDYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBwbHVnLWluIHRoYXQgdXNlcyBQREZLaXQg
dG8gZGlzcGxheSBQREZzLCBpbnN0ZWFkIG9mIHVzaW5nIFBERktpdCBpbiB0aGUKKyAgICAgICAg
VUlQcm9jZXNzIGZvciBmdWxsLXBhZ2UgUERGcy4gVGhpcyBuZXcgcGx1Z2luIHdpbGwgYWxzbyBi
ZSB1c2VkIGZvciBpbmxpbmUgUERGcworICAgICAgICBpbiBwbGFjZSBvZiBTaW1wbGVQREZQbHVn
aW4gKG7DqWUgQnVpbHRJblBERlZpZXcpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgIEV4cG9ydCBhIGZldyBtb3JlIG1ldGhvZHMgdG8gV2ViS2l0KDIpLgorCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBFeHBvc2UgUGFz
dGVib2FyZC5oIGFzIGEgcHJpdmF0ZSBoZWFkZXIgc28gUERGUGx1Z2luIGNhbiB1c2UgaXQuCisg
ICAgICAgIEFkZCBQREZEb2N1bWVudFNjcmlwdGluZy5jcHAvaC4KKworICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgIE1ha2UgaW52YWxpZGF0ZVNjcm9sbGJhci9p
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyIHZpcnR1YWwuCisKIDIwMTItMTAtMTEgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IHdpbGwgbmV2ZXIgcmVzdG9yZSB0aGUgY3VycmVudCBjb250ZXh0IHRvIG51bGwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZmQyY2Q3Ny4uOWE2YzcxYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTI4NSwxMSArMjg1LDE0IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
NWNvbnRlbnRzUmVzaXplZEV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTZoYW5kbGVX
aGVlbEV2ZW50RVJLTlNfMThQbGF0Zm9ybVdoZWVsRXZlbnRFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMTd3aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVB
cmVhMTl3aWxsU3RhcnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEx
OWludmFsaWRhdGVTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFUktOU183SW50UmVjdEUKK19fWk5L
N1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjFtb3VzZUVudGVyZWRTY3JvbGxiYXJFUE5TXzlTY3Jv
bGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjJpbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyRVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjNkaWRBZGRW
ZXJ0aWNhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyNHNldFNjcm9sbGJhck92ZXJsYXlTdHlsZUVOU18yMVNjcm9sbGJhck92ZXJsYXlTdHls
ZUUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyNWRpZEFkZEhvcml6b250YWxTY3JvbGxi
YXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjd3aWxsUmVt
b3ZlVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCitfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhMjdub3RpZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWRFUktOU184SW50UG9pbnRFCiBf
X1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjhzZXRTY3JvbGxPZmZzZXRGcm9tSW50ZXJuYWxz
RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI5d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dlYkNvcmUxNFNjcm9s
bGFibGVBcmVhNnNjcm9sbEVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18xN1Njcm9sbEdyYW51bGFy
aXR5RWYKQEAgLTMyMSw2ICszMjQsOCBAQCBfX1pON1dlYkNvcmUxNGVuZE9mUGFyYWdyYXBoRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZwogX19aTjdX
ZWJDb3JlMTRzZXRNZXRhZGF0YVVSTEVSTjNXVEY2U3RyaW5nRVJLUzFfUzRfCiBfX1pON1dlYkNv
cmUxNUFmZmluZVRyYW5zZm9ybTVmbGlwWUV2CiBfX1pON1dlYkNvcmUxNUFmZmluZVRyYW5zZm9y
bTVzY2FsZUVkCitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eFNjYWxlRXYKK19fWk5L
N1dlYkNvcmUxNUFmZmluZVRyYW5zZm9ybTZ5U2NhbGVFdgogX19aTjdXZWJDb3JlMTVBZmZpbmVU
cmFuc2Zvcm04bXVsdGlwbHlFUktTMF8KIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOXRy
YW5zbGF0ZUVkZAogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm1DMUVkZGRkZGQKQEAgLTM1
MSw2ICszNTYsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDExY2xlYXJTaGFkb3dF
dgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xv
ckVOU18xMENvbG9yU3BhY2VFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0Rmls
bEdyYWRpZW50RU4zV1RGMTBQYXNzUmVmUHRySU5TXzhHcmFkaWVudEVFRQogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0NvbnRleHQxOHNldFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdy
YXBoaWNzQ29udGV4dDE5c2V0SXNDQUxheWVyQ29udGV4dEViCiBfX1pON1dlYkNvcmUxNUdyYXBo
aWNzQ29udGV4dDIwZW5kVHJhbnNwYXJlbmN5TGF5ZXJFdgogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQyMHNldFNob3VsZFNtb290aEZvbnRzRWIKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3ND
b250ZXh0MjFzZXRDb21wb3NpdGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKQEAg
LTQ2Nyw2ICs0NzMsOCBAQCBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2
U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUxN3VzZXJWaXNpYmxlU3RyaW5nRVA1TlNVUkwKIF9fWk43
V2ViQ29yZTE4RE9NV2luZG93RXh0ZW5zaW9uQzFFUE5TXzVGcmFtZUVQTlNfMTVET01XcmFwcGVy
V29ybGRFCiBfX1pON1dlYkNvcmUxOEhUTUxDb250ZW50RWxlbWVudDZjcmVhdGVFUE5TXzhEb2N1
bWVudEUKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE3Z2VuZXJhbFBhc3RlYm9hcmRFdgorX19a
TjdXZWJDb3JlMTBQYXN0ZWJvYXJkMTR3cml0ZVBsYWluVGV4dEVSS04zV1RGNlN0cmluZ0VOUzBf
MThTbWFydFJlcGxhY2VPcHRpb25FCiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEw
dW5pcXVlTmFtZUV2CiBfX1pON1dlYkNvcmUxOFBsYXRmb3JtUGFzdGVib2FyZDEzYnVmZmVyRm9y
VHlwZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE4UGxhdGZvcm1QYXN0ZWJvYXJkMTNz
dHJpbmdGb3JUeXBlRVJLTjNXVEY2U3RyaW5nRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZhOGE5NzYuLjllMmE0MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE0NDAsNyArMTQ0MCw3IEBACiAJCTRBRDAxNzNEMTI3RTgyODYwMDE1MDM1RiAvKiBKU0hUTUxP
dXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QUQwMTczQjEyN0U4Mjg2MDAxNTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oICov
OyB9OwogCQk0QUYxQUQzRTEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRjFB
RDNDMTNGRDIzQTQwMEFBOTU5MCAvKiBFdmVudERpc3BhdGNoTWVkaWF0b3IuY3BwICovOyB9Owog
CQk0QUYxQUQzRjEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUYxQUQzRDEzRkQy
M0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdG
IC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi87IH07CisJ
CTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0Yg
LyogUGFzdGVib2FyZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRCMjcwOTgzMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA5ODEwQUYy
RTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMubW0gKi87IH07CiAJCTRCMzA0M0M3MEFFMDM3
MDMwMEE4MjY0NyAvKiBTb3VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEIzMDQzQzYwQUUwMzcwMzAwQTgyNjQ3IC8qIFNvdW5kLmggKi87IH07CiAJ
CTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBTb3VuZE1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M4MEFFMDM3MUQwMEE4MjY0NyAv
KiBTb3VuZE1hYy5tbSAqLzsgfTsKQEAgLTIyMjc3LDYgKzIyMjc3LDcgQEAKIAkJCWlzYSA9IFBC
WEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAorCQkJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDdFMjc2NTE2MDM2RUQyMDBFRTJBRkIgLyogRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzY5REIxNTA1RjA3
NjAwMUI3NEFDIC8qIEFic3RyYWN0RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRTFC
MUQxMEZGNTk4NjkwMDU3NkIzQiAvKiBBYnN0cmFjdFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNDU3NSw3ICsyNDU3Niw2IEBACiAJCQkJRkQzMTYwQTMxMkIwMjZGNzAwQzFBMzU5IC8qIFBh
bm5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NkFDMTMwREQ3QUQ1QzAwNDE1RjM0IC8qIFBh
cnNlclV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQ0ExMjUxRjEyRDAwM0VG
MjY5IC8qIFBhc3N3b3JkSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0QjI3MDhDNzBB
RjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkw
NTcxNEU5QzI4MDAwRThEMThCIC8qIFBhc3RlYm9hcmRTdHJhdGVneS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjI3NTM1ODAwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKaW5kZXgg
Yzc0NGFmNi4uOTMwY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCkBAIC0xMDYsMTAgKzEwNiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyKFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
cihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2Nyb2xsQ29y
bmVyUmVjdCgpIGNvbnN0ID0gMDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyKGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRS
ZWN0PiYpIGNvbnN0IHsgfQogCiAgICAgLy8gQ29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdl
ZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcgdmlldy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3
MTY2MzVhLi45Y2I5YTE0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwMCBAQAorMjAxMi0xMC0x
MyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBbd2sy
XSBJbXBsZW1lbnQgUERGUGx1Z2luCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05OTIwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBQREZQbHVnaW4sIHdoaWNoIHVzZXMgUERGS2l0IHRvIGRpc3BsYXkg
UERGcywgaW5zdGVhZCBvZiB1c2luZyBQREZLaXQgaW4gdGhlCisgICAgICAgIFVJUHJvY2VzcyBm
b3IgZnVsbC1wYWdlIFBERnMuIFRoaXMgbmV3IHBsdWdpbiB3aWxsIGFsc28gYmUgdXNlZCBmb3Ig
aW5saW5lIFBERnMKKyAgICAgICAgaW4gcGxhY2Ugb2YgU2ltcGxlUERGUGx1Z2luIChuw6llIEJ1
aWx0SW5QREZWaWV3KS4KKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVz
LnhjY29uZmlnOiBBZGQgRU5BQkxFX1BERl9QTFVHSU4uCisKKyAgICAgICAgU3VwcG9ydCB0aHJl
ZSBuZXcgUGx1Z2luIG1ldGhvZHM6CisgICAgICAgICAgICAtIGhhbmRsZUVkaXRpbmdDb21tYW5k
LCB3aGljaCBoYW5kcyBlZGl0aW5nIGNvbW1hbmRzIHRvIHRoZSBQbHVnaW4KKyAgICAgICAgICAg
IC0gaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQsIHdoaWNoIHZhbGlkYXRlcyBlZGl0aW5nIGNvbW1h
bmRzIHZpYSB0aGUgUGx1Z2luCisgICAgICAgICAgICAtIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3Is
IHdoaWNoIGFza3MgdGhlIHBsdWdpbiB3aGV0aGVyIGl0IHdhbnRzIHRvCisgICAgICAgICAgICBv
cHQgaW50byBhIG1vZGUgd2hlcmUgdGhlIFdlYlBhZ2UgZG9lc24ndCBzY2FsZSBpbiB0aGUgb3Jk
aW5hcnkgZmFzaGlvbiwKKyAgICAgICAgICAgIGJ1dCBpbnN0ZWFkIHByb3hpZXMgdGhlIFBsdWdp
bidzIHNjYWxlIGZhY3Rvciwgc28gZnVsbC1wYWdlIHBsdWdpbnMKKyAgICAgICAgICAgIGNhbiBo
YW5kbGUgc2NhbGUgZmFjdG9yIGNoYW5nZXMgaG93ZXZlciB0aGV5IG5lZWQgdG8uCisKKyAgICAg
ICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQpOiBQcm94
eSBoYW5kbGVFZGl0aW5nQ29tbWFuZCB0byB0aGUgUGx1Z2luLgorICAgICAgICAoV2ViS2l0OjpQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogUHJveHkgaXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQgdG8gdGhlIFBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6UGx1
Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKTogUHJveHkgaGFuZGxl
c1BhZ2VTY2FsZUZhY3RvciB0byB0aGUgUGx1Z2luLgorICAgICAgICAqIFBsdWdpblByb2Nlc3Mv
UGx1Z2luQ29udHJvbGxlclByb3h5Lmg6CisgICAgICAgIChQbHVnaW5Db250cm9sbGVyUHJveHkp
OiBBZGQgaGFuZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCBhbmQg
aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5tZXNzYWdlcy5pbjogQWRkIEhhbmRsZUVkaXRpbmdDb21tYW5kLCBJc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZCwgYW5kIEhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogTlBBUEkg
cGx1Z2lucyBzdXBwb3J0IG5vIGVkaXRpbmcgY29tbWFuZHMgYnkgZGVmYXVsdC4KKyAgICAgICAg
KFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKTogTlBBUEkg
cGx1Z2lucyBlbmFibGUgbm8gZWRpdGluZyBjb21tYW5kcyBieSBkZWZhdWx0LgorICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcik6IE5QQVBJIHBs
dWdpbnMgZG8gbm90IGhhbmRsZSBwYWdlIHNjYWxlIGZhY3RvciBjaGFuZ2VzIHRoZW1zZWx2ZXMg
YnkgZGVmYXVsdC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uaDogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5kRW5h
YmxlZCwgYW5kIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisKKyAgICAgICAgQWRkIFBERlBsdWdp
bkVuYWJsZWQgcHJlZmVyZW5jZS4gSWYgaXQgaXMgbm90IGVuYWJsZWQsIG9yIHRoZSBwbHVnaW4g
aXMKKyAgICAgICAgbm90IGJ1aWx0LCBiZWhhdmlvciB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9y
ZSAodGhlIFVJUHJvY2VzcyBQREZWaWV3IHdpbGwKKyAgICAgICAgaGFuZGxlIGZ1bGwtcGFnZSBQ
REZzLCBhbmQgU2ltcGxlUERGUGx1Z2luIHdpbGwgaGFuZGxlIGlubGluZSBvbmVzKS4KKworICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6IEFkZCBQREZQbHVnaW5FbmFibGVk
IHByZWZlcmVuY2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3Bw
OgorICAgICAgICAoV0tQcmVmZXJlbmNlc1NldFBERlBsdWdpbkVuYWJsZWQpOiBTZXR0ZXIgZm9y
IFBERlBsdWdpbkVuYWJsZWQgcHJlZmVyZW5jZS4KKyAgICAgICAgKFdLUHJlZmVyZW5jZXNHZXRQ
REZQbHVnaW5FbmFibGVkKTogR2V0dGVyIGZvciBQREZQbHVnaW5FbmFibGVkIHByZWZlcmVuY2Uu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6IEV4cG9z
ZSBXS1ByZWZlcmVuY2VzKFNldHxHZXQpUERGUGx1Z2luRW5hYmxlZCBhcyBhIHByaXZhdGUgcHJl
ZmVyZW5jZS4KKworICAgICAgICBNb3ZlIHN1cHBvcnQgZm9yIE1JTUUgdHlwZXMgd2l0aCBjdXN0
b20gcmVwcmVzZW50YXRpb25zIG9udG8gV2ViUGFnZSBpbnN0ZWFkIG9mIFdlYlByb2Nlc3MuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBwcmVmZXJlbmNlcyB0byBjb250cm9sIHRoZSB1
c2Ugb2YgY3VzdG9tIHJlcHJlc2VudGF0aW9ucyAoZm9yIGV4YW1wbGUsCisgICAgICAgIGl0IGFs
bG93cyB1cyB0byBoYXZlIGEgcHJlZmVyZW5jZSB0byB0b2dnbGUgYmV0d2VlbiBVSVByb2Nlc3Mn
IFBERlZpZXcgYW5kIFBERlBsdWdpbikuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZSk6IERvbid0IHBhc3MgbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJl
c2VudGF0aW9uCisgICAgICAgIGludG8gdGhlIFdlYlByb2Nlc3MsIGFzIHdlIGNhbiBjb21wdXRl
IGl0IGxhdGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
OjpkZWNvZGUpOiBTYW1lLCBvbiB0aGUgZGVjb2RlIHNpZGUuCisgICAgICAgICogU2hhcmVkL1dl
YlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDogUmVtb3ZlIG1pbWVUeXBlc1dpdGhDdXN0b21S
ZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nl
c3MpOiBEb24ndCBhZGQgcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcyB0byBtaW1lVHlwZXNXaXRo
Q3VzdG9tUmVwcmVzZW50YXRpb24gaGVyZSwgYXMgd2UncmUgbm93IGNvbXB1dGluZyBpdCBvbiBX
ZWJQYWdlIGluc3RlYWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpjYW5QbHVnaW5IYW5kbGVSZXNwb25zZSk6IE1vdmUgdG8gV2Vi
UGFnZSBmcm9tIFdlYlByb2Nlc3Mgc28gd2UgY2FuIHVzZSBXZWJQYWdlJ3MgbmV3IG5vdGlvbiBv
ZiBtaW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UpOiBNb3ZlIHRv
IFdlYlBhZ2UgZnJvbSBXZWJQcm9jZXNzIHNvIHdlIGNhbiB1c2UgV2ViUGFnZSdzIG5ldyBub3Rp
b24gb2YgbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcyk6IFJldHVybiB0aGUgc2V0IG9mIE1JTUUgdHlw
ZXMgdXNlZCBmb3IgUERGIGFuZCBQb3N0U2NyaXB0LCB3aGljaCBhcmUgaGFuZGxlZCB3aXRoIFBE
RlZpZXcgaWYgUERGUGx1Z2luIGlzIG5vdCBhdmFpbGFibGUgb3IgZW5hYmxlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
Ojppbml0aWFsaXplV2ViUHJvY2Vzcyk6IERvbid0IGtlZXAgbV9taW1lVHlwZXNXaXRoQ3VzdG9t
UmVwcmVzZW50YXRpb25zIG9uIFdlYlByb2Nlc3MsIGl0J3Mgb3duZWQgYnkgV2ViUGFnZSBub3cu
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmg6IE1vdmUgY2FuUGx1Z2luSGFuZGxl
UmVzcG9uc2UgYW5kIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UgdG8g
V2ViUGFnZS4KKworICAgICAgICBBZGQgUERGTGF5ZXJDb250cm9sbGVyIHRvIHRoZSBzZXQgb2Yg
Y2xhc3NlcyByZXR1cm5lZCBieSBQREZLaXRJbXBvcnRzLgorCisgICAgICAgICogU2hhcmVkL21h
Yy9QREZLaXRJbXBvcnRzLmg6IEFkZCBwZGZMYXllckNvbnRyb2xsZXJDbGFzcy4KKyAgICAgICAg
KiBTaGFyZWQvbWFjL1BERktpdEltcG9ydHMubW06CisgICAgICAgIChXZWJLaXQ6OnBkZkxheWVy
Q29udHJvbGxlckNsYXNzKTogRmluZCBhbmQgcmV0dXJuIHRoZSBQREZMYXllckNvbnRyb2xsZXIg
Y2xhc3MuCisKKyAgICAgICAgQWRkIFBERlBsdWdpbiwgd2hpY2ggaW5oZXJpdHMgZnJvbSBTaW1w
bGVQREZQbHVnaW4sIGJ1dCB1c2VzIFBERktpdCBpbnN0ZWFkCisgICAgICAgIG9mIENvcmVHcmFw
aGljcywgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGludGVyYWN0aXZlIGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJvY2Vzc1Byb3h5OjpzZW5kRGlkR2V0UGx1Z2lucyk6IEFkZCBQREZQbHVnaW4gdG8g
dGhlIHNldCBvZiBzdXBwb3J0ZWQgcGx1Z2lucy4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6IEFkZCBQREZQbHVnaW4sIHJlbmFtZSBCdWlsdEluUERGVmlldyB0
byBTaW1wbGVQREZQbHVnaW4uCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4uaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW06IEFkZGVkLgorCisgICAgICAgIFBERlBsdWdpbiB1c2VzIGxheWVycyBmb3Igc2Nyb2xs
YmFycy4KKworICAgICAgICAoLVtXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGluaXRXaXRoUERG
UGx1Z2luOldlYktpdDo6XSk6IEluaXRpYWxpemUgb3VyIENBTGF5ZXIgc3ViY2xhc3MsCisgICAg
ICAgIHN0b3JpbmcgaXRzIHBhcmVudCBQREZQbHVnaW4gc28gaXQgY2FuIGRlbGVnYXRlIGRyYXdp
bmcgdGhlcmUuCisgICAgICAgICgtW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgYWN0aW9uRm9y
S2V5Ol0pOiBEaXNhYmxlIENvcmVBbmltYXRpb24gaW1wbGljaXQgYWN0aW9ucy4KKyAgICAgICAg
KC1bV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBkcmF3SW5Db250ZXh0Ol0pOiBEZWxlZ2F0ZSBz
Y3JvbGxiYXIgZHJhd2luZyB0byBQREZQbHVnaW4uCisKKyAgICAgICAgSW1wbGVtZW50IHRoZSBQ
REZMYXllckNvbnRyb2xsZXIgZGVsZWdhdGUsIGV2ZW50dWFsbHkgZm9yd2FyZGluZyBjYWxscyBi
YWNrIHRvIFBERlBsdWdpbi4KKworICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVn
YXRlIGluaXRXaXRoUERGUGx1Z2luOldlYktpdDo6XSk6IEluaXRpYWxpemUgb3VyIGRlbGVnYXRl
LAorICAgICAgICBzdG9yaW5nIGl0cyBwYXJlbnQgUERGUGx1Z2luIHNvIGl0IGNhbiBmb3J3YXJk
IGRlbGVnYXRlIGNhbGxzIHRoZXJlLgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRl
bGVnYXRlIHVwZGF0ZVNjcm9sbFBvc2l0aW9uOl0pOiBVcGRhdGUgUERGUGx1Z2luJ3Mgbm90aW9u
IG9mIHRoZQorICAgICAgICBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiwgd2hlbiBQREZLaXQgY2hh
bmdlcyB0aGUgc2Nyb2xsIHBvc2l0aW9uIGl0c2VsZi4KKyAgICAgICAgKC1bV0tQREZMYXllckNv
bnRyb2xsZXJEZWxlZ2F0ZSB3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOndpdGhUeXBlczpdKTogV3Jp
dGUgdGhlIGdpdmVuCisgICAgICAgIGFycmF5IG9mIE5TRGF0YSBvYmplY3RzIHRvIHRoZSBwYXN0
ZWJvYXJkIHdpdGggdGhlIGdpdmVuIHR5cGVzLgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgUERG
TGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlIG1ldGhvZHMgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiB0
aGUgZnV0dXJlLgorCisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2hv
d0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOmF0UG9pbnQ6XSk6CisgICAgICAgICgtW1dL
UERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgcGVyZm9ybVdlYlNlYXJjaDpdKToKKyAgICAgICAg
KC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBvcGVuV2l0aFByZXZpZXddKToKKyAgICAg
ICAgKC1bV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSBzYXZlVG9QREZdKToKKworICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OlBERlBsdWdpbik6IFNldCB1cCB0aGUgcmVxdWlzaXRlIGxh
eWVyIGhpZXJhcmNoeSwgYW5kIGNyZWF0ZSBhIFBERkxheWVyQ29udHJvbGxlciAoYW5kIGl0cyBk
ZWxlZ2F0ZSBwcm94eSkuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6dXBkYXRlU2Nyb2xs
YmFycyk6IFVwZGF0ZSB0aGUgZnJhbWUgb2YgdGhlIGxheWVycyBob3N0aW5nIG91ciBzY3JvbGxi
YXJzLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcik6IENyZWF0
ZSBhIHNjcm9sbGJhciBhbmQgaG9zdGluZyBsYXllciwgYXR0YWNoaW5nIGl0cyBsYXllcgorICAg
ICAgICB0byBQREZQbHVnaW4ncyBjb250YWluZXIgbGF5ZXIuCisgICAgICAgIChXZWJLaXQ6OlBE
RlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcik6IERlc3Ryb3kgYSBzY3JvbGxiYXIsIGRldGFjaGlu
ZyBhbmQgZGVzdHJveWluZyBpdHMgaG9zdGluZyBsYXllciBpbiB0aGUgcHJvY2Vzcy4KKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQpOiBDYWxsZWQgd2hlbiB0
aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZzsgaGFuZAorICAgICAgICB0aGUgbG9hZGVkIGRv
Y3VtZW50IHRvIFBERktpdCwgdXBkYXRlIGFsbCBvZiBvdXIgc3RhdGUgKGNhY2hlZCBkb2N1bWVu
dCBzaXplLCBzY3JvbGxiYXJzLCBldGMuKSwgYW5kIHRoZW4gZXhlY3V0ZSBhbnkgc2NyaXB0cyBp
biB0aGUgZG9jdW1lbnQgKHRvIGFsbG93IGZvciBhdXRvbWF0aWMgcHJpbnRpbmcpLgorICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKTogRGV0ZXJtaW5lIHRoZSBzaXpl
IG9mIHRoZSBQREYgYW5kIGl0cyBwYWdlcy4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpk
ZXN0cm95KTogVGVhciBkb3duIHRoZSBsYXllciBoaWVyYXJjaHkuCisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6cGFpbnQpOiBQREZQbHVnaW4gaXMgbGF5ZXItYmFzZWQsIHNvIHdlIHBhaW50
IG5vdGhpbmcgaW50byB0aGUgdGlsZXMuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFp
bnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQpOiBTY3JvbGxiYXIgY29udHJvbHMgYXJlIGRyYXdu
IGludG8gbGF5ZXJzLCBidXQgdGhlaXIgcGFpbnRpbmcgaXMgZGVsZWdhdGVkIGhlcmUgZnJvbSBX
S1BERlBsdWdpblNjcm9sbGJhckxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnNu
YXBzaG90KTogUGVyZm9ybSBhIHBhaW50IGludG8gYSBiaXRtYXAgY29udGV4dC4KKyAgICAgICAg
KFdlYktpdDo6UERGUGx1Z2luOjpwbHVnaW5MYXllcik6IFJldHVybiBQREZQbHVnaW4ncyByb290
IGxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKTog
VGhlIHNpemUgb3Igc2NhbGUgb2YgdGhlIHBsdWdpbiBjaGFuZ2VkOyB1cGRhdGUKKyAgICAgICAg
UERGTGF5ZXJDb250cm9sbGVyJ3Mgbm90aW9uIG9mIHRoZSBzaXplIGFuZCBwYWdlIHNjYWxlLCBh
bmQgaW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFycy4KKworICAgICAgICBNb3VzZSBhbmQga2V5Ym9h
cmQgZXZlbnRzIGFyZSBjb252ZXJ0ZWQgYmFjayBpbnRvIE5TRXZlbnRzLCBidXQgd2l0aAorICAg
ICAgICBsb2NhdGlvbkluV2luZG93IGFjdHVhbGx5IGluIHRlcm1zIG9mIHRoZSBQREZQbHVnaW4n
cyBsYXllciwgbm90CisgICAgICAgIHRoZSB3aW5kb3cgKHNpbmNlIHRoZXJlIGlzIG5vIHdpbmRv
dykuCisKKyAgICAgICAgKFdlYktpdDo6bW9kaWZpZXJGbGFnc0Zyb21XZWJFdmVudCk6IENvbnN0
cnVjdCBhbiBBcHBLaXQtc3R5bGUgbW9kaWZpZXIgYml0bWFzayBmcm9tIFdlYkV2ZW50J3MgbW9k
aWZpZXIga2V5IGdldHRlcnMuCisgICAgICAgIChXZWJLaXQ6OmV2ZW50VHlwZUZyb21XZWJFdmVu
dCk6IFJldHVybiB0aGUgTlNFdmVudFR5cGUgZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gV2ViRXZl
bnQuIE9ubHkgc3VwcG9ydHMga2V5Ym9hcmQgYW5kIG1vdXNlIGV2ZW50cywgYW5kIG9ubHkgdGhl
IGxlZnQgYW5kIHJpZ2h0IG1vdXNlIGJ1dHRvbi4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2lu
OjpoYW5kbGVNb3VzZUV2ZW50KTogQ29uc3RydWN0IGEgY3VzdG9tIE5TRXZlbnQgZnJvbSB0aGUg
Z2l2ZW4gV2ViTW91c2VFdmVudCBhbmQgaGFuZCBpdCB0byBQREZMYXllckNvbnRyb2xsZXIuIE1v
dXNlIGNvb3JkaW5hdGVzIGFyZSBpbiB0ZXJtcyBvZiBtX2NvbnRlbnRMYXllcidzIG9yaWdpbi4K
KyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KTogQ29uc3Ry
dWN0IGEgY3VzdG9tIE5TRXZlbnQgZnJvbSB0aGUgZ2l2ZW4gV2ViS2V5Ym9hcmRFdmVudCBhbmQg
aGFuZCBpdCB0byBQREZMYXllckNvbnRyb2xsZXIuIFBERkxheWVyQ29udHJvbGxlciBjdXJyZW50
bHkgb25seSBoYW5kbGVzIGtleURvd24gZXZlbnRzLgorCisgICAgICAgIChXZWJLaXQ6OlBERlBs
dWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQpOiBIYW5kbGUgY29weSBhbmQgc2VsZWN0LWFsbCBj
b21tYW5kcywgYW5kIGZvcndhcmQgdGhlbSB0byBQREZMYXllckNvbnRyb2xsZXIuCisgICAgICAg
IChXZWJLaXQ6OlBERlBsdWdpbjo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQpOiBUaGUgJ2NvcHkn
IGNvbW1hbmQgc2hvdWxkIGJlIGVuYWJsZWQgaWYgdGhlcmUgaXMKKyAgICAgICAgdGhlIHVzZXIg
aGFzIHNlbGVjdGVkIGEgcGFydCBvZiB0aGUgUERGLiBUaGUgJ3NlbGVjdCBhbGwnIGNvbW1hbmQg
c2hvdWxkIGFsd2F5cyBiZSBlbmFibGVkLgorCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6
c2V0U2Nyb2xsT2Zmc2V0KTogVXBkYXRlIGJvdGggUERGUGx1Z2luIGFuZCBQREZMYXllckNvbnRy
b2xsZXIncyBub3Rpb24KKyAgICAgICAgb2YgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogSW52
YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xsYmFyIGxheWVyLgorICAgICAgICAoV2ViS2l0OjpQREZQ
bHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KTogSW52YWxpZGF0ZSB0aGUgd2hvbGUg
c2Nyb2xsIGNvcm5lciBsYXllci4KKworICAgICAgICBSZW5hbWUgQnVpbHRJblBERlZpZXcgdG8g
U2ltcGxlUERGUGx1Z2luLCB0byBkaWZmZXJlbnRpYXRlIGl0IGZyb20gUERGUGx1Z2luCisgICAg
ICAgIGFuZCB0byBiZXR0ZXIgZGVub3RlIGl0cyBpbmhlcml0YW5jZSBmcm9tIFBsdWdpbi4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLmg6IFJlbmFt
ZWQgZnJvbSBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmguCisgICAgICAg
IChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbik6IE1ha2UgbWV0aG9kcyBwcm90ZWN0ZWQgc28gUERG
UGx1Z2luIGNhbiBvdmVycmlkZSB0aGVtLiBSZW5hbWUgbV9wbHVnaW5TaXplIC0+IG1fc2l6ZSwg
YW5kIG1fZGF0YUJ1ZmZlci0+bV9kYXRhLgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVn
aW46OnNpemUpOiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgcGx1Z2luLgorICAgICAgICAoV2Vi
S2l0OjpTaW1wbGVQREZQbHVnaW46OnNldFNpemUpOiBTZXQgdGhlIHNpemUgb2YgdGhlIHBsdWdp
bi4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpwZGZEb2N1bWVudCk6IFJldHJp
ZXZlIHRoZSBjdXJyZW50bHkgcmVwcmVzZW50ZWQgUERGIGRvY3VtZW50LgorICAgICAgICAoV2Vi
S2l0OjpTaW1wbGVQREZQbHVnaW46OnNldFBERkRvY3VtZW50KTogU2V0IHRoZSBjdXJyZW50bHkg
cmVwcmVzZW50ZWQgUERGIGRvY3VtZW50LgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVn
aW46OnBkZkRvY3VtZW50U2l6ZSk6IFJldHJpZXZlIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIFBE
Ri4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpzZXRQREZEb2N1bWVudFNpemUp
OiBTZXQgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgUERGLgorICAgICAgICAoV2ViS2l0OjpTaW1w
bGVQREZQbHVnaW46OmRhdGEpOiBSZXRyaWV2ZSB0aGUgYWNjdW11bGF0ZWQgZG9jdW1lbnQgZGF0
YS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbTog
UmVuYW1lZCBmcm9tIFdlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0uCisg
ICAgICAgIChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbjo6Y29tcHV0ZVBhZ2VCb3hlcyk6IENvcGll
ZCBvdXQgb2YgY2FsY3VsYXRlU2l6ZXMoKSBzbyBQREZQbHVnaW4gY2FuIHVzZSBpdCB0b28uCisg
ICAgICAgIChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbjo6cnVuU2NyaXB0c0luUERGRG9jdW1lbnQp
OiBGYWN0b3JlZCBvdXQgb2YgcGRmRG9jdW1lbnREaWRMb2FkKCkgc28gUERGUGx1Z2luIGNhbiB1
c2UgaXQgdG9vLgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVnaW46OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyk6IEltcGxlbWVudCB0aGUgcmVtYWluaW5nIHNjcm9s
bGJhciBwb2ludCBjb252ZXJzaW9uIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxl
UERGUGx1Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIpOiBJbXBsZW1l
bnQgdGhlIHJlbWFpbmluZyBzY3JvbGxiYXIgcG9pbnQgY29udmVyc2lvbiBmdW5jdGlvbnMuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmg6CisgICAgICAgIChQbHVnaW4p
OiBBZGQgaGFuZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCBhbmQg
aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm94eTo6aGFuZGxlRWRpdGlu
Z0NvbW1hbmQpOiBQcm94eSBoYW5kbGVFZGl0aW5nQ29tbWFuZCB0byB0aGUgUGx1Z2luUHJvY2Vz
cy4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJveHk6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVk
KTogUHJveHkgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQKKyAgICAgICAgdG8gdGhlIFBsdWdpblBy
b2Nlc3MuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5OjpoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKTogUHJveHkgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcgorICAgICAgICB0byB0aGUgUGx1Z2lu
UHJvY2Vzcy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaDogQWRk
IGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCwKKyAgICAgICAg
YW5kIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpzZXRQYWdlU2Nh
bGVGYWN0b3IpOiBTZXQgdGhlIHBsdWdpbidzIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IuIEFs
c28sCisgICAgICAgIHVwZGF0ZSBXZWJQYWdlUHJveHkncyBub3Rpb24gb2YgdGhlIGN1cnJlbnQg
cGFnZVNjYWxlRmFjdG9yIHdoZW4gdGhpcyBpcyBjYWxsZWQuCisgICAgICAgIChXZWJLaXQ6OlBs
dWdpblZpZXc6OnBhZ2VTY2FsZUZhY3Rvcik6IFJldHVybiB0aGUgcGx1Z2luJ3MgY3VycmVudCBw
YWdlIHNjYWxlIGZhY3Rvci4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aGFuZGxlRWRp
dGluZ0NvbW1hbmQpOiBQcm94eSBoYW5kbGVFZGl0aW5nQ29tbWFuZCB0byB0aGUgcGx1Z2luLgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6IFBy
b3h5IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkIHRvIHRoZSBwbHVnaW4uCisgICAgICAgICogV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaDoKKyAgICAgICAgKFBsdWdpblZpZXcpOiBBZGQg
aGFuZGxlRWRpdGluZ0NvbW1hbmQsIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLAorICAgICAgICBz
ZXRQYWdlU2NhbGVGYWN0b3IvcGFnZVNjYWxlRmFjdG9yLCBhbmQgaGFuZGxlc1BhZ2VTY2FsZUZh
Y3Rvci4gQWRkIG1fcGFnZVNjYWxlRmFjdG9yLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKTogUHJveHkgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvciB0
byB0aGUgcGx1Z2luLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVu
dDo6cmVzdG9yZVZpZXdTdGF0ZSk6IERvbid0IHVwZGF0ZSBXZWJQYWdlUHJveHkncyBub3Rpb24g
b2YgdGhlIHNjYWxlIGZhY3RvciBpZiBpdCBzaG91bGQgYmUgdGhlIGRlZmF1bHQuCisgICAgICAg
IChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9t
Q2FjaGVkRnJhbWUpOiBNYWtlIHVzZSBvZiBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZv
clJlc3BvbnNlIG9uIFdlYlBhZ2UgaW5zdGVhZCBvZiBXZWJQcm9jZXNzLgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFn
ZSk6IE1ha2UgdXNlIG9mIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2Ug
b24gV2ViUGFnZSBpbnN0ZWFkIG9mIFdlYlByb2Nlc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjcmVhdGVQbHVn
aW4pOiBDcmVhdGUgYSBQREZQbHVnaW4gaWYgYXBwcm9wcmlhdGUgKGlmIGl0IGlzIGJ1aWx0IGFu
ZCB0aGUgc2V0dGluZyBpcyBlbmFibGVkKS4KKyAgICAgICAgKFdlYktpdDo6cGx1Z2luVmlld0Zv
ckZyYW1lKTogUmV0dXJuIHRoZSBQbHVnaW5WaWV3IGZvciB0aGUgZ2l2ZW4gZnJhbWUgaWYgaXRz
IGRvY3VtZW50IGlzIGEgUGx1Z2luRG9jdW1lbnQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZCk6IEF0dGVtcHQgdG8gZXhlY3V0ZSBlZGl0aW5nIGNvbW1h
bmRzIG9uIHRoZQorICAgICAgICBjdXJyZW50bHkgZm9jdXNlZCAob3IgbWFpbi1mcmFtZSkgcGx1
Z2luLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZCk6
IFZhbGlkYXRlIGVkaXRpbmcgY29tbWFuZHMgYWdhaW5zdCB0aGUKKyAgICAgICAgY3VycmVudGx5
IGZvY3VzZWQgKG9yIG1haW4tZnJhbWUpIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c2NhbGVQYWdlKTogSWYgdGhlIHBsdWdpbiByZXBvcnRzIHRoYXQgaXQgaGFuZGxlcyBwYWdl
IHNjYWxlIGZhY3RvcgorICAgICAgICBpdHNlbGYsIGhhbmQgaXQgdGhlIG5ldyBzY2FsZSBpbnN0
ZWFkIG9mIFdlYkNvcmUuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBhZ2VTY2FsZUZhY3Rv
cik6IElmIHRoZSBwbHVnaW4gcmVwb3J0cyB0aGF0IGl0IGhhbmRsZXMgcGFnZSBzY2FsZQorICAg
ICAgICBmYWN0b3IgaXRzZWxmLCByZXR1cm4gaXRzIG5vdGlvbiBvZiB0aGUgY3VycmVudCBzY2Fs
ZSBpbnN0ZWFkIG9mIFdlYkNvcmUncy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmFsaWRh
dGVDb21tYW5kKTogVmFsaWRhdGUgZWRpdGluZyBjb21tYW5kcyBhZ2FpbnN0IHRoZQorICAgICAg
ICBjdXJyZW50bHkgZm9jdXNlZCAob3IgbWFpbi1mcmFtZSkgcGx1Z2luLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6IFVwZGF0ZSBtX3BkZlBsdWdpbkVuYWJs
ZWQgZ2l2ZW4gdGhlIHJlbGV2YW50IFdlYlByZWZlcmVuY2UuCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmUGx1Z2lu
RW5hYmxlZCk6IFJldHVybiB3aGV0aGVyIG9yIG5vdCBQREZQbHVnaW4gc2hvdWxkIGJlIHVzZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNldFBERlBsdWdpbkVuYWJsZWQpOiBTZXQgd2hl
dGhlciBvciBub3QgUERGUGx1Z2luIHNob3VsZCBiZSB1c2VkLgorCisKIDIwMTItMTAtMTEgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5n
IGRlcHJlY2F0ZWRTZW5kIGZvciBXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnIGIvU291cmNlL1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmlu
ZXMueGNjb25maWcKaW5kZXggY2U0MWQzMC4uM2Y0MGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKKysrIGIvU291cmNl
L1dlYktpdDIvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKQEAgLTExNiw2
ICsxMTYsMTEgQEAgRU5BQkxFX05PVElGSUNBVElPTlNfbWFjb3N4XzEwNzAgPSA7CiBFTkFCTEVf
Tk9USUZJQ0FUSU9OU19tYWNvc3hfMTA4MCA9IEVOQUJMRV9OT1RJRklDQVRJT05TOwogRU5BQkxF
X05PVElGSUNBVElPTlNfbWFjb3N4XzEwOTAgPSBFTkFCTEVfTk9USUZJQ0FUSU9OUzsKIEVOQUJM
RV9QQUdFX1ZJU0lCSUxJVFlfQVBJID0gOworRU5BQkxFX1BERktJVF9QTFVHSU4gPSAkKEVOQUJM
RV9QREZLSVRfUExVR0lOXyQoUkVBTF9QTEFURk9STV9OQU1FKSk7CitFTkFCTEVfUERGS0lUX1BM
VUdJTl9tYWNvc3ggPSAkKEVOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8kKFRBUkdFVF9NQUNf
T1NfWF9WRVJTSU9OX01BSk9SKSk7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA3MCA9
IDsKK0VOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8xMDgwID0gOworRU5BQkxFX1BERktJVF9Q
TFVHSU5fbWFjb3N4XzEwOTAgPSBFTkFCTEVfUERGS0lUX1BMVUdJTjsKIEVOQUJMRV9QUk9HUkVT
U19FTEVNRU5UID0gRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQ7CiBFTkFCTEVfUVVPVEEgPSA7CiBF
TkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJBTUUgPSBFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05f
RlJBTUU7CkBAIC0xNDMsNCArMTQ4LDQgQEAgRU5BQkxFX1dJREdFVF9SRUdJT04gPSA7CiBFTkFC
TEVfV09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsK
IAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9BQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxFX0JMT0Ip
ICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChFTkFCTEVf
Q1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykgJChFTkFC
TEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVfQ1NTX0hJ
RVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxFX0NTU19J
TUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NTX1NIQURF
UlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJQUJMRVMp
ICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NIRU1FX0hB
TkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElTVF9FTEVN
RU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxTX0VMRU1F
TlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VMRU1FTlQp
ICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAkKEVOQUJM
RV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBBRCkgJChF
TkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRM
SU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFTRSkgJChF
TkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAkKEVOQUJM
RV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxFX0lOUFVU
X1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVfSU5QVVRf
VFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVOQUJMRV9J
TlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVfSkFWQVND
UklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMpICQoRU5B
QkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMpICQoRU5B
QkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5BQkxFX0xJ
TktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJDRSkgJChF
TkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChFTkFCTEVf
TUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJWRVJTKSAk
KEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FUSU9OUykg
JChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkg
JChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJM
RV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxFX1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9X
T1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJBU0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChF
TkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19G
T05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0laSU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElP
TlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFH
RVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wp
ICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9U
SU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJT04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxF
X1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJM
RV9BQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICQoRU5BQkxFX0FOSU1BVElPTl9BUEkpICQoRU5BQkxF
X0JMT0IpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9DU1BfTkVYVCkgJChF
TkFCTEVfQ1NTX0JPWF9ERUNPUkFUSU9OX0JSRUFLKSAkKEVOQUJMRV9DU1NfRVhDTFVTSU9OUykg
JChFTkFCTEVfQ1NTX0NPTVBPU0lUSU5HKSAkKEVOQUJMRV9DU1NfRklMVEVSUykgJChFTkFCTEVf
Q1NTX0hJRVJBUkNISUVTKSAkKEVOQUJMRV9DU1NfSU1BR0VfT1JJRU5UQVRJT04pICQoRU5BQkxF
X0NTU19JTUFHRV9SRVNPTFVUSU9OKSAkKEVOQUJMRV9DU1NfUkVHSU9OUykgJChFTkFCTEVfQ1NT
X1NIQURFUlMpICQoRU5BQkxFX0NTU19TVElDS1lfUE9TSVRJT04pICQoRU5BQkxFX0NTU19WQVJJ
QUJMRVMpICQoRU5BQkxFX0NTUzNfVEVYVF9ERUNPUkFUSU9OKSAkKEVOQUJMRV9DVVNUT01fU0NI
RU1FX0hBTkRMRVIpICQoRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JUKSAkKEVOQUJMRV9EQVRBTElT
VF9FTEVNRU5UKSAkKEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TKSAkKEVOQUJMRV9ERVRBSUxT
X0VMRU1FTlQpICQoRU5BQkxFX0RFVklDRV9PUklFTlRBVElPTikgJChFTkFCTEVfRElBTE9HX0VM
RU1FTlQpICQoRU5BQkxFX0RJUkVDVE9SWV9VUExPQUQpICQoRU5BQkxFX0ZJTEVfU1lTVEVNKSAk
KEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSkgJChFTkFCTEVfR0FNRVBB
RCkgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0hJRERFTl9QQUdFX0RPTV9USU1FUl9U
SFJPVFRMSU5HKSAkKEVOQUJMRV9ISUdIX0RQSV9DQU5WQVMpICQoRU5BQkxFX0lDT05EQVRBQkFT
RSkgJChFTkFCTEVfSUZSQU1FX1NFQU1MRVNTKSAkKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFKSAk
KEVOQUJMRV9JTlBVVF9TUEVFQ0gpICQoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IpICQoRU5BQkxF
X0lOUFVUX1RZUEVfREFURSkgJChFTkFCTEVfSU5QVVRfVFlQRV9EQVRFVElNRSkgJChFTkFCTEVf
SU5QVVRfVFlQRV9EQVRFVElNRUxPQ0FMKSAkKEVOQUJMRV9JTlBVVF9UWVBFX01PTlRIKSAkKEVO
QUJMRV9JTlBVVF9UWVBFX1RJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfV0VFSykgJChFTkFCTEVf
SkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTEVHQUNZX0NTU19WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9OT1RJRklDQVRJT05TKSAkKExFR0FDWV9WRU5ET1JfUFJFRklYRVMp
ICQoRU5BQkxFX0xFR0FDWV9XRUJfQVVESU8pICQoRU5BQkxFX0xJTktfUFJFRkVUQ0gpICQoRU5B
QkxFX0xJTktfUFJFUkVOREVSKSAkKEVOQUJMRV9NQVRITUwpICQoRU5BQkxFX01FRElBX1NPVVJD
RSkgJChFTkFCTEVfTUVESUFfU1RBVElTVElDUykgJChFTkFCTEVfTUVURVJfRUxFTUVOVCkgJChF
TkFCTEVfTUhUTUwpICQoRU5BQkxFX01JQ1JPREFUQSkgJChFTkFCTEVfTVVUQVRJT05fT0JTRVJW
RVJTKSAkKEVOQUJMRV9OQVZJR0FUT1JfQ09OVEVOVF9VVElMUykgJChFTkFCTEVfTk9USUZJQ0FU
SU9OUykgJChFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSkgJChFTkFCTEVfUERGS0lUX1BMVUdJ
TikgJChFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCkgJChFTkFCTEVfUVVPVEEpICQoRU5BQkxFX1JF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAkKEVOQUJMRV9TQ1JJUFRFRF9TUEVFQ0gpICQoRU5BQkxF
X1NIQURPV19ET00pICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TUUxfREFUQUJB
U0UpICQoRU5BQkxFX1NUWUxFX1NDT1BFRCkgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdfRE9N
X09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfVEVYVF9BVVRPU0la
SU5HKSAkKEVOQUJMRV9URVhUX05PVElGSUNBVElPTlNfT05MWSkgJChFTkFCTEVfVE9VQ0hfSUNP
Tl9MT0FESU5HKSAkKEVOQUJMRV9VTkRPX01BTkFHRVIpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJM
RV9WSURFT19UUkFDSykgJChFTkFCTEVfV0VCR0wpICQoRU5BQkxFX1dFQl9BVURJTykgJChFTkFC
TEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dFQl9USU1JTkcpICQoRU5BQkxFX1dJREdFVF9SRUdJ
T04pICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hTTFQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCmluZGV4IDMx
YTVkNjEuLjE3YzE2YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3Mv
UGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKQEAgLTUyMSw2ICs1MjEsMjEgQEAgdm9pZCBQ
bHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9h
cmRFdmVudCYga2V5Ym9hcmQKICAgICBoYW5kbGVkID0gbV9wbHVnaW4tPmhhbmRsZUtleWJvYXJk
RXZlbnQoa2V5Ym9hcmRFdmVudCk7CiB9CiAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpo
YW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJp
bmcmIGFyZ3VtZW50LCBib29sJiBoYW5kbGVkKQoreworICAgIGhhbmRsZWQgPSBtX3BsdWdpbi0+
aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKK30KKyAgICAKK3Zv
aWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lLCBib29sJiBlbmFibGVkKQoreworICAgIGVuYWJsZWQgPSBtX3Bs
dWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQorICAgIAordm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoYm9vbCYgZW5h
YmxlZCkKK3sKKyAgICBlbmFibGVkID0gbV9wbHVnaW4tPmhhbmRsZXNQYWdlU2NhbGVGYWN0b3Io
KTsKK30KKwogdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnBhaW50RW50aXJlUGx1Z2luKCkK
IHsKICAgICBpZiAobV9wbHVnaW5TaXplLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCmluZGV4IGI0YTQwNjcu
LjE5ZWUxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2lu
Q29udHJvbGxlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuaApAQCAtMTM3LDYgKzEzNyw5IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYsIGJvb2wmIGhhbmRs
ZWQpOwogICAgIHZvaWQgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
LCBib29sJiBoYW5kbGVkKTsKICAgICB2b2lkIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2Vi
S2V5Ym9hcmRFdmVudCYsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaGFuZGxlRWRpdGluZ0Nv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwg
Ym9vbCYgaGFuZGxlZCk7CisgICAgdm9pZCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lkIGhhbmRsZXNQYWdl
U2NhbGVGYWN0b3IoYm9vbCYgZW5hYmxlZCk7CiAgICAgdm9pZCBwYWludEVudGlyZVBsdWdpbigp
OwogICAgIHZvaWQgc25hcHNob3QoU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGJhY2tpbmdTdG9y
ZUhhbmRsZSk7CiAgICAgdm9pZCBzZXRGb2N1cyhib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2Fn
ZXMuaW4KaW5kZXggZDdjMmQwMi4uMDY3MWEyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5Lm1lc3NhZ2Vz
LmluCkBAIC03Myw2ICs3MywxNSBAQCBtZXNzYWdlcyAtPiBQbHVnaW5Db250cm9sbGVyUHJveHkg
ewogCiAgICAgIyBTZW50IHdoZW4gYSBrZXlib2FyZCBzaG91bGQgYmUgcHJvY2Vzc2VkLgogICAg
IEhhbmRsZUtleWJvYXJkRXZlbnQoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50IGtleWJvYXJkRXZl
bnQpIC0+IChib29sIGhhbmRsZWQpCisgICAgCisgICAgIyBTZW50IHdoZW4gYW4gZWRpdGluZyBj
b21tYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQuCisgICAgSGFuZGxlRWRpdGluZ0NvbW1hbmQoV1RG
OjpTdHJpbmcgY29tbWFuZE5hbWUsIFdURjo6U3RyaW5nIGFyZ3VtZW50KSAtPiAoYm9vbCBoYW5k
bGVkKTsKKyAgICAKKyAgICAjIFJldHVybiB3aGV0aGVyIG9yIG5vdCBhIHBsdWdpbiB3YW50cyB0
byBlbmFibGUgdGhlIGdpdmVuIGVkaXRpbmcgY29tbWFuZC4KKyAgICBJc0VkaXRpbmdDb21tYW5k
RW5hYmxlZChXVEY6OlN0cmluZyBjb21tYW5kTmFtZSkgLT4gKGJvb2wgZW5hYmxlZCk7CisgICAg
CisgICAgIyBSZXR1cm4gd2hldGhlciBvciBub3QgYSBwbHVnaW4gd2FudHMgdG8gaGFuZGxlIHBh
Z2Ugc2NhbGUgZmFjdG9yIGl0c2VsZi4KKyAgICBIYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgLT4g
KGJvb2wgZW5hYmxlZCk7CiAKICAgICAjIFNlbnQgd2hlbiB0aGUgcGx1Zy1pbiBmb2N1cyBjaGFu
Z2VzLgogICAgIFNldEZvY3VzKGJvb2wgaXNGb2N1c2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmgKaW5kZXggMWUzY2E2My4uMTg1ODk4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCkBAIC0xMzcsNiArMTM3LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgbWFjcm8oU2NyZWVuRm9udFN1YnN0aXR1dGlvbkVu
YWJsZWQsIHNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkLCBCb29sLCBib29sLCBERUZBVUxU
X1NDUkVFTl9GT05UX1NVQlNUSVRVVElPTl9FTkFCTEVEKSBcCiAgICAgbWFjcm8oQ29va2llRW5h
YmxlZCwgY29va2llRW5hYmxlZCwgQm9vbCwgYm9vbCwgdHJ1ZSkgXAogICAgIG1hY3JvKFBsdWdJ
blNuYXBzaG90dGluZ0VuYWJsZWQsIHBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQsIEJvb2wsIGJv
b2wsIGZhbHNlKSBcCisgICAgbWFjcm8oUERGUGx1Z2luRW5hYmxlZCwgcGRmUGx1Z2luRW5hYmxl
ZCwgQm9vbCwgYm9vbCwgZmFsc2UpIFwKICAgICBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfV0VCS0lU
X0RPVUJMRV9QUkVGRVJFTkNFKG1hY3JvKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggODAwMzBhYy4uMDEy
MzRmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtNjYsNyArNjYsNiBAQCB2b2lkIFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbgogICAgIGVuY29kZXItPmVuY29kZSh1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTm9BY2Nlc3Mp
OwogICAgIGVuY29kZXItPmVuY29kZSh1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzRGlzcGxheUlzb2xh
dGVkKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NPUlNFbmFi
bGVkKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUobWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0
aW9uKTsKICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGNhY2hlTW9kZWwpOwogICAgIGVuY29kZXIt
PmVuY29kZShzaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHNo
b3VsZEFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGgpOwpAQCAtMTQ3LDggKzE0Niw2IEBAIGJv
b2wgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgV2ViCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JTRW5hYmxl
ZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYXJh
bWV0ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0ocGFyYW1ldGVycy5jYWNoZU1v
ZGVsKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHBh
cmFtZXRlcnMuc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMGQ1NDNmYS4u
Zjk1NDhkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oCkBAIC02OSw5ICs2OSw2IEBAIHN0cnVjdCBXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJl
ZEFzRGlzcGxheUlzb2xhdGVkOwogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNSZWdpc3Rl
cmVkQXNDT1JTRW5hYmxlZDsKIAotICAgIC8vIE1JTUUgdHlwZXMgZm9yIHdoaWNoIHRoZSBVSSBw
cm9jZXNzIHdpbGwgaGFuZGxlIHNob3dpbmcgdGhlIGRhdGEuCi0gICAgVmVjdG9yPFN0cmluZz4g
bWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uOwotCiAgICAgQ2FjaGVNb2RlbCBjYWNo
ZU1vZGVsOwogICAgIGJvb2wgc2hvdWxkVHJhY2tWaXNpdGVkTGlua3M7CiAKQEAgLTExMyw2ICsx
MTAsNyBAQCBzdHJ1Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAKICAgICBib29s
IHNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbjsKICAgICBib29sIHNob3VsZEVuYWJs
ZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQ7CisKICNlbGlmIFBMQVRGT1JNKFdJTikKICAg
ICBTdHJpbmcgY2ZVUkxDYWNoZVBhdGg7CiAgICAgdWludDY0X3QgY2ZVUkxDYWNoZURpc2tDYXBh
Y2l0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0
cy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLmgKaW5kZXggNDRj
Mzc1Yy4uYzlhMWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZL
aXRJbXBvcnRzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
LmgKQEAgLTMzLDYgKzMzLDEwIEBAIENsYXNzIGNsYXNzRnJvbVBERktpdChOU1N0cmluZyAqY2xh
c3NOYW1lKTsKIENsYXNzIHBkZkFubm90YXRpb25MaW5rQ2xhc3MoKTsKIENsYXNzIHBkZkRvY3Vt
ZW50Q2xhc3MoKTsKIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorQ2xhc3MgcGRmTGF5ZXJD
b250cm9sbGVyQ2xhc3MoKTsKKyNlbmRpZgorCiB9CiAKICNlbmRpZiAvLyBQREZLaXRJbXBvcnRz
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5tbQppbmRleCA2MjM0
YTgzLi5iY2NmYmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktp
dEltcG9ydHMubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QREZLaXRJbXBvcnRz
Lm1tCkBAIC01NCw1ICs1NCwxNCBAQCBDbGFzcyBwZGZEb2N1bWVudENsYXNzKCkKICAgICBBU1NF
UlQocGRmRG9jdW1lbnRDbGFzcyk7CiAgICAgcmV0dXJuIHBkZkRvY3VtZW50Q2xhc3M7CiB9Cisg
ICAgCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCitDbGFzcyBwZGZMYXllckNvbnRyb2xsZXJD
bGFzcygpCit7CisgICAgc3RhdGljIENsYXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNzID0gY2xh
c3NGcm9tUERGS2l0KEAiUERGTGF5ZXJDb250cm9sbGVyIik7CisgICAgQVNTRVJUKHBkZkxheWVy
Q29udHJvbGxlckNsYXNzKTsKKyAgICByZXR1cm4gcGRmTGF5ZXJDb250cm9sbGVyQ2xhc3M7Cit9
CisjZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXMuY3BwCmluZGV4IGVjY2UyMDUuLjUzMmQ4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKQEAgLTkzMywzICs5MzMsMTMg
QEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewogICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5wbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkKCk7CiB9CisKK3ZvaWQgV0tQcmVmZXJl
bmNlc1NldFBERlBsdWdpbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwg
Ym9vbCBlbmFibGVkKQoreworICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBERlBsdWdp
bkVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK2Jvb2wgV0tQcmVmZXJlbmNlc0dldFBERlBsdWdpbkVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+cGRmUGx1Z2luRW5hYmxlZCgpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRl
eCBjMDI2MTFjLi5hZjVmNzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtMjIzLDYgKzIyMywxMCBAQCBXS19F
WFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2NyZWVuRm9udFN1YnN0aXR1dGlvbkVuYWJsZWQo
V0tQcmVmZXJlbmNlc1JlZiBwcgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvb2tp
ZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcywgYm9vbCBlbmFibGVkKTsKIFdL
X0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRDb29raWVFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXMpOwogCisvLyBEZWZhdWx0cyB0byBmYWxzZQorV0tfRVhQT1JUIHZvaWQg
V0tQcmVmZXJlbmNlc1NldFBERlBsdWdpbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlcywgYm9vbCBlbmFibGVkKTsKK1dLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRQREZQ
bHVnaW5FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMpOworCiBXS19FWFBPUlQg
dm9pZCBXS1ByZWZlcmVuY2VzUmVzZXRUZXN0UnVubmVyT3ZlcnJpZGVzKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggMmUwYzk0Zi4uZWY3NDY4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKQEAgLTQ2
LDcgKzQ2LDEwIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBQTEFU
Rk9STShNQUMpCi0jaW5jbHVkZSAiQnVpbHRJblBERlZpZXcuaCIKKyNpbmNsdWRlICJTaW1wbGVQ
REZQbHVnaW4uaCIKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKyNpbmNsdWRlICJQREZQbHVn
aW4uaCIKKyNlbmRpZgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMzA1
LDggKzMwOCwxMiBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnModWlu
dDY0X3QgcmVxdWVzdElELCBQYXNzT3duUHRyPFZlY3RvcjxQbAogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNlZCB3aGVu
IGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KICAgICAvLyBOT1RFOiBUaGlzIGhhcyB0byBi
ZSBkb25lIG9uIHRoZSBtYWluIHRocmVhZCBhcyBpdCBjYWxscyBsb2NhbGl6ZWRTdHJpbmcoKS4K
LSAgICBpZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkKLSAgICAgICAgcGx1Z2lucy0+
YXBwZW5kKEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5JbmZvKCkpOworICAgIGlmICghbV9jb250ZXh0
LT5vbWl0UERGU3VwcG9ydCgpKSB7CisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisgICAgICAg
IHBsdWdpbnMtPmFwcGVuZChQREZQbHVnaW46OnBsdWdpbkluZm8oKSk7CisjZW5kaWYKKyAgICAg
ICAgcGx1Z2lucy0+YXBwZW5kKFNpbXBsZVBERlBsdWdpbjo6cGx1Z2luSW5mbygpKTsKKyAgICB9
CiAjZW5kaWYKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpZEdldFBsdWdpbnMo
cmVxdWVzdElELCAqcGx1Z2lucyksIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XZWJDb250ZXh0TWFjLm1tCmluZGV4IDE1YWEwNTAuLmJiYjk4MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW0KQEAgLTc3LDEyICs3Nyw2IEBA
IHZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhCiB7CiAgICAgcGFyYW1ldGVycy5wcmVzZW50ZXJBcHBs
aWNhdGlvblBpZCA9IGdldHBpZCgpOwogCi0gICAgaWYgKCFvbWl0UERGU3VwcG9ydCgpKSB7Ci0g
ICAgICAgIC8vIFdlIHdhbnQgdG8gdXNlIGEgUERGIHZpZXcgaW4gdGhlIFVJIHByb2Nlc3MgZm9y
IFBERiBNSU1FIHR5cGVzLgotICAgICAgICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNo
PiBtaW1lVHlwZSA9IHBkZkFuZFBvc3RTY3JpcHRNSU1FVHlwZXMoKTsKLSAgICAgICAgcGFyYW1l
dGVycy5taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24uYXBwZW5kUmFuZ2UobWltZVR5
cGUuYmVnaW4oKSwgbWltZVR5cGUuZW5kKCkpOwotICAgIH0KLQogICAgIHBhcmFtZXRlcnMucGFy
ZW50UHJvY2Vzc05hbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1l
XTsgICAgCiAKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNhY2hlUGF0aChBZG9wdENGLCBX
S0NvcHlGb3VuZGF0aW9uQ2FjaGVEaXJlY3RvcnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDBiMGJjZi4uNmU2ZTllMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMjU4LDYgKzI1OCw3IEBACiAJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBXS0Fj
Y2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjlDRDU1QTkxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3QubW0gKi87IH07CiAJCTI5RDU1REYxMTYxQkY5RjEwMDMxQTJFMyAv
KiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ1NURFRjE2MUJGOUYxMDAzMUEyRTMgLyog
V2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyOUQ1NURGMjE2
MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERjAxNjFCRjlGMTAwMzFB
MkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLzsgfTsKKwkJMkQ4NzBEMTAxNjIz
NEZGRTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEODcwRDBFMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4u
bW0gKi87IH07CiAJCTMxMDk5OTczMTQ2Qzc1QTIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25D
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwOTk5NzExNDZDNzU5QjAwMjlERUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgKi87
IH07CiAJCTMxMDk5OUM3MTQ2QzlFM0QwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDk5OTY4
MTQ2QzcxRjUwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAqLzsgfTsKIAkJMzEy
QzBDNEExNDZEREM4QTAwMTZDOTExIC8qIFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkMwQzQ5MTQ2RERDOEEw
MDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkzNCw3ICs5MzUsNyBAQAogCQlFMTk1ODJE
NjE1M0NDMDU0MDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTU4MkQ0MTUzQ0MwNTMwMEI2MDg3NSAvKiBQ
REZLaXRJbXBvcnRzLm1tICovOyB9OwogCQlFMTk2N0UzNjE1MEFCNUQ1MDBDNzMxNjkgLyogY29t
LmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNTE1MEFCNUQ1MDBDNzMxNjkgLyogY29tLmFw
cGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiICovOyB9OwogCQlFMTk2N0UzODE1MEFCNUUyMDBD
NzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTY3RTM3MTUwQUI1RTIwMEM3MzE2OSAvKiBjb20u
YXBwbGUuV2ViUHJvY2Vzcy5zYiAqLzsgfTsKLQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8q
IEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICov
OyB9OworCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5OTg3NUMxNDJC
RkM5NzAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSAqLzsgfTsKIAkJRTFBMzE3MzIxMzRD
RUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRy
aWJ1dGVkU3RyaW5nLmggKi87IH07CiAJCUUxQTMxNzM1MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRy
aWJ1dGVkU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi87
IH07CiAJCUUxQUVBMjJGMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dh
dGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
QUVBMjJEMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAq
LzsgfTsKQEAgLTEzMzMsNiArMTMzNCw4IEBACiAJCTI5RDU1REVFMTYxQkY4NzgwMDMxQTJFMyAv
KiBXZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQYWdlR3JvdXBQcm94eS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERUYxNjFCRjlG
MTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlENTVERjAxNjFCRjlG
MTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkyRDg3MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2lu
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBERlBsdWdpbi5oOyBwYXRoID0g
UERGL1BERlBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDg3MEQwRTE2
MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL1BERlBsdWdpbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NjgxNDZDNzFGNTAwMjlERUI5IC8qIFdl
Yk5vdGlmaWNhdGlvbkNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwOTk5NzExNDZDNzU5QjAwMjlE
RUI5IC8qIFdlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTJDMEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Q
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05vdGlmaWNhdGlv
blByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDY2LDggKzIwNjks
OCBAQAogCQlFMTk1ODJENDE1M0NDMDUzMDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBERktpdEltcG9ydHMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBj
b20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nlc3Muc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
Y29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Mu
c2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gY29tLmFwcGxlLldlYlByb2Nlc3Muc2I7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWls
dEluUERGVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCdWlsdEluUERG
Vmlldy5oOyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEJ1aWx0SW5QREZWaWV3Lm1t
OyBwYXRoID0gUERGL0J1aWx0SW5QREZWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNpbXBsZVBERlBsdWdpbi5oOyBwYXRoID0gUERG
L1NpbXBsZVBERlBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTk5ODc1
QzE0MkJGQzk3MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gU2ltcGxlUERGUGx1Z2luLm1tOyBwYXRoID0gUERGL1Np
bXBsZVBERlBsdWdpbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzEx
MzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXR0cmlidXRlZFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQUVBMjJEMTQ2ODdCREIwMDgwNDU2
OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zODk3LDggKzM5MDAsMTAgQEAKIAkJRTE5OTg3NUIxNDJCRjlDRjAw
QkIyREU3IC8qIFBERiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tICovLAot
CQkJCUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5oICovLAorCQkJ
CTJEODcwRDBEMTYyMkI3RjkwMDBBM0YyMCAvKiBQREZQbHVnaW4uaCAqLywKKwkJCQkyRDg3MEQw
RTE2MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLm1tICovLAorCQkJCUUxOTk4NzVDMTQyQkZD
OTcwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4ubW0gKi8sCisJCQkJRTE5OTg3NUExNDJCRjlC
ODAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBQREY7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDgxMiw2ICs0ODE3LDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1RDUxODQ1NTEz
QkNGOUNDMDBDN0ZGNEEgLyogQVBJQ2xpZW50VHJhaXRzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCNjM0MDNGOTE0OTEwRDU3MDAxMDcwQjUgLyogQVBJT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBM0Q2MTA1MTNBN0YwM0EwMEY5NUQ0RSAvKiBBcmd1bWVudENvZGVycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxQUFGMEM0QjEyQjE2MzM0MDA4RTQ5RTIgLyogQXJndW1lbnRD
b2RlcnNDRi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ4MjgsNyArNDgzNCw3IEBACiAJCQkJMUE2
NDI1NjkxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxQTY0MjkyRDEyREU1Rjk4MDBDQUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFDNDFBQzgxMjYzQzg4MzAwMDU0RTk0IC8qIEJpbmFyeVNlbWFwaG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJERTcgLyogQnVp
bHRJblBERlZpZXcubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMTk5ODc1RTE0MkMwNDU0MDBCQjJE
RTcgLyogU2ltcGxlUERGUGx1Z2luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0
QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkQ5
NTcwMTI4NDg1NjQwMDFFQjk2MiAvKiBDaGlsZFByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUE2RjlGQjcxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRMaW5lTWFjLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggZTI4Yzc4ZC4uNWFmMDcyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCkBAIC05MTMsNiArOTEzLDIxIEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
a2V5Ym9hcmRFdmVudCkKICAgICByZXR1cm4gcGxhdGZvcm1IYW5kbGVLZXlib2FyZEV2ZW50KGtl
eWJvYXJkRXZlbnQpOwogfQogCitib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29t
bWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBOZXRzY2FwZVBsdWdpbjo6aXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisgICAgCitib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgTmV0c2NhcGVQbHVnaW46OnNl
dEZvY3VzKGJvb2wgaGFzRm9jdXMpCiB7CiAgICAgQVNTRVJUKG1faXNTdGFydGVkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmgKaW5kZXggNjFlMmJiNy4uMjk5NTNmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luLmgKQEAgLTIwMyw2ICsyMDMsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7CiAgICAgdmlydHVhbCBi
b29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFZGl0
aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3Ry
aW5nJik7CisgICAgCisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsK
KwogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOwogCiAj
aWYgUExBVEZPUk0oTUFDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9CdWlsdEluUERGVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxYzg4MjlkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvQnVpbHRJblBERlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBCdWlsdEluUERGVmlld19oCi0jZGVmaW5lIEJ1aWx0
SW5QREZWaWV3X2gKLQotI2luY2x1ZGUgIlBsdWdpbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsYWJsZUFyZWEuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLXR5cGVkZWYgY29u
c3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1Y3Qg
T3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU1ZhbHVlUmVmOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IFBs
dWdpbkluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBQbHVnaW5WaWV3Owot
Y2xhc3MgV2ViRnJhbWU7Ci0KLWNsYXNzIEJ1aWx0SW5QREZWaWV3IDogcHVibGljIFBsdWdpbiwg
cHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8QnVpbHRJblBERlZpZXc+IGNyZWF0ZShXZWJGcmFtZSopOwotICAgIH5CdWlsdElu
UERGVmlldygpOwotCi0gICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1Z2luSW5mbygp
OwotCi0gICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFzeW5jaHJvbm91
cyBpbml0aWFsaXphdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5jaHJvbm91c2x5
SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi1wcml2YXRlOgotICAgIGV4
cGxpY2l0IEJ1aWx0SW5QREZWaWV3KFdlYkZyYW1lKik7Ci0KLSAgICAvLyBSZWd1bGFyIHBsdWct
aW5zIGRvbid0IG5lZWQgYWNjZXNzIHRvIHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBl
bWJlZGRpbmcgRnJhbWVWaWV3IGZvciBwcm9wZXIgZXZlbnQgaGFuZGxpbmcuCi0gICAgUGx1Z2lu
VmlldyogcGx1Z2luVmlldygpOwotICAgIGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBj
b25zdDsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOwotICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50
YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbik7Ci0gICAgdm9pZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKLSAgICB2b2lkIHBkZkRv
Y3VtZW50RGlkTG9hZCgpOwotICAgIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB2b2lkIHBh
aW50QmFja2dyb3VuZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBkaXJ0eVJlY3QpOwotICAgIHZvaWQgcGFpbnRDb250ZW50KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9p
ZCBwYWludENvbnRyb2xzKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGRpcnR5UmVjdCk7Ci0KLSAgICAvLyBQbHVnLWluIG1ldGhvZHMKLSAgICB2aXJ0
dWFsIGJvb2wgaW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7Ci0gICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRl
cyk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFw
c2hvdCgpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
dWdpbkxheWVyKCk7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpOwot
ICAgIHZpcnR1YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNp
emUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pOwotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpYmlsaXR5RGlkQ2hhbmdlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmluaXNo
TG9hZGluZyh1aW50NjRfdCByZXF1ZXN0SUQpOwotICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZh
aWwodWludDY0X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmlu
ZyYgcmVzdWx0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVp
bnQ2NF90IHN0cmVhbUlELCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMy
X3Qgc3RyZWFtTGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
RmlsZU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRf
dCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKTsKLSAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxs
ZWQpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWlu
dDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBXVEY6OlN0cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7
Ci0gICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGJ5dGVzLCBpbnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmlu
aXNoTG9hZGluZygpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wg
d2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBX
ZWJNb3VzZUV2ZW50Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3Qg
V2ViV2hlZWxFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUxlYXZl
RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250
ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFu
ZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEZvY3VzKGJvb2wpOwotICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFi
bGVOUE9iamVjdCgpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93
Rm9jdXNDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVz
Q2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRp
bmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0
ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpOwotICAgIHZp
cnR1YWwgdWludDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0
SW5wdXQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGlu
Z01vZGUpIE9WRVJSSURFOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUJsb2Nr
aW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcm
IGZvcm1WYWx1ZSk7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpTY3Jv
bGxEaXJlY3Rpb24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotCi0gICAgdmlydHVhbCBSZXRh
aW5QdHI8UERGRG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX3BkZkRvY3VtZW50OyB9Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBtZXRo
b2RzLgotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6
OkludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9y
aWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
V2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFdl
YkNvcmU6OlNjcm9sbGJhciopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAg
IHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1hdG9yTWFjIHdp
bGwga2VlcCBjeWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBnb29kIHRpbWUg
dG8gYW5pbWF0ZS4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCBu
ZXdTdHlsZSwgYm9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGUgb3RoZXIgY29udmVyc2lvbiBmdW5jdGlvbnM7IHRoaXMgb25lIGlzIGVub3VnaCB0
byBnZXQgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nIHdvcmtpbmcuCi0gICAgdmlydHVhbCBXZWJDb3Jl
OjpJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2Vi
Q29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBvaW50KSBj
b25zdCBPVkVSUklERTsKLQotICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRvYyhKU0NvbnRleHRS
ZWYpOwotICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmLCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGx1Z2luU2l6ZTsKLQotICAgIFdlYkNv
cmU6OktVUkwgbV9zb3VyY2VVUkw7Ci0KLSAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxlbmFtZTsK
LSAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhQnVmZmVyOwotCi0gICAgUmV0
YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OwotICAgIFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiBtX3BhZ2VCb3hlczsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRT
aXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgotCi0gICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0KLSAgICBXZWJGcmFtZSogbV9mcmFtZTsK
LQotICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEJ1aWx0SW5QREZWaWV3X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3Lm1tCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGNhZWE5Li4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcubW0KKysrIC9k
ZXYvbnVsbApAQCAtMSw4ODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBv
cnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQnVpbHRJblBERlZpZXcuaCIKLQotI2ltcG9ydCAiUERG
S2l0SW1wb3J0cy5oIgotI2ltcG9ydCAiUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiU2hhcmVhYmxl
Qml0bWFwLmgiCi0jaW1wb3J0ICJXZWJFdmVudC5oIgotI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJz
aW9uLmgiCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaD4KLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgot
I2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3Vy
Y2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFk
ZXJNYXAuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xs
QW5pbWF0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgdm9pZCBh
cHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0aW9uYXJ5UmVmIHN1
YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKLXsKLSAgICBDR1BERkFycmF5
UmVmIG5hbWVzOwotICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShzdWJ0cmVlLCAiTmFt
ZXMiLCAmbmFtZXMpKSB7Ci0gICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBDR1BERkFycmF5R2V0
Q291bnQobmFtZXMpIC8gMjsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lQ291
bnQ7ICsraSkgewotICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0OwotICAgICAgICAg
ICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2JqZWN0KTsKLSAgICAg
ICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQ0dQREZBcnJheVJlZiBraWRzOwotICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRzKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZEaWN0aW9u
YXJ5UmVmIGtpZDsKLSAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlvbmFyeShraWRzLCBp
LCAma2lkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcHBlbmRWYWx1ZXNJblBE
Rk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOwotICAgIH0KLX0KLQotc3RhdGljIHZv
aWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlSZWYgdHJlZSwgVmVj
dG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQotewotICAgIGFwcGVuZFZhbHVlc0luUERG
TmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOwotfQotCi1zdGF0aWMgdm9pZCBn
ZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBkZkRvY3VtZW50LCBW
ZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQotewotICAgIGlmICghcGRm
RG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHUERGRGljdGlvbmFyeVJlZiBwZGZD
YXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQpOwotICAgIGlmICgh
cGRmQ2F0YWxvZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBkaWN0aW9uYXJ5
IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgotICAgIENHUERGRGljdGlvbmFyeVJl
ZiBuYW1lc0RpY3Rpb25hcnk7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5
KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0IiBuYW1lIHRyZWUu
Ci0gICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsKLSAgICBpZiAoIUNH
UERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAiSmF2YVNjcmlwdCIs
ICZqYXZhU2NyaXB0TmFtZVRyZWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgbmFt
ZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgdmFsdWVzLgot
ICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKLSAgICBnZXRBbGxWYWx1ZXNJblBE
Rk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7Ci0gICAgc2l6ZV90IG9iamVj
dENvdW50ID0gb2JqZWN0cy5zaXplKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdENvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHRB
Y3Rpb247Ci0gICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWludGVycHJldF9jYXN0
PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlwZURpY3Rpb25hcnks
ICZqYXZhU2NyaXB0QWN0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8v
IEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBlIG9mICJKYXZhU2Ny
aXB0Ii4KLSAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKLSAgICAgICAgaWYgKCFDR1BE
RkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFjdGlvblR5cGUpIHx8
IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKLSAgICAgICAgQ0ZJbmRleCBsZW5n
dGg7Ci0gICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKLSAgICAgICAgQ0dQREZTdHJpbmdS
ZWYgc3RyaW5nOwotICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgICAgICBp
ZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJl
YW0pKSB7Ci0gICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0OwotICAgICAgICAgICAg
ZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9ybWF0KSk7Ci0gICAg
ICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBsZW5n
dGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoQ0dQ
REZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIsICZzdHJpbmcpKSB7
Ci0gICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihzdHJpbmcpOwotICAg
ICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoIWJ5dGVzKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Q0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5dGVzWzBdID09IDB4
RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1VuaWNvZGUgOiBrQ0ZT
dHJpbmdFbmNvZGluZ1VURjg7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0
KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ5
dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7Ci0gICAgICAgIGlmICghc2NyaXB0KQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgc2NyaXB0cy5hcHBlbmQoc2NyaXB0KTsKLSAg
ICB9Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jb25zdCB1aW50NjRfdCBwZGZEb2N1bWVu
dFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMgbG9hZGluZyBtdWx0
aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgotCi1jb25zdCBpbnQg
Z3V0dGVySGVpZ2h0ID0gMTA7Ci1jb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9IDA7Ci1jb25zdCBp
bnQgc2hhZG93T2Zmc2V0WSA9IC0yOwotY29uc3QgaW50IHNoYWRvd1NpemUgPSA3OwotCi1QYXNz
UmVmUHRyPEJ1aWx0SW5QREZWaWV3PiBCdWlsdEluUERGVmlldzo6Y3JlYXRlKFdlYkZyYW1lKiBm
cmFtZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1aWx0SW5QREZWaWV3KGZyYW1lKSk7
Ci19Ci0KLUJ1aWx0SW5QREZWaWV3OjpCdWlsdEluUERGVmlldyhXZWJGcmFtZSogZnJhbWUpCi0g
ICAgOiBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1CdWlsdEluUERGVmlldzo6fkJ1aWx0SW5QREZW
aWV3KCkKLXsKLX0KLQotUGx1Z2luSW5mbyBCdWlsdEluUERGVmlldzo6cGx1Z2luSW5mbygpCi17
Ci0gICAgUGx1Z2luSW5mbyBpbmZvOwotICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5QREZQbHVnaW5O
YW1lKCk7Ci0KLSAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87Ci0gICAgbWltZUNsYXNz
SW5mby50eXBlID0iYXBwbGljYXRpb24vcGRmIjsKLSAgICBtaW1lQ2xhc3NJbmZvLmRlc2MgPSBw
ZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOwotICAgIG1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5hcHBlbmQoInBkZiIpOwotCi0gICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNsYXNzSW5mbyk7
Ci0gICAgcmV0dXJuIGluZm87Ci19Ci0KLVBsdWdpblZpZXcqIEJ1aWx0SW5QREZWaWV3OjpwbHVn
aW5WaWV3KCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRyb2xs
ZXIoKSk7Ci19Ci0KLWNvbnN0IFBsdWdpblZpZXcqIEJ1aWx0SW5QREZWaWV3OjpwbHVnaW5WaWV3
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+KGNv
bnRyb2xsZXIoKSk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMo
KQotewotICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBt
X3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewot
ICAgICAgICBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNpemUud2lk
dGgoKSkKLSAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
Ci0gICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXpl
LndpZHRoKCkpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSAgICB9IGVsc2UgaWYgKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRT
aXplLmhlaWdodCgpKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDog
MDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFy
ICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJv
eGVzLmlzRW1wdHkoKSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKLQotICAgIGlmICht
X2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fcGx1Z2luU2l6ZS53aWR0
aCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7
Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2lu
VmlldygpLT55KCkgKyBtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxi
YXItPmhlaWdodCgpLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAg
ICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAw
KTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFy
UmVjdCk7Ci0gICAgfQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9u
KG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRm
RG9jdW1lbnRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KElu
dFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3BsdWdpblNpemUud2lkdGgoKSAtIG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT53aWR0aCgpLCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QoMCwg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpOwotICAgIGlm
ICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc1Njcm9sbGJhcnMg
PSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBpZiAo
aGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGlmIChoYXNTY3JvbGxi
YXJzKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLQotICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gQnVpbHRJblBERlZpZXc6OmNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRh
dGlvbiwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgIGRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpKTsKLSAgICBlbHNlIAotICAgICAgICBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQu
Z2V0KCkpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5hZGRDaGlsZCh3aWRn
ZXQuZ2V0KCkpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwotfQotCi12b2lkIEJ1aWx0
SW5QREZWaWV3OjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNh
bFNjcm9sbGJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHdpbGxSZW1v
dmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7Ci0gICAgZWxzZQotICAgICAg
ICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKLQotICAgIHNj
cm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZy
b21TY3JvbGxhYmxlQXJlYSgpOwotICAgIHNjcm9sbGJhciA9IDA7Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OmFkZEFyY2hpdmVSZXNvdXJjZSgpCi17Ci0gICAgLy8gRklYTUU6IEl0J3MgYSBo
YWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVyLiBQREYgZG9jdW1l
bnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2VzLgotCi0gICAgLy8g
QWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGluZyBhbmQgd2ViIGFy
Y2hpdmVzIHRvIHdvcmsuCi0gICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVzaXplZFJlc3BvbnNl
OwotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUobV9zdWdnZXN0
ZWRGaWxlbmFtZSk7Ci0gICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwobV9zb3VyY2VVUkwp
OyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVQREZVUkwuCi0g
ICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRpb24vcGRmIik7Ci0K
LSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6
Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkpLCBtX3Nv
dXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3ludGhlc2l6
ZWRSZXNwb25zZSk7Ci0gICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5sb2Fk
ZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnBkZkRvY3VtZW50RGlkTG9hZCgpCi17Ci0gICAgYWRkQXJjaGl2ZVJl
c291cmNlKCk7Ci0KLSAgICBtX3BkZkRvY3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNz
KCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopbV9kYXRhQnVmZmVyLmdldCgpXSk7Ci0K
LSAgICBjYWxjdWxhdGVTaXplcygpOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAgIGNv
bnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fcGx1Z2luU2l6ZS53aWR0aCgp
LCBtX3BsdWdpblNpemUuaGVpZ2h0KCkpKTsKLQotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+ID4gc2NyaXB0czsKLSAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZE
b2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOwotCi0gICAgc2l6ZV90IHNjcmlw
dENvdW50ID0gc2NyaXB0cy5zaXplKCk7Ci0gICAgaWYgKCFzY3JpcHRDb3VudCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENy
ZWF0ZSgwKTsKLSAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7Ci0gICAgICAg
IEpTU3RyaW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNb
aV0uZ2V0KCkpOwotICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRv
YywgMCwgMCwgMCk7Ci0gICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOwotICAgIH0KLQot
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6Y2FsY3VsYXRlU2l6ZXMoKQotewotICAgIHNpemVfdCBwYWdlQ291bnQgPSBDR1BERkRvY3Vt
ZW50R2V0TnVtYmVyT2ZQYWdlcyhbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1bWVudFJlZl0pOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFnZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dQ
REZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5n
ZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLSAgICAgICAgQVNTRVJUKHBkZlBhZ2UpOwotCi0g
ICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERkNy
b3BCb3gpOwotICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQotICAgICAgICAgICAgYm94
ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7Ci0gICAgICAg
IG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOwotICAgICAgICBtX3BkZkRvY3VtZW50
U2l6ZS5zZXRXaWR0aChtYXgobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSwgc3RhdGljX2Nhc3Q8
aW50Pihib3guc2l6ZS53aWR0aCkpKTsKLSAgICAgICAgbV9wZGZEb2N1bWVudFNpemUuZXhwYW5k
KDAsIGJveC5zaXplLmhlaWdodCk7Ci0gICAgfQotICAgIG1fcGRmRG9jdW1lbnRTaXplLmV4cGFu
ZCgwLCBndXR0ZXJIZWlnaHQgKiAobV9wYWdlQm94ZXMuc2l6ZSgpIC0gMSkpOwotfQotCi1ib29s
IEJ1aWx0SW5QREZWaWV3Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
Ci17Ci0gICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCi0gICAgbV9zb3VyY2VVUkwg
PSBwYXJhbWV0ZXJzLnVybDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNlTWFudWFsTG9h
ZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCi0gICAgICAgIGNvbnRyb2xsZXIoKS0+
bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmlu
ZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2Up
OwotCi0gICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmRlc3Ryb3koKQotewotICAgIGlmICht
X2ZyYW1lKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNv
cmVGcmFtZSgpLT52aWV3KCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNjcm9sbGFi
bGVBcmVhKHRoaXMpOwotICAgIH0KLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNj
cm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgY29udGVudEFyZWFXaWxsUGFp
bnQoKTsKLQotICAgIHBhaW50QmFja2dyb3VuZChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7
Ci0KLSAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGxvYWRpbmcgcHJvZ3Jl
c3MuCi0gICAgICAgIHJldHVybjsKLQotICAgIHBhaW50Q29udGVudChncmFwaGljc0NvbnRleHQs
IGRpcnR5UmVjdCk7Ci0gICAgcGFpbnRDb250cm9scyhncmFwaGljc0NvbnRleHQsIGRpcnR5UmVj
dCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnBhaW50QmFja2dyb3VuZChHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsK
LSAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3JheSwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChkaXJ0eVJlY3QpOwot
fQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludENvbnRlbnQoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0gICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwot
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25IaWdoKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZEFudGlhbGlhcyh0
cnVlKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZFNtb290aEZvbnRzKHRydWUpOwot
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFj
ZURldmljZVJHQik7Ci0KLSAgICBncmFwaGljc0NvbnRleHQtPmNsaXAoZGlydHlSZWN0KTsKLSAg
ICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7Ci0gICAgY29udGVudFJlY3QubW92ZUJ5
KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xh
dGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci0K
LSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7Ci0KLSAgICBpbnQgcGFnZVRv
cCA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhZ2VCb3hlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBtX3BhZ2VCb3hlc1tpXTsKLSAgICAgICAg
ZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0gbWF4KHJvdW5kZigobV9wbHVnaW5TaXpl
LndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4wZiksIDAuMGYpOwotICAgICAgICBmbG9h
dCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9wYWdlQm94ZXMuc2l6ZSgpID09IDEpID8g
bWF4KHJvdW5kZigobV9wbHVnaW5TaXplLmhlaWdodCgpIC0gcGFnZUJveC5oZWlnaHQoKSArIHNo
YWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsKLQotICAgICAgICBpZiAocGFnZVRvcCA+
IGNvbnRlbnRSZWN0Lm1heFkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAocGFn
ZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgKyBndXR0
ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7Ci0gICAgICAgICAgICBDR1BERlBhZ2VSZWYg
cGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3Vt
ZW50UmVmXSwgaSArIDEpOwotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4dHJhT2Zmc2V0Rm9yQ2Vu
dGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZIC0gcGFnZUJv
eC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKLQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09mZnNldFkpLCBzaGFk
b3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKLSAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+Y2xlYXJTaGFkb3coKTsKLQotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGlwKHBhZ2VCb3gpOwotCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3UERGUGFnZShjb250ZXh0
LCBwZGZQYWdlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAg
ICAgICB9Ci0gICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQoKSArIGd1dHRlckhlaWdo
dDsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1wYWdlQm94Lmhl
aWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKLSAgICB9Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
OnBhaW50Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhpY3NDb250ZXh0KTsKLSAgICAgICAgSW50UmVjdCBzY3Jv
bGxiYXJEaXJ0eVJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgICAgIHNjcm9sbGJhckRpcnR5UmVjdC5t
b3ZlQnkocGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueCgpLCAt
cGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS55KCkpOwotCi0gICAgICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnBhaW50KGdy
YXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLQotICAgICAgICBpZiAobV92ZXJ0
aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnBhaW50KGdy
YXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyRGlydHlSZWN0KTsKLSAgICB9Ci0KLSAgICBJbnRSZWN0
IGRpcnR5Q29ybmVyUmVjdCA9IGludGVyc2VjdGlvbihzY3JvbGxDb3JuZXJSZWN0KCksIGRpcnR5
UmVjdCk7Ci0gICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAs
IGdyYXBoaWNzQ29udGV4dCwgZGlydHlDb3JuZXJSZWN0KTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0
KQotewotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRzKCkp
OwotCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0g
ICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKLSAgICBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBCdWlsdEluUERGVmlldzo6c25hcHNob3QoKQotewotICAgIHJldHVybiAwOwot
fQotCi0jaWYgUExBVEZPUk0oTUFDKQotUGxhdGZvcm1MYXllciogQnVpbHRJblBERlZpZXc6OnBs
dWdpbkxheWVyKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmlzVHJhbnNwYXJlbnQoKQotewotICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGJl
IGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OndhbnRzV2hlZWxF
dmVudHMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKQotewotICAgIGlmIChtX3BsdWdpblNpemUgPT0gcGx1Z2luU2l6ZSkgewotICAgICAgICAv
LyBOb3RoaW5nIHRvIGRvLgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9wbHVnaW5T
aXplID0gcGx1Z2luU2l6ZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7Ci19Ci0KLXZvaWQgQnVp
bHRJblBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2UoKQotewotfQotCi12b2lkIEJ1aWx0SW5Q
REZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmZyYW1lRGlkRmFpbCh1aW50
NjRfdCwgYm9vbCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBCdWls
dEluUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0
cmluZyYpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3Qg
S1VSTCYsIHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHN0
cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAgICBtX3N1Z2dl
c3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Ci19Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRS
ZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5n
dGgpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1l
bnRSZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFtX2RhdGFCdWZmZXIpCi0gICAgICAgIG1fZGF0YUJ1
ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotCi0gICAgQ0ZEYXRhQXBw
ZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRG
aW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3Ry
ZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIHBkZkRvY3Vt
ZW50RGlkTG9hZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRGYWlsKHVp
bnQ2NF90IHN0cmVhbUlELCBib29sIHdhc0NhbmNlbGxlZCkKLXsKLSAgICBBU1NFUlRfVU5VU0VE
KHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7Ci0KLSAgICBtX2Rh
dGFCdWZmZXIuY2xlYXIoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFt
RGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBzdHJl
YW1MZW5ndGgsICB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUpCi17Ci0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOwotfQot
Ci12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBieXRlcywgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fZGF0YUJ1ZmZlcikKLSAgICAg
ICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7Ci0KLSAg
ICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6
Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQotewotICAgIHBkZkRvY3VtZW50RGlkTG9h
ZCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wp
Ci17Ci0gICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgc3dp
dGNoIChldmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6Ci0gICAg
ICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91bGQgYWxzbyBz
ZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2Vi
RXZlbnQ6Ok1vdXNlRG93bjogewotICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2UgYXMgd2lsbCBt
YWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBhcHByb3ByaWF0
ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCi0gICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxk
bid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkgZGlkIHRoYXQg
Zm9yIHVzLgotICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBpcyBhZGRlZCwg
d2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNsaWNraW5nIGlu
IGEgZm9ybS4KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNl
VXA6IHsKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9y
bShldmVudCk7Ci0gICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0gICAgICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldo
ZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFBsYXRmb3JtV2hlZWxFdmVudCBwbGF0Zm9ybUV2ZW50
ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hl
ZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxl
TW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQotewotICAgIG1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZW
aWV3OjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAg
bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBC
dWlsdEluUERGVmlldzo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JikKLXsKLSAgICAvLyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBtZW51LgotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlS2V5Ym9hcmRFdmVudChj
b25zdCBXZWJLZXlib2FyZEV2ZW50JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
QnVpbHRJblBERlZpZXc6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCi17Ci19Ci0KLU5QT2JqZWN0
KiBCdWlsdEluUERGVmlldzo6cGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0KCkKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotdm9pZCBCdWlsdEluUERGVmlldzo6d2lu
ZG93Rm9jdXNDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OndpbmRv
d0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdpbmRvd0ZyYW1l
SW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlld0ZyYW1lSW5X
aW5kb3dDb29yZGluYXRlcykKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6d2luZG93Vmlz
aWJpbGl0eUNoYW5nZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6Y29udGVu
dHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpCi17Ci19Ci0KLXVpbnQ2NF90IEJ1aWx0SW5QREZW
aWV3OjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNlbmRDb21wbGV4VGV4dElucHV0KGNv
bnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldExheWVySG9zdGlu
Z01vZGUoTGF5ZXJIb3N0aW5nTW9kZSkKLXsKLX0KLQotI2VuZGlmCi0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1
aWx0SW5QREZWaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKLXsKLX0KLQot
Ym9vbCBCdWlsdEluUERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCi17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVTY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAg
cmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLX0KLQotU2Nyb2xsYmFyKiBC
dWlsdEluUERGVmlldzo6aG9yaXpvbnRhbFNjcm9sbGJhcigpCi17Ci0gICAgcmV0dXJuIG1faG9y
aXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKLX0KLQotU2Nyb2xsYmFyKiBCdWlsdEluUERGVmlldzo6
dmVydGljYWxTY3JvbGxiYXIoKQotewotICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdl
dCgpOwotfQotCi1JbnRSZWN0IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29u
c3QKLXsKLSAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9s
bGJhcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgewotICAgICAgICBBU1NFUlQobV92ZXJ0aWNh
bFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpOwotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotICAgIH0KLSAgICByZXR1cm4gSW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgo
KSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci19Ci0KLVNjcm9sbGFibGVBcmVh
KiBCdWlsdEluUERGVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewotICAg
IC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFi
bGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVyLgotICAgIHJldHVybiAwOwotfQotCi1JbnRS
ZWN0IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKTsKLX0KLQotdm9pZCBCdWlsdElu
UERGVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAg
bV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54KCksIG9mZnNldC55KCkpOwotICAgIC8v
IEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBlcmZvcm1hbmNlIHRvIGJsaXQgcGFydHMg
dGhhdCByZW1haW4gdmlzaWJsZS4KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVj
dCgwLCAwLCBtX3BsdWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Ci19
Ci0KLWludCBCdWlsdEluUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3QKLXsKLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgob3JpZW50
YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxiYXIgOiBt
X3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9s
bGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKLX0KLQot
Ym9vbCBCdWlsdEluUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBjb3JlRnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiBwYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIEludFJlY3QgZGlydHlSZWN0
ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7Ci0g
ICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKLSAgICBjb250
cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmll
dzo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVjdCk7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZp
ZXc6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAotewotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCk7Ci0g
ICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6c2Ny
b2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNl
dC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7Ci19Ci0KLUludFBvaW50IEJ1aWx0
SW5QREZWaWV3OjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRQb2ludCgwLCAwKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBERlZpZXc6Om1heGltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAwOwot
ICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIgJiYg
IW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCkgOiAwOwotCi0gICAgSW50UG9pbnQgbWF4aW11bU9mZnNldChtX3Bk
ZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9wbHVnaW5TaXplLndpZHRoKCkgKyB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fcGx1Z2luU2l6ZS5o
ZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwotICAgIG1heGltdW1PZmZzZXQu
Y2xhbXBOZWdhdGl2ZVRvWmVybygpOwotICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OwotfQotCi1p
bnQgQnVpbHRJblBERlZpZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3BsdWdpblNpemUuaGVpZ2h0KCk7Ci19Ci0KLWludCBCdWlsdEluUERGVmlldzo6dmlzaWJsZVdp
ZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbHVnaW5TaXplLndpZHRoKCk7Ci19Ci0KLUlu
dFNpemUgQnVpbHRJblBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fcGRmRG9jdW1lbnRTaXplOwotfQotCi1ib29sIEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxiYXJz
Q2FuQmVBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiAhcGx1Z2luVmlldygpLT5mcmFtZSgp
LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpz
Y3JvbGxiYXJTdHlsZUNoYW5nZWQoaW50LCBib29sIGZvcmNlVXBkYXRlKQotewotICAgIGlmICgh
Zm9yY2VVcGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBQREYgd2FzIHNj
cm9sbGVkIGFsbCB0aGUgd2F5IHRvIGJvdHRvbSByaWdodCBhbmQgc2Nyb2xsYmFycyBjaGFuZ2Ug
dG8gb3ZlcmxheSBzdHlsZSwgd2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IHdoaXRlIHJlY3Rhbmds
ZXMgd2hlcmUgc2Nyb2xsYmFycyB3ZXJlLgotICAgIEludFBvaW50IG5ld1Njcm9sbE9mZnNldCA9
IEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KS5zaHJ1bmtUbyhtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSk7Ci0gICAgc2V0U2Nyb2xsT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICAvLyBBcyBz
aXplIG9mIHRoZSBjb250ZW50IGFyZWEgY2hhbmdlcywgc2Nyb2xsYmFycyBtYXkgbmVlZCB0byBh
cHBlYXIgb3IgdG8gZGlzYXBwZWFyLgotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLQotICAgIFNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1Jlc2l6ZWQoKTsKLX0KLQotSW50UG9pbnQgQnVpbHRJblBE
RlZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAg
IEludFBvaW50IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRU
b1JlbmRlcmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBv
aW50Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigp
KTsKLQotICAgIHJldHVybiBwb2ludDsKLX0KLQotc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFs
aXplKEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBCdWlsdElu
UERGVmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmplY3RH
ZXRQcml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPnJlZigpOwotfQotCi1zdGF0aWMgdm9p
ZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0UmVmIG9iamVjdCkKLXsKLSAgICBCdWlsdEluUERG
VmlldyogcGRmVmlldyA9IHN0YXRpY19jYXN0PEJ1aWx0SW5QREZWaWV3Kj4oSlNPYmplY3RHZXRQ
cml2YXRlKG9iamVjdCkpOwotICAgIHBkZlZpZXctPmRlcmVmKCk7Ci19Ci0KLUpTVmFsdWVSZWYg
QnVpbHRJblBERlZpZXc6OmpzUERGRG9jUHJpbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmll
dyo+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0KLSAgICBXZWJGcmFtZSogZnJh
bWUgPSBwZGZWaWV3LT5tX2ZyYW1lOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1l
LT5jb3JlRnJhbWUoKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y3R4KTsKLQotICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOwotCi0gICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci19Ci0KLUpTT2JqZWN0UmVmIEJ1aWx0SW5Q
REZWaWV3OjptYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmIGN0eCkKLXsKLSAgICBzdGF0aWMgSlNT
dGF0aWNGdW5jdGlvbiBqc1BERkRvY1N0YXRpY0Z1bmN0aW9uc1tdID0gewotICAgICAgICB7ICJw
cmludCIsIGpzUERGRG9jUHJpbnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAwLCAwLCAwIH0sCi0gICAg
fTsKLQotICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5pdGlv
biA9IHsKLSAgICAgICAgMCwKLSAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAotICAgICAg
ICAiRG9jIiwKLSAgICAgICAgMCwKLSAgICAgICAgMCwKLSAgICAgICAganNQREZEb2NTdGF0aWNG
dW5jdGlvbnMsCi0gICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NGaW5hbGl6ZSwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAotICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc1Jl
ZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZEb2NDbGFzc0RlZmluaXRpb24p
OwotCi0gICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjdHgsIGpzUERGRG9jQ2xhc3MsIHRoaXMpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmM3ZmJhMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBQREZQbHVnaW5faAorI2RlZmluZSBQREZQbHVnaW5faAorCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCisKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJT
aW1wbGVQREZQbHVnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYWJsZUFyZWEuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0
UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7Cit0eXBlZGVm
IGNvbnN0IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU1ZhbHVlUmVmOworCitPQkpDX0NMQVNTIFBE
RkxheWVyQ29udHJvbGxlcjsKK09CSkNfQ0xBU1MgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0
ZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFBsdWdpbkluZm87Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBQbHVnaW5WaWV3OworY2xhc3MgV2ViRnJhbWU7CisKK2Ns
YXNzIFBERlBsdWdpbiA6IHB1YmxpYyBTaW1wbGVQREZQbHVnaW4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CisgICAgflBERlBs
dWdpbigpOworCisgICAgLy8gSW4tV2ViUHJvY2VzcyBwbHVnaW5zIGRvbid0IHN1cHBvcnQgYXN5
bmNocm9ub3VzIGluaXRpYWxpemF0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNo
cm9ub3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAg
dm9pZCBwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICosIENHQ29udGV4dFJl
Zik7CisgICAgCisgICAgdXNpbmcgU2Nyb2xsYWJsZUFyZWE6Om5vdGlmeVNjcm9sbFBvc2l0aW9u
Q2hhbmdlZDsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBQREZQbHVnaW4oV2ViRnJhbWUqKTsK
KworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNv
cmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHBkZkRvY3VtZW50RGlkTG9hZCgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjYWxjdWxhdGVTaXplcygpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29y
ZGluYXRlcykgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gc25hcHNob3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdp
bkxheWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZp
ZXdUcmFuc2Zvcm0pT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRXZlbnQo
Y29uc3QgV2ViTW91c2VFdmVudCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVL
ZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgT1ZFUlJJREU7CisK
KyAgICBKU09iamVjdFJlZiBtYWtlSlNQREZEb2MoSlNDb250ZXh0UmVmKTsKKyAgICBzdGF0aWMg
SlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworCisgICAgUmV0
YWluUHRyPENBTGF5ZXIgKj4gbV9jb250YWluZXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXll
ciAqPiBtX2NvbnRlbnRMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX2hvcml6b250
YWxTY3JvbGxiYXJMYXllcjsKKyAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBtX3ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXIgKj4gbV9zY3JvbGxDb3JuZXJMYXll
cjsKKyAgICBSZXRhaW5QdHI8UERGTGF5ZXJDb250cm9sbGVyPiBtX3BkZkxheWVyQ29udHJvbGxl
cjsKKyAgICAKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gbV9yb290Vmlld1RvUGx1Z2lu
VHJhbnNmb3JtOworICAgIFdlYkNvcmU6OkludFBvaW50IG1fbGFzdE1vdXNlUG9pbnQ7CisgICAg
CisgICAgUmV0YWluUHRyPFdLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGU+IG1fcGRmTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjZW5kaWYgLy8gUERGUGx1Z2luX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkN2I5NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBA
IC0wLDAgKzEsNTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBERlBsdWdpbi5oIgor
CisjaW1wb3J0ICJQREZLaXRJbXBvcnRzLmgiCisjaW1wb3J0ICJQbHVnaW5WaWV3LmgiCisjaW1w
b3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbXBvcnQgIldlYkV2ZW50LmgiCisjaW1wb3J0ICJX
ZWJFdmVudENvbnZlcnNpb24uaCIKKyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQg
PFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3Vy
Y2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFk
ZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGx1Z2luRGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QREZEb2N1bWVudFNjcmlw
dGluZy5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJCb3hNb2RlbE9iamVjdC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXJU
aGVtZS5oPgorCitAcHJvdG9jb2wgUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgPE5TT2JqZWN0
PgorCistICh2b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uOwor
LSAodm9pZCl3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVz
OihOU0FycmF5ICopdHlwZXM7CistICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0
cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQpcG9pbnQ7
CistICh2b2lkKXBlcmZvcm1XZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nOworLSAodm9pZClv
cGVuV2l0aFByZXZpZXc7CistICh2b2lkKXNhdmVUb1BERjsKKworQGVuZAorCitAaW50ZXJmYWNl
IFBERkxheWVyQ29udHJvbGxlciA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgUERGTGF5
ZXJDb250cm9sbGVyIChEZXRhaWxzKQorCitAcHJvcGVydHkgKHJldGFpbikgQ0FMYXllciAqcGFy
ZW50TGF5ZXI7CitAcHJvcGVydHkgKHJldGFpbikgUERGRG9jdW1lbnQgKmRvY3VtZW50OworQHBy
b3BlcnR5IChyZXRhaW4pIGlkPFBERkxheWVyQ29udHJvbGxlckRlbGVnYXRlPiBkZWxlZ2F0ZTsK
KworLSAodm9pZClzZXRGcmFtZVNpemU6KENHU2l6ZSlzaXplOworCistICh2b2lkKXNldERpc3Bs
YXlNb2RlOihpbnQpbW9kZTsKKy0gKHZvaWQpc2V0RGlzcGxheXNQYWdlQnJlYWtzOihCT09MKXBh
Z2VCcmVha3M7CisKKy0gKENHRmxvYXQpdGlsZVNjYWxlRmFjdG9yOworLSAodm9pZClzZXRUaWxl
U2NhbGVGYWN0b3I6KENHRmxvYXQpc2NhbGVGYWN0b3I7CisKKy0gKENHU2l6ZSljb250ZW50U2l6
ZTsKKy0gKENHU2l6ZSljb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tOworCistICh2b2lkKXNuYXBz
aG90SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dDsKKworLSAodm9pZCltYWduaWZ5V2l0
aE1hZ25pZmljYXRpb246KENHRmxvYXQpbWFnbmlmaWNhdGlvbiBhdFBvaW50OihDR1BvaW50KXBv
aW50IGltbWVkaWF0ZWx5OihCT09MKWltbWVkaWF0ZWx5OworCistIChDR1BvaW50KXNjcm9sbFBv
c2l0aW9uOworLSAodm9pZClzZXRTY3JvbGxQb3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbjsK
Ky0gKHZvaWQpc2Nyb2xsV2l0aERlbHRhOihDR1NpemUpZGVsdGE7CisKKy0gKHZvaWQpbW91c2VE
b3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVu
dDsKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZURyYWdn
ZWQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VFbnRlcmVkOihOU0V2ZW50ICopZXZl
bnQ7CistICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQ7CisKKy0gKE5TQXJyYXkg
KilmaW5kU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWlzQ2Fz
ZVNlbnNpdGl2ZSBoaWdobGlnaHRNYXRjaGVzOihCT09MKXNob3VsZEhpZ2hsaWdodE1hdGNoZXM7
CisKKy0gKGlkKWN1cnJlbnRTZWxlY3Rpb247CistICh2b2lkKWNvcHlTZWxlY3Rpb247CistICh2
b2lkKXNlbGVjdEFsbDsKKworLSAoYm9vbClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7CisKKy0g
KHZvaWQpc2V0SFVERW5hYmxlZDooQk9PTCllbmFibGVkOworLSAoQk9PTClodWRFbmFibGVkOwor
CitAZW5kCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitAaW50ZXJmYWNlIFdLUERGUGx1
Z2luU2Nyb2xsYmFyTGF5ZXIgOiBDQUxheWVyCit7CisgICAgV2ViS2l0OjpQREZQbHVnaW4qIF9w
ZGZQbHVnaW47Cit9CisKK0Bwcm9wZXJ0eSAoYXNzaWduKSBXZWJLaXQ6OlBERlBsdWdpbiogcGRm
UGx1Z2luOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXS1BERlBsdWdpblNjcm9sbGJhckxh
eWVyCisKK0BzeW50aGVzaXplIHBkZlBsdWdpbjsKKworLSAoaWQpaW5pdFdpdGhQREZQbHVnaW46
KFdlYktpdDo6UERGUGx1Z2luICopcGx1Z2luCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBp
bml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX3BkZlBsdWdpbiA9IHBsdWdp
bjsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZv
cktleTooTlNTdHJpbmcgKilrZXkKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKWRy
YXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljdHgKK3sKKyAgICBfcGRmUGx1Z2luLT5wYWludENv
bnRyb2xGb3JMYXllckluQ29udGV4dChzZWxmLCBjdHgpOworfQorCitAZW5kCisKK0BpbnRlcmZh
Y2UgV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0PFBERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlPgoreworICAgIFdlYktpdDo6UERGUGx1Z2luKiBfcGRmUGx1Z2luOworfQor
CitAcHJvcGVydHkgKGFzc2lnbikgV2ViS2l0OjpQREZQbHVnaW4qIHBkZlBsdWdpbjsKKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV0tQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZQorCitAc3lu
dGhlc2l6ZSBwZGZQbHVnaW47CisKKy0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBE
RlBsdWdpbiAqKXBsdWdpbgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47CisgICAgCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpdXBkYXRlU2Nyb2xsUG9zaXRpb246KENHUG9p
bnQpbmV3UG9zaXRpb24KK3sKKyAgICBfcGRmUGx1Z2luLT5ub3RpZnlTY3JvbGxQb3NpdGlvbkNo
YW5nZWQoSW50UG9pbnQobmV3UG9zaXRpb24pKTsKK30KKworLSAodm9pZCl3cml0ZUl0ZW1zVG9Q
YXN0ZWJvYXJkOihOU0FycmF5ICopaXRlbXMgd2l0aFR5cGVzOihOU0FycmF5ICopdHlwZXMKK3sK
KyAgICAvLyBGSVhNRTogSGFuZGxlIHR5cGVzIG90aGVyIHRoYW4gcGxhaW4gdGV4dC4KKworICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBpdGVtcy5jb3VudDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgTlNTdHJpbmcgKnR5cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDppXTsK
KyAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdIHx8
IFt0eXBlIGlzRXF1YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgeworICAgICAg
ICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcoQWRvcHROUywgW1tOU1N0
cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOltpdGVtcyBvYmplY3RBdEluZGV4OmldIGVuY29kaW5n
Ok5TVVRGOFN0cmluZ0VuY29kaW5nXSk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFs
UGFzdGVib2FyZCgpLT53cml0ZVBsYWluVGV4dChwbGFpblRleHRTdHJpbmcuZ2V0KCksIFBhc3Rl
Ym9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKHZv
aWQpc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilzdHJpbmcgYXRQb2ludDooQ0dQb2ludClwb2ludAoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQuCit9CisKKy0gKHZvaWQpcGVyZm9ybVdlYlNlYXJjaDooTlNTdHJpbmcgKilzdHJpbmcKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2b2lkKW9wZW5XaXRoUHJldmlldwor
eworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKKy0gKHZvaWQpc2F2ZVRvUERGCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworQGVuZAorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworUGFzc1JlZlB0cjxQREZQbHVnaW4+IFBERlBsdWdpbjo6Y3JlYXRlKFdlYkZyYW1lKiBmcmFt
ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBERlBsdWdpbihmcmFtZSkpOworfQorCitQ
REZQbHVnaW46OlBERlBsdWdpbihXZWJGcmFtZSogZnJhbWUpCisgICAgOiBTaW1wbGVQREZQbHVn
aW4oZnJhbWUpCisgICAgLCBtX2NvbnRhaW5lckxheWVyKEFkb3B0TlMsIFtbQ0FMYXllciBhbGxv
Y10gaW5pdF0pCisgICAgLCBtX2NvbnRlbnRMYXllcihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2Nd
IGluaXRdKQorICAgICwgbV9zY3JvbGxDb3JuZXJMYXllcihBZG9wdE5TLCBbW1dLUERGUGx1Z2lu
U2Nyb2xsYmFyTGF5ZXIgYWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKQorICAgICwgbV9w
ZGZMYXllckNvbnRyb2xsZXIoQWRvcHROUywgW1twZGZMYXllckNvbnRyb2xsZXJDbGFzcygpIGFs
bG9jXSBpbml0XSkKKyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUoQWRvcHROUywg
W1tXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFBERlBsdWdpbjp0
aGlzXSkKK3sKKyAgICBtX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKS5kZWxlZ2F0ZSA9IG1fcGRm
TGF5ZXJDb250cm9sbGVyRGVsZWdhdGUuZ2V0KCk7CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIu
Z2V0KCkucGFyZW50TGF5ZXIgPSBtX2NvbnRlbnRMYXllci5nZXQoKTsKKyAgICAKKyAgICBbbV9j
b250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX2NvbnRlbnRMYXllci5nZXQoKV07Cisg
ICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9zY3JvbGxDb3JuZXJMYXll
ci5nZXQoKV07Cit9CisKK1BERlBsdWdpbjo6flBERlBsdWdpbigpCit7Cit9CisKK3ZvaWQgUERG
UGx1Z2luOjp1cGRhdGVTY3JvbGxiYXJzKCkKK3sKKyAgICBTaW1wbGVQREZQbHVnaW46OnVwZGF0
ZVNjcm9sbGJhcnMoKTsKKyAgICAKKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKSB7
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSA9IHZlcnRpY2Fs
U2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxh
eWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgfQorICAgIAorICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXll
ci5nZXQoKS5mcmFtZSA9IGhvcml6b250YWxTY3JvbGxiYXIoKS0+ZnJhbWVSZWN0KCk7CisgICAg
ICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobV9zY3JvbGxDb3JuZXJMYXllcikgeworICAgICAgICBtX3Nj
cm9sbENvcm5lckxheWVyLmdldCgpLmZyYW1lID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAg
ICBbbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgIH0KK30K
KworUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFBERlBsdWdpbjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5hZG9wdE5TKFtb
V0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10p
OworICAgICAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX2hvcml6b250
YWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAgICAgIAorICAgICAgICBkaWRBZGRIb3Jpem9u
dGFsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhckxheWVyLmFkb3B0TlMoW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFs
bG9jXSBpbml0V2l0aFBERlBsdWdpbjp0aGlzXSk7CisgICAgICAgIFttX2NvbnRhaW5lckxheWVy
LmdldCgpIGFkZFN1YmxheWVyOm1fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKV07CisgICAg
ICAgIAorICAgICAgICBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAg
IH0KKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0Lmdl
dCgpKTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKK30KKwordm9pZCBQREZQbHVnaW46
OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4gc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IGhvcml6b250YWxTY3JvbGxiYXIoKSA6IHZlcnRpY2FsU2Nyb2xsYmFyKCk7
CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9u
dGFsU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisKKyAgICAgICAgW21faG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOworCisgICAgICAgIFttX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgPSAwOworICAgIH0KKworICAgIHNjcm9sbGJhci0+cmVt
b3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxl
QXJlYSgpOworICAgIHNjcm9sbGJhciA9IDA7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwZGZEb2N1
bWVudERpZExvYWQoKQoreworICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworICAgIAorICAgIFJl
dGFpblB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQoQWRvcHROUywgW1twZGZEb2N1bWVudENsYXNz
KCkgYWxsb2NdIGluaXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSgpLmdldCgpXSk7CisKKyAgICBz
ZXRQREZEb2N1bWVudChkb2N1bWVudCk7CisKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0
KCkgc2V0RnJhbWVTaXplOnNpemUoKV07CisgICAgbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCku
ZG9jdW1lbnQgPSBkb2N1bWVudC5nZXQoKTsKKyAgICAKKyAgICBwbHVnaW5WaWV3KCktPnNldFBh
Z2VTY2FsZUZhY3RvcihbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9y
XSwgSW50UG9pbnQoMCwgMCkpOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVT
Y3JvbGxiYXJzKCk7CisKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKKyAgICAKKyAgICBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOwor
fQorCit2b2lkIFBERlBsdWdpbjo6Y2FsY3VsYXRlU2l6ZXMoKQoreworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBjb21lIHN0cmFpZ2h0IGZyb20gUERGS2l0LgorICAgIGNvbXB1dGVQYWdlQm94
ZXMoKTsKKworICAgIHNldFBERkRvY3VtZW50U2l6ZShJbnRTaXplKFttX3BkZkxheWVyQ29udHJv
bGxlci5nZXQoKSBjb250ZW50U2l6ZVJlc3BlY3Rpbmdab29tXSkpOworfQorCit2b2lkIFBERlBs
dWdpbjo6ZGVzdHJveSgpCit7CisgICAgaWYgKHdlYkZyYW1lKCkpIHsKKyAgICAgICAgaWYgKEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gd2ViRnJhbWUoKS0+Y29yZUZyYW1lKCktPnZpZXcoKSkKKyAg
ICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgfQor
CisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95
U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAKKyAgICBbbV9zY3JvbGxDb3JuZXJM
YXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgW21fY29udGVudExheWVyLmdl
dCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKK30KKwordm9pZCBQREZQbHVnaW46OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Cit7Cit9CisgICAgCit2b2lkIFBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRl
eHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CisgICAgCisgICAgZ3JhcGhpY3ND
b250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CisgICAgCisgICAgaWYgKGxheWVyID09
IG1fc2Nyb2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0
ID0gdGhpcy0+c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgICAgICBncmFwaGljc0NvbnRleHQudHJh
bnNsYXRlKC1zY3JvbGxDb3JuZXJSZWN0LngoKSwgLXNjcm9sbENvcm5lclJlY3QueSgpKTsKKyAg
ICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCktPnBhaW50U2Nyb2xsQ29ybmVyKDAsICZncmFw
aGljc0NvbnRleHQsIHNjcm9sbENvcm5lclJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAgICAKKyAgICBpZiAobGF5ZXIg
PT0gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhcigpOworICAgIGVsc2UgaWYgKGxheWVyID09IG1faG9yaXpvbnRhbFNjcm9sbGJh
ckxheWVyKQorICAgICAgICBzY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisKKyAg
ICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGdyYXBoaWNzQ29u
dGV4dC50cmFuc2xhdGUoLXNjcm9sbGJhci0+eCgpLCAtc2Nyb2xsYmFyLT55KCkpOworICAgIHNj
cm9sbGJhci0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBQREZQbHVnaW46OnNuYXBzaG90KCkK
K3sKKyAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgLy8gRklYTUU6IFN1cHBvcnQgbm9uLTEgcGFnZS9kZXZpY2VTY2FsZUZhY3Rvci4KKyAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBzaXplKCk7CisKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNraW5n
U3RvcmVTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
OworCisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dC0+
dHJhbnNsYXRlKDAsIC1zaXplKCkuaGVpZ2h0KCkpOworCisgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyLmdldCgpIHNuYXBzaG90SW5Db250ZXh0OmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpXTsK
KworICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworfQorCitQbGF0Zm9ybUxheWVyKiBQREZQ
bHVnaW46OnBsdWdpbkxheWVyKCkKK3sKKyAgICByZXR1cm4gbV9jb250YWluZXJMYXllci5nZXQo
KTsKK30KKwordm9pZCBQREZQbHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUm
IHBsdWdpblNpemUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdp
blRvUm9vdFZpZXdUcmFuc2Zvcm0pCit7CisgICAgaWYgKHNpemUoKSA9PSBwbHVnaW5TaXplICYm
IHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgPT0gW21fcGRmTGF5ZXJDb250cm9sbGVy
LmdldCgpIHRpbGVTY2FsZUZhY3Rvcl0pCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNpemUo
cGx1Z2luU2l6ZSk7CisgICAgbV9yb290Vmlld1RvUGx1Z2luVHJhbnNmb3JtID0gcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybS5pbnZlcnNlKCk7CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdl
dCgpIHNldEZyYW1lU2l6ZTpwbHVnaW5TaXplXTsKKworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIENBVHJh
bnNmb3JtM0QgdHJhbnNmb3JtID0gQ0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxLCAtMSwgMSk7Cisg
ICAgCisgICAgQ0dGbG9hdCBtYWduaWZpY2F0aW9uID0gcGx1Z2luVmlldygpLT5wYWdlU2NhbGVG
YWN0b3IoKSAtIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdOwor
ICAgIAorICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIG1fbGFzdE1vdXNlUG9pbnQsIHdlIHNob3Vs
ZCB1c2UgdGhlIHpvb20gb3JpZ2luIGZyb20gUGx1Z2luVmlldzo6c2V0UGFnZVNjYWxlRmFjdG9y
LgorICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBtYWduaWZ5V2l0aE1hZ25pZmljYXRp
b246bWFnbmlmaWNhdGlvbiBhdFBvaW50Om1fbGFzdE1vdXNlUG9pbnQgaW1tZWRpYXRlbHk6WUVT
XTsKKyAgICBbbV9jb250ZW50TGF5ZXIuZ2V0KCkgc2V0U3VibGF5ZXJUcmFuc2Zvcm06Q0FUcmFu
c2Zvcm0zRFRyYW5zbGF0ZSh0cmFuc2Zvcm0sIDAsIC1wbHVnaW5TaXplLmhlaWdodCgpLCAwKV07
CisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIGNhbGN1bGF0ZVNpemVzKCk7Cisg
ICAgdXBkYXRlU2Nyb2xsYmFycygpOworfQorICAgIAorc3RhdGljIE5TVUludGVnZXIgbW9kaWZp
ZXJGbGFnc0Zyb21XZWJFdmVudChjb25zdCBXZWJFdmVudCYgZXZlbnQpCit7CisgICAgcmV0dXJu
IChldmVudC5zaGlmdEtleSgpID8gTlNTaGlmdEtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVu
dC5jb250cm9sS2V5KCkgPyBOU0NvbnRyb2xLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQu
YWx0S2V5KCkgPyBOU0FsdGVybmF0ZUtleU1hc2sgOiAwKQorICAgICAgICB8IChldmVudC5tZXRh
S2V5KCkgPyBOU0NvbW1hbmRLZXlNYXNrIDogMCk7Cit9CisgICAgCitzdGF0aWMgTlNFdmVudFR5
cGUgZXZlbnRUeXBlRnJvbVdlYkV2ZW50KGNvbnN0IFdlYkV2ZW50JiBldmVudCwgYm9vbCBtb3Vz
ZUJ1dHRvbklzRG93bikKK3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2Ug
V2ViRXZlbnQ6OktleURvd246CisgICAgICAgIHJldHVybiBOU0tleURvd247CisgICAgY2FzZSBX
ZWJFdmVudDo6S2V5VXA6CisgICAgICAgIHJldHVybiBOU0tleVVwOworCisgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VEb3duOgorICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1v
dXNlRXZlbnQmPihldmVudCkuYnV0dG9uKCkpIHsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50
OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIE5TTGVmdE1vdXNlRG93bjsKKyAgICAg
ICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBO
U1JpZ2h0TW91c2VEb3duOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VVcDoK
KyAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQp
LmJ1dHRvbigpKSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAg
ICAgICAgICAgIHJldHVybiBOU0xlZnRNb3VzZVVwOworICAgICAgICBjYXNlIFdlYk1vdXNlRXZl
bnQ6OlJpZ2h0QnV0dG9uOgorICAgICAgICAgICAgcmV0dXJuIE5TUmlnaHRNb3VzZVVwOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICBpZiAobW91c2VC
dXR0b25Jc0Rvd24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8Y29uc3QgV2Vi
TW91c2VFdmVudCY+KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICAgICAgY2FzZSBXZWJNb3Vz
ZUV2ZW50OjpMZWZ0QnV0dG9uOgorICAgICAgICAgICAgICAgIHJldHVybiBOU0xlZnRNb3VzZURy
YWdnZWQ7CisgICAgICAgICAgICBjYXNlIFdlYk1vdXNlRXZlbnQ6OlJpZ2h0QnV0dG9uOgorICAg
ICAgICAgICAgICAgIHJldHVybiBOU1JpZ2h0TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlNNb3VzZU1vdmVkOworICAgICAgICBicmVhazsK
KworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBQREZQ
bHVnaW46OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7Cisg
ICAgc3RhdGljIGJvb2wgbW91c2VCdXR0b25Jc0Rvd24gPSBmYWxzZTsKKworICAgIEludFBvaW50
IG1vdXNlUG9zaXRpb24gPSBldmVudC5wb3NpdGlvbigpOworCisgICAgLy8gRklYTUU6IEZvcndh
cmQgbW91c2UgZXZlbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBzY3JvbGxiYXIuCisgICAgaWYgKElu
dFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpLmZyYW1lKS5jb250YWlucyhtb3Vz
ZVBvc2l0aW9uKQorICAgICAgICB8fCBJbnRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
LmdldCgpLmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKQorICAgICAgICB8fCBJbnRSZWN0
KG1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkuZnJhbWUpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbkluUERGVmll
dyhtb3VzZVBvc2l0aW9uKTsKKyAgICBwb3NpdGlvbkluUERGVmlldyA9IG1fcm9vdFZpZXdUb1Bs
dWdpblRyYW5zZm9ybS5tYXBQb2ludChwb3NpdGlvbkluUERGVmlldyk7CisgICAgcG9zaXRpb25J
blBERlZpZXcuc2V0WShzaXplKCkuaGVpZ2h0KCkgLSBwb3NpdGlvbkluUERGVmlldy55KCkpOwor
ICAgIAorICAgIG1fbGFzdE1vdXNlUG9pbnQgPSBwb3NpdGlvbkluUERGVmlldzsKKworICAgIE5T
RXZlbnRUeXBlIGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgbW91c2VC
dXR0b25Jc0Rvd24pOworCisgICAgaWYgKCFldmVudFR5cGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2Vi
RXZlbnQoZXZlbnQpOworCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VF
dmVudFdpdGhUeXBlOmV2ZW50VHlwZSBsb2NhdGlvbjpwb3NpdGlvbkluUERGVmlldyBtb2RpZmll
ckZsYWdzOm1vZGlmaWVyRmxhZ3MgdGltZXN0YW1wOjAgd2luZG93TnVtYmVyOjAgY29udGV4dDpu
aWwgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OmV2ZW50LmNsaWNrQ291bnQoKSBwcmVzc3VyZTow
XTsKKworICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91
c2VNb3ZlOgorICAgICAgICBpZiAobW91c2VCdXR0b25Jc0Rvd24pCisgICAgICAgICAgICBbbV9w
ZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VEcmFnZ2VkOmZha2VFdmVudF07CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBtb3VzZU1vdmVk
OmZha2VFdmVudF07CisgICAgICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICBt
b3VzZUJ1dHRvbklzRG93biA9IHRydWU7CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5n
ZXQoKSBtb3VzZURvd246ZmFrZUV2ZW50XTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6IHsKKyAgICAgICAgW21fcGRmTGF5ZXJDb250cm9s
bGVyLmdldCgpIG1vdXNlVXA6ZmFrZUV2ZW50XTsKKyAgICAgICAgbW91c2VCdXR0b25Jc0Rvd24g
PSBmYWxzZTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0
Zm9ybShldmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBQREZQbHVnaW46OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYgZXZlbnQpCit7CisgICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gZXZlbnRUeXBlRnJvbVdl
YkV2ZW50KGV2ZW50LCBmYWxzZSk7CisgICAgTlNVSW50ZWdlciBtb2RpZmllckZsYWdzID0gbW9k
aWZpZXJGbGFnc0Zyb21XZWJFdmVudChldmVudCk7CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2
ZW50ID0gW05TRXZlbnQga2V5RXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9jYXRpb246TlNaZXJv
UG9pbnQgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVzdGFtcDowIHdpbmRvd051bWJl
cjowIGNvbnRleHQ6MCBjaGFyYWN0ZXJzOmV2ZW50LnRleHQoKSBjaGFyYWN0ZXJzSWdub3JpbmdN
b2RpZmllcnM6ZXZlbnQudW5tb2RpZmllZFRleHQoKSBpc0FSZXBlYXQ6ZXZlbnQuaXNBdXRvUmVw
ZWF0KCkga2V5Q29kZTpldmVudC5uYXRpdmVWaXJ0dWFsS2V5Q29kZSgpXTsKKyAgICAKKyAgICBz
d2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6OktleURvd246CisgICAg
ICAgIHJldHVybiBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkga2V5RG93bjpmYWtlRXZlbnRd
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21t
YW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7
CisgICAgaWYgKGNvbW1hbmROYW1lID09ICJjb3B5IikKKyAgICAgICAgW21fcGRmTGF5ZXJDb250
cm9sbGVyLmdldCgpIGNvcHlTZWxlY3Rpb25dOworICAgIGVsc2UgaWYgKGNvbW1hbmROYW1lID09
ICJzZWxlY3RBbGwiKQorICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2VsZWN0
QWxsXTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQREZQbHVnaW46OmlzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgaWYg
KGNvbW1hbmROYW1lID09ICJjb3B5IiAmJiBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgY3Vy
cmVudFNlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBpZiAo
Y29tbWFuZE5hbWUgPT0gInNlbGVjdEFsbCIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgU2ltcGxlUERGUGx1Z2luOjpzZXRTY3JvbGxPZmZz
ZXQob2Zmc2V0KTsKKyAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgc2V0U2Nyb2xsUG9z
aXRpb246b2Zmc2V0XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
IChzY3JvbGxiYXIgPT0gaG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBbbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICBlbHNlIGlmIChz
Y3JvbGxiYXIgPT0gdmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgW21fdmVydGljYWxTY3Jv
bGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworfQorCit2b2lkIFBERlBsdWdpbjo6
aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBb
bV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShQREZLSVRfUExVR0lOKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1wbGVQREZQbHVn
aW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1
Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4YTkzZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxl
UERGUGx1Z2luLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNpbXBsZVBERlBsdWdpbl9oCisjZGVmaW5lIFNpbXBsZVBERlBsdWdpbl9oCisKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRl
eHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFBsdWdpbkluZm87Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBQbHVnaW5WaWV3OworY2xhc3MgV2ViRnJhbWU7CisKK2NsYXNzIFNp
bXBsZVBERlBsdWdpbiA6IHB1YmxpYyBQbHVnaW4sIHByb3RlY3RlZCBXZWJDb3JlOjpTY3JvbGxh
YmxlQXJlYSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2ltcGxlUERGUGx1Z2lu
PiBjcmVhdGUoV2ViRnJhbWUqKTsKKyAgICB+U2ltcGxlUERGUGx1Z2luKCk7CisKKyAgICBzdGF0
aWMgV2ViQ29yZTo6UGx1Z2luSW5mbyBwbHVnaW5JbmZvKCk7CisKKyAgICAvLyBJbi1wcm9jZXNz
IFBERlZpZXdzIGRvbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGluaXRpYWxpemF0aW9uLgorICAg
IHZpcnR1YWwgYm9vbCBpc0JlaW5nQXN5bmNocm9ub3VzbHlJbml0aWFsaXplZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBTaW1wbGVQREZQbHVn
aW4oV2ViRnJhbWUqKTsKKworICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KKworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQorICAgIHZvaWQgc2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplIHNpemUpIHsgbV9z
aXplID0gc2l6ZTsgfQorCisgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGRmRG9jdW1lbnQ7IH0KKyAgICB2b2lkIHNldFBERkRvY3VtZW50
KFJldGFpblB0cjxQREZEb2N1bWVudD4gZG9jdW1lbnQpIHsgbV9wZGZEb2N1bWVudCA9IGRvY3Vt
ZW50OyB9CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIHBkZkRvY3VtZW50U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcGRmRG9jdW1lbnRTaXplOyB9CisgICAgdm9pZCBzZXRQREZEb2N1bWVudFNpemUo
V2ViQ29yZTo6SW50U2l6ZSBzaXplKSB7IG1fcGRmRG9jdW1lbnRTaXplID0gc2l6ZTsgfQorICAg
IAorICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisKKyAgICAvLyBSZWd1bGFyIHBsdWctaW5zIGRvbid0IG5lZWQgYWNjZXNzIHRv
IHZpZXcsIGJ1dCB3ZSBhZGQgc2Nyb2xsYmFycyB0byBlbWJlZGRpbmcgRnJhbWVWaWV3IGZvciBw
cm9wZXIgZXZlbnQgaGFuZGxpbmcuCisgICAgUGx1Z2luVmlldyogcGx1Z2luVmlldygpOworICAg
IGNvbnN0IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworICAgIHZp
cnR1YWwgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0
ZVBhZ2VCb3hlcygpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVTaXplcygpOworICAgIHZv
aWQgcGFpbnRCYWNrZ3JvdW5kKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBwYWludENvbnRlbnQoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAg
ICB2b2lkIHBhaW50Q29udHJvbHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKKyAgICAKKyAgICB2b2lkIHJ1blNjcmlwdHNJblBE
RkRvY3VtZW50KCk7CisKKyAgICAvLyBQbHVnLWluIG1ldGhvZHMKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJik7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3ko
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcyk7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgpOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVy
KCk7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpOworICAgIHZpcnR1
YWwgYm9vbCB3YW50c1doZWVsRXZlbnRzKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdl
b21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mIHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0pOworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmls
aXR5RGlkQ2hhbmdlKCk7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lRGlkRmluaXNoTG9hZGluZyh1
aW50NjRfdCByZXF1ZXN0SUQpOworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZhaWwodWludDY0
X3QgcmVxdWVzdElELCBib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEV2
YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVjZWl2ZVJlc3BvbnNlKHVpbnQ2NF90IHN0
cmVhbUlELCBjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFt
TGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZU5hbWUp
OworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRSZWNlaXZlRGF0YSh1aW50NjRfdCBzdHJlYW1J
RCwgY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpOworICAg
IHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29y
ZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFz
dE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0
cmluZyYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRGaWxlTmFtZSk7CisgICAgdmly
dHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBp
bnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkRmluaXNoTG9hZGlu
ZygpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGYWlsKGJvb2wgd2FzQ2FuY2Vs
bGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxF
dmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2Vi
TW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29u
c3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVudUV2
ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9h
cmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEZv
Y3VzKGJvb2wpOworICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFu
Z2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpOworICAg
IHZpcnR1YWwgdm9pZCB3aW5kb3dWaXNpYmlsaXR5Q2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY29udGVudHNTY2FsZUZhY3RvckNoYW5nZWQoZmxvYXQpOworICAgIHZpcnR1YWwgdWlu
dDY0X3QgcGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2VuZENvbXBsZXhUZXh0SW5wdXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpIE9W
RVJSSURFOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcmFnZUJsb2NraW5nU3RhdGVD
aGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5n
ZWQoYm9vbCk7CisgICAgdmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1
ZSk7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVNjcm9sbChXZWJDb3JlOjpTY3JvbGxEaXJlY3Rp
b24sIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8UERG
RG9jdW1lbnQ+IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX3BkZkRvY3VtZW50OyB9CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBtZXRob2RzLgorICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9u
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6
U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNj
cm9sbGJhciopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1YWwg
V2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFs
c2U7IH0gLy8gSWYgd2UgcmV0dXJuIHRydWUsIFNjcm9sbEFuaW1hdG9yTWFjIHdpbGwga2VlcCBj
eWNsaW5nIGEgdGltZXIgZm9yZXZlciwgd2FpdGluZyBmb3IgYSBnb29kIHRpbWUgdG8gYW5pbWF0
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCBuZXdTdHlsZSwg
Ym9vbCBmb3JjZVVwZGF0ZSkgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBXZWJDb3JlOjpJ
bnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxi
YXJQb2ludCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgV2ViQ29yZTo6U2Nyb2xs
YmFyKiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdCBPVkVSUklE
RTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3Qg
U3RyaW5nJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5k
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgT1ZFUlJJREU7CisgICAgCitwcml2YXRlOgorCisg
ICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZik7CisgICAgc3RhdGljIEpT
VmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKworICAgIFdlYkNv
cmU6OkludFNpemUgbV9zaXplOworCisgICAgV2ViQ29yZTo6S1VSTCBtX3NvdXJjZVVSTDsKKwor
ICAgIFN0cmluZyBtX3N1Z2dlc3RlZEZpbGVuYW1lOworICAgIFJldGFpblB0cjxDRk11dGFibGVE
YXRhUmVmPiBtX2RhdGE7CisKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IG1fcGRmRG9jdW1l
bnQ7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IG1fcGFnZUJveGVzOworICAgIFdlYkNv
cmU6OkludFNpemUgbV9wZGZEb2N1bWVudFNpemU7IC8vIEFsbCBwYWdlcywgaW5jbHVkaW5nIGdh
cHMuCisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX2hvcml6b250YWxTY3JvbGxi
YXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV92ZXJ0aWNhbFNjcm9sbGJhcjsK
KworICAgIFdlYkZyYW1lKiBtX2ZyYW1lOworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9s
bE9mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gU2ltcGxl
UERGUGx1Z2luX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvU2ltcGxlUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9TaW1wbGVQREZQbHVnaW4ubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYTQ2NTI2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLm1tCkBAIC0wLDAgKzEsOTQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJTaW1wbGVQ
REZQbHVnaW4uaCIKKworI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgorI2ltcG9ydCAiUGx1Z2lu
Vmlldy5oIgorI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJFdmVudC5o
IgorI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU0NvbnRleHRSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2ltcG9ydCA8UERGS2l0L1BERktpdC5oPgorI2lt
cG9ydCA8V2ViQ29yZS9BcmNoaXZlUmVzb3VyY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2hyb21l
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0hUVFBIZWFkZXJNYXAuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTG9j
YWxpemVkU3RyaW5ncy5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUERGRG9jdW1lbnRTY3JpcHRpbmcu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2Nyb2xsQW5pbWF0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitz
dGF0aWMgdm9pZCBhcHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IoQ0dQREZEaWN0
aW9uYXJ5UmVmIHN1YnRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIHZhbHVlcykKK3sKKyAg
ICBDR1BERkFycmF5UmVmIG5hbWVzOworICAgIGlmIChDR1BERkRpY3Rpb25hcnlHZXRBcnJheShz
dWJ0cmVlLCAiTmFtZXMiLCAmbmFtZXMpKSB7CisgICAgICAgIHNpemVfdCBuYW1lQ291bnQgPSBD
R1BERkFycmF5R2V0Q291bnQobmFtZXMpIC8gMjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBuYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0dQREZPYmplY3RSZWYgb2JqZWN0
OworICAgICAgICAgICAgQ0dQREZBcnJheUdldE9iamVjdChuYW1lcywgMiAqIGkgKyAxLCAmb2Jq
ZWN0KTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0dQREZBcnJheVJlZiBraWRzOworICAgIGlmICgh
Q0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIktpZHMiLCAma2lkcykpCisgICAgICAg
IHJldHVybjsKKworICAgIHNpemVfdCBraWRDb3VudCA9IENHUERGQXJyYXlHZXRDb3VudChraWRz
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtpZENvdW50OyArK2kpIHsKKyAgICAgICAg
Q0dQREZEaWN0aW9uYXJ5UmVmIGtpZDsKKyAgICAgICAgaWYgKCFDR1BERkFycmF5R2V0RGljdGlv
bmFyeShraWRzLCBpLCAma2lkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhcHBl
bmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3Ioa2lkLCB2YWx1ZXMpOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgZ2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShDR1BERkRpY3Rpb25hcnlS
ZWYgdHJlZSwgVmVjdG9yPENHUERGT2JqZWN0UmVmPiYgYWxsVmFsdWVzKQoreworICAgIGFwcGVu
ZFZhbHVlc0luUERGTmFtZVN1YnRyZWVUb1ZlY3Rvcih0cmVlLCBhbGxWYWx1ZXMpOworfQorCitz
dGF0aWMgdm9pZCBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChDR1BERkRvY3VtZW50UmVmIHBk
ZkRvY3VtZW50LCBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+JiBzY3JpcHRzKQorewor
ICAgIGlmICghcGRmRG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHUERGRGljdGlv
bmFyeVJlZiBwZGZDYXRhbG9nID0gQ0dQREZEb2N1bWVudEdldENhdGFsb2cocGRmRG9jdW1lbnQp
OworICAgIGlmICghcGRmQ2F0YWxvZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gR2V0IHRo
ZSBkaWN0aW9uYXJ5IG9mIGFsbCBkb2N1bWVudC1sZXZlbCBuYW1lIHRyZWVzLgorICAgIENHUERG
RGljdGlvbmFyeVJlZiBuYW1lc0RpY3Rpb25hcnk7CisgICAgaWYgKCFDR1BERkRpY3Rpb25hcnlH
ZXREaWN0aW9uYXJ5KHBkZkNhdGFsb2csICJOYW1lcyIsICZuYW1lc0RpY3Rpb25hcnkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBHZXQgdGhlIGRvY3VtZW50LWxldmVsICJKYXZhU2NyaXB0
IiBuYW1lIHRyZWUuCisgICAgQ0dQREZEaWN0aW9uYXJ5UmVmIGphdmFTY3JpcHROYW1lVHJlZTsK
KyAgICBpZiAoIUNHUERGRGljdGlvbmFyeUdldERpY3Rpb25hcnkobmFtZXNEaWN0aW9uYXJ5LCAi
SmF2YVNjcmlwdCIsICZqYXZhU2NyaXB0TmFtZVRyZWUpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBUaGUgbmFtZXMgYXJlIGFyYml0cmFyeS4gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0
aGUgdmFsdWVzLgorICAgIFZlY3RvcjxDR1BERk9iamVjdFJlZj4gb2JqZWN0czsKKyAgICBnZXRB
bGxWYWx1ZXNJblBERk5hbWVUcmVlKGphdmFTY3JpcHROYW1lVHJlZSwgb2JqZWN0cyk7CisgICAg
c2l6ZV90IG9iamVjdENvdW50ID0gb2JqZWN0cy5zaXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKKyAgICAgICAgQ0dQREZEaWN0aW9uYXJ5UmVm
IGphdmFTY3JpcHRBY3Rpb247CisgICAgICAgIGlmICghQ0dQREZPYmplY3RHZXRWYWx1ZShyZWlu
dGVycHJldF9jYXN0PENHUERGT2JqZWN0UmVmPihvYmplY3RzW2ldKSwga0NHUERGT2JqZWN0VHlw
ZURpY3Rpb25hcnksICZqYXZhU2NyaXB0QWN0aW9uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIC8vIEEgSmF2YVNjcmlwdCBhY3Rpb24gbXVzdCBoYXZlIGFuIGFjdGlvbiB0eXBl
IG9mICJKYXZhU2NyaXB0Ii4KKyAgICAgICAgY29uc3QgY2hhciogYWN0aW9uVHlwZTsKKyAgICAg
ICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXROYW1lKGphdmFTY3JpcHRBY3Rpb24sICJTIiwgJmFj
dGlvblR5cGUpIHx8IHN0cmNtcChhY3Rpb25UeXBlLCAiSmF2YVNjcmlwdCIpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgVUludDgqIGJ5dGVzID0gMDsKKyAgICAgICAg
Q0ZJbmRleCBsZW5ndGg7CisgICAgICAgIENHUERGU3RyZWFtUmVmIHN0cmVhbTsKKyAgICAgICAg
Q0dQREZTdHJpbmdSZWYgc3RyaW5nOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRh
OworICAgICAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyZWFtKGphdmFTY3JpcHRBY3Rpb24s
ICJKUyIsICZzdHJlYW0pKSB7CisgICAgICAgICAgICBDR1BERkRhdGFGb3JtYXQgZm9ybWF0Owor
ICAgICAgICAgICAgZGF0YS5hZG9wdENGKENHUERGU3RyZWFtQ29weURhdGEoc3RyZWFtLCAmZm9y
bWF0KSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBieXRlcyA9IENGRGF0YUdldEJ5dGVQdHIoZGF0YS5nZXQoKSk7CisgICAg
ICAgICAgICBsZW5ndGggPSBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0U3RyaW5nKGphdmFTY3JpcHRBY3Rpb24sICJKUyIs
ICZzdHJpbmcpKSB7CisgICAgICAgICAgICBieXRlcyA9IENHUERGU3RyaW5nR2V0Qnl0ZVB0cihz
dHJpbmcpOworICAgICAgICAgICAgbGVuZ3RoID0gQ0dQREZTdHJpbmdHZXRMZW5ndGgoc3RyaW5n
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJ5dGVzKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgQ0ZTdHJpbmdFbmNvZGluZyBlbmNvZGluZyA9IChsZW5ndGggPiAxICYmIGJ5
dGVzWzBdID09IDB4RkUgJiYgYnl0ZXNbMV0gPT0gMHhGRikgPyBrQ0ZTdHJpbmdFbmNvZGluZ1Vu
aWNvZGUgOiBrQ0ZTdHJpbmdFbmNvZGluZ1VURjg7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gc2NyaXB0KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aEJ5dGVzKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJ5dGVzLCBsZW5ndGgsIGVuY29kaW5nLCB0cnVlKSk7CisgICAgICAgIGlmICgh
c2NyaXB0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc2NyaXB0cy5hcHBlbmQo
c2NyaXB0KTsKKyAgICB9Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjb25zdCB1aW50NjRf
dCBwZGZEb2N1bWVudFJlcXVlc3RJRCA9IDE7IC8vIFBsdWdpbkNvbnRyb2xsZXIgc3VwcG9ydHMg
bG9hZGluZyBtdWx0aXBsZSBzdHJlYW1zLCBidXQgd2Ugb25seSBuZWVkIG9uZSBmb3IgUERGLgor
Citjb25zdCBpbnQgZ3V0dGVySGVpZ2h0ID0gMTA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WCA9
IDA7Citjb25zdCBpbnQgc2hhZG93T2Zmc2V0WSA9IC0yOworY29uc3QgaW50IHNoYWRvd1NpemUg
PSA3OworCitQYXNzUmVmUHRyPFNpbXBsZVBERlBsdWdpbj4gU2ltcGxlUERGUGx1Z2luOjpjcmVh
dGUoV2ViRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2ltcGxlUERG
UGx1Z2luKGZyYW1lKSk7Cit9CisKK1NpbXBsZVBERlBsdWdpbjo6U2ltcGxlUERGUGx1Z2luKFdl
YkZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK1NpbXBsZVBERlBs
dWdpbjo6flNpbXBsZVBERlBsdWdpbigpCit7Cit9CisKK1BsdWdpbkluZm8gU2ltcGxlUERGUGx1
Z2luOjpwbHVnaW5JbmZvKCkKK3sKKyAgICBQbHVnaW5JbmZvIGluZm87CisgICAgaW5mby5uYW1l
ID0gYnVpbHRJblBERlBsdWdpbk5hbWUoKTsKKworICAgIE1pbWVDbGFzc0luZm8gbWltZUNsYXNz
SW5mbzsKKyAgICBtaW1lQ2xhc3NJbmZvLnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIG1p
bWVDbGFzc0luZm8uZGVzYyA9IHBkZkRvY3VtZW50VHlwZURlc2NyaXB0aW9uKCk7CisgICAgbWlt
ZUNsYXNzSW5mby5leHRlbnNpb25zLmFwcGVuZCgicGRmIik7CisKKyAgICBpbmZvLm1pbWVzLmFw
cGVuZChtaW1lQ2xhc3NJbmZvKTsKKyAgICByZXR1cm4gaW5mbzsKK30KKworUGx1Z2luVmlldyog
U2ltcGxlUERGUGx1Z2luOjpwbHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UGx1Z2luVmlldyo+KGNvbnRyb2xsZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIFNpbXBs
ZVBERlBsdWdpbjo6cGx1Z2luVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFBsdWdpblZpZXcqPihjb250cm9sbGVyKCkpOworfQorCit2b2lkIFNpbXBsZVBERlBs
dWdpbjo6dXBkYXRlU2Nyb2xsYmFycygpCit7CisgICAgYm9vbCBoYWRTY3JvbGxiYXJzID0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3Bk
ZkRvY3VtZW50U2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKKyAgICB9IGVsc2UgaWYgKG1fc2l6ZS53aWR0aCgpIDwgbV9wZGZE
b2N1bWVudFNpemUud2lkdGgoKSkKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gY3Jl
YXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworCisgICAgaWYgKG1fdmVydGljYWxT
Y3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKG1fc2l6ZS5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50
U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3Jv
bGxiYXIpOworICAgIH0gZWxzZSBpZiAobV9zaXplLmhlaWdodCgpIDwgbV9wZGZEb2N1bWVudFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBjcmVhdGVTY3JvbGxi
YXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6b250YWxTY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAw
OworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1fdmVydGljYWxTY3JvbGxiYXIg
JiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1fdmVydGlj
YWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgaW50IHBhZ2VTdGVwID0gbV9wYWdlQm94
ZXMuaXNFbXB0eSgpID8gMCA6IG1fcGFnZUJveGVzWzBdLmhlaWdodCgpOworCisgICAgaWYgKG1f
aG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9zaXplLndpZHRoKCkgLSB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKTsKKyAgICAg
ICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KHBsdWdpblZpZXcoKS0+eCgpLCBwbHVnaW5WaWV3KCkt
PnkoKSArIG1fc2l6ZS5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
IG1fc2l6ZS53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNv
bnRyYWN0KG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIDApOworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24obV9zaXplLmhlaWdodCgpIC0g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QoSW50UmVjdChwbHVnaW5WaWV3KCktPngoKSAr
IG1fc2l6ZS53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmll
dygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkp
OworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xs
YmFyUmVjdC5jb250cmFjdCgwLCBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3QpOwor
ICAgIH0KKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFt
ZSgpLT52aWV3KCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgaGFzU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyOworICAgIGlmIChoYWRTY3JvbGxiYXJzICE9IGhhc1Njcm9sbGJhcnMpIHsKKyAg
ICAgICAgaWYgKGhhc1Njcm9sbGJhcnMpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9s
bGFibGVBcmVhKHRoaXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZVZpZXctPnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisgICAgICAgIGZyYW1lVmlldy0+c2V0TmVlZHNM
YXlvdXQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTaW1wbGVQREZQbHVn
aW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sK
KyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAgaWYgKG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIGRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICBlbHNlIAorICAgICAgICBkaWRBZGRWZXJ0
aWNhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+
dmlldygpLT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFz
ZSgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Ny
b2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRh
bFNjcm9sbGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQorICAgICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0
KCkpOworICAgIGVsc2UKKyAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9s
bGJhci5nZXQoKSk7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBz
Y3JvbGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBzY3JvbGxiYXIg
PSAwOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6YWRkQXJjaGl2ZVJlc291cmNlKCkKK3sK
KyAgICAvLyBGSVhNRTogSXQncyBhIGhhY2sgdG8gZm9yY2UgYWRkIGEgcmVzb3VyY2UgdG8gRG9j
dW1lbnRMb2FkZXIuIFBERiBkb2N1bWVudHMgc2hvdWxkIGp1c3QgYmUgZmV0Y2hlZCBhcyBDYWNo
ZWRSZXNvdXJjZXMuCisKKyAgICAvLyBBZGQganVzdCBlbm91Z2ggZGF0YSBmb3IgY29udGV4dCBt
ZW51IGhhbmRsaW5nIGFuZCB3ZWIgYXJjaGl2ZXMgdG8gd29yay4KKyAgICBSZXNvdXJjZVJlc3Bv
bnNlIHN5bnRoZXNpemVkUmVzcG9uc2U7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRTdWdn
ZXN0ZWRGaWxlbmFtZShtX3N1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICBzeW50aGVzaXplZFJlc3Bv
bnNlLnNldFVSTChtX3NvdXJjZVVSTCk7IC8vIE5lZWRzIHRvIG1hdGNoIHRoZSBIaXRUZXN0UmVz
dWx0OjphYnNvbHV0ZVBERlVSTC4KKyAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldE1pbWVUeXBl
KCJhcHBsaWNhdGlvbi9wZGYiKTsKKworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291
cmNlID0gQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoU2hhcmVkQnVmZmVyOjp3cmFwQ0ZEYXRhKG1f
ZGF0YS5nZXQoKSksIG1fc291cmNlVVJMLCAiYXBwbGljYXRpb24vcGRmIiwgU3RyaW5nKCksIFN0
cmluZygpLCBzeW50aGVzaXplZFJlc3BvbnNlKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCkt
PmRvY3VtZW50KCktPmxvYWRlcigpLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UucmVsZWFz
ZSgpKTsKK30KKworc3RhdGljIHZvaWQganNQREZEb2NJbml0aWFsaXplKEpTQ29udGV4dFJlZiBj
dHgsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBTaW1wbGVQREZQbHVnaW4qIHBkZlZpZXcg
PSBzdGF0aWNfY2FzdDxTaW1wbGVQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0
KSk7CisgICAgcGRmVmlldy0+cmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpzUERGRG9jRmluYWxp
emUoSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIFNpbXBsZVBERlBsdWdpbiogcGRmVmlldyA9
IHN0YXRpY19jYXN0PFNpbXBsZVBERlBsdWdpbio+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3Qp
KTsKKyAgICBwZGZWaWV3LT5kZXJlZigpOworfQorCitKU1ZhbHVlUmVmIFNpbXBsZVBERlBsdWdp
bjo6anNQREZEb2NQcmludChKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBTaW1wbGVQ
REZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxTaW1wbGVQREZQbHVnaW4qPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIAorICAgIFdlYkZyYW1lKiBmcmFtZSA9IHBk
ZlZpZXctPm1fZnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lLT5j
b3JlRnJhbWUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGN0eCk7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGN0eCk7CisgICAgCisgICAgcGFnZS0+Y2hyb21lKCktPnByaW50KGNvcmVGcmFtZSk7CisgICAg
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGN0eCk7Cit9CisKK0pTT2JqZWN0UmVm
IFNpbXBsZVBERlBsdWdpbjo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCit7CisgICAg
c3RhdGljIEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAg
ICAgICAgeyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgMCwgMCwg
MCB9LAorICAgIH07CisgICAgCisgICAgc3RhdGljIEpTQ2xhc3NEZWZpbml0aW9uIGpzUERGRG9j
Q2xhc3NEZWZpbml0aW9uID0geworICAgICAgICAwLAorICAgICAgICBrSlNDbGFzc0F0dHJpYnV0
ZU5vbmUsCisgICAgICAgICJEb2MiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICBq
c1BERkRvY1N0YXRpY0Z1bmN0aW9ucywKKyAgICAgICAganNQREZEb2NJbml0aWFsaXplLCBqc1BE
RkRvY0ZpbmFsaXplLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAgfTsKKyAgICAKKyAg
ICBzdGF0aWMgSlNDbGFzc1JlZiBqc1BERkRvY0NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmanNQREZE
b2NDbGFzc0RlZmluaXRpb24pOworICAgIAorICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4LCBq
c1BERkRvY0NsYXNzLCB0aGlzKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnBkZkRvY3Vt
ZW50RGlkTG9hZCgpCit7CisgICAgYWRkQXJjaGl2ZVJlc291cmNlKCk7CisKKyAgICBtX3BkZkRv
Y3VtZW50LmFkb3B0TlMoW1twZGZEb2N1bWVudENsYXNzKCkgYWxsb2NdIGluaXRXaXRoRGF0YToo
TlNEYXRhICopbV9kYXRhLmdldCgpXSk7CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoKTsKKworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKworICAgIHJ1blNjcmlw
dHNJblBERkRvY3VtZW50KCk7Cit9CisgICAgCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cnVuU2Ny
aXB0c0luUERGRG9jdW1lbnQoKQoreworICAgIFZlY3RvcjxSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
ID4gc2NyaXB0czsKKyAgICBnZXRBbGxTY3JpcHRzSW5QREZEb2N1bWVudChbbV9wZGZEb2N1bWVu
dC5nZXQoKSBkb2N1bWVudFJlZl0sIHNjcmlwdHMpOworCisgICAgc2l6ZV90IHNjcmlwdENvdW50
ID0gc2NyaXB0cy5zaXplKCk7CisgICAgaWYgKCFzY3JpcHRDb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSlNHbG9iYWxDb250ZXh0UmVmIGN0eCA9IEpTR2xvYmFsQ29udGV4dENyZWF0ZSgw
KTsKKyAgICBKU09iamVjdFJlZiBqc1BERkRvYyA9IG1ha2VKU1BERkRvYyhjdHgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHRDb3VudDsgKytpKSB7CisgICAgICAgIEpTU3Ry
aW5nUmVmIHNjcmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHNjcmlwdHNbaV0uZ2V0
KCkpOworICAgICAgICBKU0V2YWx1YXRlU2NyaXB0KGN0eCwgc2NyaXB0LCBqc1BERkRvYywgMCwg
MCwgMCk7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShzY3JpcHQpOworICAgIH0KKworICAgIEpT
R2xvYmFsQ29udGV4dFJlbGVhc2UoY3R4KTsKK30KKyAgICAKK3ZvaWQgU2ltcGxlUERGUGx1Z2lu
Ojpjb21wdXRlUGFnZUJveGVzKCkKK3sKKyAgICBzaXplX3QgcGFnZUNvdW50ID0gQ0dQREZEb2N1
bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytpKSB7CisgICAgICAgIENH
UERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2UoW21fcGRmRG9jdW1lbnQu
Z2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7CisgICAgICAgIEFTU0VSVChwZGZQYWdlKTsKKyAg
ICAgICAgCisgICAgICAgIENHUmVjdCBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2Us
IGtDR1BERkNyb3BCb3gpOworICAgICAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAg
ICAgICAgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZNZWRpYUJveCk7
CisgICAgICAgIG1fcGFnZUJveGVzLmFwcGVuZChJbnRSZWN0KGJveCkpOworICAgIH0KK30KKwor
dm9pZCBTaW1wbGVQREZQbHVnaW46OmNhbGN1bGF0ZVNpemVzKCkKK3sKKyAgICBzaXplX3QgcGFn
ZUNvdW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQuZ2V0
KCkgZG9jdW1lbnRSZWZdKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsg
KytpKSB7CisgICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBh
Z2UoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7CisgICAgICAgIEFT
U0VSVChwZGZQYWdlKTsKKworICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVj
dChwZGZQYWdlLCBrQ0dQREZDcm9wQm94KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94
KSkKKyAgICAgICAgICAgIGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERG
TWVkaWFCb3gpOworICAgICAgICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKKyAg
ICAgICAgbV9wZGZEb2N1bWVudFNpemUuc2V0V2lkdGgobWF4KG1fcGRmRG9jdW1lbnRTaXplLndp
ZHRoKCksIHN0YXRpY19jYXN0PGludD4oYm94LnNpemUud2lkdGgpKSk7CisgICAgICAgIG1fcGRm
RG9jdW1lbnRTaXplLmV4cGFuZCgwLCBib3guc2l6ZS5oZWlnaHQpOworICAgIH0KKyAgICBtX3Bk
ZkRvY3VtZW50U2l6ZS5leHBhbmQoMCwgZ3V0dGVySGVpZ2h0ICogKG1fcGFnZUJveGVzLnNpemUo
KSAtIDEpKTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmluaXRpYWxpemUoY29uc3QgUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBMb2FkIHRoZSBzcmMgVVJMIGlmIG5lZWRl
ZC4KKyAgICBtX3NvdXJjZVVSTCA9IHBhcmFtZXRlcnMudXJsOworICAgIGlmICghcGFyYW1ldGVy
cy5zaG91bGRVc2VNYW51YWxMb2FkZXIgJiYgIXBhcmFtZXRlcnMudXJsLmlzRW1wdHkoKSkKKyAg
ICAgICAgY29udHJvbGxlcigpLT5sb2FkVVJMKHBkZkRvY3VtZW50UmVxdWVzdElELCAiR0VUIiwg
cGFyYW1ldGVycy51cmwuc3RyaW5nKCksIFN0cmluZygpLCBIVFRQSGVhZGVyTWFwKCksIFZlY3Rv
cjx1aW50OF90PigpLCBmYWxzZSk7CisKKyAgICBjb250cm9sbGVyKCktPmRpZEluaXRpYWxpemVQ
bHVnaW4oKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OmRl
c3Ryb3koKQoreworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFt
ZVZpZXctPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lT
Y3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0
aWNhbFNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpwYWludChHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQorewor
ICAgIGNvbnRlbnRBcmVhV2lsbFBhaW50KCk7CisKKyAgICBwYWludEJhY2tncm91bmQoZ3JhcGhp
Y3NDb250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgaWYgKCFtX3BkZkRvY3VtZW50KSAvLyBGSVhN
RTogRHJhdyBsb2FkaW5nIHByb2dyZXNzLgorICAgICAgICByZXR1cm47CisKKyAgICBwYWludENv
bnRlbnQoZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOworICAgIHBhaW50Q29udHJvbHMoZ3Jh
cGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cGFp
bnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpncmFwaGljc0NvbnRleHQpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjpncmF5LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpwYWludENv
bnRlbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdy
YXBoaWNzQ29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBncmFwaGljc0NvbnRl
eHQtPnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNo
b3VsZFNtb290aEZvbnRzKHRydWUpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9y
KENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBncmFwaGljc0NvbnRl
eHQtPmNsaXAoZGlydHlSZWN0KTsKKyAgICBJbnRSZWN0IGNvbnRlbnRSZWN0KGRpcnR5UmVjdCk7
CisgICAgY29udGVudFJlY3QubW92ZUJ5KEludFBvaW50KG1fc2Nyb2xsT2Zmc2V0KSk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLW1fc2Nyb2xsT2Zmc2V0LndpZHRoKCksIC1tX3Nj
cm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAx
LCAtMSk7CisKKyAgICBpbnQgcGFnZVRvcCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3BhZ2VCb3hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBJbnRSZWN0IHBhZ2VCb3ggPSBt
X3BhZ2VCb3hlc1tpXTsKKyAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdYID0g
bWF4KHJvdW5kZigobV9zaXplLndpZHRoKCkgLSBwYWdlQm94LndpZHRoKCkpIC8gMi4wZiksIDAu
MGYpOworICAgICAgICBmbG9hdCBleHRyYU9mZnNldEZvckNlbnRlcmluZ1kgPSAobV9wYWdlQm94
ZXMuc2l6ZSgpID09IDEpID8gbWF4KHJvdW5kZigobV9zaXplLmhlaWdodCgpIC0gcGFnZUJveC5o
ZWlnaHQoKSArIHNoYWRvd09mZnNldFkpIC8gMi4wZiksIDAuMGYpIDogMDsKKworICAgICAgICBp
ZiAocGFnZVRvcCA+IGNvbnRlbnRSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAocGFnZVRvcCArIHBhZ2VCb3guaGVpZ2h0KCkgKyBleHRyYU9mZnNldEZvckNlbnRl
cmluZ1kgKyBndXR0ZXJIZWlnaHQgPj0gY29udGVudFJlY3QueSgpKSB7CisgICAgICAgICAgICBD
R1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50
LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworCisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKGV4dHJh
T2Zmc2V0Rm9yQ2VudGVyaW5nWCAtIHBhZ2VCb3gueCgpLCAtZXh0cmFPZmZzZXRGb3JDZW50ZXJp
bmdZIC0gcGFnZUJveC55KCkgLSBwYWdlQm94LmhlaWdodCgpKTsKKworICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKHNoYWRvd09mZnNldFgsIHNoYWRvd09m
ZnNldFkpLCBzaGFkb3dTaXplLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChwYWdlQm94KTsKKyAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xlYXJTaGFkb3coKTsKKworICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5jbGlwKHBhZ2VCb3gpOworCisgICAgICAgICAgICBDR0NvbnRleHREcmF3UERG
UGFnZShjb250ZXh0LCBwZGZQYWdlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVz
dG9yZSgpOworICAgICAgICB9CisgICAgICAgIHBhZ2VUb3AgKz0gcGFnZUJveC5oZWlnaHQoKSAr
IGd1dHRlckhlaWdodDsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAs
IC1wYWdlQm94LmhlaWdodCgpIC0gZ3V0dGVySGVpZ2h0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2lt
cGxlUERGUGx1Z2luOjpwYWludENvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgeworICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7CisgICAgICAg
IEludFJlY3Qgc2Nyb2xsYmFyRGlydHlSZWN0ID0gZGlydHlSZWN0OworICAgICAgICBzY3JvbGxi
YXJEaXJ0eVJlY3QubW92ZUJ5KHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkubG9jYXRpb24oKSk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1wbHVnaW5WaWV3KCktPmZyYW1l
UmVjdCgpLngoKSwgLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueSgpKTsKKworICAgICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7CisKKyAgICAg
ICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7CisgICAgfQor
CisgICAgSW50UmVjdCBkaXJ0eUNvcm5lclJlY3QgPSBpbnRlcnNlY3Rpb24oc2Nyb2xsQ29ybmVy
UmVjdCgpLCBkaXJ0eVJlY3QpOworICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWludFNj
cm9sbENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Cit9CisKK3Zv
aWQgU2ltcGxlUERGUGx1Z2luOjp1cGRhdGVDb250cm9sVGludHMoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQpCit7CisgICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dC0+dXBkYXRpbmdD
b250cm9sVGludHMoKSk7CisKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpZiAobV92ZXJ0aWNh
bFNjcm9sbGJhcikKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwor
ICAgIGludmFsaWRhdGVTY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCgpKTsKK30KKworUGFz
c1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFNpbXBsZVBERlBsdWdpbjo6c25hcHNob3QoKQorewor
ICAgIHJldHVybiAwOworfQorCisjaWYgUExBVEZPUk0oTUFDKQorUGxhdGZvcm1MYXllciogU2lt
cGxlUERGUGx1Z2luOjpwbHVnaW5MYXllcigpCit7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYK
KworCitib29sIFNpbXBsZVBERlBsdWdpbjo6aXNUcmFuc3BhcmVudCgpCit7CisgICAgLy8gVGhp
cyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdlYiBwcm9jZXNzLgorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTaW1wbGVQREZQ
bHVnaW46OndhbnRzV2hlZWxFdmVudHMoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNpbXBsZVBERlBsdWdpbjo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2luVG9S
b290Vmlld1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9zaXplID09IHNpemUpIHsKKyAgICAgICAg
Ly8gTm90aGluZyB0byBkby4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdp
bjo6dmlzaWJpbGl0eURpZENoYW5nZSgpCit7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpm
cmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpmcmFtZURpZEZhaWwodWludDY0X3QsIGJv
b2wpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1
Z2luOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QsIGNvbnN0IFdURjo6U3RyaW5nJikK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgS1VSTCYs
IHVpbnQzMl90LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlE
LCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX3N1Z2dlc3RlZEZp
bGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c3RyZWFtRGlkUmVjZWl2
ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVx
dWVzdElEKTsKKworICAgIGlmICghbV9kYXRhKQorICAgICAgICBtX2RhdGEuYWRvcHRDRihDRkRh
dGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBTaW1wbGVQREZQbHVnaW46OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qg
c3RyZWFtSUQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRm
RG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgcGRmRG9jdW1lbnREaWRMb2FkKCk7Cit9CisKK3Zv
aWQgU2ltcGxlUERGUGx1Z2luOjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29s
IHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9
PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKwordm9p
ZCBTaW1wbGVQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBL
VVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1v
ZGlmaWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lKQoreworICAgIG1fc3VnZ2VzdGVkRmls
ZW5hbWUgPSBzdWdnZXN0ZWRGaWxlbmFtZTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46Om1h
bnVhbFN0cmVhbURpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQor
eworICAgIGlmICghbV9kYXRhKQorICAgICAgICBtX2RhdGEuYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKKworICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YS5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKK30KKwordm9pZCBT
aW1wbGVQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKQoreworICAgIHBk
ZkRvY3VtZW50RGlkTG9hZCgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6bWFudWFsU3Ry
ZWFtRGlkRmFpbChib29sKQoreworICAgIG1fZGF0YS5jbGVhcigpOworfQorCitib29sIFNpbXBs
ZVBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkK
K3sKKyAgICBzd2l0Y2ggKGV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNl
TW92ZToKKyAgICAgICAgbW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsKKyAgICAgICAgLy8gRklY
TUU6IFNob3VsZCBhbHNvIG5vdGlmeSBzY3JvbGxiYXIgdG8gc2hvdyBob3ZlciBlZmZlY3QuIFNo
b3VsZCBhbHNvIHNlbmQgbW91c2VFeGl0ZWQgdG8gaGlkZSBpdC4KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXZWJFdmVudDo6TW91c2VEb3duOiB7CisgICAgICAgIC8vIFJldHVybmluZyBmYWxz
ZSBhcyB3aWxsIG1ha2UgRXZlbnRIYW5kbGVyIHVuZm9jdXMgdGhlIHBsdWctaW4sIHdoaWNoIGlz
IGFwcHJvcHJpYXRlIHdoZW4gY2xpY2tpbmcgc2Nyb2xsYmFycy4KKyAgICAgICAgLy8gSWRlYWxs
eSwgd2Ugd291bGRuJ3QgY2hhbmdlIGZvY3VzIGF0IGFsbCwgYnV0IFBsdWdpblZpZXcgYWxyZWFk
eSBkaWQgdGhhdCBmb3IgdXMuCisgICAgICAgIC8vIFdoZW4gc3VwcG9ydCBmb3IgUERGIGZvcm1z
IGlzIGFkZGVkLCB3ZSdsbCBuZWVkIHRvIGFjdHVhbGx5IGZvY3VzIHRoZSBwbHVnLWluIHdoZW4g
Y2xpY2tpbmcgaW4gYSBmb3JtLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXZWJF
dmVudDo6TW91c2VVcDogeworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgcGxhdGZvcm1FdmVu
dCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikK
KyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50
KTsKKyAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3JtRXZlbnQpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFdlYldoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIFBsYXRmb3JtV2hlZWxFdmVudCBw
bGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudChwbGF0Zm9ybUV2ZW50KTsKK30KKworYm9vbCBTaW1wbGVQREZQ
bHVnaW46OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKK3sKKyAg
ICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JikKK3sKKyAgICBtb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICAvLyBVc2UgZGVmYXVsdCBXZWJLaXQgY29udGV4dCBt
ZW51LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRs
ZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c2V0Rm9jdXMoYm9vbCBoYXNGb2N1cykK
K3sKK30KKworTlBPYmplY3QqIFNpbXBsZVBERlBsdWdpbjo6cGx1Z2luU2NyaXB0YWJsZU5QT2Jq
ZWN0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKwordm9pZCBT
aW1wbGVQREZQbHVnaW46OndpbmRvd0ZvY3VzQ2hhbmdlZChib29sKQoreworfQorCit2b2lkIFNp
bXBsZVBERlBsdWdpbjo6d2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKQoreworfQorCit2b2lkIFNpbXBs
ZVBERlBsdWdpbjo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBT
aW1wbGVQREZQbHVnaW46OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KQoreworfQor
Cit1aW50NjRfdCBTaW1wbGVQREZQbHVnaW46OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlm
aWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
OnNlbmRDb21wbGV4VGV4dElucHV0KGNvbnN0IFN0cmluZyYpCit7Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjpzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpCit7Cit9CisK
KyNlbmRpZgorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFu
Z2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpwcml2YXRlQnJvd3NpbmdT
dGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmdldEZvcm1W
YWx1ZShTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTaW1wbGVQREZQ
bHVnaW46OmhhbmRsZVNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICByZXR1cm4gc2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOworfQorCitTY3JvbGxiYXIqIFNpbXBsZVBERlBsdWdpbjo6aG9yaXpvbnRhbFNj
cm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsKK30K
KworU2Nyb2xsYmFyKiBTaW1wbGVQREZQbHVnaW46OnZlcnRpY2FsU2Nyb2xsYmFyKCkKK3sKKyAg
ICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsKK30KKworSW50UmVjdCBTaW1wbGVQ
REZQbHVnaW46OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAoreworICAgIGlmICghbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIHx8ICFtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gSW50
UmVjdCgpOworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpKSB7CisgICAgICAgIEFTU0VSVChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSk7CisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgfQorICAgIHJldHVybiBJ
bnRSZWN0KHBsdWdpblZpZXcoKS0+d2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRo
KCksIHBsdWdpblZpZXcoKS0+aGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpLCBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFNpbXBsZVBERlBsdWdpbjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBm
cmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFibGUgcGFyZW50IGZyYW1lIG9yIFJlbmRl
ckxheWVyLgorICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IFNpbXBsZVBERlBsdWdpbjo6c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBsdWdpblZpZXco
KS0+ZnJhbWVSZWN0KCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IEludFNp
emUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJl
dHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxpdCBwYXJ0cyB0aGF0IHJlbWFpbiB2aXNpYmxlLgor
ICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpKTsKK30KKworaW50IFNpbXBsZVBERlBsdWdpbjo6c2Nyb2xsU2l6
ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxi
YXIqIHNjcm9sbGJhciA9ICgob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBt
X2hvcml6b250YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICBy
ZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZp
c2libGVTaXplKCkpIDogMDsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46OmlzQWN0aXZlKCkg
Y29uc3QKK3sKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgp
KSB7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCisgICAgICAg
ICAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6aW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OworICAgIGRpcnR5UmVjdC5tb3ZlQnko
c2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KC1wbHVnaW5WaWV3
KCktPmxvY2F0aW9uKCkpOworICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShkaXJ0eVJlY3Qp
OworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUocmVj
dCk7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFNpbXBsZVBERlBsdWdpbjo6c2Ny
b2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgaWYgKHNjcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxPZmZzZXQud2lkdGgoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQu
aGVpZ2h0KCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K0ludFBvaW50IFNpbXBsZVBERlBsdWdpbjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAg
IHJldHVybiBJbnRQb2ludChtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3Njcm9sbE9mZnNldC5o
ZWlnaHQoKSk7Cit9CisKK0ludFBvaW50IFNpbXBsZVBERlBsdWdpbjo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Cit9CisKK0ludFBv
aW50IFNpbXBsZVBERlBsdWdpbjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIg
JiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7CisK
KyAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkgLSBt
X3NpemUud2lkdGgoKSArIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1lbnRTaXpl
LmhlaWdodCgpIC0gbV9zaXplLmhlaWdodCgpICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7
CisgICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIG1h
eGltdW1PZmZzZXQ7Cit9CisKK2ludCBTaW1wbGVQREZQbHVnaW46OnZpc2libGVIZWlnaHQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Cit9CisKK2ludCBTaW1wbGVQREZQ
bHVnaW46OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OworfQorCitJbnRTaXplIFNpbXBsZVBERlBsdWdpbjo6Y29udGVudHNTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wZGZEb2N1bWVudFNpemU7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2lu
OjpzY3JvbGxiYXJzQ2FuQmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiAhcGx1Z2luVmll
dygpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpOworfQorCit2b2lkIFNpbXBs
ZVBERlBsdWdpbjo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0ZSkK
K3sKKyAgICBpZiAoIWZvcmNlVXBkYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0
aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNjcm9s
bGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxheSB3
aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KKyAgICBJbnRQb2ludCBuZXdT
Y3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkpOworICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQpOwor
CisgICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJhcnMg
bWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KKyAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7CisKKyAgICBTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKCk7Cit9CisKK0ludFJl
Y3QgU2ltcGxlUERGUGx1Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3Qp
IGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1v
dmUoc2Nyb2xsYmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKyAg
ICAKKyAgICByZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9t
UmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCByZWN0KTsKK30KKworSW50UmVjdCBT
aW1wbGVQREZQbHVnaW46OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QK
K3sKKyAgICBJbnRSZWN0IHJlY3QgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29u
dmVydFRvUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAg
ICByZWN0Lm1vdmUocGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlv
bigpKTsKKyAgICAKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgU2ltcGxlUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAg
ICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xs
YmFyLT5sb2NhdGlvbigpIC0gcGx1Z2luVmlldygpLT5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBy
ZXR1cm4gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIo
cGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFNpbXBsZVBE
RlBsdWdpbjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7Cisg
ICAgSW50UG9pbnQgcG9pbnQgPSBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+Y29udmVy
dFRvUmVuZGVyZXIocGx1Z2luVmlldygpLT5yZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAg
cG9pbnQubW92ZShwbHVnaW5WaWV3KCktPmxvY2F0aW9uKCkgLSBzY3JvbGxiYXItPmxvY2F0aW9u
KCkpOworICAgIAorICAgIHJldHVybiBwb2ludDsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46
OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAg
Citib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAppbmRleCBkMTk3YTY3Li45OGY4NzcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCkBAIC0xODgsNiArMTg4
LDE1IEBAIHB1YmxpYzoKICAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhlIHBh
c3NlZCBpbiBrZXlib2FyZCBldmVudC4gVGhlIHBsdWctaW4gc2hvdWxkIHJldHVybiB0cnVlIGlm
IGl0IHByb2Nlc3NlZCB0aGUgZXZlbnQuCiAgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJk
RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpID0gMDsKICAgICAKKyAgICAvLyBUZWxscyB0
aGUgcGx1Zy1pbiB0byBoYW5kbGUgdGhlIHBhc3NlZCBpbiBlZGl0aW5nIGNvbW1hbmQuIFRoZSBw
bHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBleGVjdXRlZCB0aGUgY29tbWFuZC4KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCkgPSAwOworICAgIAorICAgIC8vIEFzayB0aGUg
cGx1Zy1pbiB3aGV0aGVyIGl0IHdpbGwgYmUgYWJsZSB0byBoYW5kbGUgdGhlIGdpdmVuIGVkaXRp
bmcgY29tbWFuZC4KKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29u
c3QgU3RyaW5nJikgPSAwOworICAgIAorICAgIC8vIEFzayB0aGUgcGx1Zy1pbiB3aGV0aGVyIGl0
IHdhbnRzIHRvIG92ZXJyaWRlIGZ1bGwtcGFnZSB6b29tLgorICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVzUGFnZVNjYWxlRmFjdG9yKCkgPSAwOworICAgIAogICAgIC8vIFRlbGxzIHRoZSBwbHVnLWlu
IGFib3V0IGZvY3VzIGNoYW5nZXMuCiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpID0g
MDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94
eS5jcHAKaW5kZXggMGY0ZmQ3MC4uOThmMzMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBAIC00MDMsNiArNDAzLDMzIEBAIHZv
aWQgUGx1Z2luUHJveHk6OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCiAgICAgbV9jb25uZWN0aW9u
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6U2V0
Rm9jdXMoaGFzRm9jdXMpLCBtX3BsdWdpbkluc3RhbmNlSUQpOwogfQogCitib29sIFBsdWdpblBy
b3h5OjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlm
ICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5D
b250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVu
dCksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZUVkaXRpbmdDb21tYW5k
OjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBoYW5kbGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94
eTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKK3sK
KyAgICBib29sIGVuYWJsZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbi0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0VkaXRp
bmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFtZSksIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVy
UHJveHk6OklzRWRpdGluZ0NvbW1hbmRFbmFibGVkOjpSZXBseShlbmFibGVkKSwgbV9wbHVnaW5J
bnN0YW5jZUlEKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBlbmFi
bGVkOworfQorICAgIAorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
Cit7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFu
ZGxlc1BhZ2VTY2FsZUZhY3RvcigpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpI
YW5kbGVzUGFnZVNjYWxlRmFjdG9yOjpSZXBseShoYW5kbGVkKSwgbV9wbHVnaW5JbnN0YW5jZUlE
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBoYW5kbGVkOworfQor
CiBOUE9iamVjdCogUGx1Z2luUHJveHk6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCiB7CiAg
ICAgLy8gU2VuZGluZyB0aGUgc3luY2hyb25vdXMgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQ
cm94eTo6R2V0UGx1Z2luU2NyaXB0YWJsZU5QT2JqZWN0IG1lc3NhZ2UgY2FuIGNhdXNlIHVzIHRv
IGRpc3BhdGNoIGFuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm94eS5oCmluZGV4IDdhMzZjMWEuLjAyZmExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5oCkBAIC0xMDEsNiArMTAxLDExIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2Vi
TW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7Cisg
ICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSBPVkVS
UklERTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOwor
ICAgIAogICAgIHZpcnR1YWwgTlBPYmplY3QqIHBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpOwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93Rm9jdXNDaGFuZ2VkKGJv
b2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCmluZGV4IGExZTgxMjYuLmQwYTVlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTI3MSw2ICsyNzEsNyBAQCBQbHVnaW5W
aWV3OjpQbHVnaW5WaWV3KFBhc3NSZWZQdHI8SFRNTFBsdWdJbkVsZW1lbnQ+IHBsdWdpbkVsZW1l
bnQsIFBhc3NSZWZQdHI8UAogI2VuZGlmCiAgICAgLCBtX21hbnVhbFN0cmVhbVN0YXRlKFN0cmVh
bVN0YXRlSW5pdGlhbCkKICAgICAsIG1fcGx1Z2luU25hcHNob3RUaW1lcih0aGlzLCAmUGx1Z2lu
Vmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkLCBwbHVnaW5TbmFwc2hvdFRpbWVyRGVsYXkp
CisgICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogewogICAgIG1fd2ViUGFnZS0+YWRkUGx1Z2lu
Vmlldyh0aGlzKTsKIH0KQEAgLTQyNyw2ICs0MjgsMTggQEAgdm9pZCBQbHVnaW5WaWV3OjpwYWdl
U2NhbGVGYWN0b3JEaWRDaGFuZ2UoKQogICAgIHZpZXdHZW9tZXRyeURpZENoYW5nZSgpOwogfQog
Cit2b2lkIFBsdWdpblZpZXc6OnNldFBhZ2VTY2FsZUZhY3Rvcihkb3VibGUgc2NhbGVGYWN0b3Is
IEludFBvaW50KQoreworICAgIG1fcGFnZVNjYWxlRmFjdG9yID0gc2NhbGVGYWN0b3I7CisgICAg
bV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3RvckRp
ZENoYW5nZShzY2FsZUZhY3RvcikpOworICAgIHBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwor
fQorCitkb3VibGUgUGx1Z2luVmlldzo6cGFnZVNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4g
bV9wYWdlU2NhbGVGYWN0b3I7Cit9CisKIHZvaWQgUGx1Z2luVmlldzo6d2ViUGFnZURlc3Ryb3ll
ZCgpCiB7CiAgICAgbV93ZWJQYWdlID0gMDsKQEAgLTc2MCw2ICs3NzMsMTYgQEAgdm9pZCBQbHVn
aW5WaWV3OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQpCiAgICAgaWYgKGRpZEhhbmRsZUV2ZW50
KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KKyAgICAKK2Jvb2wgUGx1
Z2luVmlldzo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwg
Y29uc3QgU3RyaW5nJiBhcmd1bWVudCkKK3sKKyAgICByZXR1cm4gbV9wbHVnaW4tPmhhbmRsZUVk
aXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7Cit9CisgICAgCitib29sIFBsdWdp
blZpZXc6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUp
Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5pc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5k
TmFtZSk7Cit9CiAKIHZvaWQgUGx1Z2luVmlldzo6bm90aWZ5V2lkZ2V0KFdpZGdldE5vdGlmaWNh
dGlvbiBub3RpZmljYXRpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuaAppbmRleCAxM2UwYTk3Li4wZDBkZmEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTc5LDEwICs3OSwxNyBA
QCBwdWJsaWM6CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXM7IG5vYm9keSBzaG91bGQgaGF2
ZSB0byBrbm93IGFib3V0IHRoZSBwbHVnLWluIHZpZXcncyByZW5kZXJlciBleGNlcHQgdGhlIHBs
dWctaW4gdmlldyBpdHNlbGYuCiAgICAgV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
bmRlcmVyKCkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRQYWdlU2NhbGVGYWN0b3IoZG91Ymxl
IHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpJbnRQb2ludCBvcmlnaW4pOworICAgIGRvdWJsZSBwYWdl
U2NhbGVGYWN0b3IoKTsKKyAgICBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKSB7IHJldHVy
biBtX3BsdWdpbi0+aGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpOyB9CiAKICAgICB2b2lkIHBhZ2VT
Y2FsZUZhY3RvckRpZENoYW5nZSgpOwogICAgIHZvaWQgd2ViUGFnZURlc3Ryb3llZCgpOwogCisg
ICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpOworICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRp
bmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKKwogcHJpdmF0ZToK
ICAgICBQbHVnaW5WaWV3KFBhc3NSZWZQdHI8V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQ+LCBQ
YXNzUmVmUHRyPFBsdWdpbj4sIGNvbnN0IFBsdWdpbjo6UGFyYW1ldGVycyYgcGFyYW1ldGVycyk7
CiAgICAgdmlydHVhbCB+UGx1Z2luVmlldygpOwpAQCAtMjM2LDYgKzI0Myw4IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV90cmFuc2llbnRQYWludGluZ1NuYXBzaG90
OwogICAgIC8vIFRoaXMgdGltZXIgaXMgdXNlZCB3aGVuIHBsdWdpbiBzbmFwc2hvdHRpbmcgaXMg
ZW5hYmxlZCwgdG8gY2FwdHVyZSBhIHBsdWdpbiBwbGFjZWhvbGRlci4KICAgICBXZWJDb3JlOjpE
ZWZlcnJhYmxlT25lU2hvdFRpbWVyPFBsdWdpblZpZXc+IG1fcGx1Z2luU25hcHNob3RUaW1lcjsK
KworICAgIGRvdWJsZSBtX3BhZ2VTY2FsZUZhY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA2ZGEyNDI1Li5jMjk0
NjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTE0NiwxMCArMTE0
Niw5IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUoKQogICAg
IC8vIEluZm9ybSB0aGUgVUkgcHJvY2VzcyBvZiB0aGUgc2NhbGUgZmFjdG9yLgogICAgIGRvdWJs
ZSBzY2FsZUZhY3RvciA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+aGlzdG9yeSgp
LT5jdXJyZW50SXRlbSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKIAotICAgIC8vIEEgc2NhbGUgZmFj
dG9yIG9mIDAuMCBtZWFucyB0aGUgaGlzdG9yeSBpdGVtIGFjdHVhbGx5IGhhcyB0aGUgImRlZmF1
bHQgc2NhbGUgZmFjdG9yIiBvZiAxLjAuCi0gICAgaWYgKCFzY2FsZUZhY3RvcikKLSAgICAgICAg
c2NhbGVGYWN0b3IgPSAxLjA7Ci0gICAgbV9mcmFtZS0+cGFnZSgpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZShzY2FsZUZhY3RvcikpOworICAg
IC8vIEEgc2NhbGUgZmFjdG9yIG9mIDAgbWVhbnMgdGhlIGhpc3RvcnkgaXRlbSBoYXMgdGhlIGRl
ZmF1bHQgc2NhbGUgZmFjdG9yLCB0aHVzIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSBpdC4KKyAg
ICBpZiAoc2NhbGVGYWN0b3IpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVGYWN0b3IpKTsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiBXZWJDb3JlIHNo
b3VsZCBiZSBjb3JyZWN0bHkgaW52YWxpZGF0aW5nCiAgICAgLy8gdGhlIHZpZXcgb24gcmVzdG9y
ZXMgZnJvbSB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgpAQCAtMTIxNiw3ICsxMjE1LDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZy
YW1lKENhY2hlZEZyYW1lKikKICAgICBib29sIGlzTWFpbkZyYW1lID0gd2ViUGFnZS0+bWFpbldl
YkZyYW1lKCkgPT0gbV9mcmFtZTsKICAgICAKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+cmVzcG9uc2UoKTsKLSAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01h
aW5GcmFtZSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50
YXRpb24gPSBpc01haW5GcmFtZSAmJiB3ZWJQYWdlLT5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlKHJlc3BvbnNlKTsKICAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGUg
PSB0cnVlOwogfQogCkBAIC0xMjMwLDcgKzEyMjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKICAgICBJbnRSZWN0IGN1cnJl
bnRWaXNpYmxlQ29udGVudEJvdW5kcyA9IG1fZnJhbWUtPnZpc2libGVDb250ZW50Qm91bmRzKCk7
CiAKICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSA9IG1fZnJhbWUtPmNvcmVG
cmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKTsKLSAgICBtX2Zy
YW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01haW5GcmFtZSAmJiBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKHJlc3BvbnNl
KTsKKyAgICBtX2ZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24gPSBpc01haW5GcmFtZSAmJiB3
ZWJQYWdlLT5zaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKHJlc3BvbnNl
KTsKICAgICBtX2ZyYW1lQ2FtZUZyb21QYWdlQ2FjaGUgPSBmYWxzZTsKIAogICAgIG1fZnJhbWUt
PmNvcmVGcmFtZSgpLT5jcmVhdGVWaWV3KHdlYlBhZ2UtPnNpemUoKSwgYmFja2dyb3VuZENvbG9y
LCAvKiB0cmFuc3BhcmVudCAqLyBmYWxzZSwgSW50U2l6ZSgpLCBzaG91bGRVc2VGaXhlZExheW91
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5k
ZXggZTI2ZWI4OC4uOTBiYmEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtMTA3LDYgKzEwNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUJ1ZmZlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9TY2hlbWVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NyaXB0VmFsdWUuaD4K
QEAgLTE1MCw3ICsxNTEsMTAgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1
ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisjaW5jbHVkZSAiU2ltcGxlUERGUGx1Z2luLmgiCisjaWYg
RU5BQkxFKFBERktJVF9QTFVHSU4pCisjaW5jbHVkZSAiUERGUGx1Z2luLmgiCisjZW5kaWYKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0yMTksNiArMjIzLDcgQEAgV2ViUGFnZTo6V2Vi
UGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCiAgICAgLCBtX2FydGlmaWNpYWxQbHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5h
YmxlZChmYWxzZSkKICAgICAsIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChm
YWxzZSkKICNpZiBQTEFURk9STShNQUMpCisgICAgLCBtX3BkZlBsdWdpbkVuYWJsZWQoZmFsc2Up
CiAgICAgLCBtX3dpbmRvd0lzVmlzaWJsZShmYWxzZSkKICAgICAsIG1faXNTbWFydEluc2VydERl
bGV0ZUVuYWJsZWQocGFyYW1ldGVycy5pc1NtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCkKICAgICAs
IG1fbGF5ZXJIb3N0aW5nTW9kZShwYXJhbWV0ZXJzLmxheWVySG9zdGluZ01vZGUpCkBAIC00NjYs
OCArNDcxLDEzIEBAIFBhc3NSZWZQdHI8UGx1Z2luPiBXZWJQYWdlOjpjcmVhdGVQbHVnaW4oV2Vi
RnJhbWUqIGZyYW1lLCBIVE1MUGx1Z0luRWxlbWVudCogcGx1CiAgICAgaWYgKHBsdWdpblBhdGgu
aXNOdWxsKCkpIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLm1p
bWVUeXBlID09ICJhcHBsaWNhdGlvbi9wZGYiCi0gICAgICAgICAgICB8fCAocGFyYW1ldGVycy5t
aW1lVHlwZS5pc0VtcHR5KCkgJiYgcGFyYW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5kc1dp
dGgoIi5wZGYiKSkpCi0gICAgICAgICAgICByZXR1cm4gQnVpbHRJblBERlZpZXc6OmNyZWF0ZShm
cmFtZSk7CisgICAgICAgICAgICB8fCAocGFyYW1ldGVycy5taW1lVHlwZS5pc0VtcHR5KCkgJiYg
cGFyYW1ldGVycy51cmwucGF0aCgpLmxvd2VyKCkuZW5kc1dpdGgoIi5wZGYiKSkpIHsKKyNpZiBF
TkFCTEUoUERGS0lUX1BMVUdJTikKKyAgICAgICAgICAgIGlmIChwZGZQbHVnaW5FbmFibGVkKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFBERlBsdWdpbjo6Y3JlYXRlKGZyYW1lKTsKKyNlbmRp
ZgorICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVBERlBsdWdpbjo6Y3JlYXRlKGZyYW1lKTsKKyAg
ICAgICAgfQogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKICNlbmRpZgpAQCAt
NjE4LDExICs2MjgsMjcgQEAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gV2ViUGFnZTo6dHJh
Y2tlZFJlcGFpbnRSZWN0cygpCiAgICAgcmV0dXJuIEltbXV0YWJsZUFycmF5OjphZG9wdCh2ZWN0
b3IpOwogfQogCitzdGF0aWMgUGx1Z2luVmlldyogcGx1Z2luVmlld0ZvckZyYW1lKEZyYW1lKiBm
cmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpLT5pc1BsdWdpbkRvY3VtZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUGx1Z2luRG9jdW1lbnQqIHBsdWdpbkRvY3VtZW50
ID0gc3RhdGljX2Nhc3Q8UGx1Z2luRG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAg
UGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0PFBsdWdpblZpZXcqPihwbHVnaW5E
b2N1bWVudC0+cGx1Z2luV2lkZ2V0KCkpOworICAgIHJldHVybiBwbHVnaW5WaWV3OworfQorCiB2
b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0g
cGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkgeworICAgICAgICBwbHVnaW5WaWV3LT5oYW5kbGVF
ZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAogICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSkuZXhl
Y3V0ZShhcmd1bWVudCk7CiB9CiAKQEAgLTYzMSw2ICs2NTcsOSBAQCBib29sIFdlYlBhZ2U6Omlz
RWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCiAgICAgRnJh
bWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFBs
dWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUoZnJhbWUpKQorICAgICAg
ICByZXR1cm4gcGx1Z2luVmlldy0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUp
OwogICAgIAogICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKGNvbW1hbmROYW1lKTsKICAgICByZXR1cm4gY29tbWFuZC5pc1N1cHBvcnRlZCgpICYm
IGNvbW1hbmQuaXNFbmFibGVkKCk7CkBAIC0xMDcxLDggKzExMDAsMTQgQEAgdm9pZCBXZWJQYWdl
Ojp3aW5kb3dTY3JlZW5EaWRDaGFuZ2UodWludDY0X3QgZGlzcGxheUlEKQogCiB2b2lkIFdlYlBh
Z2U6OnNjYWxlUGFnZShkb3VibGUgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4pCiB7Cisg
ICAgUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2UtPm1h
aW5GcmFtZSgpKTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+c2V0UGFnZVNjYWxlRmFjdG9y
KHNjYWxlLCBvcmlnaW4pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIG1fcGFn
ZS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlLCBvcmlnaW4pOwotCisgICAgCiAgICAgZm9yIChI
YXNoU2V0PFBsdWdpblZpZXcqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3BsdWdpblZpZXdzLmJl
Z2luKCksIGVuZCA9IG1fcGx1Z2luVmlld3MuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAg
ICAgKCppdCktPnBhZ2VTY2FsZUZhY3RvckRpZENoYW5nZSgpOwogCkBAIC0xMDgxLDYgKzExMTYs
MTAgQEAgdm9pZCBXZWJQYWdlOjpzY2FsZVBhZ2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2lu
dCYgb3JpZ2luKQogCiBkb3VibGUgV2ViUGFnZTo6cGFnZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsK
KyAgICBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKG1fcGFnZS0+
bWFpbkZyYW1lKCkpOworICAgIGlmIChwbHVnaW5WaWV3ICYmIHBsdWdpblZpZXctPmhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IoKSkKKyAgICAgICAgcmV0dXJuIHBsdWdpblZpZXctPnBhZ2VTY2FsZUZh
Y3RvcigpOworICAgIAogICAgIHJldHVybiBtX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwogfQog
CkBAIC0xNTMxLDkgKzE1NzAsMTMgQEAgdm9pZCBXZWJQYWdlOjp2YWxpZGF0ZUNvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBpbnQzMl90
IHN0YXRlID0gMDsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgRWRpdG9y
OjpDb21tYW5kIGNvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUp
OwotICAgICAgICBzdGF0ZSA9IGNvbW1hbmQuc3RhdGUoKTsKLSAgICAgICAgaXNFbmFibGVkID0g
Y29tbWFuZC5pc1N1cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgICAgIGlm
IChQbHVnaW5WaWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkKKyAg
ICAgICAgICAgIGlzRW5hYmxlZCA9IHBsdWdpblZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVk
KGNvbW1hbmROYW1lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1h
bmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7CisgICAg
ICAgICAgICBzdGF0ZSA9IGNvbW1hbmQuc3RhdGUoKTsKKyAgICAgICAgICAgIGlzRW5hYmxlZCA9
IGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWYWxpZGF0ZUNvbW1h
bmRDYWxsYmFjayhjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSwgY2FsbGJhY2tJRCkpOwpA
QCAtMjA1Miw2ICsyMDk1LDEwIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMoY29u
c3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKICAgICBtX3Njcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWQgPSBzdG9yZS5nZXRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5j
ZXNLZXk6OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRLZXkoKSk7CiAKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgbV9wZGZQbHVnaW5FbmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVl
Rm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpwZGZQbHVnaW5FbmFibGVkS2V5KCkpOworI2VuZGlm
CisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgZ2VuZXJhdGVkIGZyb20gbWFjcm8gZXhw
YW5zaW9uIGZvciBhbGwgcHJlZmVyZW5jZXMsCiAgICAgLy8gYnV0IHdlIGN1cnJlbnRseSBkb24n
dCBtYXRjaCB0aGUgbmFtaW5nIG9mIFdlYkNvcmUgZXhhY3RseSBzbyB3ZSBhcmUKICAgICAvLyBo
YW5kcm9sbGluZyB0aGUgYm9vbGVhbiBhbmQgaW50ZWdlciBwcmVmZXJlbmNlcyB1bnRpbCB0aGF0
IGlzIGZpeGVkLgpAQCAtMzM5MSw0ICszNDM4LDI0IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2Nyb2xs
aW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgZnJhbWVWaWV3
LT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVuYWJsZWQpOwogfQogCitz
dGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICBTdHJpbmcgcGx1Z2luUGF0aDsKKyAgICBib29sIGJsb2NrZWQ7
CisgICAgCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgocmVzcG9uc2UubWlt
ZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXRQbHVnaW5QYXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2VkKSwgMCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gIWJsb2NrZWQgJiYgIXBsdWdpblBh
dGguaXNFbXB0eSgpOworfQorCitib29sIFdlYlBhZ2U6OnNob3VsZFVzZUN1c3RvbVJlcHJlc2Vu
dGF0aW9uRm9yUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpIGNvbnN0
Cit7CisgICAgaWYgKCFtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuY29udGFp
bnMocmVzcG9uc2UubWltZVR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IElmIGEgcGx1Zy1pbiBleGlzdHMgdGhhdCBjbGFpbXMgdG8gc3VwcG9ydCB0aGlzIHJlc3BvbnNl
LCBpdCBzaG91bGQgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIGN1c3RvbSByZXByZXNlbnRhdGlv
bi4KKyAgICByZXR1cm4gIWNhblBsdWdpbkhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCA0ZDk1MjQ2Li42NWEwNGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQcmludENvbnRleHQ7CiAgICAg
Y2xhc3MgUmFuZ2U7CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKICAgICBjbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgU2hhcmVkQnVmZmVyOwogICAgIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CkBAIC01ODEsNiArNTgyLDggQEAgcHVibGljOgogICAgIHVpbnQ2NF90IG5hdGl2
ZVdpbmRvd0hhbmRsZSgpIHsgcmV0dXJuIG1fbmF0aXZlV2luZG93SGFuZGxlOyB9CiAjZW5kaWYK
IAorICAgIGJvb2wgc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJikgY29uc3Q7CisKICAgICBib29sIGFzeW5jaHJv
bm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNo
cm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkOyB9CiAgICAgdm9pZCBzZXRBc3luY2hy
b25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYXN5bmNo
cm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkID0gZW5hYmxlZDsgfQogICAgIGJvb2wg
YXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkRm9yQWxsUGx1Z2lucygpIGNv
bnN0IHsgcmV0dXJuIG1fYXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkRm9y
QWxsUGx1Z2luczsgfQpAQCAtNTkzLDYgKzU5NiwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxpbmdQZXJm
b3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIGJv
b2wgcGRmUGx1Z2luRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGRmUGx1Z2luRW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0UERGUGx1Z2luRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9wZGZQbHVn
aW5FbmFibGVkID0gZW5hYmxlZDsgfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
c3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+IHBkZkFuZFBvc3RTY3JpcHRN
SU1FVHlwZXMoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIFdlYlBhZ2UodWludDY0X3QgcGFn
ZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKQEAgLTc5Niw2ICs4MDgs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkOwogCiAjaWYgUExBVEZPUk0oTUFDKQorICAgIGJvb2wgbV9wZGZQbHVnaW5FbmFibGVkOwor
CiAgICAgLy8gV2hldGhlciB0aGUgY29udGFpbmluZyB3aW5kb3cgaXMgdmlzaWJsZSBvciBub3Qu
CiAgICAgYm9vbCBtX3dpbmRvd0lzVmlzaWJsZTsKIApAQCAtOTIzLDYgKzkzNyw4IEBAIHByaXZh
dGU6CiAgICAgV2ViQ29yZTo6UGFnZVZpc2liaWxpdHlTdGF0ZSBtX3Zpc2liaWxpdHlTdGF0ZTsK
ICNlbmRpZgogICAgIFdlYkluc3BlY3RvckNsaWVudCogbV9pbnNwZWN0b3JDbGllbnQ7CisKKyAg
ICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtX21pbWVUeXBlc1dpdGhDdXN0b21S
ZXByZXNlbnRhdGlvbnM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCAy
MjI3M2MxLi4yYWNmODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC05NCw2ICs5NCwxNCBAQCB2b2lkIFdlYlBhZ2U6
OnBsYXRmb3JtUHJlZmVyZW5jZXNEaWRDaGFuZ2UoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYg
c3RvcmUpCiB7CiAgICAgaWYgKFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gdGhpcy0+aW5zcGVj
dG9yKCkpCiAgICAgICAgIGluc3BlY3Rvci0+c2V0SW5zcGVjdG9yVXNlc1dlYktpdFVzZXJJbnRl
cmZhY2Uoc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjppbnNwZWN0
b3JVc2VzV2ViS2l0VXNlckludGVyZmFjZUtleSgpKSk7CisKKyAgICBCT09MIG9taXRQREZTdXBw
b3J0ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpA
IldlYktpdE9taXRQREZTdXBwb3J0Il07CisgICAgaWYgKCFwZGZQbHVnaW5FbmFibGVkKCkgJiYg
IW9taXRQREZTdXBwb3J0KSB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gdXNlIGEgUERGIHZpZXcg
aW4gdGhlIFVJIHByb2Nlc3MgZm9yIFBERiBNSU1FIHR5cGVzLgorICAgICAgICBIYXNoU2V0PFN0
cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBtaW1lVHlwZXMgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5
cGVzKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD46Oml0
ZXJhdG9yIGl0ID0gbWltZVR5cGVzLmJlZ2luKCk7IGl0ICE9IG1pbWVUeXBlcy5lbmQoKTsgKytp
dCkKKyAgICAgICAgICAgIG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucy5hZGQo
Kml0KTsKKyAgICB9CiB9CiAKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gU2VsZWN0
b3JOYW1lTWFwOwpAQCAtODY2LDQgKzg3NCwxNiBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1Rv
UERGRnJvbVBERkRvY3VtZW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBQREZEb2N1bWVudCAqcAog
ICAgIH0KIH0KIAorLy8gRklYTUU6IFRoaXMgaXMgbm90IHRoZSBpZGVhbCBwbGFjZSBmb3IgdGhp
cyBmdW5jdGlvbiAoYW5kIG5vdyBpdCdzIGR1cGxpY2F0ZWQgaGVyZSBhbmQgaW4gV2ViQ29udGV4
dE1hYykuCitIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBXZWJQYWdlOjpwZGZBbmRQ
b3N0U2NyaXB0TUlNRVR5cGVzKCkKK3sKKyAgICBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdI
YXNoPiBtaW1lVHlwZXM7CisgICAgCisgICAgbWltZVR5cGVzLmFkZCgiYXBwbGljYXRpb24vcGRm
Iik7CisgICAgbWltZVR5cGVzLmFkZCgiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIpOworICAgIG1p
bWVUeXBlcy5hZGQoInRleHQvcGRmIik7CisgICAgCisgICAgcmV0dXJuIG1pbWVUeXBlczsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAppbmRleCA5OGM5MzAyLi42ZjY3ZWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTI0Niw5ICsyNDYsNiBAQCB2b2lkIFdlYlByb2Nlc3M6Omlu
aXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBh
cmFtZQogCiAgICAgc2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwocGFyYW1ldGVycy5k
ZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLnNpemUoKTsg
KytpKQotICAgICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuYWRkKHBh
cmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uW2ldKTsKLQogICAgIGlm
IChwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGgpCiAgICAgICAg
IHNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKHRydWUpOwogCkBAIC04MTMsMjYgKzgx
MCw2IEBAIHZvaWQgV2ViUHJvY2Vzczo6cmVtb3ZlTWVzc2FnZVBvcnRDaGFubmVsKHVpbnQ2NF90
IGNoYW5uZWxJRCkKIH0KICNlbmRpZgogCi1zdGF0aWMgYm9vbCBjYW5QbHVnaW5IYW5kbGVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBTdHJpbmcgcGx1
Z2luUGF0aDsKLSAgICBib29sIGJsb2NrZWQ7Ci0KLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0
UGx1Z2luUGF0aChyZXNwb25zZS5taW1lVHlwZSgpLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSks
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGg6OlJlcGx5KHBsdWdpblBh
dGgsIGJsb2NrZWQpLCAwKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFi
bG9ja2VkICYmICFwbHVnaW5QYXRoLmlzRW1wdHkoKTsKLX0KLQotYm9vbCBXZWJQcm9jZXNzOjpz
aG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKSBjb25zdAotewotICAgIGlmICghbV9taW1lVHlwZXNXaXRoQ3VzdG9t
UmVwcmVzZW50YXRpb25zLmNvbnRhaW5zKHJlc3BvbnNlLm1pbWVUeXBlKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJZiBhIHBsdWctaW4gZXhpc3RzIHRoYXQgY2xhaW1zIHRv
IHN1cHBvcnQgdGhpcyByZXNwb25zZSwgaXQgc2hvdWxkIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRo
ZSBjdXN0b20gcmVwcmVzZW50YXRpb24uCi0gICAgcmV0dXJuICFjYW5QbHVnaW5IYW5kbGVSZXNw
b25zZShyZXNwb25zZSk7Ci19Ci0KIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJSZXNvdXJjZUNhY2hl
cyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFyKQogewogICAgIHBs
YXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hlcyhyZXNvdXJjZUNhY2hlc1RvQ2xlYXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCA3M2YwNzk2Li5lY2NiYjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAtMTUwLDE0ICsxNTAsMTIgQEAg
cHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBwaWRfdCBwcmVzZW50ZXJBcHBsaWNhdGlv
blBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VudGVyQXBwbGljYXRpb25QaWQ7IH0KICAgICBi
b29sIHNob3VsZEZvcmNlU2NyZWVuRm9udFN1YnN0aXR1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkRm9yY2VTY3JlZW5Gb250U3Vic3RpdHV0aW9uOyB9Ci0jZW5kaWYgCisjZW5kaWYKICAg
ICAKICNpZiBQTEFURk9STShRVCkKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCkgeyByZXR1cm4gbV9uZXR3b3JrQWNjZXNzTWFuYWdlcjsgfQogI2VuZGlm
CiAKLSAgICBib29sIHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OwotCiAgICAgLy8gVGV4dCBDaGVj
a2luZwogICAgIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3RleHRDaGVja2VyU3RhdGU7IH0KIApAQCAtMzIwLDggKzMxOCw2IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsPiA+IG1fbWVzc2FnZVBvcnRDaGFubmVsczsKICNlbmRpZgogCi0gICAg
SGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVw
cmVzZW50YXRpb25zOwotCiAgICAgVGV4dENoZWNrZXJTdGF0ZSBtX3RleHRDaGVja2VyU3RhdGU7
CiAgICAgV2ViR2VvbG9jYXRpb25NYW5hZ2VyIG1fZ2VvbG9jYXRpb25NYW5hZ2VyOwogI2lmIEVO
QUJMRShCQVRURVJZX1NUQVRVUykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168580</attachid>
            <date>2012-10-14 00:59:35 -0700</date>
            <delta_ts>2012-10-23 16:08:07 -0700</delta_ts>
            <desc>remove more remnants of pdfdocumentscripting</desc>
            <filename>pdfkit.diff</filename>
            <type>text/plain</type>
            <size>173974</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGE5NWU0Li5mNmE3NWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMg
QEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgW3drMl0gSW1wbGVtZW50IFBERlBsdWdpbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyMDYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBwbHVnLWluIHRoYXQgdXNlcyBQREZLaXQg
dG8gZGlzcGxheSBQREZzLCBpbnN0ZWFkIG9mIHVzaW5nIFBERktpdCBpbiB0aGUKKyAgICAgICAg
VUlQcm9jZXNzIGZvciBmdWxsLXBhZ2UgUERGcy4gVGhpcyBuZXcgcGx1Z2luIHdpbGwgYWxzbyBi
ZSB1c2VkIGZvciBpbmxpbmUgUERGcworICAgICAgICBpbiBwbGFjZSBvZiBTaW1wbGVQREZQbHVn
aW4gKG7DqWUgQnVpbHRJblBERlZpZXcpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46Cisg
ICAgICAgIEV4cG9ydCBhIGZldyBtb3JlIG1ldGhvZHMgdG8gV2ViS2l0KDIpLgorCisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBFeHBvc2UgUGFz
dGVib2FyZC5oIGFzIGEgcHJpdmF0ZSBoZWFkZXIgc28gUERGUGx1Z2luIGNhbiB1c2UgaXQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAgICBNYWtlIGludmFs
aWRhdGVTY3JvbGxiYXIvaW52YWxpZGF0ZVNjcm9sbENvcm5lciB2aXJ0dWFsLgorCiAyMDEyLTEw
LTExICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCB3aWxsIG5ldmVyIHJlc3RvcmUgdGhlIGN1cnJlbnQg
Y29udGV4dCB0byBudWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
biBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGZkMmNkNzcuLjlhNmM3MWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yODUsMTEgKzI4NSwxNCBAQCBfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMTVjb250ZW50c1Jlc2l6ZWRFdgogX19aTjdXZWJDb3JlMTRTY3JvbGxh
YmxlQXJlYTE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19a
TjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTE3d2lsbEVuZExpdmVSZXNpemVFdgogX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTE5d2lsbFN0YXJ0TGl2ZVJlc2l6ZUV2CitfX1pON1dlYkNvcmUx
NFNjcm9sbGFibGVBcmVhMTlpbnZhbGlkYXRlU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRVJLTlNf
N0ludFJlY3RFCitfX1pOSzdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIxbW91c2VFbnRlcmVkU2Ny
b2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTIyaW52
YWxpZGF0ZVNjcm9sbENvcm5lckVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTRTY3JvbGxh
YmxlQXJlYTIzZGlkQWRkVmVydGljYWxTY3JvbGxiYXJFUE5TXzlTY3JvbGxiYXJFCiBfX1pON1dl
YkNvcmUxNFNjcm9sbGFibGVBcmVhMjRzZXRTY3JvbGxiYXJPdmVybGF5U3R5bGVFTlNfMjFTY3Jv
bGxiYXJPdmVybGF5U3R5bGVFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjVkaWRBZGRI
b3Jpem9udGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19aTjdXZWJDb3JlMTRTY3JvbGxh
YmxlQXJlYTI3d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQorX19a
TjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI3bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRVJL
TlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI4c2V0U2Nyb2xsT2Zm
c2V0RnJvbUludGVybmFsc0VSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyOXdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQogX19a
TjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTZzY3JvbGxFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNf
MTdTY3JvbGxHcmFudWxhcml0eUVmCkBAIC0zMjEsNiArMzI0LDggQEAgX19aTjdXZWJDb3JlMTRl
bmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmcKIF9fWk43V2ViQ29yZTE0c2V0TWV0YWRhdGFVUkxFUk4zV1RGNlN0cmluZ0VSS1Mx
X1M0XwogX19aTjdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm01ZmxpcFlFdgogX19aTjdXZWJDb3Jl
MTVBZmZpbmVUcmFuc2Zvcm01c2NhbGVFZAorX19aTks3V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3Jt
NnhTY2FsZUV2CitfX1pOSzdXZWJDb3JlMTVBZmZpbmVUcmFuc2Zvcm02eVNjYWxlRXYKIF9fWk43
V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3JtOG11bHRpcGx5RVJLUzBfCiBfX1pON1dlYkNvcmUxNUFm
ZmluZVRyYW5zZm9ybTl0cmFuc2xhdGVFZGQKIF9fWk43V2ViQ29yZTE1QWZmaW5lVHJhbnNmb3Jt
QzFFZGRkZGRkCkBAIC0zNTEsNiArMzU2LDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRl
eHQxMWNsZWFyU2hhZG93RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MTJzZXRGaWxs
Q29sb3JFUktOU181Q29sb3JFTlNfMTBDb2xvclNwYWNlRQogX19aTjdXZWJDb3JlMTVHcmFwaGlj
c0NvbnRleHQxNXNldEZpbGxHcmFkaWVudEVOM1dURjEwUGFzc1JlZlB0cklOU184R3JhZGllbnRF
RUUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MThzZXRTaG91bGRBbnRpYWxpYXNFYgor
X19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOXNldElzQ0FMYXllckNvbnRleHRFYgogX19a
TjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMGVuZFRyYW5zcGFyZW5jeUxheWVyRXYKIF9fWk43
V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjBzZXRTaG91bGRTbW9vdGhGb250c0ViCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzQ29udGV4dDIxc2V0Q29tcG9zaXRlT3BlcmF0aW9uRU5TXzE3Q29tcG9z
aXRlT3BlcmF0b3JFCkBAIC00NjcsNiArNDczLDggQEAgX19aTjdXZWJDb3JlMTdvcGVuVGVtcG9y
YXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTd1c2VyVmlzaWJsZVN0cmlu
Z0VQNU5TVVJMCiBfX1pON1dlYkNvcmUxOERPTVdpbmRvd0V4dGVuc2lvbkMxRVBOU181RnJhbWVF
UE5TXzE1RE9NV3JhcHBlcldvcmxkRQogX19aTjdXZWJDb3JlMThIVE1MQ29udGVudEVsZW1lbnQ2
Y3JlYXRlRVBOU184RG9jdW1lbnRFCitfX1pON1dlYkNvcmUxMFBhc3RlYm9hcmQxN2dlbmVyYWxQ
YXN0ZWJvYXJkRXYKK19fWk43V2ViQ29yZTEwUGFzdGVib2FyZDE0d3JpdGVQbGFpblRleHRFUktO
M1dURjZTdHJpbmdFTlMwXzE4U21hcnRSZXBsYWNlT3B0aW9uRQogX19aTjdXZWJDb3JlMThQbGF0
Zm9ybVBhc3RlYm9hcmQxMHVuaXF1ZU5hbWVFdgogX19aTjdXZWJDb3JlMThQbGF0Zm9ybVBhc3Rl
Ym9hcmQxM2J1ZmZlckZvclR5cGVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxOFBsYXRm
b3JtUGFzdGVib2FyZDEzc3RyaW5nRm9yVHlwZUVSS04zV1RGNlN0cmluZ0UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YThhOTc2
Li45ZTJhNDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCQk0QUQwMTczRDEyN0U4Mjg2MDAx
NTAzNUYgLyogSlNIVE1MT3V0cHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEFEMDE3M0IxMjdFODI4NjAwMTUwMzVGIC8qIEpTSFRNTE91
dHB1dEVsZW1lbnQuaCAqLzsgfTsKIAkJNEFGMUFEM0UxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50
RGlzcGF0Y2hNZWRpYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QUYxQUQzQzEzRkQyM0E0MDBBQTk1OTAgLyogRXZlbnREaXNwYXRjaE1lZGlh
dG9yLmNwcCAqLzsgfTsKIAkJNEFGMUFEM0YxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0
Y2hNZWRpYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEFGMUFEM0QxM0ZEMjNBNDAwQUE5NTkwIC8qIEV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTRCMjcwOEM3
MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVi
b2FyZC5oICovOyB9OworCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEIyNzA4QzUw
QUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0QjI3MDk4MzBBRjJFNUUwMDA2NTEyN0YgLyogUGFz
dGVib2FyZE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRCMjcwOTgxMEFGMkU1RTAwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkTWFjLm1tICovOyB9Owog
CQk0QjMwNDNDNzBBRTAzNzAzMDBBODI2NDcgLyogU291bmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCMzA0M0M2MEFFMDM3MDMwMEE4MjY0NyAvKiBT
b3VuZC5oICovOyB9OwogCQk0QjMwNDNDOTBBRTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjMwNDNDODBB
RTAzNzFEMDBBODI2NDcgLyogU291bmRNYWMubW0gKi87IH07CkBAIC0yMjI3Nyw2ICsyMjI3Nyw3
IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk0QjI3MDhDNzBBRjE5RUU0MDA2NTEyN0Yg
LyogUGFzdGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ3RTI3NjUxNjAzNkVEMjAwRUUy
QUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3QkM2OURCMTUwNUYwNzYwMDFCNzRBQyAvKiBBYnN0cmFjdERhdGFiYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0MUUxQjFEMTBGRjU5ODY5MDA1NzZCM0IgLyogQWJzdHJhY3RXb3JrZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjQ1NzUsNyArMjQ1NzYsNiBAQAogCQkJCUZEMzE2MEEzMTJCMDI2
RjcwMEMxQTM1OSAvKiBQYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzZBQzEzMEREN0FE
NUMwMDQxNUYzNCAvKiBQYXJzZXJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIz
RENBMTI1MUYxMkQwMDNFRjI2OSAvKiBQYXNzd29yZElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNEIyNzA4QzcwQUYxOUVFNDAwNjUxMjdGIC8qIFBhc3RlYm9hcmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUM1OTg5MDU3MTRFOUMyODAwMEU4RDE4QiAvKiBQYXN0ZWJvYXJkU3RyYXRlZ3ku
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyNzUzNTgwMEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODhERDQ4NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZl
cnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oCmluZGV4IGM3NDRhZjYuLjkzMGNkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYWJsZUFyZWEuaApAQCAtMTA2LDEwICsxMDYsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxT
aXplKFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgc2Ny
b2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwotICAgIHZvaWQgaW52YWxpZGF0ZVNj
cm9sbGJhcihTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1
YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCA9IDA7Ci0gICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyKGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbENvcm5lcihjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2tt
YXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KIAogICAgIC8vIENvbnZlcnQgcG9pbnRz
IGFuZCByZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWluaW5nIHZpZXcu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggNzE2NjM1YS4uOWNiOWExNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MDAgQEAKKzIwMTItMTAtMTMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CisKKyAgICAgICAgW3drMl0gSW1wbGVtZW50IFBERlBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkyMDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgUERGUGx1Z2luLCB3aGljaCB1c2VzIFBE
RktpdCB0byBkaXNwbGF5IFBERnMsIGluc3RlYWQgb2YgdXNpbmcgUERGS2l0IGluIHRoZQorICAg
ICAgICBVSVByb2Nlc3MgZm9yIGZ1bGwtcGFnZSBQREZzLiBUaGlzIG5ldyBwbHVnaW4gd2lsbCBh
bHNvIGJlIHVzZWQgZm9yIGlubGluZSBQREZzCisgICAgICAgIGluIHBsYWNlIG9mIFNpbXBsZVBE
RlBsdWdpbiAobsOpZSBCdWlsdEluUERGVmlldykuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzogQWRkIEVOQUJMRV9QREZfUExVR0lOLgorCisgICAg
ICAgIFN1cHBvcnQgdGhyZWUgbmV3IFBsdWdpbiBtZXRob2RzOgorICAgICAgICAgICAgLSBoYW5k
bGVFZGl0aW5nQ29tbWFuZCwgd2hpY2ggaGFuZHMgZWRpdGluZyBjb21tYW5kcyB0byB0aGUgUGx1
Z2luCisgICAgICAgICAgICAtIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkLCB3aGljaCB2YWxpZGF0
ZXMgZWRpdGluZyBjb21tYW5kcyB2aWEgdGhlIFBsdWdpbgorICAgICAgICAgICAgLSBoYW5kbGVz
UGFnZVNjYWxlRmFjdG9yLCB3aGljaCBhc2tzIHRoZSBwbHVnaW4gd2hldGhlciBpdCB3YW50cyB0
bworICAgICAgICAgICAgb3B0IGludG8gYSBtb2RlIHdoZXJlIHRoZSBXZWJQYWdlIGRvZXNuJ3Qg
c2NhbGUgaW4gdGhlIG9yZGluYXJ5IGZhc2hpb24sCisgICAgICAgICAgICBidXQgaW5zdGVhZCBw
cm94aWVzIHRoZSBQbHVnaW4ncyBzY2FsZSBmYWN0b3IsIHNvIGZ1bGwtcGFnZSBwbHVnaW5zCisg
ICAgICAgICAgICBjYW4gaGFuZGxlIHNjYWxlIGZhY3RvciBjaGFuZ2VzIGhvd2V2ZXIgdGhleSBu
ZWVkIHRvLgorCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Db250cm9sbGVyUHJveHk6OmhhbmRsZUVkaXRp
bmdDb21tYW5kKTogUHJveHkgaGFuZGxlRWRpdGluZ0NvbW1hbmQgdG8gdGhlIFBsdWdpbi4KKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5Ojppc0VkaXRpbmdDb21tYW5kRW5h
YmxlZCk6IFByb3h5IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkIHRvIHRoZSBQbHVnaW4uCisgICAg
ICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rv
cik6IFByb3h5IGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IgdG8gdGhlIFBsdWdpbi4KKyAgICAgICAg
KiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oOgorICAgICAgICAoUGx1Z2lu
Q29udHJvbGxlclByb3h5KTogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21t
YW5kRW5hYmxlZCwgYW5kIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgICogUGx1Z2lu
UHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkubWVzc2FnZXMuaW46IEFkZCBIYW5kbGVFZGl0
aW5nQ29tbWFuZCwgSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQsIGFuZCBIYW5kbGVzUGFnZVNjYWxl
RmFjdG9yLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjpoYW5kbGVFZGl0aW5n
Q29tbWFuZCk6IE5QQVBJIHBsdWdpbnMgc3VwcG9ydCBubyBlZGl0aW5nIGNvbW1hbmRzIGJ5IGRl
ZmF1bHQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjppc0VkaXRpbmdDb21tYW5k
RW5hYmxlZCk6IE5QQVBJIHBsdWdpbnMgZW5hYmxlIG5vIGVkaXRpbmcgY29tbWFuZHMgYnkgZGVm
YXVsdC4KKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVG
YWN0b3IpOiBOUEFQSSBwbHVnaW5zIGRvIG5vdCBoYW5kbGUgcGFnZSBzY2FsZSBmYWN0b3IgY2hh
bmdlcyB0aGVtc2VsdmVzIGJ5IGRlZmF1bHQuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmg6IEFkZCBoYW5kbGVFZGl0aW5nQ29tbWFuZCwgaXNF
ZGl0aW5nQ29tbWFuZEVuYWJsZWQsIGFuZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yLgorCisgICAg
ICAgIEFkZCBQREZQbHVnaW5FbmFibGVkIHByZWZlcmVuY2UuIElmIGl0IGlzIG5vdCBlbmFibGVk
LCBvciB0aGUgcGx1Z2luIGlzCisgICAgICAgIG5vdCBidWlsdCwgYmVoYXZpb3Igd2lsbCBiZSB0
aGUgc2FtZSBhcyBiZWZvcmUgKHRoZSBVSVByb2Nlc3MgUERGVmlldyB3aWxsCisgICAgICAgIGhh
bmRsZSBmdWxsLXBhZ2UgUERGcywgYW5kIFNpbXBsZVBERlBsdWdpbiB3aWxsIGhhbmRsZSBpbmxp
bmUgb25lcykuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oOiBBZGQg
UERGUGx1Z2luRW5hYmxlZCBwcmVmZXJlbmNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRQREZQbHVnaW5FbmFi
bGVkKTogU2V0dGVyIGZvciBQREZQbHVnaW5FbmFibGVkIHByZWZlcmVuY2UuCisgICAgICAgIChX
S1ByZWZlcmVuY2VzR2V0UERGUGx1Z2luRW5hYmxlZCk6IEdldHRlciBmb3IgUERGUGx1Z2luRW5h
YmxlZCBwcmVmZXJlbmNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oOiBFeHBvc2UgV0tQcmVmZXJlbmNlcyhTZXR8R2V0KVBERlBsdWdpbkVuYWJsZWQg
YXMgYSBwcml2YXRlIHByZWZlcmVuY2UuCisKKyAgICAgICAgTW92ZSBzdXBwb3J0IGZvciBNSU1F
IHR5cGVzIHdpdGggY3VzdG9tIHJlcHJlc2VudGF0aW9ucyBvbnRvIFdlYlBhZ2UgaW5zdGVhZCBv
ZiBXZWJQcm9jZXNzLgorICAgICAgICBUaGlzIGFsbG93cyB1cyB0byB1c2UgcHJlZmVyZW5jZXMg
dG8gY29udHJvbCB0aGUgdXNlIG9mIGN1c3RvbSByZXByZXNlbnRhdGlvbnMgKGZvciBleGFtcGxl
LAorICAgICAgICBpdCBhbGxvd3MgdXMgdG8gaGF2ZSBhIHByZWZlcmVuY2UgdG8gdG9nZ2xlIGJl
dHdlZW4gVUlQcm9jZXNzJyBQREZWaWV3IGFuZCBQREZQbHVnaW4pLgorCisgICAgICAgICogU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOiBEb24ndCBwYXNzIG1pbWVUeXBl
c1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbgorICAgICAgICBpbnRvIHRoZSBXZWJQcm9jZXNzLCBh
cyB3ZSBjYW4gY29tcHV0ZSBpdCBsYXRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKTogU2FtZSwgb24gdGhlIGRlY29kZSBzaWRlLgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6IFJlbW92ZSBtaW1l
VHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL21hYy9X
ZWJDb250ZXh0TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0OjpwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKTogRG9uJ3QgYWRkIHBkZkFuZFBvc3RTY3JpcHRNSU1FVHlwZXMg
dG8gbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uIGhlcmUsIGFzIHdlJ3JlIG5vdyBj
b21wdXRpbmcgaXQgb24gV2ViUGFnZSBpbnN0ZWFkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y2FuUGx1Z2luSGFuZGxlUmVzcG9u
c2UpOiBNb3ZlIHRvIFdlYlBhZ2UgZnJvbSBXZWJQcm9jZXNzIHNvIHdlIGNhbiB1c2UgV2ViUGFn
ZSdzIG5ldyBub3Rpb24gb2YgbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJl
c3BvbnNlKTogTW92ZSB0byBXZWJQYWdlIGZyb20gV2ViUHJvY2VzcyBzbyB3ZSBjYW4gdXNlIFdl
YlBhZ2UncyBuZXcgbm90aW9uIG9mIG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnBkZkFuZFBvc3RTY3JpcHRNSU1FVHlwZXMpOiBSZXR1cm4gdGhl
IHNldCBvZiBNSU1FIHR5cGVzIHVzZWQgZm9yIFBERiBhbmQgUG9zdFNjcmlwdCwgd2hpY2ggYXJl
IGhhbmRsZWQgd2l0aCBQREZWaWV3IGlmIFBERlBsdWdpbiBpcyBub3QgYXZhaWxhYmxlIG9yIGVu
YWJsZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MpOiBEb24ndCBrZWVwIG1fbWlt
ZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9ucyBvbiBXZWJQcm9jZXNzLCBpdCdzIG93bmVk
IGJ5IFdlYlBhZ2Ugbm93LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oOiBNb3Zl
IGNhblBsdWdpbkhhbmRsZVJlc3BvbnNlIGFuZCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlv
bkZvclJlc3BvbnNlIHRvIFdlYlBhZ2UuCisKKyAgICAgICAgQWRkIFBERkxheWVyQ29udHJvbGxl
ciB0byB0aGUgc2V0IG9mIGNsYXNzZXMgcmV0dXJuZWQgYnkgUERGS2l0SW1wb3J0cy4KKworICAg
ICAgICAqIFNoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oOiBBZGQgcGRmTGF5ZXJDb250cm9sbGVy
Q2xhc3MuCisgICAgICAgICogU2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tOgorICAgICAgICAo
V2ViS2l0OjpwZGZMYXllckNvbnRyb2xsZXJDbGFzcyk6IEZpbmQgYW5kIHJldHVybiB0aGUgUERG
TGF5ZXJDb250cm9sbGVyIGNsYXNzLgorCisgICAgICAgIEFkZCBQREZQbHVnaW4sIHdoaWNoIGlu
aGVyaXRzIGZyb20gU2ltcGxlUERGUGx1Z2luLCBidXQgdXNlcyBQREZLaXQgaW5zdGVhZAorICAg
ICAgICBvZiBDb3JlR3JhcGhpY3MsIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbnRlcmFjdGl2ZSBm
dW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6c2VuZERpZEdldFBsdWdpbnMpOiBB
ZGQgUERGUGx1Z2luIHRvIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIHBsdWdpbnMuCisgICAgICAgICog
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgUERGUGx1Z2luLCByZW5hbWUg
QnVpbHRJblBERlZpZXcgdG8gU2ltcGxlUERGUGx1Z2luLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tOiBBZGRlZC4KKworICAgICAgICBQREZQbHVnaW4gdXNlcyBs
YXllcnMgZm9yIHNjcm9sbGJhcnMuCisKKyAgICAgICAgKC1bV0tQREZQbHVnaW5TY3JvbGxiYXJM
YXllciBpbml0V2l0aFBERlBsdWdpbjpXZWJLaXQ6Ol0pOiBJbml0aWFsaXplIG91ciBDQUxheWVy
IHN1YmNsYXNzLAorICAgICAgICBzdG9yaW5nIGl0cyBwYXJlbnQgUERGUGx1Z2luIHNvIGl0IGNh
biBkZWxlZ2F0ZSBkcmF3aW5nIHRoZXJlLgorICAgICAgICAoLVtXS1BERlBsdWdpblNjcm9sbGJh
ckxheWVyIGFjdGlvbkZvcktleTpdKTogRGlzYWJsZSBDb3JlQW5pbWF0aW9uIGltcGxpY2l0IGFj
dGlvbnMuCisgICAgICAgICgtW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIgZHJhd0luQ29udGV4
dDpdKTogRGVsZWdhdGUgc2Nyb2xsYmFyIGRyYXdpbmcgdG8gUERGUGx1Z2luLgorCisgICAgICAg
IEltcGxlbWVudCB0aGUgUERGTGF5ZXJDb250cm9sbGVyIGRlbGVnYXRlLCBldmVudHVhbGx5IGZv
cndhcmRpbmcgY2FsbHMgYmFjayB0byBQREZQbHVnaW4uCisKKyAgICAgICAgKC1bV0tQREZMYXll
ckNvbnRyb2xsZXJEZWxlZ2F0ZSBpbml0V2l0aFBERlBsdWdpbjpXZWJLaXQ6Ol0pOiBJbml0aWFs
aXplIG91ciBkZWxlZ2F0ZSwKKyAgICAgICAgc3RvcmluZyBpdHMgcGFyZW50IFBERlBsdWdpbiBz
byBpdCBjYW4gZm9yd2FyZCBkZWxlZ2F0ZSBjYWxscyB0aGVyZS4KKyAgICAgICAgKC1bV0tQREZM
YXllckNvbnRyb2xsZXJEZWxlZ2F0ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbjpdKTogVXBkYXRlIFBE
RlBsdWdpbidzIG5vdGlvbiBvZiB0aGUKKyAgICAgICAgY3VycmVudCBzY3JvbGwgcG9zaXRpb24s
IHdoZW4gUERGS2l0IGNoYW5nZXMgdGhlIHNjcm9sbCBwb3NpdGlvbiBpdHNlbGYuCisgICAgICAg
ICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgd3JpdGVJdGVtc1RvUGFzdGVib2FyZDp3
aXRoVHlwZXM6XSk6IFdyaXRlIHRoZSBnaXZlbgorICAgICAgICBhcnJheSBvZiBOU0RhdGEgb2Jq
ZWN0cyB0byB0aGUgcGFzdGVib2FyZCB3aXRoIHRoZSBnaXZlbiB0eXBlcy4KKworICAgICAgICBU
aGUgZm9sbG93aW5nIFBERkxheWVyQ29udHJvbGxlciBkZWxlZ2F0ZSBtZXRob2RzIHdpbGwgYmUg
aW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAoLVtXS1BERkxheWVyQ29udHJv
bGxlckRlbGVnYXRlIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdFBvaW50Ol0p
OgorICAgICAgICAoLVtXS1BERkxheWVyQ29udHJvbGxlckRlbGVnYXRlIHBlcmZvcm1XZWJTZWFy
Y2g6XSk6CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgb3BlbldpdGhQ
cmV2aWV3XSk6CisgICAgICAgICgtW1dLUERGTGF5ZXJDb250cm9sbGVyRGVsZWdhdGUgc2F2ZVRv
UERGXSk6CisKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpQREZQbHVnaW4pOiBTZXQgdXAg
dGhlIHJlcXVpc2l0ZSBsYXllciBoaWVyYXJjaHksIGFuZCBjcmVhdGUgYSBQREZMYXllckNvbnRy
b2xsZXIgKGFuZCBpdHMgZGVsZWdhdGUgcHJveHkpLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVn
aW46OnVwZGF0ZVNjcm9sbGJhcnMpOiBVcGRhdGUgdGhlIGZyYW1lIG9mIHRoZSBsYXllcnMgaG9z
dGluZyBvdXIgc2Nyb2xsYmFycy4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjcmVhdGVT
Y3JvbGxiYXIpOiBDcmVhdGUgYSBzY3JvbGxiYXIgYW5kIGhvc3RpbmcgbGF5ZXIsIGF0dGFjaGlu
ZyBpdHMgbGF5ZXIKKyAgICAgICAgdG8gUERGUGx1Z2luJ3MgY29udGFpbmVyIGxheWVyLgorICAg
ICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZXN0cm95IGEgc2Ny
b2xsYmFyLCBkZXRhY2hpbmcgYW5kIGRlc3Ryb3lpbmcgaXRzIGhvc3RpbmcgbGF5ZXIgaW4gdGhl
IHByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2Fk
KTogQ2FsbGVkIHdoZW4gdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmc7IGhhbmQKKyAgICAg
ICAgdGhlIGxvYWRlZCBkb2N1bWVudCB0byBQREZLaXQsIHVwZGF0ZSBhbGwgb2Ygb3VyIHN0YXRl
IChjYWNoZWQgZG9jdW1lbnQgc2l6ZSwgc2Nyb2xsYmFycywgZXRjLiksIGFuZCB0aGVuIGV4ZWN1
dGUgYW55IHNjcmlwdHMgaW4gdGhlIGRvY3VtZW50ICh0byBhbGxvdyBmb3IgYXV0b21hdGljIHBy
aW50aW5nKS4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcyk6IERl
dGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgUERGIGFuZCBpdHMgcGFnZXMuCisgICAgICAgIChXZWJL
aXQ6OlBERlBsdWdpbjo6ZGVzdHJveSk6IFRlYXIgZG93biB0aGUgbGF5ZXIgaGllcmFyY2h5Lgor
ICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50KTogUERGUGx1Z2luIGlzIGxheWVyLWJh
c2VkLCBzbyB3ZSBwYWludCBub3RoaW5nIGludG8gdGhlIHRpbGVzLgorICAgICAgICAoV2ViS2l0
OjpQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KTogU2Nyb2xsYmFyIGNv
bnRyb2xzIGFyZSBkcmF3biBpbnRvIGxheWVycywgYnV0IHRoZWlyIHBhaW50aW5nIGlzIGRlbGVn
YXRlZCBoZXJlIGZyb20gV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllci4KKyAgICAgICAgKFdlYktp
dDo6UERGUGx1Z2luOjpzbmFwc2hvdCk6IFBlcmZvcm0gYSBwYWludCBpbnRvIGEgYml0bWFwIGNv
bnRleHQuCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGx1Z2luTGF5ZXIpOiBSZXR1cm4g
UERGUGx1Z2luJ3Mgcm9vdCBsYXllci4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpnZW9t
ZXRyeURpZENoYW5nZSk6IFRoZSBzaXplIG9yIHNjYWxlIG9mIHRoZSBwbHVnaW4gY2hhbmdlZDsg
dXBkYXRlCisgICAgICAgIFBERkxheWVyQ29udHJvbGxlcidzIG5vdGlvbiBvZiB0aGUgc2l6ZSBh
bmQgcGFnZSBzY2FsZSwgYW5kIGludmFsaWRhdGUgdGhlIHNjcm9sbGJhcnMuCisKKyAgICAgICAg
TW91c2UgYW5kIGtleWJvYXJkIGV2ZW50cyBhcmUgY29udmVydGVkIGJhY2sgaW50byBOU0V2ZW50
cywgYnV0IHdpdGgKKyAgICAgICAgbG9jYXRpb25JbldpbmRvdyBhY3R1YWxseSBpbiB0ZXJtcyBv
ZiB0aGUgUERGUGx1Z2luJ3MgbGF5ZXIsIG5vdAorICAgICAgICB0aGUgd2luZG93IChzaW5jZSB0
aGVyZSBpcyBubyB3aW5kb3cpLgorCisgICAgICAgIChXZWJLaXQ6Om1vZGlmaWVyRmxhZ3NGcm9t
V2ViRXZlbnQpOiBDb25zdHJ1Y3QgYW4gQXBwS2l0LXN0eWxlIG1vZGlmaWVyIGJpdG1hc2sgZnJv
bSBXZWJFdmVudCdzIG1vZGlmaWVyIGtleSBnZXR0ZXJzLgorICAgICAgICAoV2ViS2l0OjpldmVu
dFR5cGVGcm9tV2ViRXZlbnQpOiBSZXR1cm4gdGhlIE5TRXZlbnRUeXBlIGVxdWl2YWxlbnQgdG8g
dGhlIGdpdmVuIFdlYkV2ZW50LiBPbmx5IHN1cHBvcnRzIGtleWJvYXJkIGFuZCBtb3VzZSBldmVu
dHMsIGFuZCBvbmx5IHRoZSBsZWZ0IGFuZCByaWdodCBtb3VzZSBidXR0b24uCisgICAgICAgIChX
ZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlTW91c2VFdmVudCk6IENvbnN0cnVjdCBhIGN1c3RvbSBO
U0V2ZW50IGZyb20gdGhlIGdpdmVuIFdlYk1vdXNlRXZlbnQgYW5kIGhhbmQgaXQgdG8gUERGTGF5
ZXJDb250cm9sbGVyLiBNb3VzZSBjb29yZGluYXRlcyBhcmUgaW4gdGVybXMgb2YgbV9jb250ZW50
TGF5ZXIncyBvcmlnaW4uCisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6aGFuZGxlS2V5Ym9h
cmRFdmVudCk6IENvbnN0cnVjdCBhIGN1c3RvbSBOU0V2ZW50IGZyb20gdGhlIGdpdmVuIFdlYktl
eWJvYXJkRXZlbnQgYW5kIGhhbmQgaXQgdG8gUERGTGF5ZXJDb250cm9sbGVyLiBQREZMYXllckNv
bnRyb2xsZXIgY3VycmVudGx5IG9ubHkgaGFuZGxlcyBrZXlEb3duIGV2ZW50cy4KKworICAgICAg
ICAoV2ViS2l0OjpQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogSGFuZGxlIGNvcHkg
YW5kIHNlbGVjdC1hbGwgY29tbWFuZHMsIGFuZCBmb3J3YXJkIHRoZW0gdG8gUERGTGF5ZXJDb250
cm9sbGVyLgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OmlzRWRpdGluZ0NvbW1hbmRFbmFi
bGVkKTogVGhlICdjb3B5JyBjb21tYW5kIHNob3VsZCBiZSBlbmFibGVkIGlmIHRoZXJlIGlzCisg
ICAgICAgIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIHBhcnQgb2YgdGhlIFBERi4gVGhlICdzZWxl
Y3QgYWxsJyBjb21tYW5kIHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZC4KKworICAgICAgICAoV2Vi
S2l0OjpQREZQbHVnaW46OnNldFNjcm9sbE9mZnNldCk6IFVwZGF0ZSBib3RoIFBERlBsdWdpbiBh
bmQgUERGTGF5ZXJDb250cm9sbGVyJ3Mgbm90aW9uCisgICAgICAgIG9mIHRoZSBjdXJyZW50IHNj
cm9sbCBwb3NpdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdCk6IEludmFsaWRhdGUgdGhlIHdob2xlIHNjcm9sbGJhciBsYXllci4KKyAgICAg
ICAgKFdlYktpdDo6UERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6IEludmFs
aWRhdGUgdGhlIHdob2xlIHNjcm9sbCBjb3JuZXIgbGF5ZXIuCisKKyAgICAgICAgUmVuYW1lIEJ1
aWx0SW5QREZWaWV3IHRvIFNpbXBsZVBERlBsdWdpbiwgdG8gZGlmZmVyZW50aWF0ZSBpdCBmcm9t
IFBERlBsdWdpbgorICAgICAgICBhbmQgdG8gYmV0dGVyIGRlbm90ZSBpdHMgaW5oZXJpdGFuY2Ug
ZnJvbSBQbHVnaW4uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBE
RlBsdWdpbi5oOiBSZW5hbWVkIGZyb20gV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdEluUERG
Vmlldy5oLgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVnaW4pOiBNYWtlIG1ldGhvZHMg
cHJvdGVjdGVkIHNvIFBERlBsdWdpbiBjYW4gb3ZlcnJpZGUgdGhlbS4gUmVuYW1lIG1fcGx1Z2lu
U2l6ZSAtPiBtX3NpemUsIGFuZCBtX2RhdGFCdWZmZXItPm1fZGF0YS4KKyAgICAgICAgKFdlYktp
dDo6U2ltcGxlUERGUGx1Z2luOjpzaXplKTogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIHBsdWdp
bi4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpzZXRTaXplKTogU2V0IHRoZSBz
aXplIG9mIHRoZSBwbHVnaW4uCisgICAgICAgIChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbjo6cGRm
RG9jdW1lbnQpOiBSZXRyaWV2ZSB0aGUgY3VycmVudGx5IHJlcHJlc2VudGVkIFBERiBkb2N1bWVu
dC4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpzZXRQREZEb2N1bWVudCk6IFNl
dCB0aGUgY3VycmVudGx5IHJlcHJlc2VudGVkIFBERiBkb2N1bWVudC4KKyAgICAgICAgKFdlYktp
dDo6U2ltcGxlUERGUGx1Z2luOjpwZGZEb2N1bWVudFNpemUpOiBSZXRyaWV2ZSB0aGUgY3VycmVu
dCBzaXplIG9mIHRoZSBQREYuCisgICAgICAgIChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbjo6c2V0
UERGRG9jdW1lbnRTaXplKTogU2V0IHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIFBERi4KKyAgICAg
ICAgKFdlYktpdDo6U2ltcGxlUERGUGx1Z2luOjpkYXRhKTogUmV0cmlldmUgdGhlIGFjY3VtdWxh
dGVkIGRvY3VtZW50IGRhdGEuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9TaW1w
bGVQREZQbHVnaW4ubW06IFJlbmFtZWQgZnJvbSBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0
SW5QREZWaWV3Lm1tLgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVnaW46OmNvbXB1dGVQ
YWdlQm94ZXMpOiBDb3BpZWQgb3V0IG9mIGNhbGN1bGF0ZVNpemVzKCkgc28gUERGUGx1Z2luIGNh
biB1c2UgaXQgdG9vLgorICAgICAgICAoV2ViS2l0OjpTaW1wbGVQREZQbHVnaW46OnJ1blNjcmlw
dHNJblBERkRvY3VtZW50KTogRmFjdG9yZWQgb3V0IG9mIHBkZkRvY3VtZW50RGlkTG9hZCgpIHNv
IFBERlBsdWdpbiBjYW4gdXNlIGl0IHRvby4KKyAgICAgICAgKFdlYktpdDo6U2ltcGxlUERGUGx1
Z2luOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcpOiBJbXBsZW1lbnQgdGhl
IHJlbWFpbmluZyBzY3JvbGxiYXIgcG9pbnQgY29udmVyc2lvbiBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJLaXQ6OlNpbXBsZVBERlBsdWdpbjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKTogSW1wbGVtZW50IHRoZSByZW1haW5pbmcgc2Nyb2xsYmFyIHBvaW50IGNvbnZlcnNp
b24gZnVuY3Rpb25zLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oOgor
ICAgICAgICAoUGx1Z2luKTogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21t
YW5kRW5hYmxlZCwgYW5kIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJv
eHk6OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogUHJveHkgaGFuZGxlRWRpdGluZ0NvbW1hbmQgdG8g
dGhlIFBsdWdpblByb2Nlc3MuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb3h5Ojppc0VkaXRp
bmdDb21tYW5kRW5hYmxlZCk6IFByb3h5IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkCisgICAgICAg
IHRvIHRoZSBQbHVnaW5Qcm9jZXNzLgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm94eTo6aGFu
ZGxlc1BhZ2VTY2FsZUZhY3Rvcik6IFByb3h5IGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IKKyAgICAg
ICAgdG8gdGhlIFBsdWdpblByb2Nlc3MuCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb3h5Lmg6IEFkZCBoYW5kbGVFZGl0aW5nQ29tbWFuZCwgaXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQsCisgICAgICAgIGFuZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yLgorICAgICAgICAqIFdl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2lu
Vmlldzo6c2V0UGFnZVNjYWxlRmFjdG9yKTogU2V0IHRoZSBwbHVnaW4ncyBjdXJyZW50IHBhZ2Ug
c2NhbGUgZmFjdG9yLiBBbHNvLAorICAgICAgICB1cGRhdGUgV2ViUGFnZVByb3h5J3Mgbm90aW9u
IG9mIHRoZSBjdXJyZW50IHBhZ2VTY2FsZUZhY3RvciB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICAg
ICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwYWdlU2NhbGVGYWN0b3IpOiBSZXR1cm4gdGhlIHBs
dWdpbidzIGN1cnJlbnQgcGFnZSBzY2FsZSBmYWN0b3IuCisgICAgICAgIChXZWJLaXQ6OlBsdWdp
blZpZXc6OmhhbmRsZUVkaXRpbmdDb21tYW5kKTogUHJveHkgaGFuZGxlRWRpdGluZ0NvbW1hbmQg
dG8gdGhlIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6aXNFZGl0aW5nQ29t
bWFuZEVuYWJsZWQpOiBQcm94eSBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZCB0byB0aGUgcGx1Z2lu
LgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3Lmg6CisgICAgICAgIChQ
bHVnaW5WaWV3KTogQWRkIGhhbmRsZUVkaXRpbmdDb21tYW5kLCBpc0VkaXRpbmdDb21tYW5kRW5h
YmxlZCwKKyAgICAgICAgc2V0UGFnZVNjYWxlRmFjdG9yL3BhZ2VTY2FsZUZhY3RvciwgYW5kIGhh
bmRsZXNQYWdlU2NhbGVGYWN0b3IuIEFkZCBtX3BhZ2VTY2FsZUZhY3Rvci4KKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6aGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcik6IFByb3h5IGhhbmRsZXNQ
YWdlU2NhbGVGYWN0b3IgdG8gdGhlIHBsdWdpbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlc3RvcmVWaWV3U3RhdGUpOiBEb24ndCB1cGRhdGUgV2ViUGFn
ZVByb3h5J3Mgbm90aW9uIG9mIHRoZSBzY2FsZSBmYWN0b3IgaWYgaXQgc2hvdWxkIGJlIHRoZSBk
ZWZhdWx0LgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlv
blRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKTogTWFrZSB1c2Ugb2Ygc2hvdWxkVXNlQ3VzdG9t
UmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZSBvbiBXZWJQYWdlIGluc3RlYWQgb2YgV2ViUHJvY2Vz
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0Nv
bW1pdHRlZEZvck5ld1BhZ2UpOiBNYWtlIHVzZSBvZiBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRh
dGlvbkZvclJlc3BvbnNlIG9uIFdlYlBhZ2UgaW5zdGVhZCBvZiBXZWJQcm9jZXNzLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Y3JlYXRlUGx1Z2luKTogQ3JlYXRlIGEgUERGUGx1Z2luIGlmIGFwcHJvcHJpYXRlIChp
ZiBpdCBpcyBidWlsdCBhbmQgdGhlIHNldHRpbmcgaXMgZW5hYmxlZCkuCisgICAgICAgIChXZWJL
aXQ6OnBsdWdpblZpZXdGb3JGcmFtZSk6IFJldHVybiB0aGUgUGx1Z2luVmlldyBmb3IgdGhlIGdp
dmVuIGZyYW1lIGlmIGl0cyBkb2N1bWVudCBpcyBhIFBsdWdpbkRvY3VtZW50LgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1hbmQpOiBBdHRlbXB0IHRvIGV4ZWN1
dGUgZWRpdGluZyBjb21tYW5kcyBvbiB0aGUKKyAgICAgICAgY3VycmVudGx5IGZvY3VzZWQgKG9y
IG1haW4tZnJhbWUpIHBsdWdpbi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQpOiBWYWxpZGF0ZSBlZGl0aW5nIGNvbW1hbmRzIGFnYWluc3QgdGhlCisg
ICAgICAgIGN1cnJlbnRseSBmb2N1c2VkIChvciBtYWluLWZyYW1lKSBwbHVnaW4uCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnNjYWxlUGFnZSk6IElmIHRoZSBwbHVnaW4gcmVwb3J0cyB0aGF0
IGl0IGhhbmRsZXMgcGFnZSBzY2FsZSBmYWN0b3IKKyAgICAgICAgaXRzZWxmLCBoYW5kIGl0IHRo
ZSBuZXcgc2NhbGUgaW5zdGVhZCBvZiBXZWJDb3JlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwYWdlU2NhbGVGYWN0b3IpOiBJZiB0aGUgcGx1Z2luIHJlcG9ydHMgdGhhdCBpdCBoYW5kbGVz
IHBhZ2Ugc2NhbGUKKyAgICAgICAgZmFjdG9yIGl0c2VsZiwgcmV0dXJuIGl0cyBub3Rpb24gb2Yg
dGhlIGN1cnJlbnQgc2NhbGUgaW5zdGVhZCBvZiBXZWJDb3JlJ3MuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnZhbGlkYXRlQ29tbWFuZCk6IFZhbGlkYXRlIGVkaXRpbmcgY29tbWFuZHMgYWdh
aW5zdCB0aGUKKyAgICAgICAgY3VycmVudGx5IGZvY3VzZWQgKG9yIG1haW4tZnJhbWUpIHBsdWdp
bi4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlUHJlZmVyZW5jZXMpOiBVcGRhdGUg
bV9wZGZQbHVnaW5FbmFibGVkIGdpdmVuIHRoZSByZWxldmFudCBXZWJQcmVmZXJlbmNlLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBkZlBsdWdpbkVuYWJsZWQpOiBSZXR1cm4gd2hldGhlciBvciBub3QgUERGUGx1Z2lu
IHNob3VsZCBiZSB1c2VkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRQREZQbHVnaW5F
bmFibGVkKTogU2V0IHdoZXRoZXIgb3Igbm90IFBERlBsdWdpbiBzaG91bGQgYmUgdXNlZC4KKwor
CiAyMDEyLTEwLTExICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3RvcCB1c2luZyBkZXByZWNhdGVkU2VuZCBmb3IgV2ViQ29udGV4dDo6cG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Db25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRp
b25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCmluZGV4IGNlNDFkMzAuLjNmNDBjNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29u
ZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhj
Y29uZmlnCkBAIC0xMTYsNiArMTE2LDExIEBAIEVOQUJMRV9OT1RJRklDQVRJT05TX21hY29zeF8x
MDcwID0gOwogRU5BQkxFX05PVElGSUNBVElPTlNfbWFjb3N4XzEwODAgPSBFTkFCTEVfTk9USUZJ
Q0FUSU9OUzsKIEVOQUJMRV9OT1RJRklDQVRJT05TX21hY29zeF8xMDkwID0gRU5BQkxFX05PVElG
SUNBVElPTlM7CiBFTkFCTEVfUEFHRV9WSVNJQklMSVRZX0FQSSA9IDsKK0VOQUJMRV9QREZLSVRf
UExVR0lOID0gJChFTkFCTEVfUERGS0lUX1BMVUdJTl8kKFJFQUxfUExBVEZPUk1fTkFNRSkpOwor
RU5BQkxFX1BERktJVF9QTFVHSU5fbWFjb3N4ID0gJChFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNv
c3hfJChUQVJHRVRfTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpOworRU5BQkxFX1BERktJVF9QTFVH
SU5fbWFjb3N4XzEwNzAgPSA7CitFTkFCTEVfUERGS0lUX1BMVUdJTl9tYWNvc3hfMTA4MCA9IDsK
K0VOQUJMRV9QREZLSVRfUExVR0lOX21hY29zeF8xMDkwID0gRU5BQkxFX1BERktJVF9QTFVHSU47
CiBFTkFCTEVfUFJPR1JFU1NfRUxFTUVOVCA9IEVOQUJMRV9QUk9HUkVTU19FTEVNRU5UOwogRU5B
QkxFX1FVT1RBID0gOwogRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FID0gRU5BQkxFX1JF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FOwpAQCAtMTQzLDQgKzE0OCw0IEBAIEVOQUJMRV9XSURHRVRf
UkVHSU9OID0gOwogRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YU0xU
ID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklO
RykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJT05fQVBJ
KSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfQ1NQ
X05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVfQ1NTX0VY
Q0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJTFRFUlMp
ICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVOVEFUSU9O
KSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lPTlMpICQo
RU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAkKEVOQUJM
RV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChFTkFCTEVf
Q1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkgJChFTkFC
TEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykgJChFTkFC
TEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQoRU5BQkxF
X0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJMRV9GSUxF
X1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkpICQoRU5B
QkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5fUEFHRV9E
T01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVOQUJMRV9J
Q09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5ERVhFRF9E
QVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9S
KSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUUp
ICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRfVFlQRV9N
T05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBFX1dFRUsp
ICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1NfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lfVkVORE9S
X1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5LX1BSRUZF
VENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVOQUJMRV9N
RURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01FVEVSX0VM
RU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxFX01VVEFU
SU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQoRU5BQkxF
X05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5BQkxFX1BS
T0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FVT1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURfU1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAk
KEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9T
VFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdT
KSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVf
VEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQoRU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChF
TkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0sp
ICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9XRUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRT
KSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVOQUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9X
T1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JF
TkRFUklORykgJChFTkFCTEVfQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAkKEVOQUJMRV9BTklNQVRJ
T05fQVBJKSAkKEVOQUJMRV9CTE9CKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFC
TEVfQ1NQX05FWFQpICQoRU5BQkxFX0NTU19CT1hfREVDT1JBVElPTl9CUkVBSykgJChFTkFCTEVf
Q1NTX0VYQ0xVU0lPTlMpICQoRU5BQkxFX0NTU19DT01QT1NJVElORykgJChFTkFCTEVfQ1NTX0ZJ
TFRFUlMpICQoRU5BQkxFX0NTU19ISUVSQVJDSElFUykgJChFTkFCTEVfQ1NTX0lNQUdFX09SSUVO
VEFUSU9OKSAkKEVOQUJMRV9DU1NfSU1BR0VfUkVTT0xVVElPTikgJChFTkFCTEVfQ1NTX1JFR0lP
TlMpICQoRU5BQkxFX0NTU19TSEFERVJTKSAkKEVOQUJMRV9DU1NfU1RJQ0tZX1BPU0lUSU9OKSAk
KEVOQUJMRV9DU1NfVkFSSUFCTEVTKSAkKEVOQUJMRV9DU1MzX1RFWFRfREVDT1JBVElPTikgJChF
TkFCTEVfQ1VTVE9NX1NDSEVNRV9IQU5ETEVSKSAkKEVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkg
JChFTkFCTEVfREFUQUxJU1RfRUxFTUVOVCkgJChFTkFCTEVfREFUQV9UUkFOU0ZFUl9JVEVNUykg
JChFTkFCTEVfREVUQUlMU19FTEVNRU5UKSAkKEVOQUJMRV9ERVZJQ0VfT1JJRU5UQVRJT04pICQo
RU5BQkxFX0RJQUxPR19FTEVNRU5UKSAkKEVOQUJMRV9ESVJFQ1RPUllfVVBMT0FEKSAkKEVOQUJM
RV9GSUxFX1NZU1RFTSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfRlVMTFNDUkVFTl9BUEkp
ICQoRU5BQkxFX0dBTUVQQUQpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9ISURERU5f
UEFHRV9ET01fVElNRVJfVEhST1RUTElORykgJChFTkFCTEVfSElHSF9EUElfQ0FOVkFTKSAkKEVO
QUJMRV9JQ09OREFUQUJBU0UpICQoRU5BQkxFX0lGUkFNRV9TRUFNTEVTUykgJChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRSkgJChFTkFCTEVfSU5QVVRfU1BFRUNIKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X0NPTE9SKSAkKEVOQUJMRV9JTlBVVF9UWVBFX0RBVEUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFU
RVRJTUUpICQoRU5BQkxFX0lOUFVUX1RZUEVfREFURVRJTUVMT0NBTCkgJChFTkFCTEVfSU5QVVRf
VFlQRV9NT05USCkgJChFTkFCTEVfSU5QVVRfVFlQRV9USU1FKSAkKEVOQUJMRV9JTlBVVF9UWVBF
X1dFRUspICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX0xFR0FDWV9DU1Nf
VkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfTk9USUZJQ0FUSU9OUykgJChMRUdBQ1lf
VkVORE9SX1BSRUZJWEVTKSAkKEVOQUJMRV9MRUdBQ1lfV0VCX0FVRElPKSAkKEVOQUJMRV9MSU5L
X1BSRUZFVENIKSAkKEVOQUJMRV9MSU5LX1BSRVJFTkRFUikgJChFTkFCTEVfTUFUSE1MKSAkKEVO
QUJMRV9NRURJQV9TT1VSQ0UpICQoRU5BQkxFX01FRElBX1NUQVRJU1RJQ1MpICQoRU5BQkxFX01F
VEVSX0VMRU1FTlQpICQoRU5BQkxFX01IVE1MKSAkKEVOQUJMRV9NSUNST0RBVEEpICQoRU5BQkxF
X01VVEFUSU9OX09CU0VSVkVSUykgJChFTkFCTEVfTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpICQo
RU5BQkxFX05PVElGSUNBVElPTlMpICQoRU5BQkxFX1BBR0VfVklTSUJJTElUWV9BUEkpICQoRU5B
QkxFX1BERktJVF9QTFVHSU4pICQoRU5BQkxFX1BST0dSRVNTX0VMRU1FTlQpICQoRU5BQkxFX1FV
T1RBKSAkKEVOQUJMRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkgJChFTkFCTEVfU0NSSVBURURf
U1BFRUNIKSAkKEVOQUJMRV9TSEFET1dfRE9NKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChF
TkFCTEVfU1FMX0RBVEFCQVNFKSAkKEVOQUJMRV9TVFlMRV9TQ09QRUQpICQoRU5BQkxFX1NWRykg
JChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5B
QkxFX1RFWFRfQVVUT1NJWklORykgJChFTkFCTEVfVEVYVF9OT1RJRklDQVRJT05TX09OTFkpICQo
RU5BQkxFX1RPVUNIX0lDT05fTE9BRElORykgJChFTkFCTEVfVU5ET19NQU5BR0VSKSAkKEVOQUJM
RV9WSURFTykgJChFTkFCTEVfVklERU9fVFJBQ0spICQoRU5BQkxFX1dFQkdMKSAkKEVOQUJMRV9X
RUJfQVVESU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XRUJfVElNSU5HKSAkKEVO
QUJMRV9XSURHRVRfUkVHSU9OKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YU0xUKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcAppbmRleCAzMWE1ZDYxLi4xN2MxNmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCkBAIC01MjEsNiAr
NTIxLDIxIEBAIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVLZXlib2FyZEV2ZW50
KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGtleWJvYXJkCiAgICAgaGFuZGxlZCA9IG1fcGx1Z2lu
LT5oYW5kbGVLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQpOwogfQogCit2b2lkIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgYm9vbCYgaGFuZGxlZCkKK3sKKyAgICBoYW5k
bGVkID0gbV9wbHVnaW4tPmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVu
dCk7Cit9CisgICAgCit2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgZW5hYmxlZCkKK3sKKyAg
ICBlbmFibGVkID0gbV9wbHVnaW4tPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1l
KTsKK30KKyAgICAKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpoYW5kbGVzUGFnZVNjYWxl
RmFjdG9yKGJvb2wmIGVuYWJsZWQpCit7CisgICAgZW5hYmxlZCA9IG1fcGx1Z2luLT5oYW5kbGVz
UGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpwYWlu
dEVudGlyZVBsdWdpbigpCiB7CiAgICAgaWYgKG1fcGx1Z2luU2l6ZS5pc0VtcHR5KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHku
aAppbmRleCBiNGE0MDY3Li4xOWVlMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVn
aW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
dWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgKQEAgLTEzNyw2ICsxMzcsOSBAQCBw
cml2YXRlOgogICAgIHZvaWQgaGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZl
bnQmLCBib29sJiBoYW5kbGVkKTsKICAgICB2b2lkIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JiwgYm9vbCYgaGFuZGxlZCk7CiAgICAgdm9pZCBoYW5kbGVLZXlib2Fy
ZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBib29sJiBoYW5kbGVkKTsKKyAgICB2b2lk
IGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0
cmluZyYgYXJndW1lbnQsIGJvb2wmIGhhbmRsZWQpOworICAgIHZvaWQgaXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCYgaGFuZGxlZCk7CisgICAg
dm9pZCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKGJvb2wmIGVuYWJsZWQpOwogICAgIHZvaWQgcGFp
bnRFbnRpcmVQbHVnaW4oKTsKICAgICB2b2lkIHNuYXBzaG90KFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlJiBiYWNraW5nU3RvcmVIYW5kbGUpOwogICAgIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJv
bGxlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGQ3YzJkMDIuLjA2NzFhMjNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtNzMsNiArNzMsMTUgQEAgbWVzc2FnZXMgLT4gUGx1Z2lu
Q29udHJvbGxlclByb3h5IHsKIAogICAgICMgU2VudCB3aGVuIGEga2V5Ym9hcmQgc2hvdWxkIGJl
IHByb2Nlc3NlZC4KICAgICBIYW5kbGVLZXlib2FyZEV2ZW50KFdlYktpdDo6V2ViS2V5Ym9hcmRF
dmVudCBrZXlib2FyZEV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQorICAgIAorICAgICMgU2VudCB3
aGVuIGFuIGVkaXRpbmcgY29tbWFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLgorICAgIEhhbmRsZUVk
aXRpbmdDb21tYW5kKFdURjo6U3RyaW5nIGNvbW1hbmROYW1lLCBXVEY6OlN0cmluZyBhcmd1bWVu
dCkgLT4gKGJvb2wgaGFuZGxlZCk7CisgICAgCisgICAgIyBSZXR1cm4gd2hldGhlciBvciBub3Qg
YSBwbHVnaW4gd2FudHMgdG8gZW5hYmxlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQuCisgICAg
SXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoV1RGOjpTdHJpbmcgY29tbWFuZE5hbWUpIC0+IChib29s
IGVuYWJsZWQpOworICAgIAorICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgcGx1Z2luIHdh
bnRzIHRvIGhhbmRsZSBwYWdlIHNjYWxlIGZhY3RvciBpdHNlbGYuCisgICAgSGFuZGxlc1BhZ2VT
Y2FsZUZhY3RvcigpIC0+IChib29sIGVuYWJsZWQpOwogCiAgICAgIyBTZW50IHdoZW4gdGhlIHBs
dWctaW4gZm9jdXMgY2hhbmdlcy4KICAgICBTZXRGb2N1cyhib29sIGlzRm9jdXNlZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5oCmluZGV4IDFlM2NhNjMuLjE4
NTg5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0
b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByZWZlcmVuY2VzU3RvcmUuaApA
QCAtMTM3LDYgKzEzNyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgIG1hY3JvKFNjcmVlbkZv
bnRTdWJzdGl0dXRpb25FbmFibGVkLCBzY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5hYmxlZCwgQm9v
bCwgYm9vbCwgREVGQVVMVF9TQ1JFRU5fRk9OVF9TVUJTVElUVVRJT05fRU5BQkxFRCkgXAogICAg
IG1hY3JvKENvb2tpZUVuYWJsZWQsIGNvb2tpZUVuYWJsZWQsIEJvb2wsIGJvb2wsIHRydWUpIFwK
ICAgICBtYWNybyhQbHVnSW5TbmFwc2hvdHRpbmdFbmFibGVkLCBwbHVnSW5TbmFwc2hvdHRpbmdF
bmFibGVkLCBCb29sLCBib29sLCBmYWxzZSkgXAorICAgIG1hY3JvKFBERlBsdWdpbkVuYWJsZWQs
IHBkZlBsdWdpbkVuYWJsZWQsIEJvb2wsIGJvb2wsIGZhbHNlKSBcCiAgICAgXAogCiAjZGVmaW5l
IEZPUl9FQUNIX1dFQktJVF9ET1VCTEVfUFJFRkVSRU5DRShtYWNybykgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmlu
ZGV4IDgwMDMwYWMuLjAxMjM0ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTY2LDcgKzY2LDYgQEAgdm9p
ZCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyKiBlbmNvZGVyKSBjb24KICAgICBlbmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lz
dGVyZWRBc05vQWNjZXNzKTsKICAgICBlbmNvZGVyLT5lbmNvZGUodXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0Rpc3BsYXlJc29sYXRlZCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlKHVybFNjaGVtZXNSZWdp
c3RlcmVkQXNDT1JTRW5hYmxlZCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG1pbWVUeXBlc1dpdGhD
dXN0b21SZXByZXNlbnRhdGlvbik7CiAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShjYWNoZU1vZGVs
KTsKICAgICBlbmNvZGVyLT5lbmNvZGUoc2hvdWxkVHJhY2tWaXNpdGVkTGlua3MpOwogICAgIGVu
Y29kZXItPmVuY29kZShzaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKTsKQEAgLTE0
Nyw4ICsxNDYsNiBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0
ZXJlZEFzQ09SU0VuYWJsZWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUocGFyYW1ldGVycy5taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb24p
KQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKHBh
cmFtZXRlcnMuY2FjaGVNb2RlbCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZShwYXJhbWV0ZXJzLnNob3VsZFRyYWNrVmlzaXRlZExpbmtzKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5o
CmluZGV4IDBkNTQzZmEuLmY5NTQ4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtNjksOSArNjksNiBAQCBzdHJ1
Y3QgV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0Rpc3BsYXlJc29sYXRlZDsKICAgICBWZWN0b3I8U3RyaW5nPiB1
cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQ7CiAKLSAgICAvLyBNSU1FIHR5cGVzIGZv
ciB3aGljaCB0aGUgVUkgcHJvY2VzcyB3aWxsIGhhbmRsZSBzaG93aW5nIHRoZSBkYXRhLgotICAg
IFZlY3RvcjxTdHJpbmc+IG1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbjsKLQogICAg
IENhY2hlTW9kZWwgY2FjaGVNb2RlbDsKICAgICBib29sIHNob3VsZFRyYWNrVmlzaXRlZExpbmtz
OwogCkBAIC0xMTMsNiArMTEwLDcgQEAgc3RydWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMgewogCiAgICAgYm9vbCBzaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb247CiAgICAg
Ym9vbCBzaG91bGRFbmFibGVLZXJuaW5nQW5kTGlnYXR1cmVzQnlEZWZhdWx0OworCiAjZWxpZiBQ
TEFURk9STShXSU4pCiAgICAgU3RyaW5nIGNmVVJMQ2FjaGVQYXRoOwogICAgIHVpbnQ2NF90IGNm
VVJMQ2FjaGVEaXNrQ2FwYWNpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1BERktpdEltcG9ydHMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUERGS2l0SW1w
b3J0cy5oCmluZGV4IDQ0YzM3NWMuLmM5YTFlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvUERGS2l0SW1wb3J0cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUERGS2l0SW1wb3J0cy5oCkBAIC0zMyw2ICszMywxMCBAQCBDbGFzcyBjbGFzc0Zyb21QREZL
aXQoTlNTdHJpbmcgKmNsYXNzTmFtZSk7CiBDbGFzcyBwZGZBbm5vdGF0aW9uTGlua0NsYXNzKCk7
CiBDbGFzcyBwZGZEb2N1bWVudENsYXNzKCk7CiAKKyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
K0NsYXNzIHBkZkxheWVyQ29udHJvbGxlckNsYXNzKCk7CisjZW5kaWYKKwogfQogCiAjZW5kaWYg
Ly8gUERGS2l0SW1wb3J0c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1BERktpdEltcG9ydHMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1BERktpdEltcG9y
dHMubW0KaW5kZXggNjIzNGE4My4uYmNjZmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9QREZLaXRJbXBvcnRzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUERGS2l0SW1wb3J0cy5tbQpAQCAtNTQsNSArNTQsMTQgQEAgQ2xhc3MgcGRmRG9jdW1lbnRD
bGFzcygpCiAgICAgQVNTRVJUKHBkZkRvY3VtZW50Q2xhc3MpOwogICAgIHJldHVybiBwZGZEb2N1
bWVudENsYXNzOwogfQorICAgIAorI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorQ2xhc3MgcGRm
TGF5ZXJDb250cm9sbGVyQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBwZGZMYXllckNvbnRy
b2xsZXJDbGFzcyA9IGNsYXNzRnJvbVBERktpdChAIlBERkxheWVyQ29udHJvbGxlciIpOworICAg
IEFTU0VSVChwZGZMYXllckNvbnRyb2xsZXJDbGFzcyk7CisgICAgcmV0dXJuIHBkZkxheWVyQ29u
dHJvbGxlckNsYXNzOworfQorI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCBlY2NlMjA1Li41MzJkODJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCkBA
IC05MzMsMyArOTMzLDEzIEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKICAgICByZXR1cm4g
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpOwogfQor
Cit2b2lkIFdLUHJlZmVyZW5jZXNTZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRQREZQbHVnaW5FbmFibGVkKGVuYWJsZWQpOworfQorCitib29sIFdLUHJlZmVyZW5j
ZXNHZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCit7
CisgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBkZlBsdWdpbkVuYWJsZWQoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5j
ZXNQcml2YXRlLmgKaW5kZXggYzAyNjExYy4uYWY1ZjczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTIyMyw2
ICsyMjMsMTAgQEAgV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNjcmVlbkZvbnRTdWJz
dGl0dXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHIKIFdLX0VYUE9SVCB2b2lkIFdLUHJl
ZmVyZW5jZXNTZXRDb29raWVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJv
b2wgZW5hYmxlZCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0Q29va2llRW5hYmxl
ZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKTsKIAorLy8gRGVmYXVsdHMgdG8gZmFsc2UK
K1dLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQREZQbHVnaW5FbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgZW5hYmxlZCk7CitXS19FWFBPUlQgYm9vbCBXS1By
ZWZlcmVuY2VzR2V0UERGUGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
KTsKKwogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1Jlc2V0VGVzdFJ1bm5lck92ZXJyaWRl
cyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IDJl
MGM5NGYuLmVmNzQ2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCkBAIC00Niw3ICs0NiwxMCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIkJ1aWx0SW5QREZWaWV3LmgiCisj
aW5jbHVkZSAiU2ltcGxlUERGUGx1Z2luLmgiCisjaWYgRU5BQkxFKFBERktJVF9QTFVHSU4pCisj
aW5jbHVkZSAiUERGUGx1Z2luLmgiCisjZW5kaWYKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKQEAgLTMwNSw4ICszMDgsMTIgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnNlbmRE
aWRHZXRQbHVnaW5zKHVpbnQ2NF90IHJlcXVlc3RJRCwgUGFzc093blB0cjxWZWN0b3I8UGwKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgLy8gQWRkIGJ1aWx0LWluIFBERiBsYXN0LCBzbyB0aGF0IGl0
J3Mgbm90IHVzZWQgd2hlbiBhIHJlYWwgcGx1Zy1pbiBpcyBpbnN0YWxsZWQuCiAgICAgLy8gTk9U
RTogVGhpcyBoYXMgdG8gYmUgZG9uZSBvbiB0aGUgbWFpbiB0aHJlYWQgYXMgaXQgY2FsbHMgbG9j
YWxpemVkU3RyaW5nKCkuCi0gICAgaWYgKCFtX2NvbnRleHQtPm9taXRQREZTdXBwb3J0KCkpCi0g
ICAgICAgIHBsdWdpbnMtPmFwcGVuZChCdWlsdEluUERGVmlldzo6cGx1Z2luSW5mbygpKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+b21pdFBERlN1cHBvcnQoKSkgeworI2lmIEVOQUJMRShQREZLSVRf
UExVR0lOKQorICAgICAgICBwbHVnaW5zLT5hcHBlbmQoUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkp
OworI2VuZGlmCisgICAgICAgIHBsdWdpbnMtPmFwcGVuZChTaW1wbGVQREZQbHVnaW46OnBsdWdp
bkluZm8oKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpEaWRHZXRQbHVnaW5zKHJlcXVlc3RJRCwgKnBsdWdpbnMpLCAwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5tbQppbmRleCAxNWFhMDUwLi5iYmI5ODFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCkBA
IC03NywxMiArNzcsNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogewogICAgIHBhcmFtZXRl
cnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKIAotICAgIGlmICghb21pdFBE
RlN1cHBvcnQoKSkgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRo
ZSBVSSBwcm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KLSAgICAgICAgSGFzaFNldDxTdHJpbmcs
IENhc2VGb2xkaW5nSGFzaD4gbWltZVR5cGUgPSBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7
Ci0gICAgICAgIHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9uLmFw
cGVuZFJhbmdlKG1pbWVUeXBlLmJlZ2luKCksIG1pbWVUeXBlLmVuZCgpKTsKLSAgICB9Ci0KICAg
ICBwYXJhbWV0ZXJzLnBhcmVudFByb2Nlc3NOYW1lID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBwcm9jZXNzTmFtZV07ICAgIAogCiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjYWNo
ZVBhdGgoQWRvcHRDRiwgV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQw
YjBiY2YuLjZlNmU5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTI1OCw2ICsyNTgsNyBAQAogCQkyOUNENTVBQjEyOEUyOTRG
MDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5Q0Q1NUE5MTI4RTI5NEYwMDEzM0M4
NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0Lm1tICovOyB9OwogCQkyOUQ1NURGMTE2
MUJGOUYxMDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlENTVERUYxNjFC
RjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsg
fTsKIAkJMjlENTVERjIxNjFCRjlGMTAwMzFBMkUzIC8qIFdlYlBhZ2VHcm91cFByb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RDU1
REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmggKi87IH07
CisJCTJEODcwRDEwMTYyMzRGRkUwMDBBM0YyMCAvKiBQREZQbHVnaW4ubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDg3MEQwRTE2MjJCN0Y5MDAwQTNG
MjAgLyogUERGUGx1Z2luLm1tICovOyB9OwogCQkzMTA5OTk3MzE0NkM3NUEyMDAyOURFQjkgLyog
V2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxMDk5OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRp
b25DbGllbnQuY3BwICovOyB9OwogCQkzMTA5OTlDNzE0NkM5RTNEMDAyOURFQjkgLyogV2ViTm90
aWZpY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTA5OTk2ODE0NkM3MUY1MDAyOURFQjkgLyogV2ViTm90aWZpY2F0aW9uQ2xpZW50
LmggKi87IH07CiAJCTMxMkMwQzRBMTQ2RERDOEEwMDE2QzkxMSAvKiBXS05vdGlmaWNhdGlvblBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTJDMEM0OTE0NkREQzhBMDAxNkM5MTEgLyogV0tOb3RpZmljYXRpb25Qcm92aWRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MzQsNyArOTM1
LDcgQEAKIAkJRTE5NTgyRDYxNTNDQzA1NDAwQjYwODc1IC8qIFBERktpdEltcG9ydHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk1ODJENDE1M0ND
MDUzMDBCNjA4NzUgLyogUERGS2l0SW1wb3J0cy5tbSAqLzsgfTsKIAkJRTE5NjdFMzYxNTBBQjVE
NTAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiBpbiBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE5NjdFMzUxNTBBQjVENTAw
QzczMTY5IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYiAqLzsgfTsKIAkJRTE5
NjdFMzgxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJQcm9jZXNzLnNiIGluIFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNzE1MEFCNUUy
MDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2IgKi87IH07Ci0JCUUxOTk4NzVFMTQy
QzA0NTQwMEJCMkRFNyAvKiBCdWlsdEluUERGVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWls
dEluUERGVmlldy5tbSAqLzsgfTsKKwkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIFNpbXBs
ZVBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4ubW0gKi87IH07
CiAJCUUxQTMxNzMyMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUEzMTczMTEzNENFQTZD
MDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5oICovOyB9OwogCQlFMUEzMTczNTEzNENFQTgw
MDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1
dGVkU3RyaW5nLm1tICovOyB9OwogCQlFMUFFQTIyRjE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxs
S2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUFFQTIyRDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRB
Y2Nlc3NXYXRjaGVyLmggKi87IH07CkBAIC0xMzMzLDYgKzEzMzQsOCBAQAogCQkyOUQ1NURFRTE2
MUJGODc4MDAzMUEyRTMgLyogV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2Vi
UGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI5RDU1REVGMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlR3Jv
dXBQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI5RDU1REYwMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3NhZ2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VHcm91cFByb3h5TWVzc2Fn
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkQ4NzBEMEQxNjIyQjdGOTAwMEEz
RjIwIC8qIFBERlBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQREZQ
bHVnaW4uaDsgcGF0aCA9IFBERi9QREZQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBsdWdpbi5tbTsgcGF0aCA9IFBERi9Q
REZQbHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5OTY4MTQ2Qzcx
RjUwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Tm90aWZpY2F0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDk5
OTcxMTQ2Qzc1OUIwMDI5REVCOSAvKiBXZWJOb3RpZmljYXRpb25DbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEyQzBDNDkxNDZEREM4QTAwMTZDOTExIC8q
IFdLTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjA2Niw4ICsyMDY5LDggQEAKIAkJRTE5NTgyRDQxNTNDQzA1MzAwQjYwODc1IC8qIFBERktp
dEltcG9ydHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQREZL
aXRJbXBvcnRzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk2N0UzNTE1MEFC
NUQ1MDBDNzMxNjkgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJvY2Vzcy5zYjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NjdFMzcxNTBBQjVFMjAwQzczMTY5IC8qIGNvbS5h
cHBsZS5XZWJQcm9jZXNzLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGNvbS5hcHBsZS5XZWJQ
cm9jZXNzLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTk5ODc1QTE0MkJGOUI4
MDBCQjJERTcgLyogQnVpbHRJblBERlZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQnVpbHRJblBERlZpZXcuaDsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogQnVp
bHRJblBERlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBC
dWlsdEluUERGVmlldy5tbTsgcGF0aCA9IFBERi9CdWlsdEluUERGVmlldy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8qIFNpbXBsZVBE
RlBsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaW1wbGVQREZQbHVn
aW4uaDsgcGF0aCA9IFBERi9TaW1wbGVQREZQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFNpbXBsZVBERlBsdWdpbi5t
bTsgcGF0aCA9IFBERi9TaW1wbGVQREZQbHVnaW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJp
YnV0ZWRTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBB
dHRyaWJ1dGVkU3RyaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFFQTIy
RDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg5Nyw4ICszOTAwLDEwIEBACiAJCUUx
OTk4NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQREYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCUUxOTk4NzVDMTQyQkZDOTcwMEJCMkRFNyAvKiBCdWlsdElu
UERGVmlldy5tbSAqLywKLQkJCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyogQnVpbHRJblBE
RlZpZXcuaCAqLywKKwkJCQkyRDg3MEQwRDE2MjJCN0Y5MDAwQTNGMjAgLyogUERGUGx1Z2luLmgg
Ki8sCisJCQkJMkQ4NzBEMEUxNjIyQjdGOTAwMEEzRjIwIC8qIFBERlBsdWdpbi5tbSAqLywKKwkJ
CQlFMTk5ODc1QzE0MkJGQzk3MDBCQjJERTcgLyogU2ltcGxlUERGUGx1Z2luLm1tICovLAorCQkJ
CUUxOTk4NzVBMTQyQkY5QjgwMEJCMkRFNyAvKiBTaW1wbGVQREZQbHVnaW4uaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gUERGOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQ4MTIsNiAr
NDgxNyw3IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CiAJCQkJNUQ1MTg0NTUxM0JDRjlDQzAwQzdGRjRBIC8qIEFQSUNsaWVudFRyYWl0cy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkyRDg3MEQxMDE2MjM0RkZFMDAwQTNGMjAgLyogUERGUGx1Z2luLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjYzNDAzRjkxNDkxMEQ1NzAwMTA3MEI1IC8qIEFQSU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNENjEwNTEzQTdGMDNBMDBGOTVENEUgLyogQXJn
dW1lbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBRjBDNEIxMkIxNjMzNDAwOEU0
OUUyIC8qIEFyZ3VtZW50Q29kZXJzQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00ODI4LDcgKzQ4
MzQsNyBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdT
dG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzQxQUM4MTI2M0M4ODMwMDA1NEU5NCAv
KiBCaW5hcnlTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRTE5OTg3NUUxNDJDMDQ1
NDAwQkIyREU3IC8qIEJ1aWx0SW5QREZWaWV3Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE5OTg3
NUUxNDJDMDQ1NDAwQkIyREU3IC8qIFNpbXBsZVBERlBsdWdpbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBQTJFNTFFMTJFNEMwNUUwMEJDNDk2NiAvKiBDR1V0aWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxQTJEOTU3MDEyODQ4NTY0MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBNkY5RkI3MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGlu
ZU1hYy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCmluZGV4IGUy
OGM3OGQuLjVhZjA3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcApAQCAtOTEzLDYgKzkx
MywyMSBAQCBib29sIE5ldHNjYXBlUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCiAgICAgcmV0dXJuIHBsYXRmb3JtSGFuZGxl
S2V5Ym9hcmRFdmVudChrZXlib2FyZEV2ZW50KTsKIH0KIAorYm9vbCBOZXRzY2FwZVBsdWdpbjo6
aGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTmV0c2NhcGVQ
bHVnaW46OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUp
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBOZXRzY2FwZVBsdWdpbjo6aGFu
ZGxlc1BhZ2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIE5l
dHNjYXBlUGx1Z2luOjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQogewogICAgIEFTU0VSVChtX2lz
U3RhcnRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
TmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCmluZGV4IDYxZTJiYjcuLjI5OTUzZmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRz
Y2FwZVBsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5oCkBAIC0yMDMsNiArMjAzLDEyIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBib29sIGhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYp
OwogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9jdXMoYm9vbCk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudCk7CisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRF
bmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVzUGFn
ZVNjYWxlRmFjdG9yKCk7CisKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxl
TlBPYmplY3QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRJblBERlZpZXcuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWM4ODI5ZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5QREZWaWV3LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQnVpbHRJblBERlZpZXdf
aAotI2RlZmluZSBCdWlsdEluUERGVmlld19oCi0KLSNpbmNsdWRlICJQbHVnaW4uaCIKLSNpbmNs
dWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsK
LXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwotdHlwZWRlZiBjb25z
dCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIHN0cnVjdCBQbHVnaW5JbmZvOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgUGx1Z2luVmlldzsKLWNsYXNzIFdlYkZyYW1lOwotCi1jbGFzcyBCdWlsdEluUERGVmlldyA6
IHB1YmxpYyBQbHVnaW4sIHByaXZhdGUgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJ1aWx0SW5QREZWaWV3PiBjcmVhdGUoV2ViRnJhbWUq
KTsKLSAgICB+QnVpbHRJblBERlZpZXcoKTsKLQotICAgIHN0YXRpYyBXZWJDb3JlOjpQbHVnaW5J
bmZvIHBsdWdpbkluZm8oKTsKLQotICAgIC8vIEluLXByb2Nlc3MgUERGVmlld3MgZG9uJ3Qgc3Vw
cG9ydCBhc3luY2hyb25vdXMgaW5pdGlhbGl6YXRpb24uCi0gICAgdmlydHVhbCBib29sIGlzQmVp
bmdBc3luY2hyb25vdXNseUluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQot
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBCdWlsdEluUERGVmlldyhXZWJGcmFtZSopOwotCi0gICAg
Ly8gUmVndWxhciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRk
IHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRs
aW5nLgotICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKLSAgICBjb25zdCBQbHVnaW5WaWV3
KiBwbHVnaW5WaWV3KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFdlYkNvcmU6
OlNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29y
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgYWRkQXJjaGl2ZVJlc291cmNlKCk7
Ci0gICAgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKTsKLSAgICB2b2lkIGNhbGN1bGF0ZVNpemVz
KCk7Ci0gICAgdm9pZCBwYWludEJhY2tncm91bmQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lkIHBhaW50Q29udGVu
dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3QpOwotICAgIHZvaWQgcGFpbnRDb250cm9scyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwotCi0gICAgLy8gUGx1Zy1pbiBt
ZXRob2RzCi0gICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdElu
V2luZG93Q29vcmRpbmF0ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9sVGludHMo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gc25hcHNob3QoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCBQ
bGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOwotI2VuZGlmCi0gICAgdmlydHVhbCBib29sIGlz
VHJhbnNwYXJlbnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5jZWxsZWQp
OwotICAgIHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJl
Y2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgcmVz
cG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGlt
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBT
dHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkUmVj
ZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3Ro
KTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJl
YW1JRCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3RyZWFtSUQs
IGJvb2wgd2FzQ2FuY2VsbGVkKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFtRGlkUmVj
ZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50MzJfdCBz
dHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIG1h
bnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3Ry
ZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCk7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1v
dXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
TW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7Ci0gICAg
dmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKLSAgICB2aXJ0dWFsIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgdmly
dHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lu
ZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJh
bWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJ
bldpbmRvd0Nvb3JkaW5hdGVzKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJpbGl0eUNo
YW5nZWQoYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2Vk
KGZsb2F0KTsKLSAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVu
dGlmaWVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4dElucHV0KGNv
bnN0IFN0cmluZyYgdGV4dElucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJIb3N0aW5n
TW9kZShMYXllckhvc3RpbmdNb2RlKSBPVkVSUklERTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2
b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKTsKLSAgICB2aXJ0dWFsIHZvaWQg
cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
b3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTY3Jv
bGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSk7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKTsK
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKTsKLQot
ICAgIHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclByaW50aW5n
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQotCi0gICAgLy8gU2Ny
b2xsYWJsZUFyZWEgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qgc2Nyb2xs
Q29ybmVyUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJD
b3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJl
Y3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBz
Y3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWln
aHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNTaXplKCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250
YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxi
YXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgp
OyB9Ci0gICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVlLCBTY3Jv
bGxBbmltYXRvck1hYyB3aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdhaXRpbmcg
Zm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1hdGUuCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbGJhclN0
eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJSSURFOwotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlIG90aGVyIGNvbnZlcnNpb24gZnVuY3Rpb25zOyB0aGlz
IG9uZSBpcyBlbm91Z2ggdG8gZ2V0IHNjcm9sbGJhciBoaXQgdGVzdGluZyB3b3JraW5nLgotICAg
IHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBwYXJlbnRQb2ludCkgY29uc3QgT1ZFUlJJREU7Ci0KLSAgICBKU09iamVjdFJlZiBtYWtlSlNQ
REZEb2MoSlNDb250ZXh0UmVmKTsKLSAgICBzdGF0aWMgSlNWYWx1ZVJlZiBqc1BERkRvY1ByaW50
KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmpl
Y3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3BsdWdpblNp
emU7Ci0KLSAgICBXZWJDb3JlOjpLVVJMIG1fc291cmNlVVJMOwotCi0gICAgU3RyaW5nIG1fc3Vn
Z2VzdGVkRmlsZW5hbWU7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IG1fZGF0YUJ1
ZmZlcjsKLQotICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gbV9wZGZEb2N1bWVudDsKLSAgICBW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gbV9wYWdlQm94ZXM7Ci0gICAgV2ViQ29yZTo6SW50U2l6
ZSBtX3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KLQotICAg
IFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICBS
ZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOwotCi0gICAgV2Vi
RnJhbWUqIG1fZnJhbWU7Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0Owot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBCdWlsdEluUERGVmlld19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0
SW5QREZWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWls
dEluUERGVmlldy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjYWVhOS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0SW5Q
REZWaWV3Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsODgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkJ1aWx0SW5QREZWaWV3Lmgi
Ci0KLSNpbXBvcnQgIlBERktpdEltcG9ydHMuaCIKLSNpbXBvcnQgIlBsdWdpblZpZXcuaCIKLSNp
bXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2ltcG9ydCAiV2ViRXZlbnQuaCIKLSNpbXBvcnQg
IldlYkV2ZW50Q29udmVyc2lvbi5oIgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UmVmLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgotI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmQ0YuaD4KLSNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KLSNpbXBvcnQgPFdlYkNv
cmUvQXJjaGl2ZVJlc291cmNlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2ltcG9ydCA8
V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmlu
Z3MuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5E
YXRhLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL1Njcm9sbEFuaW1hdG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRo
ZW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQotc3RhdGljIHZvaWQgYXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERG
RGljdGlvbmFyeVJlZiBzdWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCi17
Ci0gICAgQ0dQREZBcnJheVJlZiBuYW1lczsKLSAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJy
YXkoc3VidHJlZSwgIk5hbWVzIiwgJm5hbWVzKSkgewotICAgICAgICBzaXplX3QgbmFtZUNvdW50
ID0gQ0dQREZBcnJheUdldENvdW50KG5hbWVzKSAvIDI7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9i
amVjdDsKLSAgICAgICAgICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwg
Jm9iamVjdCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVjdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENHUERGQXJyYXlSZWYga2lkczsKLSAgICBp
ZiAoIUNHUERGRGljdGlvbmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQo
a2lkcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7Ci0gICAg
ICAgIENHUERGRGljdGlvbmFyeVJlZiBraWQ7Ci0gICAgICAgIGlmICghQ0dQREZBcnJheUdldERp
Y3Rpb25hcnkoa2lkcywgaSwgJmtpZCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
YXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9u
YXJ5UmVmIHRyZWUsIFZlY3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKLXsKLSAgICBh
cHBlbmRWYWx1ZXNJblBERk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKLX0K
LQotc3RhdGljIHZvaWQgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJl
ZiBwZGZEb2N1bWVudCwgVmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykK
LXsKLSAgICBpZiAoIXBkZkRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR1BERkRp
Y3Rpb25hcnlSZWYgcGRmQ2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3Vt
ZW50KTsKLSAgICBpZiAoIXBkZkNhdGFsb2cpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdl
dCB0aGUgZGljdGlvbmFyeSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KLSAgICBD
R1BERkRpY3Rpb25hcnlSZWYgbmFtZXNEaWN0aW9uYXJ5OwotICAgIGlmICghQ0dQREZEaWN0aW9u
YXJ5R2V0RGljdGlvbmFyeShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNj
cmlwdCIgbmFtZSB0cmVlLgotICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRy
ZWU7Ci0gICAgaWYgKCFDR1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFy
eSwgIkphdmFTY3JpcHQiLCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGhlIG5hbWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQg
aW4gdGhlIHZhbHVlcy4KLSAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7Ci0gICAg
Z2V0QWxsVmFsdWVzSW5QREZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOwot
ICAgIHNpemVfdCBvYmplY3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RDb3VudDsgKytpKSB7Ci0gICAgICAgIENHUERGRGljdGlvbmFy
eVJlZiBqYXZhU2NyaXB0QWN0aW9uOwotICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUo
cmVpbnRlcnByZXRfY2FzdDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVj
dFR5cGVEaWN0aW9uYXJ5LCAmamF2YVNjcmlwdEFjdGlvbikpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24g
dHlwZSBvZiAiSmF2YVNjcmlwdCIuCi0gICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7Ci0g
ICAgICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIs
ICZhY3Rpb25UeXBlKSB8fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7Ci0gICAg
ICAgIENGSW5kZXggbGVuZ3RoOwotICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07Ci0gICAg
ICAgIENHUERGU3RyaW5nUmVmIHN0cmluZzsKLSAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
ZGF0YTsKLSAgICAgICAgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0
aW9uLCAiSlMiLCAmc3RyZWFtKSkgewotICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1h
dDsKLSAgICAgICAgICAgIGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwg
JmZvcm1hdCkpOwotICAgICAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOwot
ICAgICAgICAgICAgbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKENHUERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAi
SlMiLCAmc3RyaW5nKSkgewotICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQ
dHIoc3RyaW5nKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0
cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFieXRlcykKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAm
JiBieXRlc1swXSA9PSAweEZFICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2Rp
bmdVbmljb2RlIDoga0NGU3RyaW5nRW5jb2RpbmdVVEY4OwotICAgICAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHNjcmlwdChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBieXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOwotICAgICAgICBp
ZiAoIXNjcmlwdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHNjcmlwdHMuYXBw
ZW5kKHNjcmlwdCk7Ci0gICAgfQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY29uc3QgdWlu
dDY0X3QgcGRmRG9jdW1lbnRSZXF1ZXN0SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBv
cnRzIGxvYWRpbmcgbXVsdGlwbGUgc3RyZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBE
Ri4KLQotY29uc3QgaW50IGd1dHRlckhlaWdodCA9IDEwOwotY29uc3QgaW50IHNoYWRvd09mZnNl
dFggPSAwOwotY29uc3QgaW50IHNoYWRvd09mZnNldFkgPSAtMjsKLWNvbnN0IGludCBzaGFkb3dT
aXplID0gNzsKLQotUGFzc1JlZlB0cjxCdWlsdEluUERGVmlldz4gQnVpbHRJblBERlZpZXc6OmNy
ZWF0ZShXZWJGcmFtZSogZnJhbWUpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdElu
UERGVmlldyhmcmFtZSkpOwotfQotCi1CdWlsdEluUERGVmlldzo6QnVpbHRJblBERlZpZXcoV2Vi
RnJhbWUqIGZyYW1lKQotICAgIDogbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotQnVpbHRJblBERlZp
ZXc6On5CdWlsdEluUERGVmlldygpCi17Ci19Ci0KLVBsdWdpbkluZm8gQnVpbHRJblBERlZpZXc6
OnBsdWdpbkluZm8oKQotewotICAgIFBsdWdpbkluZm8gaW5mbzsKLSAgICBpbmZvLm5hbWUgPSBi
dWlsdEluUERGUGx1Z2luTmFtZSgpOwotCi0gICAgTWltZUNsYXNzSW5mbyBtaW1lQ2xhc3NJbmZv
OwotICAgIG1pbWVDbGFzc0luZm8udHlwZSA9ImFwcGxpY2F0aW9uL3BkZiI7Ci0gICAgbWltZUNs
YXNzSW5mby5kZXNjID0gcGRmRG9jdW1lbnRUeXBlRGVzY3JpcHRpb24oKTsKLSAgICBtaW1lQ2xh
c3NJbmZvLmV4dGVuc2lvbnMuYXBwZW5kKCJwZGYiKTsKLQotICAgIGluZm8ubWltZXMuYXBwZW5k
KG1pbWVDbGFzc0luZm8pOwotICAgIHJldHVybiBpbmZvOwotfQotCi1QbHVnaW5WaWV3KiBCdWls
dEluUERGVmlldzo6cGx1Z2luVmlldygpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdp
blZpZXcqPihjb250cm9sbGVyKCkpOwotfQotCi1jb25zdCBQbHVnaW5WaWV3KiBCdWlsdEluUERG
Vmlldzo6cGx1Z2luVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFBsdWdpblZpZXcqPihjb250cm9sbGVyKCkpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp1
cGRhdGVTY3JvbGxiYXJzKCkKLXsKLSAgICBib29sIGhhZFNjcm9sbGJhcnMgPSBtX2hvcml6b250
YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLQotICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKG1fcGx1Z2luU2l6ZS53aWR0aCgpID49IG1fcGRm
RG9jdW1lbnRTaXplLndpZHRoKCkpCi0gICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOwotICAgIH0gZWxzZSBpZiAobV9wbHVnaW5TaXplLndpZHRoKCkgPCBt
X3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIg
PSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAobV92ZXJ0
aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpZiAobV9wbHVnaW5TaXplLmhlaWdodCgpID49IG1f
cGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIGlmIChtX3BsdWdpblNpemUuaGVpZ2h0KCkg
PCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92
ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBpbnQgcGFn
ZVN0ZXAgPSBtX3BhZ2VCb3hlcy5pc0VtcHR5KCkgPyAwIDogbV9wYWdlQm94ZXNbMF0uaGVpZ2h0
KCk7Ci0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbiht
X3BsdWdpblNpemUud2lkdGgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgsIG1fcGRmRG9jdW1l
bnRTaXplLndpZHRoKCkpOwotICAgICAgICBJbnRSZWN0IHNjcm9sbGJhclJlY3QocGx1Z2luVmll
dygpLT54KCksIHBsdWdpblZpZXcoKS0+eSgpICsgbV9wbHVnaW5TaXplLmhlaWdodCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1faG9y
aXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bGJhcikKLSAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29udHJhY3QobV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgMCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJh
bWVSZWN0KHNjcm9sbGJhclJlY3QpOwotICAgIH0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJh
cikgewotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0UHJvcG9ydGlvbihtX3BsdWdpblNpemUuaGVpZ2h0KCkgLSBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0LCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEludFJlY3Qg
c2Nyb2xsYmFyUmVjdChJbnRSZWN0KHBsdWdpblZpZXcoKS0+eCgpICsgbV9wbHVnaW5TaXplLndp
ZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPnkoKSwg
bV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Ci0g
ICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBzY3JvbGxiYXJS
ZWN0LmNvbnRyYWN0KDAsIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7Ci0gICAg
fQotICAgIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+Y29yZUZyYW1lKCkt
PnZpZXcoKTsKLSAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9v
bCBoYXNTY3JvbGxiYXJzID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyIHx8IG1fdmVydGljYWxTY3Jv
bGxiYXI7Ci0gICAgaWYgKGhhZFNjcm9sbGJhcnMgIT0gaGFzU2Nyb2xsYmFycykgewotICAgICAg
ICBpZiAoaGFzU2Nyb2xsYmFycykKLSAgICAgICAgICAgIGZyYW1lVmlldy0+YWRkU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3Zl
U2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSAgICAgICAgZnJhbWVWaWV3LT5zZXROZWVkc0xheW91
dCgpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IEJ1aWx0SW5QREZWaWV3Ojpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgIGlmIChvcmllbnRh
dGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Ny
b2xsYmFyKHdpZGdldC5nZXQoKSk7Ci0gICAgZWxzZSAKLSAgICAgICAgZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKLSAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXco
KS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsK
LX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFy
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9s
bGJhciA6IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQot
ICAgICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSk7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxi
YXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICBzY3JvbGxiYXIgPSAwOwot
fQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjphZGRBcmNoaXZlUmVzb3VyY2UoKQotewotICAgIC8v
IEZJWE1FOiBJdCdzIGEgaGFjayB0byBmb3JjZSBhZGQgYSByZXNvdXJjZSB0byBEb2N1bWVudExv
YWRlci4gUERGIGRvY3VtZW50cyBzaG91bGQganVzdCBiZSBmZXRjaGVkIGFzIENhY2hlZFJlc291
cmNlcy4KLQotICAgIC8vIEFkZCBqdXN0IGVub3VnaCBkYXRhIGZvciBjb250ZXh0IG1lbnUgaGFu
ZGxpbmcgYW5kIHdlYiBhcmNoaXZlcyB0byB3b3JrLgotICAgIFJlc291cmNlUmVzcG9uc2Ugc3lu
dGhlc2l6ZWRSZXNwb25zZTsKLSAgICBzeW50aGVzaXplZFJlc3BvbnNlLnNldFN1Z2dlc3RlZEZp
bGVuYW1lKG1fc3VnZ2VzdGVkRmlsZW5hbWUpOwotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0
VVJMKG1fc291cmNlVVJMKTsgLy8gTmVlZHMgdG8gbWF0Y2ggdGhlIEhpdFRlc3RSZXN1bHQ6OmFi
c29sdXRlUERGVVJMLgotICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0TWltZVR5cGUoImFwcGxp
Y2F0aW9uL3BkZiIpOwotCi0gICAgUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UgPSBB
cmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShTaGFyZWRCdWZmZXI6OndyYXBDRkRhdGEobV9kYXRhQnVm
ZmVyLmdldCgpKSwgbV9zb3VyY2VVUkwsICJhcHBsaWNhdGlvbi9wZGYiLCBTdHJpbmcoKSwgU3Ry
aW5nKCksIHN5bnRoZXNpemVkUmVzcG9uc2UpOwotICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+
ZG9jdW1lbnQoKS0+bG9hZGVyKCktPmFkZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZS5yZWxlYXNl
KCkpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoKQotewot
ICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOwotCi0gICAgbV9wZGZEb2N1bWVudC5hZG9wdE5TKFtb
cGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1fZGF0YUJ1
ZmZlci5nZXQoKV0pOwotCi0gICAgY2FsY3VsYXRlU2l6ZXMoKTsKLSAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7Ci0KLSAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3Bs
dWdpblNpemUud2lkdGgoKSwgbV9wbHVnaW5TaXplLmhlaWdodCgpKSk7Ci0KLSAgICBWZWN0b3I8
UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7Ci0gICAgZ2V0QWxsU2NyaXB0c0luUERG
RG9jdW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBzY3JpcHRzKTsKLQot
ICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMuc2l6ZSgpOwotICAgIGlmICghc2NyaXB0
Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjdHggPSBK
U0dsb2JhbENvbnRleHRDcmVhdGUoMCk7Ci0gICAgSlNPYmplY3RSZWYganNQREZEb2MgPSBtYWtl
SlNQREZEb2MoY3R4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7
ICsraSkgewotICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKLSAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgs
IHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOwotICAgICAgICBKU1N0cmluZ1JlbGVhc2Uoc2Ny
aXB0KTsKLSAgICB9Ci0KLSAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGN0eCk7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OmNhbGN1bGF0ZVNpemVzKCkKLXsKLSAgICBzaXplX3QgcGFnZUNv
dW50ID0gQ0dQREZEb2N1bWVudEdldE51bWJlck9mUGFnZXMoW21fcGRmRG9jdW1lbnQuZ2V0KCkg
ZG9jdW1lbnRSZWZdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhZ2VDb3VudDsgKytp
KSB7Ci0gICAgICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVudEdldFBhZ2Uo
W21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9jdW1lbnRSZWZdLCBpICsgMSk7Ci0gICAgICAgIEFTU0VS
VChwZGZQYWdlKTsKLQotICAgICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChw
ZGZQYWdlLCBrQ0dQREZDcm9wQm94KTsKLSAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkK
LSAgICAgICAgICAgIGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVk
aWFCb3gpOwotICAgICAgICBtX3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKLSAgICAg
ICAgbV9wZGZEb2N1bWVudFNpemUuc2V0V2lkdGgobWF4KG1fcGRmRG9jdW1lbnRTaXplLndpZHRo
KCksIHN0YXRpY19jYXN0PGludD4oYm94LnNpemUud2lkdGgpKSk7Ci0gICAgICAgIG1fcGRmRG9j
dW1lbnRTaXplLmV4cGFuZCgwLCBib3guc2l6ZS5oZWlnaHQpOwotICAgIH0KLSAgICBtX3BkZkRv
Y3VtZW50U2l6ZS5leHBhbmQoMCwgZ3V0dGVySGVpZ2h0ICogKG1fcGFnZUJveGVzLnNpemUoKSAt
IDEpKTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIC8vIExvYWQgdGhlIHNyYyBVUkwgaWYgbmVlZGVkLgot
ICAgIG1fc291cmNlVVJMID0gcGFyYW1ldGVycy51cmw7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLnNo
b3VsZFVzZU1hbnVhbExvYWRlciAmJiAhcGFyYW1ldGVycy51cmwuaXNFbXB0eSgpKQotICAgICAg
ICBjb250cm9sbGVyKCktPmxvYWRVUkwocGRmRG9jdW1lbnRSZXF1ZXN0SUQsICJHRVQiLCBwYXJh
bWV0ZXJzLnVybC5zdHJpbmcoKSwgU3RyaW5nKCksIEhUVFBIZWFkZXJNYXAoKSwgVmVjdG9yPHVp
bnQ4X3Q+KCksIGZhbHNlKTsKLQotICAgIGNvbnRyb2xsZXIoKS0+ZGlkSW5pdGlhbGl6ZVBsdWdp
bigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpkZXN0cm95
KCkKLXsKLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3
LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICB9Ci0KLSAgICBkZXN0cm95U2Nyb2xs
YmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIGNv
bnRlbnRBcmVhV2lsbFBhaW50KCk7Ci0KLSAgICBwYWludEJhY2tncm91bmQoZ3JhcGhpY3NDb250
ZXh0LCBkaXJ0eVJlY3QpOwotCi0gICAgaWYgKCFtX3BkZkRvY3VtZW50KSAvLyBGSVhNRTogRHJh
dyBsb2FkaW5nIHByb2dyZXNzLgotICAgICAgICByZXR1cm47Ci0KLSAgICBwYWludENvbnRlbnQo
Z3JhcGhpY3NDb250ZXh0LCBkaXJ0eVJlY3QpOwotICAgIHBhaW50Q29udHJvbHMoZ3JhcGhpY3ND
b250ZXh0LCBkaXJ0eVJlY3QpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpwYWludEJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdy
YXBoaWNzQ29udGV4dCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6
OmdyYXksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJl
Y3QoZGlydHlSZWN0KTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cGFpbnRDb250ZW50KEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0Nv
bnRleHQpOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKLQotICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRT
aG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRTbW9v
dGhGb250cyh0cnVlKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6
d2hpdGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlw
KGRpcnR5UmVjdCk7Ci0gICAgSW50UmVjdCBjb250ZW50UmVjdChkaXJ0eVJlY3QpOwotICAgIGNv
bnRlbnRSZWN0Lm1vdmVCeShJbnRQb2ludChtX3Njcm9sbE9mZnNldCkpOwotICAgIGdyYXBoaWNz
Q29udGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9zY3JvbGxPZmZz
ZXQuaGVpZ2h0KCkpOwotCi0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwot
Ci0gICAgaW50IHBhZ2VUb3AgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdl
Qm94ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSW50UmVjdCBwYWdlQm94ID0gbV9wYWdlQm94
ZXNbaV07Ci0gICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCA9IG1heChyb3Vu
ZGYoKG1fcGx1Z2luU2l6ZS53aWR0aCgpIC0gcGFnZUJveC53aWR0aCgpKSAvIDIuMGYpLCAwLjBm
KTsKLSAgICAgICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZID0gKG1fcGFnZUJveGVz
LnNpemUoKSA9PSAxKSA/IG1heChyb3VuZGYoKG1fcGx1Z2luU2l6ZS5oZWlnaHQoKSAtIHBhZ2VC
b3guaGVpZ2h0KCkgKyBzaGFkb3dPZmZzZXRZKSAvIDIuMGYpLCAwLjBmKSA6IDA7Ci0KLSAgICAg
ICAgaWYgKHBhZ2VUb3AgPiBjb250ZW50UmVjdC5tYXhZKCkpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgaWYgKHBhZ2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZzZXRGb3JD
ZW50ZXJpbmdZICsgZ3V0dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgewotICAgICAgICAg
ICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1
bWVudC5nZXQoKSBkb2N1bWVudFJlZl0sIGkgKyAxKTsKLQotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShl
eHRyYU9mZnNldEZvckNlbnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9yQ2Vu
dGVyaW5nWSAtIHBhZ2VCb3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7Ci0KLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFk
b3dPZmZzZXRZKSwgc2hhZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7Ci0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsZWFyU2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+Y2xpcChwYWdlQm94KTsKLQotICAgICAgICAgICAgQ0dDb250ZXh0RHJh
d1BERlBhZ2UoY29udGV4dCwgcGRmUGFnZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnJlc3RvcmUoKTsKLSAgICAgICAgfQotICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVpZ2h0
KCkgKyBndXR0ZXJIZWlnaHQ7Ci0gICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCAwLCAtcGFnZUJveC5oZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7Ci0gICAgfQotfQotCi12b2lk
IEJ1aWx0SW5QREZWaWV3OjpwYWludENvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgewotICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmdyYXBoaWNzQ29udGV4dCk7Ci0gICAg
ICAgIEludFJlY3Qgc2Nyb2xsYmFyRGlydHlSZWN0ID0gZGlydHlSZWN0OwotICAgICAgICBzY3Jv
bGxiYXJEaXJ0eVJlY3QubW92ZUJ5KHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkubG9jYXRpb24o
KSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1wbHVnaW5WaWV3KCktPmZy
YW1lUmVjdCgpLngoKSwgLXBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCkueSgpKTsKLQotICAgICAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0KLSAg
ICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIHNjcm9sbGJhckRpcnR5UmVjdCk7Ci0gICAg
fQotCi0gICAgSW50UmVjdCBkaXJ0eUNvcm5lclJlY3QgPSBpbnRlcnNlY3Rpb24oc2Nyb2xsQ29y
bmVyUmVjdCgpLCBkaXJ0eVJlY3QpOwotICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLT5wYWlu
dFNjcm9sbENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Ci19Ci0K
LXZvaWQgQnVpbHRJblBERlZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCkKLXsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRhdGlu
Z0NvbnRyb2xUaW50cygpKTsKLQotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7
Ci0gICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOwotfQotCi1Q
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gQnVpbHRJblBERlZpZXc6OnNuYXBzaG90KCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLVBsYXRmb3JtTGF5ZXIqIEJ1
aWx0SW5QREZWaWV3OjpwbHVnaW5MYXllcigpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYK
LQotCi1ib29sIEJ1aWx0SW5QREZWaWV3Ojppc1RyYW5zcGFyZW50KCkKLXsKLSAgICAvLyBUaGlz
IHNob3VsZCBuZXZlciBiZSBjYWxsZWQgZnJvbSB0aGUgd2ViIHByb2Nlc3MuCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJ1aWx0SW5QREZW
aWV3Ojp3YW50c1doZWVsRXZlbnRzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50U2l6ZSYgcGx1Z2luU2l6
ZSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGx1Z2lu
VG9Sb290Vmlld1RyYW5zZm9ybSkKLXsKLSAgICBpZiAobV9wbHVnaW5TaXplID09IHBsdWdpblNp
emUpIHsKLSAgICAgICAgLy8gTm90aGluZyB0byBkby4KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fcGx1Z2luU2l6ZSA9IHBsdWdpblNpemU7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycygp
OwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmlsaXR5RGlkQ2hhbmdlKCkKLXsKLX0K
LQotdm9pZCBCdWlsdEluUERGVmlldzo6ZnJhbWVEaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90KQot
ewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3Ojpm
cmFtZURpZEZhaWwodWludDY0X3QsIGJvb2wpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OmRpZEV2YWx1YXRlSmF2YVNjcmlwdCh1aW50NjRf
dCwgY29uc3QgV1RGOjpTdHJpbmcmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UodWludDY0X3Qg
c3RyZWFtSUQsIGNvbnN0IEtVUkwmLCB1aW50MzJfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQp
OwotCi0gICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1Z2dlc3RlZEZpbGVuYW1lOwotfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotdm9pZCBCdWlsdEluUERG
Vmlldzo6c3RyZWFtRGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIq
IGJ5dGVzLCBpbnQgbGVuZ3RoKQotewotICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVh
bUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElEKTsKLQotICAgIGlmICghbV9kYXRhQnVmZmVyKQot
ICAgICAgICBtX2RhdGFCdWZmZXIuYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsK
LQotICAgIENGRGF0YUFwcGVuZEJ5dGVzKG1fZGF0YUJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVSW50OCo+KGJ5dGVzKSwgbGVuZ3RoKTsKLX0KLQotdm9pZCBCdWlsdEluUERG
Vmlldzo6c3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRfdCBzdHJlYW1JRCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7
Ci0KLSAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6
c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxsZWQpCi17Ci0g
ICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0
SUQpOwotCi0gICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQnVpbHRJblBERlZp
ZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBLVVJMJiByZXNwb25zZVVS
TCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZEZpbGVuYW1lKQotewotICAgIG1fc3VnZ2VzdGVkRmlsZW5hbWUgPSBzdWdnZXN0
ZWRGaWxlbmFtZTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFtX2Rh
dGFCdWZmZXIpCi0gICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoMCwgMCkpOwotCi0gICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOwotfQotCi12b2lk
IEJ1aWx0SW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKLXsKLSAgICBw
ZGZEb2N1bWVudERpZExvYWQoKTsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6bWFudWFsU3Ry
ZWFtRGlkRmFpbChib29sKQotewotICAgIG1fZGF0YUJ1ZmZlci5jbGVhcigpOwotfQotCi1ib29s
IEJ1aWx0SW5QREZWaWV3OjpoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2
ZW50KQotewotICAgIHN3aXRjaCAoZXZlbnQudHlwZSgpKSB7Ci0gICAgY2FzZSBXZWJFdmVudDo6
TW91c2VNb3ZlOgotICAgICAgICBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwotICAgICAgICAv
LyBGSVhNRTogU2hvdWxkIGFsc28gbm90aWZ5IHNjcm9sbGJhciB0byBzaG93IGhvdmVyIGVmZmVj
dC4gU2hvdWxkIGFsc28gc2VuZCBtb3VzZUV4aXRlZCB0byBoaWRlIGl0LgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZURvd246IHsKLSAgICAgICAgLy8gUmV0dXJuaW5n
IGZhbHNlIGFzIHdpbGwgbWFrZSBFdmVudEhhbmRsZXIgdW5mb2N1cyB0aGUgcGx1Zy1pbiwgd2hp
Y2ggaXMgYXBwcm9wcmlhdGUgd2hlbiBjbGlja2luZyBzY3JvbGxiYXJzLgotICAgICAgICAvLyBJ
ZGVhbGx5LCB3ZSB3b3VsZG4ndCBjaGFuZ2UgZm9jdXMgYXQgYWxsLCBidXQgUGx1Z2luVmlldyBh
bHJlYWR5IGRpZCB0aGF0IGZvciB1cy4KLSAgICAgICAgLy8gV2hlbiBzdXBwb3J0IGZvciBQREYg
Zm9ybXMgaXMgYWRkZWQsIHdlJ2xsIG5lZWQgdG8gYWN0dWFsbHkgZm9jdXMgdGhlIHBsdWctaW4g
d2hlbiBjbGlja2luZyBpbiBhIGZvcm0uCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IFdlYkV2ZW50OjpNb3VzZVVwOiB7Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBwbGF0Zm9y
bUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOwotICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZVVwKHBsYXRmb3Jt
RXZlbnQpOwotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG1f
dmVydGljYWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlV2hlZWxF
dmVudChjb25zdCBXZWJXaGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBQbGF0Zm9ybVdoZWVsRXZl
bnQgcGxhdGZvcm1FdmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Ci19Ci0KLWJvb2wgQnVpbHRJ
blBERlZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JikKLXsK
LSAgICBtb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKQotewotICAgIG1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29u
c3QgV2ViTW91c2VFdmVudCYpCi17Ci0gICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQg
bWVudS4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmhhbmRs
ZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQot
ewotfQotCi1OUE9iamVjdCogQnVpbHRJblBERlZpZXc6OnBsdWdpblNjcmlwdGFibGVOUE9iamVj
dCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBQTEFURk9STShNQUMpCi0KLXZvaWQgQnVp
bHRJblBERlZpZXc6OndpbmRvd0ZvY3VzQ2hhbmdlZChib29sKQotewotfQotCi12b2lkIEJ1aWx0
SW5QREZWaWV3Ojp3aW5kb3dBbmRWaWV3RnJhbWVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB3aW5kb3dGcmFtZUluU2NyZWVuQ29vcmRpbmF0ZXMsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHZpZXdGcmFtZUluV2luZG93Q29vcmRpbmF0ZXMpCi17Ci19Ci0KLXZvaWQgQnVpbHRJblBE
RlZpZXc6OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpCi17Ci19Ci0KLXZvaWQgQnVpbHRJ
blBERlZpZXc6OmNvbnRlbnRzU2NhbGVGYWN0b3JDaGFuZ2VkKGZsb2F0KQotewotfQotCi11aW50
NjRfdCBCdWlsdEluUERGVmlldzo6cGx1Z2luQ29tcGxleFRleHRJbnB1dElkZW50aWZpZXIoKSBj
b25zdAotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjpzZW5kQ29t
cGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3
OjpzZXRMYXllckhvc3RpbmdNb2RlKExheWVySG9zdGluZ01vZGUpCi17Ci19Ci0KLSNlbmRpZgot
Ci12b2lkIEJ1aWx0SW5QREZWaWV3OjpzdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoYm9vbCkK
LXsKLX0KLQotdm9pZCBCdWlsdEluUERGVmlldzo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2Vk
KGJvb2wpCi17Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmdldEZvcm1WYWx1ZShTdHJpbmcm
KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCdWlsdEluUERGVmlldzo6aGFuZGxl
U2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQotewotICAgIHJldHVybiBzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci19
Ci0KLVNjcm9sbGJhciogQnVpbHRJblBERlZpZXc6Omhvcml6b250YWxTY3JvbGxiYXIoKQotewot
ICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7Ci19Ci0KLVNjcm9sbGJhciog
QnVpbHRJblBERlZpZXc6OnZlcnRpY2FsU2Nyb2xsYmFyKCkKLXsKLSAgICByZXR1cm4gbV92ZXJ0
aWNhbFNjcm9sbGJhci5nZXQoKTsKLX0KLQotSW50UmVjdCBCdWlsdEluUERGVmlldzo6c2Nyb2xs
Q29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hvcml6b250YWxTY3JvbGxiYXIgfHwg
IW1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAg
QVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKTsKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QocGx1Z2luVmll
dygpLT53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygp
LT5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotfQot
Ci1TY3JvbGxhYmxlQXJlYSogQnVpbHRJblBERlZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBhbmQgbG9v
ayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KLSAgICByZXR1
cm4gMDsKLX0KLQotSW50UmVjdCBCdWlsdEluUERGVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGlu
Z0JveCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWVSZWN0KCk7Ci19
Ci0KLXZvaWQgQnVpbHRJblBERlZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KQotewotICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZShvZmZzZXQueCgpLCBvZmZz
ZXQueSgpKTsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIGZvciBwZXJmb3JtYW5j
ZSB0byBibGl0IHBhcnRzIHRoYXQgcmVtYWluIHZpc2libGUuCi0gICAgY29udHJvbGxlcigpLT5p
bnZhbGlkYXRlKEludFJlY3QoMCwgMCwgbV9wbHVnaW5TaXplLndpZHRoKCksIG1fcGx1Z2luU2l6
ZS5oZWlnaHQoKSkpOwotfQotCi1pbnQgQnVpbHRJblBERlZpZXc6OnNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Ci17Ci0gICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgcmV0dXJuIHNj
cm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpKSA6IDA7Ci19Ci0KLWJvb2wgQnVpbHRJblBERlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKLXsK
LSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpKSB7Ci0gICAg
ICAgIGlmIChQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICByZXR1
cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEJ1aWx0SW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBJ
bnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7Ci0gICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXIt
PmxvY2F0aW9uKCkpOwotICAgIGRpcnR5UmVjdC5tb3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRp
b24oKSk7Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Ci19Ci0KLXZv
aWQgQnVpbHRJblBERlZpZXc6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOwotfQotCi1i
b29sIEJ1aWx0SW5QREZWaWV3Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3OjpzY3JvbGxQb3NpdGlvbihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9m
ZnNldC53aWR0aCgpOwotICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWxTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50UG9pbnQgQnVp
bHRJblBERlZpZXc6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9p
bnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwotfQot
Ci1JbnRQb2ludCBCdWlsdEluUERGVmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW50UG9pbnQoMCwgMCk7Ci19Ci0KLUludFBvaW50IEJ1aWx0SW5QREZW
aWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIGludCBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpIDogMDsKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMDsKLQotICAgIEludFBvaW50IG1h
eGltdW1PZmZzZXQobV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSAtIG1fcGx1Z2luU2l6ZS53aWR0
aCgpICsgdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0KCkg
LSBtX3BsdWdpblNpemUuaGVpZ2h0KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAg
ICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICByZXR1cm4gbWF4aW11
bU9mZnNldDsKLX0KLQotaW50IEJ1aWx0SW5QREZWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wbHVnaW5TaXplLmhlaWdodCgpOwotfQotCi1pbnQgQnVpbHRJblBE
RlZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGx1Z2luU2l6ZS53
aWR0aCgpOwotfQotCi1JbnRTaXplIEJ1aWx0SW5QREZWaWV3Ojpjb250ZW50c1NpemUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsKLX0KLQotYm9vbCBCdWlsdEluUERG
Vmlldzo6c2Nyb2xsYmFyc0NhbkJlQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIXBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKTsKLX0KLQotdm9pZCBC
dWlsdEluUERGVmlldzo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKGludCwgYm9vbCBmb3JjZVVwZGF0
ZSkKLXsKLSAgICBpZiAoIWZvcmNlVXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJ
ZiB0aGUgUERGIHdhcyBzY3JvbGxlZCBhbGwgdGhlIHdheSB0byBib3R0b20gcmlnaHQgYW5kIHNj
cm9sbGJhcnMgY2hhbmdlIHRvIG92ZXJsYXkgc3R5bGUsIHdlIGRvbid0IHdhbnQgdG8gZGlzcGxh
eSB3aGl0ZSByZWN0YW5nbGVzIHdoZXJlIHNjcm9sbGJhcnMgd2VyZS4KLSAgICBJbnRQb2ludCBu
ZXdTY3JvbGxPZmZzZXQgPSBJbnRQb2ludChtX3Njcm9sbE9mZnNldCkuc2hydW5rVG8obWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkpOwotICAgIHNldFNjcm9sbE9mZnNldChuZXdTY3JvbGxPZmZzZXQp
OwotCi0gICAgLy8gQXMgc2l6ZSBvZiB0aGUgY29udGVudCBhcmVhIGNoYW5nZXMsIHNjcm9sbGJh
cnMgbWF5IG5lZWQgdG8gYXBwZWFyIG9yIHRvIGRpc2FwcGVhci4KLSAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7Ci0KLSAgICBTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNSZXNpemVkKCk7Ci19Ci0KLUlu
dFBvaW50IEJ1aWx0SW5QREZWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2lu
dCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+
dmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihwbHVnaW5WaWV3KCktPnJlbmRlcmVyKCksIHBhcmVu
dFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9s
bGJhci0+bG9jYXRpb24oKSk7Ci0KLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLXN0YXRpYyB2b2lk
IGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVjdFJlZiBvYmplY3Qp
Ci17Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERG
Vmlldyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBwZGZWaWV3LT5yZWYoKTsK
LX0KLQotc3RhdGljIHZvaWQganNQREZEb2NGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCi17
Ci0gICAgQnVpbHRJblBERlZpZXcqIHBkZlZpZXcgPSBzdGF0aWNfY2FzdDxCdWlsdEluUERGVmll
dyo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBwZGZWaWV3LT5kZXJlZigpOwot
fQotCi1KU1ZhbHVlUmVmIEJ1aWx0SW5QREZWaWV3Ojpqc1BERkRvY1ByaW50KEpTQ29udGV4dFJl
ZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQotewotICAgIEJ1aWx0SW5QREZWaWV3KiBwZGZWaWV3ID0gc3RhdGljX2Nh
c3Q8QnVpbHRJblBERlZpZXcqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotCi0g
ICAgV2ViRnJhbWUqIGZyYW1lID0gcGRmVmlldy0+bV9mcmFtZTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY3R4KTsKLQotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotCi0gICAgUGFnZSogcGFnZSA9
IGNvcmVGcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGN0eCk7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+cHJpbnQoY29yZUZy
YW1lKTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOwotfQotCi1KU09i
amVjdFJlZiBCdWlsdEluUERGVmlldzo6bWFrZUpTUERGRG9jKEpTQ29udGV4dFJlZiBjdHgpCi17
Ci0gICAgc3RhdGljIEpTU3RhdGljRnVuY3Rpb24ganNQREZEb2NTdGF0aWNGdW5jdGlvbnNbXSA9
IHsKLSAgICAgICAgeyAicHJpbnQiLCBqc1BERkRvY1ByaW50LCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
MCwgMCwgMCB9LAotICAgIH07Ci0KLSAgICBzdGF0aWMgSlNDbGFzc0RlZmluaXRpb24ganNQREZE
b2NDbGFzc0RlZmluaXRpb24gPSB7Ci0gICAgICAgIDAsCi0gICAgICAgIGtKU0NsYXNzQXR0cmli
dXRlTm9uZSwKLSAgICAgICAgIkRvYyIsCi0gICAgICAgIDAsCi0gICAgICAgIDAsCi0gICAgICAg
IGpzUERGRG9jU3RhdGljRnVuY3Rpb25zLAotICAgICAgICBqc1BERkRvY0luaXRpYWxpemUsIGpz
UERGRG9jRmluYWxpemUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKLSAgICB9OwotCi0gICAg
c3RhdGljIEpTQ2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9j
Q2xhc3NEZWZpbml0aW9uKTsKLQotICAgIHJldHVybiBKU09iamVjdE1ha2UoY3R4LCBqc1BERkRv
Y0NsYXNzLCB0aGlzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ZiYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4uaApAQCAtMCwwICsxLDEx
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUERGUGx1Z2luX2gKKyNkZWZpbmUgUERG
UGx1Z2luX2gKKworI2lmIEVOQUJMRShQREZLSVRfUExVR0lOKQorCisjaW5jbHVkZSAiUGx1Z2lu
LmgiCisjaW5jbHVkZSAiU2ltcGxlUERGUGx1Z2luLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BZmZp
bmVUcmFuc2Zvcm0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0Nv
bnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2Jq
ZWN0UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNWYWx1ZVJlZjsK
KworT0JKQ19DTEFTUyBQREZMYXllckNvbnRyb2xsZXI7CitPQkpDX0NMQVNTIFdLUERGTGF5ZXJD
b250cm9sbGVyRGVsZWdhdGU7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBQbHVnaW5J
bmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGx1Z2luVmlldzsKK2NsYXNz
IFdlYkZyYW1lOworCitjbGFzcyBQREZQbHVnaW4gOiBwdWJsaWMgU2ltcGxlUERGUGx1Z2luIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQREZQbHVnaW4+IGNyZWF0ZShXZWJGcmFt
ZSopOworICAgIH5QREZQbHVnaW4oKTsKKworICAgIC8vIEluLVdlYlByb2Nlc3MgcGx1Z2lucyBk
b24ndCBzdXBwb3J0IGFzeW5jaHJvbm91cyBpbml0aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJv
b2wgaXNCZWluZ0FzeW5jaHJvbm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIAorICAgIHZvaWQgcGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXll
ciAqLCBDR0NvbnRleHRSZWYpOworICAgIAorICAgIHVzaW5nIFNjcm9sbGFibGVBcmVhOjpub3Rp
ZnlTY3JvbGxQb3NpdGlvbkNoYW5nZWQ7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgUERGUGx1
Z2luKFdlYkZyYW1lKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0
ZVNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwZGZEb2N1bWVudERpZExvYWQoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlU2l6ZXMoKSBPVkVSUklERTsKKworICAg
IHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQbGF0
Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZW9t
ZXRyeURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
JiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKU9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBpc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3RvcigpIE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGZ1bmN0aW9ucy4KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6
OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpIE9WRVJSSURFOworCisgICAgSlNPYmplY3RSZWYgbWFrZUpTUERGRG9jKEpTQ29udGV4dFJl
Zik7CisgICAgc3RhdGljIEpTVmFsdWVSZWYganNQREZEb2NQcmludChKU0NvbnRleHRSZWYsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKTsKKworICAgIFJldGFpblB0cjxDQUxheWVyICo+IG1fY29udGFpbmVyTGF5ZXI7CisgICAg
UmV0YWluUHRyPENBTGF5ZXIgKj4gbV9jb250ZW50TGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5
ZXIgKj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXI7CisgICAgUmV0YWluUHRyPENBTGF5ZXIg
Kj4gbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyOworICAgIFJldGFpblB0cjxDQUxheWVyICo+IG1f
c2Nyb2xsQ29ybmVyTGF5ZXI7CisgICAgUmV0YWluUHRyPFBERkxheWVyQ29udHJvbGxlcj4gbV9w
ZGZMYXllckNvbnRyb2xsZXI7CisgICAgCisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIG1f
cm9vdFZpZXdUb1BsdWdpblRyYW5zZm9ybTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX2xhc3RN
b3VzZVBvaW50OworICAgIAorICAgIFJldGFpblB0cjxXS1BERkxheWVyQ29udHJvbGxlckRlbGVn
YXRlPiBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2VuZGlmIC8vIFBE
RlBsdWdpbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYv
UERGUGx1Z2luLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjE1MDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbQpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikKKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJQREZQbHVnaW4uaCIKKworI2ltcG9ydCAiUERGS2l0SW1wb3J0cy5oIgorI2ltcG9ydCAiUGx1
Z2luVmlldy5oIgorI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJFdmVu
dC5oIgorI2ltcG9ydCAiV2ViRXZlbnRDb252ZXJzaW9uLmgiCisjaW1wb3J0IDxQREZLaXQvUERG
S2l0Lmg+CisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQXJjaGl2ZVJlc291cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9IVFRQSGVhZGVyTWFwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmlu
Z3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QYXN0ZWJv
YXJkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyQm94TW9kZWxPYmplY3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsQW5pbWF0b3Iu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKworQHByb3RvY29sIFBERkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlIDxOU09iamVjdD4KKworLSAodm9pZCl1cGRhdGVTY3JvbGxQ
b3NpdGlvbjooQ0dQb2ludCluZXdQb3NpdGlvbjsKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVi
b2FyZDooTlNBcnJheSAqKWl0ZW1zIHdpdGhUeXBlczooTlNBcnJheSAqKXR5cGVzOworLSAodm9p
ZClzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAq
KXN0cmluZyBhdFBvaW50OihDR1BvaW50KXBvaW50OworLSAodm9pZClwZXJmb3JtV2ViU2VhcmNo
OihOU1N0cmluZyAqKXN0cmluZzsKKy0gKHZvaWQpb3BlbldpdGhQcmV2aWV3OworLSAodm9pZClz
YXZlVG9QREY7CisKK0BlbmQKKworQGludGVyZmFjZSBQREZMYXllckNvbnRyb2xsZXIgOiBOU09i
amVjdAorQGVuZAorCitAaW50ZXJmYWNlIFBERkxheWVyQ29udHJvbGxlciAoRGV0YWlscykKKwor
QHByb3BlcnR5IChyZXRhaW4pIENBTGF5ZXIgKnBhcmVudExheWVyOworQHByb3BlcnR5IChyZXRh
aW4pIFBERkRvY3VtZW50ICpkb2N1bWVudDsKK0Bwcm9wZXJ0eSAocmV0YWluKSBpZDxQREZMYXll
ckNvbnRyb2xsZXJEZWxlZ2F0ZT4gZGVsZWdhdGU7CisKKy0gKHZvaWQpc2V0RnJhbWVTaXplOihD
R1NpemUpc2l6ZTsKKworLSAodm9pZClzZXREaXNwbGF5TW9kZTooaW50KW1vZGU7CistICh2b2lk
KXNldERpc3BsYXlzUGFnZUJyZWFrczooQk9PTClwYWdlQnJlYWtzOworCistIChDR0Zsb2F0KXRp
bGVTY2FsZUZhY3RvcjsKKy0gKHZvaWQpc2V0VGlsZVNjYWxlRmFjdG9yOihDR0Zsb2F0KXNjYWxl
RmFjdG9yOworCistIChDR1NpemUpY29udGVudFNpemU7CistIChDR1NpemUpY29udGVudFNpemVS
ZXNwZWN0aW5nWm9vbTsKKworLSAodm9pZClzbmFwc2hvdEluQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQ7CisKKy0gKHZvaWQpbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOihDR0Zsb2F0KW1h
Z25pZmljYXRpb24gYXRQb2ludDooQ0dQb2ludClwb2ludCBpbW1lZGlhdGVseTooQk9PTClpbW1l
ZGlhdGVseTsKKworLSAoQ0dQb2ludClzY3JvbGxQb3NpdGlvbjsKKy0gKHZvaWQpc2V0U2Nyb2xs
UG9zaXRpb246KENHUG9pbnQpbmV3UG9zaXRpb247CistICh2b2lkKXNjcm9sbFdpdGhEZWx0YToo
Q0dTaXplKWRlbHRhOworCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50OworLSAo
dm9pZCltb3VzZU1vdmVkOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKW1vdXNlVXA6KE5TRXZl
bnQgKilldmVudDsKKy0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQ7CistICh2
b2lkKW1vdXNlRW50ZXJlZDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZCltb3VzZUV4aXRlZDoo
TlNFdmVudCAqKWV2ZW50OworCistIChOU0FycmF5ICopZmluZFN0cmluZzooTlNTdHJpbmcgKilz
dHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTClpc0Nhc2VTZW5zaXRpdmUgaGlnaGxpZ2h0TWF0Y2hl
czooQk9PTClzaG91bGRIaWdobGlnaHRNYXRjaGVzOworCistIChpZCljdXJyZW50U2VsZWN0aW9u
OworLSAodm9pZCljb3B5U2VsZWN0aW9uOworLSAodm9pZClzZWxlY3RBbGw7CisKKy0gKGJvb2wp
a2V5RG93bjooTlNFdmVudCAqKWV2ZW50OworCistICh2b2lkKXNldEhVREVuYWJsZWQ6KEJPT0wp
ZW5hYmxlZDsKKy0gKEJPT0wpaHVkRW5hYmxlZDsKKworQGVuZAorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworQGludGVyZmFjZSBXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIDogQ0FMYXll
cgoreworICAgIFdlYktpdDo6UERGUGx1Z2luKiBfcGRmUGx1Z2luOworfQorCitAcHJvcGVydHkg
KGFzc2lnbikgV2ViS2l0OjpQREZQbHVnaW4qIHBkZlBsdWdpbjsKKworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllcgorCitAc3ludGhlc2l6ZSBwZGZQbHVn
aW47CisKKy0gKGlkKWluaXRXaXRoUERGUGx1Z2luOihXZWJLaXQ6OlBERlBsdWdpbiAqKXBsdWdp
bgoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIF9wZGZQbHVnaW4gPSBwbHVnaW47CisgICAgCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7Cisg
ICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y3R4Cit7CisgICAgX3BkZlBsdWdpbi0+cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoc2Vs
ZiwgY3R4KTsKK30KKworQGVuZAorCitAaW50ZXJmYWNlIFdLUERGTGF5ZXJDb250cm9sbGVyRGVs
ZWdhdGUgOiBOU09iamVjdDxQREZMYXllckNvbnRyb2xsZXJEZWxlZ2F0ZT4KK3sKKyAgICBXZWJL
aXQ6OlBERlBsdWdpbiogX3BkZlBsdWdpbjsKK30KKworQHByb3BlcnR5IChhc3NpZ24pIFdlYktp
dDo6UERGUGx1Z2luKiBwZGZQbHVnaW47CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLUERG
TGF5ZXJDb250cm9sbGVyRGVsZWdhdGUKKworQHN5bnRoZXNpemUgcGRmUGx1Z2luOworCistIChp
ZClpbml0V2l0aFBERlBsdWdpbjooV2ViS2l0OjpQREZQbHVnaW4gKilwbHVnaW4KK3sKKyAgICBp
ZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAg
ICBfcGRmUGx1Z2luID0gcGx1Z2luOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2
b2lkKXVwZGF0ZVNjcm9sbFBvc2l0aW9uOihDR1BvaW50KW5ld1Bvc2l0aW9uCit7CisgICAgX3Bk
ZlBsdWdpbi0+bm90aWZ5U2Nyb2xsUG9zaXRpb25DaGFuZ2VkKEludFBvaW50KG5ld1Bvc2l0aW9u
KSk7Cit9CisKKy0gKHZvaWQpd3JpdGVJdGVtc1RvUGFzdGVib2FyZDooTlNBcnJheSAqKWl0ZW1z
IHdpdGhUeXBlczooTlNBcnJheSAqKXR5cGVzCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSB0eXBl
cyBvdGhlciB0aGFuIHBsYWluIHRleHQuCisKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNv
dW50ID0gaXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp0
eXBlID0gW3R5cGVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIGlmIChbdHlwZSBpc0VxdWFs
VG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8fCBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQ
YXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4g
cGxhaW5UZXh0U3RyaW5nKEFkb3B0TlMsIFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoRGF0YTpb
aXRlbXMgb2JqZWN0QXRJbmRleDppXSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwor
ICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFpblRl
eHQocGxhaW5UZXh0U3RyaW5nLmdldCgpLCBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2Up
OworICAgICAgICB9CisgICAgfQorfQorCistICh2b2lkKXNob3dEZWZpbml0aW9uRm9yQXR0cmli
dXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopc3RyaW5nIGF0UG9pbnQ6KENHUG9pbnQp
cG9pbnQKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCistICh2b2lkKXBlcmZvcm1X
ZWJTZWFyY2g6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudC4K
K30KKworLSAodm9pZClvcGVuV2l0aFByZXZpZXcKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
LgorfQorCistICh2b2lkKXNhdmVUb1BERgoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NSZWZQdHI8UERGUGx1Z2luPiBQ
REZQbHVnaW46OmNyZWF0ZShXZWJGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQREZQbHVnaW4oZnJhbWUpKTsKK30KKworUERGUGx1Z2luOjpQREZQbHVnaW4oV2ViRnJh
bWUqIGZyYW1lKQorICAgIDogU2ltcGxlUERGUGx1Z2luKGZyYW1lKQorICAgICwgbV9jb250YWlu
ZXJMYXllcihBZG9wdE5TLCBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKQorICAgICwgbV9jb250ZW50
TGF5ZXIoQWRvcHROUywgW1tDQUxheWVyIGFsbG9jXSBpbml0XSkKKyAgICAsIG1fc2Nyb2xsQ29y
bmVyTGF5ZXIoQWRvcHROUywgW1tXS1BERlBsdWdpblNjcm9sbGJhckxheWVyIGFsbG9jXSBpbml0
V2l0aFBERlBsdWdpbjp0aGlzXSkKKyAgICAsIG1fcGRmTGF5ZXJDb250cm9sbGVyKEFkb3B0TlMs
IFtbcGRmTGF5ZXJDb250cm9sbGVyQ2xhc3MoKSBhbGxvY10gaW5pdF0pCisgICAgLCBtX3BkZkxh
eWVyQ29udHJvbGxlckRlbGVnYXRlKEFkb3B0TlMsIFtbV0tQREZMYXllckNvbnRyb2xsZXJEZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhpc10pCit7CisgICAgbV9wZGZMYXllckNv
bnRyb2xsZXIuZ2V0KCkuZGVsZWdhdGUgPSBtX3BkZkxheWVyQ29udHJvbGxlckRlbGVnYXRlLmdl
dCgpOworICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLnBhcmVudExheWVyID0gbV9jb250
ZW50TGF5ZXIuZ2V0KCk7CisgICAgCisgICAgW21fY29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3Vi
bGF5ZXI6bV9jb250ZW50TGF5ZXIuZ2V0KCldOworICAgIFttX2NvbnRhaW5lckxheWVyLmdldCgp
IGFkZFN1YmxheWVyOm1fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCldOworfQorCitQREZQbHVnaW46
On5QREZQbHVnaW4oKQoreworfQorCit2b2lkIFBERlBsdWdpbjo6dXBkYXRlU2Nyb2xsYmFycygp
Cit7CisgICAgU2ltcGxlUERGUGx1Z2luOjp1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgCisgICAg
aWYgKG1fdmVydGljYWxTY3JvbGxiYXJMYXllcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpLT5mcmFtZVJlY3QoKTsK
KyAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXld
OworICAgIH0KKyAgICAKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIpIHsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkuZnJhbWUgPSBob3Jpem9udGFs
U2Nyb2xsYmFyKCktPmZyYW1lUmVjdCgpOworICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Ny
b2xsQ29ybmVyTGF5ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXJMYXllci5nZXQoKS5mcmFt
ZSA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICAgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0
KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBQ
REZQbHVnaW46OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5h
dGl2ZVNjcm9sbGJhcih0aGlzLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CisgICAg
aWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXIuYWRvcHROUyhbW1dLUERGUGx1Z2luU2Nyb2xsYmFyTGF5ZXIg
YWxsb2NdIGluaXRXaXRoUERGUGx1Z2luOnRoaXNdKTsKKyAgICAgICAgW21fY29udGFpbmVyTGF5
ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6bV9ob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOwor
ICAgICAgICAKKyAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXJMYXllci5hZG9wdE5T
KFtbV0tQREZQbHVnaW5TY3JvbGxiYXJMYXllciBhbGxvY10gaW5pdFdpdGhQREZQbHVnaW46dGhp
c10pOworICAgICAgICBbbV9jb250YWluZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjptX3ZlcnRp
Y2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCldOworICAgICAgICAKKyAgICAgICAgZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICB9CisgICAgcGx1Z2luVmlldygpLT5mcmFt
ZSgpLT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5y
ZWxlYXNlKCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHNjcm9s
bGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgOiB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGlmICghc2Nyb2xsYmFyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgeworICAgICAgICB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0
KCkpOworCisgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKSByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
YmFyLmdldCgpKTsKKworICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyLmdldCgpIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhckxheWVyID0g
MDsKKyAgICB9CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3Jv
bGxiYXItPmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBzY3JvbGxiYXIgPSAw
OworfQorCit2b2lkIFBERlBsdWdpbjo6cGRmRG9jdW1lbnREaWRMb2FkKCkKK3sKKyAgICBhZGRB
cmNoaXZlUmVzb3VyY2UoKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRvY3Vt
ZW50KEFkb3B0TlMsIFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5T
RGF0YSAqKWRhdGEoKS5nZXQoKV0pOworCisgICAgc2V0UERGRG9jdW1lbnQoZG9jdW1lbnQpOwor
CisgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNldEZyYW1lU2l6ZTpzaXplKCldOwor
ICAgIG1fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpLmRvY3VtZW50ID0gZG9jdW1lbnQuZ2V0KCk7
CisgICAgCisgICAgcGx1Z2luVmlldygpLT5zZXRQYWdlU2NhbGVGYWN0b3IoW21fcGRmTGF5ZXJD
b250cm9sbGVyLmdldCgpIHRpbGVTY2FsZUZhY3Rvcl0sIEludFBvaW50KDAsIDApKTsKKworICAg
IGNhbGN1bGF0ZVNpemVzKCk7CisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAgY29udHJv
bGxlcigpLT5pbnZhbGlkYXRlKEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CisgICAgCisg
ICAgcnVuU2NyaXB0c0luUERGRG9jdW1lbnQoKTsKK30KKwordm9pZCBQREZQbHVnaW46OmNhbGN1
bGF0ZVNpemVzKCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tZSBzdHJhaWdodCBm
cm9tIFBERktpdC4KKyAgICBjb21wdXRlUGFnZUJveGVzKCk7CisKKyAgICBzZXRQREZEb2N1bWVu
dFNpemUoSW50U2l6ZShbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudFNpemVSZXNw
ZWN0aW5nWm9vbV0pKTsKK30KKwordm9pZCBQREZQbHVnaW46OmRlc3Ryb3koKQoreworICAgIGlm
ICh3ZWJGcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHdlYkZy
YW1lKCktPmNvcmVGcmFtZSgpLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgCisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVy
bGF5ZXJdOworICAgIFttX2NvbnRlbnRMYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07
Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpwYWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworfQorICAgIAordm9pZCBQREZQbHVn
aW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRl
eHRSZWYgY29udGV4dCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGlj
c0NvbnRleHQpOworICAgIAorICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0
KHRydWUpOworICAgIAorICAgIGlmIChsYXllciA9PSBtX3Njcm9sbENvcm5lckxheWVyKSB7Cisg
ICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCA9IHRoaXMtPnNjcm9sbENvcm5lclJlY3Qo
KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgtc2Nyb2xsQ29ybmVyUmVjdC54
KCksIC1zY3JvbGxDb3JuZXJSZWN0LnkoKSk7CisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLT5wYWludFNjcm9sbENvcm5lcigwLCAmZ3JhcGhpY3NDb250ZXh0LCBzY3JvbGxDb3JuZXJS
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTY3JvbGxiYXIqIHNjcm9s
bGJhciA9IDA7CisgICAgCisgICAgaWYgKGxheWVyID09IG1fdmVydGljYWxTY3JvbGxiYXJMYXll
cikKKyAgICAgICAgc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBlbHNlIGlm
IChsYXllciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXJMYXllcikKKyAgICAgICAgc2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXIt
PngoKSwgLXNjcm9sbGJhci0+eSgpKTsKKyAgICBzY3JvbGxiYXItPnBhaW50KCZncmFwaGljc0Nv
bnRleHQsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOworfQorCitQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gUERGUGx1Z2luOjpzbmFwc2hvdCgpCit7CisgICAgaWYgKHNpemUoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5vbi0x
IHBhZ2UvZGV2aWNlU2NhbGVGYWN0b3IuCisgICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
c2l6ZSgpOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2luZ1N0b3JlU2l6ZSwgU2hhcmVhYmxlQml0bWFw
OjpTdXBwb3J0c0FscGhhKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0g
Yml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgwLCAtc2l6ZSgpLmhlaWdo
dCgpKTsKKworICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzbmFwc2hvdEluQ29udGV4
dDpjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKV07CisKKyAgICByZXR1cm4gYml0bWFwLnJlbGVh
c2UoKTsKK30KKworUGxhdGZvcm1MYXllciogUERGUGx1Z2luOjpwbHVnaW5MYXllcigpCit7Cisg
ICAgcmV0dXJuIG1fY29udGFpbmVyTGF5ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgUERGUGx1Z2luOjpn
ZW9tZXRyeURpZENoYW5nZShjb25zdCBJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNmb3JtKQorewor
ICAgIGlmIChzaXplKCkgPT0gcGx1Z2luU2l6ZSAmJiBwbHVnaW5WaWV3KCktPnBhZ2VTY2FsZUZh
Y3RvcigpID09IFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSB0aWxlU2NhbGVGYWN0b3JdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzZXRTaXplKHBsdWdpblNpemUpOworICAgIG1fcm9vdFZp
ZXdUb1BsdWdpblRyYW5zZm9ybSA9IHBsdWdpblRvUm9vdFZpZXdUcmFuc2Zvcm0uaW52ZXJzZSgp
OworICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBzZXRGcmFtZVNpemU6cGx1Z2luU2l6
ZV07CisKKyAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0
RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICBDQVRyYW5zZm9ybTNEIHRyYW5zZm9ybSA9IENBVHJh
bnNmb3JtM0RNYWtlU2NhbGUoMSwgLTEsIDEpOworICAgIAorICAgIENHRmxvYXQgbWFnbmlmaWNh
dGlvbiA9IHBsdWdpblZpZXcoKS0+cGFnZVNjYWxlRmFjdG9yKCkgLSBbbV9wZGZMYXllckNvbnRy
b2xsZXIuZ2V0KCkgdGlsZVNjYWxlRmFjdG9yXTsKKyAgICAKKyAgICAvLyBGSVhNRTogSW5zdGVh
ZCBvZiBtX2xhc3RNb3VzZVBvaW50LCB3ZSBzaG91bGQgdXNlIHRoZSB6b29tIG9yaWdpbiBmcm9t
IFBsdWdpblZpZXc6OnNldFBhZ2VTY2FsZUZhY3Rvci4KKyAgICBbbV9wZGZMYXllckNvbnRyb2xs
ZXIuZ2V0KCkgbWFnbmlmeVdpdGhNYWduaWZpY2F0aW9uOm1hZ25pZmljYXRpb24gYXRQb2ludDpt
X2xhc3RNb3VzZVBvaW50IGltbWVkaWF0ZWx5OllFU107CisgICAgW21fY29udGVudExheWVyLmdl
dCgpIHNldFN1YmxheWVyVHJhbnNmb3JtOkNBVHJhbnNmb3JtM0RUcmFuc2xhdGUodHJhbnNmb3Jt
LCAwLCAtcGx1Z2luU2l6ZS5oZWlnaHQoKSwgMCldOworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1p
dF07CisKKyAgICBjYWxjdWxhdGVTaXplcygpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30K
KyAgICAKK3N0YXRpYyBOU1VJbnRlZ2VyIG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoY29uc3Qg
V2ViRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiAoZXZlbnQuc2hpZnRLZXkoKSA/IE5TU2hp
ZnRLZXlNYXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQuY29udHJvbEtleSgpID8gTlNDb250cm9s
S2V5TWFzayA6IDApCisgICAgICAgIHwgKGV2ZW50LmFsdEtleSgpID8gTlNBbHRlcm5hdGVLZXlN
YXNrIDogMCkKKyAgICAgICAgfCAoZXZlbnQubWV0YUtleSgpID8gTlNDb21tYW5kS2V5TWFzayA6
IDApOworfQorICAgIAorc3RhdGljIE5TRXZlbnRUeXBlIGV2ZW50VHlwZUZyb21XZWJFdmVudChj
b25zdCBXZWJFdmVudCYgZXZlbnQsIGJvb2wgbW91c2VCdXR0b25Jc0Rvd24pCit7CisgICAgc3dp
dGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAg
ICByZXR1cm4gTlNLZXlEb3duOworICAgIGNhc2UgV2ViRXZlbnQ6OktleVVwOgorICAgICAgICBy
ZXR1cm4gTlNLZXlVcDsKKworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlRG93bjoKKyAgICAgICAg
c3dpdGNoIChzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Jj4oZXZlbnQpLmJ1dHRvbigp
KSB7CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAgICAgICAg
IHJldHVybiBOU0xlZnRNb3VzZURvd247CisgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6Umln
aHRCdXR0b246CisgICAgICAgICAgICByZXR1cm4gTlNSaWdodE1vdXNlRG93bjsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlVXA6CisgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8Y29uc3QgV2ViTW91c2VFdmVudCY+KGV2ZW50KS5idXR0b24oKSkgeworICAgICAgICBjYXNl
IFdlYk1vdXNlRXZlbnQ6OkxlZnRCdXR0b246CisgICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91
c2VVcDsKKyAgICAgICAgY2FzZSBXZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAg
ICAgIHJldHVybiBOU1JpZ2h0TW91c2VVcDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViRXZlbnQ6
Ok1vdXNlTW92ZToKKyAgICAgICAgaWYgKG1vdXNlQnV0dG9uSXNEb3duKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQmPihldmVudCkuYnV0dG9u
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRvbjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlNMZWZ0TW91c2VEcmFnZ2VkOworICAgICAgICAgICAgY2FzZSBX
ZWJNb3VzZUV2ZW50OjpSaWdodEJ1dHRvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTlNSaWdo
dE1vdXNlRHJhZ2dlZDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJu
IE5TTW91c2VNb3ZlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVNb3VzZUV2ZW50KGNv
bnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHN0YXRpYyBib29sIG1vdXNlQnV0dG9u
SXNEb3duID0gZmFsc2U7CisKKyAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uID0gZXZlbnQucG9z
aXRpb24oKTsKKworICAgIC8vIEZJWE1FOiBGb3J3YXJkIG1vdXNlIGV2ZW50cyB0byB0aGUgYXBw
cm9wcmlhdGUgc2Nyb2xsYmFyLgorICAgIGlmIChJbnRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXJM
YXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMobW91c2VQb3NpdGlvbikKKyAgICAgICAgfHwgSW50
UmVjdChtX2hvcml6b250YWxTY3JvbGxiYXJMYXllci5nZXQoKS5mcmFtZSkuY29udGFpbnMobW91
c2VQb3NpdGlvbikKKyAgICAgICAgfHwgSW50UmVjdChtX3Njcm9sbENvcm5lckxheWVyLmdldCgp
LmZyYW1lKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSW50UG9pbnQgcG9zaXRpb25JblBERlZpZXcobW91c2VQb3NpdGlvbik7CisgICAgcG9z
aXRpb25JblBERlZpZXcgPSBtX3Jvb3RWaWV3VG9QbHVnaW5UcmFuc2Zvcm0ubWFwUG9pbnQocG9z
aXRpb25JblBERlZpZXcpOworICAgIHBvc2l0aW9uSW5QREZWaWV3LnNldFkoc2l6ZSgpLmhlaWdo
dCgpIC0gcG9zaXRpb25JblBERlZpZXcueSgpKTsKKyAgICAKKyAgICBtX2xhc3RNb3VzZVBvaW50
ID0gcG9zaXRpb25JblBERlZpZXc7CisKKyAgICBOU0V2ZW50VHlwZSBldmVudFR5cGUgPSBldmVu
dFR5cGVGcm9tV2ViRXZlbnQoZXZlbnQsIG1vdXNlQnV0dG9uSXNEb3duKTsKKworICAgIGlmICgh
ZXZlbnRUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOU1VJbnRlZ2VyIG1vZGlm
aWVyRmxhZ3MgPSBtb2RpZmllckZsYWdzRnJvbVdlYkV2ZW50KGV2ZW50KTsKKworICAgIE5TRXZl
bnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpldmVudFR5cGUgbG9j
YXRpb246cG9zaXRpb25JblBERlZpZXcgbW9kaWZpZXJGbGFnczptb2RpZmllckZsYWdzIHRpbWVz
dGFtcDowIHdpbmRvd051bWJlcjowIGNvbnRleHQ6bmlsIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3Vu
dDpldmVudC5jbGlja0NvdW50KCkgcHJlc3N1cmU6MF07CisKKyAgICBzd2l0Y2ggKGV2ZW50LnR5
cGUoKSkgeworICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNlTW92ZToKKyAgICAgICAgaWYgKG1vdXNl
QnV0dG9uSXNEb3duKQorICAgICAgICAgICAgW21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIG1v
dXNlRHJhZ2dlZDpmYWtlRXZlbnRdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbbV9wZGZM
YXllckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZDpmYWtlRXZlbnRdOworICAgICAgICBtb3Vz
ZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFdl
YkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgbW91c2VCdXR0b25Jc0Rvd24gPSB0cnVlOwor
ICAgICAgICBbbV9wZGZMYXllckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VEb3duOmZha2VFdmVudF07
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVw
OiB7CisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBtb3VzZVVwOmZha2VFdmVu
dF07CisgICAgICAgIG1vdXNlQnV0dG9uSXNEb3duID0gZmFsc2U7CisgICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudCBwbGF0Zm9ybUV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjpoYW5kbGVLZXli
b2FyZEV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAgIE5TRXZlbnRU
eXBlIGV2ZW50VHlwZSA9IGV2ZW50VHlwZUZyb21XZWJFdmVudChldmVudCwgZmFsc2UpOworICAg
IE5TVUludGVnZXIgbW9kaWZpZXJGbGFncyA9IG1vZGlmaWVyRmxhZ3NGcm9tV2ViRXZlbnQoZXZl
bnQpOworICAgIAorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGtleUV2ZW50V2l0
aFR5cGU6ZXZlbnRUeXBlIGxvY2F0aW9uOk5TWmVyb1BvaW50IG1vZGlmaWVyRmxhZ3M6bW9kaWZp
ZXJGbGFncyB0aW1lc3RhbXA6MCB3aW5kb3dOdW1iZXI6MCBjb250ZXh0OjAgY2hhcmFjdGVyczpl
dmVudC50ZXh0KCkgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzOmV2ZW50LnVubW9kaWZpZWRU
ZXh0KCkgaXNBUmVwZWF0OmV2ZW50LmlzQXV0b1JlcGVhdCgpIGtleUNvZGU6ZXZlbnQubmF0aXZl
VmlydHVhbEtleUNvZGUoKV07CisgICAgCisgICAgc3dpdGNoIChldmVudC50eXBlKCkpIHsKKyAg
ICBjYXNlIFdlYkV2ZW50OjpLZXlEb3duOgorICAgICAgICByZXR1cm4gW21fcGRmTGF5ZXJDb250
cm9sbGVyLmdldCgpIGtleURvd246ZmFrZUV2ZW50XTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jv
b2wgUERGUGx1Z2luOjpoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQoreworICAgIGlmIChjb21tYW5kTmFtZSA9PSAi
Y29weSIpCisgICAgICAgIFttX3BkZkxheWVyQ29udHJvbGxlci5nZXQoKSBjb3B5U2VsZWN0aW9u
XTsKKyAgICBlbHNlIGlmIChjb21tYW5kTmFtZSA9PSAic2VsZWN0QWxsIikKKyAgICAgICAgW21f
cGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIHNlbGVjdEFsbF07CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUERGUGx1Z2luOjppc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBT
dHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIGlmIChjb21tYW5kTmFtZSA9PSAiY29weSIgJiYg
W21fcGRmTGF5ZXJDb250cm9sbGVyLmdldCgpIGN1cnJlbnRTZWxlY3Rpb25dKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgaWYgKGNvbW1hbmROYW1lID09ICJzZWxlY3RBbGwi
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQ
REZQbHVnaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IFNpbXBsZVBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7CisgICAgW21fcGRmTGF5
ZXJDb250cm9sbGVyLmdldCgpIHNldFNjcm9sbFBvc2l0aW9uOm9mZnNldF07Cit9CisKK3ZvaWQg
UERGUGx1Z2luOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoc2Nyb2xsYmFyID09IGhvcml6b250YWxT
Y3JvbGxiYXIoKSkKKyAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhckxheWVyLmdldCgpIHNl
dE5lZWRzRGlzcGxheV07CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIFttX3ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIuZ2V0KCkgc2V0TmVlZHNE
aXNwbGF5XTsKK30KKwordm9pZCBQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgW21fc2Nyb2xsQ29ybmVyTGF5ZXIuZ2V0KCkg
c2V0TmVlZHNEaXNwbGF5XTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoUERGS0lUX1BMVUdJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjZiOGE5M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5oCkBAIC0wLDAgKzEsMTk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTaW1wbGVQREZQbHVnaW5faAorI2RlZmlu
ZSBTaW1wbGVQREZQbHVnaW5faAorCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9TY3JvbGxhYmxlQXJlYS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordHlw
ZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVm
IHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZUpTVmFsdWUqIEpTVmFsdWVSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVj
dCBQbHVnaW5JbmZvOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGx1Z2luVmll
dzsKK2NsYXNzIFdlYkZyYW1lOworCitjbGFzcyBTaW1wbGVQREZQbHVnaW4gOiBwdWJsaWMgUGx1
Z2luLCBwcm90ZWN0ZWQgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNpbXBsZVBERlBsdWdpbj4gY3JlYXRlKFdlYkZyYW1lKik7CisgICAg
flNpbXBsZVBERlBsdWdpbigpOworCisgICAgc3RhdGljIFdlYkNvcmU6OlBsdWdpbkluZm8gcGx1
Z2luSW5mbygpOworCisgICAgLy8gSW4tcHJvY2VzcyBQREZWaWV3cyBkb24ndCBzdXBwb3J0IGFz
eW5jaHJvbm91cyBpbml0aWFsaXphdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNCZWluZ0FzeW5j
aHJvbm91c2x5SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgU2ltcGxlUERGUGx1Z2luKFdlYkZyYW1lKik7CisKKyAgICBXZWJG
cmFtZSogd2ViRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICB2b2lkIHNldFNp
emUoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKworICAgIFJldGFp
blB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3BkZkRvY3Vt
ZW50OyB9CisgICAgdm9pZCBzZXRQREZEb2N1bWVudChSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IGRv
Y3VtZW50KSB7IG1fcGRmRG9jdW1lbnQgPSBkb2N1bWVudDsgfQorCisgICAgV2ViQ29yZTo6SW50
U2l6ZSBwZGZEb2N1bWVudFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BkZkRvY3VtZW50U2l6ZTsg
fQorICAgIHZvaWQgc2V0UERGRG9jdW1lbnRTaXplKFdlYkNvcmU6OkludFNpemUgc2l6ZSkgeyBt
X3BkZkRvY3VtZW50U2l6ZSA9IHNpemU7IH0KKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGF0YVJlZj4gZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgLy8gUmVndWxh
ciBwbHVnLWlucyBkb24ndCBuZWVkIGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJh
cnMgdG8gZW1iZWRkaW5nIEZyYW1lVmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgorICAg
IFBsdWdpblZpZXcqIHBsdWdpblZpZXcoKTsKKyAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5W
aWV3KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihX
ZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lT
Y3JvbGxiYXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRBcmNoaXZlUmVzb3VyY2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGRmRG9jdW1lbnREaWRM
b2FkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQYWdlQm94ZXMoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwor
ICAgIHZvaWQgcGFpbnRDb250ZW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBwYWludENvbnRyb2xzKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7
CisgICAgCisgICAgdm9pZCBydW5TY3JpcHRzSW5QREZEb2N1bWVudCgpOworCisgICAgLy8gUGx1
Zy1pbiBtZXRob2RzCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVy
cyYpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdEluV2luZG93Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250cm9s
VGludHMoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Kik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gc25hcHNob3QoKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbHVnaW5MYXllcigpOworI2VuZGlmCisgICAgdmlydHVhbCBi
b29sIGlzVHJhbnNwYXJlbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgd2FudHNXaGVlbEV2ZW50cygp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENoYW5nZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVj
dCwgY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJiBwbHVnaW5Ub1Jvb3RWaWV3VHJhbnNm
b3JtKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOworICAgIHZpcnR1
YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVzdElEKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCB3YXNDYW5j
ZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHQodWludDY0X3Qg
cmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVh
bURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlm
aWVkVGltZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBoZWFkZXJzLCBj
b25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
RGlkUmVjZWl2ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQg
bGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtRGlkRmluaXNoTG9hZGluZyh1aW50NjRf
dCBzdHJlYW1JRCk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZhaWwodWludDY0X3Qgc3Ry
ZWFtSUQsIGJvb2wgd2FzQ2FuY2VsbGVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFudWFsU3RyZWFt
RGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OktVUkwmIHJlc3BvbnNlVVJMLCB1aW50
MzJfdCBzdHJlYW1MZW5ndGgsIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUsIGNvbnN0IFdURjo6
U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIGhlYWRlcnMsIGNvbnN0IFN0cmlu
ZyYgc3VnZ2VzdGVkRmlsZU5hbWUpOworICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7CisgICAgdmlydHVhbCB2
b2lkIG1hbnVhbFN0cmVhbURpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFu
dWFsU3RyZWFtRGlkRmFpbChib29sIHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVXaGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlTW91c2VFbnRlckV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlQ29udGV4dE1lbnVFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRF
dmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAgICB2aXJ0dWFsIE5Q
T2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2lu
ZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3
RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2luZG93VmlzaWJp
bGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzU2NhbGVGYWN0b3JD
aGFuZ2VkKGZsb2F0KTsKKyAgICB2aXJ0dWFsIHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRJZGVudGlmaWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNlbmRDb21wbGV4VGV4dElu
cHV0KGNvbnN0IFN0cmluZyYgdGV4dElucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJI
b3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKSBPVkVSUklERTsKKyNlbmRpZgorCisgICAgdmly
dHVhbCB2b2lkIHN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2VkKGJvb2wpOworICAgIHZpcnR1YWwgYm9v
bCBnZXRGb3JtVmFsdWUoU3RyaW5nJiBmb3JtVmFsdWUpOworICAgIHZpcnR1YWwgYm9vbCBoYW5k
bGVTY3JvbGwoV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uLCBXZWJDb3JlOjpTY3JvbGxHcmFudWxh
cml0eSk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxi
YXIoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KTsKKworICAgIHZpcnR1YWwgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVudEZvclBy
aW50aW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wZGZEb2N1bWVudDsgfQorCisgICAg
Ly8gU2Nyb2xsYWJsZUFyZWEgbWV0aG9kcy4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3go
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6
ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENv
cm5lclJlY3QoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2li
bGVIZWlnaHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFNpemUgY29udGVudHNT
aXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIGhv
cml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2hvcml6b250YWxT
Y3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LmdldCgpOyB9CisgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNDYW5CZUFjdGl2ZSgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVybiB0cnVl
LCBTY3JvbGxBbmltYXRvck1hYyB3aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2ZXIsIHdh
aXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1hdGUuCisgICAgdmlydHVhbCB2b2lkIHNjcm9s
bGJhclN0eWxlQ2hhbmdlZChpbnQgbmV3U3R5bGUsIGJvb2wgZm9yY2VVcGRhdGUpIE9WRVJSSURF
OworICAgIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBwYXJlbnRSZWN0
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBXZWJDb3JlOjpTY3JvbGxiYXIqLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QgT1ZFUlJJREU7CisgICAgCisgICAgdmlydHVhbCBib29s
IGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2FsZUZhY3Rvcigp
IE9WRVJSSURFOworICAgIAorcHJpdmF0ZToKKworICAgIEpTT2JqZWN0UmVmIG1ha2VKU1BERkRv
YyhKU0NvbnRleHRSZWYpOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGpzUERGRG9jUHJpbnQoSlND
b250ZXh0UmVmLCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbik7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKKworICAg
IFdlYkNvcmU6OktVUkwgbV9zb3VyY2VVUkw7CisKKyAgICBTdHJpbmcgbV9zdWdnZXN0ZWRGaWxl
bmFtZTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4gbV9kYXRhOworCisgICAgUmV0
YWluUHRyPFBERkRvY3VtZW50PiBtX3BkZkRvY3VtZW50OworICAgIFZlY3RvcjxXZWJDb3JlOjpJ
bnRSZWN0PiBtX3BhZ2VCb3hlczsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fcGRmRG9jdW1lbnRT
aXplOyAvLyBBbGwgcGFnZXMsIGluY2x1ZGluZyBnYXBzLgorCisgICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IG1fdmVydGljYWxTY3JvbGxiYXI7CisKKyAgICBXZWJGcmFtZSogbV9mcmFtZTsK
KworICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFNpbXBsZVBERlBsdWdpbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBsdWdpbi5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvU2ltcGxlUERGUGx1Z2luLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTczYjIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1NpbXBsZVBERlBs
dWdpbi5tbQpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBv
cnQgImNvbmZpZy5oIgorI2ltcG9ydCAiU2ltcGxlUERGUGx1Z2luLmgiCisKKyNpbXBvcnQgIlBE
RktpdEltcG9ydHMuaCIKKyNpbXBvcnQgIlBsdWdpblZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2ltcG9ydCAiV2ViRXZlbnQuaCIKKyNpbXBvcnQgIldlYkV2ZW50Q29udmVy
c2lvbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4K
KyNpbXBvcnQgPFBERktpdC9QREZLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQXJjaGl2ZVJlc291
cmNlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVFRQSGVh
ZGVyTWFwLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9s
bEFuaW1hdG9yLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworc3RhdGljIHZvaWQg
YXBwZW5kVmFsdWVzSW5QREZOYW1lU3VidHJlZVRvVmVjdG9yKENHUERGRGljdGlvbmFyeVJlZiBz
dWJ0cmVlLCBWZWN0b3I8Q0dQREZPYmplY3RSZWY+JiB2YWx1ZXMpCit7CisgICAgQ0dQREZBcnJh
eVJlZiBuYW1lczsKKyAgICBpZiAoQ0dQREZEaWN0aW9uYXJ5R2V0QXJyYXkoc3VidHJlZSwgIk5h
bWVzIiwgJm5hbWVzKSkgeworICAgICAgICBzaXplX3QgbmFtZUNvdW50ID0gQ0dQREZBcnJheUdl
dENvdW50KG5hbWVzKSAvIDI7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZUNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIENHUERGT2JqZWN0UmVmIG9iamVjdDsKKyAgICAgICAg
ICAgIENHUERGQXJyYXlHZXRPYmplY3QobmFtZXMsIDIgKiBpICsgMSwgJm9iamVjdCk7CisgICAg
ICAgICAgICB2YWx1ZXMuYXBwZW5kKG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIENHUERGQXJyYXlSZWYga2lkczsKKyAgICBpZiAoIUNHUERGRGljdGlv
bmFyeUdldEFycmF5KHN1YnRyZWUsICJLaWRzIiwgJmtpZHMpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzaXplX3Qga2lkQ291bnQgPSBDR1BERkFycmF5R2V0Q291bnQoa2lkcyk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBraWRDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlv
bmFyeVJlZiBraWQ7CisgICAgICAgIGlmICghQ0dQREZBcnJheUdldERpY3Rpb25hcnkoa2lkcywg
aSwgJmtpZCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXBwZW5kVmFsdWVzSW5Q
REZOYW1lU3VidHJlZVRvVmVjdG9yKGtpZCwgdmFsdWVzKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGdldEFsbFZhbHVlc0luUERGTmFtZVRyZWUoQ0dQREZEaWN0aW9uYXJ5UmVmIHRyZWUsIFZl
Y3RvcjxDR1BERk9iamVjdFJlZj4mIGFsbFZhbHVlcykKK3sKKyAgICBhcHBlbmRWYWx1ZXNJblBE
Rk5hbWVTdWJ0cmVlVG9WZWN0b3IodHJlZSwgYWxsVmFsdWVzKTsKK30KKworc3RhdGljIHZvaWQg
Z2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoQ0dQREZEb2N1bWVudFJlZiBwZGZEb2N1bWVudCwg
VmVjdG9yPFJldGFpblB0cjxDRlN0cmluZ1JlZj4gPiYgc2NyaXB0cykKK3sKKyAgICBpZiAoIXBk
ZkRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDR1BERkRpY3Rpb25hcnlSZWYgcGRm
Q2F0YWxvZyA9IENHUERGRG9jdW1lbnRHZXRDYXRhbG9nKHBkZkRvY3VtZW50KTsKKyAgICBpZiAo
IXBkZkNhdGFsb2cpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdldCB0aGUgZGljdGlvbmFy
eSBvZiBhbGwgZG9jdW1lbnQtbGV2ZWwgbmFtZSB0cmVlcy4KKyAgICBDR1BERkRpY3Rpb25hcnlS
ZWYgbmFtZXNEaWN0aW9uYXJ5OworICAgIGlmICghQ0dQREZEaWN0aW9uYXJ5R2V0RGljdGlvbmFy
eShwZGZDYXRhbG9nLCAiTmFtZXMiLCAmbmFtZXNEaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gR2V0IHRoZSBkb2N1bWVudC1sZXZlbCAiSmF2YVNjcmlwdCIgbmFtZSB0cmVl
LgorICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0TmFtZVRyZWU7CisgICAgaWYgKCFD
R1BERkRpY3Rpb25hcnlHZXREaWN0aW9uYXJ5KG5hbWVzRGljdGlvbmFyeSwgIkphdmFTY3JpcHQi
LCAmamF2YVNjcmlwdE5hbWVUcmVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIG5h
bWVzIGFyZSBhcmJpdHJhcnkuIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlcy4K
KyAgICBWZWN0b3I8Q0dQREZPYmplY3RSZWY+IG9iamVjdHM7CisgICAgZ2V0QWxsVmFsdWVzSW5Q
REZOYW1lVHJlZShqYXZhU2NyaXB0TmFtZVRyZWUsIG9iamVjdHMpOworICAgIHNpemVfdCBvYmpl
Y3RDb3VudCA9IG9iamVjdHMuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RDb3VudDsgKytpKSB7CisgICAgICAgIENHUERGRGljdGlvbmFyeVJlZiBqYXZhU2NyaXB0
QWN0aW9uOworICAgICAgICBpZiAoIUNHUERGT2JqZWN0R2V0VmFsdWUocmVpbnRlcnByZXRfY2Fz
dDxDR1BERk9iamVjdFJlZj4ob2JqZWN0c1tpXSksIGtDR1BERk9iamVjdFR5cGVEaWN0aW9uYXJ5
LCAmamF2YVNjcmlwdEFjdGlvbikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAv
LyBBIEphdmFTY3JpcHQgYWN0aW9uIG11c3QgaGF2ZSBhbiBhY3Rpb24gdHlwZSBvZiAiSmF2YVNj
cmlwdCIuCisgICAgICAgIGNvbnN0IGNoYXIqIGFjdGlvblR5cGU7CisgICAgICAgIGlmICghQ0dQ
REZEaWN0aW9uYXJ5R2V0TmFtZShqYXZhU2NyaXB0QWN0aW9uLCAiUyIsICZhY3Rpb25UeXBlKSB8
fCBzdHJjbXAoYWN0aW9uVHlwZSwgIkphdmFTY3JpcHQiKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIGNvbnN0IFVJbnQ4KiBieXRlcyA9IDA7CisgICAgICAgIENGSW5kZXggbGVu
Z3RoOworICAgICAgICBDR1BERlN0cmVhbVJlZiBzdHJlYW07CisgICAgICAgIENHUERGU3RyaW5n
UmVmIHN0cmluZzsKKyAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICAgICAg
aWYgKENHUERGRGljdGlvbmFyeUdldFN0cmVhbShqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3Ry
ZWFtKSkgeworICAgICAgICAgICAgQ0dQREZEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAg
IGRhdGEuYWRvcHRDRihDR1BERlN0cmVhbUNvcHlEYXRhKHN0cmVhbSwgJmZvcm1hdCkpOworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgYnl0ZXMgPSBDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpOworICAgICAgICAgICAgbGVu
Z3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKENH
UERGRGljdGlvbmFyeUdldFN0cmluZyhqYXZhU2NyaXB0QWN0aW9uLCAiSlMiLCAmc3RyaW5nKSkg
eworICAgICAgICAgICAgYnl0ZXMgPSBDR1BERlN0cmluZ0dldEJ5dGVQdHIoc3RyaW5nKTsKKyAg
ICAgICAgICAgIGxlbmd0aCA9IENHUERGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFieXRlcykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IENGU3RyaW5nRW5jb2RpbmcgZW5jb2RpbmcgPSAobGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PSAw
eEZFICYmIGJ5dGVzWzFdID09IDB4RkYpID8ga0NGU3RyaW5nRW5jb2RpbmdVbmljb2RlIDoga0NG
U3RyaW5nRW5jb2RpbmdVVEY4OworICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlw
dChBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhCeXRlcyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBi
eXRlcywgbGVuZ3RoLCBlbmNvZGluZywgdHJ1ZSkpOworICAgICAgICBpZiAoIXNjcmlwdCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHNjcmlwdCk7Cisg
ICAgfQorfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgdWludDY0X3QgcGRmRG9jdW1l
bnRSZXF1ZXN0SUQgPSAxOyAvLyBQbHVnaW5Db250cm9sbGVyIHN1cHBvcnRzIGxvYWRpbmcgbXVs
dGlwbGUgc3RyZWFtcywgYnV0IHdlIG9ubHkgbmVlZCBvbmUgZm9yIFBERi4KKworY29uc3QgaW50
IGd1dHRlckhlaWdodCA9IDEwOworY29uc3QgaW50IHNoYWRvd09mZnNldFggPSAwOworY29uc3Qg
aW50IHNoYWRvd09mZnNldFkgPSAtMjsKK2NvbnN0IGludCBzaGFkb3dTaXplID0gNzsKKworUGFz
c1JlZlB0cjxTaW1wbGVQREZQbHVnaW4+IFNpbXBsZVBERlBsdWdpbjo6Y3JlYXRlKFdlYkZyYW1l
KiBmcmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNpbXBsZVBERlBsdWdpbihmcmFt
ZSkpOworfQorCitTaW1wbGVQREZQbHVnaW46OlNpbXBsZVBERlBsdWdpbihXZWJGcmFtZSogZnJh
bWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitTaW1wbGVQREZQbHVnaW46On5TaW1w
bGVQREZQbHVnaW4oKQoreworfQorCitQbHVnaW5JbmZvIFNpbXBsZVBERlBsdWdpbjo6cGx1Z2lu
SW5mbygpCit7CisgICAgUGx1Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9IGJ1aWx0SW5Q
REZQbHVnaW5OYW1lKCk7CisKKyAgICBNaW1lQ2xhc3NJbmZvIG1pbWVDbGFzc0luZm87CisgICAg
bWltZUNsYXNzSW5mby50eXBlID0iYXBwbGljYXRpb24vcGRmIjsKKyAgICBtaW1lQ2xhc3NJbmZv
LmRlc2MgPSBwZGZEb2N1bWVudFR5cGVEZXNjcmlwdGlvbigpOworICAgIG1pbWVDbGFzc0luZm8u
ZXh0ZW5zaW9ucy5hcHBlbmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQobWltZUNs
YXNzSW5mbyk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIFNpbXBsZVBERlBs
dWdpbjo6cGx1Z2luVmlldygpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpblZpZXcq
Pihjb250cm9sbGVyKCkpOworfQorCitjb25zdCBQbHVnaW5WaWV3KiBTaW1wbGVQREZQbHVnaW46
OnBsdWdpblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQbHVn
aW5WaWV3Kj4oY29udHJvbGxlcigpKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnVwZGF0
ZVNjcm9sbGJhcnMoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYmFycyA9IG1faG9yaXpvbnRhbFNj
cm9sbGJhciB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNj
cm9sbGJhcikgeworICAgICAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9wZGZEb2N1bWVudFNp
emUud2lkdGgoKSkKKyAgICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisgICAgfSBlbHNlIGlmIChtX3NpemUud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXpl
LndpZHRoKCkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7
CisgICAgICAgIGlmIChtX3NpemUuaGVpZ2h0KCkgPj0gbV9wZGZEb2N1bWVudFNpemUuaGVpZ2h0
KCkpCisgICAgICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAg
ICB9IGVsc2UgaWYgKG1fc2l6ZS5oZWlnaHQoKSA8IG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgp
KQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1faG9y
aXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT53aWR0aCgpIDogMDsKKworICAgIGludCBwYWdlU3RlcCA9IG1fcGFnZUJveGVzLmlzRW1wdHko
KSA/IDAgOiBtX3BhZ2VCb3hlc1swXS5oZWlnaHQoKTsKKworICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS53aWR0aCgpIC0gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmlldygpLT55KCkgKyBtX3Np
emUuaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLCBtX3NpemUud2lk
dGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xsYmFyUmVjdC5jb250cmFjdChtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIGlmIChtX3ZlcnRp
Y2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKG1fc2l6ZS5oZWlnaHQoKSAtIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1lbnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50
UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3QocGx1Z2luVmlldygpLT54KCkgKyBtX3NpemUud2lk
dGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIHBsdWdpblZpZXcoKS0+eSgpLCBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAg
aWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNjcm9sbGJhclJlY3QuY29u
dHJhY3QoMCwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChzY3JvbGxiYXJSZWN0KTsKKyAgICB9CisgICAg
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygp
OworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc1Nj
cm9sbGJhcnMgPSBtX2hvcml6b250YWxTY3JvbGxiYXIgfHwgbV92ZXJ0aWNhbFNjcm9sbGJhcjsK
KyAgICBpZiAoaGFkU2Nyb2xsYmFycyAhPSBoYXNTY3JvbGxiYXJzKSB7CisgICAgICAgIGlmICho
YXNTY3JvbGxiYXJzKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKKworICAgICAgICBmcmFtZVZpZXctPnNldE5lZWRzTGF5b3V0KCk7Cisg
ICAgfQorfQorCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2ltcGxlUERGUGx1Z2luOjpjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRy
PFNjcm9sbGJhcj4gd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhp
cywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIGlmIChvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KHdpZGdldC5nZXQoKSk7CisgICAgZWxzZSAKKyAgICAgICAgZGlkQWRkVmVydGljYWxTY3JvbGxi
YXIod2lkZ2V0LmdldCgpKTsKKyAgICBwbHVnaW5WaWV3KCktPmZyYW1lKCktPnZpZXcoKS0+YWRk
Q2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKK30KKwor
dm9pZCBTaW1wbGVQREZQbHVnaW46OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXIg
OiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKKyAgICBl
bHNlCisgICAgICAgIHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCkp
OworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyLT5k
aXNjb25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7CisgICAgc2Nyb2xsYmFyID0gMDsKK30KKwor
dm9pZCBTaW1wbGVQREZQbHVnaW46OmFkZEFyY2hpdmVSZXNvdXJjZSgpCit7CisgICAgLy8gRklY
TUU6IEl0J3MgYSBoYWNrIHRvIGZvcmNlIGFkZCBhIHJlc291cmNlIHRvIERvY3VtZW50TG9hZGVy
LiBQREYgZG9jdW1lbnRzIHNob3VsZCBqdXN0IGJlIGZldGNoZWQgYXMgQ2FjaGVkUmVzb3VyY2Vz
LgorCisgICAgLy8gQWRkIGp1c3QgZW5vdWdoIGRhdGEgZm9yIGNvbnRleHQgbWVudSBoYW5kbGlu
ZyBhbmQgd2ViIGFyY2hpdmVzIHRvIHdvcmsuCisgICAgUmVzb3VyY2VSZXNwb25zZSBzeW50aGVz
aXplZFJlc3BvbnNlOworICAgIHN5bnRoZXNpemVkUmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5h
bWUobV9zdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRVUkwo
bV9zb3VyY2VVUkwpOyAvLyBOZWVkcyB0byBtYXRjaCB0aGUgSGl0VGVzdFJlc3VsdDo6YWJzb2x1
dGVQREZVUkwuCisgICAgc3ludGhlc2l6ZWRSZXNwb25zZS5zZXRNaW1lVHlwZSgiYXBwbGljYXRp
b24vcGRmIik7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSA9IEFyY2hp
dmVSZXNvdXJjZTo6Y3JlYXRlKFNoYXJlZEJ1ZmZlcjo6d3JhcENGRGF0YShtX2RhdGEuZ2V0KCkp
LCBtX3NvdXJjZVVSTCwgImFwcGxpY2F0aW9uL3BkZiIsIFN0cmluZygpLCBTdHJpbmcoKSwgc3lu
dGhlc2l6ZWRSZXNwb25zZSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgpLT5kb2N1bWVudCgp
LT5sb2FkZXIoKS0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlLnJlbGVhc2UoKSk7Cit9CisK
K3N0YXRpYyB2b2lkIGpzUERGRG9jSW5pdGlhbGl6ZShKU0NvbnRleHRSZWYgY3R4LCBKU09iamVj
dFJlZiBvYmplY3QpCit7CisgICAgU2ltcGxlUERGUGx1Z2luKiBwZGZWaWV3ID0gc3RhdGljX2Nh
c3Q8U2ltcGxlUERGUGx1Z2luKj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHBk
ZlZpZXctPnJlZigpOworfQorCitzdGF0aWMgdm9pZCBqc1BERkRvY0ZpbmFsaXplKEpTT2JqZWN0
UmVmIG9iamVjdCkKK3sKKyAgICBTaW1wbGVQREZQbHVnaW4qIHBkZlZpZXcgPSBzdGF0aWNfY2Fz
dDxTaW1wbGVQREZQbHVnaW4qPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcGRm
Vmlldy0+ZGVyZWYoKTsKK30KKworSlNWYWx1ZVJlZiBTaW1wbGVQREZQbHVnaW46OmpzUERGRG9j
UHJpbnQoSlNDb250ZXh0UmVmIGN0eCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgU2ltcGxlUERGUGx1Z2luKiBw
ZGZWaWV3ID0gc3RhdGljX2Nhc3Q8U2ltcGxlUERGUGx1Z2luKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICAKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBwZGZWaWV3LT5tX2Zy
YW1lOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworICAgIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZS0+Y29yZUZyYW1lKCk7
CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjdHgpOworICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworICAg
IAorICAgIHBhZ2UtPmNocm9tZSgpLT5wcmludChjb3JlRnJhbWUpOworICAgIAorICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjdHgpOworfQorCitKU09iamVjdFJlZiBTaW1wbGVQREZQ
bHVnaW46Om1ha2VKU1BERkRvYyhKU0NvbnRleHRSZWYgY3R4KQoreworICAgIHN0YXRpYyBKU1N0
YXRpY0Z1bmN0aW9uIGpzUERGRG9jU3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgICAgIHsgInBy
aW50IiwganNQREZEb2NQcmludCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7IDAsIDAsIDAgfSwKKyAgICB9
OworICAgIAorICAgIHN0YXRpYyBKU0NsYXNzRGVmaW5pdGlvbiBqc1BERkRvY0NsYXNzRGVmaW5p
dGlvbiA9IHsKKyAgICAgICAgMCwKKyAgICAgICAga0pTQ2xhc3NBdHRyaWJ1dGVOb25lLAorICAg
ICAgICAiRG9jIiwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAganNQREZEb2NTdGF0
aWNGdW5jdGlvbnMsCisgICAgICAgIGpzUERGRG9jSW5pdGlhbGl6ZSwganNQREZEb2NGaW5hbGl6
ZSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorICAgIH07CisgICAgCisgICAgc3RhdGljIEpT
Q2xhc3NSZWYganNQREZEb2NDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmpzUERGRG9jQ2xhc3NEZWZp
bml0aW9uKTsKKyAgICAKKyAgICByZXR1cm4gSlNPYmplY3RNYWtlKGN0eCwganNQREZEb2NDbGFz
cywgdGhpcyk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpwZGZEb2N1bWVudERpZExvYWQo
KQoreworICAgIGFkZEFyY2hpdmVSZXNvdXJjZSgpOworCisgICAgbV9wZGZEb2N1bWVudC5hZG9w
dE5TKFtbcGRmRG9jdW1lbnRDbGFzcygpIGFsbG9jXSBpbml0V2l0aERhdGE6KE5TRGF0YSAqKW1f
ZGF0YS5nZXQoKV0pOworCisgICAgY2FsY3VsYXRlU2l6ZXMoKTsKKyAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7CisKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7CisKKyAgICBydW5TY3JpcHRzSW5QREZEb2N1
bWVudCgpOworfQorICAgIAordm9pZCBTaW1wbGVQREZQbHVnaW46OnJ1blNjcmlwdHNJblBERkRv
Y3VtZW50KCkKK3sKKyAgICBWZWN0b3I8UmV0YWluUHRyPENGU3RyaW5nUmVmPiA+IHNjcmlwdHM7
CisgICAgZ2V0QWxsU2NyaXB0c0luUERGRG9jdW1lbnQoW21fcGRmRG9jdW1lbnQuZ2V0KCkgZG9j
dW1lbnRSZWZdLCBzY3JpcHRzKTsKKworICAgIHNpemVfdCBzY3JpcHRDb3VudCA9IHNjcmlwdHMu
c2l6ZSgpOworICAgIGlmICghc2NyaXB0Q291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEpT
R2xvYmFsQ29udGV4dFJlZiBjdHggPSBKU0dsb2JhbENvbnRleHRDcmVhdGUoMCk7CisgICAgSlNP
YmplY3RSZWYganNQREZEb2MgPSBtYWtlSlNQREZEb2MoY3R4KTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2NyaXB0Q291bnQ7ICsraSkgeworICAgICAgICBKU1N0cmluZ1JlZiBzY3Jp
cHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhzY3JpcHRzW2ldLmdldCgpKTsKKyAgICAg
ICAgSlNFdmFsdWF0ZVNjcmlwdChjdHgsIHNjcmlwdCwganNQREZEb2MsIDAsIDAsIDApOworICAg
ICAgICBKU1N0cmluZ1JlbGVhc2Uoc2NyaXB0KTsKKyAgICB9CisKKyAgICBKU0dsb2JhbENvbnRl
eHRSZWxlYXNlKGN0eCk7Cit9CisgICAgCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6Y29tcHV0ZVBh
Z2VCb3hlcygpCit7CisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENHUERGRG9jdW1lbnRHZXROdW1i
ZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgeworICAgICAgICBDR1BERlBhZ2VSZWYg
cGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3Vt
ZW50UmVmXSwgaSArIDEpOworICAgICAgICBBU1NFUlQocGRmUGFnZSk7CisgICAgICAgIAorICAg
ICAgICBDR1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZDcm9w
Qm94KTsKKyAgICAgICAgaWYgKENHUmVjdElzRW1wdHkoYm94KSkKKyAgICAgICAgICAgIGJveCA9
IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwga0NHUERGTWVkaWFCb3gpOworICAgICAgICBt
X3BhZ2VCb3hlcy5hcHBlbmQoSW50UmVjdChib3gpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2ltcGxl
UERGUGx1Z2luOjpjYWxjdWxhdGVTaXplcygpCit7CisgICAgc2l6ZV90IHBhZ2VDb3VudCA9IENH
UERGRG9jdW1lbnRHZXROdW1iZXJPZlBhZ2VzKFttX3BkZkRvY3VtZW50LmdldCgpIGRvY3VtZW50
UmVmXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlQ291bnQ7ICsraSkgeworICAg
ICAgICBDR1BERlBhZ2VSZWYgcGRmUGFnZSA9IENHUERGRG9jdW1lbnRHZXRQYWdlKFttX3BkZkRv
Y3VtZW50LmdldCgpIGRvY3VtZW50UmVmXSwgaSArIDEpOworICAgICAgICBBU1NFUlQocGRmUGFn
ZSk7CisKKyAgICAgICAgQ0dSZWN0IGJveCA9IENHUERGUGFnZUdldEJveFJlY3QocGRmUGFnZSwg
a0NHUERGQ3JvcEJveCk7CisgICAgICAgIGlmIChDR1JlY3RJc0VtcHR5KGJveCkpCisgICAgICAg
ICAgICBib3ggPSBDR1BERlBhZ2VHZXRCb3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsK
KyAgICAgICAgbV9wYWdlQm94ZXMuYXBwZW5kKEludFJlY3QoYm94KSk7CisgICAgICAgIG1fcGRm
RG9jdW1lbnRTaXplLnNldFdpZHRoKG1heChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpLCBzdGF0
aWNfY2FzdDxpbnQ+KGJveC5zaXplLndpZHRoKSkpOworICAgICAgICBtX3BkZkRvY3VtZW50U2l6
ZS5leHBhbmQoMCwgYm94LnNpemUuaGVpZ2h0KTsKKyAgICB9CisgICAgbV9wZGZEb2N1bWVudFNp
emUuZXhwYW5kKDAsIGd1dHRlckhlaWdodCAqIChtX3BhZ2VCb3hlcy5zaXplKCkgLSAxKSk7Cit9
CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCit7CisgICAgLy8gTG9hZCB0aGUgc3JjIFVSTCBpZiBuZWVkZWQuCisgICAgbV9z
b3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnVybDsKKyAgICBpZiAoIXBhcmFtZXRlcnMuc2hvdWxkVXNl
TWFudWFsTG9hZGVyICYmICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRy
b2xsZXIoKS0+bG9hZFVSTChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMu
dXJsLnN0cmluZygpLCBTdHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4o
KSwgZmFsc2UpOworCisgICAgY29udHJvbGxlcigpLT5kaWRJbml0aWFsaXplUGx1Z2luKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpkZXN0cm95KCkKK3sK
KyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBt
X2ZyYW1lLT5jb3JlRnJhbWUoKS0+dmlldygpKQorICAgICAgICAgICAgZnJhbWVWaWV3LT5yZW1v
dmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICB9CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxi
YXIpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBjb250ZW50
QXJlYVdpbGxQYWludCgpOworCisgICAgcGFpbnRCYWNrZ3JvdW5kKGdyYXBoaWNzQ29udGV4dCwg
ZGlydHlSZWN0KTsKKworICAgIGlmICghbV9wZGZEb2N1bWVudCkgLy8gRklYTUU6IERyYXcgbG9h
ZGluZyBwcm9ncmVzcy4KKyAgICAgICAgcmV0dXJuOworCisgICAgcGFpbnRDb250ZW50KGdyYXBo
aWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBwYWludENvbnRyb2xzKGdyYXBoaWNzQ29udGV4
dCwgZGlydHlSZWN0KTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnBhaW50QmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KQoreworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqZ3JhcGhp
Y3NDb250ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6Z3Jh
eSwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChk
aXJ0eVJlY3QpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cGFpbnRDb250ZW50KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7
CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRl
eHQpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91
bGRBbnRpYWxpYXModHJ1ZSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTaG91bGRTbW9vdGhG
b250cyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihDb2xvcjo6d2hp
dGUsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwKGRp
cnR5UmVjdCk7CisgICAgSW50UmVjdCBjb250ZW50UmVjdChkaXJ0eVJlY3QpOworICAgIGNvbnRl
bnRSZWN0Lm1vdmVCeShJbnRQb2ludChtX3Njcm9sbE9mZnNldCkpOworICAgIGdyYXBoaWNzQ29u
dGV4dC0+dHJhbnNsYXRlKC1tX3Njcm9sbE9mZnNldC53aWR0aCgpLCAtbV9zY3JvbGxPZmZzZXQu
aGVpZ2h0KCkpOworCisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworCisg
ICAgaW50IHBhZ2VUb3AgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYWdlQm94
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSW50UmVjdCBwYWdlQm94ID0gbV9wYWdlQm94ZXNb
aV07CisgICAgICAgIGZsb2F0IGV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWCA9IG1heChyb3VuZGYo
KG1fc2l6ZS53aWR0aCgpIC0gcGFnZUJveC53aWR0aCgpKSAvIDIuMGYpLCAwLjBmKTsKKyAgICAg
ICAgZmxvYXQgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZID0gKG1fcGFnZUJveGVzLnNpemUoKSA9
PSAxKSA/IG1heChyb3VuZGYoKG1fc2l6ZS5oZWlnaHQoKSAtIHBhZ2VCb3guaGVpZ2h0KCkgKyBz
aGFkb3dPZmZzZXRZKSAvIDIuMGYpLCAwLjBmKSA6IDA7CisKKyAgICAgICAgaWYgKHBhZ2VUb3Ag
PiBjb250ZW50UmVjdC5tYXhZKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHBh
Z2VUb3AgKyBwYWdlQm94LmhlaWdodCgpICsgZXh0cmFPZmZzZXRGb3JDZW50ZXJpbmdZICsgZ3V0
dGVySGVpZ2h0ID49IGNvbnRlbnRSZWN0LnkoKSkgeworICAgICAgICAgICAgQ0dQREZQYWdlUmVm
IHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0UGFnZShbbV9wZGZEb2N1bWVudC5nZXQoKSBkb2N1
bWVudFJlZl0sIGkgKyAxKTsKKworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZShleHRyYU9mZnNldEZvckNl
bnRlcmluZ1ggLSBwYWdlQm94LngoKSwgLWV4dHJhT2Zmc2V0Rm9yQ2VudGVyaW5nWSAtIHBhZ2VC
b3gueSgpIC0gcGFnZUJveC5oZWlnaHQoKSk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0U2hhZG93KEZsb2F0U2l6ZShzaGFkb3dPZmZzZXRYLCBzaGFkb3dPZmZzZXRZKSwgc2hh
ZG93U2l6ZSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QocGFnZUJveCk7CisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmNsZWFyU2hhZG93KCk7CisKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
Y2xpcChwYWdlQm94KTsKKworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BERlBhZ2UoY29udGV4
dCwgcGRmUGFnZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAg
ICAgICAgfQorICAgICAgICBwYWdlVG9wICs9IHBhZ2VCb3guaGVpZ2h0KCkgKyBndXR0ZXJIZWln
aHQ7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtcGFnZUJveC5o
ZWlnaHQoKSAtIGd1dHRlckhlaWdodCk7CisgICAgfQorfQorCit2b2lkIFNpbXBsZVBERlBsdWdp
bjo6cGFpbnRDb250cm9scyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKCpncmFwaGljc0NvbnRleHQpOworICAgICAgICBJbnRSZWN0IHNj
cm9sbGJhckRpcnR5UmVjdCA9IGRpcnR5UmVjdDsKKyAgICAgICAgc2Nyb2xsYmFyRGlydHlSZWN0
Lm1vdmVCeShwbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLmxvY2F0aW9uKCkpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtcGx1Z2luVmlldygpLT5mcmFtZVJlY3QoKS54KCks
IC1wbHVnaW5WaWV3KCktPmZyYW1lUmVjdCgpLnkoKSk7CisKKyAgICAgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+cGFpbnQo
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworCisgICAgICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+cGFpbnQo
Z3JhcGhpY3NDb250ZXh0LCBzY3JvbGxiYXJEaXJ0eVJlY3QpOworICAgIH0KKworICAgIEludFJl
Y3QgZGlydHlDb3JuZXJSZWN0ID0gaW50ZXJzZWN0aW9uKHNjcm9sbENvcm5lclJlY3QoKSwgZGly
dHlSZWN0KTsKKyAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS0+cGFpbnRTY3JvbGxDb3JuZXIo
MCwgZ3JhcGhpY3NDb250ZXh0LCBkaXJ0eUNvcm5lclJlY3QpOworfQorCit2b2lkIFNpbXBsZVBE
RlBsdWdpbjo6dXBkYXRlQ29udHJvbFRpbnRzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0KQoreworICAgIEFTU0VSVChncmFwaGljc0NvbnRleHQtPnVwZGF0aW5nQ29udHJvbFRpbnRz
KCkpOworCisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIp
CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKyAgICBpbnZhbGlk
YXRlU2Nyb2xsQ29ybmVyKHNjcm9sbENvcm5lclJlY3QoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBTaW1wbGVQREZQbHVnaW46OnNuYXBzaG90KCkKK3sKKyAgICByZXR1cm4g
MDsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK1BsYXRmb3JtTGF5ZXIqIFNpbXBsZVBERlBsdWdp
bjo6cGx1Z2luTGF5ZXIoKQoreworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKworYm9vbCBT
aW1wbGVQREZQbHVnaW46OmlzVHJhbnNwYXJlbnQoKQoreworICAgIC8vIFRoaXMgc2hvdWxkIG5l
dmVyIGJlIGNhbGxlZCBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjp3YW50
c1doZWVsRXZlbnRzKCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaW1wbGVQREZQ
bHVnaW46Omdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBsdWdpblRvUm9vdFZpZXdUcmFu
c2Zvcm0pCit7CisgICAgaWYgKG1fc2l6ZSA9PSBzaXplKSB7CisgICAgICAgIC8vIE5vdGhpbmcg
dG8gZG8uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NpemUgPSBzaXplOworICAg
IHVwZGF0ZVNjcm9sbGJhcnMoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OnZpc2liaWxp
dHlEaWRDaGFuZ2UoKQoreworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZnJhbWVEaWRGaW5p
c2hMb2FkaW5nKHVpbnQ2NF90KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIFNpbXBsZVBERlBsdWdpbjo6ZnJhbWVEaWRGYWlsKHVpbnQ2NF90LCBib29sKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6ZGlkRXZh
bHVhdGVKYXZhU2NyaXB0KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzdHJlYW1EaWRS
ZWNlaXZlUmVzcG9uc2UodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IEtVUkwmLCB1aW50MzJfdCwg
dWludDMyX3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQg
PT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9zdWdnZXN0ZWRGaWxlbmFtZSA9IHN1
Z2dlc3RlZEZpbGVuYW1lOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAordm9pZCBTaW1wbGVQREZQbHVnaW46OnN0cmVhbURpZFJlY2VpdmVEYXRhKHVpbnQ2
NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKHN0cmVhbUlELCBzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisK
KyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9kYXRhLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgU2lt
cGxlUERGUGx1Z2luOjpzdHJlYW1EaWRGaW5pc2hMb2FkaW5nKHVpbnQ2NF90IHN0cmVhbUlEKQor
eworICAgIEFTU0VSVF9VTlVTRUQoc3RyZWFtSUQsIHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVx
dWVzdElEKTsKKworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgpOworfQorCit2b2lkIFNpbXBsZVBE
RlBsdWdpbjo6c3RyZWFtRGlkRmFpbCh1aW50NjRfdCBzdHJlYW1JRCwgYm9vbCB3YXNDYW5jZWxs
ZWQpCit7CisgICAgQVNTRVJUX1VOVVNFRChzdHJlYW1JRCwgc3RyZWFtSUQgPT0gcGRmRG9jdW1l
bnRSZXF1ZXN0SUQpOworCisgICAgbV9kYXRhLmNsZWFyKCk7Cit9CisKK3ZvaWQgU2ltcGxlUERG
UGx1Z2luOjptYW51YWxTdHJlYW1EaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgS1VSTCYgcmVzcG9u
c2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgIHVpbnQzMl90IGxhc3RNb2RpZmllZFRpbWUs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgaGVhZGVycywgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBtX3N1Z2dlc3RlZEZpbGVuYW1lID0gc3Vn
Z2VzdGVkRmlsZW5hbWU7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjptYW51YWxTdHJlYW1E
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCkKK3sKKyAgICBpZiAo
IW1fZGF0YSkKKyAgICAgICAgbV9kYXRhLmFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGEuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1
Z2luOjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBwZGZEb2N1bWVudERp
ZExvYWQoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46Om1hbnVhbFN0cmVhbURpZEZhaWwo
Ym9vbCkKK3sKKyAgICBtX2RhdGEuY2xlYXIoKTsKK30KKworYm9vbCBTaW1wbGVQREZQbHVnaW46
OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgc3dp
dGNoIChldmVudC50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZU1vdmU6CisgICAg
ICAgIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YWxzbyBub3RpZnkgc2Nyb2xsYmFyIHRvIHNob3cgaG92ZXIgZWZmZWN0LiBTaG91bGQgYWxzbyBz
ZW5kIG1vdXNlRXhpdGVkIHRvIGhpZGUgaXQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2Vi
RXZlbnQ6Ok1vdXNlRG93bjogeworICAgICAgICAvLyBSZXR1cm5pbmcgZmFsc2UgYXMgd2lsbCBt
YWtlIEV2ZW50SGFuZGxlciB1bmZvY3VzIHRoZSBwbHVnLWluLCB3aGljaCBpcyBhcHByb3ByaWF0
ZSB3aGVuIGNsaWNraW5nIHNjcm9sbGJhcnMuCisgICAgICAgIC8vIElkZWFsbHksIHdlIHdvdWxk
bid0IGNoYW5nZSBmb2N1cyBhdCBhbGwsIGJ1dCBQbHVnaW5WaWV3IGFscmVhZHkgZGlkIHRoYXQg
Zm9yIHVzLgorICAgICAgICAvLyBXaGVuIHN1cHBvcnQgZm9yIFBERiBmb3JtcyBpcyBhZGRlZCwg
d2UnbGwgbmVlZCB0byBhY3R1YWxseSBmb2N1cyB0aGUgcGx1Zy1pbiB3aGVuIGNsaWNraW5nIGlu
IGEgZm9ybS4KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2ViRXZlbnQ6Ok1vdXNl
VXA6IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQgPSBwbGF0Zm9y
bShldmVudCk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPm1vdXNlVXAocGxhdGZvcm1FdmVudCk7CisgICAgICAg
IGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+bW91c2VVcChwbGF0Zm9ybUV2ZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJX
aGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1FdmVu
dCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnQocGxhdGZvcm1FdmVudCk7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5k
bGVNb3VzZUVudGVyRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7CisgICAgbW91c2VFbnRl
cmVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERG
UGx1Z2luOjpoYW5kbGVNb3VzZUxlYXZlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYpCit7Cisg
ICAgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZUNvbnRleHRNZW51RXZlbnQoY29uc3QgV2ViTW91c2VF
dmVudCYpCit7CisgICAgLy8gVXNlIGRlZmF1bHQgV2ViS2l0IGNvbnRleHQgbWVudS4KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5kbGVLZXlib2FyZEV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBTaW1wbGVQREZQbHVnaW46OnNldEZvY3VzKGJvb2wgaGFzRm9jdXMpCit7Cit9CisKK05Q
T2JqZWN0KiBTaW1wbGVQREZQbHVnaW46OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCit7Cisg
ICAgcmV0dXJuIDA7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK3ZvaWQgU2ltcGxlUERGUGx1
Z2luOjp3aW5kb3dGb2N1c0NoYW5nZWQoYm9vbCkKK3sKK30KKwordm9pZCBTaW1wbGVQREZQbHVn
aW46OndpbmRvd0FuZFZpZXdGcmFtZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHdp
bmRvd0ZyYW1lSW5TY3JlZW5Db29yZGluYXRlcywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmll
d0ZyYW1lSW5XaW5kb3dDb29yZGluYXRlcykKK3sKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
OndpbmRvd1Zpc2liaWxpdHlDaGFuZ2VkKGJvb2wpCit7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1
Z2luOjpjb250ZW50c1NjYWxlRmFjdG9yQ2hhbmdlZChmbG9hdCkKK3sKK30KKwordWludDY0X3Qg
U2ltcGxlUERGUGx1Z2luOjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgU2ltcGxlUERGUGx1Z2luOjpzZW5kQ29tcGxl
eFRleHRJbnB1dChjb25zdCBTdHJpbmcmKQoreworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6
c2V0TGF5ZXJIb3N0aW5nTW9kZShMYXllckhvc3RpbmdNb2RlKQoreworfQorCisjZW5kaWYKKwor
dm9pZCBTaW1wbGVQREZQbHVnaW46OnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZChib29sKQor
eworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6cHJpdmF0ZUJyb3dzaW5nU3RhdGVDaGFuZ2Vk
KGJvb2wpCit7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpnZXRGb3JtVmFsdWUoU3RyaW5n
JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjpoYW5k
bGVTY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpCit7CisgICAgcmV0dXJuIHNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsK
K30KKworU2Nyb2xsYmFyKiBTaW1wbGVQREZQbHVnaW46Omhvcml6b250YWxTY3JvbGxiYXIoKQor
eworICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7Cit9CisKK1Njcm9sbGJh
ciogU2ltcGxlUERGUGx1Z2luOjp2ZXJ0aWNhbFNjcm9sbGJhcigpCit7CisgICAgcmV0dXJuIG1f
dmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7Cit9CisKK0ludFJlY3QgU2ltcGxlUERGUGx1Z2luOjpz
Y3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJh
ciB8fCAhbV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAg
ICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgeworICAg
ICAgICBBU1NFUlQobV92ZXJ0aWNhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpOwor
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIH0KKyAgICByZXR1cm4gSW50UmVjdChwbHVn
aW5WaWV3KCktPndpZHRoKCkgLSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5W
aWV3KCktPmhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7
Cit9CisKK1Njcm9sbGFibGVBcmVhKiBTaW1wbGVQREZQbHVnaW46OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogV2FsayB1cCB0aGUgZnJhbWUgdHJlZSBh
bmQgbG9vayBmb3IgYSBzY3JvbGxhYmxlIHBhcmVudCBmcmFtZSBvciBSZW5kZXJMYXllci4KKyAg
ICByZXR1cm4gMDsKK30KKworSW50UmVjdCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goKSBjb25zdAoreworICAgIHJldHVybiBwbHVnaW5WaWV3KCktPmZyYW1lUmVj
dCgpOworfQorCit2b2lkIFNpbXBsZVBERlBsdWdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKG9mZnNldC54
KCksIG9mZnNldC55KCkpOworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgZm9yIHBl
cmZvcm1hbmNlIHRvIGJsaXQgcGFydHMgdGhhdCByZW1haW4gdmlzaWJsZS4KKyAgICBjb250cm9s
bGVyKCktPmludmFsaWRhdGUoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7Cit9CisKK2ludCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIgPSAoKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyIDogbV92ZXJ0aWNhbFNjcm9sbGJhcikuZ2V0KCk7CisgICAgcmV0dXJuIHNjcm9s
bGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgp
KSA6IDA7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjppc0FjdGl2ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKSkgeworICAgICAg
ICBpZiAoUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcmV0dXJu
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIElu
dFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKKyAgICBkaXJ0eVJlY3QubW92ZUJ5KHNjcm9sbGJhci0+
bG9jYXRpb24oKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeSgtcGx1Z2luVmlldygpLT5sb2NhdGlv
bigpKTsKKyAgICBjb250cm9sbGVyKCktPmludmFsaWRhdGUoZGlydHlSZWN0KTsKK30KKwordm9p
ZCBTaW1wbGVQREZQbHVnaW46OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgY29udHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCiti
b29sIFNpbXBsZVBERlBsdWdpbjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBTaW1wbGVQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9u
KFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xs
T2Zmc2V0LndpZHRoKCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitJbnRQb2ludCBT
aW1wbGVQREZQbHVnaW46OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50
UG9pbnQobV9zY3JvbGxPZmZzZXQud2lkdGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOwor
fQorCitJbnRQb2ludCBTaW1wbGVQREZQbHVnaW46Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEludFBvaW50KDAsIDApOworfQorCitJbnRQb2ludCBTaW1wbGVQ
REZQbHVnaW46Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgaW50IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICYmICFtX2hvcml6
b250YWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpKSA/IG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+aGVpZ2h0KCkgOiAwOworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gKG1f
dmVydGljYWxTY3JvbGxiYXIgJiYgIW1fdmVydGljYWxTY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpKSA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwOworCisgICAgSW50UG9p
bnQgbWF4aW11bU9mZnNldChtX3BkZkRvY3VtZW50U2l6ZS53aWR0aCgpIC0gbV9zaXplLndpZHRo
KCkgKyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAt
IG1fc2l6ZS5oZWlnaHQoKSArIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgIG1heGlt
dW1PZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0
OworfQorCitpbnQgU2ltcGxlUERGUGx1Z2luOjp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworfQorCitpbnQgU2ltcGxlUERGUGx1Z2luOjp2aXNp
YmxlV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3NpemUud2lkdGgoKTsKK30KKworSW50
U2l6ZSBTaW1wbGVQREZQbHVnaW46OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGRmRG9jdW1lbnRTaXplOworfQorCitib29sIFNpbXBsZVBERlBsdWdpbjo6c2Nyb2xsYmFy
c0NhbkJlQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIXBsdWdpblZpZXcoKS0+ZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKTsKK30KKwordm9pZCBTaW1wbGVQREZQbHVnaW46
OnNjcm9sbGJhclN0eWxlQ2hhbmdlZChpbnQsIGJvb2wgZm9yY2VVcGRhdGUpCit7CisgICAgaWYg
KCFmb3JjZVVwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgdGhlIFBERiB3YXMg
c2Nyb2xsZWQgYWxsIHRoZSB3YXkgdG8gYm90dG9tIHJpZ2h0IGFuZCBzY3JvbGxiYXJzIGNoYW5n
ZSB0byBvdmVybGF5IHN0eWxlLCB3ZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgd2hpdGUgcmVjdGFu
Z2xlcyB3aGVyZSBzY3JvbGxiYXJzIHdlcmUuCisgICAgSW50UG9pbnQgbmV3U2Nyb2xsT2Zmc2V0
ID0gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQpLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlv
bigpKTsKKyAgICBzZXRTY3JvbGxPZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIC8vIEFz
IHNpemUgb2YgdGhlIGNvbnRlbnQgYXJlYSBjaGFuZ2VzLCBzY3JvbGxiYXJzIG1heSBuZWVkIHRv
IGFwcGVhciBvciB0byBkaXNhcHBlYXIuCisgICAgdXBkYXRlU2Nyb2xsYmFycygpOworCisgICAg
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzUmVzaXplZCgpOworfQorCitJbnRSZWN0IFNpbXBsZVBE
RlBsdWdpbjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAorewor
ICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJh
ci0+bG9jYXRpb24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0
dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBs
dWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0ludFJlY3QgU2ltcGxlUERGUGx1
Z2luOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZWN0ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRl
cmVyKHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3Zl
KHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSAtIHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAg
CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFNpbXBsZVBERlBsdWdpbjo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQg
cG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRp
b24oKSAtIHBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgCisgICAgcmV0dXJuIHBsdWdp
blZpZXcoKS0+ZnJhbWUoKS0+dmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHBsdWdpblZpZXco
KS0+cmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBTaW1wbGVQREZQbHVnaW46OmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50
IHBvaW50ID0gcGx1Z2luVmlldygpLT5mcmFtZSgpLT52aWV3KCktPmNvbnZlcnRUb1JlbmRlcmVy
KHBsdWdpblZpZXcoKS0+cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUo
cGx1Z2luVmlldygpLT5sb2NhdGlvbigpIC0gc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKKyAgICAK
KyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK2Jvb2wgU2ltcGxlUERGUGx1Z2luOjppc0VkaXRpbmdD
b21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBTaW1wbGVQREZQbHVnaW46OmhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBTaW1w
bGVQREZQbHVnaW46OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggZDE5N2E2Ny4uOThmODc3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaApAQCAtMTg4LDYgKzE4OCwxNSBAQCBwdWJs
aWM6CiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4ga2V5
Ym9hcmQgZXZlbnQuIFRoZSBwbHVnLWluIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBwcm9jZXNz
ZWQgdGhlIGV2ZW50LgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlib2FyZEV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmKSA9IDA7CiAgICAgCisgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4g
dG8gaGFuZGxlIHRoZSBwYXNzZWQgaW4gZWRpdGluZyBjb21tYW5kLiBUaGUgcGx1Zy1pbiBzaG91
bGQgcmV0dXJuIHRydWUgaWYgaXQgZXhlY3V0ZWQgdGhlIGNvbW1hbmQuCisgICAgdmlydHVhbCBi
b29sIGhhbmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0
IFN0cmluZyYgYXJndW1lbnQpID0gMDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hl
dGhlciBpdCB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIHRoZSBnaXZlbiBlZGl0aW5nIGNvbW1hbmQu
CisgICAgdmlydHVhbCBib29sIGlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYp
ID0gMDsKKyAgICAKKyAgICAvLyBBc2sgdGhlIHBsdWctaW4gd2hldGhlciBpdCB3YW50cyB0byBv
dmVycmlkZSBmdWxsLXBhZ2Ugem9vbS4KKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlc1BhZ2VTY2Fs
ZUZhY3RvcigpID0gMDsKKyAgICAKICAgICAvLyBUZWxscyB0aGUgcGx1Zy1pbiBhYm91dCBmb2N1
cyBjaGFuZ2VzLgogICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKSA9IDA7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCmluZGV4
IDBmNGZkNzAuLjk4ZjMzMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb3h5LmNwcApAQCAtNDAzLDYgKzQwMywzMyBAQCB2b2lkIFBsdWdpblBy
b3h5OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQogICAgIG1fY29ubmVjdGlvbi0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OlNldEZvY3VzKGhhc0Zv
Y3VzKSwgbV9wbHVnaW5JbnN0YW5jZUlEKTsKIH0KIAorYm9vbCBQbHVnaW5Qcm94eTo6aGFuZGxl
RWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBh
cmd1bWVudCkKK3sKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoIW1fY29ubmVj
dGlvbi0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclBy
b3h5OjpIYW5kbGVFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBNZXNzYWdl
czo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpIYW5kbGVFZGl0aW5nQ29tbWFuZDo6UmVwbHkoaGFu
ZGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gaGFuZGxlZDsKK30KKyAgICAKK2Jvb2wgUGx1Z2luUHJveHk6OmlzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpCit7CisgICAgYm9vbCBl
bmFibGVkID0gZmFsc2U7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29tbWFuZE5hbWUpLCBNZXNzYWdlczo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpJc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZDo6UmVwbHkoZW5hYmxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gZW5hYmxlZDsKK30KKyAg
ICAKK2Jvb2wgUGx1Z2luUHJveHk6OmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKQoreworICAgIGJv
b2wgaGFuZGxlZCA9IGZhbHNlOworICAgIGlmICghbV9jb25uZWN0aW9uLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkhhbmRsZXNQYWdlU2Nh
bGVGYWN0b3IoKSwgTWVzc2FnZXM6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6SGFuZGxlc1BhZ2VT
Y2FsZUZhY3Rvcjo6UmVwbHkoaGFuZGxlZCksIG1fcGx1Z2luSW5zdGFuY2VJRCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gaGFuZGxlZDsKK30KKwogTlBPYmplY3Qq
IFBsdWdpblByb3h5OjpwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKQogewogICAgIC8vIFNlbmRp
bmcgdGhlIHN5bmNocm9ub3VzIE1lc3NhZ2VzOjpQbHVnaW5Db250cm9sbGVyUHJveHk6OkdldFBs
dWdpblNjcmlwdGFibGVOUE9iamVjdCBtZXNzYWdlIGNhbiBjYXVzZSB1cyB0byBkaXNwYXRjaCBh
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaApp
bmRleCA3YTM2YzFhLi4wMmZhMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJveHkuaApAQCAtMTAxLDYgKzEwMSwxMSBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVDb250ZXh0TWVudUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5Ym9hcmRFdmVudChjb25zdCBXZWJLZXlib2Fy
ZEV2ZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldEZvY3VzKGJvb2wpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkgT1ZFUlJJREU7CisgICAg
CisgICAgdmlydHVhbCBib29sIGhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsKKyAgICAKICAgICB2
aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBh
MWU4MTI2Li5kMGE1ZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC0yNzEsNiArMjcxLDcgQEAgUGx1Z2luVmlldzo6UGx1Z2lu
VmlldyhQYXNzUmVmUHRyPEhUTUxQbHVnSW5FbGVtZW50PiBwbHVnaW5FbGVtZW50LCBQYXNzUmVm
UHRyPFAKICNlbmRpZgogICAgICwgbV9tYW51YWxTdHJlYW1TdGF0ZShTdHJlYW1TdGF0ZUluaXRp
YWwpCiAgICAgLCBtX3BsdWdpblNuYXBzaG90VGltZXIodGhpcywgJlBsdWdpblZpZXc6OnBsdWdp
blNuYXBzaG90VGltZXJGaXJlZCwgcGx1Z2luU25hcHNob3RUaW1lckRlbGF5KQorICAgICwgbV9w
YWdlU2NhbGVGYWN0b3IoMSkKIHsKICAgICBtX3dlYlBhZ2UtPmFkZFBsdWdpblZpZXcodGhpcyk7
CiB9CkBAIC00MjcsNiArNDI4LDE4IEBAIHZvaWQgUGx1Z2luVmlldzo6cGFnZVNjYWxlRmFjdG9y
RGlkQ2hhbmdlKCkKICAgICB2aWV3R2VvbWV0cnlEaWRDaGFuZ2UoKTsKIH0KIAordm9pZCBQbHVn
aW5WaWV3OjpzZXRQYWdlU2NhbGVGYWN0b3IoZG91YmxlIHNjYWxlRmFjdG9yLCBJbnRQb2ludCkK
K3sKKyAgICBtX3BhZ2VTY2FsZUZhY3RvciA9IHNjYWxlRmFjdG9yOworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2Nh
bGVGYWN0b3IpKTsKKyAgICBwYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKK30KKworZG91Ymxl
IFBsdWdpblZpZXc6OnBhZ2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIG1fcGFnZVNjYWxl
RmFjdG9yOworfQorCiB2b2lkIFBsdWdpblZpZXc6OndlYlBhZ2VEZXN0cm95ZWQoKQogewogICAg
IG1fd2ViUGFnZSA9IDA7CkBAIC03NjAsNiArNzczLDE2IEBAIHZvaWQgUGx1Z2luVmlldzo6aGFu
ZGxlRXZlbnQoRXZlbnQqIGV2ZW50KQogICAgIGlmIChkaWRIYW5kbGVFdmVudCkKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CisgICAgCitib29sIFBsdWdpblZpZXc6Omhh
bmRsZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQpCit7CisgICAgcmV0dXJuIG1fcGx1Z2luLT5oYW5kbGVFZGl0aW5nQ29tbWFu
ZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOworfQorICAgIAorYm9vbCBQbHVnaW5WaWV3Ojppc0Vk
aXRpbmdDb21tYW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQoreworICAgIHJl
dHVybiBtX3BsdWdpbi0+aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoY29tbWFuZE5hbWUpOworfQog
CiB2b2lkIFBsdWdpblZpZXc6Om5vdGlmeVdpZGdldChXaWRnZXROb3RpZmljYXRpb24gbm90aWZp
Y2F0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmgKaW5kZXggMTNlMGE5Ny4uMGQwZGZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oCkBAIC03OSwxMCArNzksMTcgQEAgcHVibGljOgog
CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzOyBub2JvZHkgc2hvdWxkIGhhdmUgdG8ga25vdyBh
Ym91dCB0aGUgcGx1Zy1pbiB2aWV3J3MgcmVuZGVyZXIgZXhjZXB0IHRoZSBwbHVnLWluIHZpZXcg
aXRzZWxmLgogICAgIFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcigpIGNv
bnN0OworICAgIAorICAgIHZvaWQgc2V0UGFnZVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZUZhY3Rv
ciwgV2ViQ29yZTo6SW50UG9pbnQgb3JpZ2luKTsKKyAgICBkb3VibGUgcGFnZVNjYWxlRmFjdG9y
KCk7CisgICAgYm9vbCBoYW5kbGVzUGFnZVNjYWxlRmFjdG9yKCkgeyByZXR1cm4gbV9wbHVnaW4t
PmhhbmRsZXNQYWdlU2NhbGVGYWN0b3IoKTsgfQogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JE
aWRDaGFuZ2UoKTsKICAgICB2b2lkIHdlYlBhZ2VEZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25z
dCBTdHJpbmcmIGFyZ3VtZW50KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CisKIHByaXZhdGU6CiAgICAgUGx1Z2lu
VmlldyhQYXNzUmVmUHRyPFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50PiwgUGFzc1JlZlB0cjxQ
bHVnaW4+LCBjb25zdCBQbHVnaW46OlBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpOwogICAgIHZpcnR1
YWwgflBsdWdpblZpZXcoKTsKQEAgLTIzNiw2ICsyNDMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IG1fdHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdDsKICAgICAvLyBU
aGlzIHRpbWVyIGlzIHVzZWQgd2hlbiBwbHVnaW4gc25hcHNob3R0aW5nIGlzIGVuYWJsZWQsIHRv
IGNhcHR1cmUgYSBwbHVnaW4gcGxhY2Vob2xkZXIuCiAgICAgV2ViQ29yZTo6RGVmZXJyYWJsZU9u
ZVNob3RUaW1lcjxQbHVnaW5WaWV3PiBtX3BsdWdpblNuYXBzaG90VGltZXI7CisKKyAgICBkb3Vi
bGUgbV9wYWdlU2NhbGVGYWN0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggNmRhMjQyNS4uYzI5NDYzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTExNDYsMTAgKzExNDYsOSBAQCB2b2lk
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXN0b3JlVmlld1N0YXRlKCkKICAgICAvLyBJbmZvcm0g
dGhlIFVJIHByb2Nlc3Mgb2YgdGhlIHNjYWxlIGZhY3Rvci4KICAgICBkb3VibGUgc2NhbGVGYWN0
b3IgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmhpc3RvcnkoKS0+Y3VycmVudEl0
ZW0oKS0+cGFnZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBBIHNjYWxlIGZhY3RvciBvZiAwLjAg
bWVhbnMgdGhlIGhpc3RvcnkgaXRlbSBhY3R1YWxseSBoYXMgdGhlICJkZWZhdWx0IHNjYWxlIGZh
Y3RvciIgb2YgMS4wLgotICAgIGlmICghc2NhbGVGYWN0b3IpCi0gICAgICAgIHNjYWxlRmFjdG9y
ID0gMS4wOwotICAgIG1fZnJhbWUtPnBhZ2UoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2Uoc2NhbGVGYWN0b3IpKTsKKyAgICAvLyBBIHNjYWxl
IGZhY3RvciBvZiAwIG1lYW5zIHRoZSBoaXN0b3J5IGl0ZW0gaGFzIHRoZSBkZWZhdWx0IHNjYWxl
IGZhY3RvciwgdGh1cyB3ZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgaXQuCisgICAgaWYgKHNjYWxl
RmFjdG9yKQorICAgICAgICBtX2ZyYW1lLT5wYWdlKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKHNjYWxlRmFjdG9yKSk7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4gV2ViQ29yZSBzaG91bGQgYmUgY29y
cmVjdGx5IGludmFsaWRhdGluZwogICAgIC8vIHRoZSB2aWV3IG9uIHJlc3RvcmVzIGZyb20gdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KQEAgLTEyMTYsNyArMTIxNSw3IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRG
cmFtZSopCiAgICAgYm9vbCBpc01haW5GcmFtZSA9IHdlYlBhZ2UtPm1haW5XZWJGcmFtZSgpID09
IG1fZnJhbWU7CiAgICAgCiAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBt
X2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNl
KCk7Ci0gICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYg
V2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNw
b25zZShyZXNwb25zZSk7CisgICAgbV9mcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNN
YWluRnJhbWUgJiYgd2ViUGFnZS0+c2hvdWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNw
b25zZShyZXNwb25zZSk7CiAgICAgbV9mcmFtZUNhbWVGcm9tUGFnZUNhY2hlID0gdHJ1ZTsKIH0K
IApAQCAtMTIzMCw3ICsxMjI5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNp
dGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCiAgICAgSW50UmVjdCBjdXJyZW50VmlzaWJsZUNv
bnRlbnRCb3VuZHMgPSBtX2ZyYW1lLT52aXNpYmxlQ29udGVudEJvdW5kcygpOwogCiAgICAgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UgPSBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlc3BvbnNlKCk7Ci0gICAgbV9mcmFtZUhhc0N1c3Rv
bVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hv
dWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CisgICAgbV9m
cmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uID0gaXNNYWluRnJhbWUgJiYgd2ViUGFnZS0+c2hv
dWxkVXNlQ3VzdG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShyZXNwb25zZSk7CiAgICAgbV9m
cmFtZUNhbWVGcm9tUGFnZUNhY2hlID0gZmFsc2U7CiAKICAgICBtX2ZyYW1lLT5jb3JlRnJhbWUo
KS0+Y3JlYXRlVmlldyh3ZWJQYWdlLT5zaXplKCksIGJhY2tncm91bmRDb2xvciwgLyogdHJhbnNw
YXJlbnQgKi8gZmFsc2UsIEludFNpemUoKSwgc2hvdWxkVXNlRml4ZWRMYXlvdXQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGUyNmViODgu
LjkwYmJhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTEwNyw2ICsxMDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1l
UmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjcmlwdFZhbHVlLmg+CkBAIC0xNTAsNyAr
MTUxLDEwIEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJCdWlsdElu
UERGVmlldy5oIgorI2luY2x1ZGUgIlNpbXBsZVBERlBsdWdpbi5oIgorI2lmIEVOQUJMRShQREZL
SVRfUExVR0lOKQorI2luY2x1ZGUgIlBERlBsdWdpbi5oIgorI2VuZGlmCiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFFUKQpAQCAtMjE5LDYgKzIyMyw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0
X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQog
ICAgICwgbV9hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoZmFsc2Up
CiAgICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFsc2UpCiAjaWYg
UExBVEZPUk0oTUFDKQorICAgICwgbV9wZGZQbHVnaW5FbmFibGVkKGZhbHNlKQogICAgICwgbV93
aW5kb3dJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX2lzU21hcnRJbnNlcnREZWxldGVFbmFibGVk
KHBhcmFtZXRlcnMuaXNTbWFydEluc2VydERlbGV0ZUVuYWJsZWQpCiAgICAgLCBtX2xheWVySG9z
dGluZ01vZGUocGFyYW1ldGVycy5sYXllckhvc3RpbmdNb2RlKQpAQCAtNDY2LDggKzQ3MSwxMyBA
QCBQYXNzUmVmUHRyPFBsdWdpbj4gV2ViUGFnZTo6Y3JlYXRlUGx1Z2luKFdlYkZyYW1lKiBmcmFt
ZSwgSFRNTFBsdWdJbkVsZW1lbnQqIHBsdQogICAgIGlmIChwbHVnaW5QYXRoLmlzTnVsbCgpKSB7
CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBpZiAocGFyYW1ldGVycy5taW1lVHlwZSA9PSAi
YXBwbGljYXRpb24vcGRmIgotICAgICAgICAgICAgfHwgKHBhcmFtZXRlcnMubWltZVR5cGUuaXNF
bXB0eSgpICYmIHBhcmFtZXRlcnMudXJsLnBhdGgoKS5sb3dlcigpLmVuZHNXaXRoKCIucGRmIikp
KQotICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5QREZWaWV3OjpjcmVhdGUoZnJhbWUpOworICAg
ICAgICAgICAgfHwgKHBhcmFtZXRlcnMubWltZVR5cGUuaXNFbXB0eSgpICYmIHBhcmFtZXRlcnMu
dXJsLnBhdGgoKS5sb3dlcigpLmVuZHNXaXRoKCIucGRmIikpKSB7CisjaWYgRU5BQkxFKFBERktJ
VF9QTFVHSU4pCisgICAgICAgICAgICBpZiAocGRmUGx1Z2luRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBQREZQbHVnaW46OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIHJldHVybiBTaW1wbGVQREZQbHVnaW46OmNyZWF0ZShmcmFtZSk7CisgICAgICAgIH0KICNl
bHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CiAjZW5kaWYKQEAgLTYxOCwxMSArNjI4
LDI3IEBAIFBhc3NSZWZQdHI8SW1tdXRhYmxlQXJyYXk+IFdlYlBhZ2U6OnRyYWNrZWRSZXBhaW50
UmVjdHMoKQogICAgIHJldHVybiBJbW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKIH0KIAor
c3RhdGljIFBsdWdpblZpZXcqIHBsdWdpblZpZXdGb3JGcmFtZShGcmFtZSogZnJhbWUpCit7Cisg
ICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFBsdWdpbkRvY3VtZW50KiBwbHVnaW5Eb2N1bWVudCA9IHN0YXRpY19j
YXN0PFBsdWdpbkRvY3VtZW50Kj4oZnJhbWUtPmRvY3VtZW50KCkpOworICAgIFBsdWdpblZpZXcq
IHBsdWdpblZpZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4ocGx1Z2luRG9jdW1lbnQtPnBs
dWdpbldpZGdldCgpKTsKKyAgICByZXR1cm4gcGx1Z2luVmlldzsKK30KKwogdm9pZCBXZWJQYWdl
OjpleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3Qg
U3RyaW5nJiBhcmd1bWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdG
b3JGcmFtZShmcmFtZSkpIHsKKyAgICAgICAgcGx1Z2luVmlldy0+aGFuZGxlRWRpdGluZ0NvbW1h
bmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
ICAgICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmV4ZWN1dGUoYXJndW1l
bnQpOwogfQogCkBAIC02MzEsNiArNjU3LDkgQEAgYm9vbCBXZWJQYWdlOjppc0VkaXRpbmdDb21t
YW5kRW5hYmxlZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlm
ICghZnJhbWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChQbHVnaW5WaWV3KiBw
bHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHBs
dWdpblZpZXctPmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKTsKICAgICAKICAg
ICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21t
YW5kTmFtZSk7CiAgICAgcmV0dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlz
RW5hYmxlZCgpOwpAQCAtMTA3MSw4ICsxMTAwLDE0IEBAIHZvaWQgV2ViUGFnZTo6d2luZG93U2Ny
ZWVuRGlkQ2hhbmdlKHVpbnQ2NF90IGRpc3BsYXlJRCkKIAogdm9pZCBXZWJQYWdlOjpzY2FsZVBh
Z2UoZG91YmxlIHNjYWxlLCBjb25zdCBJbnRQb2ludCYgb3JpZ2luKQogeworICAgIFBsdWdpblZp
ZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUobV9wYWdlLT5tYWluRnJhbWUoKSk7
CisgICAgaWYgKHBsdWdpblZpZXcgJiYgcGx1Z2luVmlldy0+aGFuZGxlc1BhZ2VTY2FsZUZhY3Rv
cigpKSB7CisgICAgICAgIHBsdWdpblZpZXctPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZSwgb3Jp
Z2luKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBtX3BhZ2UtPnNldFBhZ2VT
Y2FsZUZhY3RvcihzY2FsZSwgb3JpZ2luKTsKLQorICAgIAogICAgIGZvciAoSGFzaFNldDxQbHVn
aW5WaWV3Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5WaWV3cy5iZWdpbigpLCBlbmQg
PSBtX3BsdWdpblZpZXdzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgqaXQpLT5w
YWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKIApAQCAtMTA4MSw2ICsxMTE2LDEwIEBAIHZvaWQg
V2ViUGFnZTo6c2NhbGVQYWdlKGRvdWJsZSBzY2FsZSwgY29uc3QgSW50UG9pbnQmIG9yaWdpbikK
IAogZG91YmxlIFdlYlBhZ2U6OnBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7CisgICAgUGx1Z2lu
VmlldyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShtX3BhZ2UtPm1haW5GcmFtZSgp
KTsKKyAgICBpZiAocGx1Z2luVmlldyAmJiBwbHVnaW5WaWV3LT5oYW5kbGVzUGFnZVNjYWxlRmFj
dG9yKCkpCisgICAgICAgIHJldHVybiBwbHVnaW5WaWV3LT5wYWdlU2NhbGVGYWN0b3IoKTsKKyAg
ICAKICAgICByZXR1cm4gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIApAQCAtMTUzMSw5
ICsxNTcwLDEzIEBAIHZvaWQgV2ViUGFnZTo6dmFsaWRhdGVDb21tYW5kKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgaW50MzJfdCBzdGF0ZSA9IDA7
CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9y
TWFpbkZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lKTsKLSAgICAgICAg
c3RhdGUgPSBjb21tYW5kLnN0YXRlKCk7Ci0gICAgICAgIGlzRW5hYmxlZCA9IGNvbW1hbmQuaXNT
dXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgICAgICBpZiAoUGx1Z2luVmll
dyogcGx1Z2luVmlldyA9IHBsdWdpblZpZXdGb3JGcmFtZShmcmFtZSkpCisgICAgICAgICAgICBp
c0VuYWJsZWQgPSBwbHVnaW5WaWV3LT5pc0VkaXRpbmdDb21tYW5kRW5hYmxlZChjb21tYW5kTmFt
ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQg
PSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpOworICAgICAgICAgICAgc3Rh
dGUgPSBjb21tYW5kLnN0YXRlKCk7CisgICAgICAgICAgICBpc0VuYWJsZWQgPSBjb21tYW5kLmlz
U3VwcG9ydGVkKCkgJiYgY29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VmFsaWRhdGVDb21tYW5kQ2FsbGJhY2so
Y29tbWFuZE5hbWUsIGlzRW5hYmxlZCwgc3RhdGUsIGNhbGxiYWNrSUQpKTsKQEAgLTIwNTIsNiAr
MjA5NSwxMCBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZl
cmVuY2VzU3RvcmUmIHN0b3JlKQogCiAgICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdF
bmFibGVkID0gc3RvcmUuZ2V0Qm9vbFZhbHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5OjpzY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkS2V5KCkpOwogCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIG1fcGRmUGx1Z2luRW5hYmxlZCA9IHN0b3JlLmdldEJvb2xWYWx1ZUZvcktleShXZWJQ
cmVmZXJlbmNlc0tleTo6cGRmUGx1Z2luRW5hYmxlZEtleSgpKTsKKyNlbmRpZgorCiAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIG1hY3JvIGV4cGFuc2lvbiBmb3Ig
YWxsIHByZWZlcmVuY2VzLAogICAgIC8vIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgbWF0Y2ggdGhl
IG5hbWluZyBvZiBXZWJDb3JlIGV4YWN0bHkgc28gd2UgYXJlCiAgICAgLy8gaGFuZHJvbGxpbmcg
dGhlIGJvb2xlYW4gYW5kIGludGVnZXIgcHJlZmVyZW5jZXMgdW50aWwgdGhhdCBpcyBmaXhlZC4K
QEAgLTMzOTEsNCArMzQzOCwyNCBAQCB2b2lkIFdlYlBhZ2U6OnNldFNjcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xs
aW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAorc3RhdGljIGJvb2wg
Y2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgU3RyaW5nIHBsdWdpblBhdGg7CisgICAgYm9vbCBibG9ja2VkOworICAgIAorICAg
IGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRoKHJlc3BvbnNlLm1pbWVUeXBlKCksIHJl
c3BvbnNlLnVybCgpLnN0cmluZygpKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1
Z2luUGF0aDo6UmVwbHkocGx1Z2luUGF0aCwgYmxvY2tlZCksIDApKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuICFibG9ja2VkICYmICFwbHVnaW5QYXRoLmlzRW1wdHko
KTsKK30KKworYm9vbCBXZWJQYWdlOjpzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBjb25zdAoreworICAgIGlm
ICghbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmNvbnRhaW5zKHJlc3BvbnNl
Lm1pbWVUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBhIHBsdWct
aW4gZXhpc3RzIHRoYXQgY2xhaW1zIHRvIHN1cHBvcnQgdGhpcyByZXNwb25zZSwgaXQgc2hvdWxk
IHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBjdXN0b20gcmVwcmVzZW50YXRpb24uCisgICAgcmV0
dXJuICFjYW5QbHVnaW5IYW5kbGVSZXNwb25zZShyZXNwb25zZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
aW5kZXggNGQ5NTI0Ni4uNjVhMDRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC0xMTMsNiArMTEzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgUHJpbnRDb250ZXh0OwogICAgIGNsYXNzIFJhbmdl
OworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0
OwogICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpA
QCAtNTgxLDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBuYXRpdmVXaW5kb3dIYW5k
bGUoKSB7IHJldHVybiBtX25hdGl2ZVdpbmRvd0hhbmRsZTsgfQogI2VuZGlmCiAKKyAgICBib29s
IHNob3VsZFVzZUN1c3RvbVJlcHJlc2VudGF0aW9uRm9yUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYpIGNvbnN0OworCiAgICAgYm9vbCBhc3luY2hyb25vdXNQbHVnaW5J
bml0aWFsaXphdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FzeW5jaHJvbm91c1BsdWdp
bkluaXRpYWxpemF0aW9uRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzUGx1Z2lu
SW5pdGlhbGl6YXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2FzeW5jaHJvbm91c1BsdWdp
bkluaXRpYWxpemF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7IH0KICAgICBib29sIGFzeW5jaHJvbm91
c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoKSBjb25zdCB7IHJldHVy
biBtX2FzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnM7
IH0KQEAgLTU5Myw2ICs1OTYsMTUgQEAgcHVibGljOgogICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dn
aW5nRW5hYmxlZChib29sKTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIHBkZlBsdWdp
bkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BkZlBsdWdpbkVuYWJsZWQ7IH0KKyAgICB2b2lk
IHNldFBERlBsdWdpbkVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGRmUGx1Z2luRW5hYmxlZCA9
IGVuYWJsZWQ7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHN0YXRpYyBIYXNo
U2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBwZGZBbmRQb3N0U2NyaXB0TUlNRVR5cGVzKCk7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3Qg
V2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYpOwogCkBAIC03OTYsNiArODA4LDggQEAgcHJpdmF0
ZToKICAgICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBib29sIG1fcGRmUGx1Z2luRW5hYmxlZDsKKwogICAgIC8vIFdo
ZXRoZXIgdGhlIGNvbnRhaW5pbmcgd2luZG93IGlzIHZpc2libGUgb3Igbm90LgogICAgIGJvb2wg
bV93aW5kb3dJc1Zpc2libGU7CiAKQEAgLTkyMyw2ICs5MzcsOCBAQCBwcml2YXRlOgogICAgIFdl
YkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGUgbV92aXNpYmlsaXR5U3RhdGU7CiAjZW5kaWYKICAg
ICBXZWJJbnNwZWN0b3JDbGllbnQqIG1faW5zcGVjdG9yQ2xpZW50OworCisgICAgSGFzaFNldDxT
dHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRp
b25zOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggMjIyNzNjMS4uMmFj
Zjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbQpAQCAtOTQsNiArOTQsMTQgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVBy
ZWZlcmVuY2VzRGlkQ2hhbmdlKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogewog
ICAgIGlmIChXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IHRoaXMtPmluc3BlY3RvcigpKQogICAg
ICAgICBpbnNwZWN0b3ItPnNldEluc3BlY3RvclVzZXNXZWJLaXRVc2VySW50ZXJmYWNlKHN0b3Jl
LmdldEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6aW5zcGVjdG9yVXNlc1dlYktp
dFVzZXJJbnRlcmZhY2VLZXkoKSkpOworCisgICAgQk9PTCBvbWl0UERGU3VwcG9ydCA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0
UERGU3VwcG9ydCJdOworICAgIGlmICghcGRmUGx1Z2luRW5hYmxlZCgpICYmICFvbWl0UERGU3Vw
cG9ydCkgeworICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIFBERiB2aWV3IGluIHRoZSBVSSBw
cm9jZXNzIGZvciBQREYgTUlNRSB0eXBlcy4KKyAgICAgICAgSGFzaFNldDxTdHJpbmcsIENhc2VG
b2xkaW5nSGFzaD4gbWltZVR5cGVzID0gcGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpOworICAg
ICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGluZ0hhc2g+OjppdGVyYXRvciBpdCA9
IG1pbWVUeXBlcy5iZWdpbigpOyBpdCAhPSBtaW1lVHlwZXMuZW5kKCk7ICsraXQpCisgICAgICAg
ICAgICBtX21pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbnMuYWRkKCppdCk7CisgICAg
fQogfQogCiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsK
QEAgLTg2Niw0ICs4NzQsMTYgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkZyb21QREZE
b2N1bWVudChDR0NvbnRleHRSZWYgY29udGV4dCwgUERGRG9jdW1lbnQgKnAKICAgICB9CiB9CiAK
Ky8vIEZJWE1FOiBUaGlzIGlzIG5vdCB0aGUgaWRlYWwgcGxhY2UgZm9yIHRoaXMgZnVuY3Rpb24g
KGFuZCBub3cgaXQncyBkdXBsaWNhdGVkIGhlcmUgYW5kIGluIFdlYkNvbnRleHRNYWMpLgorSGFz
aFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gV2ViUGFnZTo6cGRmQW5kUG9zdFNjcmlwdE1J
TUVUeXBlcygpCit7CisgICAgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gbWltZVR5
cGVzOworICAgIAorICAgIG1pbWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3BkZiIpOworICAgIG1p
bWVUeXBlcy5hZGQoImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiKTsKKyAgICBtaW1lVHlwZXMuYWRk
KCJ0ZXh0L3BkZiIpOworICAgIAorICAgIHJldHVybiBtaW1lVHlwZXM7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5k
ZXggOThjOTMwMi4uNmY2N2VkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nl
c3MuY3BwCkBAIC0yNDYsOSArMjQ2LDYgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2Vi
UHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWUKIAogICAg
IHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHBhcmFtZXRlcnMuZGVmYXVsdFJlcXVl
c3RUaW1lb3V0SW50ZXJ2YWwpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLm1pbWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbi5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9taW1lVHlwZXNXaXRoQ3VzdG9tUmVwcmVzZW50YXRpb25zLmFkZChwYXJhbWV0ZXJzLm1p
bWVUeXBlc1dpdGhDdXN0b21SZXByZXNlbnRhdGlvbltpXSk7Ci0KICAgICBpZiAocGFyYW1ldGVy
cy5zaG91bGRBbHdheXNVc2VDb21wbGV4VGV4dENvZGVQYXRoKQogICAgICAgICBzZXRBbHdheXNV
c2VzQ29tcGxleFRleHRDb2RlUGF0aCh0cnVlKTsKIApAQCAtODEzLDI2ICs4MTAsNiBAQCB2b2lk
IFdlYlByb2Nlc3M6OnJlbW92ZU1lc3NhZ2VQb3J0Q2hhbm5lbCh1aW50NjRfdCBjaGFubmVsSUQp
CiB9CiAjZW5kaWYKIAotc3RhdGljIGJvb2wgY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgU3RyaW5nIHBsdWdpblBhdGg7Ci0g
ICAgYm9vbCBibG9ja2VkOwotCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblBhdGgo
cmVzcG9uc2UubWltZVR5cGUoKSwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpLCBNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5QYXRoOjpSZXBseShwbHVnaW5QYXRoLCBibG9ja2Vk
KSwgMCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhYmxvY2tlZCAmJiAh
cGx1Z2luUGF0aC5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgV2ViUHJvY2Vzczo6c2hvdWxkVXNlQ3Vz
dG9tUmVwcmVzZW50YXRpb25Gb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0
aW9ucy5jb250YWlucyhyZXNwb25zZS5taW1lVHlwZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gSWYgYSBwbHVnLWluIGV4aXN0cyB0aGF0IGNsYWltcyB0byBzdXBwb3J0IHRo
aXMgcmVzcG9uc2UsIGl0IHNob3VsZCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgY3VzdG9tIHJl
cHJlc2VudGF0aW9uLgotICAgIHJldHVybiAhY2FuUGx1Z2luSGFuZGxlUmVzcG9uc2UocmVzcG9u
c2UpOwotfQotCiB2b2lkIFdlYlByb2Nlc3M6OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VD
YWNoZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhcikKIHsKICAgICBwbGF0Zm9ybUNsZWFy
UmVzb3VyY2VDYWNoZXMocmVzb3VyY2VDYWNoZXNUb0NsZWFyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNzNmMDc5Ni4uZWNjYmI4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTE1MCwxNCArMTUwLDEyIEBAIHB1YmxpYzoKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgcGlkX3QgcHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSBjb25z
dCB7IHJldHVybiBtX3ByZXNlbnRlckFwcGxpY2F0aW9uUGlkOyB9CiAgICAgYm9vbCBzaG91bGRG
b3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEZvcmNl
U2NyZWVuRm9udFN1YnN0aXR1dGlvbjsgfQotI2VuZGlmIAorI2VuZGlmCiAgICAgCiAjaWYgUExB
VEZPUk0oUVQpCiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBuZXR3b3JrQWNjZXNzTWFuYWdl
cigpIHsgcmV0dXJuIG1fbmV0d29ya0FjY2Vzc01hbmFnZXI7IH0KICNlbmRpZgogCi0gICAgYm9v
bCBzaG91bGRVc2VDdXN0b21SZXByZXNlbnRhdGlvbkZvclJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UmKSBjb25zdDsKLQogICAgIC8vIFRleHQgQ2hlY2tpbmcKICAgICBj
b25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tlclN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV90ZXh0Q2hlY2tlclN0YXRlOyB9CiAKQEAgLTMyMCw4ICszMTgsNiBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hh
bm5lbD4gPiBtX21lc3NhZ2VQb3J0Q2hhbm5lbHM7CiAjZW5kaWYKIAotICAgIEhhc2hTZXQ8U3Ry
aW5nLCBDYXNlRm9sZGluZ0hhc2g+IG1fbWltZVR5cGVzV2l0aEN1c3RvbVJlcHJlc2VudGF0aW9u
czsKLQogICAgIFRleHRDaGVja2VyU3RhdGUgbV90ZXh0Q2hlY2tlclN0YXRlOwogICAgIFdlYkdl
b2xvY2F0aW9uTWFuYWdlciBtX2dlb2xvY2F0aW9uTWFuYWdlcjsKICNpZiBFTkFCTEUoQkFUVEVS
WV9TVEFUVVMpCg==
</data>
<flag name="review"
          id="181599"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>