<?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>67774</bug_id>
          
          <creation_ts>2011-09-08 03:45:54 -0700</creation_ts>
          <short_desc>PDF in a frameset is not displayed, always downloads</short_desc>
          <delta_ts>2023-06-13 08:38:52 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://bug-4091-attachments.webkit.org/attachment.cgi?id=3092</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69442</dependson>
    
    <dependson>69492</dependson>
    
    <dependson>69579</dependson>
    
    <dependson>69654</dependson>
    
    <dependson>69804</dependson>
    
    <dependson>69861</dependson>
    
    <dependson>70062</dependson>
    
    <dependson>70072</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Pearcey">kevinp</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>09matches-suspect</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>463981</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Pearcey">kevinp</who>
    <bug_when>2011-09-08 03:45:54 -0700</bug_when>
    <thetext>If you browse to a site that is using a frameset, and one of those frames contains a PDF, it does not display but is always downloaded.

A suitable example is: https://bug-4091-attachments.webkit.org/attachment.cgi?id=3092

The top right frame should display a PDF, but instead it just gets downloaded.

This is a regression from previous behaviour.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464156</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-09-08 10:44:25 -0700</bug_when>
    <thetext>Yes, PDF is not yet working in subframes in WebKit2. I&apos;m surprised that there doesn&apos;t seem to be an earlier report in Bugzilla.

&lt;rdar://problem/8750378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477857</commentid>
    <comment_count>2</comment_count>
      <attachid>109668</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-04 12:55:11 -0700</bug_when>
    <thetext>Created attachment 109668
part 1

First part - not very usable yet, but some things work, and I&apos;d like to proceed with smaller patches. Known limitations:

Zooming, HiDPI
Accessibility (not sure how much can be done for PDF yet).
Not all mouse events are handled yet. You can click in scroll bar, but not drag.
Keyboard events (PgUp/PgDown etc) are not handled yet.
No support for annotations, such as forms.
No support for auto-printing (scripts in PDF).
No progress when loading.
No HUD.
Not sure if I need to implement Plugin::snapshot().
Dynamic scroll bar style changes don&apos;t work.
No rubberbanding when scrolling (that doesn&apos;t work for iframes either yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477858</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 12:58:11 -0700</bug_when>
    <thetext>Attachment 109668 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/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.h:34:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 14 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>477900</commentid>
    <comment_count>4</comment_count>
      <attachid>109668</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-04 13:48:57 -0700</bug_when>
    <thetext>Comment on attachment 109668
part 1

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

Seems the unused argument warning is not on for WebKit2?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:48
&gt; +const uint64_t pdfDocumentRequestID = 1;

I don’t understand the significance of this constant. Is there a comment that could help make it clearer?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:75
&gt; +    info.name = &quot;WebKit built-in PDF&quot;;

Are these ever localized?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:77
&gt; +    MimeClassInfo pdfMimeClassInfo;

Since this is local to the function, I think it could just be classInfo.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:79
&gt; +    pdfMimeClassInfo.desc = &quot;Portable Document Format&quot;;

Are these ever localized?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:94
&gt; +PluginView* BuiltinPDFView::pluginView()
&gt; +{
&gt; +    return static_cast&lt;PluginView*&gt;(controller());
&gt; +}
&gt; +
&gt; +const PluginView* BuiltinPDFView::pluginView() const
&gt; +{
&gt; +    return static_cast&lt;const PluginView*&gt;(controller());
&gt; +}

Is there a way to arrange for these to be inlined?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:100
&gt; +    CGPDFPageRef pdfPage = CGPDFDocumentGetPage(m_pdfDocument.get(), 1); // FIXME: Draw all pages of a document.
&gt; +    if (!pdfPage)
&gt; +        return;

Seems that here in this local function we could just call this “page”.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:156
&gt; +    // FIXME: maybe need a separate ScrollableArea::didRemoveHorizontalScrollbar callback?

Capitalize the &quot;m&quot;?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:158
&gt; +    PluginView* pluginView = this-&gt;pluginView();
&gt; +    if (pluginView)

Define inside the if statement?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:177
&gt; +    if (scrollbar) {

Early return instead of nesting the if?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:242
&gt; +    stateSaver.restore();
&gt; +
&gt; +    stateSaver.save();

The idiom here is a bit awkward. Could we instead have sets of braces and two separate state savers?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:245
&gt; +    IntRect dirtyRect = pluginView()-&gt;parent()-&gt;windowToContents(dirtyRectInWindowCoordinates);
&gt; +    IntPoint documentOriginInWindowCoordinates = pluginView()-&gt;parent()-&gt;windowToContents(IntPoint());

Should these be LayoutRect and LayoutPoint?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:254
&gt; +    IntRect dirtyCornerRect(scrollCornerRect());
&gt; +    dirtyCornerRect.intersect(dirtyRect);
&gt; +    ScrollbarTheme::nativeTheme()-&gt;paintScrollCorner(0, graphicsContext, dirtyCornerRect);

If intersect was a free function we could write this in a more natural way.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:266
&gt; +    return;

Please omit this.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:319
&gt; +void BuiltinPDFView::streamDidReceiveResponse(uint64_t streamID, const KURL&amp; responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String&amp; mimeType, const WTF::String&amp; headers)

Can we leave the names of the arguments out to avoid unused variable warnings?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:321
&gt; +    ASSERT(streamID == pdfDocumentRequestID);

This should be ASSERT_UNUSED.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:326
&gt; +    ASSERT(streamID == pdfDocumentRequestID);

This should be ASSERT_UNUSED.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:408
&gt; +    PlatformWheelEvent platformEvent = platform(event);
&gt; +    ScrollableArea::handleWheelEvent(platformEvent);
&gt; +    return platformEvent.isAccepted();

Seems like this collides with Anders’s recent patch where he got rid of isAccepted.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:438
&gt; +#if PLATFORM(MAC)
&gt; +void BuiltinPDFView::windowFocusChanged(bool hasFocus)

Should leave a blank line here to match the #endif below.

Should omit the argument names to avoid the warning.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:442
&gt; +void BuiltinPDFView::windowAndViewFramesChanged(const WebCore::IntRect&amp; windowFrameInScreenCoordinates, const WebCore::IntRect&amp; viewFrameInWindowCoordinates)

Should omit the argument names to avoid the warning.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:446
&gt; +void BuiltinPDFView::windowVisibilityChanged(bool isVisible)

Should omit the argument names to avoid the warning.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:455
&gt; +void BuiltinPDFView::sendComplexTextInput(const String&amp; textInput)

Should omit the argument names to avoid the warning.

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

If the word is “built-in” then I think it should be BuiltIn rather than Builtin.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.h:64
&gt; +    // Plugin methods

Plug-in

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.h:72
&gt; +#if PLATFORM(MAC)
&gt; +    virtual PlatformLayer* pluginLayer();
&gt; +#endif

I think it’s nicer to separate out #if things rather than having them in the same paragraph with the rest.

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.h:130
&gt; +    RetainPtr&lt;CGPDFDocumentRef&gt; m_pdfDocument;

The m_pdf prefix here is a little ugly. Is there some other clever way to name this that avoids the acronym. Maybe m_contentDocument?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.h:131
&gt; +    WebCore::IntSize m_pdfDocumentSize; // All pages, including gaps.

Ditto, about m_pdf.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:336
&gt; +#if PLATFORM(MAC)

Ideally these are all #if ENABLE(BUILT_IN_PDF_VIEW) instead of #if PLATFORM(MAC). Or something like that. Direct PLATFORM #ifs are not great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477925</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-10-04 14:06:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 109668 [details])
&gt; &gt; Source/WebKit2/WebProcess/Plugins/PDF/BuiltinPDFView.cpp:254
&gt; &gt; +    IntRect dirtyCornerRect(scrollCornerRect());
&gt; &gt; +    dirtyCornerRect.intersect(dirtyRect);
&gt; &gt; +    ScrollbarTheme::nativeTheme()-&gt;paintScrollCorner(0, graphicsContext, dirtyCornerRect);
&gt; 
&gt; If intersect was a free function we could write this in a more natural way.

inline IntRect intersection(const IntRect&amp; a, const IntRect&amp; b);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477972</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-04 14:43:35 -0700</bug_when>
    <thetext>&gt; Are these ever localized?

Most plug-ins don&apos;t have localized descriptions, with the exception of Java and QuickTime. I&apos;m planning to make these localizable in a later patch (forgot to mention that in the list of unfinished things).

&gt; Is there a way to arrange for these to be inlined?

I wanted to avoid including PluginView.h in BuiltinPDFView.h. Not sure which consideration should be stronger in this case.

&gt; Seems that here in this local function we could just call this “page”.

Not changing yet, since this code is largely a placeholder (we need to show all pages, and nicely position them).

&gt; Define inside the if statement?
&gt; Early return instead of nesting the if?

Changed. This is copy/pasted code, and I initially wanted to keep it identical to original to make refactoring a little easier, but that&apos;s extremely insignificant compared to other code differences with FrameView and RenderLayer.

&gt; The idiom here is a bit awkward. Could we instead have sets of braces and two separate state savers?

These will be separate functions soon, when full PDF is rendered.

&gt; I think it’s nicer to separate out #if things rather than having them in the same paragraph with the rest.

Just staying in sync with Plugin.h here.

&gt; The m_pdf prefix here is a little ugly. Is there some other clever way to name this that avoids the acronym. Maybe m_contentDocument?

I&apos;ve been thinking about this for some time (having the same alternative in mind), and I&apos;m not sure if it helps. There are so many &quot;content&quot; things in view and widget classes that I don&apos;t want to add more. Also, PDF document is not what we usually think of as &quot;document&quot; in WebKit.

&gt; Ideally these are all #if ENABLE(BUILT_IN_PDF_VIEW) instead of #if PLATFORM(MAC). Or something like that. Direct PLATFORM #ifs are not great.

I chose to match existing WebKit2 checks for main frame PDF for now. Also, historically there was no interest to implementing built-in PDF support from other ports (e.g. PDFDocumentImage is still under USE(CG)).

Addressed the rest of comments. Thanks for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478003</commentid>
    <comment_count>7</comment_count>
      <attachid>109668</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-04 15:28:39 -0700</bug_when>
    <thetext>Comment on attachment 109668
part 1

Committed &lt;http://trac.webkit.org/changeset/96653&gt;. Clearing review flag and not closing the bug, since it&apos;s not done yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481954</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-11 15:17:51 -0700</bug_when>
    <thetext>Remaining issues:

Zooming, HiDPI
No support for annotations, such as forms.
No support for auto-printing (scripts in PDF).
No progress when loading.
No HUD.
Context menu lacks PDF specific items.
Custom CSS scrollbars are ignored.
PostScript documents are not automatically converted to PDF for display.
No interaction with PDF content (text selection, search, links or forms).
No rubberbanding when scrolling (that doesn&apos;t work for iframes either yet).
Accessibility (not sure if there is any meaningful work to do here).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486234</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-18 12:37:50 -0700</bug_when>
    <thetext>&gt; Custom CSS scrollbars are ignored.

Simon tells me that this is correct. An embedding document should not affect embedded one.

I think that current functionality lets us close this bug. Please file separate bugs for details that still don&apos;t work and are important for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1961329</commentid>
    <comment_count>10</comment_count>
      <attachid>109668</attachid>
    <who name="Mat">09matches-suspect</who>
    <bug_when>2023-06-13 07:55:54 -0700</bug_when>
    <thetext>Comment on attachment 109668
part 1

How do I get use the patch? I just want my device to work normally and not download pdf automatically..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1961336</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2023-06-13 08:38:52 -0700</bug_when>
    <thetext>This fix has shipped well over a decade ago.

If you are still seeing PDFs download, chances are that this a website decision, which browsers ought to respect.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109668</attachid>
            <date>2011-10-04 12:55:11 -0700</date>
            <delta_ts>2011-10-04 15:28:39 -0700</delta_ts>
            <desc>part 1</desc>
            <filename>BuiltinPDFView.txt</filename>
            <type>text/plain</type>
            <size>46352</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NjI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTAtMDQgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY3Nzc0CisgICAgICAgIFBERiBpbiBhIGZyYW1lc2V0IGlz
IG5vdCBkaXNwbGF5ZWQsIGFsd2F5cyBkb3dubG9hZHMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkZWQgZXhwb3J0cyBu
ZWNlc3NhcnkgdG8gc3ViY2xhc3MgYSBTY3JvbGxhYmxlQXJlYS4KKwogMjAxMS0xMC0wNCAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5NDI3
NCk6IHNldHRpbmcgaW5wdXQudmFsdWUgZXJyb25lb3VzbHkgdHJpZ2dlcnMgZm9jdXMgZXZlbnQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgX19a
TjdXZWJDb3JlMTBTY3JvbGxWaWV3MThzZXRGaXhlZExheW91dAogX19aTjdXZWJDb3JlMTBTY3Jv
bGxWaWV3MjBzZXRDYW5IYXZlU2Nyb2xsYmFyc0ViCiBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcy
M3NldFNjcm9sbGJhcnNTdXBwcmVzc2VkRWJiCiBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcyNHdp
bmRvd1Jlc2l6ZXJSZWN0Q2hhbmdlZEV2CitfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXc4YWRkQ2hp
bGRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNldpZGdldEVFRQogX19aTjdXZWJDb3JlMTBkZWxldGVG
aWxlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTBoYW5kQ3Vyc29yRXYKIF9fWk43V2Vi
Q29yZTEwc2V0Q29va2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxFUktOM1dURjZTdHJpbmdF
CkBAIC0zNjgsNyArMzY5LDE2IEBAIF9fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0cnkzMnJlZ2lz
dGVyVVIKIF9fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0cnkzNHNob3VsZExvYWRVUkxTY2hlbWVB
c0VtcHR5RG9jdW1lbnRFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVB
cmVhMTd3aWxsRW5kTGl2ZVJlc2l6ZUV2CiBfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMTl3
aWxsU3RhcnRMaXZlUmVzaXplRXYKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyMmludmFs
aWRhdGVTY3JvbGxDb3JuZXJFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyM2RpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyRVBOU185U2Nyb2xsYmFyRQorX19aTjdXZWJD
b3JlMTRTY3JvbGxhYmxlQXJlYTI0c2V0U2Nyb2xsYmFyT3ZlcmxheVN0eWxlRU5TXzIxU2Nyb2xs
YmFyT3ZlcmxheVN0eWxlRQorX19aTjdXZWJDb3JlMTRTY3JvbGxhYmxlQXJlYTI1ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWEyN3dpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKIF9fWk43
V2ViQ29yZTE0U2Nyb2xsYWJsZUFyZWEyOHNldFNjcm9sbE9mZnNldEZyb21JbnRlcm5hbHNFUktO
U184SW50UG9pbnRFCitfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhMjl3aWxsUmVtb3ZlSG9y
aXpvbnRhbFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKK19fWk43V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWFDMkV2CitfX1pON1dlYkNvcmUxNFNjcm9sbGFibGVBcmVhRDJFdgorX19aTjdXZWJDb3Jl
MTRTY3JvbGxhYmxlQXJlYTE2aGFuZGxlV2hlZWxFdmVudEVSTlNfMThQbGF0Zm9ybVdoZWVsRXZl
bnRFCiBfX1pON1dlYkNvcmUxNFNjcm9sbGJhclRoZW1lMTFuYXRpdmVUaGVtZUV2CiBfX1pON1dl
YkNvcmUxNFNlY3VyaXR5T3JpZ2luMTR0aHJlYWRzYWZlQ29weUV2CiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5T3JpZ2luMTZjcmVhdGVGcm9tU3RyaW5nRVJLTjNXVEY2U3RyaW5nRQpAQCAtNDA0LDkg
KzQxNCwxMiBAQCBfX1pON1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjE1c2V0SW5pdGlhCiBfX1pO
N1dlYkNvcmUxNUZvY3VzQ29udHJvbGxlcjlzZXRBY3RpdmVFYgogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0NvbnRleHQxMnNldEZpbGxDb2xvckVSS05TXzVDb2xvckVOU18xMENvbG9yU3BhY2VFCiBf
X1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1c2V0RmlsbEdyYWRpZW50RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzhHcmFkaWVudEVFRQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxOHNl
dFNob3VsZEFudGlhbGlhc0ViCitfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIwc2V0U2hv
dWxkU21vb3RoRm9udHNFYgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQyMGVuZFRyYW5z
cGFyZW5jeUxheWVyRXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NDb250ZXh0MjFzZXRDb21wb3Np
dGVPcGVyYXRpb25FTlNfMTdDb21wb3NpdGVPcGVyYXRvckUKIF9fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MjJiZWdpblRyYW5zcGFyZW5jeUxheWVyRWYKK19fWk43V2ViQ29yZTE1R3JhcGhp
Y3NDb250ZXh0MjhzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5RU5TXzIwSW50ZXJwb2xhdGlv
blF1YWxpdHlFCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfNFBhdGhF
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfN0ludFJlY3RFCiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDRjbGlwRVJLTlNfOUZsb2F0UmVjdEUKQEAgLTcwNiwx
MCArNzE5LDEyIEBAIF9fWk43V2ViQ29yZTRQYWdlMTVhZGRTY2hlZHVsZVBhaXJFTjNXVEYKIF9f
Wk43V2ViQ29yZTRQYWdlMTVkaWRNb3ZlT25zY3JlZW5FdgogX19aTjdXZWJDb3JlNFBhZ2UxNnNl
dENhblN0YXJ0TWVkaWFFYgogX19aTjdXZWJDb3JlNFBhZ2UxNnNldERlZmVyc0xvYWRpbmdFYgor
X19aTjdXZWJDb3JlNFBhZ2UxN2FkZFNjcm9sbGFibGVBcmVhRVBOU18xNFNjcm9sbGFibGVBcmVh
RQogX19aTjdXZWJDb3JlNFBhZ2UxN3dpbGxNb3ZlT2Zmc2NyZWVuRXYKIF9fWk43V2ViQ29yZTRQ
YWdlMThyZW1vdmVTY2hlZHVsZVBhaXJFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTJTY2hlZHVsZVBh
aXJFRUUKIF9fWk43V2ViQ29yZTRQYWdlMThzZXRQYWdlU2NhbGVGYWN0b3JFZlJLTlNfOEludFBv
aW50RQogX19aTjdXZWJDb3JlNFBhZ2UxOXZpc2l0ZWRTdGF0ZUNoYW5nZWRFUE5TXzlQYWdlR3Jv
dXBFeQorX19aTjdXZWJDb3JlNFBhZ2UyMHJlbW92ZVNjcm9sbGFibGVBcmVhRVBOU18xNFNjcm9s
bGFibGVBcmVhRQogX19aTjdXZWJDb3JlNFBhZ2UyMHNldERldmljZVNjYWxlRmFjdG9yRWYKIF9f
Wk43V2ViQ29yZTRQYWdlMjB1bm1hcmtBbGxUZXh0TWF0Y2hlc0V2CiBfX1pON1dlYkNvcmU0UGFn
ZTIxbWFya0FsbE1hdGNoZXNGb3JUZXh0RVJLTjNXVEY2U3RyaW5nRWpiagpAQCAtODU3LDkgKzg3
MiwxMSBAQCBfX1pON1dlYkNvcmU4RG9jdW1lbnQxN2dldEZvY3VzYWJsZU5vZGVzCiBfX1pON1dl
YkNvcmU4RG9jdW1lbnQxOWFjY2Vzc1NWR0V4dGVuc2lvbnNFdgogX19aTjdXZWJDb3JlOERvY3Vt
ZW50MjBzdHlsZVNlbGVjdG9yQ2hhbmdlZEVOU18yM1N0eWxlU2VsZWN0b3JVcGRhdGVGbGFnRQog
X19aTjdXZWJDb3JlOERvY3VtZW50MjJjcmVhdGVEb2N1bWVudEZyYWdtZW50RXYKK19fWk43V2Vi
Q29yZThEb2N1bWVudDIzZGlkQWRkV2hlZWxFdmVudEhhbmRsZXJFdgogX19aTjdXZWJDb3JlOERv
Y3VtZW50MjRhZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXJFUE5TXzIxTWVkaWFDYW5TdGFydExpc3Rl
bmVyRQogX19aTjdXZWJDb3JlOERvY3VtZW50MjRzZXRTaG91bGRDcmVhdGVSZW5kZXJlcnNFYgog
X19aTjdXZWJDb3JlOERvY3VtZW50MjVzY2hlZHVsZUZvcmNlZFN0eWxlUmVjYWxjRXYKK19fWk43
V2ViQ29yZThEb2N1bWVudDI2ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXJFdgogX19aTjdXZWJD
b3JlOERvY3VtZW50MjZwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVsc0VpUk5TXzdJbnRTaXplRVJp
UzNfUzNfUzNfCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQyN3JlbW92ZU1lZGlhQ2FuU3RhcnRMaXN0
ZW5lckVQTlNfMjFNZWRpYUNhblN0YXJ0TGlzdGVuZXJFCiBfX1pON1dlYkNvcmU4RG9jdW1lbnQz
NnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0c0V2CkBAIC0xMDQyLDggKzEwNTks
MTMgQEAgX19aTjdXZWJDb3JlOVBhZ2VHcm91cDI2cmVtb3ZlVXNlclNjcmlwdAogX19aTjdXZWJD
b3JlOVBhZ2VHcm91cDI2c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3NFYgogX19aTjdXZWJDb3Jl
OVBhZ2VHcm91cDI5cmVtb3ZlVXNlclN0eWxlU2hlZXRGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBl
cldvcmxkRVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmU5UGFnZUdyb3VwMzByZW1vdmVVc2VyU3R5
bGVTaGVldHNGcm9tV29ybGRFUE5TXzE1RE9NV3JhcHBlcldvcmxkRQorX19aTjdXZWJDb3JlOVNj
cm9sbGJhcjdtb3VzZVVwRXYKIF9fWk43V2ViQ29yZTlQYWdlR3JvdXA5cGFnZUdyb3VwRVJLTjNX
VEY2U3RyaW5nRQorX19aTjdXZWJDb3JlOVNjcm9sbGJhcjEzc2V0UHJvcG9ydGlvbkVpaQorX19a
TjdXZWJDb3JlOVNjcm9sbGJhcjIxY3JlYXRlTmF0aXZlU2Nyb2xsYmFyRVBOU18xNFNjcm9sbGFi
bGVBcmVhRU5TXzIwU2Nyb2xsYmFyT3JpZW50YXRpb25FTlNfMjBTY3JvbGxiYXJDb250cm9sU2l6
ZUUKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIyMm1heE92ZXJsYXBCZXR3ZWVuUGFnZXNFdgorX19a
TjdXZWJDb3JlOVNjcm9sbGJhcjhzZXRTdGVwc0VpaWkKK19fWk43V2ViQ29yZTlTY3JvbGxiYXI5
bW91c2VEb3duRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pON1dlYkNvcmU5VGltZXJC
YXNlNHN0b3BFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZTVzdGFydEVkZAogX19aTjdXZWJDb3Jl
OVRpbWVyQmFzZUMyRXYKQEAgLTEwNzQsNiArMTA5Niw3IEBAIF9fWk5LN1dlYkNvcmUxMFNjcm9s
bFZpZXcxNHNjcm9sbGJhck1vZGUKIF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcxNHVzZUZpeGVk
TGF5b3V0RXYKIF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcxNWZpeGVkTGF5b3V0U2l6ZUV2CiBf
X1pOSzdXZWJDb3JlMTBTY3JvbGxWaWV3MTZjb250ZW50c1RvV2luZG93RVJLTlNfN0ludFJlY3RF
CitfX1pOSzdXZWJDb3JlMTBTY3JvbGxWaWV3MTZ3aW5kb3dUb0NvbnRlbnRzRVJLTlNfN0ludFJl
Y3RFCiBfX1pOSzdXZWJDb3JlMTBTY3JvbGxWaWV3MTZjb250ZW50c1RvV2luZG93RVJLTlNfOElu
dFBvaW50RQogX19aTks3V2ViQ29yZTEwU2Nyb2xsVmlldzE2d2luZG93VG9Db250ZW50c0VSS05T
XzhJbnRQb2ludEUKIF9fWk5LN1dlYkNvcmUxMFNjcm9sbFZpZXcxOHZpc2libGVDb250ZW50UmVj
dEViCkBAIC0xMTY4LDEyICsxMTkxLDE0IEBAIF9fWk5LN1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9u
NmJvdW5kc0ViCiBfX1pOSzdXZWJDb3JlMTRSZW5kZXJMaXN0SXRlbTEwbWFya2VyVGV4dEV2CiBf
X1pOSzdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTEwY29ubmVjdGlvbkV2CiBfX1pOSzdXZWJDb3Jl
MTRSZXNvdXJjZUxvYWRlcjExZnJhbWVMb2FkZXJFdgorX19aTks3V2ViQ29yZTE0U2Nyb2xsYWJs
ZUFyZWExNHNjcm9sbEFuaW1hdG9yRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMTBj
YW5EaXNwbGF5RVJLTlNfNEtVUkxFCiBfX1pOSzdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4ZGF0
YWJhc2VJZGVudGlmaWVyRXYKIF9fWk5LN1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luNWVxdWFsRVBL
UzBfCiBfX1pOSzdXZWJDb3JlMTVGb2N1c0NvbnRyb2xsZXIxOGZvY3VzZWRPck1haW5GcmFtZUV2
CiBfX1pOSzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNXBsYXRmb3JtQ29udGV4dEV2CiBfX1pO
SzdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHQxNnBhaW50aW5nRGlzYWJsZWRFdgorX19aTks3V2Vi
Q29yZTE1R3JhcGhpY3NDb250ZXh0MjB1cGRhdGluZ0NvbnRyb2xUaW50c0V2CiBfX1pOSzdXZWJD
b3JlMTVQcm9ncmVzc1RyYWNrZXIxN2VzdGltYXRlZFByb2dyZXNzRXYKIF9fWk5LN1dlYkNvcmUx
NVByb3RlY3Rpb25TcGFjZTEwc2VydmVyVHlwZUV2CiBfX1pOSzdXZWJDb3JlMTVQcm90ZWN0aW9u
U3BhY2UyNnJlY2VpdmVzQ3JlZGVudGlhbFNlY3VyZWx5RXYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk2NjA1
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC01NDUyLDcgKzU0NTIsNyBAQAogCQlDNkYwOEZDQTE0MzEwMDBEMDA2
ODU4NDkgLyogSlNNdXRhdGlvblJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzZGMDhGQzgxNDMxMDAwRDAwNjg1ODQ5IC8qIEpTTXV0YXRpb25S
ZWNvcmQuaCAqLzsgfTsKIAkJQzZGNDEwNDcxMzBDNkU4OTAwMzkzREU0IC8qIEVudHJ5QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNkY0MTA0
NjEzMEM2RTg5MDAzOTNERTQgLyogRW50cnlCYXNlLmNwcCAqLzsgfTsKIAkJQ0EzQkY2N0MxMEQ5
OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3Jv
bGxBbmltYXRvci5jcHAgKi87IH07Ci0JCUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3Jv
bGxBbmltYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IH07CisJ
CUNBM0JGNjdFMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0EzQkY2N0QxMEQ5OUJBRTAwRTZD
RTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQ0Q4MjAzMEExMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVs
bHNjcmVlbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEODIwMzA2MTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RDgyMDMwNzEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlci5t
bSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVduby11bmRlZiI7IH07IH07CiAJ
CUNEODIwMzBDMTM5NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDgyMDMwODEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuSFVEV2luZG93
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NjYyOCkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDExLTEwLTA0ICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3NAorICAgICAgICBQREYgaW4gYSBmcmFtZXNl
dCBpcyBub3QgZGlzcGxheWVkLCBhbHdheXMgZG93bmxvYWRzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERjogQWRkZWQuCisgICAg
ICAgIEFkZGVkIEJ1aWx0aW5QREZWaWV3IGNsYXNzLiBJdCBpbXBsZW1lbnRzIFNjcm9sbGFibGVB
cmVhIGFuZCBQbHVnaW4sIHdvcmtpbmcgd2l0aCBpZnJhbWVzLAorICAgICAgICBvYmplY3RzIGFu
ZCBlbWJlZHMuIFRoZSBpbXBsZW1lbnRhdGlvbiB0YXJnZXRzIE1hYyBwb3J0IG9ubHksIGZpeGlu
ZyBhIFdlYktpdDIgcmVncmVzc2lvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0
LmNwcDogKFdlYktpdDo6V2ViQ29udGV4dDo6Z2V0UGx1Z2lucyk6IFRlbGwgV2ViQ29yZSB0aGF0
IHRoZXJlIGlzIGEKKyAgICAgICAgcGx1Zy1pbiBmb3IgUERGLCBzbyB0aGF0IGl0IGluc3RhbnRp
YXRlcyBpdCBpbiBhIHJlZ3VsYXIgZmFzaGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9XZWJG
cmFtZVByb3h5LmNwcDogKFdlYktpdDo6V2ViRnJhbWVQcm94eTo6Y2FuU2hvd01JTUVUeXBlKTog
V2UgY2FuIG5vdyBzaG93CisgICAgICAgIFBERiBub3Qgb25seSBpbiBtYWluIGZyYW1lLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdGluUERGVmlldy5jcHA6IEFkZGVk
LiBUaGlzIGlzIGxhcmdlbHkgYW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWEgbm93LCB3aGljaCBjYW4gcmVuZGVyIHRoZSBmaXJzdCBwYWdlIG9mIGEgUERGLiBGdXJ0
aGVyIGltcHJvdmVtZW50cyB0byBjb21lLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9CdWlsdGluUERGVmlldy5oOiBBZGRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW4uY3BwOiAoV2ViS2l0OjpQbHVnaW46OnVwZGF0ZUNvbnRyb2xUaW50cyk6IEdp
dmUgUGx1Z2luIGEgY2hhbmNlCisgICAgICAgIHRvIGludmFsaWRhdGUgaXRzIHRpbnRhYmxlIGNv
bnRyb2xzIC0gaXQncyBuZWNlc3NhcnkgZm9yIFBERiBiZWNhdXNlIHNjcm9sbGJhcnMgYXJlIHRp
bnRhYmxlLiAKKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaDogKFdlYktp
dDo6UGx1Z2luOjpjb250cm9sbGVyKTogQWRkZWQgYSBjb25zdCB2ZXJzaW9uLCBzaW5jZQorICAg
ICAgICBzb21lIFNjcm9sbGFibGVBcmVhIG1ldGhvZHMgYXJlIGNvbnN0LgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOiAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpw
YWludCk6IENhbGwgdXBkYXRlQ29udHJvbFRpbnRzCisgICAgICAgIGF0IHVwZGF0aW5nQ29udHJv
bFRpbnRzIHBoYXNlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
aDogUERGIHBsdWctaW4gbmVlZHMgdG8gdGlua2VyIHdpdGggZW1iZWRkaW5nIEZyYW1lVmlldyB0
bworICAgICAgICB1c2UgU2Nyb2xsYmFyIGNsYXNzLCBzbyBpdCBuZWVkcyB0byBjYXN0IGl0cyBQ
bHVnaW5Db250cm9sbGVyIHVwIHRvIFBsdWdpblZpZXcuIEl0J3MgdW5mb3J0dW5hdGUKKyAgICAg
ICAgdGhhdCBQbHVnaW5WaWV3IGhhcyBzbyBtdWNoIE5QQVBJIHNwZWNpZmljIGNvZGUsIGJ1dCB0
aGF0J3MgaG93IGl0IGlzIG5vdy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDogKFdlYktpdDo6V2ViUGFnZTo6Y3JlYXRlUGx1Z2luKTogSWYgdGhlcmUgaXMgbm8g
cmVhbCBwbHVnLWluCisgICAgICAgIGluc3RhbGxlZCBmb3IgUERGLCBpbnN0YW50aWF0ZSBidWls
dC1pbiBvbmUuCisKIDIwMTEtMTAtMDQgIEplZmYgTWlsbGVyICA8amVmZm1AYXBwbGUuY29tPgog
CiAgICAgICAgIFdLUHJlZmVyZW5jZXMgc2hvdWxkIGFsbG93IGNvbnRyb2wgb2YgYXBwbGljYXRp
b24gY2hyb21lIG1vZGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5j
cHAJKHJldmlzaW9uIDk2NjA1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKKyNpZiBQTEFURk9S
TShNQUMpCisjaW5jbHVkZSAiQnVpbHRpblBERlZpZXcuaCIKKyNlbmRpZgorCiAjaWZuZGVmIE5E
RUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNlbmRpZgpAQCAt
NTU1LDYgKzU1OSwxMSBAQCB2b2lkIFdlYkNvbnRleHQ6OmdldFBsdWdpbnMoYm9vbCByZWZyZXNo
CiAgICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbnMgPSBtX3BsdWdpbkluZm9TdG9y
ZS5wbHVnaW5zKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsg
KytpKQogICAgICAgICBwbHVnaW5JbmZvcy5hcHBlbmQocGx1Z2luc1tpXS5pbmZvKTsKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQn
cyBub3QgdXNlZCB3aGVuIGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KKyAgICBwbHVnaW5J
bmZvcy5hcHBlbmQoQnVpbHRpblBERlZpZXc6OnBsdWdpbkluZm8oKSk7CisjZW5kaWYKIH0KIAog
dm9pZCBXZWJDb250ZXh0OjpnZXRQbHVnaW5QYXRoKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBTdHJpbmcmIHBsdWdpblBhdGgpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCShyZXZpc2lvbiA5NjYwNSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJGcmFtZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5LDggKzEwOSw4IEBAIGJvb2wgV2ViRnJhbWVQcm94eTo6Y2FuU2hvd01JTUVUeXBl
KGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgLy8g
T24gTWFjLCB3ZSBjYW4gc2hvdyBQREZzIGluIHRoZSBtYWluIGZyYW1lLgotICAgIGlmIChpc01h
aW5GcmFtZSgpICYmICFtaW1lVHlwZS5pc0VtcHR5KCkpCisgICAgLy8gT24gTWFjLCB3ZSBjYW4g
c2hvdyBQREZzLgorICAgIGlmICghbWltZVR5cGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
V2ViQ29udGV4dDo6cGRmQW5kUG9zdFNjcmlwdE1JTUVUeXBlcygpLmNvbnRhaW5zKG1pbWVUeXBl
KTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODI1LDYg
KzgyNSw3IEBACiAJCUUxNzlGRDlDMTM0RDM4MDYwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE3OUZE
OUIxMzREMzgwNjAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLmggKi87IH07CiAJCUUxNzlG
RDlGMTM0RDM4MjUwMDE1Qjg4MyAvKiBBcmd1bWVudENvZGVyc01hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzlGRDlFMTM0RDM4MjUwMDE1Qjg4
MyAvKiBBcmd1bWVudENvZGVyc01hYy5tbSAqLzsgfTsKIAkJRTE4QzkyRjQxMkRCOUU3MTAwQ0Yy
QUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZvLmNwcCAqLzsg
fTsKKwkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0aW5QREZWaWV3LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTk4NzVDMTQyQkZD
OTcwMEJCMkRFNyAvKiBCdWlsdGluUERGVmlldy5jcHAgKi87IH07CiAJCUUxQTMxNzMyMTM0Q0VB
NkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUEzMTczMTEzNENFQTZDMDA3QzlBNEYgLyogQXR0cmli
dXRlZFN0cmluZy5oICovOyB9OwogCQlFMUEzMTczNTEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmli
dXRlZFN0cmluZy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQTMxNzM0MTM0Q0VBODAwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLm1tICovOyB9
OwogCQlFMUJCMTZBNDEzMjAxQjlCMDBGNDk0MzEgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRj
aGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJC
MTY4ODEzMjAxOEJBMDBGNDk0MzEgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi87
IH07CkBAIC0xODAyLDYgKzE4MDMsOCBAQAogCQlFMTc5RkQ5QjEzNEQzODA2MDAxNUI4ODMgLyog
QXJndW1lbnRDb2RlcnNNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJn
dW1lbnRDb2RlcnNNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE3OUZEOUUx
MzREMzgyNTAwMTVCODgzIC8qIEFyZ3VtZW50Q29kZXJzTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXJndW1lbnRDb2RlcnNNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxOEM5MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJpbnRJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE5OTg3NUExNDJCRjlCODAwQkIyREU3IC8q
IEJ1aWx0aW5QREZWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJ1aWx0
aW5QREZWaWV3Lmg7IHBhdGggPSBQREYvQnVpbHRpblBERlZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8qIEJ1aWx0aW5QREZWaWV3
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJ1aWx0aW5QREZWaWV3
LmNwcDsgcGF0aCA9IFBERi9CdWlsdGluUERGVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0dHJpYnV0ZWRTdHJpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0
dHJpYnV0ZWRTdHJpbmcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBBdHRyaWJ1dGVkU3RyaW5nLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJC
MTY4ODEzMjAxOEJBMDBGNDk0MzEgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA3MSw2ICsyMDc0LDcgQEAKIAkJ
MUE2RkI3QUExMUU2NEI0OTAwREIxMzcxIC8qIFBsdWdpbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUUxOTk4NzVCMTQyQkY5Q0YwMEJCMkRFNyAvKiBQ
REYgKi8sCiAJCQkJMUE2RkI5MDgxMUU2NkZCMTAwREIxMzcxIC8qIE5ldHNjYXBlICovLAogCQkJ
CTFBNkZCN0QwMTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uY3BwICovLAogCQkJCTFBNkZCN0Qx
MTFFNjUxRTIwMERCMTM3MSAvKiBQbHVnaW4uaCAqLywKQEAgLTM0MzYsNiArMzQ0MCwxNSBAQAog
CQkJcGF0aCA9IEZ1bGxTY3JlZW4vbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJRTE5OTg3NUIxNDJCRjlDRjAwQkIyREU3IC8qIFBERiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRTE5OTg3NUMxNDJCRkM5NzAwQkIyREU3IC8q
IEJ1aWx0aW5QREZWaWV3LmNwcCAqLywKKwkJCQlFMTk5ODc1QTE0MkJGOUI4MDBCQjJERTcgLyog
QnVpbHRpblBERlZpZXcuaCAqLywKKwkJCSk7CisJCQluYW1lID0gUERGOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRjYzODk1NUExMzNCRjU3RDAwODk0MUQ1IC8qIG1hYyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC00NTU1LDYgKzQ1
NjgsNyBAQAogCQkJCTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTJCQjZEMDE0MTE3QjREMDAwRjM1RDQgLyogUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzgwMUMwOTkxNDIyOTBDNDAwRkFGOUFGIC8qIFdlYkhpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRTE5OTg3NUUxNDJDMDQ1NDAwQkIyREU3IC8qIEJ1aWx0aW5QREZWaWV3LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTc0QUE3MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21l
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2MkU3MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBX
S0hpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5jcHAJKHJldmlzaW9uIDk2NjA1KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4LDQgKzk4LDggQEAgdm9pZCBQbHVnaW46OmRlc3Ryb3lQbHVnaW4oKQogICAg
IG1fcGx1Z2luQ29udHJvbGxlciA9IDA7CiB9CiAKK3ZvaWQgUGx1Z2luOjp1cGRhdGVDb250cm9s
VGludHMoR3JhcGhpY3NDb250ZXh0KikKK3sKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oCShyZXZpc2lv
biA5NjYwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5z
IHRoZSBwbHVnLWluIGNvbnRyb2xsZXIgZm9yIHRoaXMgcGx1Zy1pbi4KICAgICBQbHVnaW5Db250
cm9sbGVyKiBjb250cm9sbGVyKCkgeyByZXR1cm4gbV9wbHVnaW5Db250cm9sbGVyOyB9CisgICAg
Y29uc3QgUGx1Z2luQ29udHJvbGxlciogY29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luQ29udHJvbGxlcjsgfQogCiAgICAgdmlydHVhbCB+UGx1Z2luKCk7CiAKQEAgLTk4LDYgKzk5
LDkgQEAgcHVibGljOgogICAgIC8vIGRpcnR5IHJlY3QgYXJlIGluIHdpbmRvdyBjb29yZGluYXRl
cy4gVGhlIGNvbnRleHQgaXMgc2F2ZWQvcmVzdG9yZWQgYnkgdGhlIGNhbGxlci4KICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgZGlydHlSZWN0KSA9IDA7CiAKKyAgICAvLyBJbnZhbGlkYXRlIG5hdGl2ZSB0aW50
YWJsZSBjb250cm9scy4gVGhlIHBhc3NlZC1pbiBjb250ZXh0IGlzIGluIHdpbmRvdyBjb29yZGlu
YXRlcy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udHJvbFRpbnRzKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCopOworCiAgICAgLy8gVGVsbHMgdGhlIHBsdWctaW4gdG8gZHJhdyBpdHNlbGYg
aW50byBhIGJpdG1hcCwgYW5kIHJldHVybiB0aGF0LgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IHNuYXBzaG90KCkgPSAwOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiA5NjYwNSkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTI3LDYgKzUyNyw5IEBAIHZvaWQgUGx1Z2luVmlldzo6c2V0RnJhbWVS
ZWN0KGNvbnN0IFdlYkMKIAogdm9pZCBQbHVnaW5WaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKKyAgICBpZiAobV9wbHVnaW4g
JiYgY29udGV4dC0+dXBkYXRpbmdDb250cm9sVGludHMoKSkKKyAgICAgICAgbV9wbHVnaW4tPnVw
ZGF0ZUNvbnRyb2xUaW50cyhjb250ZXh0KTsKKwogICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rp
c2FibGVkKCkgfHwgIW1fcGx1Z2luIHx8ICFtX2lzSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVy
bjsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5oCShyZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUGx1Z2luVmlldyA6
IHB1YmxpYyBXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSwgV2ViQ29yZTo6TWVkaWFDYW5TdGFydExp
c3RlbmVyLCBQbHVnaW5Db250cm9sbGVyLCBXZWJGcmFtZTo6TG9hZExpc3RlbmVyIHsKK2NsYXNz
IFBsdWdpblZpZXcgOiBwdWJsaWMgV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2UsIHB1YmxpYyBQbHVn
aW5Db250cm9sbGVyLCBwcml2YXRlIFdlYkNvcmU6Ok1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHJp
dmF0ZSBXZWJGcmFtZTo6TG9hZExpc3RlbmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudD4sIFBhc3NSZWZQdHI8UGx1Z2luPiwgY29uc3QgUGx1Z2luOjpQYXJhbWV0ZXJzJik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvQnVpbHRpblBERlZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvQnVpbHRpblBERlZpZXcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdGluUERGVmlldy5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkJ1aWx0aW5QREZWaWV3LmgiCisKKyNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCisjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJF
dmVudENvbnZlcnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQSGVhZGVyTWFwLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QbHVnaW5EYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxBbmltYXRvci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y29uc3QgdWludDY0X3QgcGRmRG9jdW1lbnRSZXF1ZXN0SUQgPSAxOworCitQYXNzUmVmUHRyPEJ1
aWx0aW5QREZWaWV3PiBCdWlsdGluUERGVmlldzo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBCdWlsdGluUERGVmlldyhwYWdlKSk7Cit9CisKK0J1aWx0aW5Q
REZWaWV3OjpCdWlsdGluUERGVmlldyhQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7
CisgICAgbV9wYWdlLT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKK30KKworQnVpbHRpblBERlZp
ZXc6On5CdWlsdGluUERGVmlldygpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdl
LT5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKSk7CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHdpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJhcihtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsK
K30KKworUGx1Z2luSW5mbyBCdWlsdGluUERGVmlldzo6cGx1Z2luSW5mbygpCit7CisgICAgUGx1
Z2luSW5mbyBpbmZvOworICAgIGluZm8ubmFtZSA9ICJXZWJLaXQgYnVpbHQtaW4gUERGIjsKKwor
ICAgIE1pbWVDbGFzc0luZm8gcGRmTWltZUNsYXNzSW5mbzsKKyAgICBwZGZNaW1lQ2xhc3NJbmZv
LnR5cGUgPSJhcHBsaWNhdGlvbi9wZGYiOworICAgIHBkZk1pbWVDbGFzc0luZm8uZGVzYyA9ICJQ
b3J0YWJsZSBEb2N1bWVudCBGb3JtYXQiOworICAgIHBkZk1pbWVDbGFzc0luZm8uZXh0ZW5zaW9u
cy5hcHBlbmQoInBkZiIpOworCisgICAgaW5mby5taW1lcy5hcHBlbmQocGRmTWltZUNsYXNzSW5m
byk7CisgICAgcmV0dXJuIGluZm87Cit9CisKK1BsdWdpblZpZXcqIEJ1aWx0aW5QREZWaWV3Ojpw
bHVnaW5WaWV3KCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGx1Z2luVmlldyo+KGNvbnRy
b2xsZXIoKSk7Cit9CisKK2NvbnN0IFBsdWdpblZpZXcqIEJ1aWx0aW5QREZWaWV3OjpwbHVnaW5W
aWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUGx1Z2luVmlldyo+
KGNvbnRyb2xsZXIoKSk7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OmNhbGN1bGF0ZURvY3Vt
ZW50U2l6ZSgpCit7CisgICAgQ0dQREZQYWdlUmVmIHBkZlBhZ2UgPSBDR1BERkRvY3VtZW50R2V0
UGFnZShtX3BkZkRvY3VtZW50LmdldCgpLCAxKTsgLy8gRklYTUU6IERyYXcgYWxsIHBhZ2VzIG9m
IGEgZG9jdW1lbnQuCisgICAgaWYgKCFwZGZQYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBD
R1JlY3QgYm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQREZDcm9wQm94KTsK
KyAgICBpZiAoQ0dSZWN0SXNFbXB0eShib3gpKQorICAgICAgICBib3ggPSBDR1BERlBhZ2VHZXRC
b3hSZWN0KHBkZlBhZ2UsIGtDR1BERk1lZGlhQm94KTsKKyAgICBtX3BkZkRvY3VtZW50U2l6ZSA9
IEludFNpemUoYm94LnNpemUpOworfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKCkKK3sKKyAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlm
IChtX2ZyYW1lUmVjdC53aWR0aCgpID49IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisgICAg
ICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0gZWxz
ZSBpZiAobV9mcmFtZVJlY3Qud2lkdGgoKSA8IG1fcGRmRG9jdW1lbnRTaXplLndpZHRoKCkpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKworICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIGlm
IChtX2ZyYW1lUmVjdC5oZWlnaHQoKSA+PSBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworICAgIH0gZWxz
ZSBpZiAobV9mcmFtZVJlY3QuaGVpZ2h0KCkgPCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSkK
KyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IChtX2hvcml6
b250YWxTY3JvbGxiYXIgJiYgIW1faG9yaXpvbnRhbFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkpID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDA7CisgICAgaW50IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAmJiAhbV92ZXJ0aWNh
bFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+
d2lkdGgoKSA6IDA7CisKKyAgICAvLyBGSVhNRTogVXNlIGRvY3VtZW50IHBhZ2Ugc2l6ZSBmb3Ig
UGFnZURvd24gc3RlcC4KKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gbV9wZGZEb2N1bWVudFNpemUu
aGVpZ2h0KCk7CisgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudEhlaWdodCAq
IFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudEhlaWdodCAt
IFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CisKKyAgICBpZiAobV9o
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX2ZyYW1lUmVjdC53aWR0aCgp
IC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCwgbV9wZGZEb2N1bWVudFNpemUud2lkdGgoKSk7Cisg
ICAgICAgIEludFJlY3Qgc2Nyb2xsYmFyUmVjdChwbHVnaW5WaWV3KCktPngoKSwgcGx1Z2luVmll
dygpLT55KCkgKyBtX2ZyYW1lUmVjdC5oZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCksIG1fZnJhbWVSZWN0LndpZHRoKCksIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHNj
cm9sbGJhclJlY3QuY29udHJhY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgMCk7Cisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHNjcm9sbGJhclJlY3Qp
OworICAgIH0KKyAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihtX2Zy
YW1lUmVjdC5oZWlnaHQoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsIG1fcGRmRG9jdW1l
bnRTaXplLmhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxiYXJSZWN0KEludFJlY3Qo
cGx1Z2luVmlldygpLT54KCkgKyBtX2ZyYW1lUmVjdC53aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwgcGx1Z2luVmlldygpLT55KCksIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksIG1fZnJhbWVSZWN0LmhlaWdodCgpKSk7CisgICAgICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXJSZWN0LmNvbnRyYWN0KDAsIG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRGcmFtZVJlY3Qoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorfQorCit2b2lkIEJ1aWx0aW5QREZW
aWV3OjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQorewor
ICAgIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZGlkQWRkV2hlZWxFdmVudEhh
bmRsZXIoKTsKKyAgICBTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihz
Y3JvbGxiYXIpOworfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3Ojp3aWxsUmVtb3ZlSG9yaXpvbnRh
bFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAvLyBGSVhNRTog
bWF5YmUgbmVlZCBhIHNlcGFyYXRlIFNjcm9sbGFibGVBcmVhOjpkaWRSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyIGNhbGxiYWNrPworICAgIFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSB0aGlzLT5w
bHVnaW5WaWV3KCk7CisgICAgaWYgKHBsdWdpblZpZXcpCisgICAgICAgIHBsdWdpblZpZXctPmZy
YW1lKCktPmRvY3VtZW50KCktPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7Cit9CisKK1Bh
c3NSZWZQdHI8U2Nyb2xsYmFyPiBCdWlsdGluUERGVmlldzo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGN1
c3RvbSBzY3JvbGxiYXIgc3R5bGVzLgorICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldCA9IFNj
cm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFy
U2Nyb2xsYmFyKTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikK
KyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS0+ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRn
ZXQuZ2V0KCkpOworICAgIGVsc2UgCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCktPmRpZEFkZFZl
cnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CisgICAgcGx1Z2luVmlldygpLT5mcmFtZSgp
LT52aWV3KCktPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNj
cm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250
YWxTY3JvbGxiYXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGlmIChzY3JvbGxiYXIpIHsK
KyAgICAgICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLT53aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxiYXIuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigp
LT53aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKKworICAgICAg
ICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICAgICAgc2Nyb2xsYmFyLT5kaXNj
b25uZWN0RnJvbVNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHNjcm9sbGJhciA9IDA7CisgICAg
fQorfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3OjpwZGZEb2N1bWVudERpZExvYWQoKQoreworICAg
IGNhbGN1bGF0ZURvY3VtZW50U2l6ZSgpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKworICAg
IGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZShJbnRSZWN0KDAsIDAsIG1fZnJhbWVSZWN0LndpZHRo
KCksIG1fZnJhbWVSZWN0LmhlaWdodCgpKSk7Cit9CisKK2Jvb2wgQnVpbHRpblBERlZpZXc6Omlu
aXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICAvLyBMb2FkIHRo
ZSBzcmMgVVJMIGlmIG5lZWRlZC4KKyAgICBpZiAoIXBhcmFtZXRlcnMubG9hZE1hbnVhbGx5ICYm
ICFwYXJhbWV0ZXJzLnVybC5pc0VtcHR5KCkpCisgICAgICAgIGNvbnRyb2xsZXIoKS0+bG9hZFVS
TChwZGZEb2N1bWVudFJlcXVlc3RJRCwgIkdFVCIsIHBhcmFtZXRlcnMudXJsLnN0cmluZygpLCBT
dHJpbmcoKSwgSFRUUEhlYWRlck1hcCgpLCBWZWN0b3I8dWludDhfdD4oKSwgZmFsc2UpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OmRlc3Ryb3koKQorewor
fQorCit2b2lkIEJ1aWx0aW5QREZWaWV3OjpwYWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0SW5XaW5kb3dDb29yZGluYXRlcykKK3sK
KyAgICBpZiAoIW1fcGRmRG9jdW1lbnQpIC8vIEZJWE1FOiBEcmF3IGJhY2tncm91bmQgYW5kIGxv
YWRpbmcgcHJvZ3Jlc3MuCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIGp1c3QgZHJhd3MgdGhlIGZpc3QgcGFnZSBvZiBhIGRvY3VtZW50IGF0IHRvcCBsZWZ0
IGNvcm5lci4KKyAgICAvLyBXZSBzaG91bGQgc2hvdyB0aGUgd2hvbGUgZG9jdW1lbnQsIGNlbnRl
cmluZyBzbWFsbCBvbmVzLgorICAgIENHUERGUGFnZVJlZiBwZGZQYWdlID0gQ0dQREZEb2N1bWVu
dEdldFBhZ2UobV9wZGZEb2N1bWVudC5nZXQoKSwgMSk7CisgICAgaWYgKCFwZGZQYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzY3JvbGxBbmltYXRvcigpLT5jb250ZW50QXJlYVdpbGxQYWlu
dCgpOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigq
Z3JhcGhpY3NDb250ZXh0KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmNsaXAoZGlydHlSZWN0SW5X
aW5kb3dDb29yZGluYXRlcyk7CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25IaWdoKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNl
dFNob3VsZEFudGlhbGlhcyh0cnVlKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFNob3VsZFNt
b290aEZvbnRzKHRydWUpOworCisgICAgQ0dSZWN0IHBhZ2VCb3ggPSBDR1BERlBhZ2VHZXRCb3hS
ZWN0KHBkZlBhZ2UsIGtDR1BERkNyb3BCb3gpOworICAgIGlmIChDR1JlY3RJc0VtcHR5KHBhZ2VC
b3gpKQorICAgICAgICBwYWdlQm94ID0gQ0dQREZQYWdlR2V0Qm94UmVjdChwZGZQYWdlLCBrQ0dQ
REZNZWRpYUJveCk7CisKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdE1h
a2UobV9mcmFtZVJlY3QueCgpLCBtX2ZyYW1lUmVjdC55KCksIG1fcGRmRG9jdW1lbnRTaXplLndp
ZHRoKCkgLSBtX3Njcm9sbE9mZnNldC53aWR0aCgpLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQo
KSAtIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpKSk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KGNvbnRleHQsIG1fZnJhbWVSZWN0LngoKSAtIHBhZ2VCb3gub3JpZ2luLnggLSBtX3Njcm9sbE9m
ZnNldC53aWR0aCgpLCBtX2ZyYW1lUmVjdC55KCkgKyBwYWdlQm94Lm9yaWdpbi55ICsgbV9wZGZE
b2N1bWVudFNpemUuaGVpZ2h0KCkgLSBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSk7CisKKyAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CisgICAgQ0dDb250ZXh0RHJhd1BERlBh
Z2UoY29udGV4dCwgcGRmUGFnZSk7CisKKyAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKKworICAg
IHN0YXRlU2F2ZXIuc2F2ZSgpOworICAgIC8vIFVuZG8gdHJhbnNsYXRpb24gdG8gd2luZG93IGNv
b3JkaW5hdGVzIHBlcmZvcm1lZCBieSBQbHVnaW5WaWV3OjpwYWludCgpLgorICAgIEludFJlY3Qg
ZGlydHlSZWN0ID0gcGx1Z2luVmlldygpLT5wYXJlbnQoKS0+d2luZG93VG9Db250ZW50cyhkaXJ0
eVJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICBJbnRQb2ludCBkb2N1bWVudE9yaWdpbklu
V2luZG93Q29vcmRpbmF0ZXMgPSBwbHVnaW5WaWV3KCktPnBhcmVudCgpLT53aW5kb3dUb0NvbnRl
bnRzKEludFBvaW50KCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1kb2N1bWVu
dE9yaWdpbkluV2luZG93Q29vcmRpbmF0ZXMueCgpLCAtZG9jdW1lbnRPcmlnaW5JbldpbmRvd0Nv
b3JkaW5hdGVzLnkoKSk7CisgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5wYWludChncmFwaGljc0NvbnRleHQsIGRpcnR5UmVjdCk7
CisgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnBhaW50KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKworICAgIEludFJlY3QgZGly
dHlDb3JuZXJSZWN0KHNjcm9sbENvcm5lclJlY3QoKSk7CisgICAgZGlydHlDb3JuZXJSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOworICAgIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5w
YWludFNjcm9sbENvcm5lcigwLCBncmFwaGljc0NvbnRleHQsIGRpcnR5Q29ybmVyUmVjdCk7Cit9
CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0LT51cGRh
dGluZ0NvbnRyb2xUaW50cygpKTsKKworICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCisg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOworICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRl
KCk7CisgICAgaW52YWxpZGF0ZVNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KCkpOworICAg
IHJldHVybjsKK30KKworUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IEJ1aWx0aW5QREZWaWV3
OjpzbmFwc2hvdCgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCitQ
bGF0Zm9ybUxheWVyKiBCdWlsdGluUERGVmlldzo6cGx1Z2luTGF5ZXIoKQoreworICAgIHJldHVy
biAwOworfQorI2VuZGlmCisKKworYm9vbCBCdWlsdGluUERGVmlldzo6aXNUcmFuc3BhcmVudCgp
Cit7CisgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGZyb20gdGhlIHdlYiBwcm9j
ZXNzLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBCdWlsdGluUERGVmlldzo6Z2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgSW50UmVjdCYgZnJh
bWVSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAobV9mcmFtZVJlY3Qg
PT0gZnJhbWVSZWN0KSB7CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzKCk7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OnZpc2liaWxpdHlEaWRDaGFuZ2Uo
KQoreworfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3OjpmcmFtZURpZEZpbmlzaExvYWRpbmcodWlu
dDY0X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQnVpbHRpblBE
RlZpZXc6OmZyYW1lRGlkRmFpbCh1aW50NjRfdCwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBCdWlsdGluUERGVmlldzo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0
KHVpbnQ2NF90LCBjb25zdCBXVEY6OlN0cmluZyYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OnN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1
aW50NjRfdCBzdHJlYW1JRCwgY29uc3QgS1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVh
bUxlbmd0aCwgdWludDMyX3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1p
bWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgaGVhZGVycykKK3sKKyAgICBBU1NFUlQoc3RyZWFt
SUQgPT0gcGRmRG9jdW1lbnRSZXF1ZXN0SUQpOworfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAordm9pZCBCdWlsdGluUERGVmlldzo6c3RyZWFtRGlkUmVjZWl2
ZURhdGEodWludDY0X3Qgc3RyZWFtSUQsIGNvbnN0IGNoYXIqIGJ5dGVzLCBpbnQgbGVuZ3RoKQor
eworICAgIEFTU0VSVChzdHJlYW1JRCA9PSBwZGZEb2N1bWVudFJlcXVlc3RJRCk7CisKKyAgICBp
ZiAoIW1fZGF0YUJ1ZmZlcikKKyAgICAgICAgbV9kYXRhQnVmZmVyLmFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZSgwLCAwKSk7CisKKyAgICBDRkRhdGFBcHBlbmRCeXRlcyhtX2RhdGFCdWZmZXIu
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihieXRlcyksIGxlbmd0aCk7Cit9
CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6OnN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qg
c3RyZWFtSUQpCit7CisgICAgQVNTRVJUKHN0cmVhbUlEID09IHBkZkRvY3VtZW50UmVxdWVzdElE
KTsKKworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcGRmRGF0YVByb3ZpZGVyKEFk
b3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShtX2RhdGFCdWZmZXIuZ2V0KCkp
KTsKKyAgICBtX3BkZkRvY3VtZW50LmFkb3B0Q0YoQ0dQREZEb2N1bWVudENyZWF0ZVdpdGhQcm92
aWRlcihwZGZEYXRhUHJvdmlkZXIuZ2V0KCkpKTsKKworICAgIHBkZkRvY3VtZW50RGlkTG9hZCgp
OworfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3OjpzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVh
bUlELCBib29sIHdhc0NhbmNlbGxlZCkKK3sKKyAgICBBU1NFUlQoc3RyZWFtSUQgPT0gcGRmRG9j
dW1lbnRSZXF1ZXN0SUQpOworCisgICAgbV9kYXRhQnVmZmVyLmNsZWFyKCk7Cit9CisKK3ZvaWQg
QnVpbHRpblBERlZpZXc6Om1hbnVhbFN0cmVhbURpZFJlY2VpdmVSZXNwb25zZShjb25zdCBLVVJM
JiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFtTGVuZ3RoLCAgdWludDMyX3QgbGFzdE1vZGlm
aWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYg
aGVhZGVycykKK3sKK30KKwordm9pZCBCdWlsdGluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX2Rh
dGFCdWZmZXIpCisgICAgICAgIG1fZGF0YUJ1ZmZlci5hZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoMCwgMCkpOworCisgICAgQ0ZEYXRhQXBwZW5kQnl0ZXMobV9kYXRhQnVmZmVyLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oYnl0ZXMpLCBsZW5ndGgpOworfQorCit2b2lk
IEJ1aWx0aW5QREZWaWV3OjptYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHBkZkRhdGFQcm92aWRlcihBZG9wdENGLCBDR0Rh
dGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEobV9kYXRhQnVmZmVyLmdldCgpKSk7CisgICAgbV9w
ZGZEb2N1bWVudC5hZG9wdENGKENHUERGRG9jdW1lbnRDcmVhdGVXaXRoUHJvdmlkZXIocGRmRGF0
YVByb3ZpZGVyLmdldCgpKSk7CisKKyAgICBwZGZEb2N1bWVudERpZExvYWQoKTsKK30KKwordm9p
ZCBCdWlsdGluUERGVmlldzo6bWFudWFsU3RyZWFtRGlkRmFpbChib29sKQoreworICAgIG1fZGF0
YUJ1ZmZlci5jbGVhcigpOworfQorCitib29sIEJ1aWx0aW5QREZWaWV3OjpoYW5kbGVNb3VzZUV2
ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHN3aXRjaCAoZXZlbnQudHlw
ZSgpKSB7CisgICAgY2FzZSBXZWJFdmVudDo6TW91c2VNb3ZlOgorICAgICAgICBzY3JvbGxBbmlt
YXRvcigpLT5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICAvLyBGSVhNRTogU2hv
dWxkIGFsc28gbm90aWZ5IHNjcm9sbGJhciB0byBzaG93IGhvdmVyIGVmZmVjdC4gU2hvdWxkIGFs
c28gc2VuZCBtb3VzZUV4aXRlZCB0byBoaWRlIGl0LgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdlYkV2ZW50OjpNb3VzZURvd246IHsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IG1vdXNl
RG93bkV2ZW50ID0gcGxhdGZvcm0oZXZlbnQpOworICAgICAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5tb3VzZURvd24obW91
c2VEb3duRXZlbnQpOworICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPm1vdXNlRG93bihtb3VzZURvd25FdmVudCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdlYkV2ZW50OjpNb3VzZVVwOgorICAgICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5tb3VzZVVwKCk7CisgICAgICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+bW91c2VVcCgpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBCdWlsdGluUERGVmlldzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBX
ZWJXaGVlbEV2ZW50JiBldmVudCkKK3sKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcGxhdGZvcm1F
dmVudCA9IHBsYXRmb3JtKGV2ZW50KTsKKyAgICBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxF
dmVudChwbGF0Zm9ybUV2ZW50KTsKKyAgICByZXR1cm4gcGxhdGZvcm1FdmVudC5pc0FjY2VwdGVk
KCk7Cit9CisKK2Jvb2wgQnVpbHRpblBERlZpZXc6OmhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25z
dCBXZWJNb3VzZUV2ZW50JikKK3sKKyAgICBzY3JvbGxBbmltYXRvcigpLT5tb3VzZUVudGVyZWRD
b250ZW50QXJlYSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCdWlsdGluUERGVmll
dzo6aGFuZGxlTW91c2VMZWF2ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKQoreworICAgIHNj
cm9sbEFuaW1hdG9yKCktPm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQnVpbHRpblBERlZpZXc6OmhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1aWx0
aW5QREZWaWV3OjpzZXRGb2N1cyhib29sIGhhc0ZvY3VzKQoreworfQorCitOUE9iamVjdCogQnVp
bHRpblBERlZpZXc6OnBsdWdpblNjcmlwdGFibGVOUE9iamVjdCgpCit7CisgICAgcmV0dXJuIDA7
Cit9CisKKyNpZiBQTEFURk9STShNQUMpCit2b2lkIEJ1aWx0aW5QREZWaWV3Ojp3aW5kb3dGb2N1
c0NoYW5nZWQoYm9vbCBoYXNGb2N1cykKK3sKK30KKwordm9pZCBCdWlsdGluUERGVmlldzo6d2lu
ZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgd2luZG93RnJh
bWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aWV3RnJhbWVJ
bldpbmRvd0Nvb3JkaW5hdGVzKQoreworfQorCit2b2lkIEJ1aWx0aW5QREZWaWV3Ojp3aW5kb3dW
aXNpYmlsaXR5Q2hhbmdlZChib29sIGlzVmlzaWJsZSkKK3sKK30KKwordWludDY0X3QgQnVpbHRp
blBERlZpZXc6OnBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBCdWlsdGluUERGVmlldzo6c2VuZENvbXBsZXhUZXh0SW5w
dXQoY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCit7Cit9CisKKyNlbmRpZgorCit2b2lkIEJ1aWx0
aW5QREZWaWV3Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCkKK3sKK30KKworYm9v
bCBCdWlsdGluUERGVmlldzo6Z2V0Rm9ybVZhbHVlKFN0cmluZyYpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitJbnRSZWN0IEJ1aWx0aW5QREZWaWV3OjpzY3JvbGxDb3JuZXJSZWN0KCkgY29u
c3QKK3sKKyAgICBpZiAoIW1faG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhbV92ZXJ0aWNhbFNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBpZiAobV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgeworICAgICAgICBBU1NFUlQobV92ZXJ0aWNh
bFNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkpOworICAgICAgICByZXR1cm4gSW50UmVj
dCgpOworICAgIH0KKyAgICByZXR1cm4gSW50UmVjdChwbHVnaW5WaWV3KCktPndpZHRoKCkgLSBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCBwbHVnaW5WaWV3KCktPmhlaWdodCgpIC0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgo
KSwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVh
KiBCdWlsdGluUERGVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBXYWxrIHVwIHRoZSBmcmFtZSB0cmVlIGFuZCBsb29rIGZvciBhIHNjcm9sbGFi
bGUgcGFyZW50IGZyYW1lIG9yIFJlbmRlckxheWVyLgorICAgIHJldHVybiAwOworfQorCit2b2lk
IEJ1aWx0aW5QREZWaWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7
CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gYmxp
dCBwYXJ0cyB0aGF0IHJlbWFpbiB2aXNpYmxlLgorICAgIGNvbnRyb2xsZXIoKS0+aW52YWxpZGF0
ZShJbnRSZWN0KDAsIDAsIG1fZnJhbWVSZWN0LndpZHRoKCksIG1fZnJhbWVSZWN0LmhlaWdodCgp
KSk7Cit9CisKK2ludCBCdWlsdGluUERGVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9ICgo
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyBtX2hvcml6b250YWxTY3JvbGxi
YXIgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKS5nZXQoKTsKKyAgICByZXR1cm4gc2Nyb2xsYmFyID8g
KHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsK
K30KKworYm9vbCBCdWlsdGluUERGVmlldzo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOworfQorCit2b2lkIEJ1aWx0
aW5QREZWaWV3OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKK3sKKyAgICBMYXlvdXRSZWN0IGRpcnR5UmVjdCA9IHJl
Y3Q7CisgICAgZGlydHlSZWN0Lm1vdmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOworICAgIGRp
cnR5UmVjdC5tb3ZlQnkoLXBsdWdpblZpZXcoKS0+bG9jYXRpb24oKSk7CisgICAgY29udHJvbGxl
cigpLT5pbnZhbGlkYXRlKGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgQnVpbHRpblBERlZpZXc6Omlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgY29u
dHJvbGxlcigpLT5pbnZhbGlkYXRlKHJlY3QpOworfQorCitib29sIEJ1aWx0aW5QREZWaWV3Ojpp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW50IEJ1aWx0aW5QREZWaWV3OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikg
Y29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpOworICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworSW50UG9pbnQgQnVpbHRpblBERlZpZXc6OnNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQobV9zY3JvbGxPZmZzZXQud2lk
dGgoKSwgbV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkpOworfQorCitJbnRQb2ludCBCdWlsdGluUERG
Vmlldzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9p
bnQoMCwgMCk7Cit9CisKK0ludFBvaW50IEJ1aWx0aW5QREZWaWV3OjptYXhpbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdAoreworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKG1f
aG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSkgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMDsKKyAgICBp
bnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmICFtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSkgPyBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT53aWR0aCgpIDogMDsKKworICAgIEludFBvaW50IG1heGltdW1PZmZzZXQobV9wZGZEb2N1
bWVudFNpemUud2lkdGgoKSAtIG1fZnJhbWVSZWN0LndpZHRoKCkgKyB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoLCBtX3BkZkRvY3VtZW50U2l6ZS5oZWlnaHQoKSAtIG1fZnJhbWVSZWN0LmhlaWdodCgp
ICsgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgbWF4aW11bU9mZnNldC5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7Cit9CisKK0ludFNpemUg
QnVpbHRpblBERlZpZXc6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGRm
RG9jdW1lbnRTaXplOworfQorCitib29sIEJ1aWx0aW5QREZWaWV3Ojppc09uQWN0aXZlUGFnZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBsdWdpblZpZXcoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
aW5QYWdlQ2FjaGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL0J1aWx0aW5QREZWaWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9CdWlsdGluUERGVmll
dy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9CdWlsdGluUERGVmlldy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnVpbHRpblBERlZpZXdfaAorI2RlZmluZSBCdWlsdGluUERGVmlld19o
CisKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVh
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgUGFnZTsKKyAgICBzdHJ1Y3QgUGx1Z2luSW5mbzsKK30KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFBsdWdpblZpZXc7CisKK2NsYXNzIEJ1aWx0aW5QREZWaWV3IDogcHVi
bGljIFBsdWdpbiwgcHJpdmF0ZSBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QnVpbHRpblBERlZpZXc+IGNyZWF0ZShXZWJDb3JlOjpQYWdl
Kik7CisgICAgfkJ1aWx0aW5QREZWaWV3KCk7CisKKyAgICBzdGF0aWMgV2ViQ29yZTo6UGx1Z2lu
SW5mbyBwbHVnaW5JbmZvKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQnVpbHRpblBERlZp
ZXcoV2ViQ29yZTo6UGFnZSopOworCisgICAgLy8gUmVndWxhciBwbHVnLWlucyBkb24ndCBuZWVk
IGFjY2VzcyB0byB2aWV3LCBidXQgd2UgYWRkIHNjcm9sbGJhcnMgdG8gZW1iZWRkaW5nIEZyYW1l
VmlldyBmb3IgcHJvcGVyIGV2ZW50IGhhbmRsaW5nLgorICAgIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcoKTsKKyAgICBjb25zdCBQbHVnaW5WaWV3KiBwbHVnaW5WaWV3KCkgY29uc3Q7CisKKyAgICB2
b2lkIGNhbGN1bGF0ZURvY3VtZW50U2l6ZSgpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygp
OworICAgIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihXZWJDb3JlOjpTY3JvbGxiYXIq
KTsKKyAgICB2b2lkIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFdlYkNvcmU6OlNjcm9s
bGJhciopOworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxi
YXIoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9s
bGJhcihXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBwZGZEb2N1bWVu
dERpZExvYWQoKTsKKworICAgIC8vIFBsdWdpbiBtZXRob2RzCisgICAgdmlydHVhbCBib29sIGlu
aXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYpOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bnRyb2xUaW50cyhXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBzbmFwc2hvdCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsdWdpbkxheWVyKCk7CisjZW5kaWYKKyAgICB2aXJ0
dWFsIGJvb2wgaXNUcmFuc3BhcmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeURpZENo
YW5nZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIGNsaXBSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgp
OworICAgIHZpcnR1YWwgdm9pZCBmcmFtZURpZEZpbmlzaExvYWRpbmcodWludDY0X3QgcmVxdWVz
dElEKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVEaWRGYWlsKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCB3YXNDYW5jZWxsZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3Jp
cHQodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIHJlc3VsdCk7CisgICAgdmlydHVh
bCB2b2lkIHN0cmVhbURpZFJlY2VpdmVSZXNwb25zZSh1aW50NjRfdCBzdHJlYW1JRCwgY29uc3Qg
V2ViQ29yZTo6S1VSTCYgcmVzcG9uc2VVUkwsIHVpbnQzMl90IHN0cmVhbUxlbmd0aCwgdWludDMy
X3QgbGFzdE1vZGlmaWVkVGltZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBX
VEY6OlN0cmluZyYgaGVhZGVycyk7CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZFJlY2VpdmVE
YXRhKHVpbnQ2NF90IHN0cmVhbUlELCBjb25zdCBjaGFyKiBieXRlcywgaW50IGxlbmd0aCk7Cisg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbURpZEZpbmlzaExvYWRpbmcodWludDY0X3Qgc3RyZWFtSUQp
OworICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1EaWRGYWlsKHVpbnQ2NF90IHN0cmVhbUlELCBib29s
IHdhc0NhbmNlbGxlZCk7CisgICAgdmlydHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBXZWJDb3JlOjpLVVJMJiByZXNwb25zZVVSTCwgdWludDMyX3Qgc3RyZWFt
TGVuZ3RoLCB1aW50MzJfdCBsYXN0TW9kaWZpZWRUaW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBoZWFkZXJzKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFu
dWFsU3RyZWFtRGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogYnl0ZXMsIGludCBsZW5ndGgpOwor
ICAgIHZpcnR1YWwgdm9pZCBtYW51YWxTdHJlYW1EaWRGaW5pc2hMb2FkaW5nKCk7CisgICAgdmly
dHVhbCB2b2lkIG1hbnVhbFN0cmVhbURpZEZhaWwoYm9vbCB3YXNDYW5jZWxsZWQpOworICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBXZWJXaGVlbEV2ZW50Jik7
CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlRW50ZXJFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTGVhdmVFdmVudChjb25zdCBXZWJN
b3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleWJvYXJkRXZlbnQoY29uc3Qg
V2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1cyhib29sKTsKKyAg
ICB2aXJ0dWFsIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlTlBPYmplY3QoKTsKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgdmlydHVhbCB2b2lkIHdpbmRvd0ZvY3VzQ2hhbmdlZChib29sKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgd2luZG93QW5kVmlld0ZyYW1lc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgd2luZG93RnJhbWVJblNjcmVlbkNvb3JkaW5hdGVzLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB2aWV3RnJhbWVJbldpbmRvd0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2luZG93VmlzaWJpbGl0eUNoYW5nZWQoYm9vbCk7CisgICAgdmlydHVhbCB1aW50NjRfdCBwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZW5kQ29tcGxleFRleHRJbnB1dChjb25zdCBTdHJpbmcmIHRleHRJbnB1dCk7CisjZW5kaWYKKwor
ICAgIHZpcnR1YWwgdm9pZCBwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAg
dmlydHVhbCBib29sIGdldEZvcm1WYWx1ZShTdHJpbmcmIGZvcm1WYWx1ZSk7CisKKyAgICAvLyBT
Y3JvbGxhYmxlQXJlYSBtZXRob2RzLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCBzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxi
YXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IG1heGltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50
c1NpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogaG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0ICB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7
IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBi
b29sIGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RG
cm9tUGFnZSgpIHsgbV9wYWdlID0gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5k
U2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IC8vIElmIHdlIHJldHVy
biB0cnVlLCBTY3JvbGxBbmltYXRvck1hYyB3aWxsIGtlZXAgY3ljbGluZyBhIHRpbWVyIGZvcmV2
ZXIsIHdhaXRpbmcgZm9yIGEgZ29vZCB0aW1lIHRvIGFuaW1hdGUuCisKKyAgICAvLyBJbiB3aW5k
b3cgY29vcmRpbmF0ZXMuCisgICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZyYW1lUmVjdDsKKworICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBtX2RhdGFCdWZmZXI7CisgICAgUmV0YWluUHRy
PENHUERGRG9jdW1lbnRSZWY+IG1fcGRmRG9jdW1lbnQ7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBt
X3BkZkRvY3VtZW50U2l6ZTsgLy8gQWxsIHBhZ2VzLCBpbmNsdWRpbmcgZ2Fwcy4KKworICAgIFJl
ZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAgV2ViQ29y
ZTo6UGFnZSogbV9wYWdlOyAvLyBOZWVkZWQgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgU2Ny
b2xsYWJsZUFyZWEuCisKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBCdWlsdGluUERGVmlld19oCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSwxMCBAQAogI2VuZGlmCiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJCdWlsdGluUERGVmlldy5oIgorI2Vu
ZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSA8UU1pbWVEYXRhPgpAQCAtMzI4LDggKzMzMiwxMyBAQCBQYXNzUmVmUHRyPFBsdWdpbj4g
V2ViUGFnZTo6Y3JlYXRlUGx1Z2luCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlm
IChwbHVnaW5QYXRoLmlzTnVsbCgpKQorICAgIGlmIChwbHVnaW5QYXRoLmlzTnVsbCgpKSB7Cisj
aWYgUExBVEZPUk0oTUFDKQorICAgICAgICBpZiAocGFyYW1ldGVycy5taW1lVHlwZSA9PSAiYXBw
bGljYXRpb24vcGRmIikKKyAgICAgICAgICAgIHJldHVybiBCdWlsdGluUERGVmlldzo6Y3JlYXRl
KG1fcGFnZS5nZXQoKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAjaWYg
RU5BQkxFKFBMVUdJTl9QUk9DRVNTKQogICAgIHJldHVybiBQbHVnaW5Qcm94eTo6Y3JlYXRlKHBs
dWdpblBhdGgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>