<?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>177713</bug_id>
          
          <creation_ts>2017-09-30 20:38:51 -0700</creation_ts>
          <short_desc>RenderView does not need to be a SelectionSubtreeRoot</short_desc>
          <delta_ts>2017-10-02 01:30:40 -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>Layout and Rendering</component>
          <version>WebKit 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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fujii</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354957</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2017-09-30 20:38:51 -0700</bug_when>
    <thetext>It&apos;s the only selection root (it&apos;s not even a thing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354959</commentid>
    <comment_count>1</comment_count>
      <attachid>322307</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-09-30 20:44:19 -0700</bug_when>
    <thetext>Created attachment 322307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354964</commentid>
    <comment_count>2</comment_count>
      <attachid>322311</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-09-30 21:01:05 -0700</bug_when>
    <thetext>Created attachment 322311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354969</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-30 21:44:56 -0700</bug_when>
    <thetext>&lt;rdar://problem/34758519&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355015</commentid>
    <comment_count>4</comment_count>
      <attachid>322323</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-10-01 10:56:29 -0700</bug_when>
    <thetext>Created attachment 322323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355018</commentid>
    <comment_count>5</comment_count>
      <attachid>322324</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-10-01 11:19:59 -0700</bug_when>
    <thetext>Created attachment 322324
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355038</commentid>
    <comment_count>6</comment_count>
      <attachid>322327</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-10-01 12:44:54 -0700</bug_when>
    <thetext>Created attachment 322327
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355041</commentid>
    <comment_count>7</comment_count>
      <attachid>322327</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-10-01 13:22:54 -0700</bug_when>
    <thetext>Comment on attachment 322327
Patch

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

r=me

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:56
&gt; +struct SelectionIterator {

This looks more like a class than a struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355043</commentid>
    <comment_count>8</comment_count>
      <attachid>322327</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-01 13:36:26 -0700</bug_when>
    <thetext>Comment on attachment 322327
Patch

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

Feels like the code might need a struct with start and end in it. Lots of code manipulating the two together.

&gt; Source/WebCore/editing/FrameSelection.cpp:2117
&gt; +        view-&gt;selection().set({startRenderer, endRenderer, startOffset, endOffset});

We normally put spaces after &quot;{&quot; and before &quot;}&quot;. Not sure I would chose that style for my own project, but I like the idea of staying consistent in WebKit.

&gt; Source/WebCore/editing/FrameSelection.cpp:2237
&gt; +    auto* renderView = m_frame-&gt;contentRenderer();
&gt; +    auto* view = m_frame-&gt;view();
&gt; +    if (!renderView || !view)
&gt;          return LayoutRect();

You can get the FrameView from a RenderView. It returns a reference and never returns null. So there is no reason to go back to the Frame to get the view and just have to null check it. We can remove view and the one place below that says &quot;view-&gt;&quot; could instead just say &quot;renderView-&gt;frameView().&quot; instead. Or you could have a local variable, but it could be a reference rather than a pointer.

&gt; Source/WebCore/platform/DragImage.cpp:186
&gt; +    view-&gt;selection().set({startRenderer, endRenderer, startOffset, endOffset}, SelectionRangeData::RepaintMode::Nothing);

Same braces thing.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:148
&gt; +        auto startPos = renderer().view().selection().startPosition();
&gt; +        auto endPos = renderer().view().selection().endPosition();

If it was me, I would put renderer().view().selectIon() into a local variable rather than evaluating it twice. No idea if that’s helpful or not. Maybe one of those three functions is not inlined? If so, then it will pay off, I think.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:643
&gt; +    auto start = renderer().view().selection().startPosition();
&gt; +    auto end = renderer().view().selection().endPosition();

Ditto.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:3
&gt; + * Copyright (C) 2015, 2017 Apple Inc. All rights reserved.

Should be 2015-2017 at least. I think most of this code is older and should have additional publication dates from those older times it was published (checked in).

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:48
&gt; +    typedef HashMap&lt;RenderObject*, std::unique_ptr&lt;RenderSelectionInfo&gt;&gt; RendererMap;
&gt; +    typedef HashMap&lt;const RenderBlock*, std::unique_ptr&lt;RenderBlockSelectionInfo&gt;&gt; RenderBlockMap;

In our modern code we use &quot;using&quot; instead of &quot;typedef&quot;.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:56
&gt; +struct SelectionIterator {

This looks like a class, not a struct. It has public function members and private data members.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:93
&gt; +    Vector&lt;RenderMultiColumnSpannerPlaceholder*&gt; m_spannerStack;

Comment on the moved, not new, code: Do we really want a stack here? Maybe a deque instead?

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:106
&gt; +    return (renderer.canBeSelectionLeaf()
&gt; +        || &amp;renderer == selection.start
&gt; +        || &amp;renderer == selection.end)

This part would read better on one line.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:117
&gt; +    SelectionData oldSelectionData;
&gt; +    // Record the old selected objects. These will be used later
&gt; +    // when we compare against the new selected objects.
&gt; +    oldSelectionData.startPosition = selection.startPosition;
&gt; +    oldSelectionData.endPosition = selection.endPosition;

Could do this with initialization rather than assignment:

    SelectionData oldSelectionData { selection.startPosition, selection.endPosition, { } { } };

But also, the comment (old, moved here not just written) says we record the old &quot;selected objects&quot;, but we don’t seem to quite do that; we just record the old start and end positions, not the maps of renderers and blocks.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:127
&gt; +    SelectionIterator selectionIterator(start);
&gt; +    while (start &amp;&amp; start != stop) {

Should be a for loop.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:133
&gt; +                RenderBlock* block = start-&gt;containingBlock();
&gt; +                while (block &amp;&amp; !is&lt;RenderView&gt;(*block)) {

I’d like to write this loop better at some point. Probably as a for loop. Here are four versions:

Try 1:

    for (auto* block = start-&gt;containingBlock(); block &amp;&amp; !is&lt;RenderView&gt;(*block); block = block-&gt;containingBlock()) {

Try 2:

    for (auto* block = start; (block = block-&gt;containingBlock()) &amp;&amp; !is&lt;RenderView&gt;(block); ) {

Try 3:

    auto containingBlockBelowView = [] (RenderObject&amp; block)
    {
        auto* containingBlock = block.containingBlock();
        return is&lt;RenderView&gt;(containingBlock) ? nullptr : containingBlock;
    }

    for (auto* block = start; (block = containingBlockBelowView(*block)); ) {

Try 4:

    auto containingBlockBelowView = [] (RenderObject&amp; block)
    {
        auto* containingBlock = block.containingBlock();
        return is&lt;RenderView&gt;(containingBlock) ? nullptr : containingBlock;
    }

    for (auto* block = containingBlockBelowView(*start); block; block = containingBlockBelowView(*block)) {

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:134
&gt; +                    std::unique_ptr&lt;RenderBlockSelectionInfo&gt;&amp; blockInfo = oldSelectionData.blocks.add(block, nullptr).iterator-&gt;value;

Using auto&amp; here would be good.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:168
&gt; +    std::unique_ptr&lt;SelectionRectGatherer::Notifier&gt; rectNotifier = m_selectionRectGatherer.clearAndCreateNotifier();

I suggest using auto instead of writing out the type here.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:169
&gt; +#endif // ENABLE(SERVICE_CONTROLS)

I would remove this comment. Makes it harder to read.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:194
&gt; +        for (RenderBlock* block = renderer-&gt;containingBlock(); block &amp;&amp; !is&lt;RenderView&gt;(*block); block = block-&gt;containingBlock()) {

Same loop as above, only this time written as a for loop (my Try 1, in fact).

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:210
&gt; +    SelectionIterator selectionIterator(start);
&gt; +    while (start &amp;&amp; start != stop) {

Should be a for loop.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:222
&gt; +            // Blocks are responsible for painting line gaps and margin gaps. They must be examined as well.
&gt; +            renderers.set(start, std::make_unique&lt;RenderSelectionInfo&gt;(*start, clipToVisibleContent));
&gt; +            auto* block = start-&gt;containingBlock();
&gt; +            while (block &amp;&amp; !is&lt;RenderView&gt;(*block)) {
&gt; +                std::unique_ptr&lt;RenderSelectionInfo&gt;&amp; blockInfo = renderers.add(block, nullptr).iterator-&gt;value;
&gt; +                if (blockInfo)
&gt; +                    break;
&gt; +                blockInfo = std::make_unique&lt;RenderSelectionInfo&gt;(*block, clipToVisibleContent);
&gt; +                block = block-&gt;containingBlock();
&gt; +            }

This code is so close to the code from collect above. Would be good to find a way to share more if we can do that in a clean way.

&gt; Source/WebCore/rendering/SelectionRangeData.cpp:231
&gt; +    auto end = renderers.end();
&gt; +    for (auto i = renderers.begin(); i != end; ++i) {
&gt; +        auto* info = i-&gt;value.get();

Should be a modern for loop:

    for (auto&amp; info : renderers.values()) {

&gt; Source/WebCore/rendering/SelectionRangeData.h:3
&gt; + * Copyright (C) 2017 Apple Inc.

Need &quot;All rights reserved.&quot;

&gt; Source/WebCore/rendering/SelectionRangeData.h:33
&gt; +#include &quot;RenderObject.h&quot;

Don’t need this include. RenderSelectionInfo.h includes RenderBlock.h which includes RenderObject.h.

&gt; Source/WebCore/rendering/SelectionRangeData.h:37
&gt; +#if ENABLE(SERVICE_CONTROLS)
&gt; +#include &quot;SelectionRectGatherer.h&quot;
&gt; +#endif

Should have a blank line before so it can be a separate paragraph.

&gt; Source/WebCore/rendering/SelectionRangeData.h:51
&gt; +        bool operator==(const Context&amp; other) const
&gt; +        {
&gt; +            return start == other.start &amp;&amp; end == other.end &amp;&amp; startPosition == other.startPosition &amp;&amp; endPosition == other.endPosition;
&gt; +        }

I suggest putting this after the data members. In classes we put functions first, but in a struct it makes sense to have the data first since that’s the public interface.

&gt; Source/WebCore/rendering/SelectionRangeData.h:61
&gt; +    Context get() const { return m_selectionContext; }

Should consider having this return const Context&amp; so it doesn’t have to copy.

&gt; Source/WebCore/rendering/SelectionRangeData.h:69
&gt; +    IntRect bounds(bool clipToVisibleContent = true) const;

Can we use two separate functions here instead of a function with a boolean argument? The boolean argument version could be a separate implementation detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355102</commentid>
    <comment_count>9</comment_count>
      <attachid>322343</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-10-01 19:17:44 -0700</bug_when>
    <thetext>Created attachment 322343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355124</commentid>
    <comment_count>10</comment_count>
      <attachid>322352</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-10-01 20:35:35 -0700</bug_when>
    <thetext>Created attachment 322352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355127</commentid>
    <comment_count>11</comment_count>
      <attachid>322352</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-01 21:46:36 -0700</bug_when>
    <thetext>Comment on attachment 322352
Patch

Clearing flags on attachment: 322352

Committed r222697: &lt;http://trac.webkit.org/changeset/222697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355128</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-01 21:46:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355137</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-10-01 23:30:37 -0700</bug_when>
    <thetext>Builds break for Apple Win and WinCairo port:

https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/6775

&gt; C:\WebKit-BuildSlave\win-cairo-release\build\Source\WebCore\editing\FrameSelection.cpp(2117): error C2397: conversion from &apos;int&apos; to &apos;std::optional&lt;unsigned int&gt;&apos; requires a narrowing conversion

https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/4835

&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\FrameSelection.cpp(2117): error C2664: &apos;void WebCore::SelectionRangeData::set(const WebCore::SelectionRangeData::Context &amp;,WebCore::SelectionRangeData::RepaintMode)&apos;: cannot convert argument 1 from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context &amp;&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\EditingAllInOne.cpp) [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\FrameSelection.cpp(2117): note: Reason: cannot convert from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\EditingAllInOne.cpp)
&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\FrameSelection.cpp(2117): note: No constructor could take the source type, or constructor overload resolution was ambiguous (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\editing\EditingAllInOne.cpp)

&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\platform\DragImage.cpp(188): error C2664: &apos;void WebCore::SelectionRangeData::set(const WebCore::SelectionRangeData::Context &amp;,WebCore::SelectionRangeData::RepaintMode)&apos;: cannot convert argument 1 from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context &amp;&apos; [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\platform\DragImage.cpp(188): note: Reason: cannot convert from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context&apos;
&gt; C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\platform\DragImage.cpp(188): note: No constructor could take the source type, or constructor overload resolution was ambiguous

&gt; c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\rendering\SelectionRangeData.cpp(175): error C2664: &apos;void WebCore::SelectionRangeData::set(const WebCore::SelectionRangeData::Context &amp;,WebCore::SelectionRangeData::RepaintMode)&apos;: cannot convert argument 1 from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context &amp;&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\rendering\RenderingAllInOne.cpp) [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
&gt; c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\rendering\SelectionRangeData.cpp(175): note: Reason: cannot convert from &apos;initializer list&apos; to &apos;const WebCore::SelectionRangeData::Context&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\rendering\RenderingAllInOne.cpp)
&gt; c:\cygwin\home\buildbot\slave\win-release\build\source\webcore\rendering\SelectionRangeData.cpp(175): note: No constructor could take the source type, or constructor overload resolution was ambiguous (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\rendering\RenderingAllInOne.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355149</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-02 00:26:43 -0700</bug_when>
    <thetext>Windows build fix attempt: https://trac.webkit.org/changeset/222700</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355170</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-02 01:30:40 -0700</bug_when>
    <thetext>Fixed Windows build in https://trac.webkit.org/changeset/222701.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322307</attachid>
            <date>2017-09-30 20:44:19 -0700</date>
            <delta_ts>2017-09-30 21:01:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20170930204418.patch</filename>
            <type>text/plain</type>
            <size>60169</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI3ZTZiY2ZiNWVjNmZm
ZDYwMDNjMjE3ZTcyOTRhZjRiYmU2MjJlZC4uZjY0ZTUxNjQ1ZDQxZDYxNjI5ZmRmMjUyMzMyODJk
YjdhNjQ1OTRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxNy0wOS0zMCAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlclZpZXcgZG9lcyBu
b3QgbmVlZCB0byBiZSBhIFNlbGVjdGlvblN1YnRyZWVSb290CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc3MTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFV1MgdGVzdGluZy4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rp
b25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9kZVdp
bGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnBy
ZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0
aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNuYXBzaG90
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZTo6U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJhbWVT
ZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JSYW5n
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aXNT
ZWxlY3Rpb25Sb290IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTZWxlY3Rpb25Cb3JkZXIgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFj
ZWQ6OmlzU2VsZWN0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0Zv
ckxpbmVCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3Rh
dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
SXRlcmF0b3I6OlNlbGVjdGlvbkl0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvbkl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpuZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRTZWxlY3Rpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFN1
YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6c2V0U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRP
YmplY3RGb3JOZXdTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpnZXRTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2xlYXJTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Nl
bGVjdGlvblN1YnRyZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0ZXJQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6U2VsZWN0aW9u
SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJlbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OlNlbGVjdGlvblJhbmdlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblJhbmdlRGF0YTo6cmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25S
YW5nZURhdGE6OmNvbGxlY3RBbmRDbGVhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdl
RGF0YTo6aXNWYWxpZFJlbmRlcmVyRm9yTmV3U2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQ6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpnZXQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpzdGFydCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0UG9zaXRpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjplbmRQb3NpdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6T2xkU2VsZWN0aW9uRGF0YTo6T2xkU2Vs
ZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVl
Um9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OlNlbGVjdGlvblN1YnRyZWVEYXRhKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rpb25T
dGFydFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvbkVuZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3Vi
dHJlZURhdGE6OnNlbGVjdGlvbkVuZFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlv
blN0YXJ0RW5kUG9zaXRpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6Y2xlYXJTZWxlY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNlbGVj
dGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJv
b3Q6OnNlbGVjdGlvbkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OnNldFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorCisyMDE3LTA5
LTI5ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJl
ZHVuZGFudCBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3QgYW5kIGRlcGVuZGVuY2llcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3Njk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUncyBvbmx5
IG9uZSBzZWxlY3Rpb24gcm9vdCAoUmVuZGVyVmlldykuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxl
Y3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25T
dGFydEVuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3QgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGFydEVuZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVj
dGlvblJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExp
bmVCb3hlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRT
ZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaDoKKwogMjAxNy0wOS0yOSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTZWxlY3Rpb25T
dWJ0cmVlUm9vdDo6UmVuZGVyU3VidHJlZXNNYXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKaW5kZXggYTg1N2VkZWRlNmIyMzc3N2M2ZTg0Y2NmYmQzMTQ0MTE3MTgx
Yjc3OC4uODg3ZWJiMWVlYjJlODljMzYwZTkyNDNjZmYwZWQ5NzQwNmNhN2Y5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTM4Nyw3ICszODcsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSgpCiB7CiAgICAgbV9w
ZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9
IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlv
bigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogfQogCiB2b2lkIEZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBbmRSZXZlYWxTZWxlY3Rpb24oY29uc3QgQVhUZXh0U3RhdGVDaGFu
Z2VJbnRlbnQmIGludGVudCkKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIERyYWdDYXJldENvbnRy
b2xsZXI6Om5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmIG5vZGUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkK
LSAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9u
KCkuY2xlYXIoKTsKIAogICAgIGNsZWFyKCk7CiB9CkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29s
IGJhc2VSZW1vdmVkLCBib28KIAogICAgIGlmIChjbGVhclJlbmRlclRyZWVTZWxlY3Rpb24pIHsK
ICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVyVmll
dygpKSB7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgICAgICAgICAgLy8g
VHJpZ2dlciBhIHNlbGVjdGlvbiB1cGRhdGUgc28gdGhlIHNlbGVjdGlvbiB3aWxsIGJlIHNldCBh
Z2Fpbi4KICAgICAgICAgICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CkBAIC0x
NTE3LDkgKzE1MTcsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpwcmVwYXJlRm9yRGVzdHJ1Y3Rp
b24oKQogICAgIG1fY2FyZXRCbGlua1RpbWVyLnN0b3AoKTsKICNlbmRpZgogCi0gICAgUmVuZGVy
VmlldyogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICh2aWV3KQot
ICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOworICAgIGlmIChhdXRvKiB2aWV3ID0gbV9m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFy
KCk7CiAKICAgICBzZXRTZWxlY3Rpb25XaXRob3V0VXBkYXRpbmdBcHBlYXJhbmNlKFZpc2libGVT
ZWxlY3Rpb24oKSwgZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSwgQWxpZ25DdXJzb3JPblNj
cm9sbElmTmVlZGVkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgbV9wcmV2aW91c0NhcmV0
Tm9kZSA9IG51bGxwdHI7CkBAIC0xOTk1LDcgKzE5OTQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9u
Ojpmb2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQoKQogICAgIC8vIFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY2hlY2sgaWYgdGhlIGZyYW1lIGlzIGFjdGl2ZSwKICAg
ICAvLyB3ZSBoYXZlIHRvIHVwZGF0ZSBwbGFjZXMgdGhvc2UgY29sb3JzIHdlcmUgcGFpbnRlZC4K
ICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCkpCi0gICAg
ICAgIHZpZXctPnJlcGFpbnRTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCku
cmVwYWludCgpOwogCiAgICAgLy8gQ2FyZXQgYXBwZWFycyBpbiB0aGUgYWN0aXZlIGZyYW1lLgog
ICAgIGlmIChhY3RpdmVBbmRGb2N1c2VkKQpAQCAtMjA5MCw3ICsyMDg5LDcgQEAgdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAjZW5kaWYKIAogICAgIGlmICghc2VsZWN0
aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICB2aWV3LT5jbGVhclNlbGVjdGlvbigpOworICAgICAg
ICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yMTE1LDcgKzIxMTQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNl
KCkKICAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciA9IGVuZFBvcy5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kUG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYm
IGVuZE9mZnNldCA+PSAwKTsKLSAgICAgICAgdmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVy
ZXIsIHN0YXJ0T2Zmc2V0LCBlbmRSZW5kZXJlciwgZW5kT2Zmc2V0KTsKKyAgICAgICAgdmlldy0+
c2VsZWN0aW9uKCkuc2V0KHtzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldH0pOwogICAgIH0KIH0KIApAQCAtMjIzMiwxMiArMjIzMSwxMiBAQCBGbG9hdFJl
Y3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250
ZW50KSBjb25zdAogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAgICAgdXBkYXRlU2Vs
ZWN0aW9uQnlVcGRhdGluZ0xheW91dE9yU3R5bGUoKm1fZnJhbWUpOwotICAgIFJlbmRlclZpZXcq
IHJvb3QgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKLSAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCFyb290IHx8ICF2aWV3KQorICAgIGF1dG8qIHJl
bmRlclZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBhdXRvKiB2aWV3ID0g
bV9mcmFtZS0+dmlldygpOworICAgIGlmICghcmVuZGVyVmlldyB8fCAhdmlldykKICAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoKTsKIAotICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJv
b3QtPnNlbGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CisgICAgYXV0byBzZWxl
Y3Rpb25SZWN0ID0gcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuYm91bmRzKGNsaXBUb1Zpc2libGVD
b250ZW50KTsKICAgICByZXR1cm4gY2xpcFRvVmlzaWJsZUNvbnRlbnQgPyBpbnRlcnNlY3Rpb24o
c2VsZWN0aW9uUmVjdCwgdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSkgOiBzZWxlY3Rpb25SZWN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZTZlODYwYTYzMzk2NDI5YThkYWJhZGI3YjM4MjE5
MzBiYTRkMzljNi4uMjdiZjY0OWU3NmE5MGQ5NDIzYzE0YjNiNTc5YzQ4YTc0OGI1YjU5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDUyMiw4ICs0NTIyLDggQEAgdm9pZCBGcmFt
ZVZpZXc6OnBhaW50Q29udGVudHNGb3JTbmFwc2hvdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QKICAgICAvLyBhZnRlciB3ZSBwYWludCB0aGUgc25hcHNob3QuCiAgICAg
aWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rpb24pIHsKICAgICAgICAg
Zm9yIChhdXRvKiBmcmFtZSA9IG1fZnJhbWUucHRyKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUucHRyKCkpKSB7Ci0gICAgICAgICAgICBpZiAoUmVu
ZGVyVmlldyogcm9vdCA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAg
ICByb290LT5jbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZp
ZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgICAgICAgICAgICAgcmVuZGVyVmll
dy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdJbWFnZS5jcHAKaW5kZXggY2QyYmQ0Mzc1MTdiNjMyMGY2Yzk1MzQwODIyOWI5
MWI1ZDcwMWFiNy4uZjhhNDVkNjk0MWYzZjc3ZTg0NmY5ODVhMTRmYWU3NjJhNDI1ZDVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCkBAIC0xMzUsMjEgKzEzNSwxOCBAQCBz
dHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7CiAgICAgU2NvcGVkRnJhbWVTZWxlY3Rp
b25TdGF0ZShGcmFtZSYgZnJhbWUpCiAgICAgICAgIDogZnJhbWUoZnJhbWUpCiAgICAgewotICAg
ICAgICBpZiAoUmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQotICAg
ICAgICAgICAgcm9vdC0+Z2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBl
bmRSZW5kZXJlciwgZW5kT2Zmc2V0KTsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBm
cmFtZS5jb250ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9IHJlbmRlclZp
ZXctPnNlbGVjdGlvbigpLmdldCgpOwogICAgIH0KIAogICAgIH5TY29wZWRGcmFtZVNlbGVjdGlv
blN0YXRlKCkKICAgICB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJhbWUuY29u
dGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByb290LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5k
ZXJlciwgc3RhcnRPZmZzZXQsIGVuZFJlbmRlcmVyLCBlbmRPZmZzZXQsIFJlbmRlclZpZXc6OlJl
cGFpbnROb3RoaW5nKTsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250
ZW50UmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLnNldChz
ZWxlY3Rpb24sIFNlbGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAg
IH0KIAogICAgIGNvbnN0IEZyYW1lJiBmcmFtZTsKLSAgICBSZW5kZXJPYmplY3QqIHN0YXJ0UmVu
ZGVyZXI7Ci0gICAgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlcjsKLSAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBzdGFydE9mZnNldDsKLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbmRP
ZmZzZXQ7CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0IHNlbGVjdGlvbjsKIH07CiAK
ICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMTg2LDEwICsxODMsMTAgQEAgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZv
cmNlQmxhY2sKICAgICBpbnQgc3RhcnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpOwogICAgIGludCBlbmRPZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAg
dmlldy0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRSZW5kZXJl
ciwgZW5kT2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuc2V0KHtzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldH0sIFNlbGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAg
IC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2Ug
dXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxl
Y3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgotICAgIHJl
dHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUs
IHZpZXctPnNlbGVjdGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CisgICAgcmV0dXJu
IGNyZWF0ZURyYWdJbWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmll
dy0+c2VsZWN0aW9uKCkuYm91bmRzKCksIG9wdGlvbnMpLCBudWxscHRyKTsKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggZWY2ZDNh
OGYxMWIxMWM1NzZiZDg2YjdjMjAzNDM0NzcxYjE1NmY2NS4uODQ0YTQ2Njg4Y2EwMDI4NmRlODc4
NTIyZGFlODMzMjRkMDZlODBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcApAQCAtMTQ0LDggKzE0NCw4IEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
dGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAgIFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgc3RhdGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7CiAgICAg
aWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgfHwgc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Cb3RoKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zLCBlbmRQb3M7Ci0gICAgICAgIHJl
bmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIGF1
dG8gc3RhcnRQb3MgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9u
KCk7CisgICAgICAgIGF1dG8gZW5kUG9zID0gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCku
ZW5kUG9zaXRpb24oKTsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5l
IGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgogICAgICAgICBBU1NFUlQo
c3RhcnQoKSArIGxlbigpID49IChpc0xpbmVCcmVhaygpID8gMSA6IDApKTsKICAgICAgICAgdW5z
aWduZWQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/
IDEgOiAwKTsKQEAgLTY0Miw5ICs2NDIsOCBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVk
PiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAgaWYgKHNlbGVj
dGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1
cm4geyAwLCBtX2xlbiB9OwogICAgIAotICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgIHVuc2lnbmVk
IGVuZDsKLSAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOworICAg
IGF1dG8gc3RhcnQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9u
KCk7CisgICAgYXV0byBlbmQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3Np
dGlvbigpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
blN0YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNl
IGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGFjMmEwNTFmM2FjNDMzNGNh
ZjMzMzQzOWZjY2NmZDM3ZjM3Nzg1ZWEuLjAwMmUzZjc2MWY2ZDZiNTBmOTg2ZTQyZWZlMTNlNWY5
NzRhODcxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAt
MTg2NCw4ICsxODY0LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29u
c3QKICAgICAgICAgfHwgaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpIHx8IHN0eWxlKCkuY29sdW1u
U3BhbigpID09IENvbHVtblNwYW5BbGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAg
IGlmICh2aWV3KCkuc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KCkpIHsKLSAgICAgICAgTm9kZSogc3Rh
cnRFbGVtZW50ID0gdmlldygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpLT5ub2RlKCk7CisgICAg
aWYgKHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0RWxl
bWVudCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpLT5ub2RlKCk7CiAgICAgICAgIGlmIChz
dGFydEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZWxl
bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBjYjUwMDI5MGQ2MDQ2ZTQ3NjMxZWU2NTY4
OGEwNDgyOGNiMGVhZDFmLi4xMmZiNDAyYWRmYTU0MDYyNjU1MzI3MmQxMTUyODFkYzBjYWRiZjdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTIwMiwy
NiArMTIwMiw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJTdWJUcmVlQW5kTWFy
ayhUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFJlbmRlck9iCiAKICNlbmRpZiAvLyBOREVCVUcK
IAotU2VsZWN0aW9uU3VidHJlZVJvb3QmIFJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9vdCgpIGNv
bnN0Ci17Ci0gICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRGbG93ID0gZW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKTsKLSAgICBpZiAoIWZyYWdtZW50ZWRGbG93KQotICAgICAgICBy
ZXR1cm4gdmlldygpOwotCi0gICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uRmxvdz4oKmZyYWdt
ZW50ZWRGbG93KSkgewotICAgICAgICBpZiAoIWZyYWdtZW50ZWRGbG93LT5jb250YWluaW5nQmxv
Y2soKSkKLSAgICAgICAgICAgIHJldHVybiB2aWV3KCk7Ci0gICAgICAgIHJldHVybiBmcmFnbWVu
dGVkRmxvdy0+Y29udGFpbmluZ0Jsb2NrKCktPnNlbGVjdGlvblJvb3QoKTsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHZpZXcoKTsKLX0KLQotdm9pZCBSZW5k
ZXJPYmplY3Q6OnNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzcG9zLCB1bnNpZ25lZCYgZXBv
cykgY29uc3QKLXsKLSAgICBzZWxlY3Rpb25Sb290KCkuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
blN0YXJ0RW5kUG9zaXRpb25zKHNwb3MsIGVwb3MpOwotfQotCiBGbG9hdFBvaW50IFJlbmRlck9i
amVjdDo6bG9jYWxUb0Fic29sdXRlKGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsUG9pbnQsIE1hcENv
b3JkaW5hdGVzRmxhZ3MgbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0CiB7CiAgICAgVHJhbnNm
b3JtU3RhdGUgdHJhbnNmb3JtU3RhdGUoVHJhbnNmb3JtU3RhdGU6OkFwcGx5VHJhbnNmb3JtRGly
ZWN0aW9uLCBsb2NhbFBvaW50KTsKQEAgLTE0MzcsOCArMTQxNyw4IEBAIGJvb2wgUmVuZGVyT2Jq
ZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0CiAgICAgcmV0dXJuIHN0ID09IFNlbGVjdGlv
blN0YXJ0CiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkVuZAogICAgICAgICB8fCBzdCA9PSBT
ZWxlY3Rpb25Cb3RoCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb25VbnNwbGl0U3RhcnQoKSA9
PSB0aGlzCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb25VbnNwbGl0RW5kKCkgPT0gdGhpczsK
KyAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0KCkgPT0gdGhpcworICAgICAgICB8
fCB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsKIH0KIAogdm9pZCBSZW5kZXJPYmpl
Y3Q6OndpbGxCZURlc3Ryb3llZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggYzM4NDE2ZDgzMWQ1ZjRlZGUxMWE2M2VkYTZlNWUzZDI4YmRiYzRlZC4uN2ZmYzdm
ODJkNmI1NWJlZDY3NDhiZGRkMTEwOTA4MDlkZTYxZTgzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZW5kZXJMYXllcjsK
IGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJGcmFnbWVudENvbnRh
aW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwotY2xhc3MgU2VsZWN0aW9uU3VidHJlZVJvb3Q7Citj
bGFzcyBTZWxlY3Rpb25SYW5nZURhdGE7CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsKIGNsYXNzIFZp
c2libGVQb3NpdGlvbjsKIApAQCAtNzUyLDkgKzc1Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGlt
YWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0
IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAKLSAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgc2Vs
ZWN0aW9uUm9vdCgpIGNvbnN0OwotICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQm
IHNwb3MsIHVuc2lnbmVkJiBlcG9zKSBjb25zdDsKLSAgICAKICAgICB2b2lkIHJlbW92ZUZyb21Q
YXJlbnQoKTsKIAogICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGFuaW1hdGlvbigpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYTlk
YjkzNDFmYzdkYmJhYzI1MTZhZmU3YmMwNTljY2U0M2MxMGNkMS4uMjgxOGM2NGVjNGQ3YmFlNzA0
NjgzZjkyMzVkZGIyY2FjYjE1OGIwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVwbGFjZWQuY3BwCkBAIC02NDQsMjMgKzY0NCwyMiBAQCB2b2lkIFJlbmRlclJlcGxhY2Vk
OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKIAogYm9vbCBSZW5kZXJS
ZXBsYWNlZDo6aXNTZWxlY3RlZCgpIGNvbnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUgcyA9IHNl
bGVjdGlvblN0YXRlKCk7Ci0gICAgaWYgKHMgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBTZWxlY3Rp
b25TdGF0ZSBzdGF0ZSA9IHNlbGVjdGlvblN0YXRlKCk7CisgICAgaWYgKHN0YXRlID09IFNlbGVj
dGlvbk5vbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25J
bnNpZGUpCisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOwotICAg
IHNlbGVjdGlvblN0YXJ0RW5kKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIGlm
IChzID09IFNlbGVjdGlvblN0YXJ0KQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0g
MDsKLSAgICAgICAgCisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24o
KS5zdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2aWV3KCkuc2VsZWN0
aW9uKCkuZW5kUG9zaXRpb24oKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQpCisg
ICAgICAgIHJldHVybiAhc2VsZWN0aW9uU3RhcnQ7CisKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVt
ZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAx
OwotICAgIGlmIChzID09IFNlbGVjdGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9u
RW5kKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAocyA9PSBT
ZWxlY3Rpb25Cb3RoKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxl
Y3Rpb25FbmQgPT0gZW5kOwotICAgICAgICAKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90
aCkKKyAgICAgICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5k
OwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA0MDNkMTg4N2NjZmEzZjFiMzE2
NzA0OTI4NTg4ZTUwMzZhZjE5YzhlLi4zZDlmZmNiMmU1MGI2OTQxYTA0MTEyMjg4YmZkMDg4YWI3
MmM0YTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNDQx
LDEzICsxNDQxLDE1IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJl
Y3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICAvLyBOb3cgY2Fs
Y3VsYXRlIHN0YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAv
LyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICB1bnNpZ25lZCBz
dGFydFBvcywgZW5kUG9zOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zOworICAgIHVuc2lnbmVkIGVu
ZFBvczsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAg
ICAgICAgLy8gV2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CiAg
ICAgICAgIGVuZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICBzZWxl
Y3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgc3RhcnRQb3MgPSB2aWV3
KCkuc2VsZWN0aW9uKCkuc3RhcnRQb3NpdGlvbigpOworICAgICAgICBlbmRQb3MgPSB2aWV3KCku
c2VsZWN0aW9uKCkuZW5kUG9zaXRpb24oKTsKICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gU2VsZWN0aW9uU3RhcnQpCiAgICAgICAgICAgICBlbmRQb3MgPSB0ZXh0TGVuZ3RoKCk7CiAg
ICAgICAgIGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uRW5kKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCmluZGV4IDJj
NDg5MjE4YWVhZTkxOWRhZmFmODJhMWJlZWI3NWY1YmFiYmU3ZDYuLjc1Y2Y3M2ZiNGFkNTg3MTQ0
N2IyMmMwODA4NjE3MjZhZGNmNGVhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSb290SW5saW5l
Qm94LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0NSw4ICs0NDYsOCBAQCB2b2lkIFJl
bmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVy
LCBSZW5kZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQg
c3RhcnQsIGVuZDsKLSAgICByZW5kZXJlci5zZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsK
KyAgICBhdXRvIHN0YXJ0ID0gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRp
b24oKTsKKyAgICBhdXRvIGVuZCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3Np
dGlvbigpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSB7
CiAgICAgICAgIGVuZCA9IHJlbmRlcmVyLnRleHRMZW5ndGgoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IGU1ZGNkZTI5MDI1YTFiYmRkNjk4MmUyNTBjNDAy
OWUxMTFiZWZhYTkuLjlkY2NiYTQ3N2QxZjAwYjViOWY2ZWY5ZjdiNjMxYTE1YTVmZmNkOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTc4LDUzICs3OCwxMSBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9kaXNhbGxvd0xheW91dCB7IGZhbHNlIH07CiB9OwogCi1z
dHJ1Y3QgU2VsZWN0aW9uSXRlcmF0b3IgewotICAgIFNlbGVjdGlvbkl0ZXJhdG9yKFJlbmRlck9i
amVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQotICAgIHsKLSAgICAgICAg
Y2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLSAgICAK
LSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBj
dXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3NwYW5u
ZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50
LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0gICAgICAgIGNoZWNrRm9yU3Bhbm5lcigp
OwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgewotICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsKLSAgICAg
ICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIG1fY3VycmVu
dCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOwotICAgICAgICAgICAgY2hlY2tGb3JT
cGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQotICAgIHsKLSAgICAgICAgaWYg
KCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7Ci0gICAgICAg
IG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwotICAgICAgICBtX2N1cnJlbnQg
PSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBtX2N1
cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19OwotCiBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3
KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlckJs
b2NrRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX2ZyYW1lVmlldygqZG9j
dW1lbnQudmlldygpKQorICAgICwgbV9zZWxlY3Rpb24oKnRoaXMpCiAgICAgLCBtX2xhenlSZXBh
aW50VGltZXIoKnRoaXMsICZSZW5kZXJWaWV3OjpsYXp5UmVwYWludFRpbWVyRmlyZWQpCi0jaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcigq
dGhpcykKLSNlbmRpZgogewogICAgIHNldElzUmVuZGVyVmlldygpOwogCkBAIC02OTcsMjkwICs2
NTUsNiBAQCB2b2lkIFJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
IHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKICAgICBxdWFkcy5hcHBlbmQoRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgbGF5ZXIoKS0+c2l6ZSgpKSk7CiB9CiAKLXN0YXRpYyBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCwgdW5zaWduZWQg
b2Zmc2V0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmNoaWxkQXQob2Zmc2V0KTsKLSAgICBy
ZXR1cm4gY2hpbGQgPyBjaGlsZCA6IG9iamVjdC0+bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVu
KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gc3VidHJl
ZVNlbGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAgcmV0dXJuIHNuYXBw
ZWRJbnRSZWN0KHNlbFJlY3QpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclZpZXc6OnN1YnRyZWVT
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVj
dGlvbkluZm8+PiBTZWxlY3Rpb25NYXA7Ci0gICAgU2VsZWN0aW9uTWFwIHNlbGVjdGVkT2JqZWN0
czsKLQotICAgIFJlbmRlck9iamVjdCogb3MgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKTsKLSAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
RW5kKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0
aW9uRW5kKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkVu
ZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwotICAgIFNlbGVj
dGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKLSAgICB3aGlsZSAob3MgJiYgb3Mg
IT0gc3RvcCkgewotICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBvcyA9
PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSB8fCBvcyA9PSBzZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCkpICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5v
bmUpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5n
IGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxs
LgotICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywgc3RkOjptYWtlX3VuaXF1ZTxS
ZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIGNsaXBUb1Zpc2libGVDb250ZW50KSk7Ci0gICAgICAg
ICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAg
ICB3aGlsZSAoY2IgJiYgIWlzPFJlbmRlclZpZXc+KCpjYikpIHsKLSAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHNlbGVjdGVk
T2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAg
ICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpj
YiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRh
aW5pbmdCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3MgPSBz
ZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGNyZWF0ZSBhIHNp
bmdsZSBib3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxlY3Rpb24u
Ci0gICAgTGF5b3V0UmVjdCBzZWxSZWN0OwotICAgIFNlbGVjdGlvbk1hcDo6aXRlcmF0b3IgZW5k
ID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwotICAgIGZvciAoU2VsZWN0aW9uTWFwOjppdGVyYXRv
ciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAg
UmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlLmdldCgpOwotICAgICAgICAvLyBS
ZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBy
ZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KLSAgICAgICAgTGF5
b3V0UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKLSAgICAgICAgaWYgKFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkp
IHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VyclJlY3QpKTsKLSAgICAgICAgICAgIGN1cnJS
ZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyAKLSAgICAgICAgfQotICAgICAg
ICBzZWxSZWN0LnVuaXRlKGN1cnJSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbFJlY3Q7Ci19
Ci0KLXZvaWQgUmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmVw
YWludFN1YnRyZWVTZWxlY3Rpb24oKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3Vi
dHJlZVNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxSZW5kZXJCbG9jayo+IHByb2Nl
c3NlZEJsb2NrczsKLQotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkRhdGEoKS5z
ZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7Ci0gICAgaWYg
KHNlbGVjdGlvbkVuZCkKLSAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVj
dGlvbkVuZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkpOwotICAg
IFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvbkRhdGEoKS5zZWxl
Y3Rpb25TdGFydCgpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogbyA9IHNlbGVjdGlvbkl0ZXJh
dG9yLmN1cnJlbnQoKTsgbyAmJiBvICE9IGVuZDsgbyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQo
KSkgewotICAgICAgICBpZiAoIW8tPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIG8gIT0gc2VsZWN0
aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgJiYgbyAhPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKG8tPnNlbGVjdGlv
blN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKm8sIHRydWUpLnJlcGFpbnQoKTsKLQotICAgICAgICAv
LyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdp
biBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgZm9yIChSZW5k
ZXJCbG9jayogYmxvY2sgPSBvLT5jb250YWluaW5nQmxvY2soKTsgYmxvY2sgJiYgIWlzPFJlbmRl
clZpZXc+KCpibG9jayk7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAg
ICAgICAgICBpZiAoIXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50cnkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpibG9j
aywgdHJ1ZSkucmVwYWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclZp
ZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAgICAv
LyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgot
ICAgIC8vIENoZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBjbGlja2luZyBhcm91bmQgdG8gZmlu
ZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgotICAgIGlmICgoc3RhcnQgJiYgIWVuZCkg
fHwgKGVuZCAmJiAhc3RhcnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGNhcmV0Q2hh
bmdlZCA9IG1fc2VsZWN0aW9uV2FzQ2FyZXQgIT0gZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0
KCk7Ci0gICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJl
dCgpOwotICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQu
Ci0gICAgaWYgKG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID09IHN0YXJ0ICYmIG1fc2VsZWN0aW9u
VW5zcGxpdFN0YXJ0UG9zID09IHN0YXJ0UG9zCi0gICAgICAgICYmIG1fc2VsZWN0aW9uVW5zcGxp
dEVuZCA9PSBlbmQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID09IGVuZFBvcyAmJiAhY2Fy
ZXRDaGFuZ2VkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoU0VSVklD
RV9DT05UUk9MUykKLSAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEg
bm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KLSAgICAv
LyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2Nv
cGUgYW5kIGlzIGRlc3Ryb3llZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VsZWN0aW9uUmVjdEdh
dGhlcmVyOjpOb3RpZmllcj4gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIu
Y2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwotI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQotICAgIC8vIFNldCBnbG9iYWwgcG9zaXRpb25zIGZvciBuZXcgc2VsZWN0aW9uLgotICAg
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgbV9zZWxlY3Rpb25VbnNwbGl0
U3RhcnRQb3MgPSBzdGFydFBvczsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmQgPSBlbmQ7Ci0g
ICAgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID0gZW5kUG9zOwotICAgIGF1dG8gb2xkU2VsZWN0
aW9uRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8T2xkU2VsZWN0aW9uRGF0YT4oKTsKLSAgICBjbGVh
clN1YnRyZWVTZWxlY3Rpb24oYmxvY2tSZXBhaW50TW9kZSwgKm9sZFNlbGVjdGlvbkRhdGEpOwot
ICAgIHNldFNlbGVjdGlvbkRhdGEoU2VsZWN0aW9uU3VidHJlZURhdGEoc3RhcnQsIHN0YXJ0UG9z
LCBlbmQsIGVuZFBvcykpOwotICAgIGFwcGx5U3VidHJlZVNlbGVjdGlvbihibG9ja1JlcGFpbnRN
b2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlk
T2JqZWN0Rm9yTmV3U2VsZWN0aW9uKGNvbnN0IFJlbmRlclZpZXcmIHZpZXcsIGNvbnN0IFJlbmRl
ck9iamVjdCYgb2JqZWN0KQotewotICAgIHJldHVybiAob2JqZWN0LmNhbkJlU2VsZWN0aW9uTGVh
ZigpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSB8
fCAmb2JqZWN0ID09IHZpZXcuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpKSAmJiBvYmpl
Y3Quc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgJiYgb2Jq
ZWN0LmNvbnRhaW5pbmdCbG9jaygpOwotfQotCi12b2lkIFJlbmRlclZpZXc6OmNsZWFyU3VidHJl
ZVNlbGVjdGlvbihTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlLCBPbGRTZWxl
Y3Rpb25EYXRhJiBvbGRTZWxlY3Rpb25EYXRhKSBjb25zdAotewotICAgIC8vIFJlY29yZCB0aGUg
b2xkIHNlbGVjdGVkIG9iamVjdHMuICBUaGVzZSB3aWxsIGJlIHVzZWQgbGF0ZXIKLSAgICAvLyB3
aGVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0aGUgbmV3IHNlbGVjdGVkIG9iamVjdHMuCi0gICAgb2xk
U2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25TdGFydFBvcygpOwotICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uRW5kUG9zID0gc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpOwotICAgIAotICAgIC8vIEJsb2NrcyBjb250
YWluIHNlbGVjdGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRoZW0sIGVpdGhlciBv
biB0aGUgbGVmdCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJsb2Nrcy4KLSAgICAv
LyBJbiBvcmRlciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2UgaGF2ZSB0byBleGFt
aW5lIGxlZnQsIG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxseSwgc2luY2Ugb3Ro
ZXJ3aXNlCi0gICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0IHJlbWFpbiB0aGUg
c2FtZSBldmVuIHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotCi0gICAgUmVuZGVyT2JqZWN0
KiBvcyA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIGF1dG8qIHNlbGVj
dGlvbkVuZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmpl
Y3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0gICAgICAgIHN0b3Ag
PSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9u
SXRlcmF0b3Iob3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIGlm
IChpc1ZhbGlkT2JqZWN0Rm9yTmV3U2VsZWN0aW9uKCp0aGlzLCAqb3MpKSB7Ci0gICAgICAgICAg
ICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1h
cmdpbiBnYXBzLiAgVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBv
bGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0cy5zZXQob3MsIHN0ZDo6bWFrZV91bmlxdWU8
UmVuZGVyU2VsZWN0aW9uSW5mbz4oKm9zLCB0cnVlKSk7Ci0gICAgICAgICAgICBpZiAoYmxvY2tS
ZXBhaW50TW9kZSA9PSBSZXBhaW50TmV3WE9ST2xkKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgICAgIHdoaWxl
IChjYiAmJiAhaXM8UmVuZGVyVmlldz4oKmNiKSkgewotICAgICAgICAgICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2Vs
ZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNiKTsKLSAgICAgICAgICAgICAgICAg
ICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3MgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0
KCk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBzZWxlY3RlZE9iamVjdCA6IG9sZFNlbGVjdGlv
bkRhdGEuc2VsZWN0ZWRPYmplY3RzLmtleXMoKSkKLSAgICAgICAgc2VsZWN0ZWRPYmplY3QtPnNl
dFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uTm9uZSk7Ci19Ci0KLXZvaWQgUmVuZGVy
Vmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVw
YWludE1vZGUsIGNvbnN0IE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEpCi17Ci0g
ICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3RzIGJldHdlZW4g
c2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAotICAgIGlmIChzZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnQoKSAmJiBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSA9PSBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgIHNlbGVjdGlvbkRhdGEoKS5z
ZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbkJvdGgp
OwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0
KCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKS0+c2V0U2Vs
ZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGlmIChzZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kKCktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uRW5kKTsKLSAg
ICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uRGF0YSgp
LnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9
IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCi0gICAgICAgIHNlbGVjdGlvbkVu
ZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25EYXRhRW5kLCBzZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2Vs
ZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJl
bnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9PSBzZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZChTZWxlY3Rpb25JbnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9
IFJlcGFpbnROb3RoaW5nKQotICAgICAgICBsYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpOwotCi0gICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVl
biB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKLSAgICAv
LyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KLSAgICBTZWxlY3RlZE9iamVjdE1h
cCBuZXdTZWxlY3RlZE9iamVjdHM7Ci0gICAgU2VsZWN0ZWRCbG9ja01hcCBuZXdTZWxlY3RlZEJs
b2NrczsKLSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlv
blN0YXJ0KTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0
aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9u
RW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oKnRoaXMsICpjdXJyZW50UmVuZGVy
ZXIpKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4g
c2VsZWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1
cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNvbGxlY3RlZFNlbGVj
dGlvblJlY3RzKCkpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRk
UmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3QpOwotICAgICAgICAg
ICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkpCi0gICAgICAgICAg
ICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFsc2UpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQoY3VycmVudFJlbmRlcmVyLCBX
VEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKLQotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRh
aW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAg
ICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmlu
Z0Jsb2NrKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29udGFpbmlu
Z0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGJs
b2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYmxv
Y2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250
YWluaW5nQmxvY2spOwotICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5p
bmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhi
bG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKLSNlbmRp
ZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWlu
dE1vZGUgPT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUg
YW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBu
ZXcgc2VsZWN0aW9uPwotICAgIGZvciAoY29uc3QgYXV0byYgc2VsZWN0ZWRPYmplY3RJbmZvIDog
b2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBvYmogPSBzZWxlY3RlZE9iamVjdEluZm8ua2V5OwotICAgICAgICBSZW5kZXJTZWxlY3Rpb25J
bmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwotICAgICAgICBSZW5k
ZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gc2VsZWN0ZWRPYmplY3RJbmZvLnZhbHVlLmdldCgp
OwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJl
Y3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKLSAgICAgICAgICAg
IHx8IChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSA9PSBvYmogJiYgb2xkU2VsZWN0
aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyAhPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnRQb3MoKSkKLSAgICAgICAgICAgIHx8IChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkg
PT0gb2JqICYmIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uRW5kUG9zICE9IHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25FbmRQb3MoKSkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQo
KTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+
cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5yZW1vdmUob2Jq
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgb2Jq
ZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwg
YW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoY29uc3QgYXV0byYgc2Vs
ZWN0ZWRPYmplY3RJbmZvIDogbmV3U2VsZWN0ZWRPYmplY3RzKQotICAgICAgICBzZWxlY3RlZE9i
amVjdEluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQg
YmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6
IG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRCbG9ja3MpIHsKLSAgICAgICAgY29uc3QgUmVuZGVy
QmxvY2sqIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5OwotICAgICAgICBSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwot
ICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBzZWxlY3RlZEJsb2Nr
SW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3Rz
KCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0
YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlm
IChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAg
ICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IGJsb2NrcyB0aGF0IHJlbWFpbiB3
ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRv
IGJlIHVwZGF0ZWQuCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG5l
d1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS0+cmVwYWlu
dCgpOwotfQotCi12b2lkIFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqJiBz
dGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZzZXQsIFJlbmRl
ck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgZW5kT2Zmc2V0
KSBjb25zdAotewotICAgIHN0YXJ0UmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRTdGFydDsK
LSAgICBzdGFydE9mZnNldCA9IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zOwotICAgIGVuZFJl
bmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOwotICAgIGVuZE9mZnNldCA9IG1fc2VsZWN0
aW9uVW5zcGxpdEVuZFBvczsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbigp
Ci17Ci0gICAgbGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotICAgIHNldFNl
bGVjdGlvbihudWxscHRyLCBzdGQ6Om51bGxvcHQsIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgUmVw
YWludE5ld01pbnVzT2xkKTsKLX0KLQogYm9vbCBSZW5kZXJWaWV3OjpwcmludGluZygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkucHJpbnRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCmluZGV4IGQ2OGQ3YWVjZGE1MjJlNTExYzQyZTQ2NGM4YWEwODBhYmRj
YzQxMTEuLmM2NTY2Mzc1ZWUxNjQ1ZGY1OWVjMzA5YWNhZmRjMmMwOWQ5ZmUwMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMzEsMTcgKzMxLDEzIEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRoZXJlci5o
IgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VRdWFsaXR5Q29u
dHJvbGxlcjsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRlclF1b3Rl
OwogCi1jbGFzcyBSZW5kZXJWaWV3IGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxvdywgcHVi
bGljIFNlbGVjdGlvblN1YnRyZWVSb290IHsKK2NsYXNzIFJlbmRlclZpZXcgZmluYWwgOiBwdWJs
aWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJWaWV3KERvY3VtZW50Jiwg
UmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlldygpOwpAQCAtODUsMTUgKzgx
LDggQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgd2hvc2UgYmFja2dyb3Vu
ZCBzdHlsZSBpcyB1c2VkIHRvIHBhaW50IHRoZSByb290IGJhY2tncm91bmQuCiAgICAgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXJGb3JSb290QmFja2dyb3VuZCgpIGNvbnN0OwogCi0gICAgZW51bSBT
ZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdNaW51c09s
ZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBl
bmRPYmplY3QsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWlu
dE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqJiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRPZmZz
ZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYg
ZW5kT2Zmc2V0KSBjb25zdDsKLSAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
blVuc3BsaXRTdGFydDsgfQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uVW5zcGxpdEVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdEVuZDsgfQotICAgIEludFJlY3Qgc2Vs
ZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKLSAg
ICB2b2lkIHJlcGFpbnRTZWxlY3Rpb24oKSBjb25zdDsKLQorICAgIFNlbGVjdGlvblJhbmdlRGF0
YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KKyAgICAKICAgICBib29sIHBy
aW50aW5nKCkgY29uc3Q7CiAKICAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdCBvdmVycmlkZTsK
QEAgLTMxMSwyMyArMzAwLDE0IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVCb3goKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xlYXJTdWJ0
cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUsIE9sZFNl
bGVjdGlvbkRhdGEmKSBjb25zdDsKLSAgICB2b2lkIGFwcGx5U3VidHJlZVNlbGVjdGlvbihTZWxl
Y3Rpb25SZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0YSYpOwotICAgIExheW91dFJl
Y3Qgc3VidHJlZVNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1
ZSkgY29uc3Q7Ci0gICAgdm9pZCByZXBhaW50U3VidHJlZVNlbGVjdGlvbigpIGNvbnN0OwotCiBw
cml2YXRlOgogICAgIEZyYW1lVmlldyYgbV9mcmFtZVZpZXc7CiAKLSAgICBSZW5kZXJPYmplY3Qq
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0IHsgbnVsbHB0ciB9OwotICAgIFJlbmRlck9iamVjdCog
bV9zZWxlY3Rpb25VbnNwbGl0RW5kIHsgbnVsbHB0ciB9OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zOwotICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKLQogICAgIC8vIEluY2x1ZGUgdGhpcyBS
ZW5kZXJWaWV3LgogICAgIHVpbnQ2NF90IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKIAogICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlZ2lvbj4gbV9hY2N1bXVsYXRlZFJlcGFpbnRSZWdpb247
CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRhIG1fc2VsZWN0aW9uOwogCiAgICAgLy8gRklYTUU6IE9u
bHkgdXNlZCBieSBlbWJlZGRlZCBXZWJWaWV3cyBpbnNpZGUgQXBwS2l0IE5TVmlld3MuICBGaW5k
IGEgd2F5IHRvIHJlbW92ZS4KICAgICBzdHJ1Y3QgTGVnYWN5UHJpbnRpbmcgewpAQCAtMzU5LDcg
KzMzOSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9yZW5kZXJUcmVlSW50ZXJuYWxNdXRhdGlvbkNvdW50ZXIgeyAw
IH07CiAKLSAgICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9oYXNTb2Z0d2FyZUZpbHRlcnMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV91c2VzRmlyc3RMaW5l
UnVsZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB7IGZhbHNl
IH07CkBAIC0zNzEsOSArMzUwLDYgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFJlbmRlckVsZW1l
bnQqPiBtX3Zpc2libGVJblZpZXdwb3J0UmVuZGVyZXJzOwogICAgIFZlY3RvcjxSZWZQdHI8UmVu
ZGVyV2lkZ2V0Pj4gbV9wcm90ZWN0ZWRSZW5kZXJXaWRnZXRzOwogCi0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0gICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdh
dGhlcmVyOwotI2VuZGlmCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBIYXNoU2V0
PGNvbnN0IFJlbmRlckJveCo+IG1fYm94ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9uczsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5j
cHAKaW5kZXggNDE4OTU2NDYyZjNjYzU1NGM1ZDVmZDg2MThhMDYwYjc4NThiMTZjNi4uNDZiYmNm
Nzk4ZTQ5MDkzNmU4Yzg3YTA0ZjcyYzQwYmEyYzk5NjY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCkBAIC0zMiwxNCArMzIsMzEx
IEBACiAjaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3QuaCIKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJQb3NpdGlvbi5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2VsZWN0aW9uU3VidHJlZVJvb3Q6
OlNlbGVjdGlvblN1YnRyZWVSb290KCkKK3N0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0
ZXJQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZzZXQp
CiB7CisgICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7CisgICAgcmV0
dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4o
KTsKK30KKworc3RydWN0IFNlbGVjdGlvbkl0ZXJhdG9yIHsKKyAgICBTZWxlY3Rpb25JdGVyYXRv
cihSZW5kZXJPYmplY3QqIHN0YXJ0KQorICAgICAgICA6IG1fY3VycmVudChzdGFydCkKKyAgICB7
CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAg
ICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCkKKyAgICB7CisgICAgICAgIFJlbmRl
ck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5pc0VtcHR5KCkgPyBudWxscHRy
IDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7CisgICAgICAgIG1fY3VycmVudCA9
IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4pOworICAgICAgICBjaGVja0Zv
clNwYW5uZXIoKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3VycmVudFNwYW4pIHsKKyAg
ICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJTdGFjay5sYXN0
KCk7CisgICAgICAgICAgICBtX3NwYW5uZXJTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAgICAgICAg
IGNoZWNrRm9yU3Bhbm5lcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2N1cnJlbnQ7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tGb3JTcGFubmVyKCkKKyAgICB7Cisg
ICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KG1fY3Vy
cmVudCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHBsYWNlaG9sZGVyID0g
ZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCptX2N1cnJlbnQp
OworICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9sZGVyKTsKKyAgICAgICAg
bV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOworICAgIH0KKworICAgIFJlbmRlck9i
amVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOworfTsKKworU2VsZWN0aW9uUmFu
Z2VEYXRhOjpTZWxlY3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYgdmlldykKKyAgICA6IG1fcmVu
ZGVyVmlldyh2aWV3KQorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICwgbV9zZWxl
Y3Rpb25SZWN0R2F0aGVyZXIodmlldykKKyNlbmRpZgoreworfQorCit2b2lkIFNlbGVjdGlvblJh
bmdlRGF0YTo6c2V0KGNvbnN0IENvbnRleHQmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tS
ZXBhaW50TW9kZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBv
YmplY3RzIGFyZSBkZWZpbmVkLgorICAgIC8vIENoZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBj
bGlja2luZyBhcm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgorICAg
IGlmICgoc2VsZWN0aW9uLnN0YXJ0ICYmICFzZWxlY3Rpb24uZW5kKSB8fCAoc2VsZWN0aW9uLmVu
ZCAmJiAhc2VsZWN0aW9uLnN0YXJ0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSnVzdCBy
ZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KKyAgICBhdXRvIGlzQ2FyZXQg
PSBtX3JlbmRlclZpZXcuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CisgICAgaWYgKHNl
bGVjdGlvbiA9PSBtX3NlbGVjdGlvbkNvbnRleHQgJiYgbV9zZWxlY3Rpb25XYXNDYXJldCA9PSBp
c0NhcmV0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisg
ICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5vdGlmaWVyIGZvciB0
aGUgbmV3IHJlY3RzIHdlIGFyZSBhYm91dCB0byBnYXRoZXIuCisgICAgLy8gVGhlIE5vdGlmaWVy
IHVwZGF0ZXMgdGhlIEVkaXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlIGFuZCBpcyBkZXN0
cm95ZWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPFNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZp
ZXI+IHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRl
Tm90aWZpZXIoKTsKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBT
ZXQgZ2xvYmFsIHBvc2l0aW9ucyBmb3IgbmV3IHNlbGVjdGlvbi4KKyAgICBhdXRvIG9sZFNlbGVj
dGlvbkRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPFNlbGVjdGlvblJhbmdlRGF0YTo6T2xkU2VsZWN0
aW9uRGF0YT4oKTsKKyAgICBjb2xsZWN0QW5kQ2xlYXIoKm9sZFNlbGVjdGlvbkRhdGEsIGJsb2Nr
UmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7CisgICAgbV9zZWxlY3Rpb25D
b250ZXh0ID0gc2VsZWN0aW9uOworICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0Owor
ICAgIGFwcGx5KCpvbGRTZWxlY3Rpb25EYXRhLCBibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRN
b2RlOjpOb3RoaW5nKTsKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKCkKK3sK
KyAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwor
ICAgIHNldCh7bnVsbHB0ciwgbnVsbHB0ciwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHR9LCBT
ZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Cit9CisKK3ZvaWQg
U2VsZWN0aW9uUmFuZ2VEYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJlbmRl
ckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0
cjsKKyAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgZW5kID0gcmVuZGVy
ZXJBZnRlclBvc2l0aW9uKCptX3NlbGVjdGlvbkNvbnRleHQuZW5kLCBtX3NlbGVjdGlvbkNvbnRl
eHQuZW5kUG9zaXRpb24udmFsdWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9u
SXRlcmF0b3IobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIHJlbmRl
cmVyID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAh
PSBlbmQ7IHJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlm
ICghcmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0
aW9uQ29udGV4dC5zdGFydCAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChyZW5kZXJlci0+c2VsZWN0aW9uU3Rh
dGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpyZW5kZXJlciwgdHJ1ZSkucmVwYWlu
dCgpOworCisgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxp
bmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgor
ICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxv
Y2soKTsgYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9jayk7IGJsb2NrID0gYmxvY2stPmNv
bnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEJsb2Nrcy5hZGQo
YmxvY2spLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
ZW5kZXJTZWxlY3Rpb25JbmZvKCpibG9jaywgdHJ1ZSkucmVwYWludCgpOworICAgICAgICB9Cisg
ICAgfQorfQorCitJbnRSZWN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Ym91bmRzKGJvb2wgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgU2VsZWN0ZWRSZW5kZXJlck1hcCByZW5kZXJl
cnM7CisgICAgUmVuZGVyT2JqZWN0KiBzdGFydCA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsK
KyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChtX3NlbGVjdGlvbkNv
bnRleHQuZW5kKQorICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKCptX3NlbGVj
dGlvbkNvbnRleHQuZW5kLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24udmFsdWUoKSk7
CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOworICAgIHdo
aWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmICgoc3RhcnQtPmNhbkJl
U2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCB8fCBz
dGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAgICAgJiYgc3RhcnQtPnNl
bGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CisgICAgICAg
ICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5k
IG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAg
IHJlbmRlcmVycy5zZXQoc3RhcnQsIHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5m
bz4oKnN0YXJ0LCBjbGlwVG9WaXNpYmxlQ29udGVudCkpOworICAgICAgICAgICAgYXV0byogYmxv
Y2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAoYmxvY2sg
JiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHJlbmRlcmVycy5hZGQoYmxv
Y2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJ
bmZvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBibG9ja0lu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpibG9jaywgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpOworICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2Vs
ZWN0aW9uSXRlcmF0b3IubmV4dCgpOworICAgIH0KKworICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5n
bGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgor
ICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKKyAgICBhdXRvIGVuZCA9IHJlbmRlcmVycy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaSA9IHJlbmRlcmVycy5iZWdpbigpOyBpICE9IGVuZDsgKytp
KSB7CisgICAgICAgIGF1dG8qIGluZm8gPSBpLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgLy8gUmVu
ZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVw
YWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgICAgIExheW91
dFJlY3QgY3VycmVudFJlY3QgPSBpbmZvLT5yZWN0KCk7CisgICAgICAgIGlmIChhdXRvKiByZXBh
aW50Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBG
bG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KGN1cnJlbnRSZWN0KSk7CisgICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFic1F1
YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3Rpb25S
ZWN0LnVuaXRlKGN1cnJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0
KHNlbGVjdGlvblJlY3QpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6Y29sbGVjdEFu
ZENsZWFyKE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEsIGJvb2wgcmVwYWludERp
ZmZlcmVuY2UpIGNvbnN0Cit7CisgICAgLy8gUmVjb3JkIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0
cy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGxhdGVyCisgICAgLy8gd2hlbiB3ZSBjb21wYXJlIGFnYWlu
c3QgdGhlIG5ldyBzZWxlY3RlZCBvYmplY3RzLgorICAgIG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRQ
b3NpdGlvbiA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydFBvc2l0aW9uOworICAgIG9sZFNlbGVj
dGlvbkRhdGEuZW5kUG9zaXRpb24gPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb247Cisg
ICAgCisgICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBz
IGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBs
aW5lcyBhbmQgYmxvY2tzLgorICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0
IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMg
aW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2Ug
cmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJy
ZWQuCisgICAgUmVuZGVyT2JqZWN0KiBzdGFydCA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsK
KyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChtX3NlbGVjdGlvbkNv
bnRleHQuZW5kKQorICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKCptX3NlbGVj
dGlvbkNvbnRleHQuZW5kLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24udmFsdWUoKSk7
CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOworICAgIHdo
aWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVuZGVy
ZXJGb3JOZXdTZWxlY3Rpb24oKnN0YXJ0KSkgeworICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSBy
ZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBt
dXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnJl
bmRlcmVycy5zZXQoc3RhcnQsIHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4o
KnN0YXJ0LCB0cnVlKSk7CisgICAgICAgICAgICBpZiAocmVwYWludERpZmZlcmVuY2UpIHsKKyAg
ICAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3PigqYmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5hZGQoYmxv
Y2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4oKmJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOworICAgIH0KKworICAgIGZv
ciAoYXV0byogc2VsZWN0ZWRSZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtl
eXMoKSkKKyAgICAgICAgc2VsZWN0ZWRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdl
RGF0YTo6YXBwbHkoY29uc3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpPbGRTZWxlY3Rpb25EYXRhJiBv
bGRTZWxlY3Rpb25EYXRhLCBib29sIGlzc3VlUmVwYWludCkKK3sKKyAgICAvLyBVcGRhdGUgdGhl
IHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFydCBh
bmQgc2VsZWN0aW9uRW5kCisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCAmJiBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAg
bV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uQm90aCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX3NlbGVj
dGlvbkNvbnRleHQuc3RhcnQpCisgICAgICAgICAgICBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCk7
CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAgICAgbV9zZWxl
Y3Rpb25Db250ZXh0LmVuZC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbkVuZCk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFy
dCA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsKKyAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5k
ID0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZDsKKyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVu
ZCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVjdGlv
bkVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbigqc2VsZWN0aW9uRGF0YUVuZCwgbV9zZWxlY3Rp
b25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCkpOworICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNl
bGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCog
Y3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJy
ZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25J
dGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSBtX3NlbGVj
dGlvbkNvbnRleHQuc3RhcnQgfHwgY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4
dC5lbmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVy
ZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbkluc2lkZSk7CisgICAgfQorCisgICAgaWYgKGlzc3VlUmVwYWludCkKKyAgICAg
ICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7
CisKKyAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQg
Zm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAorICAgIC8vIHB1dCB0aGVt
IGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgorICAgIFNlbGVjdGVkUmVuZGVyZXJNYXAgbmV3U2Vs
ZWN0ZWRSZW5kZXJlcnM7CisgICAgU2VsZWN0ZWRSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJs
b2NrczsKKyAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlv
blN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0
OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3Vy
cmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmIChp
c1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlcikpIHsKKyAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZv
ID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVy
LCB0cnVlKTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNvbGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCisg
ICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25J
bmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3QpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50
UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFsc2UpOworI2VuZGlmCisgICAgICAgICAgICBu
ZXdTZWxlY3RlZFJlbmRlcmVycy5zZXQoY3VycmVudFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlv
bkluZm8pKTsKKyAgICAgICAgICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5k
ZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Js
b2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkgeworICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8g
PSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250YWluaW5nQmxvY2spOworICAgICAgICAg
ICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2Nr
KCk7CisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAgICAgICAgICAgICBtX3Nl
bGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWlu
ZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFpc3N1ZVJlcGFpbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPworICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJl
ckluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycykgeworICAgICAgICBhdXRvKiByZW5k
ZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLmtleTsKKyAgICAgICAgYXV0byogbmV3SW5mbyA9
IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdldChyZW5kZXJlcik7CisgICAgICAgIGF1dG8qIG9sZElu
Zm8gPSBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJ
bmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3Rh
dGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpCisgICAgICAgICAgICB8fCAobV9zZWxlY3Rpb25Db250
ZXh0LnN0YXJ0ID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRQb3NpdGlvbiAh
PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQb3NpdGlvbikKKyAgICAgICAgICAgIHx8IChtX3Nl
bGVjdGlvbkNvbnRleHQuZW5kID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuZW5kUG9z
aXRpb24gIT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAg
b2xkSW5mby0+cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAg
ICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRS
ZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBp
biB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgor
ICAgIGZvciAoY29uc3QgYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJl
bmRlcmVycykKKyAgICAgICAgc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsK
KworICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/CisgICAgZm9yIChj
b25zdCBhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzKSB7
CisgICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5OworICAgICAgICBh
dXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJsb2NrKTsKKyAgICAgICAgYXV0
byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOworICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZElu
Zm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgeworICAgICAgICAgICAgb2xkSW5mby0+
cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAgICBu
ZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVt
b3ZlKGJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCisgICAgICAgIHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Cit9CisKK2Jvb2wgU2VsZWN0aW9uUmFuZ2VE
YXRhOjppc1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9uTGVh
ZigpCisgICAgICAgIHx8ICZyZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQKKyAg
ICAgICAgfHwgJnJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICYm
IHJlbmRlcmVyLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25l
CisgICAgICAgICYmIHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uU3VidHJlZVJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0
cmVlUm9vdC5oCmluZGV4IGI5YzY4YTcwODdhMjkxNDlkMmMyMTQ4NzZmOTQ1NTZjMjQ5NGY5YjQu
LjBkYTAxODllNzUyNWQ1MTExMTIxNjUzZmM0MzgyYzk4Y2I5YjI3NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oCkBAIC0zMSw3MyArMzEs
NjMgQEAKIAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclNlbGVj
dGlvbkluZm8uaCIKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNpbmNsdWRlICJTZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIERvY3VtZW50OwotCi1jbGFzcyBTZWxlY3Rpb25TdWJ0cmVlUm9vdCB7CitjbGFzcyBTZWxl
Y3Rpb25SYW5nZURhdGEgewogcHVibGljOgorICAgIFNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJW
aWV3Jik7CiAgICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPj4gU2VsZWN0ZWRPYmplY3RNYXA7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJs
b2NrU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGVkQmxvY2tNYXA7Ci0KLSAgICBzdHJ1Y3QgT2xkU2Vs
ZWN0aW9uRGF0YSB7Ci0gICAgICAgIE9sZFNlbGVjdGlvbkRhdGEoKQorICAgIHN0cnVjdCBDb250
ZXh0IHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbnRleHQmIG90aGVyKSBjb25z
dAogICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhcnQgPT0gb3RoZXIuc3RhcnQgJiYg
ZW5kID09IG90aGVyLmVuZCAmJiBzdGFydFBvc2l0aW9uID09IG90aGVyLnN0YXJ0UG9zaXRpb24g
JiYgZW5kUG9zaXRpb24gPT0gb3RoZXIuZW5kUG9zaXRpb247CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAgc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zOwotICAgICAgICBTZWxlY3RlZE9i
amVjdE1hcCBzZWxlY3RlZE9iamVjdHM7Ci0gICAgICAgIFNlbGVjdGVkQmxvY2tNYXAgc2VsZWN0
ZWRCbG9ja3M7CisgICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQgeyBudWxscHRyIH07CisgICAg
ICAgIFJlbmRlck9iamVjdCogZW5kIHsgbnVsbHB0ciB9OworICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBzdGFydFBvc2l0aW9uOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBlbmRQb3NpdGlvbjsKICAgICB9OwogCi0gICAgY2xhc3MgU2VsZWN0aW9uU3VidHJlZURhdGEg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7
Ci0KLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25T
dGFydCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9i
amVjdCogc2VsZWN0aW9uRW5kLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQ
b3MpCi0gICAgICAgICAgICA6IG1fc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCi0gICAg
ICAgICAgICAsIG1fc2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkKLSAgICAgICAgICAgICwgbV9z
ZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykKLSAgICAgICAgICAgICwgbV9zZWxl
Y3Rpb25FbmRQb3Moc2VsZWN0aW9uRW5kUG9zKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICBl
bnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9
OworICAgIHZvaWQgc2V0KGNvbnN0IENvbnRleHQmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2Rl
OjpOZXdYT1JPbGQpOworICAgIENvbnRleHQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25Db250ZXh0OyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIFJlbmRlck9iamVjdCog
c3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQ7IH0KKyAgICBS
ZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5lbmQ7
IH0KKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rp
b25Db250ZXh0LnN0YXJ0UG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0
UG9zaXRpb24udmFsdWUoKTsgfQorICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uKCkgY29uc3QgeyBB
U1NFUlQobV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uKTsgcmV0dXJuIG1fc2VsZWN0aW9u
Q29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpOyB9CiAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBz
ZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnQ7IH0KLSAgICAg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvblN0YXJ0UG9zOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmQ7IH0KLSAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25FbmRQb3M7IH0KLSAgICAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyh1
bnNpZ25lZCYgc3RhcnRQb3MsIHVuc2lnbmVkJiBlbmRQb3MpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgpOwotICAgICAg
ICAgICAgZW5kUG9zID0gbV9zZWxlY3Rpb25FbmRQb3MudmFsdWUoKTsKLSAgICAgICAgfQotICAg
ICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9zZWxl
Y3Rpb25TdGFydCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0g
c3RkOjpudWxsb3B0OwotICAgICAgICAgICAgbV9zZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAg
ICAgICAgICAgbV9zZWxlY3Rpb25FbmRQb3MgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0KKyAg
ICBJbnRSZWN0IGJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7
CisgICAgdm9pZCByZXBhaW50KCkgY29uc3Q7CiAKLSAgICBwcml2YXRlOgotICAgICAgICBSZW5k
ZXJPYmplY3QqIG1fc2VsZWN0aW9uU3RhcnQgeyBudWxscHRyIH07Ci0gICAgICAgIFJlbmRlck9i
amVjdCogbV9zZWxlY3Rpb25FbmQgeyBudWxscHRyIH07Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IG1fc2VsZWN0aW9uRW5kUG9zOworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8
UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxl
Y3RlZFJlbmRlcmVyTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayos
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+PiBTZWxlY3RlZFJlbmRl
ckJsb2NrTWFwOworICAgIAorICAgIHN0cnVjdCBPbGRTZWxlY3Rpb25EYXRhIHsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gZW5kUG9zaXRpb247CisgICAgICAgIFNlbGVjdGVkUmVuZGVyZXJNYXAg
cmVuZGVyZXJzOworICAgICAgICBTZWxlY3RlZFJlbmRlckJsb2NrTWFwIGJsb2NrczsKICAgICB9
OwogCi0gICAgU2VsZWN0aW9uU3VidHJlZVJvb3QoKTsKLQotICAgIFNlbGVjdGlvblN1YnRyZWVE
YXRhJiBzZWxlY3Rpb25EYXRhKCkgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQot
ICAgIGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQotCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25E
YXRhKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25TdWJ0cmVlRGF0YSkgeyBt
X3NlbGVjdGlvblN1YnRyZWVEYXRhID0gc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KKyAgICB2b2lk
IGNvbGxlY3RBbmRDbGVhcihPbGRTZWxlY3Rpb25EYXRhJiwgYm9vbCByZXBhaW50RGlmZmVyZW5j
ZSkgY29uc3Q7CisgICAgdm9pZCBhcHBseShjb25zdCBPbGRTZWxlY3Rpb25EYXRhJiwgYm9vbCBp
c3N1ZVJlcGFpbnQpOworICAgIGJvb2wgaXNWYWxpZFJlbmRlcmVyRm9yTmV3U2VsZWN0aW9uKGNv
bnN0IFJlbmRlck9iamVjdCYpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIFNlbGVjdGlvblN1YnRy
ZWVEYXRhIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7CisgICAgY29uc3QgUmVuZGVyVmlldyYgbV9y
ZW5kZXJWaWV3OworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIFNlbGVjdGlvblJl
Y3RHYXRoZXJlciBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKKyNlbmRpZgorICAgIENvbnRleHQg
bV9zZWxlY3Rpb25Db250ZXh0OworICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNl
IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322311</attachid>
            <date>2017-09-30 21:01:05 -0700</date>
            <delta_ts>2017-10-01 10:56:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20170930210104.patch</filename>
            <type>text/plain</type>
            <size>57885</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uNWQyNDE2MDM3MjVhZWU0NmFlN2I3YTNmYTA3YzA2
YTNkMjEyMzg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVXUyB0ZXN0aW5nLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlv
blVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2ls
bEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRv
Tm9kZU1vZGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGU6On5TY29wZWRGcmFtZVNl
bGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1Nl
bGVjdGlvblJvb3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlciBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNl
ZDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9y
TGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25J
dGVyYXRvcjo6U2VsZWN0aW9uSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpyZW5kZXJlckFmdGVyUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50U3Vi
dHJlZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpzZXRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZE9i
amVjdEZvck5ld1NlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpTZWxlY3Rpb25J
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y3VycmVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9uUmFuZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmFuZ2VEYXRhOjpyZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blJhbmdlRGF0YTo6Ym91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJh
bmdlRGF0YTo6Y29sbGVjdEFuZENsZWFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VE
YXRhOjppc1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmdldCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c3RhcnRQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpPbGRTZWxlY3Rpb25EYXRhOjpPbGRTZWxl
Y3Rpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6U2VsZWN0aW9uU3VidHJlZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpzZWxlY3Rpb25TdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0
YXJ0UG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRy
ZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9u
U3RhcnRFbmRQb3NpdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6c2VsZWN0
aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6c2VsZWN0aW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25TdWJ0cmVlUm9vdDo6c2V0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisKIDIwMTctMDkt
MzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbU2V0dGluZ3NdIFJl
cGxhY2UgU2V0dGluZ3NNYWNyb3MuaCB3aXRoIGEgZ2VuZXJhdGVkIGJhc2UgY2xhc3MgZm9yIFNl
dHRpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGE4
NTdlZGVkZTZiMjM3NzdjNmU4NGNjZmJkMzE0NDExNzE4MWI3NzguLjg4N2ViYjFlZWIyZTg5YzM2
MGU5MjQzY2ZmMGVkOTc0MDZjYTdmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
TmVlZHNTZWxlY3Rpb25VcGRhdGUoKQogewogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9
IHRydWU7CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2
ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCkBAIC00
NDMsNyArNDQzLDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBjbGVh
cigpOwogfQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAKICAg
ICBpZiAoY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJWaWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgcmVu
ZGVyVmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVj
dGlvbigpLmNsZWFyKCk7CiAKICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBzZWxlY3Rpb24gdXBk
YXRlIHNvIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBzZXQgYWdhaW4uCiAgICAgICAgICAgICBtX3Bl
bmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwpAQCAtMTUxNyw5ICsxNTE3LDggQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtU
aW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQorICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgc2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMTk5
NSw3ICsxOTk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUg
cGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZp
ZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5yZXBhaW50U2VsZWN0
aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENh
cmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNl
ZCkKQEAgLTIwOTAsNyArMjA4OSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogI2VuZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAg
ICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjExNSw3ICsyMTE0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVu
ZGVyZXIsIGVuZE9mZnNldCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRS
ZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9KTsKICAgICB9CiB9
CiAKQEAgLTIyMzIsMTIgKzIyMzEsMTIgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKCptX2ZyYW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAg
IGlmICghcm9vdCB8fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgYXV0byogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBp
ZiAoIXJlbmRlclZpZXcgfHwgIXZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAK
LSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xp
cFRvVmlzaWJsZUNvbnRlbnQpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IHJlbmRlclZpZXct
PnNlbGVjdGlvbigpLmJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CiAgICAgcmV0dXJuIGNs
aXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZp
c2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCkpIDogc2VsZWN0aW9uUmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IGNjZWY0YjI3MTFlYWIxNGM4YWIzZDIwZGJlYmI4MmUyMWRmY2QwYTAuLjI3OWQyZWU2ODE3
MWU4OTQ1MmY0ZmNjNGNkMmRjMTI5MzY1ZTEzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTQ1MjIsOCArNDUyMiw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8g
YWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlv
biA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7CiAgICAgICAgIGZvciAoYXV0byogZnJhbWUgPSBtX2Zy
YW1lLnB0cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2Zy
YW1lLnB0cigpKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgcm9vdC0+Y2xlYXJTZWxlY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKQorICAgICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmlu
ZGV4IGNkMmJkNDM3NTE3YjYzMjBmNmM5NTM0MDgyMjliOTFiNWQ3MDFhYjcuLmY4YTQ1ZDY5NDFm
M2Y3N2U4NDZmOTg1YTE0ZmFlNzYyYTQyNWQ1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcApAQCAtMTM1LDIxICsxMzUsMTggQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0
aW9uU3RhdGUgewogICAgIFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoRnJhbWUmIGZyYW1lKQog
ICAgICAgICA6IGZyYW1lKGZyYW1lKQogICAgIHsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJv
b3QgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJvb3QtPmdldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7
CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkp
CisgICAgICAgICAgICBzZWxlY3Rpb24gPSByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5nZXQoKTsK
ICAgICB9CiAKICAgICB+U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSgpCiAgICAgewotICAgICAg
ICBpZiAoUmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAg
ICAgICAgcm9vdC0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRS
ZW5kZXJlciwgZW5kT2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgICAg
IGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYg
ZnJhbWU7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7
Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIFNlbGVjdGlvblJh
bmdlRGF0YTo6Q29udGV4dCBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAg
LTE4NiwxMCArMTgzLDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShG
cmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAgaW50IHN0YXJ0
T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zm
c2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFy
dFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmll
dzo6UmVwYWludE5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRSZW5k
ZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9LCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNu
YXBzaG90RnJhbWVSZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcK
ICAgICAvLyBGcmFtZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0
aW9uIGZyb20gdGhlIEZyYW1lIGl0c2VsZi4KLSAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJv
bVNuYXBzaG90KHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb25Cb3VuZHMo
KSwgb3B0aW9ucyksIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25h
cHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kcygp
LCBvcHRpb25zKSwgbnVsbHB0cik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGI2NGZjZWIzYTlmMzk4Y2MwMTY4M2U0ZmNkMmU0
ZWVmNjE1M2M4YmIuLmU2YTlkYTkyYjUwMjM4OThkNWZjYTQ3OWM3MjY2NjgzMGY4ODFjMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE0NCw4ICsx
NDQsOCBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVj
dGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0g
cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5k
IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydFBvcywgZW5kUG9zOwotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5nZXRTZWxl
Y3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgYXV0byBzdGFydFBvcyA9
IHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAg
YXV0byBlbmRQb3MgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlvbigp
OwogICAgICAgICAvLyBUaGUgcG9zaXRpb24gYWZ0ZXIgYSBoYXJkIGxpbmUgYnJlYWsgaXMgY29u
c2lkZXJlZCB0byBiZSBwYXN0IGl0cyBlbmQuCiAgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVu
KCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOwogICAgICAgICB1bnNpZ25lZCBsYXN0U2Vs
ZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwpAQCAt
NjM5LDkgKzYzOSw4IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVu
IH07CiAgICAgCi0gICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHJl
bmRlcmVyKCkudmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOworICAgIGF1
dG8gc3RhcnQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7
CisgICAgYXV0byBlbmQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlv
bigpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlm
IChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDVhYjEzMzI0MmM1NmM5Y2IwMWZk
OWM0Njg5ZGQxNGU5NGRmZGQ2YTkuLmJhYzU1Njk4MzRlOTI5YjIzYzdkYzg5ZGU5YjNjZTJjYmMw
MDVhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTg2
NSw4ICsxODY1LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29uc3QK
ICAgICAgICAgfHwgaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpIHx8IHN0eWxlKCkuY29sdW1uU3Bh
bigpID09IENvbHVtblNwYW5BbGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlm
ICh2aWV3KCkuc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KCkpIHsKLSAgICAgICAgTm9kZSogc3RhcnRF
bGVtZW50ID0gdmlldygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpLT5ub2RlKCk7CisgICAgaWYg
KHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVu
dCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpLT5ub2RlKCk7CiAgICAgICAgIGlmIChzdGFy
dEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZWxlbWVu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YmJjMjg5NTRmODBiZDdiNzAyZTUxMGZhZjAw
M2NmODc1MGVmODZkLi5kNTYxMjlmN2QzZjNkMDZhNzE2MDA5NTg0Njg2NDliNGQ2NWVmNjZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQxNyw4ICsx
NDE3LDggQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3QKICAg
ICByZXR1cm4gc3QgPT0gU2VsZWN0aW9uU3RhcnQKICAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9u
RW5kCiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkJvdGgKLSAgICAgICAgfHwgdmlldygpLnNl
bGVjdGlvblVuc3BsaXRTdGFydCgpID09IHRoaXMKLSAgICAgICAgfHwgdmlldygpLnNlbGVjdGlv
blVuc3BsaXRFbmQoKSA9PSB0aGlzOworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSA9PSB0aGlzCisgICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmQoKSA9PSB0aGlz
OwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBiYWExZjY1NGQ1MTkxZDI4NjdlZGVhYmZj
OGJhZDIyZWVkZTViMWU0Li5iNDgxMGVjMzE2MWFhMGQ5NTQxNWJjMGI4MjExYzdmYTc3MTNkYTUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02Miw3ICs2Miw3
IEBAIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKIGNs
YXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogY2xhc3MgUmVuZGVyVGhlbWU7Ci1jbGFzcyBT
ZWxlY3Rpb25TdWJ0cmVlUm9vdDsKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YTsKIGNsYXNzIFRy
YW5zZm9ybVN0YXRlOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCA2NDBhN2JhZWQ4ZWIzYTdhODRkYmFi
NThjOTZhNDM5YWMzZDY2OTI2Li4yODE4YzY0ZWM0ZDdiYWU3MDQ2ODNmOTIzNWRkYjJjYWNiMTU4
YjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAg
LTY0NCwyMyArNjQ0LDIyIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHN0YXRlKQogCiBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVk
KCkgY29uc3QKIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSBzID0gc2VsZWN0aW9uU3RhdGUoKTsKLSAg
ICBpZiAocyA9PSBTZWxlY3Rpb25Ob25lKQorICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2Vs
ZWN0aW9uU3RhdGUoKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzID09IFNlbGVjdGlvbkluc2lkZSkKKyAgICBpZiAoc3Rh
dGUgPT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHVuc2ln
bmVkIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7Ci0gICAgdmlldygpLmdldFNlbGVjdGlv
blN0YXJ0RW5kKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIGlmIChzID09IFNl
bGVjdGlvblN0YXJ0KQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMDsKLSAgICAg
ICAgCisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBv
c2l0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuZW5k
UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIHJl
dHVybiAhc2VsZWN0aW9uU3RhcnQ7CisKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhh
c0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAgIGlm
IChzID09IFNlbGVjdGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAg
ICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25C
b3RoKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxlY3Rpb25FbmQg
PT0gZW5kOwotICAgICAgICAKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkKKyAgICAg
ICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBkZjEzMzE5ODMzNzdlNWEzZDk2MzM1YWI5MmU1
OTM3ZmNkNzRkM2QwLi4zZDlmZmNiMmU1MGI2OTQxYTA0MTEyMjg4YmZkMDg4YWI3MmM0YTMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNDQxLDEzICsxNDQx
LDE1IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGlu
ZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0
YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNs
dWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICB1bnNpZ25lZCBzdGFydFBvcywg
ZW5kUG9zOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zOworICAgIHVuc2lnbmVkIGVuZFBvczsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8g
V2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CiAgICAgICAgIGVu
ZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICB2aWV3KCkuZ2V0U2Vs
ZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIHN0YXJ0UG9zID0gdmll
dygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgZW5kUG9zID0gdmlldygp
LnNlbGVjdGlvbigpLmVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IFNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0gdGV4dExlbmd0aCgpOwog
ICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBj
MjUwYTRkZmI3NTAyMzU4NGNhZjIyZWI4ZTE1ZjdjNGRiMDUxZmFlLi43NWUyMWM1ZGYzOTQ4MDZi
YTg0MzQyMmZmYTg1OGM2MjY3YmU4OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCkBAIC00NDYsMTEgKzQ0NiwxMCBAQCB2b2lkIFJl
bmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVy
LCBSZW5kZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQg
c3RhcnQsIGVuZDsKLSAgICByZW5kZXJlci52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3Rh
cnQsIGVuZCk7CisgICAgYXV0byBzdGFydCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5z
dGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBlbmQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9u
KCkuZW5kUG9zaXRpb24oKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7Ci0KICAgICAg
ICAgLy8gdG8gaGFuZGxlIHNlbGVjdGlvbiBmcm9tIGVuZCBvZiB0ZXh0IHRvIGVuZCBvZiBsaW5l
CiAgICAgICAgIGlmIChzdGFydCAmJiBzdGFydCA9PSBlbmQpCiAgICAgICAgICAgICBzdGFydCA9
IGVuZCAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODhj
ZTgzNDliMTNlZjQxMjEyYWE3ZjdiNDhjMDgwYTA2ZTQ5NGZkZC4uZjhlOTc4OGZmYjRlNzIwN2E5
OTI0OTJiYjg4M2JjZTgyMjYzMTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNzgsNTMgKzc4LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rpc2FsbG93
TGF5b3V0IHsgZmFsc2UgfTsKIH07CiAKLXN0cnVjdCBTZWxlY3Rpb25JdGVyYXRvciB7Ci0gICAg
U2VsZWN0aW9uSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJl
bnQoc3RhcnQpCi0gICAgewotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnQ7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNF
bXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAg
ICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsK
LSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1
cnJlbnRTcGFuKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9z
cGFubmVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVy
KCk7Ci0gICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bh
bm5lcigpCi0gICAgewotICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyPihtX2N1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRv
JiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyPigqbV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhv
bGRlcik7Ci0gICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9
Ci0KLSAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07
Ci0KIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxl
KSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1bWVudC52aWV3KCkpCisgICAgLCBtX3NlbGVjdGlv
bigqdGhpcykKICAgICAsIG1fbGF6eVJlcGFpbnRUaW1lcigqdGhpcywgJlJlbmRlclZpZXc6Omxh
enlSZXBhaW50VGltZXJGaXJlZCkKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAs
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKCp0aGlzKQotI2VuZGlmCiB7CiAgICAgc2V0SXNSZW5k
ZXJWaWV3KCk7CiAKQEAgLTY5NywyOTAgKzY1NSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAog
ICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllcigpLT5zaXplKCkp
KTsKIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKFJlbmRl
ck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVj
dC0+Y2hpbGRBdChvZmZzZXQpOwotICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogb2JqZWN0LT5u
ZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKLX0KLQotSW50UmVjdCBSZW5kZXJWaWV3Ojpz
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICBM
YXlvdXRSZWN0IHNlbFJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVD
b250ZW50KTsKLSAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsUmVjdCk7Ci19Ci0KLUxheW91
dFJlY3QgUmVuZGVyVmlldzo6c3VidHJlZVNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAotewotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGlvbk1hcDsKLSAgICBT
ZWxlY3Rpb25NYXAgc2VsZWN0ZWRPYmplY3RzOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvcyA9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9
IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3Ag
PSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0gICAgICAgIHN0b3AgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5k
UG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Io
b3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIGlmICgob3MtPmNh
bkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFy
dCgpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVj
dGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFy
ZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhl
eSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMu
c2V0KG9zLCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpvcywgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250
YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4o
KmNiKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlx
dWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAg
ICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBvcyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9
Ci0KLSAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7Ci0gICAg
U2VsZWN0aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7Ci0gICAg
Zm9yIChTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdl
IGNvb3JkaW5hdGVzLgotICAgICAgICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgp
OwotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9
IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgewotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1
YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJy
UmVjdCkpOwotICAgICAgICAgICAgY3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7IAotICAgICAgICB9Ci0gICAgICAgIHNlbFJlY3QudW5pdGUoY3VyclJlY3QpOwotICAg
IH0KLSAgICByZXR1cm4gc2VsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U2Vs
ZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigpOwotfQotCi12
b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBI
YXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwotCi0gICAgYXV0byogc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVj
dCogZW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBlbmQgPSBy
ZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRl
cmF0b3Ioc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkpOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBvID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBv
ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmICghby0+Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkgJiYgbyAhPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBv
ICE9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoby0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqbywgdHJ1
ZSkucmVwYWludCgpOwotCi0gICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBh
aW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBh
cyB3ZWxsLgotICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBibG9jayA9IG8tPmNvbnRhaW5pbmdC
bG9jaygpOyBibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKTsgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFk
ZChibG9jaykuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVu
ZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBi
bG9ja1JlcGFpbnRNb2RlKQotewotICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQg
ZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCi0gICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQg
dHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQu
Ci0gICAgaWYgKChzdGFydCAmJiAhZW5kKSB8fCAoZW5kICYmICFzdGFydCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgY2FyZXRDaGFuZ2VkID0gbV9zZWxlY3Rpb25XYXNDYXJldCAhPSBm
cmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKLSAgICBtX3NlbGVjdGlvbldhc0NhcmV0ID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhl
IHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KLSAgICBpZiAobV9zZWxlY3Rpb25VbnNwbGl0U3Rh
cnQgPT0gc3RhcnQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3MgPT0gc3RhcnRQb3MKLSAg
ICAgICAgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kID09IGVuZCAmJiBtX3NlbGVjdGlvblVuc3Bs
aXRFbmRQb3MgPT0gZW5kUG9zICYmICFjYXJldENoYW5nZWQpIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBj
dXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBh
cmUgYWJvdXQgdG8gZ2F0aGVyLgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0
b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyPiByZWN0Tm90aWZpZXIg
PSBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5k
aWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLy8gU2V0IGdsb2JhbCBwb3NpdGlv
bnMgZm9yIG5ldyBzZWxlY3Rpb24uCi0gICAgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgPSBzdGFy
dDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgIG1fc2Vs
ZWN0aW9uVW5zcGxpdEVuZCA9IGVuZDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPSBl
bmRQb3M7Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxPbGRT
ZWxlY3Rpb25EYXRhPigpOwotICAgIGNsZWFyU3VidHJlZVNlbGVjdGlvbihibG9ja1JlcGFpbnRN
b2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci0gICAgc2V0U2VsZWN0aW9uRGF0YShTZWxlY3Rpb25T
dWJ0cmVlRGF0YShzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9zKSk7Ci0gICAgYXBwbHlTdWJ0
cmVlU2VsZWN0aW9uKGJsb2NrUmVwYWludE1vZGUsICpvbGRTZWxlY3Rpb25EYXRhKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oY29uc3QgUmVu
ZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgcmV0dXJu
IChvYmplY3QuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJm9iamVjdCA9PSB2aWV3LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCkpICYmIG9iamVjdC5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uTm9uZSAmJiBvYmplY3QuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyVmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2Rl
IGJsb2NrUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEpIGNv
bnN0Ci17Ci0gICAgLy8gUmVjb3JkIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cy4gIFRoZXNlIHdp
bGwgYmUgdXNlZCBsYXRlcgotICAgIC8vIHdoZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBuZXcg
c2VsZWN0ZWQgb2JqZWN0cy4KLSAgICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9z
ID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0UG9zKCk7Ci0gICAgb2xkU2VsZWN0aW9u
RGF0YS5zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCk7
Ci0gICAgCi0gICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBn
YXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2Vl
biBsaW5lcyBhbmQgYmxvY2tzLgotICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCBy
ZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVj
dHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhv
c2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2Nj
dXJyZWQuCi0KLSAgICBSZW5kZXJPYmplY3QqIG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
blN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVj
dGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNl
bGVjdGlvbkVuZCkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rp
b25FbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKLSAgICBT
ZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7Ci0gICAgd2hpbGUgKG9zICYm
IG9zICE9IHN0b3ApIHsKLSAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24o
KnRoaXMsICpvcykpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9y
IHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuICBUaGV5IG11c3QgYmUgZXhhbWlu
ZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3Rz
LnNldChvcywgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIHRydWUp
KTsKLSAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdYT1JPbGQp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFpczxSZW5kZXJWaWV3PigqY2IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkQmxvY2tzLmFkZChj
YiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZv
PigqY2IpOwotICAgICAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBv
cyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHNl
bGVjdGVkT2JqZWN0IDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMua2V5cygpKQot
ICAgICAgICBzZWxlY3RlZE9iamVjdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rp
b25Ob25lKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjphcHBseVN1YnRyZWVTZWxlY3Rpb24oU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0
YSYgb2xkU2VsZWN0aW9uRGF0YSkKLXsKLSAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0
dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5k
Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydCgpID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkK
LSAgICAgICAgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCktPnNldFNlbGVjdGlvblN0
YXRlSWZOZWVkZWQoU2VsZWN0aW9uQm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSkKLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0
YXJ0KTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAg
ICAgICAgIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJ
Zk5lZWRlZChTZWxlY3Rpb25FbmQpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBz
ZWxlY3Rpb25EYXRhRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRGF0
YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVj
dGlvbkRhdGFFbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsK
LSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0
OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3Vy
cmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChj
dXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgY3Vy
cmVudFJlbmRlcmVyID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rp
b25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIGxheWVy
KCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0
aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywg
d2FsayB0aGVtIGFnYWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBs
aXN0LgotICAgIFNlbGVjdGVkT2JqZWN0TWFwIG5ld1NlbGVjdGVkT2JqZWN0czsKLSAgICBTZWxl
Y3RlZEJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0g
U2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1
cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlv
bkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVj
dGlvbigqdGhpcywgKmN1cnJlbnRSZW5kZXJlcikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKLQotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2Vs
ZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBt
X3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250
YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0
T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5z
ZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmpl
Y3RzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOwotCi0gICAg
ICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYg
IWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLQot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBi
bG9ja0luZm8tPnJlY3RzKCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50Tm90aGluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3Rz
IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0
cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IHNlbGVjdGVkT2JqZWN0SW5mby5rZXk7
Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZE9iamVj
dHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBzZWxl
Y3RlZE9iamVjdEluZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJ
bmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3
SW5mby0+c3RhdGUoKQotICAgICAgICAgICAgfHwgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25T
dGFydCgpID09IG9iaiAmJiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9zICE9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydFBvcygpKQotICAgICAgICAgICAgfHwgKHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSA9PSBvYmogJiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxl
Y3Rpb25FbmRQb3MgIT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKSkgewotICAg
ICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsK
LSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3
U2VsZWN0ZWRPYmplY3RzLnJlbW92ZShvYmopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQu
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBuZXdTZWxlY3RlZE9i
amVjdHMpCi0gICAgICAgIHNlbGVjdGVkT2JqZWN0SW5mby52YWx1ZS0+cmVwYWludCgpOwotCi0g
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nr
cykgewotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5m
by5rZXk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZElu
Zm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewotICAgICAgICAgICAgb2xkSW5mby0+
cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBu
ZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVt
b3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCi0gICAgICAgIHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6Z2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgc3RhcnRSZW5kZXJlciA9
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwotICAgIHN0YXJ0T2Zmc2V0ID0gbV9zZWxlY3Rpb25V
bnNwbGl0U3RhcnRQb3M7Ci0gICAgZW5kUmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRFbmQ7
Ci0gICAgZW5kT2Zmc2V0ID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotfQotCi12b2lkIFJl
bmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAgICBsYXllcigpLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwg
bnVsbHB0ciwgc3RkOjpudWxsb3B0LCBSZXBhaW50TmV3TWludXNPbGQpOwotfQotCiBib29sIFJl
bmRlclZpZXc6OnByaW50aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5wcmlu
dGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggNTgxODg4ZGU3
MzJhMGNlYTlmZmI3ZDU5N2U3N2QxOWI4YmJmNGRmNC4uMTMyMGZmZjNmZDQ1M2UwZjJlMTc2YTk4
MTVlZjUzMWY4MDczMDQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBA
IC0zMSwxNyArMzEsMTMgQEAKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0SGFzaFNldC5oPgogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVk
ZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJbWFnZVF1YWxpdHlDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOwogY2xhc3MgUmVuZGVyUXVvdGU7CiAKLWNsYXNzIFJlbmRlclZpZXcgZmluYWwgOiBw
dWJsaWMgUmVuZGVyQmxvY2tGbG93LCBwdWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgeworY2xh
c3MgUmVuZGVyVmlldyBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgog
ICAgIFJlbmRlclZpZXcoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5S
ZW5kZXJWaWV3KCk7CkBAIC04NSwxNSArODEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRo
ZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJv
b3QgYmFja2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3Jv
dW5kKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5l
d1hPUk9sZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9OwotICAgIHZvaWQg
c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAg
IHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIs
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwotICAgIHZvaWQgY2xl
YXJTZWxlY3Rpb24oKTsKLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25VbnNwbGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNw
bGl0RW5kOyB9Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxl
Q29udGVudCA9IHRydWUpIGNvbnN0OwotICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbigpIGNvbnN0
OwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHN0YXJ0LCB1bnNpZ25l
ZCYgZW5kKSBjb25zdCB7IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9u
cyhzdGFydCwgZW5kKTsgfQorICAgIFNlbGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyBy
ZXR1cm4gbV9zZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAt
MzEyLDIzICszMDAsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclN1YnRyZWVT
ZWxlY3Rpb24oU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgT2xkU2VsZWN0
aW9uRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlv
blJlcGFpbnRNb2RlLCBjb25zdCBPbGRTZWxlY3Rpb25EYXRhJik7Ci0gICAgTGF5b3V0UmVjdCBz
dWJ0cmVlU2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBj
b25zdDsKLSAgICB2b2lkIHJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3Q7Ci0KIHByaXZh
dGU6CiAgICAgRnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKIAotICAgIFJlbmRlck9iamVjdCogbV9z
ZWxlY3Rpb25VbnNwbGl0U3RhcnQgeyBudWxscHRyIH07Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3Nl
bGVjdGlvblVuc3BsaXRFbmQgeyBudWxscHRyIH07Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRl
clZpZXcuCiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKKyAg
ICBTZWxlY3Rpb25SYW5nZURhdGEgbV9zZWxlY3Rpb247CiAKICAgICAvLyBGSVhNRTogT25seSB1
c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3
YXkgdG8gcmVtb3ZlLgogICAgIHN0cnVjdCBMZWdhY3lQcmludGluZyB7CkBAIC0zNjAsNyArMzM5
LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3JlbmRlckNvdW50ZXJDb3VudCB7IDAgfTsK
ICAgICB1bnNpZ25lZCBtX3JlbmRlclRyZWVJbnRlcm5hbE11dGF0aW9uQ291bnRlciB7IDAgfTsK
IAotICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hh
c1NvZnR3YXJlRmlsdGVycyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxl
cyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsK
QEAgLTM3Miw5ICszNTAsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+
IG1fdmlzaWJsZUluVmlld3BvcnRSZW5kZXJlcnM7CiAgICAgVmVjdG9yPFJlZlB0cjxSZW5kZXJX
aWRnZXQ+PiBtX3Byb3RlY3RlZFJlbmRlcldpZGdldHM7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVy
ZXI7Ci0jZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIEhhc2hTZXQ8Y29u
c3QgUmVuZGVyQm94Kj4gbV9ib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcApp
bmRleCA0MTg5NTY0NjJmM2NjNTU0YzVkNWZkODYxOGEwNjBiNzg1OGIxNmM2Li40NmJiY2Y3OThl
NDkwOTM2ZThjODdhMDRmNzJjNDBiYTJjOTk2NjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKQEAgLTMyLDE0ICszMiwzMTEgQEAK
ICNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rp
b24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3QoKQorc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkKIHsK
KyAgICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVyLmNoaWxkQXQob2Zmc2V0KTsKKyAgICByZXR1cm4g
Y2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwor
fQorCitzdHJ1Y3QgU2VsZWN0aW9uSXRlcmF0b3IgeworICAgIFNlbGVjdGlvbkl0ZXJhdG9yKFJl
bmRlck9iamVjdCogc3RhcnQpCisgICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQorICAgIHsKKyAg
ICAgICAgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCog
Y3VycmVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50OworICAgIH0K
KyAgICAKKyAgICBSZW5kZXJPYmplY3QqIG5leHQoKQorICAgIHsKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBt
X3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gbV9j
dXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7CisgICAgICAgIGNoZWNrRm9yU3Bh
bm5lcigpOworICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgeworICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsK
KyAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1f
Y3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOworICAgICAgICAgICAgY2hl
Y2tGb3JTcGFubmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3du
Y2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7Cisg
ICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgICAgICBtX2N1
cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0
KiBtX2N1cnJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCitTZWxlY3Rpb25SYW5nZURh
dGE6OlNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3JiB2aWV3KQorICAgIDogbV9yZW5kZXJW
aWV3KHZpZXcpCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgLCBtX3NlbGVjdGlv
blJlY3RHYXRoZXJlcih2aWV3KQorI2VuZGlmCit7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VE
YXRhOjpzZXQoY29uc3QgQ29udGV4dCYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFp
bnRNb2RlKQoreworICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVj
dHMgYXJlIGRlZmluZWQuCisgICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNr
aW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQuCisgICAgaWYg
KChzZWxlY3Rpb24uc3RhcnQgJiYgIXNlbGVjdGlvbi5lbmQpIHx8IChzZWxlY3Rpb24uZW5kICYm
ICFzZWxlY3Rpb24uc3RhcnQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBKdXN0IHJldHVy
biBpZiB0aGUgc2VsZWN0aW9uIGhhc24ndCBjaGFuZ2VkLgorICAgIGF1dG8gaXNDYXJldCA9IG1f
cmVuZGVyVmlldy5mcmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKKyAgICBpZiAoc2VsZWN0
aW9uID09IG1fc2VsZWN0aW9uQ29udGV4dCAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2Fy
ZXQpCisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAv
LyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBu
ZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBk
YXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3ll
ZC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4g
cmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3Rp
ZmllcigpOworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIC8vIFNldCBn
bG9iYWwgcG9zaXRpb25zIGZvciBuZXcgc2VsZWN0aW9uLgorICAgIGF1dG8gb2xkU2VsZWN0aW9u
RGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8U2VsZWN0aW9uUmFuZ2VEYXRhOjpPbGRTZWxlY3Rpb25E
YXRhPigpOworICAgIGNvbGxlY3RBbmRDbGVhcigqb2xkU2VsZWN0aW9uRGF0YSwgYmxvY2tSZXBh
aW50TW9kZSA9PSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKKyAgICBtX3NlbGVjdGlvbkNvbnRl
eHQgPSBzZWxlY3Rpb247CisgICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGlzQ2FyZXQ7CisgICAg
YXBwbHkoKm9sZFNlbGVjdGlvbkRhdGEsIGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6
Ok5vdGhpbmcpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIoKQoreworICAg
IG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAg
c2V0KHtudWxscHRyLCBudWxscHRyLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdH0sIFNlbGVj
dGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKK30KKwordm9pZCBTZWxl
Y3Rpb25SYW5nZURhdGE6OnJlcGFpbnQoKSBjb25zdAoreworICAgIEhhc2hTZXQ8UmVuZGVyQmxv
Y2sqPiBwcm9jZXNzZWRCbG9ja3M7CisgICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOwor
ICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICBlbmQgPSByZW5kZXJlckFm
dGVyUG9zaXRpb24oKm1fc2VsZWN0aW9uQ29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5l
bmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVy
YXRvcihtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQpOworICAgIGZvciAoYXV0byogcmVuZGVyZXIg
PSBzZWxlY3Rpb25JdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVu
ZDsgcmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFy
ZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25D
b250ZXh0LnN0YXJ0ICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgp
ID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKnJlbmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7
CisKKyAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBn
YXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAg
ICAgIGZvciAoUmVuZGVyQmxvY2sqIGJsb2NrID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygp
OyBibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKTsgYmxvY2sgPSBibG9jay0+Y29udGFp
bmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9j
aykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJlbmRl
clNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0ludFJlY3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpib3VuZHMoYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBTZWxlY3RlZFJlbmRlcmVyTWFwIHJlbmRlcmVyczsK
KyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0OworICAg
IFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4
dC5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKm1fc2VsZWN0aW9u
Q29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAg
ICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUg
KHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0IHx8IHN0YXJ0
ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICAmJiBzdGFydC0+c2VsZWN0
aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICAgICAgICAg
IC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFy
Z2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgcmVu
ZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigq
c3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50KSk7CisgICAgICAgICAgICBhdXRvKiBibG9jayA9
IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChibG9jayAmJiAh
aXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gcmVuZGVyZXJzLmFkZChibG9jaywg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8p
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9
IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJsb2NrLCBjbGlwVG9WaXNp
YmxlQ29udGVudCk7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Js
b2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rp
b25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorCisgICAgLy8gTm93IGNyZWF0ZSBhIHNpbmdsZSBi
b3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxlY3Rpb24uCisgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIGF1dG8gZW5kID0gcmVuZGVyZXJzLmVuZCgp
OworICAgIGZvciAoYXV0byBpID0gcmVuZGVyZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsK
KyAgICAgICAgYXV0byogaW5mbyA9IGktPnZhbHVlLmdldCgpOworICAgICAgICAvLyBSZW5kZXJT
ZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50
Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KKyAgICAgICAgTGF5b3V0UmVj
dCBjdXJyZW50UmVjdCA9IGluZm8tPnJlY3QoKTsKKyAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRD
b250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0
UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFJlY3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICB9CisgICAgICAgIHNlbGVjdGlvblJlY3Qu
dW5pdGUoY3VycmVudFJlY3QpOworICAgIH0KKyAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2Vs
ZWN0aW9uUmVjdCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0QW5kQ2xl
YXIoT2xkU2VsZWN0aW9uRGF0YSYgb2xkU2VsZWN0aW9uRGF0YSwgYm9vbCByZXBhaW50RGlmZmVy
ZW5jZSkgY29uc3QKK3sKKyAgICAvLyBSZWNvcmQgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzLiBU
aGVzZSB3aWxsIGJlIHVzZWQgbGF0ZXIKKyAgICAvLyB3aGVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0
aGUgbmV3IHNlbGVjdGVkIG9iamVjdHMuCisgICAgb2xkU2VsZWN0aW9uRGF0YS5zdGFydFBvc2l0
aW9uID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0UG9zaXRpb247CisgICAgb2xkU2VsZWN0aW9u
RGF0YS5lbmRQb3NpdGlvbiA9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbjsKKyAgICAK
KyAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxlY3RlZCBvYmplY3RzIGFuZCBmaWxsIGdhcHMgYmV0
d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxlZnQsIHJpZ2h0LCBvciBpbiBiZXR3ZWVuIGxpbmVz
IGFuZCBibG9ja3MuCisgICAgLy8gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZXBhaW50IHJlY3Qgcmln
aHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0LCBtaWRkbGUsIGFuZCByaWdodCByZWN0cyBpbmRp
dmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQorICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0
cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4K
KyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0OworICAg
IFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4
dC5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKm1fc2VsZWN0aW9u
Q29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAg
ICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUg
KHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZv
ck5ld1NlbGVjdGlvbigqc3RhcnQpKSB7CisgICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3Bv
bnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3Qg
YmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGEucmVuZGVy
ZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3Rh
cnQsIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVyZW5jZSkgeworICAgICAg
ICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsK
KyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0
aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzLmFkZChibG9jaywg
bnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJ
bmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigq
YmxvY2spOworICAgICAgICAgICAgICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxv
Y2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorCisgICAgZm9yIChh
dXRvKiBzZWxlY3RlZFJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMua2V5cygp
KQorICAgICAgICBzZWxlY3RlZFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRh
OjphcHBseShjb25zdCBTZWxlY3Rpb25SYW5nZURhdGE6Ok9sZFNlbGVjdGlvbkRhdGEmIG9sZFNl
bGVjdGlvbkRhdGEsIGJvb2wgaXNzdWVSZXBhaW50KQoreworICAgIC8vIFVwZGF0ZSB0aGUgc2Vs
ZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBz
ZWxlY3Rpb25FbmQKKyAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0ICYmIG1fc2VsZWN0
aW9uQ29udGV4dC5zdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25Cb3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCkKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydC0+c2V0
U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KTsKKyAg
ICAgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICBtX3NlbGVjdGlv
bkNvbnRleHQuZW5kLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uRW5kKTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0ID0g
bV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0OworICAgIGF1dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBt
X3NlbGVjdGlvbkNvbnRleHQuZW5kOworICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0g
bnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5k
ID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKCpzZWxlY3Rpb25EYXRhRW5kLCBtX3NlbGVjdGlvbkNv
bnRleHQuZW5kUG9zaXRpb24udmFsdWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0
aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJy
ZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRS
ZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJh
dG9yLm5leHQoKSkgeworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVu
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+
Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3Vy
cmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uSW5zaWRlKTsKKyAgICB9CisKKyAgICBpZiAoaXNzdWVSZXBhaW50KQorICAgICAgICBt
X3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKwor
ICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3Ig
dGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCisgICAgLy8gcHV0IHRoZW0gaW4g
dGhlIG5ldyBvYmplY3RzIGxpc3QuCisgICAgU2VsZWN0ZWRSZW5kZXJlck1hcCBuZXdTZWxlY3Rl
ZFJlbmRlcmVyczsKKyAgICBTZWxlY3RlZFJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tz
OworICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gU2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3Rh
cnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1
cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50
UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzVmFs
aWRSZW5kZXJlckZvck5ld1NlbGVjdGlvbigqY3VycmVudFJlbmRlcmVyKSkgeworICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNlbGVjdGlvbkluZm8gPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVuZGVyZXIsIHRy
dWUpOworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgZm9yIChhdXRv
JiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKKyAgICAg
ICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8t
PnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5k
ZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7CisjZW5kaWYKKyAgICAgICAgICAgIG5ld1Nl
bGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5m
bykpOworICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVy
LT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sg
JiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7CisgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5l
d1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJl
bmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
KworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0
aW9uUmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigp
LCBibG9ja0luZm8tPnJlY3RzKCkpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWlzc3VlUmVwYWludCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQg
dG8gdGhlIG5ldyBzZWxlY3Rpb24/CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5m
byA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7CisgICAgICAgIGF1dG8qIHJlbmRlcmVy
ID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3
U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9
IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIW5ld0luZm8g
fHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgp
ICE9IG5ld0luZm8tPnN0YXRlKCkKKyAgICAgICAgICAgIHx8IChtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydFBvc2l0aW9uICE9IG1f
c2VsZWN0aW9uQ29udGV4dC5zdGFydFBvc2l0aW9uKQorICAgICAgICAgICAgfHwgKG1fc2VsZWN0
aW9uQ29udGV4dC5lbmQgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5lbmRQb3NpdGlv
biAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24pKSB7CisgICAgICAgICAgICBvbGRJ
bmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAg
ICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRl
cmVycy5yZW1vdmUocmVuZGVyZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRo
ZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAg
Zm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVjdGVkUmVuZGVy
ZXJzKQorICAgICAgICBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS0+cmVwYWludCgpOworCisg
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsKKyAg
ICAgICAgYXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7CisgICAgICAgIGF1dG8q
IG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOworICAgICAgICBhdXRvKiBv
bGRJbmZvID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3
SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+
c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBh
aW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5ld0lu
Zm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1vdmUo
YmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55IG5l
dyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGlj
dCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoY29uc3QgYXV0byYg
c2VsZWN0ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKKyAgICAgICAgc2VsZWN0ZWRC
bG9ja0luZm8udmFsdWUtPnJlcGFpbnQoKTsKK30KKworYm9vbCBTZWxlY3Rpb25SYW5nZURhdGE6
OmlzVmFsaWRSZW5kZXJlckZvck5ld1NlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyKSBjb25zdAoreworICAgIHJldHVybiAocmVuZGVyZXIuY2FuQmVTZWxlY3Rpb25MZWFmKCkK
KyAgICAgICAgfHwgJnJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydAorICAgICAg
ICB8fCAmcmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgJiYgcmVu
ZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUKKyAg
ICAgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25T
dWJ0cmVlUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVS
b290LmgKaW5kZXggYjljNjhhNzA4N2EyOTE0OWQyYzIxNDg3NmY5NDU1NmMyNDk0ZjliNC4uMGRh
MDE4OWU3NTI1ZDUxMTExMjE2NTNmYzQzODJjOThjYjliMjc0YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKQEAgLTMxLDczICszMSw2MyBA
QAogCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9u
SW5mby5oIgorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorI2luY2x1ZGUgIlNlbGVjdGlv
blJlY3RHYXRoZXJlci5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RG9jdW1lbnQ7Ci0KLWNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290IHsKK2NsYXNzIFNlbGVjdGlv
blJhbmdlRGF0YSB7CiBwdWJsaWM6CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZpZXcm
KTsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxlY3RlZE9iamVjdE1hcDsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvPj4gU2VsZWN0ZWRCbG9ja01hcDsKLQotICAgIHN0cnVjdCBPbGRTZWxlY3Rp
b25EYXRhIHsKLSAgICAgICAgT2xkU2VsZWN0aW9uRGF0YSgpCisgICAgc3RydWN0IENvbnRleHQg
eworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29udGV4dCYgb3RoZXIpIGNvbnN0CiAg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCA9PSBvdGhlci5zdGFydCAmJiBlbmQg
PT0gb3RoZXIuZW5kICYmIHN0YXJ0UG9zaXRpb24gPT0gb3RoZXIuc3RhcnRQb3NpdGlvbiAmJiBl
bmRQb3NpdGlvbiA9PSBvdGhlci5lbmRQb3NpdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7Ci0gICAgICAgIFNlbGVjdGVkT2JqZWN0
TWFwIHNlbGVjdGVkT2JqZWN0czsKLSAgICAgICAgU2VsZWN0ZWRCbG9ja01hcCBzZWxlY3RlZEJs
b2NrczsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydCB7IG51bGxwdHIgfTsKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBlbmQgeyBudWxscHRyIH07CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHN0YXJ0UG9zaXRpb247CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVu
ZFBvc2l0aW9uOwogICAgIH07CiAKLSAgICBjbGFzcyBTZWxlY3Rpb25TdWJ0cmVlRGF0YSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSgpID0gZGVmYXVsdDsKLQot
ICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YShSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25FbmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcykK
LSAgICAgICAgICAgIDogbV9zZWxlY3Rpb25TdGFydChzZWxlY3Rpb25TdGFydCkKLSAgICAgICAg
ICAgICwgbV9zZWxlY3Rpb25FbmQoc2VsZWN0aW9uRW5kKQotICAgICAgICAgICAgLCBtX3NlbGVj
dGlvblN0YXJ0UG9zKHNlbGVjdGlvblN0YXJ0UG9zKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlv
bkVuZFBvcyhzZWxlY3Rpb25FbmRQb3MpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgIGVudW0g
Y2xhc3MgUmVwYWludE1vZGUgeyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07Cisg
ICAgdm9pZCBzZXQoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1vZGU6Ok5l
d1hPUk9sZCk7CisgICAgQ29udGV4dCBnZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNv
bnRleHQ7IH0KKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsgfQorICAgIFJlbmRl
ck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LmVuZDsgfQor
ICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVChtX3NlbGVjdGlvbkNv
bnRleHQuc3RhcnRQb3NpdGlvbik7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQb3Np
dGlvbi52YWx1ZSgpOyB9CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24oKSBjb25zdCB7IEFTU0VS
VChtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rpb25Db250
ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCk7IH0KIAotICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVj
dGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGFydDsgfQotICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25F
bmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZDsgfQotICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bkVuZFBvczsgfQotICAgICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25zKHVuc2ln
bmVkJiBzdGFydFBvcywgdW5zaWduZWQmIGVuZFBvcykgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlvblN0YXJ0UG9zLnZhbHVlKCk7Ci0gICAgICAgICAg
ICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvcy52YWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAg
IHZvaWQgY2xlYXJTZWxlY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3NlbGVjdGlv
blN0YXJ0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzdGQ6
Om51bGxvcHQ7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQorICAgIElu
dFJlY3QgYm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKyAg
ICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9i
amVjdCogbV9zZWxlY3Rpb25TdGFydCB7IG51bGxwdHIgfTsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBtX3NlbGVjdGlvbkVuZCB7IG51bGxwdHIgfTsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gbV9zZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gbV9zZWxlY3Rpb25FbmRQb3M7Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5k
ZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGVk
UmVuZGVyZXJNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGVkUmVuZGVyQmxv
Y2tNYXA7CisgICAgCisgICAgc3RydWN0IE9sZFNlbGVjdGlvbkRhdGEgeworICAgICAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvc2l0aW9uOworICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBlbmRQb3NpdGlvbjsKKyAgICAgICAgU2VsZWN0ZWRSZW5kZXJlck1hcCByZW5k
ZXJlcnM7CisgICAgICAgIFNlbGVjdGVkUmVuZGVyQmxvY2tNYXAgYmxvY2tzOwogICAgIH07CiAK
LSAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCgpOwotCi0gICAgU2VsZWN0aW9uU3VidHJlZURhdGEm
IHNlbGVjdGlvbkRhdGEoKSB7IHJldHVybiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9Ci0gICAg
Y29uc3QgU2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvbkRhdGEoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9Ci0KLSAgICB2b2lkIHNldFNlbGVjdGlvbkRhdGEo
Y29uc3QgU2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvblN1YnRyZWVEYXRhKSB7IG1fc2Vs
ZWN0aW9uU3VidHJlZURhdGEgPSBzZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQorICAgIHZvaWQgY29s
bGVjdEFuZENsZWFyKE9sZFNlbGVjdGlvbkRhdGEmLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKSBj
b25zdDsKKyAgICB2b2lkIGFwcGx5KGNvbnN0IE9sZFNlbGVjdGlvbkRhdGEmLCBib29sIGlzc3Vl
UmVwYWludCk7CisgICAgYm9vbCBpc1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24oY29uc3Qg
UmVuZGVyT2JqZWN0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgU2VsZWN0aW9uU3VidHJlZURh
dGEgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsKKyAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRl
clZpZXc7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgU2VsZWN0aW9uUmVjdEdh
dGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOworI2VuZGlmCisgICAgQ29udGV4dCBtX3Nl
bGVjdGlvbkNvbnRleHQ7CisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322323</attachid>
            <date>2017-10-01 10:56:29 -0700</date>
            <delta_ts>2017-10-01 11:19:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20171001105628.patch</filename>
            <type>text/plain</type>
            <size>71665</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uNWQyNDE2MDM3MjVhZWU0NmFlN2I3YTNmYTA3YzA2
YTNkMjEyMzg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVXUyB0ZXN0aW5nLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlv
blVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2ls
bEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRv
Tm9kZU1vZGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGU6On5TY29wZWRGcmFtZVNl
bGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1Nl
bGVjdGlvblJvb3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlciBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNl
ZDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9y
TGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25J
dGVyYXRvcjo6U2VsZWN0aW9uSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpyZW5kZXJlckFmdGVyUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50U3Vi
dHJlZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpzZXRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZE9i
amVjdEZvck5ld1NlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpTZWxlY3Rpb25J
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y3VycmVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9uUmFuZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmFuZ2VEYXRhOjpyZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blJhbmdlRGF0YTo6Ym91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJh
bmdlRGF0YTo6Y29sbGVjdEFuZENsZWFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VE
YXRhOjppc1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmdldCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c3RhcnRQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpPbGRTZWxlY3Rpb25EYXRhOjpPbGRTZWxl
Y3Rpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6U2VsZWN0aW9uU3VidHJlZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpzZWxlY3Rpb25TdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0
YXJ0UG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRy
ZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9u
U3RhcnRFbmRQb3NpdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6c2VsZWN0
aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6c2VsZWN0aW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25TdWJ0cmVlUm9vdDo6c2V0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisKIDIwMTctMDkt
MzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbU2V0dGluZ3NdIFJl
cGxhY2UgU2V0dGluZ3NNYWNyb3MuaCB3aXRoIGEgZ2VuZXJhdGVkIGJhc2UgY2xhc3MgZm9yIFNl
dHRpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDdiNWYwN2NiZGYxOThlNzRkNjYwMzdkNTJk
Y2E4NDAzY2QwOGVmMWIuLjMzYWY0YTA0OTMyYzM1MWY5MmY0NTNmNzc5ODM5YzEzNTMzYjc2NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNzQ1LDcgKzI3NDUsNyBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKICAgICByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmNwcAotICAgIHJl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKKyAgICByZW5kZXJpbmcvU2VsZWN0aW9u
UmFuZ2VEYXRhLmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogICAgIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjU3MjM2ZjYzODZiMmIyNWUxN2I0ZGFl
NjE2NTE4M2M5ZjgzZGRjMy4uNTFmYmZjNjhhNzRjMzA3NmJiOWE5ZmZjNDFhZWRhNjkyYzkxNWIy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNjQyNCw4ICs2NDI0LDggQEAKIAkJQ0RDQTk4RUIxOEIyQzhFQjAwQzEyRkY5IC8q
IExlZ2FjeUNETVByaXZhdGVNZWRpYVBsYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBOThFQTE4QjJDOEVCMDBDMTJGRjkgLyogTGVnYWN5
Q0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcCAqLzsgfTsKIAkJQ0RDRDQxRTcxQzNEREIwOTAwOTY1
RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29u
dGVudFJhbmdlLmNwcCAqLzsgfTsKIAkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RDRDQxRTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZBQkJE
MThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUw
IC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RDRkFCQkUxOEMwQUY4NDAwNkY4NDUwIC8qIFNlbGVjdGlv
blN1YnRyZWVSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5j
cHAgKi87IH07CisJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZB
QkJCMThDMEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDRENGQUJCRTE4QzBBRjg0MDA2
Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rp
b25SYW5nZURhdGEuY3BwICovOyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAyQjNEQzYgLyogU2Ft
cGxlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovOyB9OwogCQlDREQ3
MDg5NzE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2Ft
cGxlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQ0REQzFFN0ExOEE5NTJGMzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0REQzFFNzkx
OEE5NTJGMzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oICovOyB9OwpAQCAt
MTUxOTYsOCArMTUxOTYsOCBAQAogCQlDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2Vk
Q29udGVudFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
cnNlZENvbnRlbnRSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0Q0
MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZh
Y3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyog
U2VsZWN0aW9uU3VidHJlZVJvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VsZWN0aW9uU3VidHJlZVJvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RD
RkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblN1YnRyZWVSb290LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8q
IFNlbGVjdGlvblJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWxlY3Rpb25SYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFC
QkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25SYW5nZURhdGEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgyMEIgLyogVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RE
NzA4OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjYxMDYsOCArMjYxMDYsOCBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBB
NDIzNCAvKiBSb290SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5oICovLAotCQkJCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAv
KiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgKi8sCi0JCQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4
NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi8sCisJCQkJQ0RDRkFCQkMxOEMwQUYxOTAw
NkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8sCisJCQkJQ0RDRkFCQkIxOEMwQUUz
MTAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oICovLAogCQkJCUU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNDg5NDRBMTE4MEI1
N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovLAogCQkJCTExRTA2N0VCMUU2MjQ2
MTMwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwICovLApAQCAtMzAwMTEs
OSArMzAwMTEsOSBAQAogCQkJCTk3NEQyREE1MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBv
bGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNl
Y3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJG
MEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJFQTgwN0M5MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTQwNUM4OTE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0
NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzMkQzRkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkI5OTk5NzE4MDRENTQyMDBEMDExMjEgLyogU2VsZWN0
b3JDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzkyOSw5ICszMzkyOSw5IEBACiAJCQkJ
MUFGN0FGQzcxQTQ4QThCQzAwQzhFNEU3IC8qIFNlY3VyaXR5T3JpZ2luUG9saWN5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3NEQyREE0MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGlj
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEyRTBEMDA2QzFEMDBFRjZGMjYgLyogU2Vn
bWVudGVkU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQ0ZBQkJFMThDMEFGODQwMDZG
ODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkVBODA3
QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE0MDVDODgxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlDRENGQUJCRTE4QzBBRjg0MDA2Rjg0NTAgLyogU2VsZWN0aW9u
U3VidHJlZVJvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5NjE4
MDRENTQyMDBEMDExMjEgLyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGE4
NTdlZGVkZTZiMjM3NzdjNmU4NGNjZmJkMzE0NDExNzE4MWI3NzguLjg4N2ViYjFlZWIyZTg5YzM2
MGU5MjQzY2ZmMGVkOTc0MDZjYTdmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
TmVlZHNTZWxlY3Rpb25VcGRhdGUoKQogewogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9
IHRydWU7CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2
ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCkBAIC00
NDMsNyArNDQzLDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBjbGVh
cigpOwogfQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAKICAg
ICBpZiAoY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJWaWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgcmVu
ZGVyVmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVj
dGlvbigpLmNsZWFyKCk7CiAKICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBzZWxlY3Rpb24gdXBk
YXRlIHNvIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBzZXQgYWdhaW4uCiAgICAgICAgICAgICBtX3Bl
bmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwpAQCAtMTUxNyw5ICsxNTE3LDggQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtU
aW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQorICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgc2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMTk5
NSw3ICsxOTk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUg
cGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZp
ZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5yZXBhaW50U2VsZWN0
aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENh
cmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNl
ZCkKQEAgLTIwOTAsNyArMjA4OSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogI2VuZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAg
ICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjExNSw3ICsyMTE0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVu
ZGVyZXIsIGVuZE9mZnNldCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRS
ZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9KTsKICAgICB9CiB9
CiAKQEAgLTIyMzIsMTIgKzIyMzEsMTIgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKCptX2ZyYW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAg
IGlmICghcm9vdCB8fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgYXV0byogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBp
ZiAoIXJlbmRlclZpZXcgfHwgIXZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAK
LSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xp
cFRvVmlzaWJsZUNvbnRlbnQpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IHJlbmRlclZpZXct
PnNlbGVjdGlvbigpLmJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CiAgICAgcmV0dXJuIGNs
aXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZp
c2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCkpIDogc2VsZWN0aW9uUmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IGNjZWY0YjI3MTFlYWIxNGM4YWIzZDIwZGJlYmI4MmUyMWRmY2QwYTAuLjI3OWQyZWU2ODE3
MWU4OTQ1MmY0ZmNjNGNkMmRjMTI5MzY1ZTEzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTQ1MjIsOCArNDUyMiw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8g
YWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlv
biA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7CiAgICAgICAgIGZvciAoYXV0byogZnJhbWUgPSBtX2Zy
YW1lLnB0cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2Zy
YW1lLnB0cigpKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgcm9vdC0+Y2xlYXJTZWxlY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKQorICAgICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmlu
ZGV4IGNkMmJkNDM3NTE3YjYzMjBmNmM5NTM0MDgyMjliOTFiNWQ3MDFhYjcuLmY4YTQ1ZDY5NDFm
M2Y3N2U4NDZmOTg1YTE0ZmFlNzYyYTQyNWQ1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcApAQCAtMTM1LDIxICsxMzUsMTggQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0
aW9uU3RhdGUgewogICAgIFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoRnJhbWUmIGZyYW1lKQog
ICAgICAgICA6IGZyYW1lKGZyYW1lKQogICAgIHsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJv
b3QgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJvb3QtPmdldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7
CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkp
CisgICAgICAgICAgICBzZWxlY3Rpb24gPSByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5nZXQoKTsK
ICAgICB9CiAKICAgICB+U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSgpCiAgICAgewotICAgICAg
ICBpZiAoUmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAg
ICAgICAgcm9vdC0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRS
ZW5kZXJlciwgZW5kT2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgICAg
IGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYg
ZnJhbWU7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7
Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIFNlbGVjdGlvblJh
bmdlRGF0YTo6Q29udGV4dCBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAg
LTE4NiwxMCArMTgzLDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShG
cmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAgaW50IHN0YXJ0
T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zm
c2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFy
dFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmll
dzo6UmVwYWludE5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRSZW5k
ZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9LCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNu
YXBzaG90RnJhbWVSZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcK
ICAgICAvLyBGcmFtZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0
aW9uIGZyb20gdGhlIEZyYW1lIGl0c2VsZi4KLSAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJv
bVNuYXBzaG90KHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb25Cb3VuZHMo
KSwgb3B0aW9ucyksIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25h
cHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kcygp
LCBvcHRpb25zKSwgbnVsbHB0cik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGI2NGZjZWIzYTlmMzk4Y2MwMTY4M2U0ZmNkMmU0
ZWVmNjE1M2M4YmIuLmU2YTlkYTkyYjUwMjM4OThkNWZjYTQ3OWM3MjY2NjgzMGY4ODFjMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE0NCw4ICsx
NDQsOCBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVj
dGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0g
cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5k
IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydFBvcywgZW5kUG9zOwotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5nZXRTZWxl
Y3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgYXV0byBzdGFydFBvcyA9
IHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAg
YXV0byBlbmRQb3MgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlvbigp
OwogICAgICAgICAvLyBUaGUgcG9zaXRpb24gYWZ0ZXIgYSBoYXJkIGxpbmUgYnJlYWsgaXMgY29u
c2lkZXJlZCB0byBiZSBwYXN0IGl0cyBlbmQuCiAgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVu
KCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOwogICAgICAgICB1bnNpZ25lZCBsYXN0U2Vs
ZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwpAQCAt
NjM5LDkgKzYzOSw4IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVu
IH07CiAgICAgCi0gICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHJl
bmRlcmVyKCkudmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOworICAgIGF1
dG8gc3RhcnQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7
CisgICAgYXV0byBlbmQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlv
bigpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlm
IChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDVhYjEzMzI0MmM1NmM5Y2IwMWZk
OWM0Njg5ZGQxNGU5NGRmZGQ2YTkuLmJhYzU1Njk4MzRlOTI5YjIzYzdkYzg5ZGU5YjNjZTJjYmMw
MDVhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTg2
NSw4ICsxODY1LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29uc3QK
ICAgICAgICAgfHwgaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpIHx8IHN0eWxlKCkuY29sdW1uU3Bh
bigpID09IENvbHVtblNwYW5BbGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlm
ICh2aWV3KCkuc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KCkpIHsKLSAgICAgICAgTm9kZSogc3RhcnRF
bGVtZW50ID0gdmlldygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpLT5ub2RlKCk7CisgICAgaWYg
KHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVu
dCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpLT5ub2RlKCk7CiAgICAgICAgIGlmIChzdGFy
dEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZWxlbWVu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YmJjMjg5NTRmODBiZDdiNzAyZTUxMGZhZjAw
M2NmODc1MGVmODZkLi5kNTYxMjlmN2QzZjNkMDZhNzE2MDA5NTg0Njg2NDliNGQ2NWVmNjZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQxNyw4ICsx
NDE3LDggQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3QKICAg
ICByZXR1cm4gc3QgPT0gU2VsZWN0aW9uU3RhcnQKICAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9u
RW5kCiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkJvdGgKLSAgICAgICAgfHwgdmlldygpLnNl
bGVjdGlvblVuc3BsaXRTdGFydCgpID09IHRoaXMKLSAgICAgICAgfHwgdmlldygpLnNlbGVjdGlv
blVuc3BsaXRFbmQoKSA9PSB0aGlzOworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSA9PSB0aGlzCisgICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmQoKSA9PSB0aGlz
OwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBiYWExZjY1NGQ1MTkxZDI4NjdlZGVhYmZj
OGJhZDIyZWVkZTViMWU0Li5iNDgxMGVjMzE2MWFhMGQ5NTQxNWJjMGI4MjExYzdmYTc3MTNkYTUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02Miw3ICs2Miw3
IEBAIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKIGNs
YXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogY2xhc3MgUmVuZGVyVGhlbWU7Ci1jbGFzcyBT
ZWxlY3Rpb25TdWJ0cmVlUm9vdDsKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YTsKIGNsYXNzIFRy
YW5zZm9ybVN0YXRlOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCA2NDBhN2JhZWQ4ZWIzYTdhODRkYmFi
NThjOTZhNDM5YWMzZDY2OTI2Li4yODE4YzY0ZWM0ZDdiYWU3MDQ2ODNmOTIzNWRkYjJjYWNiMTU4
YjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAg
LTY0NCwyMyArNjQ0LDIyIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHN0YXRlKQogCiBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVk
KCkgY29uc3QKIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSBzID0gc2VsZWN0aW9uU3RhdGUoKTsKLSAg
ICBpZiAocyA9PSBTZWxlY3Rpb25Ob25lKQorICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2Vs
ZWN0aW9uU3RhdGUoKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzID09IFNlbGVjdGlvbkluc2lkZSkKKyAgICBpZiAoc3Rh
dGUgPT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHVuc2ln
bmVkIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7Ci0gICAgdmlldygpLmdldFNlbGVjdGlv
blN0YXJ0RW5kKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIGlmIChzID09IFNl
bGVjdGlvblN0YXJ0KQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMDsKLSAgICAg
ICAgCisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBv
c2l0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuZW5k
UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIHJl
dHVybiAhc2VsZWN0aW9uU3RhcnQ7CisKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhh
c0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAgIGlm
IChzID09IFNlbGVjdGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAg
ICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25C
b3RoKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxlY3Rpb25FbmQg
PT0gZW5kOwotICAgICAgICAKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkKKyAgICAg
ICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBkZjEzMzE5ODMzNzdlNWEzZDk2MzM1YWI5MmU1
OTM3ZmNkNzRkM2QwLi4zZDlmZmNiMmU1MGI2OTQxYTA0MTEyMjg4YmZkMDg4YWI3MmM0YTMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNDQxLDEzICsxNDQx
LDE1IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGlu
ZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0
YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNs
dWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICB1bnNpZ25lZCBzdGFydFBvcywg
ZW5kUG9zOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zOworICAgIHVuc2lnbmVkIGVuZFBvczsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8g
V2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CiAgICAgICAgIGVu
ZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICB2aWV3KCkuZ2V0U2Vs
ZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIHN0YXJ0UG9zID0gdmll
dygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgZW5kUG9zID0gdmlldygp
LnNlbGVjdGlvbigpLmVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IFNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0gdGV4dExlbmd0aCgpOwog
ICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBj
MjUwYTRkZmI3NTAyMzU4NGNhZjIyZWI4ZTE1ZjdjNGRiMDUxZmFlLi43NWUyMWM1ZGYzOTQ4MDZi
YTg0MzQyMmZmYTg1OGM2MjY3YmU4OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCkBAIC00NDYsMTEgKzQ0NiwxMCBAQCB2b2lkIFJl
bmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVy
LCBSZW5kZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQg
c3RhcnQsIGVuZDsKLSAgICByZW5kZXJlci52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3Rh
cnQsIGVuZCk7CisgICAgYXV0byBzdGFydCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5z
dGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBlbmQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9u
KCkuZW5kUG9zaXRpb24oKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7Ci0KICAgICAg
ICAgLy8gdG8gaGFuZGxlIHNlbGVjdGlvbiBmcm9tIGVuZCBvZiB0ZXh0IHRvIGVuZCBvZiBsaW5l
CiAgICAgICAgIGlmIChzdGFydCAmJiBzdGFydCA9PSBlbmQpCiAgICAgICAgICAgICBzdGFydCA9
IGVuZCAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODhj
ZTgzNDliMTNlZjQxMjEyYWE3ZjdiNDhjMDgwYTA2ZTQ5NGZkZC4uZjhlOTc4OGZmYjRlNzIwN2E5
OTI0OTJiYjg4M2JjZTgyMjYzMTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNzgsNTMgKzc4LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rpc2FsbG93
TGF5b3V0IHsgZmFsc2UgfTsKIH07CiAKLXN0cnVjdCBTZWxlY3Rpb25JdGVyYXRvciB7Ci0gICAg
U2VsZWN0aW9uSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJl
bnQoc3RhcnQpCi0gICAgewotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnQ7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNF
bXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAg
ICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsK
LSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1
cnJlbnRTcGFuKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9z
cGFubmVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVy
KCk7Ci0gICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bh
bm5lcigpCi0gICAgewotICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyPihtX2N1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRv
JiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyPigqbV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhv
bGRlcik7Ci0gICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9
Ci0KLSAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07
Ci0KIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxl
KSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1bWVudC52aWV3KCkpCisgICAgLCBtX3NlbGVjdGlv
bigqdGhpcykKICAgICAsIG1fbGF6eVJlcGFpbnRUaW1lcigqdGhpcywgJlJlbmRlclZpZXc6Omxh
enlSZXBhaW50VGltZXJGaXJlZCkKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAs
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKCp0aGlzKQotI2VuZGlmCiB7CiAgICAgc2V0SXNSZW5k
ZXJWaWV3KCk7CiAKQEAgLTY5NywyOTAgKzY1NSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAog
ICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllcigpLT5zaXplKCkp
KTsKIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKFJlbmRl
ck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVj
dC0+Y2hpbGRBdChvZmZzZXQpOwotICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogb2JqZWN0LT5u
ZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKLX0KLQotSW50UmVjdCBSZW5kZXJWaWV3Ojpz
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICBM
YXlvdXRSZWN0IHNlbFJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVD
b250ZW50KTsKLSAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsUmVjdCk7Ci19Ci0KLUxheW91
dFJlY3QgUmVuZGVyVmlldzo6c3VidHJlZVNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAotewotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGlvbk1hcDsKLSAgICBT
ZWxlY3Rpb25NYXAgc2VsZWN0ZWRPYmplY3RzOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvcyA9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9
IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3Ag
PSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0gICAgICAgIHN0b3AgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5k
UG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Io
b3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIGlmICgob3MtPmNh
bkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFy
dCgpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVj
dGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFy
ZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhl
eSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMu
c2V0KG9zLCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpvcywgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250
YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4o
KmNiKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlx
dWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAg
ICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBvcyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9
Ci0KLSAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7Ci0gICAg
U2VsZWN0aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7Ci0gICAg
Zm9yIChTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdl
IGNvb3JkaW5hdGVzLgotICAgICAgICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgp
OwotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9
IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgewotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1
YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJy
UmVjdCkpOwotICAgICAgICAgICAgY3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7IAotICAgICAgICB9Ci0gICAgICAgIHNlbFJlY3QudW5pdGUoY3VyclJlY3QpOwotICAg
IH0KLSAgICByZXR1cm4gc2VsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U2Vs
ZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigpOwotfQotCi12
b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBI
YXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwotCi0gICAgYXV0byogc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVj
dCogZW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBlbmQgPSBy
ZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRl
cmF0b3Ioc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkpOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBvID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBv
ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmICghby0+Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkgJiYgbyAhPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBv
ICE9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoby0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqbywgdHJ1
ZSkucmVwYWludCgpOwotCi0gICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBh
aW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBh
cyB3ZWxsLgotICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBibG9jayA9IG8tPmNvbnRhaW5pbmdC
bG9jaygpOyBibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKTsgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFk
ZChibG9jaykuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVu
ZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBi
bG9ja1JlcGFpbnRNb2RlKQotewotICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQg
ZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCi0gICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQg
dHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQu
Ci0gICAgaWYgKChzdGFydCAmJiAhZW5kKSB8fCAoZW5kICYmICFzdGFydCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgY2FyZXRDaGFuZ2VkID0gbV9zZWxlY3Rpb25XYXNDYXJldCAhPSBm
cmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKLSAgICBtX3NlbGVjdGlvbldhc0NhcmV0ID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhl
IHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KLSAgICBpZiAobV9zZWxlY3Rpb25VbnNwbGl0U3Rh
cnQgPT0gc3RhcnQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3MgPT0gc3RhcnRQb3MKLSAg
ICAgICAgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kID09IGVuZCAmJiBtX3NlbGVjdGlvblVuc3Bs
aXRFbmRQb3MgPT0gZW5kUG9zICYmICFjYXJldENoYW5nZWQpIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBj
dXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBh
cmUgYWJvdXQgdG8gZ2F0aGVyLgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0
b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyPiByZWN0Tm90aWZpZXIg
PSBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5k
aWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLy8gU2V0IGdsb2JhbCBwb3NpdGlv
bnMgZm9yIG5ldyBzZWxlY3Rpb24uCi0gICAgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgPSBzdGFy
dDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgIG1fc2Vs
ZWN0aW9uVW5zcGxpdEVuZCA9IGVuZDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPSBl
bmRQb3M7Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxPbGRT
ZWxlY3Rpb25EYXRhPigpOwotICAgIGNsZWFyU3VidHJlZVNlbGVjdGlvbihibG9ja1JlcGFpbnRN
b2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci0gICAgc2V0U2VsZWN0aW9uRGF0YShTZWxlY3Rpb25T
dWJ0cmVlRGF0YShzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9zKSk7Ci0gICAgYXBwbHlTdWJ0
cmVlU2VsZWN0aW9uKGJsb2NrUmVwYWludE1vZGUsICpvbGRTZWxlY3Rpb25EYXRhKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oY29uc3QgUmVu
ZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgcmV0dXJu
IChvYmplY3QuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJm9iamVjdCA9PSB2aWV3LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCkpICYmIG9iamVjdC5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uTm9uZSAmJiBvYmplY3QuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyVmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2Rl
IGJsb2NrUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEpIGNv
bnN0Ci17Ci0gICAgLy8gUmVjb3JkIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cy4gIFRoZXNlIHdp
bGwgYmUgdXNlZCBsYXRlcgotICAgIC8vIHdoZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBuZXcg
c2VsZWN0ZWQgb2JqZWN0cy4KLSAgICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9z
ID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0UG9zKCk7Ci0gICAgb2xkU2VsZWN0aW9u
RGF0YS5zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCk7
Ci0gICAgCi0gICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBn
YXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2Vl
biBsaW5lcyBhbmQgYmxvY2tzLgotICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCBy
ZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVj
dHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhv
c2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2Nj
dXJyZWQuCi0KLSAgICBSZW5kZXJPYmplY3QqIG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
blN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVj
dGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNl
bGVjdGlvbkVuZCkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rp
b25FbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKLSAgICBT
ZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7Ci0gICAgd2hpbGUgKG9zICYm
IG9zICE9IHN0b3ApIHsKLSAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24o
KnRoaXMsICpvcykpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9y
IHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuICBUaGV5IG11c3QgYmUgZXhhbWlu
ZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3Rz
LnNldChvcywgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIHRydWUp
KTsKLSAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdYT1JPbGQp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFpczxSZW5kZXJWaWV3PigqY2IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkQmxvY2tzLmFkZChj
YiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZv
PigqY2IpOwotICAgICAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBv
cyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHNl
bGVjdGVkT2JqZWN0IDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMua2V5cygpKQot
ICAgICAgICBzZWxlY3RlZE9iamVjdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rp
b25Ob25lKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjphcHBseVN1YnRyZWVTZWxlY3Rpb24oU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0
YSYgb2xkU2VsZWN0aW9uRGF0YSkKLXsKLSAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0
dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5k
Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydCgpID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkK
LSAgICAgICAgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCktPnNldFNlbGVjdGlvblN0
YXRlSWZOZWVkZWQoU2VsZWN0aW9uQm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSkKLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0
YXJ0KTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAg
ICAgICAgIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJ
Zk5lZWRlZChTZWxlY3Rpb25FbmQpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBz
ZWxlY3Rpb25EYXRhRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRGF0
YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVj
dGlvbkRhdGFFbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsK
LSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0
OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3Vy
cmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChj
dXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgY3Vy
cmVudFJlbmRlcmVyID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rp
b25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIGxheWVy
KCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0
aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywg
d2FsayB0aGVtIGFnYWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBs
aXN0LgotICAgIFNlbGVjdGVkT2JqZWN0TWFwIG5ld1NlbGVjdGVkT2JqZWN0czsKLSAgICBTZWxl
Y3RlZEJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0g
U2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1
cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlv
bkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVj
dGlvbigqdGhpcywgKmN1cnJlbnRSZW5kZXJlcikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKLQotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2Vs
ZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBt
X3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250
YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0
T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5z
ZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmpl
Y3RzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOwotCi0gICAg
ICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYg
IWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLQot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBi
bG9ja0luZm8tPnJlY3RzKCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50Tm90aGluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3Rz
IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0
cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IHNlbGVjdGVkT2JqZWN0SW5mby5rZXk7
Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZE9iamVj
dHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBzZWxl
Y3RlZE9iamVjdEluZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJ
bmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3
SW5mby0+c3RhdGUoKQotICAgICAgICAgICAgfHwgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25T
dGFydCgpID09IG9iaiAmJiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9zICE9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydFBvcygpKQotICAgICAgICAgICAgfHwgKHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSA9PSBvYmogJiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxl
Y3Rpb25FbmRQb3MgIT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKSkgewotICAg
ICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsK
LSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3
U2VsZWN0ZWRPYmplY3RzLnJlbW92ZShvYmopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQu
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBuZXdTZWxlY3RlZE9i
amVjdHMpCi0gICAgICAgIHNlbGVjdGVkT2JqZWN0SW5mby52YWx1ZS0+cmVwYWludCgpOwotCi0g
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nr
cykgewotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5m
by5rZXk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZElu
Zm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewotICAgICAgICAgICAgb2xkSW5mby0+
cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBu
ZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVt
b3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCi0gICAgICAgIHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6Z2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgc3RhcnRSZW5kZXJlciA9
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwotICAgIHN0YXJ0T2Zmc2V0ID0gbV9zZWxlY3Rpb25V
bnNwbGl0U3RhcnRQb3M7Ci0gICAgZW5kUmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRFbmQ7
Ci0gICAgZW5kT2Zmc2V0ID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotfQotCi12b2lkIFJl
bmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAgICBsYXllcigpLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwg
bnVsbHB0ciwgc3RkOjpudWxsb3B0LCBSZXBhaW50TmV3TWludXNPbGQpOwotfQotCiBib29sIFJl
bmRlclZpZXc6OnByaW50aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5wcmlu
dGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggNTgxODg4ZGU3
MzJhMGNlYTlmZmI3ZDU5N2U3N2QxOWI4YmJmNGRmNC4uYzM3ZWJiZmMyMjhmM2U2YTY2NjIzMmJj
OTZkYTkxMjc3N2Y1ZjQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBA
IC0yNiwyMiArMjYsMTggQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25TdWJ0cmVlUm9vdC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2luY2x1
ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVkZSAiU2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbWFnZVF1YWxpdHlDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OwogY2xhc3MgUmVuZGVyUXVvdGU7CiAKLWNsYXNzIFJlbmRlclZpZXcgZmluYWwgOiBwdWJsaWMg
UmVuZGVyQmxvY2tGbG93LCBwdWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgeworY2xhc3MgUmVu
ZGVyVmlldyBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJl
bmRlclZpZXcoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJW
aWV3KCk7CkBAIC04NSwxNSArODEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSByZW5k
ZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFj
a2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkg
Y29uc3Q7CiAKLSAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5ld1hPUk9s
ZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9OwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0
UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5k
UG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQg
Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJTZWxl
Y3Rpb24oKTsKLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBz
ZWxlY3Rpb25VbnNwbGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5k
OyB9Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCA9IHRydWUpIGNvbnN0OwotICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbigpIGNvbnN0OwotICAg
IHZvaWQgZ2V0U2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHN0YXJ0LCB1bnNpZ25lZCYgZW5k
KSBjb25zdCB7IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhzdGFy
dCwgZW5kKTsgfQorICAgIFNlbGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4g
bV9zZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAtMzEyLDIz
ICszMDAsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rp
b24oU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0
YSYpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFp
bnRNb2RlLCBjb25zdCBPbGRTZWxlY3Rpb25EYXRhJik7Ci0gICAgTGF5b3V0UmVjdCBzdWJ0cmVl
U2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsK
LSAgICB2b2lkIHJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAg
ICAgRnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKIAotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rp
b25VbnNwbGl0U3RhcnQgeyBudWxscHRyIH07Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlv
blVuc3BsaXRFbmQgeyBudWxscHRyIH07Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9z
ZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9z
ZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZpZXcu
CiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKKyAgICBTZWxl
Y3Rpb25SYW5nZURhdGEgbV9zZWxlY3Rpb247CiAKICAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5
IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8g
cmVtb3ZlLgogICAgIHN0cnVjdCBMZWdhY3lQcmludGluZyB7CkBAIC0zNjAsNyArMzM5LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3JlbmRlckNvdW50ZXJDb3VudCB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX3JlbmRlclRyZWVJbnRlcm5hbE11dGF0aW9uQ291bnRlciB7IDAgfTsKIAotICAg
IGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1NvZnR3
YXJlRmlsdGVycyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKQEAgLTM3
Miw5ICszNTAsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IG1fdmlz
aWJsZUluVmlld3BvcnRSZW5kZXJlcnM7CiAgICAgVmVjdG9yPFJlZlB0cjxSZW5kZXJXaWRnZXQ+
PiBtX3Byb3RlY3RlZFJlbmRlcldpZGdldHM7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKLSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIEhhc2hTZXQ8Y29uc3QgUmVu
ZGVyQm94Kj4gbV9ib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBkZWM2ZGZh
OTJkZmZjZTg1NDdhOWM4ZGE1N2FlYTU0YWNkOTgyM2RmLi5lY2VjMDI3MTIzOTk0OTk2ZjBjMjgx
ZTlhYWZhNzg3MDRiZTQxMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyaW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5jcHAiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5jcHAiCiAjaW5jbHVkZSAiU2Nyb2xs
QWxpZ25tZW50LmNwcCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAiCisjaW5j
bHVkZSAiU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
LmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwIgogI2luY2x1ZGUg
IlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDI0ZTA4MTU0Njc2
OWJiMjI3YzExNjRlYjBhMDcwN2NmNzIwOTNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKQEAgLTAsMCArMSwzNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVk
ZSAiUG9zaXRpb24uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitzdHJ1
Y3QgU2VsZWN0aW9uRGF0YSB7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlck9iamVjdCosIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPj4gUmVuZGVyZXJNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJs
b2NrU2VsZWN0aW9uSW5mbz4+IFJlbmRlckJsb2NrTWFwOworCisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gc3RhcnRQb3NpdGlvbjsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbmRQ
b3NpdGlvbjsKKyAgICBSZW5kZXJlck1hcCByZW5kZXJlcnM7CisgICAgUmVuZGVyQmxvY2tNYXAg
YmxvY2tzOworfTsKKworc3RydWN0IFNlbGVjdGlvbkl0ZXJhdG9yIHsKKyAgICBTZWxlY3Rpb25J
dGVyYXRvcihSZW5kZXJPYmplY3QqIHN0YXJ0KQorICAgICAgICA6IG1fY3VycmVudChzdGFydCkK
KyAgICB7CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOworICAgIH0KKyAgICAKKyAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dDsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCkKKyAgICB7CisgICAgICAg
IFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5pc0VtcHR5KCkgPyBu
dWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7CisgICAgICAgIG1fY3Vy
cmVudCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4pOworICAgICAgICBj
aGVja0ZvclNwYW5uZXIoKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3VycmVudFNwYW4p
IHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJTdGFj
ay5sYXN0KCk7CisgICAgICAgICAgICBtX3NwYW5uZXJTdGFjay5yZW1vdmVMYXN0KCk7CisgICAg
ICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIoKTsKKyAgICAg
ICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2N1
cnJlbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tGb3JTcGFubmVyKCkKKyAg
ICB7CisgICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+
KG1fY3VycmVudCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHBsYWNlaG9s
ZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KCptX2N1
cnJlbnQpOworICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9sZGVyKTsKKyAg
ICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOworICAgIH0KKworICAgIFJl
bmRlck9iamVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxSZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOworfTsKKworc3RhdGlj
IFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVy
LmNoaWxkQXQob2Zmc2V0KTsKKyAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5l
eHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkUmVu
ZGVyZXJGb3JTZWxlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgU2Vs
ZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0JiBzZWxlY3Rpb24pCit7CisgICAgcmV0dXJuIChyZW5k
ZXJlci5jYW5CZVNlbGVjdGlvbkxlYWYoKQorICAgICAgICB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0
aW9uLnN0YXJ0CisgICAgICAgIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uZW5kKQorICAgICAg
ICAmJiByZW5kZXJlci5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Tm9uZQorICAgICAgICAmJiByZW5kZXJlci5jb250YWluaW5nQmxvY2soKTsKK30KKworc3RhdGlj
IFNlbGVjdGlvbkRhdGEgY29sbGVjdChjb25zdCBTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQm
IHNlbGVjdGlvbiwgYm9vbCByZXBhaW50RGlmZmVyZW5jZSkKK3sKKyAgICBTZWxlY3Rpb25EYXRh
IG9sZFNlbGVjdGlvbkRhdGE7CisgICAgLy8gUmVjb3JkIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0
cy4gVGhlc2Ugd2lsbCBiZSB1c2VkIGxhdGVyCisgICAgLy8gd2hlbiB3ZSBjb21wYXJlIGFnYWlu
c3QgdGhlIG5ldyBzZWxlY3RlZCBvYmplY3RzLgorICAgIG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRQ
b3NpdGlvbiA9IHNlbGVjdGlvbi5zdGFydFBvc2l0aW9uOworICAgIG9sZFNlbGVjdGlvbkRhdGEu
ZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZW5kUG9zaXRpb247CisgICAgCisgICAgLy8gQmxvY2tz
IGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0
aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgor
ICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRv
IGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5j
ZSBvdGhlcndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWlu
IHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgUmVuZGVyT2Jq
ZWN0KiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydDsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBu
dWxscHRyOworICAgIGlmIChzZWxlY3Rpb24uZW5kKQorICAgICAgICBzdG9wID0gcmVuZGVyZXJB
ZnRlclBvc2l0aW9uKCpzZWxlY3Rpb24uZW5kLCBzZWxlY3Rpb24uZW5kUG9zaXRpb24udmFsdWUo
KSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOworICAg
IHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVu
ZGVyZXJGb3JTZWxlY3Rpb24oKnN0YXJ0LCBzZWxlY3Rpb24pKSB7CisgICAgICAgICAgICAvLyBC
bG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBn
YXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAgIG9sZFNlbGVj
dGlvbkRhdGEucmVuZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxl
Y3Rpb25JbmZvPigqc3RhcnQsIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVy
ZW5jZSkgeworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHN0YXJ0LT5jb250
YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgIWlzPFJlbmRl
clZpZXc+KCpibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGlvbkRhdGEuYmxv
Y2tzLmFkZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvPigqYmxvY2spOworICAgICAgICAgICAgICAgICAgICBibG9jayA9IGJsb2Nr
LT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAg
fQorICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRhOworfQorCitTZWxlY3Rpb25SYW5nZURhdGE6
OlNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3JiB2aWV3KQorICAgIDogbV9yZW5kZXJWaWV3
KHZpZXcpCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgLCBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlcih2aWV3KQorI2VuZGlmCit7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRh
OjpzZXQoY29uc3QgQ29udGV4dCYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRN
b2RlKQoreworICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMg
YXJlIGRlZmluZWQuCisgICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNraW5n
IGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQuCisgICAgaWYgKChz
ZWxlY3Rpb24uc3RhcnQgJiYgIXNlbGVjdGlvbi5lbmQpIHx8IChzZWxlY3Rpb24uZW5kICYmICFz
ZWxlY3Rpb24uc3RhcnQpKQorICAgICAgICByZXR1cm47CisgICAgLy8gSnVzdCByZXR1cm4gaWYg
dGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KKyAgICBhdXRvIGlzQ2FyZXQgPSBtX3JlbmRl
clZpZXcuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CisgICAgaWYgKHNlbGVjdGlvbiA9
PSBtX3NlbGVjdGlvbkNvbnRleHQgJiYgbV9zZWxlY3Rpb25XYXNDYXJldCA9PSBpc0NhcmV0KQor
ICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgLy8gQ2xl
YXIgdGhlIGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5vdGlmaWVyIGZvciB0aGUgbmV3IHJl
Y3RzIHdlIGFyZSBhYm91dCB0byBnYXRoZXIuCisgICAgLy8gVGhlIE5vdGlmaWVyIHVwZGF0ZXMg
dGhlIEVkaXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlIGFuZCBpcyBkZXN0cm95ZWQuCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI+IHJlY3RO
b3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIo
KTsKKyNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBtX3NlbGVjdGlvbldh
c0NhcmV0ID0gaXNDYXJldDsKKyAgICBhcHBseShzZWxlY3Rpb24sIGJsb2NrUmVwYWludE1vZGUp
OworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIoKQoreworICAgIG1fcmVuZGVy
Vmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgc2V0KHtudWxs
cHRyLCBudWxscHRyLCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdH0sIFNlbGVjdGlvblJhbmdl
RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKK30KKwordm9pZCBTZWxlY3Rpb25SYW5n
ZURhdGE6OnJlcGFpbnQoKSBjb25zdAoreworICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBwcm9j
ZXNzZWRCbG9ja3M7CisgICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOworICAgIGlmICht
X3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyUG9zaXRp
b24oKm1fc2VsZWN0aW9uQ29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlv
bi52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQpOworICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBzZWxlY3Rp
b25JdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsgcmVuZGVy
ZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+
Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0
YXJ0ICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBS
ZW5kZXJTZWxlY3Rpb25JbmZvKCpyZW5kZXJlciwgdHJ1ZSkucmVwYWludCgpOworICAgICAgICAv
LyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdp
biBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgZm9yIChSZW5k
ZXJCbG9jayogYmxvY2sgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7IGJsb2NrICYmICFp
czxSZW5kZXJWaWV3PigqYmxvY2spOyBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKSkg
eworICAgICAgICAgICAgaWYgKCFwcm9jZXNzZWRCbG9ja3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
bygqYmxvY2ssIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW50UmVj
dCBTZWxlY3Rpb25SYW5nZURhdGE6OmJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBj
b25zdAoreworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAgICBS
ZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0OworICAgIFJlbmRl
ck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQp
CisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKm1fc2VsZWN0aW9uQ29udGV4
dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAgICBTZWxl
Y3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0
ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVTZWxlY3Rpb25M
ZWFmKCkgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0IHx8IHN0YXJ0ID09IG1f
c2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICAmJiBzdGFydC0+c2VsZWN0aW9uU3Rh
dGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICAgICAgICAgIC8vIEJs
b2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdh
cHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgcmVuZGVyZXJz
LnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3RhcnQs
IGNsaXBUb1Zpc2libGVDb250ZW50KSk7CisgICAgICAgICAgICBhdXRvKiBibG9jayA9IHN0YXJ0
LT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVu
ZGVyVmlldz4oKmJsb2NrKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gcmVuZGVyZXJzLmFkZChibG9jaywgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJsb2NrLCBjbGlwVG9WaXNpYmxlQ29u
dGVudCk7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVy
YXRvci5uZXh0KCk7CisgICAgfQorCisgICAgLy8gTm93IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGlu
ZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxlY3Rpb24uCisgICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIGF1dG8gZW5kID0gcmVuZGVyZXJzLmVuZCgpOworICAg
IGZvciAoYXV0byBpID0gcmVuZGVyZXJzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKKyAgICAg
ICAgYXV0byogaW5mbyA9IGktPnZhbHVlLmdldCgpOworICAgICAgICAvLyBSZW5kZXJTZWxlY3Rp
b25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFp
bmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KKyAgICAgICAgTGF5b3V0UmVjdCBjdXJy
ZW50UmVjdCA9IGluZm8tPnJlY3QoKTsKKyAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRDb250YWlu
ZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UXVhZCBh
YnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
Y3VycmVudFJlY3QpKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpOworICAgICAgICB9CisgICAgICAgIHNlbGVjdGlvblJlY3QudW5pdGUo
Y3VycmVudFJlY3QpOworICAgIH0KKyAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsZWN0aW9u
UmVjdCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjphcHBseShjb25zdCBDb250ZXh0
JiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit7CisgICAgYXV0
byBvbGRTZWxlY3Rpb25EYXRhID0gY29sbGVjdChtX3NlbGVjdGlvbkNvbnRleHQsIGJsb2NrUmVw
YWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7CisgICAgLy8gUmVtb3ZlIGN1cnJl
bnQgc2VsZWN0aW9uLgorICAgIGZvciAoYXV0byogcmVuZGVyZXIgOiBvbGRTZWxlY3Rpb25EYXRh
LnJlbmRlcmVycy5rZXlzKCkpCisgICAgICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlm
TmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSk7CisgICAgbV9zZWxlY3Rpb25Db250
ZXh0ID0gbmV3U2VsZWN0aW9uOworICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uIHN0YXR1cyBv
ZiBhbGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQKKyAg
ICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0ICYmIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICBtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25C
b3RoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCkK
KyAgICAgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJ
Zk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgaWYgKG1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICBtX3NlbGVjdGlvbkNvbnRleHQuZW5kLT5z
ZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKTsKKyAg
ICB9CisKKyAgICBhdXRvKiBzZWxlY3Rpb25TdGFydCA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dDsKKyAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZDsK
KyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVj
dGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlv
bigqc2VsZWN0aW9uRGF0YUVuZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVl
KCkpOworICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0
YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBj
dXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVu
dFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmIChjdXJy
ZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0IHx8IGN1cnJlbnRSZW5kZXJl
ciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRl
SWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpOworICAgIH0KKworICAgIGlm
IChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQorICAgICAgICBtX3Jl
bmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKworICAg
IC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhl
IG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCisgICAgLy8gcHV0IHRoZW0gaW4gdGhl
IG5ldyBvYmplY3RzIGxpc3QuCisgICAgU2VsZWN0aW9uRGF0YTo6UmVuZGVyZXJNYXAgbmV3U2Vs
ZWN0ZWRSZW5kZXJlcnM7CisgICAgU2VsZWN0aW9uRGF0YTo6UmVuZGVyQmxvY2tNYXAgbmV3U2Vs
ZWN0ZWRCbG9ja3M7CisgICAgc2VsZWN0aW9uSXRlcmF0b3IgPSBTZWxlY3Rpb25JdGVyYXRvcihz
ZWxlY3Rpb25TdGFydCk7CisgICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rp
b25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25F
bmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgeworICAgICAg
ICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKCpjdXJyZW50UmVuZGVyZXIsIG1fc2Vs
ZWN0aW9uQ29udGV4dCkpIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxl
Y3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rp
b25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNvbGxl
Y3RlZFNlbGVjdGlvblJlY3RzKCkpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0
aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3QpOwor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkpCisg
ICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFsc2Up
OworI2VuZGlmCisgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRlcmVycy5zZXQoY3VycmVudFJl
bmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKKyAgICAgICAgICAgIGF1dG8qIGNvbnRh
aW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAg
ICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmlu
Z0Jsb2NrKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1Nl
bGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29udGFpbmlu
Z0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJs
b2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxv
Y2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250
YWluaW5nQmxvY2spOworICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5p
bmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkR2FwUmVjdHMoYmxv
Y2tJbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIGJsb2NrSW5mby0+cmVjdHMoKSk7CisjZW5kaWYK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChibG9ja1JlcGFpbnRN
b2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBI
YXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0
aGUgbmV3IHNlbGVjdGlvbj8KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDog
b2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMpIHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBz
ZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7CisgICAgICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxl
Y3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIpOworICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2Vs
ZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8fCBv
bGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0g
bmV3SW5mby0+c3RhdGUoKQorICAgICAgICAgICAgfHwgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLnN0YXJ0UG9zaXRpb24gIT0gbV9zZWxl
Y3Rpb25Db250ZXh0LnN0YXJ0UG9zaXRpb24pCisgICAgICAgICAgICB8fCAobV9zZWxlY3Rpb25D
b250ZXh0LmVuZCA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLmVuZFBvc2l0aW9uICE9
IG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgIG9sZEluZm8t
PnJlcGFpbnQoKTsKKyAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7CisgICAgICAgICAgICAgICAg
bmV3SW5mby0+cmVwYWludCgpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJz
LnJlbW92ZShyZW5kZXJlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9s
ZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICBmb3Ig
KGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3U2VsZWN0ZWRSZW5kZXJlcnMpCisgICAg
ICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5yZXBhaW50KCk7CisKKyAgICAvLyBIYXZl
IGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPworICAgIGZvciAoYXV0byYgc2VsZWN0ZWRC
bG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2NrcykgeworICAgICAgICBhdXRvKiBibG9j
ayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKKyAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmdldChibG9jayk7CisgICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3Rl
ZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8t
PnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0lu
Zm8tPnN0YXRlKCkpIHsKKyAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKKyAgICAgICAg
ICAgIGlmIChuZXdJbmZvKSB7CisgICAgICAgICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwor
ICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbnkgbmV3IGJsb2NrcyB0aGF0IHJl
bWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQgc28gdGhleSBu
ZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG5l
d1NlbGVjdGVkQmxvY2tzKQorICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS0+cmVwYWlu
dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRlMWE5YmNjYjQ5M2M2ODU0
ZThkNjMwN2E0ODkzMTVkZGE4NWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaApAQCAtMCwwICsxLDgzIEBACisgLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAq
ICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCisjaWYgRU5BQkxFKFNF
UlZJQ0VfQ09OVFJPTFMpCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YTsKKyAg
ICAKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YSB7CitwdWJsaWM6CisgICAgU2VsZWN0aW9uUmFu
Z2VEYXRhKFJlbmRlclZpZXcmKTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29udGV4dCB7CisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb250ZXh0JiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ID09IG90aGVyLnN0YXJ0ICYmIGVuZCA9PSBvdGhlci5l
bmQgJiYgc3RhcnRQb3NpdGlvbiA9PSBvdGhlci5zdGFydFBvc2l0aW9uICYmIGVuZFBvc2l0aW9u
ID09IG90aGVyLmVuZFBvc2l0aW9uOworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0
KiBzdGFydCB7IG51bGxwdHIgfTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmQgeyBudWxscHRy
IH07CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zaXRpb247CisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvc2l0aW9uOworICAgIH07CisKKyAgICBl
bnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9
OworICAgIHZvaWQgc2V0KGNvbnN0IENvbnRleHQmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2Rl
OjpOZXdYT1JPbGQpOworICAgIENvbnRleHQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25Db250ZXh0OyB9CisgICAgdm9pZCBjbGVhcigpOworICAgIAorICAgIFJlbmRlck9iamVjdCog
c3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQ7IH0KKyAgICBS
ZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5lbmQ7
IH0KKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rp
b25Db250ZXh0LnN0YXJ0UG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0
UG9zaXRpb24udmFsdWUoKTsgfQorICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uKCkgY29uc3QgeyBB
U1NFUlQobV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uKTsgcmV0dXJuIG1fc2VsZWN0aW9u
Q29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpOyB9CisKKyAgICBJbnRSZWN0IGJvdW5kcyhib29s
IGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CisgICAgdm9pZCByZXBhaW50KCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBhcHBseShjb25zdCBDb250ZXh0JiwgUmVwYWlu
dE1vZGUpOworCisgICAgY29uc3QgUmVuZGVyVmlldyYgbV9yZW5kZXJWaWV3OworI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorICAgIFNlbGVjdGlvblJlY3RHYXRoZXJlciBtX3NlbGVjdGlv
blJlY3RHYXRoZXJlcjsKKyNlbmRpZgorICAgIENvbnRleHQgbV9zZWxlY3Rpb25Db250ZXh0Owor
ICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uU3VidHJlZVJvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1
YnRyZWVSb290LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4OTU2NDYyZjNj
YzU1NGM1ZDVmZDg2MThhMDYwYjc4NThiMTZjNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3Vi
dHJlZVJvb3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFT
IElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0g
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNlbGVjdGlvblN1YnRyZWVSb290LmgiCi0KLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRl
ICJWaXNpYmxlU2VsZWN0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU2VsZWN0aW9u
U3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlv
blN1YnRyZWVSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJl
ZVJvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNjhhNzA4N2EyOTE0OWQy
YzIxNDg3NmY5NDU1NmMyNDk0ZjliNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJv
b3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPi
gJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgot
ICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLQotY2xhc3MgU2VsZWN0aW9u
U3VidHJlZVJvb3QgewotcHVibGljOgotICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJP
YmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGVkT2Jq
ZWN0TWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+PiBTZWxlY3RlZEJsb2NrTWFwOwotCi0g
ICAgc3RydWN0IE9sZFNlbGVjdGlvbkRhdGEgewotICAgICAgICBPbGRTZWxlY3Rpb25EYXRhKCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
c2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVj
dGlvbkVuZFBvczsKLSAgICAgICAgU2VsZWN0ZWRPYmplY3RNYXAgc2VsZWN0ZWRPYmplY3RzOwot
ICAgICAgICBTZWxlY3RlZEJsb2NrTWFwIHNlbGVjdGVkQmxvY2tzOwotICAgIH07Ci0KLSAgICBj
bGFzcyBTZWxlY3Rpb25TdWJ0cmVlRGF0YSB7Ci0gICAgcHVibGljOgotICAgICAgICBTZWxlY3Rp
b25TdWJ0cmVlRGF0YSgpID0gZGVmYXVsdDsKLQotICAgICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0
YShSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBz
ZWxlY3Rpb25TdGFydFBvcywgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IHNlbGVjdGlvbkVuZFBvcykKLSAgICAgICAgICAgIDogbV9zZWxlY3Rpb25T
dGFydChzZWxlY3Rpb25TdGFydCkKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmQoc2VsZWN0
aW9uRW5kKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlvblN0YXJ0UG9zKHNlbGVjdGlvblN0YXJ0
UG9zKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZFBvcyhzZWxlY3Rpb25FbmRQb3MpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvblN0YXJ0OyB9Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdGFydFBvczsgfQotICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kOyB9Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHNlbGVjdGlvbkVuZFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uRW5kUG9z
OyB9Ci0gICAgICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnModW5zaWduZWQmIHN0
YXJ0UG9zLCB1bnNpZ25lZCYgZW5kUG9zKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBz
dGFydFBvcyA9IG1fc2VsZWN0aW9uU3RhcnRQb3MudmFsdWUoKTsKLSAgICAgICAgICAgIGVuZFBv
cyA9IG1fc2VsZWN0aW9uRW5kUG9zLnZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBj
bGVhclNlbGVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uU3RhcnQg
PSBudWxscHRyOwotICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFydFBvcyA9IHN0ZDo6bnVsbG9w
dDsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1f
c2VsZWN0aW9uRW5kUG9zID0gc3RkOjpudWxsb3B0OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uU3RhcnQgeyBudWxscHRyIH07Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25FbmQgeyBudWxscHRyIH07Ci0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uU3RhcnRQb3M7Ci0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uRW5kUG9zOwotICAgIH07Ci0KLSAgICBT
ZWxlY3Rpb25TdWJ0cmVlUm9vdCgpOwotCi0gICAgU2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVj
dGlvbkRhdGEoKSB7IHJldHVybiBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOyB9Ci0gICAgY29uc3Qg
U2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvblN1YnRyZWVEYXRhOyB9Ci0KLSAgICB2b2lkIHNldFNlbGVjdGlvbkRhdGEoY29uc3Qg
U2VsZWN0aW9uU3VidHJlZURhdGEmIHNlbGVjdGlvblN1YnRyZWVEYXRhKSB7IG1fc2VsZWN0aW9u
U3VidHJlZURhdGEgPSBzZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQotCi1wcml2YXRlOgotICAgIFNl
bGVjdGlvblN1YnRyZWVEYXRhIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322324</attachid>
            <date>2017-10-01 11:19:59 -0700</date>
            <delta_ts>2017-10-01 12:44:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20171001111958.patch</filename>
            <type>text/plain</type>
            <size>71667</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uNWQyNDE2MDM3MjVhZWU0NmFlN2I3YTNmYTA3YzA2
YTNkMjEyMzg1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVXUyB0ZXN0aW5nLgorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlv
blVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2ls
bEJlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRv
Tm9kZU1vZGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJl
cGFyZUZvckRlc3RydWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpm
b2N1c2VkT3JBY3RpdmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGU6On5TY29wZWRGcmFtZVNl
bGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1Nl
bGVjdGlvblJvb3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlciBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNl
ZDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9y
TGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0
ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25J
dGVyYXRvcjo6U2VsZWN0aW9uSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpyZW5kZXJlckFmdGVyUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbiBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50U3Vi
dHJlZVNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpzZXRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZE9i
amVjdEZvck5ld1NlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpjbGVhclN1YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmdldFNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpTZWxlY3Rpb25J
dGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y3VycmVudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9uUmFuZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uUmFuZ2VEYXRhOjpyZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blJhbmdlRGF0YTo6Ym91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJh
bmdlRGF0YTo6Y29sbGVjdEFuZENsZWFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dGlvblJhbmdlRGF0YTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VE
YXRhOjppc1ZhbGlkUmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dDo6b3BlcmF0b3I9PSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmdldCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c3RhcnRQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpPbGRTZWxlY3Rpb25EYXRhOjpPbGRTZWxl
Y3Rpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6U2VsZWN0aW9uU3VidHJlZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRy
ZWVEYXRhOjpzZWxlY3Rpb25TdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0
YXJ0UG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRy
ZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0
cmVlRGF0YTo6c2VsZWN0aW9uRW5kUG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9u
U3RhcnRFbmRQb3NpdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6c2VsZWN0
aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9v
dDo6c2VsZWN0aW9uRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25TdWJ0cmVlUm9vdDo6c2V0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisKIDIwMTctMDkt
MzAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbU2V0dGluZ3NdIFJl
cGxhY2UgU2V0dGluZ3NNYWNyb3MuaCB3aXRoIGEgZ2VuZXJhdGVkIGJhc2UgY2xhc3MgZm9yIFNl
dHRpbmdzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDdiNWYwN2NiZGYxOThlNzRkNjYwMzdkNTJk
Y2E4NDAzY2QwOGVmMWIuLjMzYWY0YTA0OTMyYzM1MWY5MmY0NTNmNzc5ODM5YzEzNTMzYjc2NGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yNzQ1LDcgKzI3NDUsNyBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKICAgICByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHAKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmNwcAotICAgIHJl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKKyAgICByZW5kZXJpbmcvU2VsZWN0aW9u
UmFuZ2VEYXRhLmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogICAgIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjU3MjM2ZjYzODZiMmIyNWUxN2I0ZGFl
NjE2NTE4M2M5ZjgzZGRjMy4uNTFmYmZjNjhhNzRjMzA3NmJiOWE5ZmZjNDFhZWRhNjkyYzkxNWIy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNjQyNCw4ICs2NDI0LDggQEAKIAkJQ0RDQTk4RUIxOEIyQzhFQjAwQzEyRkY5IC8q
IExlZ2FjeUNETVByaXZhdGVNZWRpYVBsYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBOThFQTE4QjJDOEVCMDBDMTJGRjkgLyogTGVnYWN5
Q0RNUHJpdmF0ZU1lZGlhUGxheWVyLmNwcCAqLzsgfTsKIAkJQ0RDRDQxRTcxQzNEREIwOTAwOTY1
RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29u
dGVudFJhbmdlLmNwcCAqLzsgfTsKIAkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RDRDQxRTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZBQkJE
MThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUw
IC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQ0RDRkFCQkUxOEMwQUY4NDAwNkY4NDUwIC8qIFNlbGVjdGlv
blN1YnRyZWVSb290LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5j
cHAgKi87IH07CisJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZB
QkJCMThDMEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDRENGQUJCRTE4QzBBRjg0MDA2
Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rp
b25SYW5nZURhdGEuY3BwICovOyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAyQjNEQzYgLyogU2Ft
cGxlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovOyB9OwogCQlDREQ3
MDg5NzE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2Ft
cGxlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQ0REQzFFN0ExOEE5NTJGMzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0REQzFFNzkx
OEE5NTJGMzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oICovOyB9OwpAQCAt
MTUxOTYsOCArMTUxOTYsOCBAQAogCQlDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2Vk
Q29udGVudFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBh
cnNlZENvbnRlbnRSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0Q0
MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZh
Y3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyog
U2VsZWN0aW9uU3VidHJlZVJvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VsZWN0aW9uU3VidHJlZVJvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RD
RkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblN1YnRyZWVSb290LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8q
IFNlbGVjdGlvblJhbmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
ZWxlY3Rpb25SYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFC
QkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25SYW5nZURhdGEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgyMEIgLyogVGV4dFRy
YWNrUmVwcmVzZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4
dFRyYWNrUmVwcmVzZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RE
NzA4OTQxODM1OUY2RTAwMkIzREM2IC8qIFNhbXBsZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjYxMDYsOCArMjYxMDYsOCBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBB
NDIzNCAvKiBSb290SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5oICovLAotCQkJCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAv
KiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgKi8sCi0JCQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4
NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi8sCisJCQkJQ0RDRkFCQkMxOEMwQUYxOTAw
NkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8sCisJCQkJQ0RDRkFCQkIxOEMwQUUz
MTAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oICovLAogCQkJCUU0ODk0NEEwMTgwQjU3
RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNDg5NDRBMTE4MEI1
N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovLAogCQkJCTExRTA2N0VCMUU2MjQ2
MTMwMDE2MkQxNiAvKiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwICovLApAQCAtMzAwMTEs
OSArMzAwMTEsOSBAQAogCQkJCTk3NEQyREE1MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBv
bGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNl
Y3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJG
MEQwMDZDMUQwMEVGNkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJFQTgwN0M5MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTQwNUM4OTE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0
NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0
MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzMkQzRkU4MThBODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkI5OTk5NzE4MDRENTQyMDBEMDExMjEgLyogU2VsZWN0
b3JDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzkyOSw5ICszMzkyOSw5IEBACiAJCQkJ
MUFGN0FGQzcxQTQ4QThCQzAwQzhFNEU3IC8qIFNlY3VyaXR5T3JpZ2luUG9saWN5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3NEQyREE0MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGlj
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEyRTBEMDA2QzFEMDBFRjZGMjYgLyogU2Vn
bWVudGVkU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQ0ZBQkJFMThDMEFGODQwMDZG
ODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkVBODA3
QzgwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE0MDVDODgxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlDRENGQUJCRTE4QzBBRjg0MDA2Rjg0NTAgLyogU2VsZWN0aW9u
U3VidHJlZVJvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5NjE4
MDRENTQyMDBEMDExMjEgLyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MTUwNzE1NzE2ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGE4
NTdlZGVkZTZiMjM3NzdjNmU4NGNjZmJkMzE0NDExNzE4MWI3NzguLjg4N2ViYjFlZWIyZTg5YzM2
MGU5MjQzY2ZmMGVkOTc0MDZjYTdmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0
TmVlZHNTZWxlY3Rpb25VcGRhdGUoKQogewogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9
IHRydWU7CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2
ZWFsU2VsZWN0aW9uKGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCkBAIC00
NDMsNyArNDQzLDcgQEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJiBub2RlKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2Vs
ZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBjbGVh
cigpOwogfQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRU
b05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAKICAg
ICBpZiAoY2xlYXJSZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJWaWV3ID0gbm9kZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgcmVu
ZGVyVmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVj
dGlvbigpLmNsZWFyKCk7CiAKICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBzZWxlY3Rpb24gdXBk
YXRlIHNvIHRoZSBzZWxlY3Rpb24gd2lsbCBiZSBzZXQgYWdhaW4uCiAgICAgICAgICAgICBtX3Bl
bmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwpAQCAtMTUxNyw5ICsxNTE3LDggQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtU
aW1lci5zdG9wKCk7CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxl
Y3Rpb24oKTsKKyAgICBpZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQorICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgc2V0U2VsZWN0aW9u
V2l0aG91dFVwZGF0aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRT
ZWxlY3Rpb25PcHRpb25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVy
R3JhbnVsYXJpdHkpOwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMTk5
NSw3ICsxOTk0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVD
aGFuZ2VkKCkKICAgICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNoZWNrIGlmIHRoZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUg
cGxhY2VzIHRob3NlIGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZp
ZXcgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5yZXBhaW50U2VsZWN0
aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENh
cmV0IGFwcGVhcnMgaW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNl
ZCkKQEAgLTIwOTAsNyArMjA4OSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogI2VuZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAg
ICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjExNSw3ICsyMTE0LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwog
ICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVu
ZGVyZXIsIGVuZE9mZnNldCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRS
ZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9KTsKICAgICB9CiB9
CiAKQEAgLTIyMzIsMTIgKzIyMzEsMTIgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRP
clN0eWxlKCptX2ZyYW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAg
IGlmICghcm9vdCB8fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7CisgICAgYXV0byogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBp
ZiAoIXJlbmRlclZpZXcgfHwgIXZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAK
LSAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xp
cFRvVmlzaWJsZUNvbnRlbnQpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IHJlbmRlclZpZXct
PnNlbGVjdGlvbigpLmJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CiAgICAgcmV0dXJuIGNs
aXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZp
c2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCkpIDogc2VsZWN0aW9uUmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IGNjZWY0YjI3MTFlYWIxNGM4YWIzZDIwZGJlYmI4MmUyMWRmY2QwYTAuLjI3OWQyZWU2ODE3
MWU4OTQ1MmY0ZmNjNGNkMmRjMTI5MzY1ZTEzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTQ1MjIsOCArNDUyMiw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9y
U25hcHNob3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8g
YWZ0ZXIgd2UgcGFpbnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlv
biA9PSBFeGNsdWRlU2VsZWN0aW9uKSB7CiAgICAgICAgIGZvciAoYXV0byogZnJhbWUgPSBtX2Zy
YW1lLnB0cigpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2Zy
YW1lLnB0cigpKSkgewotICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgcm9vdC0+Y2xlYXJTZWxlY3Rpb24o
KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKQorICAgICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7
CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmlu
ZGV4IGNkMmJkNDM3NTE3YjYzMjBmNmM5NTM0MDgyMjliOTFiNWQ3MDFhYjcuLmY4YTQ1ZDY5NDFm
M2Y3N2U4NDZmOTg1YTE0ZmFlNzYyYTQyNWQ1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcApAQCAtMTM1LDIxICsxMzUsMTggQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0
aW9uU3RhdGUgewogICAgIFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoRnJhbWUmIGZyYW1lKQog
ICAgICAgICA6IGZyYW1lKGZyYW1lKQogICAgIHsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJv
b3QgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJvb3QtPmdldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7
CisgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkp
CisgICAgICAgICAgICBzZWxlY3Rpb24gPSByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5nZXQoKTsK
ICAgICB9CiAKICAgICB+U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSgpCiAgICAgewotICAgICAg
ICBpZiAoUmVuZGVyVmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAg
ICAgICAgcm9vdC0+c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRS
ZW5kZXJlciwgZW5kT2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgICAg
IGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYg
ZnJhbWU7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVj
dCogZW5kUmVuZGVyZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7
Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIFNlbGVjdGlvblJh
bmdlRGF0YTo6Q29udGV4dCBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAg
LTE4NiwxMCArMTgzLDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShG
cmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAgaW50IHN0YXJ0
T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zm
c2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFy
dFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmll
dzo6UmVwYWludE5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRSZW5k
ZXJlciwgZW5kUmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9LCBTZWxlY3Rpb25SYW5n
ZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNu
YXBzaG90RnJhbWVSZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcK
ICAgICAvLyBGcmFtZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0
aW9uIGZyb20gdGhlIEZyYW1lIGl0c2VsZi4KLSAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJv
bVNuYXBzaG90KHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb25Cb3VuZHMo
KSwgb3B0aW9ucyksIG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25h
cHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kcygp
LCBvcHRpb25zKSwgbnVsbHB0cik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGI2NGZjZWIzYTlmMzk4Y2MwMTY4M2U0ZmNkMmU0
ZWVmNjE1M2M4YmIuLmU2YTlkYTkyYjUwMjM4OThkNWZjYTQ3OWM3MjY2NjgzMGY4ODFjMDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE0NCw4ICsx
NDQsOCBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVj
dGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0g
cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5k
IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydFBvcywgZW5kUG9zOwotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5nZXRTZWxl
Y3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgYXV0byBzdGFydFBvcyA9
IHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAg
YXV0byBlbmRQb3MgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlvbigp
OwogICAgICAgICAvLyBUaGUgcG9zaXRpb24gYWZ0ZXIgYSBoYXJkIGxpbmUgYnJlYWsgaXMgY29u
c2lkZXJlZCB0byBiZSBwYXN0IGl0cyBlbmQuCiAgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVu
KCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOwogICAgICAgICB1bnNpZ25lZCBsYXN0U2Vs
ZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwpAQCAt
NjM5LDkgKzYzOSw4IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRC
b3g6OnNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3QKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVu
IH07CiAgICAgCi0gICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHJl
bmRlcmVyKCkudmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOworICAgIGF1
dG8gc3RhcnQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7
CisgICAgYXV0byBlbmQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlv
bigpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlm
IChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDVhYjEzMzI0MmM1NmM5Y2IwMWZk
OWM0Njg5ZGQxNGU5NGRmZGQ2YTkuLmJhYzU1Njk4MzRlOTI5YjIzYzdkYzg5ZGU5YjNjZTJjYmMw
MDVhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTg2
NSw4ICsxODY1LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29uc3QK
ICAgICAgICAgfHwgaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpIHx8IHN0eWxlKCkuY29sdW1uU3Bh
bigpID09IENvbHVtblNwYW5BbGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlm
ICh2aWV3KCkuc2VsZWN0aW9uVW5zcGxpdFN0YXJ0KCkpIHsKLSAgICAgICAgTm9kZSogc3RhcnRF
bGVtZW50ID0gdmlldygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpLT5ub2RlKCk7CisgICAgaWYg
KHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVu
dCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydCgpLT5ub2RlKCk7CiAgICAgICAgIGlmIChzdGFy
dEVsZW1lbnQgJiYgc3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZWxlbWVu
dCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA4YmJjMjg5NTRmODBiZDdiNzAyZTUxMGZhZjAw
M2NmODc1MGVmODZkLi5kNTYxMjlmN2QzZjNkMDZhNzE2MDA5NTg0Njg2NDliNGQ2NWVmNjZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQxNyw4ICsx
NDE3LDggQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3QKICAg
ICByZXR1cm4gc3QgPT0gU2VsZWN0aW9uU3RhcnQKICAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9u
RW5kCiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkJvdGgKLSAgICAgICAgfHwgdmlldygpLnNl
bGVjdGlvblVuc3BsaXRTdGFydCgpID09IHRoaXMKLSAgICAgICAgfHwgdmlldygpLnNlbGVjdGlv
blVuc3BsaXRFbmQoKSA9PSB0aGlzOworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuc3Rh
cnQoKSA9PSB0aGlzCisgICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmQoKSA9PSB0aGlz
OwogfQogCiB2b2lkIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBiYWExZjY1NGQ1MTkxZDI4NjdlZGVhYmZj
OGJhZDIyZWVkZTViMWU0Li5iNDgxMGVjMzE2MWFhMGQ5NTQxNWJjMGI4MjExYzdmYTc3MTNkYTUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02Miw3ICs2Miw3
IEBAIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKIGNs
YXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogY2xhc3MgUmVuZGVyVGhlbWU7Ci1jbGFzcyBT
ZWxlY3Rpb25TdWJ0cmVlUm9vdDsKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YTsKIGNsYXNzIFRy
YW5zZm9ybVN0YXRlOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCA2NDBhN2JhZWQ4ZWIzYTdhODRkYmFi
NThjOTZhNDM5YWMzZDY2OTI2Li4yODE4YzY0ZWM0ZDdiYWU3MDQ2ODNmOTIzNWRkYjJjYWNiMTU4
YjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAg
LTY0NCwyMyArNjQ0LDIyIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRl
KFNlbGVjdGlvblN0YXRlIHN0YXRlKQogCiBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVk
KCkgY29uc3QKIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSBzID0gc2VsZWN0aW9uU3RhdGUoKTsKLSAg
ICBpZiAocyA9PSBTZWxlY3Rpb25Ob25lKQorICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2Vs
ZWN0aW9uU3RhdGUoKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzID09IFNlbGVjdGlvbkluc2lkZSkKKyAgICBpZiAoc3Rh
dGUgPT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHVuc2ln
bmVkIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7Ci0gICAgdmlldygpLmdldFNlbGVjdGlv
blN0YXJ0RW5kKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIGlmIChzID09IFNl
bGVjdGlvblN0YXJ0KQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMDsKLSAgICAg
ICAgCisgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBv
c2l0aW9uKCk7CisgICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuZW5k
UG9zaXRpb24oKTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIHJl
dHVybiAhc2VsZWN0aW9uU3RhcnQ7CisKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhh
c0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAgIGlm
IChzID09IFNlbGVjdGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAg
ICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25C
b3RoKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxlY3Rpb25FbmQg
PT0gZW5kOwotICAgICAgICAKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkKKyAgICAg
ICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCBkZjEzMzE5ODMzNzdlNWEzZDk2MzM1YWI5MmU1
OTM3ZmNkNzRkM2QwLi4zZDlmZmNiMmU1MGI2OTQxYTA0MTEyMjg4YmZkMDg4YWI3MmM0YTMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNDQxLDEzICsxNDQx
LDE1IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGlu
ZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0
YXJ0UG9zIGFuZCBlbmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNs
dWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICB1bnNpZ25lZCBzdGFydFBvcywg
ZW5kUG9zOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zOworICAgIHVuc2lnbmVkIGVuZFBvczsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8g
V2UgYXJlIGZ1bGx5IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CiAgICAgICAgIGVu
ZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICB2aWV3KCkuZ2V0U2Vs
ZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIHN0YXJ0UG9zID0gdmll
dygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgZW5kUG9zID0gdmlldygp
LnNlbGVjdGlvbigpLmVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IFNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0gdGV4dExlbmd0aCgpOwog
ICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBj
MjUwYTRkZmI3NTAyMzU4NGNhZjIyZWI4ZTE1ZjdjNGRiMDUxZmFlLi43NWUyMWM1ZGYzOTQ4MDZi
YTg0MzQyMmZmYTg1OGM2MjY3YmU4OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCkBAIC00NDYsMTEgKzQ0NiwxMCBAQCB2b2lkIFJl
bmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVy
LCBSZW5kZXJPYmplY3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQg
c3RhcnQsIGVuZDsKLSAgICByZW5kZXJlci52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3Rh
cnQsIGVuZCk7CisgICAgYXV0byBzdGFydCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5z
dGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBlbmQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9u
KCkuZW5kUG9zaXRpb24oKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7Ci0KICAgICAg
ICAgLy8gdG8gaGFuZGxlIHNlbGVjdGlvbiBmcm9tIGVuZCBvZiB0ZXh0IHRvIGVuZCBvZiBsaW5l
CiAgICAgICAgIGlmIChzdGFydCAmJiBzdGFydCA9PSBlbmQpCiAgICAgICAgICAgICBzdGFydCA9
IGVuZCAtIDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODhj
ZTgzNDliMTNlZjQxMjEyYWE3ZjdiNDhjMDgwYTA2ZTQ5NGZkZC4uZjhlOTc4OGZmYjRlNzIwN2E5
OTI0OTJiYjg4M2JjZTgyMjYzMTQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcApAQCAtNzgsNTMgKzc4LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rpc2FsbG93
TGF5b3V0IHsgZmFsc2UgfTsKIH07CiAKLXN0cnVjdCBTZWxlY3Rpb25JdGVyYXRvciB7Ci0gICAg
U2VsZWN0aW9uSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJl
bnQoc3RhcnQpCi0gICAgewotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAg
Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2N1cnJlbnQ7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNF
bXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAg
ICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsK
LSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1
cnJlbnRTcGFuKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9z
cGFubmVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVy
KCk7Ci0gICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bh
bm5lcigpCi0gICAgewotICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyPihtX2N1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRv
JiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyPigqbV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhv
bGRlcik7Ci0gICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9
Ci0KLSAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07
Ci0KIFJlbmRlclZpZXc6OlJlbmRlclZpZXcoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHls
ZSYmIHN0eWxlKQogICAgIDogUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxl
KSkKICAgICAsIG1fZnJhbWVWaWV3KCpkb2N1bWVudC52aWV3KCkpCisgICAgLCBtX3NlbGVjdGlv
bigqdGhpcykKICAgICAsIG1fbGF6eVJlcGFpbnRUaW1lcigqdGhpcywgJlJlbmRlclZpZXc6Omxh
enlSZXBhaW50VGltZXJGaXJlZCkKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAs
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKCp0aGlzKQotI2VuZGlmCiB7CiAgICAgc2V0SXNSZW5k
ZXJWaWV3KCk7CiAKQEAgLTY5NywyOTAgKzY1NSw2IEBAIHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1
dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAog
ICAgIHF1YWRzLmFwcGVuZChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllcigpLT5zaXplKCkp
KTsKIH0KIAotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKFJlbmRl
ck9iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVj
dC0+Y2hpbGRBdChvZmZzZXQpOwotICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogb2JqZWN0LT5u
ZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKLX0KLQotSW50UmVjdCBSZW5kZXJWaWV3Ojpz
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICBM
YXlvdXRSZWN0IHNlbFJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVD
b250ZW50KTsKLSAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsUmVjdCk7Ci19Ci0KLUxheW91
dFJlY3QgUmVuZGVyVmlldzo6c3VidHJlZVNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAotewotICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGlvbk1hcDsKLSAgICBT
ZWxlY3Rpb25NYXAgc2VsZWN0ZWRPYmplY3RzOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvcyA9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9
IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3Ag
PSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0gICAgICAgIHN0b3AgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5k
UG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Io
b3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIGlmICgob3MtPmNh
bkJlU2VsZWN0aW9uTGVhZigpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFy
dCgpIHx8IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVj
dGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFy
ZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhl
eSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMu
c2V0KG9zLCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpvcywgY2xpcFRv
VmlzaWJsZUNvbnRlbnQpKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250
YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4o
KmNiKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gc2VsZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0
b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlx
dWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAg
ICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBvcyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9
Ci0KLSAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7Ci0gICAg
U2VsZWN0aW9uTWFwOjppdGVyYXRvciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7Ci0gICAg
Zm9yIChTZWxlY3Rpb25NYXA6Oml0ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsg
aSAhPSBlbmQ7ICsraSkgewotICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdl
IGNvb3JkaW5hdGVzLgotICAgICAgICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgp
OwotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9
IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgewotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1
YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJy
UmVjdCkpOwotICAgICAgICAgICAgY3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7IAotICAgICAgICB9Ci0gICAgICAgIHNlbFJlY3QudW5pdGUoY3VyclJlY3QpOwotICAg
IH0KLSAgICByZXR1cm4gc2VsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U2Vs
ZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigpOwotfQotCi12
b2lkIFJlbmRlclZpZXc6OnJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBI
YXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOwotCi0gICAgYXV0byogc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVj
dCogZW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBlbmQgPSBy
ZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRl
cmF0b3Ioc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkpOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBvID0gc2VsZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBv
ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmICghby0+Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkgJiYgbyAhPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBv
ICE9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoby0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqbywgdHJ1
ZSkucmVwYWludCgpOwotCi0gICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBh
aW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBh
cyB3ZWxsLgotICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBibG9jayA9IG8tPmNvbnRhaW5pbmdC
bG9jaygpOyBibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKTsgYmxvY2sgPSBibG9jay0+
Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFk
ZChibG9jaykuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVu
ZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBi
bG9ja1JlcGFpbnRNb2RlKQotewotICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQg
ZW5kIG9iamVjdHMgYXJlIGRlZmluZWQuCi0gICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQg
dHJ5IGNsaWNraW5nIGFyb3VuZCB0byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQu
Ci0gICAgaWYgKChzdGFydCAmJiAhZW5kKSB8fCAoZW5kICYmICFzdGFydCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgY2FyZXRDaGFuZ2VkID0gbV9zZWxlY3Rpb25XYXNDYXJldCAhPSBm
cmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKLSAgICBtX3NlbGVjdGlvbldhc0NhcmV0ID0g
ZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhl
IHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KLSAgICBpZiAobV9zZWxlY3Rpb25VbnNwbGl0U3Rh
cnQgPT0gc3RhcnQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3MgPT0gc3RhcnRQb3MKLSAg
ICAgICAgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kID09IGVuZCAmJiBtX3NlbGVjdGlvblVuc3Bs
aXRFbmRQb3MgPT0gZW5kUG9zICYmICFjYXJldENoYW5nZWQpIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBj
dXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBh
cmUgYWJvdXQgdG8gZ2F0aGVyLgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0
b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZWxlY3Rpb25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyPiByZWN0Tm90aWZpZXIg
PSBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5k
aWYgLy8gRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLy8gU2V0IGdsb2JhbCBwb3NpdGlv
bnMgZm9yIG5ldyBzZWxlY3Rpb24uCi0gICAgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgPSBzdGFy
dDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgIG1fc2Vs
ZWN0aW9uVW5zcGxpdEVuZCA9IGVuZDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPSBl
bmRQb3M7Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxPbGRT
ZWxlY3Rpb25EYXRhPigpOwotICAgIGNsZWFyU3VidHJlZVNlbGVjdGlvbihibG9ja1JlcGFpbnRN
b2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci0gICAgc2V0U2VsZWN0aW9uRGF0YShTZWxlY3Rpb25T
dWJ0cmVlRGF0YShzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9zKSk7Ci0gICAgYXBwbHlTdWJ0
cmVlU2VsZWN0aW9uKGJsb2NrUmVwYWludE1vZGUsICpvbGRTZWxlY3Rpb25EYXRhKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oY29uc3QgUmVu
ZGVyVmlldyYgdmlldywgY29uc3QgUmVuZGVyT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgcmV0dXJu
IChvYmplY3QuY2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJm9iamVjdCA9PSB2aWV3LnNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCkpICYmIG9iamVjdC5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uTm9uZSAmJiBvYmplY3QuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyVmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2Rl
IGJsb2NrUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEpIGNv
bnN0Ci17Ci0gICAgLy8gUmVjb3JkIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cy4gIFRoZXNlIHdp
bGwgYmUgdXNlZCBsYXRlcgotICAgIC8vIHdoZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBuZXcg
c2VsZWN0ZWQgb2JqZWN0cy4KLSAgICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9z
ID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0UG9zKCk7Ci0gICAgb2xkU2VsZWN0aW9u
RGF0YS5zZWxlY3Rpb25FbmRQb3MgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCk7
Ci0gICAgCi0gICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBn
YXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2Vl
biBsaW5lcyBhbmQgYmxvY2tzLgotICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCBy
ZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVj
dHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhv
c2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2Nj
dXJyZWQuCi0KLSAgICBSZW5kZXJPYmplY3QqIG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlv
blN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVj
dGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNl
bGVjdGlvbkVuZCkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rp
b25FbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKLSAgICBT
ZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihvcyk7Ci0gICAgd2hpbGUgKG9zICYm
IG9zICE9IHN0b3ApIHsKLSAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24o
KnRoaXMsICpvcykpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9y
IHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuICBUaGV5IG11c3QgYmUgZXhhbWlu
ZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3Rz
LnNldChvcywgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIHRydWUp
KTsKLSAgICAgICAgICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdYT1JPbGQp
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNiICYmICFpczxSZW5kZXJWaWV3PigqY2IpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+JiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkQmxvY2tzLmFkZChj
YiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2tJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZv
PigqY2IpOwotICAgICAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBv
cyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHNl
bGVjdGVkT2JqZWN0IDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMua2V5cygpKQot
ICAgICAgICBzZWxlY3RlZE9iamVjdC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rp
b25Ob25lKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjphcHBseVN1YnRyZWVTZWxlY3Rpb24oU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0
YSYgb2xkU2VsZWN0aW9uRGF0YSkKLXsKLSAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0
dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5k
Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydCgpID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkK
LSAgICAgICAgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCktPnNldFNlbGVjdGlvblN0
YXRlSWZOZWVkZWQoU2VsZWN0aW9uQm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSkKLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0
YXJ0KTsKLSAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAg
ICAgICAgIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJ
Zk5lZWRlZChTZWxlY3Rpb25FbmQpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uU3RhcnQgPSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBz
ZWxlY3Rpb25EYXRhRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJl
bmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRGF0
YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVj
dGlvbkRhdGFFbmQsIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsK
LSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7
Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0
OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3Vy
cmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChj
dXJyZW50UmVuZGVyZXIgPT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgY3Vy
cmVudFJlbmRlcmVyID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rp
b25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIGxheWVy
KCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0
aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywg
d2FsayB0aGVtIGFnYWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBs
aXN0LgotICAgIFNlbGVjdGVkT2JqZWN0TWFwIG5ld1NlbGVjdGVkT2JqZWN0czsKLSAgICBTZWxl
Y3RlZEJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0g
U2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1
cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlv
bkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVj
dGlvbigqdGhpcywgKmN1cnJlbnRSZW5kZXJlcikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1
ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKLQotI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2Vs
ZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBt
X3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250
YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0
T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5z
ZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmpl
Y3RzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOwotCi0gICAg
ICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYg
IWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAgICAgICAg
Y29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLQot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBi
bG9ja0luZm8tPnJlY3RzKCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50Tm90aGluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3Rz
IGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0
cykgewotICAgICAgICBSZW5kZXJPYmplY3QqIG9iaiA9IHNlbGVjdGVkT2JqZWN0SW5mby5rZXk7
Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZE9iamVj
dHMuZ2V0KG9iaik7Ci0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBzZWxl
Y3RlZE9iamVjdEluZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJ
bmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3
SW5mby0+c3RhdGUoKQotICAgICAgICAgICAgfHwgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25T
dGFydCgpID09IG9iaiAmJiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9zICE9IHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydFBvcygpKQotICAgICAgICAgICAgfHwgKHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSA9PSBvYmogJiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxl
Y3Rpb25FbmRQb3MgIT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKSkgewotICAg
ICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsK
LSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3
U2VsZWN0ZWRPYmplY3RzLnJlbW92ZShvYmopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQu
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZE9iamVjdEluZm8gOiBuZXdTZWxlY3RlZE9i
amVjdHMpCi0gICAgICAgIHNlbGVjdGVkT2JqZWN0SW5mby52YWx1ZS0+cmVwYWludCgpOwotCi0g
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nr
cykgewotICAgICAgICBjb25zdCBSZW5kZXJCbG9jayogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5m
by5rZXk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1Nl
bGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZElu
Zm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewotICAgICAgICAgICAgb2xkSW5mby0+
cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBu
ZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVt
b3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFu
eSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tz
IGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCi0gICAgICAgIHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6Z2V0
U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0Ci17Ci0gICAgc3RhcnRSZW5kZXJlciA9
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OwotICAgIHN0YXJ0T2Zmc2V0ID0gbV9zZWxlY3Rpb25V
bnNwbGl0U3RhcnRQb3M7Ci0gICAgZW5kUmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRFbmQ7
Ci0gICAgZW5kT2Zmc2V0ID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotfQotCi12b2lkIFJl
bmRlclZpZXc6OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAgICBsYXllcigpLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0U2VsZWN0aW9uKG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwg
bnVsbHB0ciwgc3RkOjpudWxsb3B0LCBSZXBhaW50TmV3TWludXNPbGQpOwotfQotCiBib29sIFJl
bmRlclZpZXc6OnByaW50aW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5wcmlu
dGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggNTgxODg4ZGU3
MzJhMGNlYTlmZmI3ZDU5N2U3N2QxOWI4YmJmNGRmNC4uYzM3ZWJiZmMyMjhmM2U2YTY2NjIzMmJj
OTZkYTkxMjc3N2Y1ZjQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBA
IC0yNiwyMiArMjYsMTggQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJC
bG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25TdWJ0cmVlUm9vdC5oIgorI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2luY2x1
ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0
SGFzaFNldC5oPgogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVkZSAiU2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBJbWFnZVF1YWxpdHlDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OwogY2xhc3MgUmVuZGVyUXVvdGU7CiAKLWNsYXNzIFJlbmRlclZpZXcgZmluYWwgOiBwdWJsaWMg
UmVuZGVyQmxvY2tGbG93LCBwdWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgeworY2xhc3MgUmVu
ZGVyVmlldyBmaW5hbCA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJl
bmRlclZpZXcoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJW
aWV3KCk7CkBAIC04NSwxNSArODEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSByZW5k
ZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFj
a2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkg
Y29uc3Q7CiAKLSAgICBlbnVtIFNlbGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5ld1hPUk9s
ZCwgUmVwYWludE5ld01pbnVzT2xkLCBSZXBhaW50Tm90aGluZyB9OwotICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0
UG9zLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5k
UG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQg
Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+JiBzdGFydE9mZnNldCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRPZmZzZXQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJTZWxl
Y3Rpb24oKTsKLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0OyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBz
ZWxlY3Rpb25VbnNwbGl0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5k
OyB9Ci0gICAgSW50UmVjdCBzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCA9IHRydWUpIGNvbnN0OwotICAgIHZvaWQgcmVwYWludFNlbGVjdGlvbigpIGNvbnN0OwotICAg
IHZvaWQgZ2V0U2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHN0YXJ0LCB1bnNpZ25lZCYgZW5k
KSBjb25zdCB7IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhzdGFy
dCwgZW5kKTsgfQorICAgIFNlbGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4g
bV9zZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAtMzEyLDIz
ICszMDAsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rp
b24oU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0
YSYpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFp
bnRNb2RlLCBjb25zdCBPbGRTZWxlY3Rpb25EYXRhJik7Ci0gICAgTGF5b3V0UmVjdCBzdWJ0cmVl
U2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsK
LSAgICB2b2lkIHJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAg
ICAgRnJhbWVWaWV3JiBtX2ZyYW1lVmlldzsKIAotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rp
b25VbnNwbGl0U3RhcnQgeyBudWxscHRyIH07Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlv
blVuc3BsaXRFbmQgeyBudWxscHRyIH07Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9z
ZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9z
ZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZpZXcu
CiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKKyAgICBTZWxl
Y3Rpb25SYW5nZURhdGEgbV9zZWxlY3Rpb247CiAKICAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5
IGVtYmVkZGVkIFdlYlZpZXdzIGluc2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8g
cmVtb3ZlLgogICAgIHN0cnVjdCBMZWdhY3lQcmludGluZyB7CkBAIC0zNjAsNyArMzM5LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3JlbmRlckNvdW50ZXJDb3VudCB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX3JlbmRlclRyZWVJbnRlcm5hbE11dGF0aW9uQ291bnRlciB7IDAgfTsKIAotICAg
IGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1NvZnR3
YXJlRmlsdGVycyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX3VzZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKQEAgLTM3
Miw5ICszNTAsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IG1fdmlz
aWJsZUluVmlld3BvcnRSZW5kZXJlcnM7CiAgICAgVmVjdG9yPFJlZlB0cjxSZW5kZXJXaWRnZXQ+
PiBtX3Byb3RlY3RlZFJlbmRlcldpZGdldHM7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKLSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7Ci0j
ZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIEhhc2hTZXQ8Y29uc3QgUmVu
ZGVyQm94Kj4gbV9ib3hlc1dpdGhTY3JvbGxTbmFwUG9zaXRpb25zOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBkZWM2ZGZh
OTJkZmZjZTg1NDdhOWM4ZGE1N2FlYTU0YWNkOTgyM2RmLi5lY2VjMDI3MTIzOTk0OTk2ZjBjMjgx
ZTlhYWZhNzg3MDRiZTQxMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyaW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJpbmdBbGxJbk9uZS5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldp
ZGdldC5jcHAiCiAjaW5jbHVkZSAiUm9vdElubGluZUJveC5jcHAiCiAjaW5jbHVkZSAiU2Nyb2xs
QWxpZ25tZW50LmNwcCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAiCisjaW5j
bHVkZSAiU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0
LmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwIgogI2luY2x1ZGUg
IlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGRjNzBjZDk5YTFh
Y2YxYjRjZjA1YTBiODM5ODYzM2UwMzc1ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKQEAgLTAsMCArMSwzNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNSwgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKKwor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNs
dWRlICJQb3NpdGlvbi5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgor
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0
cnVjdCBTZWxlY3Rpb25EYXRhIHsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PiBSZW5kZXJlck1hcDsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2tTZWxlY3Rpb25JbmZvPj4gUmVuZGVyQmxvY2tNYXA7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBzdGFydFBvc2l0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVu
ZFBvc2l0aW9uOworICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01h
cCBibG9ja3M7Cit9OworCitzdHJ1Y3QgU2VsZWN0aW9uSXRlcmF0b3IgeworICAgIFNlbGVjdGlv
bkl0ZXJhdG9yKFJlbmRlck9iamVjdCogc3RhcnQpCisgICAgICAgIDogbV9jdXJyZW50KHN0YXJ0
KQorICAgIHsKKyAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgfQorICAgIAorICAgIFJl
bmRlck9iamVjdCogY3VycmVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJy
ZW50OworICAgIH0KKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIG5leHQoKQorICAgIHsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/
IG51bGxwdHIgOiBtX3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICAgICAgbV9j
dXJyZW50ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7CisgICAgICAg
IGNoZWNrRm9yU3Bhbm5lcigpOworICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3Bh
bikgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0
YWNrLmxhc3QoKTsKKyAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOworICAg
ICAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
Y3VycmVudDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cj4obV9jdXJyZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGxhY2Vo
b2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1f
Y3VycmVudCk7CisgICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwor
ICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CisgICAgfQorCisgICAg
UmVuZGVyT2JqZWN0KiBtX2N1cnJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCitzdGF0
aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJlciwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVy
ZXIuY2hpbGRBdChvZmZzZXQpOworICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIu
bmV4dEluUHJlT3JkZXJBZnRlckNoaWxkcmVuKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRS
ZW5kZXJlckZvclNlbGVjdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBT
ZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQmIHNlbGVjdGlvbikKK3sKKyAgICByZXR1cm4gKHJl
bmRlcmVyLmNhbkJlU2VsZWN0aW9uTGVhZigpCisgICAgICAgIHx8ICZyZW5kZXJlciA9PSBzZWxl
Y3Rpb24uc3RhcnQKKyAgICAgICAgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5lbmQpCisgICAg
ICAgICYmIHJlbmRlcmVyLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Ob25lCisgICAgICAgICYmIHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOworfQorCitzdGF0
aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0KGNvbnN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4
dCYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAgIFNlbGVjdGlvbkRh
dGEgb2xkU2VsZWN0aW9uRGF0YTsKKyAgICAvLyBSZWNvcmQgdGhlIG9sZCBzZWxlY3RlZCBvYmpl
Y3RzLiBUaGVzZSB3aWxsIGJlIHVzZWQgbGF0ZXIKKyAgICAvLyB3aGVuIHdlIGNvbXBhcmUgYWdh
aW5zdCB0aGUgbmV3IHNlbGVjdGVkIG9iamVjdHMuCisgICAgb2xkU2VsZWN0aW9uRGF0YS5zdGFy
dFBvc2l0aW9uID0gc2VsZWN0aW9uLnN0YXJ0UG9zaXRpb247CisgICAgb2xkU2VsZWN0aW9uRGF0
YS5lbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5lbmRQb3NpdGlvbjsKKyAgICAKKyAgICAvLyBCbG9j
a3MgY29udGFpbiBzZWxlY3RlZCBvYmplY3RzIGFuZCBmaWxsIGdhcHMgYmV0d2VlbiB0aGVtLCBl
aXRoZXIgb24gdGhlIGxlZnQsIHJpZ2h0LCBvciBpbiBiZXR3ZWVuIGxpbmVzIGFuZCBibG9ja3Mu
CisgICAgLy8gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZXBhaW50IHJlY3QgcmlnaHQsIHdlIGhhdmUg
dG8gZXhhbWluZSBsZWZ0LCBtaWRkbGUsIGFuZCByaWdodCByZWN0cyBpbmRpdmlkdWFsbHksIHNp
bmNlIG90aGVyd2lzZQorICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1h
aW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KKyAgICBSZW5kZXJP
YmplY3QqIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0OworICAgIFJlbmRlck9iamVjdCogc3RvcCA9
IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbi5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJl
ckFmdGVyUG9zaXRpb24oKnNlbGVjdGlvbi5lbmQsIHNlbGVjdGlvbi5lbmRQb3NpdGlvbi52YWx1
ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7Cisg
ICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZW5kZXJlckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIC8v
IEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2lu
IGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgb2xkU2Vs
ZWN0aW9uRGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNl
bGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1ZSkpOworICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZm
ZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gc3RhcnQtPmNv
bnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVu
ZGVyVmlldz4oKmJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0aW9uRGF0YS5i
bG9ja3MuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9j
a1NlbGVjdGlvbkluZm8+KCpibG9jayk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gYmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIG9sZFNlbGVjdGlvbkRhdGE7Cit9CisKK1NlbGVjdGlvblJhbmdlRGF0
YTo6U2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZpZXcmIHZpZXcpCisgICAgOiBtX3JlbmRlclZp
ZXcodmlldykKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAsIG1fc2VsZWN0aW9u
UmVjdEdhdGhlcmVyKHZpZXcpCisjZW5kaWYKK3sKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURh
dGE6OnNldChjb25zdCBDb250ZXh0JiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWlu
dE1vZGUpCit7CisgICAgLy8gTWFrZSBzdXJlIGJvdGggb3VyIHN0YXJ0IGFuZCBlbmQgb2JqZWN0
cyBhcmUgZGVmaW5lZC4KKyAgICAvLyBDaGVjayB3d3cubXNuYmMuY29tIGFuZCB0cnkgY2xpY2tp
bmcgYXJvdW5kIHRvIGZpbmQgdGhlIGNhc2Ugd2hlcmUgdGhpcyBoYXBwZW5lZC4KKyAgICBpZiAo
KHNlbGVjdGlvbi5zdGFydCAmJiAhc2VsZWN0aW9uLmVuZCkgfHwgKHNlbGVjdGlvbi5lbmQgJiYg
IXNlbGVjdGlvbi5zdGFydCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBKdXN0IHJldHVybiBp
ZiB0aGUgc2VsZWN0aW9uIGhhc24ndCBjaGFuZ2VkLgorICAgIGF1dG8gaXNDYXJldCA9IG1fcmVu
ZGVyVmlldy5mcmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKKyAgICBpZiAoc2VsZWN0aW9u
ID09IG1fc2VsZWN0aW9uQ29udGV4dCAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQp
CisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBD
bGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcg
cmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRl
cyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4gcmVj
dE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmll
cigpOworI2VuZGlmIC8vIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIG1fc2VsZWN0aW9u
V2FzQ2FyZXQgPSBpc0NhcmV0OworICAgIGFwcGx5KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9k
ZSk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcigpCit7CisgICAgbV9yZW5k
ZXJWaWV3LmxheWVyKCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBzZXQoe251
bGxwdHIsIG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0fSwgU2VsZWN0aW9uUmFu
Z2VEYXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOworfQorCit2b2lkIFNlbGVjdGlvblJh
bmdlRGF0YTo6cmVwYWludCgpIGNvbnN0Cit7CisgICAgSGFzaFNldDxSZW5kZXJCbG9jayo+IHBy
b2Nlc3NlZEJsb2NrczsKKyAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7CisgICAgaWYg
KG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3Np
dGlvbigqbV9zZWxlY3Rpb25Db250ZXh0LmVuZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0
aW9uLnZhbHVlKCkpOworICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1f
c2VsZWN0aW9uQ29udGV4dC5zdGFydCk7CisgICAgZm9yIChhdXRvKiByZW5kZXJlciA9IHNlbGVj
dGlvbkl0ZXJhdG9yLmN1cnJlbnQoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gZW5kOyByZW5k
ZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBpZiAoIXJlbmRlcmVy
LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQgJiYgcmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAocmVuZGVyZXItPnNlbGVjdGlvblN0YXRlKCkgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IFJlbmRlclNlbGVjdGlvbkluZm8oKnJlbmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAg
IC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFy
Z2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICBmb3IgKFJl
bmRlckJsb2NrKiBibG9jayA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsgYmxvY2sgJiYg
IWlzPFJlbmRlclZpZXc+KCpibG9jayk7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygp
KSB7CisgICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50
cnkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25J
bmZvKCpibG9jaywgdHJ1ZSkucmVwYWludCgpOworICAgICAgICB9CisgICAgfQorfQorCitJbnRS
ZWN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQp
IGNvbnN0Cit7CisgICAgU2VsZWN0aW9uRGF0YTo6UmVuZGVyZXJNYXAgcmVuZGVyZXJzOworICAg
IFJlbmRlck9iamVjdCogc3RhcnQgPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQ7CisgICAgUmVu
ZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKKyAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LmVu
ZCkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbigqbV9zZWxlY3Rpb25Db250
ZXh0LmVuZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCkpOworICAgIFNl
bGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHN0YXJ0KTsKKyAgICB3aGlsZSAoc3Rh
cnQgJiYgc3RhcnQgIT0gc3RvcCkgeworICAgICAgICBpZiAoKHN0YXJ0LT5jYW5CZVNlbGVjdGlv
bkxlYWYoKSB8fCBzdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgfHwgc3RhcnQgPT0g
bV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgICAgICYmIHN0YXJ0LT5zZWxlY3Rpb25T
dGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgeworICAgICAgICAgICAgLy8g
QmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4g
Z2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgICAgICByZW5kZXJl
cnMuc2V0KHN0YXJ0LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFy
dCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3Rh
cnQtPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxS
ZW5kZXJWaWV3PigqYmxvY2spKSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVD
b250ZW50KTsKKyAgICAgICAgICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2so
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5k
aW5nIGJveCByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KKyAgICBMYXlv
dXRSZWN0IHNlbGVjdGlvblJlY3Q7CisgICAgYXV0byBlbmQgPSByZW5kZXJlcnMuZW5kKCk7Cisg
ICAgZm9yIChhdXRvIGkgPSByZW5kZXJlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgeworICAg
ICAgICBhdXRvKiBpbmZvID0gaS0+dmFsdWUuZ2V0KCk7CisgICAgICAgIC8vIFJlbmRlclNlbGVj
dGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250
YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgorICAgICAgICBMYXlvdXRSZWN0IGN1
cnJlbnRSZWN0ID0gaW5mby0+cmVjdCgpOworICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRh
aW5lciA9IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkgeworICAgICAgICAgICAgRmxvYXRRdWFk
IGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChjdXJyZW50UmVjdCkpOworICAgICAgICAgICAgY3VycmVudFJlY3QgPSBhYnNRdWFkLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIH0KKyAgICAgICAgc2VsZWN0aW9uUmVjdC51bml0
ZShjdXJyZW50UmVjdCk7CisgICAgfQorICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChzZWxlY3Rp
b25SZWN0KTsKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OmFwcGx5KGNvbnN0IENvbnRl
eHQmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBh
dXRvIG9sZFNlbGVjdGlvbkRhdGEgPSBjb2xsZWN0KG1fc2VsZWN0aW9uQ29udGV4dCwgYmxvY2tS
ZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKKyAgICAvLyBSZW1vdmUgY3Vy
cmVudCBzZWxlY3Rpb24uCisgICAgZm9yIChhdXRvKiByZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRh
dGEucmVuZGVyZXJzLmtleXMoKSkKKyAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRl
SWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKTsKKyAgICBtX3NlbGVjdGlvbkNv
bnRleHQgPSBuZXdTZWxlY3Rpb247CisgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVz
IG9mIGFsbCBvYmplY3RzIGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAor
ICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgJiYgbV9zZWxlY3Rpb25Db250ZXh0LnN0
YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4
dC5zdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bkJvdGgpOworICAgIGVsc2UgeworICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0
KQorICAgICAgICAgICAgbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0
ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpOworICAgICAgICBpZiAobV9z
ZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4dC5lbmQt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpOwor
ICAgIH0KKworICAgIGF1dG8qIHNlbGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0
YXJ0OworICAgIGF1dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5k
OworICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBpZiAoc2Vs
ZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0
aW9uKCpzZWxlY3Rpb25EYXRhRW5kLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24udmFs
dWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9u
U3RhcnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7
IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJy
ZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGN1
cnJlbnRSZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgfHwgY3VycmVudFJlbmRl
cmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3Rh
dGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSk7CisgICAgfQorCisgICAg
aWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCisgICAgICAgIG1f
cmVuZGVyVmlldy5sYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworCisg
ICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0
aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKKyAgICAvLyBwdXQgdGhlbSBpbiB0
aGUgbmV3IG9iamVjdHMgbGlzdC4KKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdT
ZWxlY3RlZFJlbmRlcmVyczsKKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdT
ZWxlY3RlZEJsb2NrczsKKyAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9y
KHNlbGVjdGlvblN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVj
dGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlv
bkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAg
ICAgIGlmIChpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9z
ZWxlY3Rpb25Db250ZXh0KSkgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNl
bGVjdGlvbkluZm8+IHNlbGVjdGlvbkluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVj
dGlvbkluZm8+KCpjdXJyZW50UmVuZGVyZXIsIHRydWUpOworI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29s
bGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RH
YXRoZXJlci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7
CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkK
KyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxz
ZSk7CisjZW5kaWYKKyAgICAgICAgICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50
UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOworICAgICAgICAgICAgYXV0byogY29u
dGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAg
ICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWlu
aW5nQmxvY2spKSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2Nr
U2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWlu
aW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
YmxvY2tJbmZvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBi
bG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNv
bnRhaW5pbmdCbG9jayk7CisgICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFp
bmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhi
bG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKKyNlbmRp
ZgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGJsb2NrUmVwYWlu
dE1vZGUgPT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRv
IHRoZSBuZXcgc2VsZWN0aW9uPworICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8g
OiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycykgeworICAgICAgICBhdXRvKiByZW5kZXJlciA9
IHNlbGVjdGVkUmVuZGVyZXJJbmZvLmtleTsKKyAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1Nl
bGVjdGVkUmVuZGVyZXJzLmdldChyZW5kZXJlcik7CisgICAgICAgIGF1dG8qIG9sZEluZm8gPSBz
ZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJbmZvIHx8
IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAh
PSBuZXdJbmZvLT5zdGF0ZSgpCisgICAgICAgICAgICB8fCAobV9zZWxlY3Rpb25Db250ZXh0LnN0
YXJ0ID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRQb3NpdGlvbiAhPSBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnRQb3NpdGlvbikKKyAgICAgICAgICAgIHx8IChtX3NlbGVjdGlv
bkNvbnRleHQuZW5kID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuZW5kUG9zaXRpb24g
IT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAgb2xkSW5m
by0+cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAg
ICBuZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJl
cnMucmVtb3ZlKHJlbmRlcmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUg
b2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZv
ciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKKyAg
ICAgICAgc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsKKworICAgIC8vIEhh
dmUgYW55IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/CisgICAgZm9yIChhdXRvJiBzZWxlY3Rl
ZEJsb2NrSW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzKSB7CisgICAgICAgIGF1dG8qIGJs
b2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3
U2VsZWN0ZWRCbG9ja3MuZ2V0KGJsb2NrKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVj
dGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5m
by0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3
SW5mby0+c3RhdGUoKSkgeworICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOworICAgICAg
ICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7
CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQg
cmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5
IG5lZWQgdG8gYmUgdXBkYXRlZC4KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDog
bmV3U2VsZWN0ZWRCbG9ja3MpCisgICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBh
aW50KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNGUxYTliY2NiNDkzYzY4
NTRlOGQ2MzA3YTQ4OTMxNWRkYTg1YzdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCkBAIC0wLDAgKzEsODMgQEAKKyAvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwor
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAq
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBPbGRTZWxlY3Rpb25EYXRhOwor
ICAgIAorY2xhc3MgU2VsZWN0aW9uUmFuZ2VEYXRhIHsKK3B1YmxpYzoKKyAgICBTZWxlY3Rpb25S
YW5nZURhdGEoUmVuZGVyVmlldyYpOworICAgIAorICAgIHN0cnVjdCBDb250ZXh0IHsKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbnRleHQmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gc3RhcnQgPT0gb3RoZXIuc3RhcnQgJiYgZW5kID09IG90aGVy
LmVuZCAmJiBzdGFydFBvc2l0aW9uID09IG90aGVyLnN0YXJ0UG9zaXRpb24gJiYgZW5kUG9zaXRp
b24gPT0gb3RoZXIuZW5kUG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHN0YXJ0IHsgbnVsbHB0ciB9OworICAgICAgICBSZW5kZXJPYmplY3QqIGVuZCB7IG51bGxw
dHIgfTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3NpdGlvbjsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zaXRpb247CisgICAgfTsKKworICAg
IGVudW0gY2xhc3MgUmVwYWludE1vZGUgeyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5n
IH07CisgICAgdm9pZCBzZXQoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1v
ZGU6Ok5ld1hPUk9sZCk7CisgICAgQ29udGV4dCBnZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbkNvbnRleHQ7IH0KKyAgICB2b2lkIGNsZWFyKCk7CisgICAgCisgICAgUmVuZGVyT2JqZWN0
KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsgfQorICAg
IFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LmVu
ZDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVChtX3NlbGVj
dGlvbkNvbnRleHQuc3RhcnRQb3NpdGlvbik7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3Rh
cnRQb3NpdGlvbi52YWx1ZSgpOyB9CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24oKSBjb25zdCB7
IEFTU0VSVChtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rp
b25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCk7IH0KKworICAgIEludFJlY3QgYm91bmRzKGJv
b2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKKyAgICB2b2lkIHJlcGFpbnQo
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFwcGx5KGNvbnN0IENvbnRleHQmLCBSZXBh
aW50TW9kZSk7CisKKyAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7CisjaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0
aW9uUmVjdEdhdGhlcmVyOworI2VuZGlmCisgICAgQ29udGV4dCBtX3NlbGVjdGlvbkNvbnRleHQ7
CisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxl
Y3Rpb25TdWJ0cmVlUm9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9u
U3VidHJlZVJvb3QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTg5NTY0NjJm
M2NjNTU0YzVkNWZkODYxOGEwNjBiNzg1OGIxNmM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25T
dWJ0cmVlUm9vdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3QuaCIKLQotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1
ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TZWxlY3Rp
b25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvb3QoKQotewotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uU3VidHJlZVJvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0
cmVlUm9vdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM2OGE3MDg3YTI5MTQ5
ZDJjMjE0ODc2Zjk0NTU2YzI0OTRmOWI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVl
Um9vdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJ
U+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
Ci0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERvY3VtZW50OwotCi1jbGFzcyBTZWxlY3Rp
b25TdWJ0cmVlUm9vdCB7Ci1wdWJsaWM6Ci0gICAgCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRl
ck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPj4gU2VsZWN0ZWRP
YmplY3RNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJsb2NrKiwgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+IFNlbGVjdGVkQmxvY2tNYXA7Ci0K
LSAgICBzdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YSB7Ci0gICAgICAgIE9sZFNlbGVjdGlvbkRhdGEo
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBzZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2Vs
ZWN0aW9uRW5kUG9zOwotICAgICAgICBTZWxlY3RlZE9iamVjdE1hcCBzZWxlY3RlZE9iamVjdHM7
Ci0gICAgICAgIFNlbGVjdGVkQmxvY2tNYXAgc2VsZWN0ZWRCbG9ja3M7Ci0gICAgfTsKLQotICAg
IGNsYXNzIFNlbGVjdGlvblN1YnRyZWVEYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNlbGVj
dGlvblN1YnRyZWVEYXRhKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIFNlbGVjdGlvblN1YnRyZWVE
YXRhKFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IHNlbGVjdGlvblN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCwgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKQotICAgICAgICAgICAgOiBtX3NlbGVjdGlv
blN0YXJ0KHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAgLCBtX3NlbGVjdGlvbkVuZChzZWxl
Y3Rpb25FbmQpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uU3RhcnRQb3Moc2VsZWN0aW9uU3Rh
cnRQb3MpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kUG9zKHNlbGVjdGlvbkVuZFBvcykK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25T
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnQ7IH0KLSAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvblN0YXJ0UG9zOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmQ7IH0KLSAgICAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gc2VsZWN0aW9uRW5kUG9zKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25FbmRQ
b3M7IH0KLSAgICAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyh1bnNpZ25lZCYg
c3RhcnRQb3MsIHVuc2lnbmVkJiBlbmRQb3MpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHN0YXJ0UG9zID0gbV9zZWxlY3Rpb25TdGFydFBvcy52YWx1ZSgpOwotICAgICAgICAgICAgZW5k
UG9zID0gbV9zZWxlY3Rpb25FbmRQb3MudmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICB2b2lk
IGNsZWFyU2VsZWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9zZWxlY3Rpb25TdGFy
dCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0UG9zID0gc3RkOjpudWxs
b3B0OwotICAgICAgICAgICAgbV9zZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAgICAgICAgICAg
bV9zZWxlY3Rpb25FbmRQb3MgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25TdGFydCB7IG51bGxwdHIgfTsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvbkVuZCB7IG51bGxwdHIgfTsKLSAgICAg
ICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25TdGFydFBvczsKLSAgICAgICAg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25FbmRQb3M7Ci0gICAgfTsKLQotICAg
IFNlbGVjdGlvblN1YnRyZWVSb290KCk7Ci0KLSAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2Vs
ZWN0aW9uRGF0YSgpIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KLSAgICBjb25z
dCBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0aW9uU3VidHJlZURhdGE7IH0KLQotICAgIHZvaWQgc2V0U2VsZWN0aW9uRGF0YShjb25z
dCBTZWxlY3Rpb25TdWJ0cmVlRGF0YSYgc2VsZWN0aW9uU3VidHJlZURhdGEpIHsgbV9zZWxlY3Rp
b25TdWJ0cmVlRGF0YSA9IHNlbGVjdGlvblN1YnRyZWVEYXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAg
U2VsZWN0aW9uU3VidHJlZURhdGEgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322327</attachid>
            <date>2017-10-01 12:44:54 -0700</date>
            <delta_ts>2017-10-01 19:17:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20171001124453.patch</filename>
            <type>text/plain</type>
            <size>72383</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uMmNmYTk5MDUyMjI1YzM3ODU4M2M1ZWU3YjZiNDVh
ODAzOTZlMjY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIFNlbGVjdGlvblN1YnRyZWVSb290IC0+IFNl
bGVjdGlvblJhbmdlRGF0YSAKKyAgICAgICAgMi4gTW92ZSBhbGwgc2VsZWN0aW9uIGxvZ2ljIGZy
b20gUmVuZGVyVmlldyB0byBTZWxlY3Rpb25SYW5nZURhdGEKKyAgICAgICAgMy4gY2xhc3MgUmVu
ZGVyVmlldyA6IHB1YmxpYyBTZWxlY3Rpb25TdWJ0cmVlUm9vdCAtPiBTZWxlY3Rpb25SYW5nZURh
dGEgbV9zZWxlY3Rpb247CisgICAgICAgIDQuIFJlbW92ZSByZWR1bmRhbnQgY29kZQorICAgICAg
ICA1LiBHZW5lcmFsIG1vZGVybml6YXRpb24KKyAKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0
aW9uYWxpdHkuCisKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZXROZWVkc1NlbGVjdGlvblVwZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3ZlZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3Ry
dWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpmb2N1c2VkT3JBY3Rp
dmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0
ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNlbGVjdGlv
bkJvdW5kcyBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNl
bGVjdGlvblN0YXRlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGU6On5TY29wZWRGcmFtZVNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25TdGFydEVuZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1NlbGVjdGlvblJvb3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlciBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3Rl
ZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6U2Vs
ZWN0aW9uSXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRl
cmF0b3I6OmN1cnJlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uSXRlcmF0b3I6Om5leHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9u
SXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpy
ZW5kZXJlckFmdGVyUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6c2VsZWN0aW9uQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbiBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJlZVNlbGVjdGlv
biBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRTZWxl
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZE9iamVjdEZvck5ld1Nl
bGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpjbGVhclN1
YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OmdldFNlbGVjdGlvbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJWaWV3OjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJl
ZVJvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpTZWxlY3Rpb25JdGVyYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6Y3VycmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25JdGVyYXRvcjo6Y2hlY2tGb3JTcGFubmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9uUmFuZ2VEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blJhbmdlRGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRh
OjpyZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6
Ym91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0YTo6Y29s
bGVjdEFuZENsZWFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJhbmdlRGF0
YTo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjppc1ZhbGlk
UmVuZGVyZXJGb3JOZXdTZWxlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVSb290KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmdldCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblJhbmdlRGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blJhbmdlRGF0YTo6c3RhcnRQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmVuZFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblN1YnRyZWVSb290OjpPbGRTZWxlY3Rpb25EYXRhOjpPbGRTZWxlY3Rpb25EYXRhKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rp
b25TdWJ0cmVlRGF0YTo6U2VsZWN0aW9uU3VidHJlZURhdGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxl
Y3Rpb25TdGFydCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvblN0YXJ0UG9zIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxl
Y3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uRW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2Vs
ZWN0aW9uRW5kUG9zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlv
blN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnRFbmRQb3Np
dGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpjbGVhclNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6c2VsZWN0aW9uRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6c2VsZWN0aW9u
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVl
Um9vdDo6c2V0U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisKIDIwMTctMDktMzAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbU2V0dGluZ3NdIFJlcGxhY2UgU2V0dGlu
Z3NNYWNyb3MuaCB3aXRoIGEgZ2VuZXJhdGVkIGJhc2UgY2xhc3MgZm9yIFNldHRpbmdzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IDdiNWYwN2NiZGYxOThlNzRkNjYwMzdkNTJkY2E4NDAzY2QwOGVm
MWIuLjMzYWY0YTA0OTMyYzM1MWY5MmY0NTNmNzc5ODM5YzEzNTMzYjc2NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0yNzQ1LDcgKzI3NDUsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAKICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmNwcAotICAgIHJlbmRlcmluZy9TZWxl
Y3Rpb25TdWJ0cmVlUm9vdC5jcHAKKyAgICByZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmNw
cAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogICAgIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMjU3MjM2ZjYzODZiMmIyNWUxN2I0ZGFlNjE2NTE4M2M5Zjgz
ZGRjMy4uNTFmYmZjNjhhNzRjMzA3NmJiOWE5ZmZjNDFhZWRhNjkyYzkxNWIyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQy
NCw4ICs2NDI0LDggQEAKIAkJQ0RDQTk4RUIxOEIyQzhFQjAwQzEyRkY5IC8qIExlZ2FjeUNETVBy
aXZhdGVNZWRpYVBsYXllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRENBOThFQTE4QjJDOEVCMDBDMTJGRjkgLyogTGVnYWN5Q0RNUHJpdmF0ZU1l
ZGlhUGxheWVyLmNwcCAqLzsgfTsKIAkJQ0RDRDQxRTcxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmNw
cCAqLzsgfTsKIAkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5n
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRDQx
RTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZBQkJEMThDMEFGNzgwMDZG
ODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIFNlbGVjdGlv
blN1YnRyZWVSb290LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQ0RDRkFCQkUxOEMwQUY4NDAwNkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZB
QkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgKi87IH07CisJ
CUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEw
MDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDRENGQUJCRTE4QzBBRjg0MDA2Rjg0NTAgLyogU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEu
Y3BwICovOyB9OwogCQlDREQ3MDg5NjE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENERDcwODk0MTgz
NTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovOyB9OwogCQlDREQ3MDg5NzE4MzU5RjZG
MDAyQjNEQzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0REQzFFN0Ex
OEE5NTJGMzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0REQzFFNzkxOEE5NTJGMzAwMjdB
OUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oICovOyB9OwpAQCAtMTUxOTYsOCArMTUx
OTYsOCBAQAogCQlDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZENvbnRlbnRS
YW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0Q0MUU2MUMzRERCMDkw
MDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uU3Vi
dHJlZVJvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uU3Vi
dHJlZVJvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RDRkFCQkMxOEMwQUYx
OTAwNkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblN1YnRyZWVSb290LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIFNlbGVjdGlvblJh
bmdlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWxlY3Rpb25SYW5n
ZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkMxOEMwQUYxOTAw
NkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTZWxlY3Rpb25SYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDREQxRTUyNTE2N0JBNTY0MDBDRTgyMEIgLyogVGV4dFRyYWNrUmVwcmVzZW50
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RENzA4OTQxODM1OUY2
RTAwMkIzREM2IC8qIFNhbXBsZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTYW1wbGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQ3
MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjYxMDYsOCArMjYxMDYsOCBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBBNDIzNCAvKiBSb290
SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFs
aWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFs
aWdubWVudC5oICovLAotCQkJCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25T
dWJ0cmVlUm9vdC5jcHAgKi8sCi0JCQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIFNlbGVj
dGlvblN1YnRyZWVSb290LmggKi8sCisJCQkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNl
bGVjdGlvblJhbmdlRGF0YS5jcHAgKi8sCisJCQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8q
IFNlbGVjdGlvblJhbmdlRGF0YS5oICovLAogCQkJCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAv
KiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDgg
LyogU2ltcGxlTGluZUxheW91dC5oICovLAogCQkJCTExRTA2N0VCMUU2MjQ2MTMwMDE2MkQxNiAv
KiBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwICovLApAQCAtMzAwMTEsOSArMzAwMTEsOSBA
QAogCQkJCTk3NEQyREE1MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkQ1QkM0MjcxNkY4ODJFRTAwNzA0OEQwIC8qIFNlY3VyaXR5UG9saWN5
VmlvbGF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJGMEQwMDZDMUQwMEVG
NkYyNiAvKiBTZWdtZW50ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUNEQ0ZBQkJEMThD
MEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJFQTgwN0M5MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTQwNUM4OTE5MEIwMTQ0MDA3NTRGOTQgLyogU2VsZWN0aW9uUmVjdEdhdGhlcmVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0
aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJC
MUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMkQzRkU4MThB
ODY1ODQwMEQ3REMwMyAvKiBTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNkI5OTk5NzE4MDRENTQyMDBEMDExMjEgLyogU2VsZWN0b3JDb21waWxlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMzkyOSw5ICszMzkyOSw5IEBACiAJCQkJMUFGN0FGQzcxQTQ4
QThCQzAwQzhFNEU3IC8qIFNlY3VyaXR5T3JpZ2luUG9saWN5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTk3NEQyREE0MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkMzREEyRTBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5n
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNEQ0ZBQkJFMThDMEFGODQwMDZGODQ1MCAvKiBTZWxl
Y3Rpb25SYW5nZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkVBODA3QzgwRjcxNEEwMzAw
NTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0MDVDODgx
OTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlDRENGQUJCRTE4QzBBRjg0MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0QjRCQjMxNDE2NTBENzAwMkIxRDhCIC8qIFNlbGVj
dG9yQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyNkI5OTk5NjE4MDRENTQyMDBEMDEx
MjEgLyogU2VsZWN0b3JDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTUwNzE1NzE2
ODUwNjczMDBDM0M3QjMgLyogU2VsZWN0b3JGaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGE4NTdlZGVkZTZiMjM3
NzdjNmU4NGNjZmJkMzE0NDExNzE4MWI3NzguLjg4N2ViYjFlZWIyZTg5YzM2MGU5MjQzY2ZmMGVk
OTc0MDZjYTdmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC0zODcsNyArMzg3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxlY3Rp
b25VcGRhdGUoKQogewogICAgIG1fcGVuZGluZ1NlbGVjdGlvblVwZGF0ZSA9IHRydWU7CiAgICAg
aWYgKFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAg
ICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xl
YXIoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQW5kUmV2ZWFsU2VsZWN0aW9u
KGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50JiBpbnRlbnQpCkBAIC00NDMsNyArNDQzLDcg
QEAgdm9pZCBEcmFnQ2FyZXRDb250cm9sbGVyOjpub2RlV2lsbEJlUmVtb3ZlZChOb2RlJiBub2Rl
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG5vZGUuZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7Cisg
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAKICAgICBjbGVhcigpOwogfQpAQCAt
NTA2LDcgKzUwNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmlj
YXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAKICAgICBpZiAoY2xlYXJS
ZW5kZXJUcmVlU2VsZWN0aW9uKSB7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gbm9k
ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSkgewotICAgICAgICAgICAgcmVuZGVyVmlldy0+Y2xl
YXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFy
KCk7CiAKICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSBzZWxlY3Rpb24gdXBkYXRlIHNvIHRoZSBz
ZWxlY3Rpb24gd2lsbCBiZSBzZXQgYWdhaW4uCiAgICAgICAgICAgICBtX3BlbmRpbmdTZWxlY3Rp
b25VcGRhdGUgPSB0cnVlOwpAQCAtMTUxNyw5ICsxNTE3LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICAgICBtX2NhcmV0QmxpbmtUaW1lci5zdG9wKCk7
CiAjZW5kaWYKIAotICAgIFJlbmRlclZpZXcqIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKTsKLSAgICBpZiAodmlldykKLSAgICAgICAgdmlldy0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAg
ICBpZiAoYXV0byogdmlldyA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICB2
aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgc2V0U2VsZWN0aW9uV2l0aG91dFVwZGF0
aW5nQXBwZWFyYW5jZShWaXNpYmxlU2VsZWN0aW9uKCksIGRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKCksIEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRlZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkp
OwogICAgIG1fcHJldmlvdXNDYXJldE5vZGUgPSBudWxscHRyOwpAQCAtMTk5NSw3ICsxOTk0LDcg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKICAg
ICAvLyBSZW5kZXJPYmplY3Q6OnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNoZWNrIGlmIHRo
ZSBmcmFtZSBpcyBhY3RpdmUsCiAgICAgLy8gd2UgaGF2ZSB0byB1cGRhdGUgcGxhY2VzIHRob3Nl
IGNvbG9ycyB3ZXJlIHBhaW50ZWQuCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBkb2N1bWVu
dC0+cmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5yZXBhaW50U2VsZWN0aW9uKCk7CisgICAg
ICAgIHZpZXctPnNlbGVjdGlvbigpLnJlcGFpbnQoKTsKIAogICAgIC8vIENhcmV0IGFwcGVhcnMg
aW4gdGhlIGFjdGl2ZSBmcmFtZS4KICAgICBpZiAoYWN0aXZlQW5kRm9jdXNlZCkKQEAgLTIwOTAs
NyArMjA4OSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogI2Vu
ZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgdmlldy0+Y2xl
YXJTZWxlY3Rpb24oKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjExNSw3ICsyMTE0LDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVy
ZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgaW50IGVu
ZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBBU1NF
UlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAgICAgIHZpZXctPnNl
dFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9m
ZnNldCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRSZW5kZXJlciwgZW5k
UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9KTsKICAgICB9CiB9CiAKQEAgLTIyMzIs
MTIgKzIyMzEsMTIgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMo
Ym9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdMYXlvdXRPclN0eWxlKCptX2Zy
YW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7
Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpOwotICAgIGlmICghcm9vdCB8
fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CisgICAgYXV0byogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZp
ZXcgfHwgIXZpZXcpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBMYXlvdXRS
ZWN0IHNlbGVjdGlvblJlY3QgPSByb290LT5zZWxlY3Rpb25Cb3VuZHMoY2xpcFRvVmlzaWJsZUNv
bnRlbnQpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IHJlbmRlclZpZXctPnNlbGVjdGlvbigp
LmJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7CiAgICAgcmV0dXJuIGNsaXBUb1Zpc2libGVD
b250ZW50ID8gaW50ZXJzZWN0aW9uKHNlbGVjdGlvblJlY3QsIHZpZXctPnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpIDogc2Vs
ZWN0aW9uUmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGNjZWY0YjI3
MTFlYWIxNGM4YWIzZDIwZGJlYmI4MmUyMWRmY2QwYTAuLjI3OWQyZWU2ODE3MWU4OTQ1MmY0ZmNj
NGNkMmRjMTI5MzY1ZTEzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQ1MjIs
OCArNDUyMiw4IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgLy8gYWZ0ZXIgd2UgcGFp
bnQgdGhlIHNuYXBzaG90LgogICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlvbiA9PSBFeGNsdWRl
U2VsZWN0aW9uKSB7CiAgICAgICAgIGZvciAoYXV0byogZnJhbWUgPSBtX2ZyYW1lLnB0cigpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1lLnB0cigpKSkg
ewotICAgICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpCi0gICAgICAgICAgICAgICAgcm9vdC0+Y2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAg
ICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CiAgICAgICAgIH0K
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IGNkMmJkNDM3
NTE3YjYzMjBmNmM5NTM0MDgyMjliOTFiNWQ3MDFhYjcuLmY4YTQ1ZDY5NDFmM2Y3N2U4NDZmOTg1
YTE0ZmFlNzYyYTQyNWQ1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApA
QCAtMTM1LDIxICsxMzUsMTggQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUgewog
ICAgIFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoRnJhbWUmIGZyYW1lKQogICAgICAgICA6IGZy
YW1lKGZyYW1lKQogICAgIHsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS5j
b250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJvb3QtPmdldFNlbGVjdGlvbihzdGFydFJl
bmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCk7CisgICAgICAgIGlm
IChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCisgICAgICAgICAg
ICBzZWxlY3Rpb24gPSByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5nZXQoKTsKICAgICB9CiAKICAg
ICB+U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSgpCiAgICAgewotICAgICAgICBpZiAoUmVuZGVy
Vmlldyogcm9vdCA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAgcm9vdC0+
c2V0U2VsZWN0aW9uKHN0YXJ0UmVuZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRSZW5kZXJlciwgZW5k
T2Zmc2V0LCBSZW5kZXJWaWV3OjpSZXBhaW50Tm90aGluZyk7CisgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJW
aWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFp
bnRNb2RlOjpOb3RoaW5nKTsKICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYgZnJhbWU7Ci0gICAg
UmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVy
ZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7Ci0gICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIFNlbGVjdGlvblJhbmdlRGF0YTo6Q29u
dGV4dCBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPUykKQEAgLTE4NiwxMCArMTgz
LDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUs
IFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3Rh
cnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRl
cHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYg
ZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBz
dGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5v
dGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7c3RhcnRSZW5kZXJlciwgZW5kUmVu
ZGVyZXIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9LCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFp
bnRNb2RlOjpOb3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNuYXBzaG90RnJhbWVS
ZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcKICAgICAvLyBGcmFt
ZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0aW9uIGZyb20gdGhl
IEZyYW1lIGl0c2VsZi4KLSAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90KHNu
YXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb25Cb3VuZHMoKSwgb3B0aW9ucyks
IG51bGxwdHIpOworICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNo
b3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kcygpLCBvcHRpb25zKSwg
bnVsbHB0cik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCmluZGV4IGI2NGZjZWIzYTlmMzk4Y2MwMTY4M2U0ZmNkMmU0ZWVmNjE1M2M4YmIu
LmU2YTlkYTkyYjUwMjM4OThkNWZjYTQ3OWM3MjY2NjgzMGY4ODFjMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE0NCw4ICsxNDQsOCBAQCBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkK
IHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5z
ZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
blN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICB1bnNpZ25lZCBzdGFydFBv
cywgZW5kUG9zOwotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5nZXRTZWxlY3Rpb25TdGFydEVu
ZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgYXV0byBzdGFydFBvcyA9IHJlbmRlcmVyKCku
dmlldygpLnNlbGVjdGlvbigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgYXV0byBlbmRQb3Mg
PSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlvbigpOwogICAgICAgICAv
LyBUaGUgcG9zaXRpb24gYWZ0ZXIgYSBoYXJkIGxpbmUgYnJlYWsgaXMgY29uc2lkZXJlZCB0byBi
ZSBwYXN0IGl0cyBlbmQuCiAgICAgICAgIEFTU0VSVChzdGFydCgpICsgbGVuKCkgPj0gKGlzTGlu
ZUJyZWFrKCkgPyAxIDogMCkpOwogICAgICAgICB1bnNpZ25lZCBsYXN0U2VsZWN0YWJsZSA9IHN0
YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8gMSA6IDApOwpAQCAtNjM5LDkgKzYzOSw4
IEBAIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRCb3g6OnNlbGVjdGlv
blN0YXJ0RW5kKCkgY29uc3QKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25JbnNpZGUpCiAgICAgICAgIHJldHVybiB7IDAsIG1fbGVuIH07CiAgICAgCi0g
ICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIHJlbmRlcmVyKCkudmll
dygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOworICAgIGF1dG8gc3RhcnQgPSBy
ZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7CisgICAgYXV0byBl
bmQgPSByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRQb3NpdGlvbigpOwogICAgIGlm
IChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAg
ICBlbmQgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAgICBlbHNlIGlmIChzZWxlY3Rpb25T
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDVhYjEzMzI0MmM1NmM5Y2IwMWZkOWM0Njg5ZGQxNGU5
NGRmZGQ2YTkuLmJhYzU1Njk4MzRlOTI5YjIzYzdkYzg5ZGU5YjNjZTJjYmMwMDVhZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtMTg2NSw4ICsxODY1LDgg
QEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxlY3Rpb25Sb290KCkgY29uc3QKICAgICAgICAgfHwg
aXNSZW5kZXJGcmFnbWVudGVkRmxvdygpIHx8IHN0eWxlKCkuY29sdW1uU3BhbigpID09IENvbHVt
blNwYW5BbGwpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIGlmICh2aWV3KCkuc2Vs
ZWN0aW9uVW5zcGxpdFN0YXJ0KCkpIHsKLSAgICAgICAgTm9kZSogc3RhcnRFbGVtZW50ID0gdmll
dygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpLT5ub2RlKCk7CisgICAgaWYgKHZpZXcoKS5zZWxl
Y3Rpb24oKS5zdGFydCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVudCA9IHZpZXcoKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLT5ub2RlKCk7CiAgICAgICAgIGlmIChzdGFydEVsZW1lbnQgJiYg
c3RhcnRFbGVtZW50LT5yb290RWRpdGFibGVFbGVtZW50KCkgPT0gZWxlbWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAppbmRleCA4YmJjMjg5NTRmODBiZDdiNzAyZTUxMGZhZjAwM2NmODc1MGVmODZk
Li5kNTYxMjlmN2QzZjNkMDZhNzE2MDA5NTg0Njg2NDliNGQ2NWVmNjZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTQxNyw4ICsxNDE3LDggQEAgYm9v
bCBSZW5kZXJPYmplY3Q6OmlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3QKICAgICByZXR1cm4gc3Qg
PT0gU2VsZWN0aW9uU3RhcnQKICAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9uRW5kCiAgICAgICAg
IHx8IHN0ID09IFNlbGVjdGlvbkJvdGgKLSAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvblVuc3Bs
aXRTdGFydCgpID09IHRoaXMKLSAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvblVuc3BsaXRFbmQo
KSA9PSB0aGlzOworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSA9PSB0aGlz
CisgICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmQoKSA9PSB0aGlzOwogfQogCiB2b2lk
IFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAppbmRleCBiYWExZjY1NGQ1MTkxZDI4NjdlZGVhYmZjOGJhZDIyZWVkZTVi
MWU0Li5iNDgxMGVjMzE2MWFhMGQ5NTQxNWJjMGI4MjExYzdmYTc3MTNkYTUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02Miw3ICs2Miw3IEBAIGNsYXNzIFJl
bmRlckxheWVyOwogY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsKIGNsYXNzIFJlbmRlckZy
YWdtZW50Q29udGFpbmVyOwogY2xhc3MgUmVuZGVyVGhlbWU7Ci1jbGFzcyBTZWxlY3Rpb25TdWJ0
cmVlUm9vdDsKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YTsKIGNsYXNzIFRyYW5zZm9ybVN0YXRl
OwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAppbmRleCA2NDBhN2JhZWQ4ZWIzYTdhODRkYmFiNThjOTZhNDM5YWMz
ZDY2OTI2Li4yODE4YzY0ZWM0ZDdiYWU3MDQ2ODNmOTIzNWRkYjJjYWNiMTU4YjA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTY0NCwyMyArNjQ0
LDIyIEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlIHN0YXRlKQogCiBib29sIFJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKCkgY29uc3QKIHsK
LSAgICBTZWxlY3Rpb25TdGF0ZSBzID0gc2VsZWN0aW9uU3RhdGUoKTsKLSAgICBpZiAocyA9PSBT
ZWxlY3Rpb25Ob25lKQorICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2VsZWN0aW9uU3RhdGUo
KTsKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmIChzID09IFNlbGVjdGlvbkluc2lkZSkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0
aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHVuc2lnbmVkIHNlbGVjdGlv
blN0YXJ0LCBzZWxlY3Rpb25FbmQ7Ci0gICAgdmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHNl
bGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwotICAgIGlmIChzID09IFNlbGVjdGlvblN0YXJ0
KQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMDsKLSAgICAgICAgCisgICAgYXV0
byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7Cisg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kUG9zaXRpb24oKTsK
KyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIHJldHVybiAhc2VsZWN0
aW9uU3RhcnQ7CisKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhhc0NoaWxkTm9kZXMo
KSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAgIGlmIChzID09IFNlbGVj
dGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kKQogICAgICAgICByZXR1cm4g
c2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25Cb3RoKQotICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uU3RhcnQgPT0gMCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwotICAg
ICAgICAKKyAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkKKyAgICAgICAgcmV0dXJuICFz
ZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAppbmRleCBkZjEzMzE5ODMzNzdlNWEzZDk2MzM1YWI5MmU1OTM3ZmNkNzRkM2Qw
Li4zZDlmZmNiMmU1MGI2OTQxYTA0MTEyMjg4YmZkMDg4YWI3MmM0YTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNDQxLDEzICsxNDQxLDE1IEBAIExheW91
dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPCiAKICAgICAvLyBOb3cgY2FsY3VsYXRlIHN0YXJ0UG9zIGFuZCBl
bmRQb3MgZm9yIHBhaW50aW5nIHNlbGVjdGlvbi4KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0
aW9uIHdoaWxlIGVuZFBvcyA+IDAKLSAgICB1bnNpZ25lZCBzdGFydFBvcywgZW5kUG9zOworICAg
IHVuc2lnbmVkIHN0YXJ0UG9zOworICAgIHVuc2lnbmVkIGVuZFBvczsKICAgICBpZiAoc2VsZWN0
aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKICAgICAgICAgLy8gV2UgYXJlIGZ1bGx5
IHNlbGVjdGVkLgogICAgICAgICBzdGFydFBvcyA9IDA7CiAgICAgICAgIGVuZFBvcyA9IHRleHRM
ZW5ndGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICB2aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRF
bmQoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgICAgIHN0YXJ0UG9zID0gdmlldygpLnNlbGVjdGlv
bigpLnN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgZW5kUG9zID0gdmlldygpLnNlbGVjdGlvbigp
LmVuZFBvc2l0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlv
blN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0gdGV4dExlbmd0aCgpOwogICAgICAgICBlbHNl
IGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCBjMjUwYTRkZmI3NTAy
MzU4NGNhZjIyZWI4ZTE1ZjdjNGRiMDUxZmFlLi43NWUyMWM1ZGYzOTQ4MDZiYTg0MzQyMmZmYTg1
OGM2MjY3YmU4OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRMaW5lQm94ZXMuY3BwCkBAIC00NDYsMTEgKzQ0NiwxMCBAQCB2b2lkIFJlbmRlclRleHRMaW5l
Qm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJPYmpl
Y3Q6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgc3RhcnQsIGVuZDsK
LSAgICByZW5kZXJlci52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3RhcnQsIGVuZCk7Cisg
ICAgYXV0byBzdGFydCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9u
KCk7CisgICAgYXV0byBlbmQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuZW5kUG9zaXRp
b24oKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkgewog
ICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0TGVuZ3RoKCk7Ci0KICAgICAgICAgLy8gdG8gaGFu
ZGxlIHNlbGVjdGlvbiBmcm9tIGVuZCBvZiB0ZXh0IHRvIGVuZCBvZiBsaW5lCiAgICAgICAgIGlm
IChzdGFydCAmJiBzdGFydCA9PSBlbmQpCiAgICAgICAgICAgICBzdGFydCA9IGVuZCAtIDE7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXggODhjZTgzNDliMTNlZjQx
MjEyYWE3ZjdiNDhjMDgwYTA2ZTQ5NGZkZC4uNmZjYjU5OTI1ZGQ5MzZiODVhYWMwYjQwNGI2OGEz
MTI4MGM3MDg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcApAQCAt
MjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZsb2F0aW5n
T2JqZWN0cy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24u
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKQEAgLTQ3LDcgKzQ2LDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUXVvdGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJTZWxlY3Rpb25JbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNzgsNTMgKzc2
LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Rpc2FsbG93TGF5b3V0IHsgZmFsc2UgfTsKIH07
CiAKLXN0cnVjdCBTZWxlY3Rpb25JdGVyYXRvciB7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3IoUmVu
ZGVyT2JqZWN0KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCi0gICAgewotICAg
ICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBj
dXJyZW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Ci0gICAgfQot
ICAgIAotICAgIFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1f
c3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAgICAgICBtX2N1cnJlbnQgPSBtX2N1
cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKLSAgICAgICAgY2hlY2tGb3JTcGFu
bmVyKCk7Ci0gICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOwot
ICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9j
dXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7Ci0gICAgICAgICAgICBjaGVj
a0ZvclNwYW5uZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCi0gICAgewotICAgICAg
ICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25j
YXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50KTsKLSAg
ICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7Ci0gICAgICAgIG1fY3Vy
cmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3Qq
IG1fY3VycmVudCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07Ci0KIFJlbmRlclZpZXc6OlJlbmRl
clZpZXcoRG9jdW1lbnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVu
ZGVyQmxvY2tGbG93KGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKICAgICAsIG1fZnJhbWVWaWV3
KCpkb2N1bWVudC52aWV3KCkpCisgICAgLCBtX3NlbGVjdGlvbigqdGhpcykKICAgICAsIG1fbGF6
eVJlcGFpbnRUaW1lcigqdGhpcywgJlJlbmRlclZpZXc6OmxhenlSZXBhaW50VGltZXJGaXJlZCkK
LSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhl
cmVyKCp0aGlzKQotI2VuZGlmCiB7CiAgICAgc2V0SXNSZW5kZXJWaWV3KCk7CiAKQEAgLTY5Nywy
OTAgKzY1Myw2IEBAIHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAogICAgIHF1YWRzLmFwcGVuZChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBsYXllcigpLT5zaXplKCkpKTsKIH0KIAotc3RhdGljIFJlbmRl
ck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCB1bnNp
Z25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Y2hpbGRBdChvZmZzZXQpOwot
ICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogb2JqZWN0LT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hp
bGRyZW4oKTsKLX0KLQotSW50UmVjdCBSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBj
bGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKLXsKLSAgICBMYXlvdXRSZWN0IHNlbFJlY3QgPSBz
dWJ0cmVlU2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVDb250ZW50KTsKLSAgICByZXR1cm4g
c25hcHBlZEludFJlY3Qoc2VsUmVjdCk7Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVyVmlldzo6c3Vi
dHJlZVNlbGVjdGlvbkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAotewot
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U2VsZWN0aW9uSW5mbz4+IFNlbGVjdGlvbk1hcDsKLSAgICBTZWxlY3Rpb25NYXAgc2VsZWN0ZWRP
YmplY3RzOwotCi0gICAgUmVuZGVyT2JqZWN0KiBvcyA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25TdGFydCgpOwotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxl
Y3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChz
ZWxlY3Rpb25FbmQpCi0gICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0
aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAg
U2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Iob3MpOwotICAgIHdoaWxlIChvcyAm
JiBvcyAhPSBzdG9wKSB7Ci0gICAgICAgIGlmICgob3MtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8
IG9zID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IG9zID09IHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkgJiYgb3MtPnNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0
aW9uTm9uZSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFp
bnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFz
IHdlbGwuCi0gICAgICAgICAgICBzZWxlY3RlZE9iamVjdHMuc2V0KG9zLCBzdGQ6Om1ha2VfdW5p
cXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpvcywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpKTsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IG9zLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAg
ICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4oKmNiKSkgewotICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gc2Vs
ZWN0ZWRPYmplY3RzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAg
ICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5m
bz4oKmNiLCBjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAgICAgICAgICAgICAgY2IgPSBjYi0+
Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBv
cyA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgY3JlYXRl
IGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNlbGVj
dGlvbi4KLSAgICBMYXlvdXRSZWN0IHNlbFJlY3Q7Ci0gICAgU2VsZWN0aW9uTWFwOjppdGVyYXRv
ciBlbmQgPSBzZWxlY3RlZE9iamVjdHMuZW5kKCk7Ci0gICAgZm9yIChTZWxlY3Rpb25NYXA6Oml0
ZXJhdG9yIGkgPSBzZWxlY3RlZE9iamVjdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewotICAg
ICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBpbmZvID0gaS0+dmFsdWUuZ2V0KCk7Ci0gICAgICAg
IC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2Yg
dGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVzLgotICAgICAg
ICBMYXlvdXRSZWN0IGN1cnJSZWN0ID0gaW5mby0+cmVjdCgpOwotICAgICAgICBpZiAoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250YWlu
ZXIoKSkgewotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJyUmVjdCkpOwotICAgICAgICAgICAg
Y3VyclJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7IAotICAgICAgICB9Ci0g
ICAgICAgIHNlbFJlY3QudW5pdGUoY3VyclJlY3QpOwotICAgIH0KLSAgICByZXR1cm4gc2VsUmVj
dDsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U2VsZWN0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigpOwotfQotCi12b2lkIFJlbmRlclZpZXc6OnJlcGFp
bnRTdWJ0cmVlU2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4g
cHJvY2Vzc2VkQmxvY2tzOwotCi0gICAgYXV0byogc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyUG9zaXRpb24o
c2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7
Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uRGF0YSgp
LnNlbGVjdGlvblN0YXJ0KCkpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBvID0gc2VsZWN0aW9u
SXRlcmF0b3IuY3VycmVudCgpOyBvICYmIG8gIT0gZW5kOyBvID0gc2VsZWN0aW9uSXRlcmF0b3Iu
bmV4dCgpKSB7Ci0gICAgICAgIGlmICghby0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgbyAhPSBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBvICE9IHNlbGVjdGlvbkRhdGEoKS5z
ZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoby0+c2Vs
ZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqbywgdHJ1ZSkucmVwYWludCgpOwotCi0gICAg
ICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQg
bWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICBmb3Ig
KFJlbmRlckJsb2NrKiBibG9jayA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOyBibG9jayAmJiAhaXM8
UmVuZGVyVmlldz4oKmJsb2NrKTsgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsK
LSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8o
KmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCogc3RhcnQsIHN0ZDo6b3B0aW9uYWw8
dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVuZCwgc3RkOjpvcHRpb25hbDx1bnNp
Z25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewot
ICAgIC8vIE1ha2Ugc3VyZSBib3RoIG91ciBzdGFydCBhbmQgZW5kIG9iamVjdHMgYXJlIGRlZmlu
ZWQuCi0gICAgLy8gQ2hlY2sgd3d3Lm1zbmJjLmNvbSBhbmQgdHJ5IGNsaWNraW5nIGFyb3VuZCB0
byBmaW5kIHRoZSBjYXNlIHdoZXJlIHRoaXMgaGFwcGVuZWQuCi0gICAgaWYgKChzdGFydCAmJiAh
ZW5kKSB8fCAoZW5kICYmICFzdGFydCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY2Fy
ZXRDaGFuZ2VkID0gbV9zZWxlY3Rpb25XYXNDYXJldCAhPSBmcmFtZSgpLnNlbGVjdGlvbigpLmlz
Q2FyZXQoKTsKLSAgICBtX3NlbGVjdGlvbldhc0NhcmV0ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5p
c0NhcmV0KCk7Ci0gICAgLy8gSnVzdCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hh
bmdlZC4KLSAgICBpZiAobV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgPT0gc3RhcnQgJiYgbV9zZWxl
Y3Rpb25VbnNwbGl0U3RhcnRQb3MgPT0gc3RhcnRQb3MKLSAgICAgICAgJiYgbV9zZWxlY3Rpb25V
bnNwbGl0RW5kID09IGVuZCAmJiBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPT0gZW5kUG9zICYm
ICFjYXJldENoYW5nZWQpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHJlY3RzIGFuZCBjcmVh
dGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBhcmUgYWJvdXQgdG8gZ2F0aGVyLgot
ICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0b3Igd2hlbiBpdCBnb2VzIG91dCBv
ZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxTZWxlY3Rpb25S
ZWN0R2F0aGVyZXI6Ok5vdGlmaWVyPiByZWN0Tm90aWZpZXIgPSBtX3NlbGVjdGlvblJlY3RHYXRo
ZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5kaWYgLy8gRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCi0gICAgLy8gU2V0IGdsb2JhbCBwb3NpdGlvbnMgZm9yIG5ldyBzZWxlY3Rpb24u
Ci0gICAgbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgPSBzdGFydDsKLSAgICBtX3NlbGVjdGlvblVu
c3BsaXRTdGFydFBvcyA9IHN0YXJ0UG9zOwotICAgIG1fc2VsZWN0aW9uVW5zcGxpdEVuZCA9IGVu
ZDsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPSBlbmRQb3M7Ci0gICAgYXV0byBvbGRT
ZWxlY3Rpb25EYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxPbGRTZWxlY3Rpb25EYXRhPigpOwotICAg
IGNsZWFyU3VidHJlZVNlbGVjdGlvbihibG9ja1JlcGFpbnRNb2RlLCAqb2xkU2VsZWN0aW9uRGF0
YSk7Ci0gICAgc2V0U2VsZWN0aW9uRGF0YShTZWxlY3Rpb25TdWJ0cmVlRGF0YShzdGFydCwgc3Rh
cnRQb3MsIGVuZCwgZW5kUG9zKSk7Ci0gICAgYXBwbHlTdWJ0cmVlU2VsZWN0aW9uKGJsb2NrUmVw
YWludE1vZGUsICpvbGRTZWxlY3Rpb25EYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oY29uc3QgUmVuZGVyVmlldyYgdmlldywgY29uc3Qg
UmVuZGVyT2JqZWN0JiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIChvYmplY3QuY2FuQmVTZWxlY3Rp
b25MZWFmKCkgfHwgJm9iamVjdCA9PSB2aWV3LnNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFy
dCgpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpICYm
IG9iamVjdC5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSAm
JiBvYmplY3QuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6Y2xlYXJT
dWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUsIE9s
ZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlvbkRhdGEpIGNvbnN0Ci17Ci0gICAgLy8gUmVjb3Jk
IHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cy4gIFRoZXNlIHdpbGwgYmUgdXNlZCBsYXRlcgotICAg
IC8vIHdoZW4gd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBuZXcgc2VsZWN0ZWQgb2JqZWN0cy4KLSAg
ICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9zID0gc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvblN0YXJ0UG9zKCk7Ci0gICAgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25FbmRQb3Mg
PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCk7Ci0gICAgCi0gICAgLy8gQmxvY2tz
IGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0
aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgot
ICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRv
IGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5j
ZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWlu
IHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCi0KLSAgICBSZW5kZXJP
YmplY3QqIG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgYXV0byog
c2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRl
ck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlvbkVuZCkKLSAgICAgICAg
c3RvcCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25FbmQsIHNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxl
Y3Rpb25JdGVyYXRvcihvcyk7Ci0gICAgd2hpbGUgKG9zICYmIG9zICE9IHN0b3ApIHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oKnRoaXMsICpvcykpIHsKLSAgICAg
ICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBh
bmQgbWFyZ2luIGdhcHMuICBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAg
ICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3RzLnNldChvcywgc3RkOjptYWtlX3Vu
aXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIHRydWUpKTsKLSAgICAgICAgICAgIGlmIChi
bG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnROZXdYT1JPbGQpIHsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKGNiICYmICFpczxSZW5kZXJWaWV3PigqY2IpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBv
bGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkQmxvY2tzLmFkZChjYiwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqY2IpOwotICAgICAgICAgICAg
ICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBvcyA9IHNlbGVjdGlvbkl0ZXJhdG9y
Lm5leHQoKTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8qIHNlbGVjdGVkT2JqZWN0IDogb2xkU2Vs
ZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMua2V5cygpKQotICAgICAgICBzZWxlY3RlZE9iamVj
dC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25Ob25lKTsKLX0KLQotdm9pZCBS
ZW5kZXJWaWV3OjphcHBseVN1YnRyZWVTZWxlY3Rpb24oU2VsZWN0aW9uUmVwYWludE1vZGUgYmxv
Y2tSZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0YSYgb2xkU2VsZWN0aW9uRGF0YSkK
LXsKLSAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0
d2VlbiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5kCi0gICAgaWYgKHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydCgpICYmIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgp
ID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgc2VsZWN0aW9uRGF0
YSgpLnNlbGVjdGlvblN0YXJ0KCktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9u
Qm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
U3RhcnQoKSkKLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpLT5z
ZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgaWYgKHNl
bGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEo
KS5zZWxlY3Rpb25FbmQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25FbmQp
OwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZCgpOwotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9u
RW5kID0gbnVsbHB0cjsKLSAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKLSAgICAgICAgc2VsZWN0
aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKHNlbGVjdGlvbkRhdGFFbmQsIHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKS52YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRv
ciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7Ci0gICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYg
Y3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0
aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgfHwgY3VycmVudFJlbmRlcmVyID09IHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlm
TmVlZGVkKFNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWludE1v
ZGUgIT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIGxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhh
cyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAot
ICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgotICAgIFNlbGVjdGVkT2Jq
ZWN0TWFwIG5ld1NlbGVjdGVkT2JqZWN0czsKLSAgICBTZWxlY3RlZEJsb2NrTWFwIG5ld1NlbGVj
dGVkQmxvY2tzOwotICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gU2VsZWN0aW9uSXRlcmF0b3Ioc2Vs
ZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBz
ZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxl
Y3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewot
ICAgICAgICBpZiAoaXNWYWxpZE9iamVjdEZvck5ld1NlbGVjdGlvbigqdGhpcywgKmN1cnJlbnRS
ZW5kZXJlcikpIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPiBzZWxlY3Rpb25JbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZv
PigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KQotICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVk
U2VsZWN0aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJl
ci5hZGRSZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7Ci0gICAg
ICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKLSAgICAg
ICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7Ci0j
ZW5kaWYKLQotICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnNldChjdXJyZW50UmVuZGVy
ZXIsIFdURk1vdmUoc2VsZWN0aW9uSW5mbykpOwotCi0gICAgICAgICAgICBSZW5kZXJCbG9jayog
Y29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAg
ICAgICAgICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250
YWluaW5nQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJs
b2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250
YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBp
ZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4o
KmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29u
dGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLQotI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZEdhcFJl
Y3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJlY3RzKCkpOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tS
ZXBhaW50TW9kZSA9PSBSZXBhaW50Tm90aGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQgdG8g
dGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZE9iamVjdElu
Zm8gOiBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0cykgewotICAgICAgICBSZW5kZXJP
YmplY3QqIG9iaiA9IHNlbGVjdGVkT2JqZWN0SW5mby5rZXk7Ci0gICAgICAgIFJlbmRlclNlbGVj
dGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZE9iamVjdHMuZ2V0KG9iaik7Ci0gICAgICAg
IFJlbmRlclNlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBzZWxlY3RlZE9iamVjdEluZm8udmFsdWUu
Z2V0KCk7Ci0gICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5m
by0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKQotICAgICAg
ICAgICAgfHwgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpID09IG9iaiAmJiBvbGRT
ZWxlY3Rpb25EYXRhLnNlbGVjdGlvblN0YXJ0UG9zICE9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rp
b25TdGFydFBvcygpKQotICAgICAgICAgICAgfHwgKHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25F
bmQoKSA9PSBvYmogJiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25FbmRQb3MgIT0gc2VsZWN0
aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVw
YWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJ
bmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRPYmplY3RzLnJlbW92
ZShvYmopOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55IG5l
dyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBk
aWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChjb25zdCBhdXRv
JiBzZWxlY3RlZE9iamVjdEluZm8gOiBuZXdTZWxlY3RlZE9iamVjdHMpCi0gICAgICAgIHNlbGVj
dGVkT2JqZWN0SW5mby52YWx1ZS0+cmVwYWludCgpOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhl
IG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlbGVjdGVkQmxvY2tJ
bmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2NrcykgewotICAgICAgICBjb25zdCBS
ZW5kZXJCbG9jayogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7Ci0gICAgICAgIFJlbmRl
ckJsb2NrU2VsZWN0aW9uSW5mbyogbmV3SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9j
ayk7Ci0gICAgICAgIFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbyogb2xkSW5mbyA9IHNlbGVjdGVk
QmxvY2tJbmZvLnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+
cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5m
by0+c3RhdGUoKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAg
ICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0g
ICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVt
YWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5l
ZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZv
IDogbmV3U2VsZWN0ZWRCbG9ja3MpCi0gICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5y
ZXBhaW50KCk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6Z2V0U2VsZWN0aW9uKFJlbmRlck9iamVj
dComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+JiBzdGFydE9mZnNldCwg
UmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+JiBlbmRP
ZmZzZXQpIGNvbnN0Ci17Ci0gICAgc3RhcnRSZW5kZXJlciA9IG1fc2VsZWN0aW9uVW5zcGxpdFN0
YXJ0OwotICAgIHN0YXJ0T2Zmc2V0ID0gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQb3M7Ci0gICAg
ZW5kUmVuZGVyZXIgPSBtX3NlbGVjdGlvblVuc3BsaXRFbmQ7Ci0gICAgZW5kT2Zmc2V0ID0gbV9z
ZWxlY3Rpb25VbnNwbGl0RW5kUG9zOwotfQotCi12b2lkIFJlbmRlclZpZXc6OmNsZWFyU2VsZWN0
aW9uKCkKLXsKLSAgICBsYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAg
c2V0U2VsZWN0aW9uKG51bGxwdHIsIHN0ZDo6bnVsbG9wdCwgbnVsbHB0ciwgc3RkOjpudWxsb3B0
LCBSZXBhaW50TmV3TWludXNPbGQpOwotfQotCiBib29sIFJlbmRlclZpZXc6OnByaW50aW5nKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS5wcmludGluZygpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggNTgxODg4ZGU3MzJhMGNlYTlmZmI3ZDU5N2U3N2Qx
OWI4YmJmNGRmNC4uYzM3ZWJiZmMyMjhmM2U2YTY2NjIzMmJjOTZkYTkxMjc3N2Y1ZjQzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yNiwyMiArMjYsMTggQEAKICNp
bmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJXaWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIgorI2lu
Y2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCi0jaWYgRU5B
QkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgi
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZVF1YWxpdHlDb250
cm9sbGVyOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwogY2xhc3MgUmVuZGVyUXVvdGU7
CiAKLWNsYXNzIFJlbmRlclZpZXcgZmluYWwgOiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93LCBwdWJs
aWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgeworY2xhc3MgUmVuZGVyVmlldyBmaW5hbCA6IHB1Ymxp
YyBSZW5kZXJCbG9ja0Zsb3cgewogcHVibGljOgogICAgIFJlbmRlclZpZXcoRG9jdW1lbnQmLCBS
ZW5kZXJTdHlsZSYmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJWaWV3KCk7CkBAIC04NSwxNSArODEs
NyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5k
IHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFja2dyb3VuZC4KICAgICBSZW5kZXJF
bGVtZW50KiByZW5kZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkgY29uc3Q7CiAKLSAgICBlbnVtIFNl
bGVjdGlvblJlcGFpbnRNb2RlIHsgUmVwYWludE5ld1hPUk9sZCwgUmVwYWludE5ld01pbnVzT2xk
LCBSZXBhaW50Tm90aGluZyB9OwotICAgIHZvaWQgc2V0U2VsZWN0aW9uKFJlbmRlck9iamVjdCog
c3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBSZW5kZXJPYmplY3QqIGVu
ZE9iamVjdCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50
TW9kZSA9IFJlcGFpbnROZXdYT1JPbGQpOwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uKFJlbmRlck9i
amVjdComIHN0YXJ0UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+JiBzdGFydE9mZnNl
dCwgUmVuZGVyT2JqZWN0KiYgZW5kUmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+JiBl
bmRPZmZzZXQpIGNvbnN0OwotICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKLSAgICBSZW5kZXJP
YmplY3QqIHNlbGVjdGlvblVuc3BsaXRTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
VW5zcGxpdFN0YXJ0OyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0RW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOyB9Ci0gICAgSW50UmVjdCBzZWxl
Y3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGNvbnN0OwotICAg
IHZvaWQgcmVwYWludFNlbGVjdGlvbigpIGNvbnN0OwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uU3Rh
cnRFbmQodW5zaWduZWQmIHN0YXJ0LCB1bnNpZ25lZCYgZW5kKSBjb25zdCB7IHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydEVuZFBvc2l0aW9ucyhzdGFydCwgZW5kKTsgfQorICAgIFNlbGVj
dGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KIAogICAg
IGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApAQCAtMzEyLDIzICszMDAsMTQgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24oU2VsZWN0aW9uUmVwYWludE1v
ZGUgYmxvY2tSZXBhaW50TW9kZSwgT2xkU2VsZWN0aW9uRGF0YSYpIGNvbnN0OwotICAgIHZvaWQg
YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRNb2RlLCBjb25zdCBPbGRTZWxl
Y3Rpb25EYXRhJik7Ci0gICAgTGF5b3V0UmVjdCBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKGJvb2wg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25zdDsKLSAgICB2b2lkIHJlcGFpbnRTdWJ0
cmVlU2VsZWN0aW9uKCkgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgRnJhbWVWaWV3JiBtX2ZyYW1l
VmlldzsKIAotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnQgeyBudWxs
cHRyIH07Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblVuc3BsaXRFbmQgeyBudWxscHRy
IH07Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNwbGl0U3RhcnRQ
b3M7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9z
OwotCiAgICAgLy8gSW5jbHVkZSB0aGlzIFJlbmRlclZpZXcuCiAgICAgdWludDY0X3QgbV9yZW5k
ZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVnaW9uPiBt
X2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKKyAgICBTZWxlY3Rpb25SYW5nZURhdGEgbV9zZWxl
Y3Rpb247CiAKICAgICAvLyBGSVhNRTogT25seSB1c2VkIGJ5IGVtYmVkZGVkIFdlYlZpZXdzIGlu
c2lkZSBBcHBLaXQgTlNWaWV3cy4gIEZpbmQgYSB3YXkgdG8gcmVtb3ZlLgogICAgIHN0cnVjdCBM
ZWdhY3lQcmludGluZyB7CkBAIC0zNjAsNyArMzM5LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25l
ZCBtX3JlbmRlckNvdW50ZXJDb3VudCB7IDAgfTsKICAgICB1bnNpZ25lZCBtX3JlbmRlclRyZWVJ
bnRlcm5hbE11dGF0aW9uQ291bnRlciB7IDAgfTsKIAotICAgIGJvb2wgbV9zZWxlY3Rpb25XYXND
YXJldCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc1NvZnR3YXJlRmlsdGVycyB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX3VzZXNGaXJzdExpbmVSdWxlcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3Vz
ZXNGaXJzdExldHRlclJ1bGVzIHsgZmFsc2UgfTsKQEAgLTM3Miw5ICszNTAsNiBAQCBwcml2YXRl
OgogICAgIEhhc2hTZXQ8UmVuZGVyRWxlbWVudCo+IG1fdmlzaWJsZUluVmlld3BvcnRSZW5kZXJl
cnM7CiAgICAgVmVjdG9yPFJlZlB0cjxSZW5kZXJXaWRnZXQ+PiBtX3Byb3RlY3RlZFJlbmRlcldp
ZGdldHM7CiAKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICBTZWxlY3Rpb25SZWN0
R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7Ci0jZW5kaWYKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQogICAgIEhhc2hTZXQ8Y29uc3QgUmVuZGVyQm94Kj4gbV9ib3hlc1dpdGhT
Y3JvbGxTbmFwUG9zaXRpb25zOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBkZWM2ZGZhOTJkZmZjZTg1NDdhOWM4ZGE1N2Fl
YTU0YWNkOTgyM2RmLi5lY2VjMDI3MTIzOTk0OTk2ZjBjMjgxZTlhYWZhNzg3MDRiZTQxMTYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKQEAg
LTEzMyw3ICsxMzMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5jcHAiCiAjaW5jbHVkZSAi
Um9vdElubGluZUJveC5jcHAiCiAjaW5jbHVkZSAiU2Nyb2xsQWxpZ25tZW50LmNwcCIKLSNpbmNs
dWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAiCisjaW5jbHVkZSAiU2VsZWN0aW9uUmFuZ2VE
YXRhLmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0LmNwcCIKICNpbmNsdWRlICJTaW1w
bGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFu
Z2VEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGRjNzBjZDk5YTFhY2YxYjRjZjA1YTBiODM5ODYzM2Uw
Mzc1ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAg
ICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJ
U+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
CisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbi5oIgorI2lu
Y2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9u
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0cnVjdCBTZWxlY3Rpb25EYXRhIHsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clNlbGVjdGlvbkluZm8+PiBSZW5kZXJlck1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj4g
UmVuZGVyQmxvY2tNYXA7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvc2l0
aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvc2l0aW9uOworICAgIFJlbmRl
cmVyTWFwIHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9OworCitzdHJ1
Y3QgU2VsZWN0aW9uSXRlcmF0b3IgeworICAgIFNlbGVjdGlvbkl0ZXJhdG9yKFJlbmRlck9iamVj
dCogc3RhcnQpCisgICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQorICAgIHsKKyAgICAgICAgY2hl
Y2tGb3JTcGFubmVyKCk7CisgICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCogY3VycmVudCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50OworICAgIH0KKyAgICAKKyAg
ICBSZW5kZXJPYmplY3QqIG5leHQoKQorICAgIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJy
ZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3NwYW5uZXJT
dGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50LT5u
ZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwor
ICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgeworICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsKKyAgICAgICAg
ICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1fY3VycmVudCA9
IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOworICAgICAgICAgICAgY2hlY2tGb3JTcGFu
bmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFp
czxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50KSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7CisgICAgICAgIG1f
c3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgICAgICBtX2N1cnJlbnQgPSBw
bGFjZWhvbGRlci5zcGFubmVyKCk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiBtX2N1cnJl
bnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlckFmdGVyUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQg
b2Zmc2V0KQoreworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQpOwor
ICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRlckNo
aWxkcmVuKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBTZWxlY3Rpb25SYW5nZURhdGE6OkNv
bnRleHQmIHNlbGVjdGlvbikKK3sKKyAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9u
TGVhZigpCisgICAgICAgIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQKKyAgICAgICAg
fHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5lbmQpCisgICAgICAgICYmIHJlbmRlcmVyLnNlbGVj
dGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lCisgICAgICAgICYmIHJl
bmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOworfQorCitzdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xs
ZWN0KGNvbnN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uLCBib29sIHJl
cGFpbnREaWZmZXJlbmNlKQoreworICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YTsK
KyAgICAvLyBSZWNvcmQgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzLiBUaGVzZSB3aWxsIGJlIHVz
ZWQgbGF0ZXIKKyAgICAvLyB3aGVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0aGUgbmV3IHNlbGVjdGVk
IG9iamVjdHMuCisgICAgb2xkU2VsZWN0aW9uRGF0YS5zdGFydFBvc2l0aW9uID0gc2VsZWN0aW9u
LnN0YXJ0UG9zaXRpb247CisgICAgb2xkU2VsZWN0aW9uRGF0YS5lbmRQb3NpdGlvbiA9IHNlbGVj
dGlvbi5lbmRQb3NpdGlvbjsKKyAgICAKKyAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxlY3RlZCBv
YmplY3RzIGFuZCBmaWxsIGdhcHMgYmV0d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxlZnQsIHJp
Z2h0LCBvciBpbiBiZXR3ZWVuIGxpbmVzIGFuZCBibG9ja3MuCisgICAgLy8gSW4gb3JkZXIgdG8g
Z2V0IHRoZSByZXBhaW50IHJlY3QgcmlnaHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0LCBtaWRk
bGUsIGFuZCByaWdodCByZWN0cyBpbmRpdmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQorICAgIC8v
IHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVu
IGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gc2VsZWN0
aW9uLnN0YXJ0OworICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNl
bGVjdGlvbi5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKnNlbGVj
dGlvbi5lbmQsIHNlbGVjdGlvbi5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25J
dGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmIHN0
YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigq
c3RhcnQsIHNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2li
bGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBl
eGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMu
c2V0KHN0YXJ0LCBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwg
dHJ1ZSkpOworICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5pbmdCbG9jaygpOworICAg
ICAgICAgICAgICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25J
bmZvPiYgYmxvY2tJbmZvID0gb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MuYWRkKGJsb2NrLCBudWxs
cHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8p
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpibG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBz
dGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKKyAgICB9CisgICAgcmV0dXJuIG9sZFNl
bGVjdGlvbkRhdGE7Cit9CisKK1NlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9uUmFuZ2VEYXRh
KFJlbmRlclZpZXcmIHZpZXcpCisgICAgOiBtX3JlbmRlclZpZXcodmlldykKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKKyAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCisj
ZW5kaWYKK3sKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OnNldChjb25zdCBDb250ZXh0
JiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit7CisgICAgLy8gTWFr
ZSBzdXJlIGJvdGggb3VyIHN0YXJ0IGFuZCBlbmQgb2JqZWN0cyBhcmUgZGVmaW5lZC4KKyAgICAv
LyBDaGVjayB3d3cubXNuYmMuY29tIGFuZCB0cnkgY2xpY2tpbmcgYXJvdW5kIHRvIGZpbmQgdGhl
IGNhc2Ugd2hlcmUgdGhpcyBoYXBwZW5lZC4KKyAgICBpZiAoKHNlbGVjdGlvbi5zdGFydCAmJiAh
c2VsZWN0aW9uLmVuZCkgfHwgKHNlbGVjdGlvbi5lbmQgJiYgIXNlbGVjdGlvbi5zdGFydCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAvLyBKdXN0IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGhhc24n
dCBjaGFuZ2VkLgorICAgIGF1dG8gaXNDYXJldCA9IG1fcmVuZGVyVmlldy5mcmFtZSgpLnNlbGVj
dGlvbigpLmlzQ2FyZXQoKTsKKyAgICBpZiAoc2VsZWN0aW9uID09IG1fc2VsZWN0aW9uQ29udGV4
dCAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCisgICAgICAgIHJldHVybjsKKyNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0
cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRv
IGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQg
Z29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
U2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOworI2VuZGlmIC8vIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0Owor
ICAgIGFwcGx5KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Cit9CisKK3ZvaWQgU2VsZWN0
aW9uUmFuZ2VEYXRhOjpjbGVhcigpCit7CisgICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPnJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBzZXQoe251bGxwdHIsIG51bGxwdHIsIHN0ZDo6
bnVsbG9wdCwgc3RkOjpudWxsb3B0fSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6
TmV3TWludXNPbGQpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6cmVwYWludCgpIGNv
bnN0Cit7CisgICAgSGFzaFNldDxSZW5kZXJCbG9jayo+IHByb2Nlc3NlZEJsb2NrczsKKyAgICBS
ZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5l
bmQpCisgICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbigqbV9zZWxlY3Rpb25Db250
ZXh0LmVuZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCkpOworICAgIFNl
bGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCk7CisgICAgZm9yIChhdXRvKiByZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLmN1cnJlbnQo
KTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gZW5kOyByZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJh
dG9yLm5leHQoKSkgeworICAgICAgICBpZiAoIXJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYo
KSAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgJiYgcmVuZGVyZXIgIT0g
bV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAocmVuZGVyZXItPnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25O
b25lKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8o
KnJlbmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9u
c2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBi
ZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBibG9jayA9IHJl
bmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsgYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9j
ayk7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgICAgICBpZiAo
IXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpibG9jaywgdHJ1ZSkucmVw
YWludCgpOworICAgICAgICB9CisgICAgfQorfQorCitJbnRSZWN0IFNlbGVjdGlvblJhbmdlRGF0
YTo6Ym91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgU2VsZWN0
aW9uRGF0YTo6UmVuZGVyZXJNYXAgcmVuZGVyZXJzOworICAgIFJlbmRlck9iamVjdCogc3RhcnQg
PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQ7CisgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVs
bHB0cjsKKyAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgc3RvcCA9IHJl
bmRlcmVyQWZ0ZXJQb3NpdGlvbigqbV9zZWxlY3Rpb25Db250ZXh0LmVuZCwgbV9zZWxlY3Rpb25D
b250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCkpOworICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVj
dGlvbkl0ZXJhdG9yKHN0YXJ0KTsKKyAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkg
eworICAgICAgICBpZiAoKHN0YXJ0LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9PSBt
X3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVu
ZCkKKyAgICAgICAgICAgICYmIHN0YXJ0LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uTm9uZSkgeworICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJs
ZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4
YW1pbmVkIGFzIHdlbGwuCisgICAgICAgICAgICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBzdGQ6Om1h
a2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpKTsKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5pbmdCbG9jaygp
OworICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3PigqYmxvY2spKSB7
CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBi
bG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJT
ZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50KTsKKyAgICAgICAgICAg
ICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKKyAgICB9
CisKKyAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KKyAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Q7
CisgICAgYXV0byBlbmQgPSByZW5kZXJlcnMuZW5kKCk7CisgICAgZm9yIChhdXRvIGkgPSByZW5k
ZXJlcnMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgeworICAgICAgICBhdXRvKiBpbmZvID0gaS0+
dmFsdWUuZ2V0KCk7CisgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBp
biB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdl
IGNvb3JkaW5hdGVzLgorICAgICAgICBMYXlvdXRSZWN0IGN1cnJlbnRSZWN0ID0gaW5mby0+cmVj
dCgpOworICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRD
b250YWluZXIoKSkgeworICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29u
dGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJyZW50UmVjdCkpOworICAg
ICAgICAgICAgY3VycmVudFJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShjdXJyZW50UmVjdCk7CisgICAg
fQorICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKK30KKwordm9pZCBT
ZWxlY3Rpb25SYW5nZURhdGE6OmFwcGx5KGNvbnN0IENvbnRleHQmIG5ld1NlbGVjdGlvbiwgUmVw
YWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBhdXRvIG9sZFNlbGVjdGlvbkRhdGEg
PSBjb2xsZWN0KG1fc2VsZWN0aW9uQ29udGV4dCwgYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50
TW9kZTo6TmV3WE9ST2xkKTsKKyAgICAvLyBSZW1vdmUgY3VycmVudCBzZWxlY3Rpb24uCisgICAg
Zm9yIChhdXRvKiByZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtleXMoKSkK
KyAgICAgICAgcmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lKTsKKyAgICBtX3NlbGVjdGlvbkNvbnRleHQgPSBuZXdTZWxlY3Rpb247
CisgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3RzIGJldHdl
ZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAorICAgIGlmIChtX3NlbGVjdGlvbkNv
bnRleHQuc3RhcnQgJiYgbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0ID09IG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQpCisgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydC0+c2V0U2VsZWN0aW9u
U3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KQorICAgICAgICAgICAgbV9zZWxl
Y3Rpb25Db250ZXh0LnN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhcnQpOworICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LmVuZCkK
KyAgICAgICAgICAgIG1fc2VsZWN0aW9uQ29udGV4dC5lbmQtPnNldFNlbGVjdGlvblN0YXRlSWZO
ZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpOworICAgIH0KKworICAgIGF1dG8qIHNl
bGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0OworICAgIGF1dG8qIHNlbGVj
dGlvbkRhdGFFbmQgPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kOworICAgIFJlbmRlck9iamVjdCog
c2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAg
ICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlclBvc2l0aW9uKCpzZWxlY3Rpb25EYXRhRW5k
LCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24udmFsdWUoKSk7CisgICAgU2VsZWN0aW9u
SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAoYXV0
byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBj
dXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rp
b25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQgfHwgY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFjdXJyZW50UmVu
ZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbkluc2lkZSk7CisgICAgfQorCisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUg
IT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCisgICAgICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5j
bGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworCisgICAgLy8gTm93IHRoYXQgdGhlIHNl
bGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsg
dGhlbSBhZ2FpbiBhbmQKKyAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4K
KyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRlcmVyczsKKyAg
ICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2NrczsKKyAgICBz
ZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKKyAg
ICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVu
ZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVy
ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVuZGVy
ZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9zZWxlY3Rpb25Db250ZXh0KSkgewor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNlbGVjdGlv
bkluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVu
ZGVyZXIsIHRydWUpOworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAg
Zm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMo
KSkKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVj
dGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7CisgICAgICAgICAgICBpZiAoIWN1
cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBtX3Nl
bGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2Vs
ZWN0aW9uSW5mbykpOworICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVu
dFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChjb250YWlu
aW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7CisgICAgICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2Nr
SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAg
ICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5n
QmxvY2soKTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAgICAgICAgICAgICBt
X3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250
YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6
Ok5vdGhpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQg
c2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwor
ICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnJl
bmRlcmVycykgeworICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJbmZv
LmtleTsKKyAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdldChy
ZW5kZXJlcik7CisgICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVySW5mby52
YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBu
ZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpCisg
ICAgICAgICAgICB8fCAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0ID09IHJlbmRlcmVyICYmIG9s
ZFNlbGVjdGlvbkRhdGEuc3RhcnRQb3NpdGlvbiAhPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQ
b3NpdGlvbikKKyAgICAgICAgICAgIHx8IChtX3NlbGVjdGlvbkNvbnRleHQuZW5kID09IHJlbmRl
cmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuZW5kUG9zaXRpb24gIT0gbV9zZWxlY3Rpb25Db250ZXh0
LmVuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOworICAgICAg
ICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7
CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFueSBuZXcgb2JqZWN0
cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5k
IHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5k
ZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKKyAgICAgICAgc2VsZWN0ZWRSZW5kZXJl
ckluZm8udmFsdWUtPnJlcGFpbnQoKTsKKworICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxv
Y2tzIGNoYW5nZWQ/CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9sZFNlbGVj
dGlvbkRhdGEuYmxvY2tzKSB7CisgICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0lu
Zm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJs
b2NrKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdl
dCgpOworICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZv
LT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgeworICAg
ICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsK
KyAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3
U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4K
KyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCisg
ICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxl
Y3Rpb25SYW5nZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5n
ZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNmY5YjFlZWI1ZDQwZmMwZThiN2ZiNzc3MDc1ZmI5MmE5Y2E0
NGZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlv
blJhbmdlRGF0YS5oCkBAIC0wLDAgKzEsODMgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAg
ICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlclNlbGVjdGlvbkluZm8uaCIKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNp
bmNsdWRlICJTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBPbGRTZWxlY3Rpb25EYXRhOworICAgIAorY2xhc3MgU2VsZWN0aW9u
UmFuZ2VEYXRhIHsKK3B1YmxpYzoKKyAgICBTZWxlY3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYp
OworICAgIAorICAgIHN0cnVjdCBDb250ZXh0IHsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbnRleHQmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
c3RhcnQgPT0gb3RoZXIuc3RhcnQgJiYgZW5kID09IG90aGVyLmVuZCAmJiBzdGFydFBvc2l0aW9u
ID09IG90aGVyLnN0YXJ0UG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPT0gb3RoZXIuZW5kUG9zaXRp
b247CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0IHsgbnVsbHB0ciB9
OworICAgICAgICBSZW5kZXJPYmplY3QqIGVuZCB7IG51bGxwdHIgfTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gZW5kUG9zaXRpb247CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgUmVwYWludE1v
ZGUgeyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07CisgICAgdm9pZCBzZXQoY29u
c3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7CisgICAg
Q29udGV4dCBnZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQ7IH0KKworICAg
IFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQ7IH0KKyAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uQ29udGV4dC5lbmQ7IH0KKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyBB
U1NFUlQobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0UG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rp
b25Db250ZXh0LnN0YXJ0UG9zaXRpb24udmFsdWUoKTsgfQorICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uKCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uKTsgcmV0
dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpOyB9CisKKyAgICB2b2lk
IGNsZWFyKCk7CisgICAgSW50UmVjdCBib3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9
IHRydWUpIGNvbnN0OworICAgIHZvaWQgcmVwYWludCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IHZvaWQgYXBwbHkoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlKTsKKworICAgIGNvbnN0IFJl
bmRlclZpZXcmIG1fcmVuZGVyVmlldzsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAg
ICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7CisjZW5kaWYK
KyAgICBDb250ZXh0IG1fc2VsZWN0aW9uQ29udGV4dDsKKyAgICBib29sIG1fc2VsZWN0aW9uV2Fz
Q2FyZXQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODk1NjQ2MmYzY2M1NTRjNWQ1ZmQ4NjE4YTA2MGI3ODU4
YjE2YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMu
TC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1l
ciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25T
dWJ0cmVlUm9vdC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQb3NpdGlv
bi5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGI5YzY4YTcwODdhMjkxNDlkMmMyMTQ4NzZmOTQ1NTZjMjQ5NGY5YjQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDMgKzAsMCBAQAotIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNp
bmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRG9jdW1lbnQ7Ci0KLWNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290IHsKLXB1YmxpYzoK
LSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxlY3RlZE9iamVjdE1hcDsKLSAgICB0eXBlZGVmIEhh
c2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxl
Y3Rpb25JbmZvPj4gU2VsZWN0ZWRCbG9ja01hcDsKLQotICAgIHN0cnVjdCBPbGRTZWxlY3Rpb25E
YXRhIHsKLSAgICAgICAgT2xkU2VsZWN0aW9uRGF0YSgpCi0gICAgICAgIHsKLSAgICAgICAgfQot
Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zOwotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7Ci0gICAgICAgIFNl
bGVjdGVkT2JqZWN0TWFwIHNlbGVjdGVkT2JqZWN0czsKLSAgICAgICAgU2VsZWN0ZWRCbG9ja01h
cCBzZWxlY3RlZEJsb2NrczsKLSAgICB9OwotCi0gICAgY2xhc3MgU2VsZWN0aW9uU3VidHJlZURh
dGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1
bHQ7Ci0KLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rp
b25TdGFydCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRl
ck9iamVjdCogc2VsZWN0aW9uRW5kLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25F
bmRQb3MpCi0gICAgICAgICAgICA6IG1fc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCi0g
ICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkKLSAgICAgICAgICAgICwg
bV9zZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykKLSAgICAgICAgICAgICwgbV9z
ZWxlY3Rpb25FbmRQb3Moc2VsZWN0aW9uRW5kUG9zKQotICAgICAgICB7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb25TdGFydDsgfQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rp
b25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0KLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bkVuZDsgfQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3Mo
KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQotICAgICAgICB2b2lkIHNlbGVj
dGlvblN0YXJ0RW5kUG9zaXRpb25zKHVuc2lnbmVkJiBzdGFydFBvcywgdW5zaWduZWQmIGVuZFBv
cykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlvblN0
YXJ0UG9zLnZhbHVlKCk7Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvcy52
YWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0ID0gbnVsbHB0cjsKLSAgICAgICAgICAg
IG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICBtX3NlbGVj
dGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IHN0ZDo6
bnVsbG9wdDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBtX3NlbGVjdGlvblN0YXJ0IHsgbnVsbHB0ciB9OwotICAgICAgICBSZW5kZXJPYmplY3QqIG1f
c2VsZWN0aW9uRW5kIHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBtX3NlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBt
X3NlbGVjdGlvbkVuZFBvczsKLSAgICB9OwotCi0gICAgU2VsZWN0aW9uU3VidHJlZVJvb3QoKTsK
LQotICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgeyByZXR1cm4gbV9z
ZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQotICAgIGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBz
ZWxlY3Rpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQot
Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBz
ZWxlY3Rpb25TdWJ0cmVlRGF0YSkgeyBtX3NlbGVjdGlvblN1YnRyZWVEYXRhID0gc2VsZWN0aW9u
U3VidHJlZURhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSBtX3Nl
bGVjdGlvblN1YnRyZWVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322343</attachid>
            <date>2017-10-01 19:17:44 -0700</date>
            <delta_ts>2017-10-01 20:35:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20171001191743.patch</filename>
            <type>text/plain</type>
            <size>72938</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uZDRkYjVhM2Y2MTYyMjQ5N2JjOTEyNzI5NDdhNDFh
NTFkOTQ0NzZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyIGFuZCBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICAxLiBTZWxlY3Rpb25T
dWJ0cmVlUm9vdCAtPiBTZWxlY3Rpb25SYW5nZURhdGEgCisgICAgICAgIDIuIE1vdmUgYWxsIHNl
bGVjdGlvbiBsb2dpYyBmcm9tIFJlbmRlclZpZXcgdG8gU2VsZWN0aW9uUmFuZ2VEYXRhCisgICAg
ICAgIDMuIGNsYXNzIFJlbmRlclZpZXcgOiBwdWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgLT4g
U2VsZWN0aW9uUmFuZ2VEYXRhIG1fc2VsZWN0aW9uOworICAgICAgICA0LiBSZW1vdmUgcmVkdW5k
YW50IGNvZGUKKyAgICAgICAgNS4gR2VuZXJhbCBtb2Rlcm5pemF0aW9uCisgCisgICAgICAgIE5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxl
Y3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9k
ZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNuYXBz
aG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZTo6U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
aXNTZWxlY3Rpb25Sb290IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTZWxlY3Rpb25Cb3JkZXIg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVw
bGFjZWQ6OmlzU2VsZWN0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c0ZvckxpbmVCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9u
U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uSXRlcmF0b3I6OlNlbGVjdGlvbkl0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpuZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRTZWxlY3Rp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWlu
dFN1YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFs
aWRPYmplY3RGb3JOZXdTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpnZXRTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2xlYXJTZWxlY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1NlbGVjdGlvblN1YnRyZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0
ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6U2VsZWN0
aW9uSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OlNlbGVjdGlvblJhbmdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblJhbmdlRGF0YTo6cmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25SYW5nZURhdGE6OmNvbGxlY3RBbmRDbGVhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25SYW5nZURhdGE6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJh
bmdlRGF0YTo6aXNWYWxpZFJlbmRlcmVyRm9yTmV3U2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQ6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpnZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpzdGFydCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0UG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjplbmRQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6T2xkU2VsZWN0aW9uRGF0YTo6T2xk
U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OlNlbGVjdGlvblN1YnRyZWVEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25T
dWJ0cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rp
b25TdGFydFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvbkVuZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvbkVuZFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVj
dGlvblN0YXJ0RW5kUG9zaXRpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6Y2xlYXJTZWxlY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNl
bGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OnNlbGVjdGlvbkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNldFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorCiAyMDE3
LTA5LTMwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1NldHRpbmdz
XSBSZXBsYWNlIFNldHRpbmdzTWFjcm9zLmggd2l0aCBhIGdlbmVyYXRlZCBiYXNlIGNsYXNzIGZv
ciBTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3YjVmMDdjYmRmMTk4ZTc0ZDY2MDM3
ZDUyZGNhODQwM2NkMDhlZjFiLi4zM2FmNGEwNDkzMmMzNTFmOTJmNDUzZjc3OTgzOWMxMzUzM2I3
NjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjc0NSw3ICsyNzQ1LDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiAgICAgcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKLSAg
ICByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCisgICAgcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKICAg
ICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcAogICAgIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzIzNmY2Mzg2YjJiMjVlMTdi
NGRhZTYxNjUxODNjOWY4M2RkYzMuLjUxZmJmYzY4YTc0YzMwNzZiYjlhOWZmYzQxYWVkYTY5MmM5
MTViMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTY0MjQsOCArNjQyNCw4IEBACiAJCUNEQ0E5OEVCMThCMkM4RUIwMEMxMkZG
OSAvKiBMZWdhY3lDRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTk4RUExOEIyQzhFQjAwQzEyRkY5IC8qIExl
Z2FjeUNETVByaXZhdGVNZWRpYVBsYXllci5jcHAgKi87IH07CiAJCUNEQ0Q0MUU3MUMzRERCMDkw
MDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRDQxRTUxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5jcHAgKi87IH07CiAJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQ
YXJzZWRDb250ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRENG
QUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZG
ODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZBQkJFMThDMEFGODQwMDZGODQ1MCAvKiBTZWxl
Y3Rpb25TdWJ0cmVlUm9vdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJv
b3QuY3BwICovOyB9OworCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFu
Z2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RDRkFCQkUxOEMwQUY4
NDAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmNwcCAqLzsgfTsKIAkJQ0RENzA4OTYxODM1OUY2RjAwMkIzREM2IC8q
IFNhbXBsZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREQ3MDg5NDE4MzU5RjZFMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCAqLzsgfTsKIAkJ
Q0RENzA4OTcxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8q
IFNhbXBsZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUNEREMxRTdBMThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREMx
RTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCAqLzsgfTsK
QEAgLTE1MTk2LDggKzE1MTk2LDggQEAKIAkJQ0RDRDQxRTUxQzNEREIwOTAwOTY1RDk5IC8qIFBh
cnNlZENvbnRlbnRSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJzZWRDb250ZW50UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RENENDFFNjFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlZENvbnRlbnRSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRENFNUNEMDE0NjMzQkM5MDBENDdDQ0EgLyogRXZlbnRUYXJn
ZXRGYWN0b3J5LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50VGFyZ2V0RmFjdG9yeS5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUw
IC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlbGVjdGlvblN1YnRyZWVSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
Q0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0REMUU1MjUxNjdCQTU2NDAwQ0U4MjBCIC8qIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI2MTA2LDggKzI2MTA2LDggQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1
MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQwMEI4
NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4
NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKLQkJCQlDRENGQUJCQzE4QzBBRjE5MDA2Rjg0
NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwICovLAotCQkJCUNEQ0ZBQkJCMThDMEFFMzEw
MDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oICovLAorCQkJCUNEQ0ZBQkJDMThDMEFG
MTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovLAorCQkJCUNEQ0ZBQkJCMThD
MEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLywKIAkJCQlFNDg5NDRBMDE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCiAJCQkJRTQ4OTQ0QTEx
ODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKIAkJCQkxMUUwNjdFQjFF
NjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLywKQEAgLTMw
MDExLDkgKzMwMDExLDkgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJp
dHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAv
KiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMz
REEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MDVDODkxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVj
dGlvblJlY3RHYXRoZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RDRkFCQkQxOEMwQUY3ODAw
NkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRC
NEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzJEM0ZFODE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5OTcxODA0RDU0MjAwRDAxMTIxIC8qIFNl
bGVjdG9yQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzM5MjksOSArMzM5MjksOSBAQAog
CQkJCTFBRjdBRkM3MUE0OEE4QkMwMEM4RTRFNyAvKiBTZWN1cml0eU9yaWdpblBvbGljeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NzREMkRBNDE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQ
b2xpY3kuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMkUwRDAwNkMxRDAwRUY2RjI2IC8q
IFNlZ21lbnRlZFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRENGQUJCRTE4QzBBRjg0
MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJF
QTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNDA1Qzg4MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RDRkFCQkUxOEMwQUY4NDAwNkY4NDUwIC8qIFNlbGVj
dGlvblN1YnRyZWVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NEI0QkIzMTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZCOTk5
OTYxODA0RDU0MjAwRDAxMTIxIC8qIFNlbGVjdG9yQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDE1MDcxNTcxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRl
eCBhODU3ZWRlZGU2YjIzNzc3YzZlODRjY2ZiZDMxNDQxMTcxODFiNzc4Li40YWRjMGE4YTVlZDEx
MGZiZDJkM2I3YzA3ZTE0Mzk3YzNhNTMwMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcApAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKCkKIHsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRh
dGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXct
PnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFu
ZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQpA
QCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJl
bW92ZWQoTm9kZSYgbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAg
Y2xlYXIoKTsKIH0KQEAgLTUwNiw3ICs1MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNw
b25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwog
CiAgICAgaWYgKGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoYXV0byog
cmVuZGVyVmlldyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAg
IHJlbmRlclZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5z
ZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgc2VsZWN0aW9u
IHVwZGF0ZSBzbyB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgc2V0IGFnYWluLgogICAgICAgICAgICAg
bV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKQEAgLTE1MTcsOSArMTUxNyw4IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgbV9jYXJldEJs
aW5rVGltZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHZpZXctPmNsZWFy
U2VsZWN0aW9uKCk7CisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIHNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKQEAg
LTE5OTUsNyArMTk5NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0
YXRlQ2hhbmdlZCgpCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBk
YXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgogICAgIGlmIChSZW5kZXJWaWV3
KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgdmlldy0+cmVwYWludFNl
bGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7CiAKICAgICAv
LyBDYXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCiAgICAgaWYgKGFjdGl2ZUFuZEZv
Y3VzZWQpCkBAIC0yMDkwLDcgKzIwODksNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVB
cHBlYXJhbmNlKCkKICNlbmRpZgogCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0g
ICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigp
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxMTUsNyArMjExNCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgICAgICBSZW5kZXJP
YmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7
CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwot
ICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVu
ZFJlbmRlcmVyLCBlbmRPZmZzZXQpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBz
dGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKICAg
ICB9CiB9CiAKQEAgLTIyMzIsMTMgKzIyMzEsMTMgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygp
OwotICAgIGlmICghcm9vdCB8fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gcm9vdC0+
c2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVDb250ZW50KTsKLSAgICByZXR1cm4gY2xpcFRv
VmlzaWJsZUNvbnRlbnQgPyBpbnRlcnNlY3Rpb24oc2VsZWN0aW9uUmVjdCwgdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KSkgOiBzZWxlY3Rpb25SZWN0OworICAgIGF1dG8mIHNlbGVjdGlvbiA9IHJlbmRlclZpZXctPnNl
bGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IGNsaXBUb1Zpc2libGVDb250ZW50
ID8gc2VsZWN0aW9uLmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgOiBzZWxlY3Rpb24u
Ym91bmRzKCk7CisgICAgcmV0dXJuIGNsaXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9u
KHNlbGVjdGlvblJlY3QsIHJlbmRlclZpZXctPmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVj
dChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpIDogc2VsZWN0
aW9uUmVjdDsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0
UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhl
aWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRl
eCBjY2VmNGIyNzExZWFiMTRjOGFiM2QyMGRiZWJiODJlMjFkZmNkMGEwLi4yNzlkMmVlNjgxNzFl
ODk0NTJmNGZjYzRjZDJkYzEyOTM2NWUxMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CkBAIC00NTIyLDggKzQ1MjIsOCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNu
YXBzaG90KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdAogICAgIC8vIGFm
dGVyIHdlIHBhaW50IHRoZSBzbmFwc2hvdC4KICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24g
PT0gRXhjbHVkZVNlbGVjdGlvbikgewogICAgICAgICBmb3IgKGF1dG8qIGZyYW1lID0gbV9mcmFt
ZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFt
ZS5wdHIoKSkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJvb3QtPmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRl
eCBjZDJiZDQzNzUxN2I2MzIwZjZjOTUzNDA4MjI5YjkxYjVkNzAxYWI3Li4yMTFjOTY1NTlmMTVh
OTE4OTliN2U0MTUxZjRlZjFhZjcyYzcxMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAKQEAgLTEzNSwyMSArMTM1LDIwIEBAIHN0cnVjdCBTY29wZWRGcmFtZVNlbGVjdGlv
blN0YXRlIHsKICAgICBTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKEZyYW1lJiBmcmFtZSkKICAg
ICAgICAgOiBmcmFtZShmcmFtZSkKICAgICB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290
ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByb290LT5nZXRTZWxlY3Rp
b24oc3RhcnRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVuZFJlbmRlcmVyLCBlbmRPZmZzZXQpOwor
ICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQor
ICAgICAgICAgICAgc2VsZWN0aW9uID0gcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuZ2V0KCk7CiAg
ICAgfQogCiAgICAgflNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoKQogICAgIHsKLSAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAg
ICAgIHJvb3QtPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVu
ZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhpbmcpOworICAgICAgICBp
ZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlv
bigpLnNldChzZWxlY3Rpb24udmFsdWUoKSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9k
ZTo6Tm90aGluZyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYgZnJhbWU7
Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7Ci0gICAg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIHN0ZDo6b3B0aW9uYWw8U2Vs
ZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0PiBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JN
KElPUykKQEAgLTE4NiwxMCArMTg1LDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBp
bnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJU
KHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwg
UmVuZGVyVmlldzo6UmVwYWludE5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7
IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0sIFNl
bGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgIC8vIFdlIGNhcHR1
cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNlbGVj
dGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxlY3Rpb24oKSB1c2Vz
IHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgotICAgIHJldHVybiBjcmVhdGVE
cmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVj
dGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGNyZWF0ZURyYWdJ
bWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9u
KCkuYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSwgb3B0aW9ucyksIG51bGxwdHIpOwog
fQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApp
bmRleCBiNjRmY2ViM2E5ZjM5OGNjMDE2ODNlNGZjZDJlNGVlZjYxNTNjOGJiLi45ZGRkMTg3ZGJm
N2IwNWJkZDgxYWM0Nzg0Zjk3OWJmMmYzNjBmMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xNDQsOCArMTQ0LDkgQEAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3Rh
dGUoKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbkJvdGgpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsK
LSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3Ms
IGVuZFBvcyk7CisgICAgICAgIGF1dG8mIHNlbGVjdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLnNl
bGVjdGlvbigpOworICAgICAgICBhdXRvIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0UG9zaXRp
b24oKTsKKyAgICAgICAgYXV0byBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kUG9zaXRpb24oKTsKICAg
ICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNvbnNpZGVy
ZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgogICAgICAgICBBU1NFUlQoc3RhcnQoKSArIGxlbigpID49
IChpc0xpbmVCcmVhaygpID8gMSA6IDApKTsKICAgICAgICAgdW5zaWduZWQgbGFzdFNlbGVjdGFi
bGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKQEAgLTYzOSw5
ICs2NDAsOCBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4geyAwLCBtX2xlbiB9Owog
ICAgIAotICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgIHVuc2lnbmVkIGVuZDsKLSAgICByZW5kZXJl
cigpLnZpZXcoKS5nZXRTZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKKyAgICBhdXRvIHN0
YXJ0ID0gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQb3NpdGlvbigpOworICAg
IGF1dG8gZW5kID0gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCkuZW5kUG9zaXRpb24oKTsK
ICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkK
ICAgICAgICAgZW5kID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgZWxzZSBpZiAoc2Vs
ZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA1YWIxMzMyNDJjNTZjOWNiMDFmZDljNDY4
OWRkMTRlOTRkZmRkNmE5Li5iYWM1NTY5ODM0ZTkyOWIyM2M3ZGM4OWRlOWIzY2UyY2JjMDA1YWZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE4NjUsOCAr
MTg2NSw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0CiAgICAg
ICAgIHx8IGlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKSB8fCBzdHlsZSgpLmNvbHVtblNwYW4oKSA9
PSBDb2x1bW5TcGFuQWxsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAodmll
dygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpKSB7Ci0gICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVu
dCA9IHZpZXcoKS5zZWxlY3Rpb25VbnNwbGl0U3RhcnQoKS0+bm9kZSgpOworICAgIGlmICh2aWV3
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgeworICAgICAgICBOb2RlKiBzdGFydEVsZW1lbnQgPSB2
aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnQoKS0+bm9kZSgpOwogICAgICAgICBpZiAoc3RhcnRFbGVt
ZW50ICYmIHN0YXJ0RWxlbWVudC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IGVsZW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggOGJiYzI4OTU0ZjgwYmQ3YjcwMmU1MTBmYWYwMDNjZjg3
NTBlZjg2ZC4uZDU2MTI5ZjdkM2YzZDA2YTcxNjAwOTU4NDY4NjQ5YjRkNjVlZjY2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE0MTcsOCArMTQxNyw4
IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0CiAgICAgcmV0
dXJuIHN0ID09IFNlbGVjdGlvblN0YXJ0CiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkVuZAog
ICAgICAgICB8fCBzdCA9PSBTZWxlY3Rpb25Cb3RoCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rp
b25VbnNwbGl0U3RhcnQoKSA9PSB0aGlzCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb25VbnNw
bGl0RW5kKCkgPT0gdGhpczsKKyAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0KCkg
PT0gdGhpcworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsKIH0K
IAogdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYmFhMWY2NTRkNTE5MWQyODY3ZWRlYWJmYzhiYWQy
MmVlZGU1YjFlNC4uYjQ4MTBlYzMxNjFhYTBkOTU0MTViYzBiODIxMWM3ZmE3NzEzZGE1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjIsNyArNjIsNyBAQCBj
bGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwotY2xhc3MgU2VsZWN0
aW9uU3VidHJlZVJvb3Q7CitjbGFzcyBTZWxlY3Rpb25SYW5nZURhdGE7CiBjbGFzcyBUcmFuc2Zv
cm1TdGF0ZTsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggNjQwYTdiYWVkOGViM2E3YTg0ZGJhYjU4Yzk2
YTQzOWFjM2Q2NjkyNi4uMjgxOGM2NGVjNGQ3YmFlNzA0NjgzZjkyMzVkZGIyY2FjYjE1OGIwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC02NDQs
MjMgKzY0NCwyMiBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSBzdGF0ZSkKIAogYm9vbCBSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCgpIGNv
bnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUgcyA9IHNlbGVjdGlvblN0YXRlKCk7Ci0gICAgaWYg
KHMgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHNlbGVjdGlv
blN0YXRlKCk7CisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHN0YXRlID09
IFNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOwotICAgIHZpZXcoKS5nZXRTZWxlY3Rpb25TdGFy
dEVuZChzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICBpZiAocyA9PSBTZWxlY3Rp
b25TdGFydCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7Ci0gICAgICAgIAor
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQb3NpdGlv
bigpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gdmlldygpLnNlbGVjdGlvbigpLmVuZFBvc2l0
aW9uKCk7CisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvblN0YXJ0KQorICAgICAgICByZXR1cm4g
IXNlbGVjdGlvblN0YXJ0OworCiAgICAgdW5zaWduZWQgZW5kID0gZWxlbWVudCgpLT5oYXNDaGls
ZE5vZGVzKCkgPyBlbGVtZW50KCktPmNvdW50Q2hpbGROb2RlcygpIDogMTsKLSAgICBpZiAocyA9
PSBTZWxlY3Rpb25FbmQpCisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkVuZCA9PSBlbmQ7Ci0gICAgaWYgKHMgPT0gU2VsZWN0aW9uQm90aCkK
LSAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDAgJiYgc2VsZWN0aW9uRW5kID09IGVu
ZDsKLSAgICAgICAgCisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkJvdGgpCisgICAgICAgIHJl
dHVybiAhc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggZGYxMzMxOTgzMzc3ZTVhM2Q5NjMzNWFiOTJlNTkzN2Zj
ZDc0ZDNkMC4uM2Q5ZmZjYjJlNTBiNjk0MWEwNDExMjI4OGJmZDA4OGFiNzJjNGEzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMTQ0MSwxMyArMTQ0MSwxNSBA
QCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hl
cyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiAgICAgLy8gTm93IGNhbGN1bGF0ZSBzdGFydFBv
cyBhbmQgZW5kUG9zIGZvciBwYWludGluZyBzZWxlY3Rpb24uCiAgICAgLy8gV2UgaW5jbHVkZSBh
IHNlbGVjdGlvbiB3aGlsZSBlbmRQb3MgPiAwCi0gICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBv
czsKKyAgICB1bnNpZ25lZCBzdGFydFBvczsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CiAgICAgaWYg
KHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFy
ZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3RhcnRQb3MgPSAwOwogICAgICAgICBlbmRQb3Mg
PSB0ZXh0TGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmlldygpLmdldFNlbGVjdGlv
blN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOworICAgICAgICBzdGFydFBvcyA9IHZpZXcoKS5z
ZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgIGVuZFBvcyA9IHZpZXcoKS5zZWxl
Y3Rpb24oKS5lbmRQb3NpdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25TdGFydCkKICAgICAgICAgICAgIGVuZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICAg
ICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25FbmQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggYzI1MGE0
ZGZiNzUwMjM1ODRjYWYyMmViOGUxNWY3YzRkYjA1MWZhZS4uNzVlMjFjNWRmMzk0ODA2YmE4NDM0
MjJmZmE4NThjNjI2N2JlODhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtNDQ2LDExICs0NDYsMTAgQEAgdm9pZCBSZW5kZXJU
ZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVu
ZGVyT2JqZWN0OjoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHN0YXJ0
LCBlbmQ7Ci0gICAgcmVuZGVyZXIudmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBl
bmQpOworICAgIGF1dG8gc3RhcnQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQ
b3NpdGlvbigpOworICAgIGF1dG8gZW5kID0gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmVu
ZFBvc2l0aW9uKCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQpIHsKICAgICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExlbmd0aCgpOwotCiAgICAgICAgIC8v
IHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4dCB0byBlbmQgb2YgbGluZQogICAg
ICAgICBpZiAoc3RhcnQgJiYgc3RhcnQgPT0gZW5kKQogICAgICAgICAgICAgc3RhcnQgPSBlbmQg
LSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDg4Y2U4MzQ5
YjEzZWY0MTIxMmFhN2Y3YjQ4YzA4MGEwNmU0OTRmZGQuLjZmY2I1OTkyNWRkOTM2Yjg1YWFjMGI0
MDRiNjhhMzEyODBjNzA4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJG
bG9hdGluZ09iamVjdHMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lU2Vs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCkBAIC00Nyw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTc4
LDUzICs3NiwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaXNhbGxvd0xheW91dCB7IGZhbHNl
IH07CiB9OwogCi1zdHJ1Y3QgU2VsZWN0aW9uSXRlcmF0b3IgewotICAgIFNlbGVjdGlvbkl0ZXJh
dG9yKFJlbmRlck9iamVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQotICAg
IHsKLSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9i
amVjdCogY3VycmVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50Owot
ICAgIH0KLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiBtX3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAgICAgbV9jdXJyZW50
ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0gICAgICAgIGNoZWNr
Rm9yU3Bhbm5lcigpOwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3Bhbikgewot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
ICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOwotICAgICAgICAg
ICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY3VycmVu
dDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQotICAgIHsK
LSAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9j
dXJyZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIg
PSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVu
dCk7Ci0gICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwotICAgICAg
ICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQotCi0gICAgUmVuZGVy
T2JqZWN0KiBtX2N1cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19OwotCiBSZW5kZXJWaWV3
OjpSZW5kZXJWaWV3KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAg
ICA6IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX2Zy
YW1lVmlldygqZG9jdW1lbnQudmlldygpKQorICAgICwgbV9zZWxlY3Rpb24oKnRoaXMpCiAgICAg
LCBtX2xhenlSZXBhaW50VGltZXIoKnRoaXMsICZSZW5kZXJWaWV3OjpsYXp5UmVwYWludFRpbWVy
RmlyZWQpCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlcigqdGhpcykKLSNlbmRpZgogewogICAgIHNldElzUmVuZGVyVmlldygpOwogCkBA
IC02OTcsMjkwICs2NTMsNiBAQCB2b2lkIFJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKICAgICBxdWFkcy5hcHBl
bmQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXIoKS0+c2l6ZSgpKSk7CiB9CiAKLXN0YXRp
YyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmNoaWxkQXQob2Zm
c2V0KTsKLSAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IG9iamVjdC0+bmV4dEluUHJlT3JkZXJB
ZnRlckNoaWxkcmVuKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRz
KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCBzZWxS
ZWN0ID0gc3VidHJlZVNlbGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAg
cmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbFJlY3QpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclZp
ZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29u
c3QKLXsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxlY3Rpb25NYXA7Ci0gICAgU2VsZWN0aW9uTWFwIHNl
bGVjdGVkT2JqZWN0czsKLQotICAgIFJlbmRlck9iamVjdCogb3MgPSBzZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9u
KHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkp
OwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKLSAgICB3aGls
ZSAob3MgJiYgb3MgIT0gc3RvcCkgewotICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxl
YWYoKSB8fCBvcyA9PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSB8fCBvcyA9PSBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9
IFNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUg
Zm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFt
aW5lZCBhcyB3ZWxsLgotICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywgc3RkOjpt
YWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIGNsaXBUb1Zpc2libGVDb250ZW50
KSk7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWlzPFJlbmRlclZpZXc+KCpjYikpIHsKLSAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5m
byA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVj
dGlvbkluZm8+KCpjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgICAgICAgICAgICAgIGNi
ID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgb3MgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gTm93
IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9s
ZSBzZWxlY3Rpb24uCi0gICAgTGF5b3V0UmVjdCBzZWxSZWN0OwotICAgIFNlbGVjdGlvbk1hcDo6
aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwotICAgIGZvciAoU2VsZWN0aW9u
TWFwOjppdGVyYXRvciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kp
IHsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlLmdldCgpOwot
ICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5h
dGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4K
LSAgICAgICAgTGF5b3V0UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKLSAgICAgICAgaWYg
KFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50
Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENv
bnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VyclJlY3QpKTsKLSAgICAg
ICAgICAgIGN1cnJSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyAKLSAgICAg
ICAgfQotICAgICAgICBzZWxSZWN0LnVuaXRlKGN1cnJSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHNlbFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmVwYWludFN1YnRyZWVTZWxlY3Rpb24oKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3
OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxSZW5kZXJC
bG9jayo+IHByb2Nlc3NlZEJsb2NrczsKLQotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxw
dHI7Ci0gICAgaWYgKHNlbGVjdGlvbkVuZCkKLSAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBv
c2l0aW9uKHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZh
bHVlKCkpOwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogbyA9IHNl
bGVjdGlvbkl0ZXJhdG9yLmN1cnJlbnQoKTsgbyAmJiBvICE9IGVuZDsgbyA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoIW8tPmNhbkJlU2VsZWN0aW9uTGVhZigpICYm
IG8gIT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgJiYgbyAhPSBzZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KG8tPnNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKm8sIHRydWUpLnJlcGFpbnQoKTsK
LQotICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdh
cHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAg
ICAgZm9yIChSZW5kZXJCbG9jayogYmxvY2sgPSBvLT5jb250YWluaW5nQmxvY2soKTsgYmxvY2sg
JiYgIWlzPFJlbmRlclZpZXc+KCpibG9jayk7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9j
aygpKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBSZW5kZXJTZWxlY3Rp
b25JbmZvKCpibG9jaywgdHJ1ZSkucmVwYWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9k
ZSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmplY3RzIGFy
ZSBkZWZpbmVkLgotICAgIC8vIENoZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBjbGlja2luZyBh
cm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgotICAgIGlmICgoc3Rh
cnQgJiYgIWVuZCkgfHwgKGVuZCAmJiAhc3RhcnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGNhcmV0Q2hhbmdlZCA9IG1fc2VsZWN0aW9uV2FzQ2FyZXQgIT0gZnJhbWUoKS5zZWxlY3Rp
b24oKS5pc0NhcmV0KCk7Ci0gICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGZyYW1lKCkuc2VsZWN0
aW9uKCkuaXNDYXJldCgpOwotICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFz
bid0IGNoYW5nZWQuCi0gICAgaWYgKG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID09IHN0YXJ0ICYm
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zID09IHN0YXJ0UG9zCi0gICAgICAgICYmIG1fc2Vs
ZWN0aW9uVW5zcGxpdEVuZCA9PSBlbmQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID09IGVu
ZFBvcyAmJiAhY2FyZXRDaGFuZ2VkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBh
bmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdh
dGhlci4KLSAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29l
cyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwotI2VuZGlmIC8vIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQotICAgIC8vIFNldCBnbG9iYWwgcG9zaXRpb25zIGZvciBuZXcgc2Vs
ZWN0aW9uLgotICAgIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgbV9zZWxl
Y3Rpb25VbnNwbGl0U3RhcnRQb3MgPSBzdGFydFBvczsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRF
bmQgPSBlbmQ7Ci0gICAgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID0gZW5kUG9zOwotICAgIGF1
dG8gb2xkU2VsZWN0aW9uRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8T2xkU2VsZWN0aW9uRGF0YT4o
KTsKLSAgICBjbGVhclN1YnRyZWVTZWxlY3Rpb24oYmxvY2tSZXBhaW50TW9kZSwgKm9sZFNlbGVj
dGlvbkRhdGEpOwotICAgIHNldFNlbGVjdGlvbkRhdGEoU2VsZWN0aW9uU3VidHJlZURhdGEoc3Rh
cnQsIHN0YXJ0UG9zLCBlbmQsIGVuZFBvcykpOwotICAgIGFwcGx5U3VidHJlZVNlbGVjdGlvbihi
bG9ja1JlcGFpbnRNb2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1ZhbGlkT2JqZWN0Rm9yTmV3U2VsZWN0aW9uKGNvbnN0IFJlbmRlclZpZXcmIHZpZXcs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQotewotICAgIHJldHVybiAob2JqZWN0LmNhbkJl
U2VsZWN0aW9uTGVhZigpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uU3RhcnQoKSB8fCAmb2JqZWN0ID09IHZpZXcuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVu
ZCgpKSAmJiBvYmplY3Quc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bk5vbmUgJiYgb2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpOwotfQotCi12b2lkIFJlbmRlclZpZXc6
OmNsZWFyU3VidHJlZVNlbGVjdGlvbihTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRN
b2RlLCBPbGRTZWxlY3Rpb25EYXRhJiBvbGRTZWxlY3Rpb25EYXRhKSBjb25zdAotewotICAgIC8v
IFJlY29yZCB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMuICBUaGVzZSB3aWxsIGJlIHVzZWQgbGF0
ZXIKLSAgICAvLyB3aGVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0aGUgbmV3IHNlbGVjdGVkIG9iamVj
dHMuCi0gICAgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyA9IHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydFBvcygpOwotICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9u
RW5kUG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpOwotICAgIAotICAgIC8v
IEJsb2NrcyBjb250YWluIHNlbGVjdGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRo
ZW0sIGVpdGhlciBvbiB0aGUgbGVmdCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJs
b2Nrcy4KLSAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2Ug
aGF2ZSB0byBleGFtaW5lIGxlZnQsIG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxs
eSwgc2luY2Ugb3RoZXJ3aXNlCi0gICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0
IHJlbWFpbiB0aGUgc2FtZSBldmVuIHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotCi0gICAg
UmVuZGVyT2JqZWN0KiBvcyA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAg
IGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0g
ICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0
b3Igc2VsZWN0aW9uSXRlcmF0b3Iob3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2JqZWN0Rm9yTmV3U2VsZWN0aW9uKCp0aGlzLCAqb3MpKSB7
Ci0gICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5l
IGdhcHMgYW5kIG1hcmdpbiBnYXBzLiAgVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0g
ICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0cy5zZXQob3MsIHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKm9zLCB0cnVlKSk7Ci0gICAgICAgICAg
ICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TmV3WE9ST2xkKSB7Ci0gICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4oKmNiKSkgewotICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJ
bmZvID0gb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNiKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3MgPSBzZWxlY3Rpb25J
dGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBzZWxlY3RlZE9iamVjdCA6
IG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3RzLmtleXMoKSkKLSAgICAgICAgc2VsZWN0
ZWRPYmplY3QtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uTm9uZSk7Ci19Ci0K
LXZvaWQgUmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRN
b2RlIGJsb2NrUmVwYWludE1vZGUsIGNvbnN0IE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlv
bkRhdGEpCi17Ci0gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmpl
Y3RzIGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAotICAgIGlmIChzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
U3RhcnQoKSA9PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgIHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNl
bGVjdGlvbkJvdGgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvblN0YXJ0KCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25TdGFydCk7Ci0gICAgICAg
IGlmIChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBzZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kKCktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0
aW9uRW5kKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRGF0YUVu
ZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHNl
bGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCi0gICAgICAg
IHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25EYXRhRW5kLCBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9u
SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRl
cmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9
IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVy
ID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9
PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9u
U3RhdGVJZk5lZWRlZChTZWxlY3Rpb25JbnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1Jl
cGFpbnRNb2RlICE9IFJlcGFpbnROb3RoaW5nKQotICAgICAgICBsYXllcigpLT5jbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotCi0gICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBz
dGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2Fp
biBhbmQKLSAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KLSAgICBTZWxl
Y3RlZE9iamVjdE1hcCBuZXdTZWxlY3RlZE9iamVjdHM7Ci0gICAgU2VsZWN0ZWRCbG9ja01hcCBu
ZXdTZWxlY3RlZEJsb2NrczsKLSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJh
dG9yKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRl
cmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIg
IT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0
KCkpIHsKLSAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oKnRoaXMsICpj
dXJyZW50UmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2Vs
ZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0
aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNv
bGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0
R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3Qp
OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkp
Ci0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFs
c2UpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQoY3VycmVu
dFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKLQotICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3
PigqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5h
ZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+KCpjb250YWluaW5nQmxvY2spOwotICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0KLSNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5h
ZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0
cygpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwotICAgIGZvciAoY29uc3QgYXV0byYgc2VsZWN0ZWRP
YmplY3RJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMpIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBvYmogPSBzZWxlY3RlZE9iamVjdEluZm8ua2V5OwotICAgICAgICBSZW5k
ZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwot
ICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gc2VsZWN0ZWRPYmplY3RJbmZv
LnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9
IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkK
LSAgICAgICAgICAgIHx8IChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSA9PSBvYmog
JiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyAhPSBzZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnRQb3MoKSkKLSAgICAgICAgICAgIHx8IChzZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kKCkgPT0gb2JqICYmIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uRW5kUG9zICE9
IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSkpIHsKLSAgICAgICAgICAgIG9sZElu
Zm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAg
ICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0
cy5yZW1vdmUob2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9i
amVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoY29u
c3QgYXV0byYgc2VsZWN0ZWRPYmplY3RJbmZvIDogbmV3U2VsZWN0ZWRPYmplY3RzKQotICAgICAg
ICBzZWxlY3RlZE9iamVjdEluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55
IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3Rl
ZEJsb2NrSW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRCbG9ja3MpIHsKLSAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5OwotICAgICAg
ICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5n
ZXQoYmxvY2spOwotICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBz
ZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9s
ZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9
IG5ld0luZm8tPnN0YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKLSAg
ICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+cmVwYWlu
dCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IGJsb2NrcyB0
aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQgc28g
dGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZEJs
b2NrSW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52
YWx1ZS0+cmVwYWludCgpOwotfQotCi12b2lkIFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRP
ZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiYgZW5kT2Zmc2V0KSBjb25zdAotewotICAgIHN0YXJ0UmVuZGVyZXIgPSBtX3NlbGVjdGlvblVu
c3BsaXRTdGFydDsKLSAgICBzdGFydE9mZnNldCA9IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9z
OwotICAgIGVuZFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOwotICAgIGVuZE9mZnNl
dCA9IG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpjbGVh
clNlbGVjdGlvbigpCi17Ci0gICAgbGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcygp
OwotICAgIHNldFNlbGVjdGlvbihudWxscHRyLCBzdGQ6Om51bGxvcHQsIG51bGxwdHIsIHN0ZDo6
bnVsbG9wdCwgUmVwYWludE5ld01pbnVzT2xkKTsKLX0KLQogYm9vbCBSZW5kZXJWaWV3Ojpwcmlu
dGluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkucHJpbnRpbmcoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDU4MTg4OGRlNzMyYTBjZWE5ZmZiN2Q1
OTdlNzdkMTliOGJiZjRkZjQuLmMzN2ViYmZjMjI4ZjNlNmE2NjYyMzJiYzk2ZGE5MTI3NzdmNWY0
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjYsMjIgKzI2LDE4
IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3Qu
aCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRo
ZXJlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VRdWFs
aXR5Q29udHJvbGxlcjsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRl
clF1b3RlOwogCi1jbGFzcyBSZW5kZXJWaWV3IGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxv
dywgcHVibGljIFNlbGVjdGlvblN1YnRyZWVSb290IHsKK2NsYXNzIFJlbmRlclZpZXcgZmluYWwg
OiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJWaWV3KERvY3Vt
ZW50JiwgUmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlldygpOwpAQCAtODUs
MTUgKzgxLDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgd2hvc2UgYmFj
a2dyb3VuZCBzdHlsZSBpcyB1c2VkIHRvIHBhaW50IHRoZSByb290IGJhY2tncm91bmQuCiAgICAg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JSb290QmFja2dyb3VuZCgpIGNvbnN0OwogCi0gICAg
ZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdN
aW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBlbmRPYmplY3QsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbihS
ZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3Rh
cnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiYgZW5kT2Zmc2V0KSBjb25zdDsKLSAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7Ci0gICAg
UmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvblVuc3BsaXRTdGFydDsgfQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uVW5zcGxp
dEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdEVuZDsgfQotICAgIEludFJl
Y3Qgc2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25z
dDsKLSAgICB2b2lkIHJlcGFpbnRTZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2b2lkIGdldFNlbGVj
dGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzdGFydCwgdW5zaWduZWQmIGVuZCkgY29uc3QgeyBzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnMoc3RhcnQsIGVuZCk7IH0KKyAg
ICBTZWxlY3Rpb25SYW5nZURhdGEmIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CiAKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKQEAgLTMxMiwyMyArMzAwLDE0IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xlYXJTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJl
cGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmKSBjb25zdDsKLSAg
ICB2b2lkIGFwcGx5U3VidHJlZVNlbGVjdGlvbihTZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3Qg
T2xkU2VsZWN0aW9uRGF0YSYpOwotICAgIExheW91dFJlY3Qgc3VidHJlZVNlbGVjdGlvbkJvdW5k
cyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdm9pZCByZXBh
aW50U3VidHJlZVNlbGVjdGlvbigpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIEZyYW1lVmlldyYg
bV9mcmFtZVZpZXc7CiAKLSAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0
IHsgbnVsbHB0ciB9OwotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNwbGl0RW5kIHsg
bnVsbHB0ciB9OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxp
dFN0YXJ0UG9zOwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxp
dEVuZFBvczsKLQogICAgIC8vIEluY2x1ZGUgdGhpcyBSZW5kZXJWaWV3LgogICAgIHVpbnQ2NF90
IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKIAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJl
Z2lvbj4gbV9hY2N1bXVsYXRlZFJlcGFpbnRSZWdpb247CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRh
IG1fc2VsZWN0aW9uOwogCiAgICAgLy8gRklYTUU6IE9ubHkgdXNlZCBieSBlbWJlZGRlZCBXZWJW
aWV3cyBpbnNpZGUgQXBwS2l0IE5TVmlld3MuICBGaW5kIGEgd2F5IHRvIHJlbW92ZS4KICAgICBz
dHJ1Y3QgTGVnYWN5UHJpbnRpbmcgewpAQCAtMzYwLDcgKzMzOSw2IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9yZW5k
ZXJUcmVlSW50ZXJuYWxNdXRhdGlvbkNvdW50ZXIgeyAwIH07CiAKLSAgICBib29sIG1fc2VsZWN0
aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNTb2Z0d2FyZUZpbHRlcnMgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXMgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB7IGZhbHNlIH07CkBAIC0zNzIsOSArMzUwLDYgQEAg
cHJpdmF0ZToKICAgICBIYXNoU2V0PFJlbmRlckVsZW1lbnQqPiBtX3Zpc2libGVJblZpZXdwb3J0
UmVuZGVyZXJzOwogICAgIFZlY3RvcjxSZWZQdHI8UmVuZGVyV2lkZ2V0Pj4gbV9wcm90ZWN0ZWRS
ZW5kZXJXaWRnZXRzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgU2VsZWN0
aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOwotI2VuZGlmCiAjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKICAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJveCo+IG1fYm94
ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9uczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggZGVjNmRmYTkyZGZmY2U4NTQ3YTlj
OGRhNTdhZWE1NGFjZDk4MjNkZi4uZWNlYzAyNzEyMzk5NDk5NmYwYzI4MWU5YWFmYTc4NzA0YmU0
MTE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbElu
T25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUu
Y3BwCkBAIC0xMzMsNyArMTMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuY3BwIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guY3BwIgogI2luY2x1ZGUgIlNjcm9sbEFsaWdubWVudC5jcHAi
Ci0jaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwIgorI2luY2x1ZGUgIlNlbGVjdGlv
blJhbmdlRGF0YS5jcHAiCiAjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5jcHAiCiAjaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDViOWY0MGQwZTQyNmRlN2E4NTBmNDJjZDdh
MzI4ZjUxZDBhNGU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDi
gJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbi5o
IgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0cnVjdCBTZWxlY3Rpb25E
YXRhIHsKKyAgICB1c2luZyBSZW5kZXJlck1hcCA9IEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PjsKKyAgICB1c2luZyBSZW5kZXJCbG9j
a01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2tTZWxlY3Rpb25JbmZvPj47CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFy
dFBvc2l0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvc2l0aW9uOworICAg
IFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9Owor
CitjbGFzcyBTZWxlY3Rpb25JdGVyYXRvciB7CitwdWJsaWM6CisgICAgU2VsZWN0aW9uSXRlcmF0
b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKKyAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCisgICAg
eworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Cisg
ICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCogbmV4dCgpCisgICAgeworICAgICAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0
ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOworICAgICAgICBtX2N1cnJlbnQg
PSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKKyAgICAgICAgY2hlY2tG
b3JTcGFubmVyKCk7CisgICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7Cisg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFz
dCgpOworICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAg
ICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7CisgICAgICAgICAg
ICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9jdXJyZW50
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCisgICAgewor
ICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1
cnJlbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9
IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50
KTsKKyAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7CisgICAgICAg
IG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKKyAgICB9CisKKyAgICBSZW5kZXJP
YmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKK307CisKK3N0YXRpYyBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGls
ZEF0KG9mZnNldCk7CisgICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5Q
cmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZFJlbmRlcmVy
Rm9yU2VsZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFNlbGVjdGlv
blJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uKQoreworICAgIHJldHVybiAocmVuZGVyZXIu
Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCB8fCAm
cmVuZGVyZXIgPT0gc2VsZWN0aW9uLmVuZCkKKyAgICAgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUKKyAgICAgICAgJiYgcmVuZGVy
ZXIuY29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK3N0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgYXV0
byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0
dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmlu
Z0Jsb2NrOworfQorCitzdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0KGNvbnN0IFNlbGVjdGlv
blJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQor
eworICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydFBv
c2l0aW9uLCBzZWxlY3Rpb24uZW5kUG9zaXRpb24sIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tz
IGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0
aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgor
ICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRv
IGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5j
ZSBvdGhlcndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWlu
IHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgUmVuZGVyT2Jq
ZWN0KiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydDsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBu
dWxscHRyOworICAgIGlmIChzZWxlY3Rpb24uZW5kKQorICAgICAgICBzdG9wID0gcmVuZGVyZXJB
ZnRlclBvc2l0aW9uKCpzZWxlY3Rpb24uZW5kLCBzZWxlY3Rpb24uZW5kUG9zaXRpb24udmFsdWUo
KSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOworICAg
IHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVu
ZGVyZXJGb3JTZWxlY3Rpb24oKnN0YXJ0LCBzZWxlY3Rpb24pKSB7CisgICAgICAgICAgICAvLyBC
bG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBn
YXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAgIG9sZFNlbGVj
dGlvbkRhdGEucmVuZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxl
Y3Rpb25JbmZvPigqc3RhcnQsIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVy
ZW5jZSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxv
Y2tCZWxvd1ZpZXcoKnN0YXJ0KTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dW
aWV3KCpibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgYmxvY2tJbmZvID0gb2xk
U2VsZWN0aW9uRGF0YS5ibG9ja3MuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3Vu
aXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpibG9jayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRl
cmF0b3IubmV4dCgpOworICAgIH0KKyAgICByZXR1cm4gb2xkU2VsZWN0aW9uRGF0YTsKK30KKwor
U2VsZWN0aW9uUmFuZ2VEYXRhOjpTZWxlY3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYgdmlldykK
KyAgICA6IG1fcmVuZGVyVmlldyh2aWV3KQorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQor
ICAgICwgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIodmlldykKKyNlbmRpZgoreworfQorCit2b2lk
IFNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KGNvbnN0IENvbnRleHQmIHNlbGVjdGlvbiwgUmVwYWlu
dE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3Rh
cnQgYW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgorICAgIC8vIENoZWNrIHd3dy5tc25iYy5j
b20gYW5kIHRyeSBjbGlja2luZyBhcm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhh
cHBlbmVkLgorICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0ICYmICFzZWxlY3Rpb24uZW5kKSB8fCAo
c2VsZWN0aW9uLmVuZCAmJiAhc2VsZWN0aW9uLnN0YXJ0KSkKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAgYXV0
byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOwor
ICAgIGlmIChzZWxlY3Rpb24gPT0gbV9zZWxlY3Rpb25Db250ZXh0ICYmIG1fc2VsZWN0aW9uV2Fz
Q2FyZXQgPT0gaXNDYXJldCkKKyAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3Rp
ZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBhcmUgYWJvdXQgdG8gZ2F0aGVyLgorICAgIC8vIFRo
ZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBh
bmQgaXMgZGVzdHJveWVkLgorICAgIGF1dG8gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0
R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOworI2VuZGlmCisgICAgbV9zZWxlY3Rp
b25XYXNDYXJldCA9IGlzQ2FyZXQ7CisgICAgYXBwbHkoc2VsZWN0aW9uLCBibG9ja1JlcGFpbnRN
b2RlKTsKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKCkKK3sKKyAgICBtX3Jl
bmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgIHNldCh7
bnVsbHB0ciwgbnVsbHB0ciwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHR9LCBTZWxlY3Rpb25S
YW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9u
UmFuZ2VEYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4g
cHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBv
c2l0aW9uKCptX3NlbGVjdGlvbkNvbnRleHQuZW5kLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9z
aXRpb24udmFsdWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Io
bV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyID0gc2Vs
ZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAhPSBlbmQ7IHJl
bmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmICghcmVuZGVy
ZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4
dC5zdGFydCAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChyZW5kZXJlci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAg
ICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBt
YXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAo
YXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAg
IGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVl
KS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgU2VsZWN0aW9uUmFu
Z2VEYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVD
b250ZW50KSBjb25zdAoreworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIHJlbmRlcmVy
czsKKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0Owor
ICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKm1fc2VsZWN0
aW9uQ29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsK
KyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hp
bGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0IHx8IHN0
YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICAmJiBzdGFydC0+c2Vs
ZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICAgICAg
ICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQg
bWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAg
cmVuZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZv
Pigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZ
ZXMpKTsKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5pbmdCbG9jaygp
OworICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3PigqYmxvY2spKSB7
CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBi
bG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJT
ZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2li
bGVDb250ZW50OjpZZXMpOworICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2Vs
ZWN0aW9uSXRlcmF0b3IubmV4dCgpOworICAgIH0KKworICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5n
bGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgor
ICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKKyAgICBhdXRvIGVuZCA9IHJlbmRlcmVycy5l
bmQoKTsKKyAgICBmb3IgKGF1dG8mIGluZm8gOiByZW5kZXJlcnMudmFsdWVzKCkpIHsKKyAgICAg
ICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBv
ZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAg
ICAgIExheW91dFJlY3QgY3VycmVudFJlY3QgPSBpbmZvLT5yZWN0KCk7CisgICAgICAgIGlmIChh
dXRvKiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CisgICAg
ICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KGN1cnJlbnRSZWN0KSk7CisgICAgICAgICAgICBjdXJyZW50UmVj
dCA9IGFic1F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgfQorICAgICAgICBz
ZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHNuYXBw
ZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QpOworfQorCit2b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6
YXBwbHkoY29uc3QgQ29udGV4dCYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFp
bnRNb2RlKQoreworICAgIGF1dG8gb2xkU2VsZWN0aW9uRGF0YSA9IGNvbGxlY3QobV9zZWxlY3Rp
b25Db250ZXh0LCBibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwor
ICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVy
IDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMua2V5cygpKQorICAgICAgICByZW5kZXJlci0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOwor
ICAgIG1fc2VsZWN0aW9uQ29udGV4dCA9IG5ld1NlbGVjdGlvbjsKKyAgICAvLyBVcGRhdGUgdGhl
IHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25TdGFydCBh
bmQgc2VsZWN0aW9uRW5kCisgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCAmJiBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAg
bV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uQm90aCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX3NlbGVj
dGlvbkNvbnRleHQuc3RhcnQpCisgICAgICAgICAgICBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCk7
CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAgICAgbV9zZWxl
Y3Rpb25Db250ZXh0LmVuZC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbkVuZCk7CisgICAgfQorCisgICAgYXV0byogc2VsZWN0aW9uU3RhcnQgPSBtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQ7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IG1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmQ7CisgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxs
cHRyOworICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQorICAgICAgICBzZWxlY3Rpb25FbmQgPSBy
ZW5kZXJlckFmdGVyUG9zaXRpb24oKnNlbGVjdGlvbkRhdGFFbmQsIG1fc2VsZWN0aW9uQ29udGV4
dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25J
dGVyYXRvcihzZWxlY3Rpb25TdGFydCk7CisgICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIg
PSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBz
ZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkg
eworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rp
b25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRl
KTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90
aGluZykKKyAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKCk7CisKKyAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBi
ZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAorICAg
IC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgorICAgIFNlbGVjdGlvbkRhdGE6
OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVyZXJzOworICAgIFNlbGVjdGlvbkRhdGE6OlJl
bmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOworICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0g
U2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAoYXV0byogY3VycmVu
dFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVu
ZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRv
ci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqY3Vy
cmVudFJlbmRlcmVyLCBtX3NlbGVjdGlvbkNvbnRleHQpKSB7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7CisjaWYg
RU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBz
ZWxlY3Rpb25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQorICAgICAgICAgICAgICAg
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVwYWludENv
bnRhaW5lcigpLCByZWN0KTsKKyAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5pc1Rl
eHRPckxpbmVCcmVhaygpKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
LnNldFRleHRPbmx5KGZhbHNlKTsKKyNlbmRpZgorICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5k
ZXJlcnMuc2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7CisgICAg
ICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAhaXM8UmVu
ZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRC
bG9ja3MuYWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvPigqY29udGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICBjb250YWlu
aW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOworI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhl
cmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8t
PnJlY3RzKCkpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6Tm90aGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNo
YW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/CisgICAgZm9yIChhdXRvJiBzZWxl
Y3RlZFJlbmRlcmVySW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7CisgICAgICAg
IGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OworICAgICAgICBhdXRv
KiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKKyAgICAgICAg
YXV0byogb2xkSW5mbyA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOworICAgICAg
ICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBv
bGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKKyAgICAgICAgICAgIHx8IChtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFy
dFBvc2l0aW9uICE9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydFBvc2l0aW9uKQorICAgICAgICAg
ICAgfHwgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9u
RGF0YS5lbmRQb3NpdGlvbiAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24pKSB7Cisg
ICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykg
eworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBu
ZXdTZWxlY3RlZFJlbmRlcmVycy5yZW1vdmUocmVuZGVyZXIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUg
bm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJl
IHVwZGF0ZWQuCisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVj
dGVkUmVuZGVyZXJzKQorICAgICAgICBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS0+cmVwYWlu
dCgpOworCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KKyAgICBm
b3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsK
KyAgICAgICAgYXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7CisgICAgICAgIGF1
dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOworICAgICAgICBhdXRv
KiBvbGRJbmZvID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICgh
bmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5m
by0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5y
ZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5l
d0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1v
dmUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55
IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3Mg
ZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoYXV0byYgc2Vs
ZWN0ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKKyAgICAgICAgc2VsZWN0ZWRCbG9j
a0luZm8udmFsdWUtPnJlcGFpbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmY0ZmYzZGI0Y2E1MzI2OWQ1ZTU0NTcyMTBlZjA3NWM1ZGJmZjZhYWEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgKQEAgLTAs
MCArMSw4NiBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgor
CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdh
dGhlcmVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgT2xkU2Vs
ZWN0aW9uRGF0YTsKKyAgICAKK2NsYXNzIFNlbGVjdGlvblJhbmdlRGF0YSB7CitwdWJsaWM6Cisg
ICAgU2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZpZXcmKTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29u
dGV4dCB7CisgICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQgeyBudWxscHRyIH07CisgICAgICAg
IFJlbmRlck9iamVjdCogZW5kIHsgbnVsbHB0ciB9OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBzdGFydFBvc2l0aW9uOworICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBl
bmRQb3NpdGlvbjsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29udGV4dCYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydCA9PSBvdGhlci5z
dGFydCAmJiBlbmQgPT0gb3RoZXIuZW5kICYmIHN0YXJ0UG9zaXRpb24gPT0gb3RoZXIuc3RhcnRQ
b3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA9PSBvdGhlci5lbmRQb3NpdGlvbjsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51
c09sZCwgTm90aGluZyB9OworICAgIHZvaWQgc2V0KGNvbnN0IENvbnRleHQmLCBSZXBhaW50TW9k
ZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIGNvbnN0IENvbnRleHQmIGdldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dDsgfQorCisgICAgUmVuZGVyT2JqZWN0KiBz
dGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydDsgfQorICAgIFJl
bmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LmVuZDsg
fQorICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVChtX3NlbGVjdGlv
bkNvbnRleHQuc3RhcnRQb3NpdGlvbik7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQ
b3NpdGlvbi52YWx1ZSgpOyB9CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24oKSBjb25zdCB7IEFT
U0VSVChtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRpb24pOyByZXR1cm4gbV9zZWxlY3Rpb25D
b250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCk7IH0KKworICAgIHZvaWQgY2xlYXIoKTsKKyAgICBJ
bnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJs
ZUNvbnRlbnQ6Ok5vKTsgfQorICAgIEludFJlY3QgYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRl
bnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpZ
ZXMpOyB9CisgICAgdm9pZCByZXBhaW50KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51bSBj
bGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywgTm8gfTsKKyAgICBJbnRSZWN0IGNvbGxl
Y3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0OworICAgIHZvaWQgYXBwbHkoY29u
c3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlKTsKKworICAgIGNvbnN0IFJlbmRlclZpZXcmIG1fcmVu
ZGVyVmlldzsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBTZWxlY3Rpb25SZWN0
R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7CisjZW5kaWYKKyAgICBDb250ZXh0IG1f
c2VsZWN0aW9uQ29udGV4dDsKKyAgICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQxODk1NjQ2MmYzY2M1NTRjNWQ1ZmQ4NjE4YTA2MGI3ODU4YjE2YzYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIgot
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2luY2x1ZGUg
IlJhbmdlLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCgpCi17
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGI5YzY4YTcwODdhMjkxNDlkMmMyMTQ4NzZmOTQ1NTZjMjQ5NGY5YjQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAot
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJT
ZWxlY3Rpb25JbmZvLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7
Ci0KLWNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290IHsKLXB1YmxpYzoKLSAgICAKLSAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlv
bkluZm8+PiBTZWxlY3RlZE9iamVjdE1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVu
ZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj4gU2Vs
ZWN0ZWRCbG9ja01hcDsKLQotICAgIHN0cnVjdCBPbGRTZWxlY3Rpb25EYXRhIHsKLSAgICAgICAg
T2xkU2VsZWN0aW9uRGF0YSgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7Ci0gICAgICAgIFNlbGVjdGVkT2JqZWN0TWFw
IHNlbGVjdGVkT2JqZWN0czsKLSAgICAgICAgU2VsZWN0ZWRCbG9ja01hcCBzZWxlY3RlZEJsb2Nr
czsKLSAgICB9OwotCi0gICAgY2xhc3MgU2VsZWN0aW9uU3VidHJlZURhdGEgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAg
U2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25TdGFydCwgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQb3MsIFJlbmRlck9iamVjdCogc2VsZWN0
aW9uRW5kLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MpCi0gICAgICAg
ICAgICA6IG1fc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9uU3RhcnQpCi0gICAgICAgICAgICAsIG1f
c2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGFy
dFBvcyhzZWxlY3Rpb25TdGFydFBvcykKLSAgICAgICAgICAgICwgbV9zZWxlY3Rpb25FbmRQb3Mo
c2VsZWN0aW9uRW5kUG9zKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJP
YmplY3QqIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdGFydDsg
fQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydFBvcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7IH0KLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZDsgfQotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3MoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbkVuZFBvczsgfQotICAgICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kUG9z
aXRpb25zKHVuc2lnbmVkJiBzdGFydFBvcywgdW5zaWduZWQmIGVuZFBvcykgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgc3RhcnRQb3MgPSBtX3NlbGVjdGlvblN0YXJ0UG9zLnZhbHVlKCk7
Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlvbkVuZFBvcy52YWx1ZSgpOwotICAgICAg
ICB9Ci0gICAgICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX3NlbGVjdGlvblN0YXJ0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uU3Rh
cnRQb3MgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBvcyA9IHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0
YXJ0IHsgbnVsbHB0ciB9OwotICAgICAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uRW5kIHsg
bnVsbHB0ciB9OwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlvblN0
YXJ0UG9zOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBtX3NlbGVjdGlvbkVuZFBv
czsKLSAgICB9OwotCi0gICAgU2VsZWN0aW9uU3VidHJlZVJvb3QoKTsKLQotICAgIFNlbGVjdGlv
blN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVl
RGF0YTsgfQotICAgIGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQotCi0gICAgdm9pZCBzZXRT
ZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25TdWJ0cmVl
RGF0YSkgeyBtX3NlbGVjdGlvblN1YnRyZWVEYXRhID0gc2VsZWN0aW9uU3VidHJlZURhdGE7IH0K
LQotcHJpdmF0ZToKLSAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSBtX3NlbGVjdGlvblN1YnRyZWVE
YXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322352</attachid>
            <date>2017-10-01 20:35:35 -0700</date>
            <delta_ts>2017-10-01 21:46:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177713-20171001203534.patch</filename>
            <type>text/plain</type>
            <size>72905</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGUwNGNiNjkwMDBjZWRk
M2ZhNTU2M2M2ZTkwNmYwYmI4MDE3NDUyZi4uZDRkYjVhM2Y2MTYyMjQ5N2JjOTEyNzI5NDdhNDFh
NTFkOTQ0NzZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE3LTA5LTMwICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuZGVyVmlldyBkb2VzIG5v
dCBuZWVkIHRvIGJlIGEgU2VsZWN0aW9uU3VidHJlZVJvb3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzcxMworCisgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyIGFuZCBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICAxLiBTZWxlY3Rpb25T
dWJ0cmVlUm9vdCAtPiBTZWxlY3Rpb25SYW5nZURhdGEgCisgICAgICAgIDIuIE1vdmUgYWxsIHNl
bGVjdGlvbiBsb2dpYyBmcm9tIFJlbmRlclZpZXcgdG8gU2VsZWN0aW9uUmFuZ2VEYXRhCisgICAg
ICAgIDMuIGNsYXNzIFJlbmRlclZpZXcgOiBwdWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgLT4g
U2VsZWN0aW9uUmFuZ2VEYXRhIG1fc2VsZWN0aW9uOworICAgICAgICA0LiBSZW1vdmUgcmVkdW5k
YW50IGNvZGUKKyAgICAgICAgNS4gR2VuZXJhbCBtb2Rlcm5pemF0aW9uCisgCisgICAgICAgIE5v
IGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6c2V0TmVlZHNTZWxl
Y3Rpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9k
ZVdpbGxCZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnByZXBhcmVGb3JEZXN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMgY29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNuYXBz
aG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZTo6U2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlOjp+U2NvcGVkRnJh
bWVTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JS
YW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
aXNTZWxlY3Rpb25Sb290IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNTZWxlY3Rpb25Cb3JkZXIg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVw
bGFjZWQ6OmlzU2VsZWN0ZWQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c0ZvckxpbmVCb3hlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9u
U3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OlJlbmRlclZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0
aW9uSXRlcmF0b3I6OlNlbGVjdGlvbkl0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjdXJyZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpuZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdGlvbkl0ZXJhdG9yOjpjaGVja0ZvclNwYW5uZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6cmVuZGVyZXJBZnRlclBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzdWJ0cmVlU2VsZWN0aW9uQm91bmRzIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRTZWxlY3Rp
b24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWlu
dFN1YnRyZWVTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6c2V0U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFs
aWRPYmplY3RGb3JOZXdTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6Y2xlYXJTdWJ0cmVlU2VsZWN0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OmFwcGx5U3VidHJlZVNlbGVjdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpnZXRTZWxlY3Rpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6Y2xlYXJTZWxlY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1NlbGVjdGlvblN1YnRyZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyQWZ0
ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25JdGVyYXRvcjo6U2VsZWN0
aW9uSXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmN1cnJl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6Om5leHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uSXRlcmF0b3I6OmNoZWNrRm9yU3Bhbm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OlNlbGVjdGlvblJhbmdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvblJhbmdlRGF0YTo6cmVwYWludCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb25SYW5nZURhdGE6OmJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rp
b25SYW5nZURhdGE6OmNvbGxlY3RBbmRDbGVhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3Rpb25SYW5nZURhdGE6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJh
bmdlRGF0YTo6aXNWYWxpZFJlbmRlcmVyRm9yTmV3U2VsZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlUm9vdCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQ6Om9wZXJhdG9yPT0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpnZXQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjpzdGFydCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OmVuZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25SYW5nZURhdGE6OnN0YXJ0UG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uUmFuZ2VEYXRhOjplbmRQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6T2xkU2VsZWN0aW9uRGF0YTo6T2xk
U2VsZWN0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0
cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OlNlbGVjdGlvblN1YnRyZWVEYXRhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25T
dWJ0cmVlRGF0YTo6c2VsZWN0aW9uU3RhcnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OlNlbGVjdGlvblN1YnRyZWVEYXRhOjpzZWxlY3Rp
b25TdGFydFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25T
dWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVjdGlvbkVuZCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9u
U3VidHJlZURhdGE6OnNlbGVjdGlvbkVuZFBvcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZURhdGE6OnNlbGVj
dGlvblN0YXJ0RW5kUG9zaXRpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdGlvblN1YnRyZWVSb290OjpTZWxlY3Rpb25TdWJ0cmVlRGF0YTo6Y2xlYXJTZWxlY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNl
bGVjdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJl
ZVJvb3Q6OnNlbGVjdGlvbkRhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNldFNlbGVjdGlvbkRhdGEpOiBEZWxldGVkLgorCiAyMDE3
LTA5LTMwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1NldHRpbmdz
XSBSZXBsYWNlIFNldHRpbmdzTWFjcm9zLmggd2l0aCBhIGdlbmVyYXRlZCBiYXNlIGNsYXNzIGZv
ciBTZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3YjVmMDdjYmRmMTk4ZTc0ZDY2MDM3
ZDUyZGNhODQwM2NkMDhlZjFiLi4zM2FmNGEwNDkzMmMzNTFmOTJmNDUzZjc3OTgzOWMxMzUzM2I3
NjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjc0NSw3ICsyNzQ1LDcgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCiAgICAgcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCiAgICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKLSAg
ICByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCisgICAgcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKICAg
ICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcAogICAgIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDI1NzIzNmY2Mzg2YjJiMjVlMTdi
NGRhZTYxNjUxODNjOWY4M2RkYzMuLjUxZmJmYzY4YTc0YzMwNzZiYjlhOWZmYzQxYWVkYTY5MmM5
MTViMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTY0MjQsOCArNjQyNCw4IEBACiAJCUNEQ0E5OEVCMThCMkM4RUIwMEMxMkZG
OSAvKiBMZWdhY3lDRE1Qcml2YXRlTWVkaWFQbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTk4RUExOEIyQzhFQjAwQzEyRkY5IC8qIExl
Z2FjeUNETVByaXZhdGVNZWRpYVBsYXllci5jcHAgKi87IH07CiAJCUNEQ0Q0MUU3MUMzRERCMDkw
MDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDRDQxRTUxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNl
ZENvbnRlbnRSYW5nZS5jcHAgKi87IH07CiAJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQ
YXJzZWRDb250ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRENG
QUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZG
ODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZBQkJFMThDMEFGODQwMDZGODQ1MCAvKiBTZWxl
Y3Rpb25TdWJ0cmVlUm9vdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2VsZWN0aW9uU3VidHJlZVJv
b3QuY3BwICovOyB9OworCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFu
Z2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RDRkFCQkUxOEMwQUY4
NDAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmNwcCAqLzsgfTsKIAkJQ0RENzA4OTYxODM1OUY2RjAwMkIzREM2IC8q
IFNhbXBsZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDREQ3MDg5NDE4MzU5RjZFMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCAqLzsgfTsKIAkJ
Q0RENzA4OTcxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8q
IFNhbXBsZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUNEREMxRTdBMThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREMx
RTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCAqLzsgfTsK
QEAgLTE1MTk2LDggKzE1MTk2LDggQEAKIAkJQ0RDRDQxRTUxQzNEREIwOTAwOTY1RDk5IC8qIFBh
cnNlZENvbnRlbnRSYW5nZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJzZWRDb250ZW50UmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RENENDFFNjFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlZENvbnRlbnRSYW5nZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRENFNUNEMDE0NjMzQkM5MDBENDdDQ0EgLyogRXZlbnRUYXJn
ZXRGYWN0b3J5LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50VGFyZ2V0RmFjdG9yeS5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUw
IC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlbGVjdGlvblN1YnRyZWVSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNE
Q0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0REMUU1MjUxNjdCQTU2NDAwQ0U4MjBCIC8qIFRl
eHRUcmFja1JlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGVNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI2MTA2LDggKzI2MTA2LDggQEAKIAkJCQlBOENGRjVEQTBBMTU1QTA1
MDAwQTQyMzQgLyogUm9vdElubGluZUJveC5oICovLAogCQkJCTVEOTI1QjY1MEY2NEQ0REQwMEI4
NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuY3BwICovLAogCQkJCTVEOTI1QjY2MEY2NEQ0REQwMEI4
NDdGMCAvKiBTY3JvbGxBbGlnbm1lbnQuaCAqLywKLQkJCQlDRENGQUJCQzE4QzBBRjE5MDA2Rjg0
NTAgLyogU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwICovLAotCQkJCUNEQ0ZBQkJCMThDMEFFMzEw
MDZGODQ1MCAvKiBTZWxlY3Rpb25TdWJ0cmVlUm9vdC5oICovLAorCQkJCUNEQ0ZBQkJDMThDMEFG
MTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovLAorCQkJCUNEQ0ZBQkJCMThD
MEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLywKIAkJCQlFNDg5NDRBMDE4
MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCiAJCQkJRTQ4OTQ0QTEx
ODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKIAkJCQkxMUUwNjdFQjFF
NjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLywKQEAgLTMw
MDExLDkgKzMwMDExLDkgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJp
dHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAv
KiBTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMz
REEyRjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MDVDODkxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVj
dGlvblJlY3RHYXRoZXJlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RDRkFCQkQxOEMwQUY3ODAw
NkY4NDUwIC8qIFNlbGVjdGlvblN1YnRyZWVSb290LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRC
NEJCNDE0MTY1MEQ3MDAyQjFEOEIgLyogU2VsZWN0b3JDaGVja2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0MzJEM0ZFODE4QTg2NTg0MDBEN0RDMDMgLyogU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZCOTk5OTcxODA0RDU0MjAwRDAxMTIxIC8qIFNl
bGVjdG9yQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzM5MjksOSArMzM5MjksOSBAQAog
CQkJCTFBRjdBRkM3MUE0OEE4QkMwMEM4RTRFNyAvKiBTZWN1cml0eU9yaWdpblBvbGljeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NzREMkRBNDE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQ
b2xpY3kuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMkUwRDAwNkMxRDAwRUY2RjI2IC8q
IFNlZ21lbnRlZFN0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRENGQUJCRTE4QzBBRjg0
MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJF
QTgwN0M4MEY3MTRBMDMwMDUyNDE5OSAvKiBTZWxlY3Rpb25SZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxNDA1Qzg4MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0RDRkFCQkUxOEMwQUY4NDAwNkY4NDUwIC8qIFNlbGVj
dGlvblN1YnRyZWVSb290LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NEI0QkIzMTQxNjUwRDcw
MDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZCOTk5
OTYxODA0RDU0MjAwRDAxMTIxIC8qIFNlbGVjdG9yQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDE1MDcxNTcxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9yRmlsdGVyLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRl
eCBhODU3ZWRlZGU2YjIzNzc3YzZlODRjY2ZiZDMxNDQxMTcxODFiNzc4Li40YWRjMGE4YTVlZDEx
MGZiZDJkM2I3YzA3ZTE0Mzk3YzNhNTMwMjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcApAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246
OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKCkKIHsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRh
dGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpCi0gICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXct
PnNlbGVjdGlvbigpLmNsZWFyKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFu
ZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQpA
QCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJl
bW92ZWQoTm9kZSYgbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5jbGVh
clNlbGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAg
Y2xlYXIoKTsKIH0KQEAgLTUwNiw3ICs1MDYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNw
b25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwog
CiAgICAgaWYgKGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoYXV0byog
cmVuZGVyVmlldyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAg
IHJlbmRlclZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5z
ZWxlY3Rpb24oKS5jbGVhcigpOwogCiAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgc2VsZWN0aW9u
IHVwZGF0ZSBzbyB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgc2V0IGFnYWluLgogICAgICAgICAgICAg
bV9wZW5kaW5nU2VsZWN0aW9uVXBkYXRlID0gdHJ1ZTsKQEAgLTE1MTcsOSArMTUxNyw4IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnByZXBhcmVGb3JEZXN0cnVjdGlvbigpCiAgICAgbV9jYXJldEJs
aW5rVGltZXIuc3RvcCgpOwogI2VuZGlmCiAKLSAgICBSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKHZpZXcpCi0gICAgICAgIHZpZXctPmNsZWFy
U2VsZWN0aW9uKCk7CisgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIAogICAgIHNldFNlbGVj
dGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0
U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKQEAg
LTE5OTUsNyArMTk5NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0
YXRlQ2hhbmdlZCgpCiAgICAgLy8gUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZlLAogICAgIC8vIHdlIGhhdmUgdG8gdXBk
YXRlIHBsYWNlcyB0aG9zZSBjb2xvcnMgd2VyZSBwYWludGVkLgogICAgIGlmIChSZW5kZXJWaWV3
KiB2aWV3ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKSkKLSAgICAgICAgdmlldy0+cmVwYWludFNl
bGVjdGlvbigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5yZXBhaW50KCk7CiAKICAgICAv
LyBDYXJldCBhcHBlYXJzIGluIHRoZSBhY3RpdmUgZnJhbWUuCiAgICAgaWYgKGFjdGl2ZUFuZEZv
Y3VzZWQpCkBAIC0yMDkwLDcgKzIwODksNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVB
cHBlYXJhbmNlKCkKICNlbmRpZgogCiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0g
ICAgICAgIHZpZXctPmNsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigp
LmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxMTUsNyArMjExNCw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogICAgICAgICBSZW5kZXJP
YmplY3QqIGVuZFJlbmRlcmVyID0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCk7
CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBlbmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KTsKICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwot
ICAgICAgICB2aWV3LT5zZXRTZWxlY3Rpb24oc3RhcnRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVu
ZFJlbmRlcmVyLCBlbmRPZmZzZXQpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBz
dGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9KTsKICAg
ICB9CiB9CiAKQEAgLTIyMzIsMTMgKzIyMzEsMTMgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9u
OjpzZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIHVwZGF0ZVNlbGVjdGlvbkJ5VXBkYXRpbmdM
YXlvdXRPclN0eWxlKCptX2ZyYW1lKTsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygp
OwotICAgIGlmICghcm9vdCB8fCAhdmlldykKKyAgICBhdXRvKiByZW5kZXJWaWV3ID0gbV9mcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOwogCi0gICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gcm9vdC0+
c2VsZWN0aW9uQm91bmRzKGNsaXBUb1Zpc2libGVDb250ZW50KTsKLSAgICByZXR1cm4gY2xpcFRv
VmlzaWJsZUNvbnRlbnQgPyBpbnRlcnNlY3Rpb24oc2VsZWN0aW9uUmVjdCwgdmlldy0+dmlzaWJs
ZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KSkgOiBzZWxlY3Rpb25SZWN0OworICAgIGF1dG8mIHNlbGVjdGlvbiA9IHJlbmRlclZpZXctPnNl
bGVjdGlvbigpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdCA9IGNsaXBUb1Zpc2libGVDb250ZW50
ID8gc2VsZWN0aW9uLmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgOiBzZWxlY3Rpb24u
Ym91bmRzKCk7CisgICAgcmV0dXJuIGNsaXBUb1Zpc2libGVDb250ZW50ID8gaW50ZXJzZWN0aW9u
KHNlbGVjdGlvblJlY3QsIHJlbmRlclZpZXctPmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVj
dChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpIDogc2VsZWN0
aW9uUmVjdDsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0
UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhl
aWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRl
eCBjY2VmNGIyNzExZWFiMTRjOGFiM2QyMGRiZWJiODJlMjFkZmNkMGEwLi4yNzlkMmVlNjgxNzFl
ODk0NTJmNGZjYzRjZDJkYzEyOTM2NWUxMzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CkBAIC00NTIyLDggKzQ1MjIsOCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50c0ZvclNu
YXBzaG90KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdAogICAgIC8vIGFm
dGVyIHdlIHBhaW50IHRoZSBzbmFwc2hvdC4KICAgICBpZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb24g
PT0gRXhjbHVkZVNlbGVjdGlvbikgewogICAgICAgICBmb3IgKGF1dG8qIGZyYW1lID0gbV9mcmFt
ZS5wdHIoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFt
ZS5wdHIoKSkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHJvb3QtPmNsZWFyU2VsZWN0aW9uKCk7
CisgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOwog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAppbmRl
eCBjZDJiZDQzNzUxN2I2MzIwZjZjOTUzNDA4MjI5YjkxYjVkNzAxYWI3Li4yMTFjOTY1NTlmMTVh
OTE4OTliN2U0MTUxZjRlZjFhZjcyYzcxMjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAKQEAgLTEzNSwyMSArMTM1LDIwIEBAIHN0cnVjdCBTY29wZWRGcmFtZVNlbGVjdGlv
blN0YXRlIHsKICAgICBTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKEZyYW1lJiBmcmFtZSkKICAg
ICAgICAgOiBmcmFtZShmcmFtZSkKICAgICB7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290
ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByb290LT5nZXRTZWxlY3Rp
b24oc3RhcnRSZW5kZXJlciwgc3RhcnRPZmZzZXQsIGVuZFJlbmRlcmVyLCBlbmRPZmZzZXQpOwor
ICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQor
ICAgICAgICAgICAgc2VsZWN0aW9uID0gcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuZ2V0KCk7CiAg
ICAgfQogCiAgICAgflNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUoKQogICAgIHsKLSAgICAgICAg
aWYgKFJlbmRlclZpZXcqIHJvb3QgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAg
ICAgIHJvb3QtPnNldFNlbGVjdGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVu
ZGVyZXIsIGVuZE9mZnNldCwgUmVuZGVyVmlldzo6UmVwYWludE5vdGhpbmcpOworICAgICAgICBp
ZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKSB7CisgICAgICAg
ICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlv
bigpLnNldChzZWxlY3Rpb24udmFsdWUoKSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9k
ZTo6Tm90aGluZyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYgZnJhbWU7
Ci0gICAgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyOwotICAgIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXI7Ci0gICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7Ci0gICAg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIHN0ZDo6b3B0aW9uYWw8U2Vs
ZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0PiBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JN
KElPUykKQEAgLTE4NiwxMCArMTg1LDEwIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrCiAgICAg
aW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBp
bnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgQVNTRVJU
KHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwotICAgIHZpZXctPnNldFNlbGVj
dGlvbihzdGFydFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kUmVuZGVyZXIsIGVuZE9mZnNldCwg
UmVuZGVyVmlldzo6UmVwYWludE5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7
IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0sIFNl
bGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgIC8vIFdlIGNhcHR1
cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZha2UgdXAgdGhlIHNlbGVj
dGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RTZWxlY3Rpb24oKSB1c2Vz
IHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgotICAgIHJldHVybiBjcmVhdGVE
cmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJhbWUsIHZpZXctPnNlbGVj
dGlvbkJvdW5kcygpLCBvcHRpb25zKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIGNyZWF0ZURyYWdJ
bWFnZUZyb21TbmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9u
KCkuYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSwgb3B0aW9ucyksIG51bGxwdHIpOwog
fQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApp
bmRleCBiNjRmY2ViM2E5ZjM5OGNjMDE2ODNlNGZjZDJlNGVlZjYxNTNjOGJiLi45ZGRkMTg3ZGJm
N2IwNWJkZDgxYWM0Nzg0Zjk3OWJmMmYzNjBmMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0xNDQsOCArMTQ0LDkgQEAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3Rh
dGUoKTsKICAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbkJvdGgpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsK
LSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZ2V0U2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3Ms
IGVuZFBvcyk7CisgICAgICAgIGF1dG8mIHNlbGVjdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLnNl
bGVjdGlvbigpOworICAgICAgICBhdXRvIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0UG9zaXRp
b24oKTsKKyAgICAgICAgYXV0byBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kUG9zaXRpb24oKTsKICAg
ICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNvbnNpZGVy
ZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgogICAgICAgICBBU1NFUlQoc3RhcnQoKSArIGxlbigpID49
IChpc0xpbmVCcmVhaygpID8gMSA6IDApKTsKICAgICAgICAgdW5zaWduZWQgbGFzdFNlbGVjdGFi
bGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKQEAgLTYzOSw5
ICs2NDAsOCBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKQogICAgICAgICByZXR1cm4geyAwLCBtX2xlbiB9Owog
ICAgIAotICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgIHVuc2lnbmVkIGVuZDsKLSAgICByZW5kZXJl
cigpLnZpZXcoKS5nZXRTZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKKyAgICBhdXRvIHN0
YXJ0ID0gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQb3NpdGlvbigpOworICAg
IGF1dG8gZW5kID0gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCkuZW5kUG9zaXRpb24oKTsK
ICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkK
ICAgICAgICAgZW5kID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgZWxzZSBpZiAoc2Vs
ZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA1YWIxMzMyNDJjNTZjOWNiMDFmZDljNDY4
OWRkMTRlOTRkZmRkNmE5Li5iYWM1NTY5ODM0ZTkyOWIyM2M3ZGM4OWRlOWIzY2UyY2JjMDA1YWZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE4NjUsOCAr
MTg2NSw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0CiAgICAg
ICAgIHx8IGlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKSB8fCBzdHlsZSgpLmNvbHVtblNwYW4oKSA9
PSBDb2x1bW5TcGFuQWxsKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBpZiAodmll
dygpLnNlbGVjdGlvblVuc3BsaXRTdGFydCgpKSB7Ci0gICAgICAgIE5vZGUqIHN0YXJ0RWxlbWVu
dCA9IHZpZXcoKS5zZWxlY3Rpb25VbnNwbGl0U3RhcnQoKS0+bm9kZSgpOworICAgIGlmICh2aWV3
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgeworICAgICAgICBOb2RlKiBzdGFydEVsZW1lbnQgPSB2
aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnQoKS0+bm9kZSgpOwogICAgICAgICBpZiAoc3RhcnRFbGVt
ZW50ICYmIHN0YXJ0RWxlbWVudC0+cm9vdEVkaXRhYmxlRWxlbWVudCgpID09IGVsZW1lbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggOGJiYzI4OTU0ZjgwYmQ3YjcwMmU1MTBmYWYwMDNjZjg3
NTBlZjg2ZC4uZDU2MTI5ZjdkM2YzZDA2YTcxNjAwOTU4NDY4NjQ5YjRkNjVlZjY2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTE0MTcsOCArMTQxNyw4
IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0CiAgICAgcmV0
dXJuIHN0ID09IFNlbGVjdGlvblN0YXJ0CiAgICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkVuZAog
ICAgICAgICB8fCBzdCA9PSBTZWxlY3Rpb25Cb3RoCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rp
b25VbnNwbGl0U3RhcnQoKSA9PSB0aGlzCi0gICAgICAgIHx8IHZpZXcoKS5zZWxlY3Rpb25VbnNw
bGl0RW5kKCkgPT0gdGhpczsKKyAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0KCkg
PT0gdGhpcworICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsKIH0K
IAogdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYmFhMWY2NTRkNTE5MWQyODY3ZWRlYWJmYzhiYWQy
MmVlZGU1YjFlNC4uYjQ4MTBlYzMxNjFhYTBkOTU0MTViYzBiODIxMWM3ZmE3NzEzZGE1MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjIsNyArNjIsNyBAQCBj
bGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwotY2xhc3MgU2VsZWN0
aW9uU3VidHJlZVJvb3Q7CitjbGFzcyBTZWxlY3Rpb25SYW5nZURhdGE7CiBjbGFzcyBUcmFuc2Zv
cm1TdGF0ZTsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggNjQwYTdiYWVkOGViM2E3YTg0ZGJhYjU4Yzk2
YTQzOWFjM2Q2NjkyNi4uMjgxOGM2NGVjNGQ3YmFlNzA0NjgzZjkyMzVkZGIyY2FjYjE1OGIwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC02NDQs
MjMgKzY0NCwyMiBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSBzdGF0ZSkKIAogYm9vbCBSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCgpIGNv
bnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUgcyA9IHNlbGVjdGlvblN0YXRlKCk7Ci0gICAgaWYg
KHMgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IHNlbGVjdGlv
blN0YXRlKCk7CisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbk5vbmUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAocyA9PSBTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHN0YXRlID09
IFNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kOwotICAgIHZpZXcoKS5nZXRTZWxlY3Rpb25TdGFy
dEVuZChzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTsKLSAgICBpZiAocyA9PSBTZWxlY3Rp
b25TdGFydCkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDA7Ci0gICAgICAgIAor
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQb3NpdGlv
bigpOworICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gdmlldygpLnNlbGVjdGlvbigpLmVuZFBvc2l0
aW9uKCk7CisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvblN0YXJ0KQorICAgICAgICByZXR1cm4g
IXNlbGVjdGlvblN0YXJ0OworCiAgICAgdW5zaWduZWQgZW5kID0gZWxlbWVudCgpLT5oYXNDaGls
ZE5vZGVzKCkgPyBlbGVtZW50KCktPmNvdW50Q2hpbGROb2RlcygpIDogMTsKLSAgICBpZiAocyA9
PSBTZWxlY3Rpb25FbmQpCisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkVuZCkKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkVuZCA9PSBlbmQ7Ci0gICAgaWYgKHMgPT0gU2VsZWN0aW9uQm90aCkK
LSAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXJ0ID09IDAgJiYgc2VsZWN0aW9uRW5kID09IGVu
ZDsKLSAgICAgICAgCisgICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkJvdGgpCisgICAgICAgIHJl
dHVybiAhc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggZGYxMzMxOTgzMzc3ZTVhM2Q5NjMzNWFiOTJlNTkzN2Zj
ZDc0ZDNkMC4uM2Q5ZmZjYjJlNTBiNjk0MWEwNDExMjI4OGJmZDA4OGFiNzJjNGEzMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcApAQCAtMTQ0MSwxMyArMTQ0MSwxNSBA
QCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hl
cyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwogCiAgICAgLy8gTm93IGNhbGN1bGF0ZSBzdGFydFBv
cyBhbmQgZW5kUG9zIGZvciBwYWludGluZyBzZWxlY3Rpb24uCiAgICAgLy8gV2UgaW5jbHVkZSBh
IHNlbGVjdGlvbiB3aGlsZSBlbmRQb3MgPiAwCi0gICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBv
czsKKyAgICB1bnNpZ25lZCBzdGFydFBvczsKKyAgICB1bnNpZ25lZCBlbmRQb3M7CiAgICAgaWYg
KHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFy
ZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3RhcnRQb3MgPSAwOwogICAgICAgICBlbmRQb3Mg
PSB0ZXh0TGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmlldygpLmdldFNlbGVjdGlv
blN0YXJ0RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOworICAgICAgICBzdGFydFBvcyA9IHZpZXcoKS5z
ZWxlY3Rpb24oKS5zdGFydFBvc2l0aW9uKCk7CisgICAgICAgIGVuZFBvcyA9IHZpZXcoKS5zZWxl
Y3Rpb24oKS5lbmRQb3NpdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25TdGFydCkKICAgICAgICAgICAgIGVuZFBvcyA9IHRleHRMZW5ndGgoKTsKICAgICAg
ICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25FbmQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggYzI1MGE0
ZGZiNzUwMjM1ODRjYWYyMmViOGUxNWY3YzRkYjA1MWZhZS4uNzVlMjFjNWRmMzk0ODA2YmE4NDM0
MjJmZmE4NThjNjI2N2JlODhkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtNDQ2LDExICs0NDYsMTAgQEAgdm9pZCBSZW5kZXJU
ZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVu
ZGVyT2JqZWN0OjoKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHN0YXJ0
LCBlbmQ7Ci0gICAgcmVuZGVyZXIudmlldygpLmdldFNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0LCBl
bmQpOworICAgIGF1dG8gc3RhcnQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRQ
b3NpdGlvbigpOworICAgIGF1dG8gZW5kID0gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmVu
ZFBvc2l0aW9uKCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQpIHsKICAgICAgICAgZW5kID0gcmVuZGVyZXIudGV4dExlbmd0aCgpOwotCiAgICAgICAgIC8v
IHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4dCB0byBlbmQgb2YgbGluZQogICAg
ICAgICBpZiAoc3RhcnQgJiYgc3RhcnQgPT0gZW5kKQogICAgICAgICAgICAgc3RhcnQgPSBlbmQg
LSAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4IDg4Y2U4MzQ5
YjEzZWY0MTIxMmFhN2Y3YjQ4YzA4MGEwNmU0OTRmZGQuLjZmY2I1OTkyNWRkOTM2Yjg1YWFjMGI0
MDRiNjhhMzEyODBjNzA4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJG
bG9hdGluZ09iamVjdHMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lU2Vs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCkBAIC00Nyw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTc4
LDUzICs3NiwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9kaXNhbGxvd0xheW91dCB7IGZhbHNl
IH07CiB9OwogCi1zdHJ1Y3QgU2VsZWN0aW9uSXRlcmF0b3IgewotICAgIFNlbGVjdGlvbkl0ZXJh
dG9yKFJlbmRlck9iamVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQotICAg
IHsKLSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9i
amVjdCogY3VycmVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50Owot
ICAgIH0KLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiBtX3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAgICAgbV9jdXJyZW50
ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0gICAgICAgIGNoZWNr
Rm9yU3Bhbm5lcigpOwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3Bhbikgewot
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxh
c3QoKTsKLSAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
ICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOwotICAgICAgICAg
ICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fY3VycmVu
dDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQotICAgIHsK
LSAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9j
dXJyZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIg
PSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVu
dCk7Ci0gICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOwotICAgICAg
ICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQotCi0gICAgUmVuZGVy
T2JqZWN0KiBtX2N1cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19OwotCiBSZW5kZXJWaWV3
OjpSZW5kZXJWaWV3KERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKICAg
ICA6IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX2Zy
YW1lVmlldygqZG9jdW1lbnQudmlldygpKQorICAgICwgbV9zZWxlY3Rpb24oKnRoaXMpCiAgICAg
LCBtX2xhenlSZXBhaW50VGltZXIoKnRoaXMsICZSZW5kZXJWaWV3OjpsYXp5UmVwYWludFRpbWVy
RmlyZWQpCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlcigqdGhpcykKLSNlbmRpZgogewogICAgIHNldElzUmVuZGVyVmlldygpOwogCkBA
IC02OTcsMjkwICs2NTMsNiBAQCB2b2lkIFJlbmRlclZpZXc6OmFic29sdXRlUXVhZHMoVmVjdG9y
PEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCkgY29uc3QKICAgICBxdWFkcy5hcHBl
bmQoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXIoKS0+c2l6ZSgpKSk7CiB9CiAKLXN0YXRp
YyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihSZW5kZXJPYmplY3QqIG9iamVj
dCwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmNoaWxkQXQob2Zm
c2V0KTsKLSAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IG9iamVjdC0+bmV4dEluUHJlT3JkZXJB
ZnRlckNoaWxkcmVuKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyVmlldzo6c2VsZWN0aW9uQm91bmRz
KGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCBzZWxS
ZWN0ID0gc3VidHJlZVNlbGVjdGlvbkJvdW5kcyhjbGlwVG9WaXNpYmxlQ29udGVudCk7Ci0gICAg
cmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbFJlY3QpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclZp
ZXc6OnN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29u
c3QKLXsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxlY3Rpb25NYXA7Ci0gICAgU2VsZWN0aW9uTWFwIHNl
bGVjdGVkT2JqZWN0czsKLQotICAgIFJlbmRlck9iamVjdCogb3MgPSBzZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnQoKTsKLSAgICBhdXRvKiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25EYXRh
KCkuc2VsZWN0aW9uRW5kKCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAg
ICBpZiAoc2VsZWN0aW9uRW5kKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlclBvc2l0aW9u
KHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZhbHVlKCkp
OwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG9zKTsKLSAgICB3aGls
ZSAob3MgJiYgb3MgIT0gc3RvcCkgewotICAgICAgICBpZiAoKG9zLT5jYW5CZVNlbGVjdGlvbkxl
YWYoKSB8fCBvcyA9PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSB8fCBvcyA9PSBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpICYmIG9zLT5zZWxlY3Rpb25TdGF0ZSgpICE9
IFNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUg
Zm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFt
aW5lZCBhcyB3ZWxsLgotICAgICAgICAgICAgc2VsZWN0ZWRPYmplY3RzLnNldChvcywgc3RkOjpt
YWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqb3MsIGNsaXBUb1Zpc2libGVDb250ZW50
KSk7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBvcy0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgICAgICAgICB3aGlsZSAoY2IgJiYgIWlzPFJlbmRlclZpZXc+KCpjYikpIHsKLSAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5m
byA9IHNlbGVjdGVkT2JqZWN0cy5hZGQoY2IsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclNlbGVj
dGlvbkluZm8+KCpjYiwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgICAgICAgICAgICAgIGNi
ID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgb3MgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gTm93
IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9s
ZSBzZWxlY3Rpb24uCi0gICAgTGF5b3V0UmVjdCBzZWxSZWN0OwotICAgIFNlbGVjdGlvbk1hcDo6
aXRlcmF0b3IgZW5kID0gc2VsZWN0ZWRPYmplY3RzLmVuZCgpOwotICAgIGZvciAoU2VsZWN0aW9u
TWFwOjppdGVyYXRvciBpID0gc2VsZWN0ZWRPYmplY3RzLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kp
IHsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbyogaW5mbyA9IGktPnZhbHVlLmdldCgpOwot
ICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5h
dGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4K
LSAgICAgICAgTGF5b3V0UmVjdCBjdXJyUmVjdCA9IGluZm8tPnJlY3QoKTsKLSAgICAgICAgaWYg
KFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50
Q29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENv
bnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VyclJlY3QpKTsKLSAgICAg
ICAgICAgIGN1cnJSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOyAKLSAgICAg
ICAgfQotICAgICAgICBzZWxSZWN0LnVuaXRlKGN1cnJSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHNlbFJlY3Q7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbigpIGNvbnN0
Ci17Ci0gICAgcmVwYWludFN1YnRyZWVTZWxlY3Rpb24oKTsKLX0KLQotdm9pZCBSZW5kZXJWaWV3
OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbigpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxSZW5kZXJC
bG9jayo+IHByb2Nlc3NlZEJsb2NrczsKLQotICAgIGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxw
dHI7Ci0gICAgaWYgKHNlbGVjdGlvbkVuZCkKLSAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBv
c2l0aW9uKHNlbGVjdGlvbkVuZCwgc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpLnZh
bHVlKCkpOwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlv
bkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogbyA9IHNl
bGVjdGlvbkl0ZXJhdG9yLmN1cnJlbnQoKTsgbyAmJiBvICE9IGVuZDsgbyA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoIW8tPmNhbkJlU2VsZWN0aW9uTGVhZigpICYm
IG8gIT0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCkgJiYgbyAhPSBzZWxlY3Rpb25E
YXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KG8tPnNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKm8sIHRydWUpLnJlcGFpbnQoKTsK
LQotICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdh
cHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAg
ICAgZm9yIChSZW5kZXJCbG9jayogYmxvY2sgPSBvLT5jb250YWluaW5nQmxvY2soKTsgYmxvY2sg
JiYgIWlzPFJlbmRlclZpZXc+KCpibG9jayk7IGJsb2NrID0gYmxvY2stPmNvbnRhaW5pbmdCbG9j
aygpKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3
RW50cnkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBSZW5kZXJTZWxlY3Rp
b25JbmZvKCpibG9jaywgdHJ1ZSkucmVwYWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlclZpZXc6OnNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QqIHN0YXJ0LCBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVyT2JqZWN0KiBlbmQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9k
ZSkKLXsKLSAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3RhcnQgYW5kIGVuZCBvYmplY3RzIGFy
ZSBkZWZpbmVkLgotICAgIC8vIENoZWNrIHd3dy5tc25iYy5jb20gYW5kIHRyeSBjbGlja2luZyBh
cm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhhcHBlbmVkLgotICAgIGlmICgoc3Rh
cnQgJiYgIWVuZCkgfHwgKGVuZCAmJiAhc3RhcnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGNhcmV0Q2hhbmdlZCA9IG1fc2VsZWN0aW9uV2FzQ2FyZXQgIT0gZnJhbWUoKS5zZWxlY3Rp
b24oKS5pc0NhcmV0KCk7Ci0gICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGZyYW1lKCkuc2VsZWN0
aW9uKCkuaXNDYXJldCgpOwotICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFz
bid0IGNoYW5nZWQuCi0gICAgaWYgKG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID09IHN0YXJ0ICYm
IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9zID09IHN0YXJ0UG9zCi0gICAgICAgICYmIG1fc2Vs
ZWN0aW9uVW5zcGxpdEVuZCA9PSBlbmQgJiYgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID09IGVu
ZFBvcyAmJiAhY2FyZXRDaGFuZ2VkKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBh
bmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdh
dGhlci4KLSAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29l
cyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwotI2VuZGlmIC8vIEVOQUJMRShT
RVJWSUNFX0NPTlRST0xTKQotICAgIC8vIFNldCBnbG9iYWwgcG9zaXRpb25zIGZvciBuZXcgc2Vs
ZWN0aW9uLgotICAgIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0ID0gc3RhcnQ7Ci0gICAgbV9zZWxl
Y3Rpb25VbnNwbGl0U3RhcnRQb3MgPSBzdGFydFBvczsKLSAgICBtX3NlbGVjdGlvblVuc3BsaXRF
bmQgPSBlbmQ7Ci0gICAgbV9zZWxlY3Rpb25VbnNwbGl0RW5kUG9zID0gZW5kUG9zOwotICAgIGF1
dG8gb2xkU2VsZWN0aW9uRGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8T2xkU2VsZWN0aW9uRGF0YT4o
KTsKLSAgICBjbGVhclN1YnRyZWVTZWxlY3Rpb24oYmxvY2tSZXBhaW50TW9kZSwgKm9sZFNlbGVj
dGlvbkRhdGEpOwotICAgIHNldFNlbGVjdGlvbkRhdGEoU2VsZWN0aW9uU3VidHJlZURhdGEoc3Rh
cnQsIHN0YXJ0UG9zLCBlbmQsIGVuZFBvcykpOwotICAgIGFwcGx5U3VidHJlZVNlbGVjdGlvbihi
bG9ja1JlcGFpbnRNb2RlLCAqb2xkU2VsZWN0aW9uRGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1ZhbGlkT2JqZWN0Rm9yTmV3U2VsZWN0aW9uKGNvbnN0IFJlbmRlclZpZXcmIHZpZXcs
IGNvbnN0IFJlbmRlck9iamVjdCYgb2JqZWN0KQotewotICAgIHJldHVybiAob2JqZWN0LmNhbkJl
U2VsZWN0aW9uTGVhZigpIHx8ICZvYmplY3QgPT0gdmlldy5zZWxlY3Rpb25EYXRhKCkuc2VsZWN0
aW9uU3RhcnQoKSB8fCAmb2JqZWN0ID09IHZpZXcuc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVu
ZCgpKSAmJiBvYmplY3Quc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bk5vbmUgJiYgb2JqZWN0LmNvbnRhaW5pbmdCbG9jaygpOwotfQotCi12b2lkIFJlbmRlclZpZXc6
OmNsZWFyU3VidHJlZVNlbGVjdGlvbihTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9ja1JlcGFpbnRN
b2RlLCBPbGRTZWxlY3Rpb25EYXRhJiBvbGRTZWxlY3Rpb25EYXRhKSBjb25zdAotewotICAgIC8v
IFJlY29yZCB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMuICBUaGVzZSB3aWxsIGJlIHVzZWQgbGF0
ZXIKLSAgICAvLyB3aGVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0aGUgbmV3IHNlbGVjdGVkIG9iamVj
dHMuCi0gICAgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyA9IHNlbGVjdGlvbkRh
dGEoKS5zZWxlY3Rpb25TdGFydFBvcygpOwotICAgIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9u
RW5kUG9zID0gc2VsZWN0aW9uRGF0YSgpLnNlbGVjdGlvbkVuZFBvcygpOwotICAgIAotICAgIC8v
IEJsb2NrcyBjb250YWluIHNlbGVjdGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRo
ZW0sIGVpdGhlciBvbiB0aGUgbGVmdCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJs
b2Nrcy4KLSAgICAvLyBJbiBvcmRlciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2Ug
aGF2ZSB0byBleGFtaW5lIGxlZnQsIG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxs
eSwgc2luY2Ugb3RoZXJ3aXNlCi0gICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0
IHJlbWFpbiB0aGUgc2FtZSBldmVuIHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotCi0gICAg
UmVuZGVyT2JqZWN0KiBvcyA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpOwotICAg
IGF1dG8qIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAg
ICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb25FbmQpCi0g
ICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oc2VsZWN0aW9uRW5kLCBzZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0
b3Igc2VsZWN0aW9uSXRlcmF0b3Iob3MpOwotICAgIHdoaWxlIChvcyAmJiBvcyAhPSBzdG9wKSB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkT2JqZWN0Rm9yTmV3U2VsZWN0aW9uKCp0aGlzLCAqb3MpKSB7
Ci0gICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5l
IGdhcHMgYW5kIG1hcmdpbiBnYXBzLiAgVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0g
ICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnNlbGVjdGVkT2JqZWN0cy5zZXQob3MsIHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKm9zLCB0cnVlKSk7Ci0gICAgICAgICAg
ICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TmV3WE9ST2xkKSB7Ci0gICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIGNiID0gb3MtPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAg
ICAgICAgIHdoaWxlIChjYiAmJiAhaXM8UmVuZGVyVmlldz4oKmNiKSkgewotICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJ
bmZvID0gb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZEJsb2Nrcy5hZGQoY2IsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNiKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2IgPSBjYi0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgb3MgPSBzZWxlY3Rpb25J
dGVyYXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvKiBzZWxlY3RlZE9iamVjdCA6
IG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRPYmplY3RzLmtleXMoKSkKLSAgICAgICAgc2VsZWN0
ZWRPYmplY3QtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uTm9uZSk7Ci19Ci0K
LXZvaWQgUmVuZGVyVmlldzo6YXBwbHlTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJlcGFpbnRN
b2RlIGJsb2NrUmVwYWludE1vZGUsIGNvbnN0IE9sZFNlbGVjdGlvbkRhdGEmIG9sZFNlbGVjdGlv
bkRhdGEpCi17Ci0gICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmpl
Y3RzIGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAotICAgIGlmIChzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSAmJiBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9u
U3RhcnQoKSA9PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgIHNlbGVj
dGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNl
bGVjdGlvbkJvdGgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9uRGF0YSgpLnNl
bGVjdGlvblN0YXJ0KCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3Rh
cnQoKS0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25TdGFydCk7Ci0gICAgICAg
IGlmIChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBzZWxlY3Rp
b25EYXRhKCkuc2VsZWN0aW9uRW5kKCktPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0
aW9uRW5kKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uRGF0YSgpLnNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgYXV0byogc2VsZWN0aW9uRGF0YUVu
ZCA9IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHNl
bGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCi0gICAgICAg
IHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihzZWxlY3Rpb25EYXRhRW5kLCBz
ZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9u
SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRl
cmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9
IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVy
ID09IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25TdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJlciA9
PSBzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9u
U3RhdGVJZk5lZWRlZChTZWxlY3Rpb25JbnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1Jl
cGFpbnRNb2RlICE9IFJlcGFpbnROb3RoaW5nKQotICAgICAgICBsYXllcigpLT5jbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotCi0gICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBz
dGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2Fp
biBhbmQKLSAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KLSAgICBTZWxl
Y3RlZE9iamVjdE1hcCBuZXdTZWxlY3RlZE9iamVjdHM7Ci0gICAgU2VsZWN0ZWRCbG9ja01hcCBu
ZXdTZWxlY3RlZEJsb2NrczsKLSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJh
dG9yKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudFJlbmRl
cmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIg
IT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0
KCkpIHsKLSAgICAgICAgaWYgKGlzVmFsaWRPYmplY3RGb3JOZXdTZWxlY3Rpb24oKnRoaXMsICpj
dXJyZW50UmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2Vs
ZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0
aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNv
bGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0
R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3Qp
OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkp
Ci0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFs
c2UpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0cy5zZXQoY3VycmVu
dFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKLQotICAgICAgICAgICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3
PigqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5h
ZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+KCpjb250YWluaW5nQmxvY2spOwotICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0KLSNpZiBFTkFCTEUoU0VS
VklDRV9DT05UUk9MUykKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5h
ZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0
cygpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE5vdGhpbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwotICAgIGZvciAoY29uc3QgYXV0byYgc2VsZWN0ZWRP
YmplY3RJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3RlZE9iamVjdHMpIHsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBvYmogPSBzZWxlY3RlZE9iamVjdEluZm8ua2V5OwotICAgICAgICBSZW5k
ZXJTZWxlY3Rpb25JbmZvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRPYmplY3RzLmdldChvYmopOwot
ICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKiBvbGRJbmZvID0gc2VsZWN0ZWRPYmplY3RJbmZv
LnZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9
IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkK
LSAgICAgICAgICAgIHx8IChzZWxlY3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnQoKSA9PSBvYmog
JiYgb2xkU2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25TdGFydFBvcyAhPSBzZWxlY3Rpb25EYXRhKCku
c2VsZWN0aW9uU3RhcnRQb3MoKSkKLSAgICAgICAgICAgIHx8IChzZWxlY3Rpb25EYXRhKCkuc2Vs
ZWN0aW9uRW5kKCkgPT0gb2JqICYmIG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uRW5kUG9zICE9
IHNlbGVjdGlvbkRhdGEoKS5zZWxlY3Rpb25FbmRQb3MoKSkpIHsKLSAgICAgICAgICAgIG9sZElu
Zm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAg
ICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkT2JqZWN0
cy5yZW1vdmUob2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IEFueSBuZXcgb2JqZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9i
amVjdHMgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoY29u
c3QgYXV0byYgc2VsZWN0ZWRPYmplY3RJbmZvIDogbmV3U2VsZWN0ZWRPYmplY3RzKQotICAgICAg
ICBzZWxlY3RlZE9iamVjdEluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55
IG9mIHRoZSBvbGQgYmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3Rl
ZEJsb2NrSW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEuc2VsZWN0ZWRCbG9ja3MpIHsKLSAgICAgICAg
Y29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5OwotICAgICAg
ICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5n
ZXQoYmxvY2spOwotICAgICAgICBSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8qIG9sZEluZm8gPSBz
ZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9s
ZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9
IG5ld0luZm8tPnN0YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKLSAg
ICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+cmVwYWlu
dCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IGJsb2NrcyB0
aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQgc28g
dGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChjb25zdCBhdXRvJiBzZWxlY3RlZEJs
b2NrSW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52
YWx1ZS0+cmVwYWludCgpOwotfQotCi12b2lkIFJlbmRlclZpZXc6OmdldFNlbGVjdGlvbihSZW5k
ZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3RhcnRP
ZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiYgZW5kT2Zmc2V0KSBjb25zdAotewotICAgIHN0YXJ0UmVuZGVyZXIgPSBtX3NlbGVjdGlvblVu
c3BsaXRTdGFydDsKLSAgICBzdGFydE9mZnNldCA9IG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0UG9z
OwotICAgIGVuZFJlbmRlcmVyID0gbV9zZWxlY3Rpb25VbnNwbGl0RW5kOwotICAgIGVuZE9mZnNl
dCA9IG1fc2VsZWN0aW9uVW5zcGxpdEVuZFBvczsKLX0KLQotdm9pZCBSZW5kZXJWaWV3OjpjbGVh
clNlbGVjdGlvbigpCi17Ci0gICAgbGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcygp
OwotICAgIHNldFNlbGVjdGlvbihudWxscHRyLCBzdGQ6Om51bGxvcHQsIG51bGxwdHIsIHN0ZDo6
bnVsbG9wdCwgUmVwYWludE5ld01pbnVzT2xkKTsKLX0KLQogYm9vbCBSZW5kZXJWaWV3Ojpwcmlu
dGluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkucHJpbnRpbmcoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCmluZGV4IDU4MTg4OGRlNzMyYTBjZWE5ZmZiN2Q1
OTdlNzdkMTliOGJiZjRkZjQuLmMzN2ViYmZjMjI4ZjNlNmE2NjYyMzJiYzk2ZGE5MTI3NzdmNWY0
M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaApAQCAtMjYsMjIgKzI2LDE4
IEBACiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3Qu
aCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRo
ZXJlci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VRdWFs
aXR5Q29udHJvbGxlcjsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRl
clF1b3RlOwogCi1jbGFzcyBSZW5kZXJWaWV3IGZpbmFsIDogcHVibGljIFJlbmRlckJsb2NrRmxv
dywgcHVibGljIFNlbGVjdGlvblN1YnRyZWVSb290IHsKK2NsYXNzIFJlbmRlclZpZXcgZmluYWwg
OiBwdWJsaWMgUmVuZGVyQmxvY2tGbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJWaWV3KERvY3Vt
ZW50JiwgUmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyVmlldygpOwpAQCAtODUs
MTUgKzgxLDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIgd2hvc2UgYmFj
a2dyb3VuZCBzdHlsZSBpcyB1c2VkIHRvIHBhaW50IHRoZSByb290IGJhY2tncm91bmQuCiAgICAg
UmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JSb290QmFja2dyb3VuZCgpIGNvbnN0OwogCi0gICAg
ZW51bSBTZWxlY3Rpb25SZXBhaW50TW9kZSB7IFJlcGFpbnROZXdYT1JPbGQsIFJlcGFpbnROZXdN
aW51c09sZCwgUmVwYWludE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJP
YmplY3QqIHN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgUmVuZGVyT2Jq
ZWN0KiBlbmRPYmplY3QsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9u
UmVwYWludE1vZGUgPSBSZXBhaW50TmV3WE9ST2xkKTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbihS
ZW5kZXJPYmplY3QqJiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiYgc3Rh
cnRPZmZzZXQsIFJlbmRlck9iamVjdComIGVuZFJlbmRlcmVyLCBzdGQ6Om9wdGlvbmFsPHVuc2ln
bmVkPiYgZW5kT2Zmc2V0KSBjb25zdDsKLSAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7Ci0gICAg
UmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25VbnNwbGl0U3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGlvblVuc3BsaXRTdGFydDsgfQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9uVW5zcGxp
dEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uVW5zcGxpdEVuZDsgfQotICAgIEludFJl
Y3Qgc2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPSB0cnVlKSBjb25z
dDsKLSAgICB2b2lkIHJlcGFpbnRTZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2b2lkIGdldFNlbGVj
dGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzdGFydCwgdW5zaWduZWQmIGVuZCkgY29uc3QgeyBzZWxl
Y3Rpb25EYXRhKCkuc2VsZWN0aW9uU3RhcnRFbmRQb3NpdGlvbnMoc3RhcnQsIGVuZCk7IH0KKyAg
ICBTZWxlY3Rpb25SYW5nZURhdGEmIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9
CiAKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKQEAgLTMxMiwyMyArMzAwLDE0IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xlYXJTdWJ0cmVlU2VsZWN0aW9uKFNlbGVjdGlvblJl
cGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUsIE9sZFNlbGVjdGlvbkRhdGEmKSBjb25zdDsKLSAg
ICB2b2lkIGFwcGx5U3VidHJlZVNlbGVjdGlvbihTZWxlY3Rpb25SZXBhaW50TW9kZSwgY29uc3Qg
T2xkU2VsZWN0aW9uRGF0YSYpOwotICAgIExheW91dFJlY3Qgc3VidHJlZVNlbGVjdGlvbkJvdW5k
cyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdm9pZCByZXBh
aW50U3VidHJlZVNlbGVjdGlvbigpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIEZyYW1lVmlldyYg
bV9mcmFtZVZpZXc7CiAKLSAgICBSZW5kZXJPYmplY3QqIG1fc2VsZWN0aW9uVW5zcGxpdFN0YXJ0
IHsgbnVsbHB0ciB9OwotICAgIFJlbmRlck9iamVjdCogbV9zZWxlY3Rpb25VbnNwbGl0RW5kIHsg
bnVsbHB0ciB9OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxp
dFN0YXJ0UG9zOwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IG1fc2VsZWN0aW9uVW5zcGxp
dEVuZFBvczsKLQogICAgIC8vIEluY2x1ZGUgdGhpcyBSZW5kZXJWaWV3LgogICAgIHVpbnQ2NF90
IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKIAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJl
Z2lvbj4gbV9hY2N1bXVsYXRlZFJlcGFpbnRSZWdpb247CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRh
IG1fc2VsZWN0aW9uOwogCiAgICAgLy8gRklYTUU6IE9ubHkgdXNlZCBieSBlbWJlZGRlZCBXZWJW
aWV3cyBpbnNpZGUgQXBwS2l0IE5TVmlld3MuICBGaW5kIGEgd2F5IHRvIHJlbW92ZS4KICAgICBz
dHJ1Y3QgTGVnYWN5UHJpbnRpbmcgewpAQCAtMzYwLDcgKzMzOSw2IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9yZW5kZXJDb3VudGVyQ291bnQgeyAwIH07CiAgICAgdW5zaWduZWQgbV9yZW5k
ZXJUcmVlSW50ZXJuYWxNdXRhdGlvbkNvdW50ZXIgeyAwIH07CiAKLSAgICBib29sIG1fc2VsZWN0
aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9oYXNTb2Z0d2FyZUZpbHRlcnMgeyBm
YWxzZSB9OwogICAgIGJvb2wgbV91c2VzRmlyc3RMaW5lUnVsZXMgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV91c2VzRmlyc3RMZXR0ZXJSdWxlcyB7IGZhbHNlIH07CkBAIC0zNzIsOSArMzUwLDYgQEAg
cHJpdmF0ZToKICAgICBIYXNoU2V0PFJlbmRlckVsZW1lbnQqPiBtX3Zpc2libGVJblZpZXdwb3J0
UmVuZGVyZXJzOwogICAgIFZlY3RvcjxSZWZQdHI8UmVuZGVyV2lkZ2V0Pj4gbV9wcm90ZWN0ZWRS
ZW5kZXJXaWRnZXRzOwogCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgU2VsZWN0
aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOwotI2VuZGlmCiAjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKICAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJveCo+IG1fYm94
ZXNXaXRoU2Nyb2xsU25hcFBvc2l0aW9uczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXggZGVjNmRmYTkyZGZmY2U4NTQ3YTlj
OGRhNTdhZWE1NGFjZDk4MjNkZi4uZWNlYzAyNzEyMzk5NDk5NmYwYzI4MWU5YWFmYTc4NzA0YmU0
MTE2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbElu
T25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUu
Y3BwCkBAIC0xMzMsNyArMTMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuY3BwIgogI2lu
Y2x1ZGUgIlJvb3RJbmxpbmVCb3guY3BwIgogI2luY2x1ZGUgIlNjcm9sbEFsaWdubWVudC5jcHAi
Ci0jaW5jbHVkZSAiU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwIgorI2luY2x1ZGUgIlNlbGVjdGlv
blJhbmdlRGF0YS5jcHAiCiAjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dC5jcHAiCiAjaW5jbHVk
ZSAiU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNjNjk3OWRiNmMzNTAwYTVjZWNkOTAyNDM4
MDc1MmM1MGJjNjQ4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDi
gJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbi5o
IgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3N0cnVjdCBTZWxlY3Rpb25E
YXRhIHsKKyAgICB1c2luZyBSZW5kZXJlck1hcCA9IEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PjsKKyAgICB1c2luZyBSZW5kZXJCbG9j
a01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2tTZWxlY3Rpb25JbmZvPj47CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFy
dFBvc2l0aW9uOworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvc2l0aW9uOworICAg
IFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9Owor
CitjbGFzcyBTZWxlY3Rpb25JdGVyYXRvciB7CitwdWJsaWM6CisgICAgU2VsZWN0aW9uSXRlcmF0
b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKKyAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCisgICAg
eworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2Jq
ZWN0KiBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Cisg
ICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCogbmV4dCgpCisgICAgeworICAgICAgICBSZW5k
ZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0
ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOworICAgICAgICBtX2N1cnJlbnQg
PSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKKyAgICAgICAgY2hlY2tG
b3JTcGFubmVyKCk7CisgICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7Cisg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFz
dCgpOworICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAg
ICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7CisgICAgICAgICAg
ICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9jdXJyZW50
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCisgICAgewor
ICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1
cnJlbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9
IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50
KTsKKyAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7CisgICAgICAg
IG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKKyAgICB9CisKKyAgICBSZW5kZXJP
YmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKK307CisKK3N0YXRpYyBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGls
ZEF0KG9mZnNldCk7CisgICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5Q
cmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZFJlbmRlcmVy
Rm9yU2VsZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFNlbGVjdGlv
blJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uKQoreworICAgIHJldHVybiAocmVuZGVyZXIu
Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCB8fCAm
cmVuZGVyZXIgPT0gc2VsZWN0aW9uLmVuZCkKKyAgICAgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUKKyAgICAgICAgJiYgcmVuZGVy
ZXIuY29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK3N0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgYXV0
byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0
dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmlu
Z0Jsb2NrOworfQorCitzdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0KGNvbnN0IFNlbGVjdGlv
blJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQor
eworICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydFBv
c2l0aW9uLCBzZWxlY3Rpb24uZW5kUG9zaXRpb24sIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tz
IGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0
aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgor
ICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRv
IGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5j
ZSBvdGhlcndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWlu
IHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgUmVuZGVyT2Jq
ZWN0KiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydDsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBu
dWxscHRyOworICAgIGlmIChzZWxlY3Rpb24uZW5kKQorICAgICAgICBzdG9wID0gcmVuZGVyZXJB
ZnRlclBvc2l0aW9uKCpzZWxlY3Rpb24uZW5kLCBzZWxlY3Rpb24uZW5kUG9zaXRpb24udmFsdWUo
KSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOworICAg
IHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVu
ZGVyZXJGb3JTZWxlY3Rpb24oKnN0YXJ0LCBzZWxlY3Rpb24pKSB7CisgICAgICAgICAgICAvLyBC
bG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBn
YXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAgIG9sZFNlbGVj
dGlvbkRhdGEucmVuZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxl
Y3Rpb25JbmZvPigqc3RhcnQsIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVy
ZW5jZSkgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxv
Y2tCZWxvd1ZpZXcoKnN0YXJ0KTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dW
aWV3KCpibG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgYmxvY2tJbmZvID0gb2xk
U2VsZWN0aW9uRGF0YS5ibG9ja3MuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3Vu
aXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpibG9jayk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRl
cmF0b3IubmV4dCgpOworICAgIH0KKyAgICByZXR1cm4gb2xkU2VsZWN0aW9uRGF0YTsKK30KKwor
U2VsZWN0aW9uUmFuZ2VEYXRhOjpTZWxlY3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYgdmlldykK
KyAgICA6IG1fcmVuZGVyVmlldyh2aWV3KQorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQor
ICAgICwgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIodmlldykKKyNlbmRpZgoreworfQorCit2b2lk
IFNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KGNvbnN0IENvbnRleHQmIHNlbGVjdGlvbiwgUmVwYWlu
dE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICAvLyBNYWtlIHN1cmUgYm90aCBvdXIgc3Rh
cnQgYW5kIGVuZCBvYmplY3RzIGFyZSBkZWZpbmVkLgorICAgIC8vIENoZWNrIHd3dy5tc25iYy5j
b20gYW5kIHRyeSBjbGlja2luZyBhcm91bmQgdG8gZmluZCB0aGUgY2FzZSB3aGVyZSB0aGlzIGhh
cHBlbmVkLgorICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0ICYmICFzZWxlY3Rpb24uZW5kKSB8fCAo
c2VsZWN0aW9uLmVuZCAmJiAhc2VsZWN0aW9uLnN0YXJ0KSkKKyAgICAgICAgcmV0dXJuOworICAg
IC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAgYXV0
byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOwor
ICAgIGlmIChzZWxlY3Rpb24gPT0gbV9zZWxlY3Rpb25Db250ZXh0ICYmIG1fc2VsZWN0aW9uV2Fz
Q2FyZXQgPT0gaXNDYXJldCkKKyAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3Rp
ZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBhcmUgYWJvdXQgdG8gZ2F0aGVyLgorICAgIC8vIFRo
ZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBh
bmQgaXMgZGVzdHJveWVkLgorICAgIGF1dG8gcmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0
R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOworI2VuZGlmCisgICAgbV9zZWxlY3Rp
b25XYXNDYXJldCA9IGlzQ2FyZXQ7CisgICAgYXBwbHkoc2VsZWN0aW9uLCBibG9ja1JlcGFpbnRN
b2RlKTsKK30KKwordm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OmNsZWFyKCkKK3sKKyAgICBtX3Jl
bmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgIHNldCh7
bnVsbHB0ciwgbnVsbHB0ciwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHR9LCBTZWxlY3Rpb25S
YW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Cit9CisKK3ZvaWQgU2VsZWN0aW9u
UmFuZ2VEYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4g
cHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9zZWxlY3Rpb25Db250ZXh0LmVuZCkKKyAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlclBv
c2l0aW9uKCptX3NlbGVjdGlvbkNvbnRleHQuZW5kLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9z
aXRpb24udmFsdWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Io
bV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyID0gc2Vs
ZWN0aW9uSXRlcmF0b3IuY3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAhPSBlbmQ7IHJl
bmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmICghcmVuZGVy
ZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4
dC5zdGFydCAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChyZW5kZXJlci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAg
ICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBt
YXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAo
YXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAg
IGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVl
KS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgU2VsZWN0aW9uUmFu
Z2VEYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVD
b250ZW50KSBjb25zdAoreworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIHJlbmRlcmVy
czsKKyAgICBSZW5kZXJPYmplY3QqIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0Owor
ICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKm1fc2VsZWN0
aW9uQ29udGV4dC5lbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsK
KyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hp
bGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0IHx8IHN0
YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQpCisgICAgICAgICAgICAmJiBzdGFydC0+c2Vs
ZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICAgICAg
ICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQg
bWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAg
cmVuZGVyZXJzLnNldChzdGFydCwgc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZv
Pigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZ
ZXMpKTsKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5pbmdCbG9jaygp
OworICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3PigqYmxvY2spKSB7
CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+JiBi
bG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJT
ZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2li
bGVDb250ZW50OjpZZXMpOworICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRhaW5p
bmdCbG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0YXJ0ID0gc2Vs
ZWN0aW9uSXRlcmF0b3IubmV4dCgpOworICAgIH0KKworICAgIC8vIE5vdyBjcmVhdGUgYSBzaW5n
bGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9uLgor
ICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKKyAgICBmb3IgKGF1dG8mIGluZm8gOiByZW5k
ZXJlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVjdCgp
IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFwIHRv
IHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgICAgIExheW91dFJlY3QgY3VycmVudFJlY3QgPSBpbmZv
LT5yZWN0KCk7CisgICAgICAgIGlmIChhdXRvKiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+cmVw
YWludENvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJlcGFp
bnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGN1cnJlbnRSZWN0KSk7
CisgICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFic1F1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3go
KTsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0KTsK
KyAgICB9CisgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QpOworfQorCit2
b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkoY29uc3QgQ29udGV4dCYgbmV3U2VsZWN0aW9u
LCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQoreworICAgIGF1dG8gb2xkU2VsZWN0aW9u
RGF0YSA9IGNvbGxlY3QobV9zZWxlY3Rpb25Db250ZXh0LCBibG9ja1JlcGFpbnRNb2RlID09IFJl
cGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlvbi4K
KyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMua2V5
cygpKQorICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbk5vbmUpOworICAgIG1fc2VsZWN0aW9uQ29udGV4dCA9IG5ld1NlbGVj
dGlvbjsKKyAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMg
YmV0d2VlbiBzZWxlY3Rpb25TdGFydCBhbmQgc2VsZWN0aW9uRW5kCisgICAgaWYgKG1fc2VsZWN0
aW9uQ29udGV4dC5zdGFydCAmJiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgPT0gbV9zZWxlY3Rp
b25Db250ZXh0LmVuZCkKKyAgICAgICAgbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0LT5zZXRTZWxl
Y3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCk7CisgICAgZWxz
ZSB7CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQpCisgICAgICAgICAgICBt
X3NlbGVjdGlvbkNvbnRleHQuc3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGFydCk7CisgICAgICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQu
ZW5kKQorICAgICAgICAgICAgbV9zZWxlY3Rpb25Db250ZXh0LmVuZC0+c2V0U2VsZWN0aW9uU3Rh
dGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCk7CisgICAgfQorCisgICAgYXV0
byogc2VsZWN0aW9uU3RhcnQgPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQ7CisgICAgYXV0byog
c2VsZWN0aW9uRGF0YUVuZCA9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQ7CisgICAgUmVuZGVyT2Jq
ZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQor
ICAgICAgICBzZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyUG9zaXRpb24oKnNlbGVjdGlvbkRh
dGFFbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRQb3NpdGlvbi52YWx1ZSgpKTsKKyAgICBTZWxl
Y3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7CisgICAgZm9y
IChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVy
ICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNl
bGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09
IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rp
b25Db250ZXh0LmVuZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJl
bnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tSZXBhaW50
TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKKyAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVy
KCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisKKyAgICAvLyBOb3cgdGhhdCB0
aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywg
d2FsayB0aGVtIGFnYWluIGFuZAorICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBs
aXN0LgorICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVyZXJz
OworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOwor
ICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gU2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQp
OworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJl
bnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVu
ZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzVmFsaWRS
ZW5kZXJlckZvclNlbGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBtX3NlbGVjdGlvbkNvbnRleHQp
KSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2Vs
ZWN0aW9uSW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJl
bnRSZW5kZXJlciwgdHJ1ZSk7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgICAg
ICAgICBmb3IgKGF1dG8mIHJlY3QgOiBzZWxlY3Rpb25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25S
ZWN0cygpKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qo
c2VsZWN0aW9uSW5mby0+cmVwYWludENvbnRhaW5lcigpLCByZWN0KTsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudFJlbmRlcmVyLT5pc1RleHRPckxpbmVCcmVhaygpKQorICAgICAgICAgICAgICAg
IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLnNldFRleHRPbmx5KGZhbHNlKTsKKyNlbmRpZgorICAg
ICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMuc2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92
ZShzZWxlY3Rpb25JbmZvKSk7CisgICAgICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBj
dXJyZW50UmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKGNv
bnRhaW5pbmdCbG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYg
YmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0
cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqY29udGFpbmluZ0Jsb2NrKTsK
KyAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpOworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAg
ICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWlu
dENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJlY3RzKCkpOworI2VuZGlmCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50
TW9kZTo6Tm90aGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhl
IG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rp
b24/CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG9sZFNlbGVjdGlvbkRh
dGEucmVuZGVyZXJzKSB7CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0ZWRSZW5kZXJl
ckluZm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRSZW5kZXJlcnMu
Z2V0KHJlbmRlcmVyKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkUmVuZGVyZXJJ
bmZvLnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgp
ICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRl
KCkKKyAgICAgICAgICAgIHx8IChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQgPT0gcmVuZGVyZXIg
JiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydFBvc2l0aW9uICE9IG1fc2VsZWN0aW9uQ29udGV4dC5z
dGFydFBvc2l0aW9uKQorICAgICAgICAgICAgfHwgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQgPT0g
cmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5lbmRQb3NpdGlvbiAhPSBtX3NlbGVjdGlvbkNv
bnRleHQuZW5kUG9zaXRpb24pKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7Cisg
ICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFp
bnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRlcmVycy5yZW1vdmUocmVuZGVy
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55IG5ldyBv
YmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0
LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgZm9yIChhdXRvJiBzZWxlY3Rl
ZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVjdGVkUmVuZGVyZXJzKQorICAgICAgICBzZWxlY3RlZFJl
bmRlcmVySW5mby52YWx1ZS0+cmVwYWludCgpOworCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9s
ZCBibG9ja3MgY2hhbmdlZD8KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xk
U2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsKKyAgICAgICAgYXV0byogYmxvY2sgPSBzZWxlY3RlZEJs
b2NrSW5mby5rZXk7CisgICAgICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5n
ZXQoYmxvY2spOworICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2VsZWN0ZWRCbG9ja0luZm8udmFs
dWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5l
d0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7
CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5m
bykgeworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAg
ICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQW55IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3Qg
Zm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRh
dGVkLgorICAgIGZvciAoYXV0byYgc2VsZWN0ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2Nr
cykKKyAgICAgICAgc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUtPnJlcGFpbnQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NlbGVjdGlvblJhbmdlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlv
blJhbmdlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZmYzZGI0Y2E1MzI2OWQ1ZTU0NTcyMTBlZjA3NWM1
ZGJmZjZhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2Vs
ZWN0aW9uUmFuZ2VEYXRhLmgKQEAgLTAsMCArMSw4NiBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
UmVuZGVyU2VsZWN0aW9uSW5mby5oIgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisj
aW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YTsKKyAgICAKK2NsYXNzIFNlbGVjdGlv
blJhbmdlRGF0YSB7CitwdWJsaWM6CisgICAgU2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZpZXcm
KTsKKyAgICAKKyAgICBzdHJ1Y3QgQ29udGV4dCB7CisgICAgICAgIFJlbmRlck9iamVjdCogc3Rh
cnQgeyBudWxscHRyIH07CisgICAgICAgIFJlbmRlck9iamVjdCogZW5kIHsgbnVsbHB0ciB9Owor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvc2l0aW9uOworICAgICAgICBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBlbmRQb3NpdGlvbjsKKworICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ29udGV4dCYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGFydCA9PSBvdGhlci5zdGFydCAmJiBlbmQgPT0gb3RoZXIuZW5kICYmIHN0YXJ0
UG9zaXRpb24gPT0gb3RoZXIuc3RhcnRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA9PSBvdGhlci5l
bmRQb3NpdGlvbjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIFJlcGFpbnRN
b2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9OworICAgIHZvaWQgc2V0KGNv
bnN0IENvbnRleHQmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAg
IGNvbnN0IENvbnRleHQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dDsg
fQorCisgICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydDsgfQorICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb25Db250ZXh0LmVuZDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24oKSBj
b25zdCB7IEFTU0VSVChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQb3NpdGlvbik7IHJldHVybiBt
X3NlbGVjdGlvbkNvbnRleHQuc3RhcnRQb3NpdGlvbi52YWx1ZSgpOyB9CisgICAgdW5zaWduZWQg
ZW5kUG9zaXRpb24oKSBjb25zdCB7IEFTU0VSVChtX3NlbGVjdGlvbkNvbnRleHQuZW5kUG9zaXRp
b24pOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LmVuZFBvc2l0aW9uLnZhbHVlKCk7IH0KKwor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNv
bGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKTsgfQorICAgIEludFJlY3QgYm91
bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRz
KENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOyB9CisgICAgdm9pZCByZXBhaW50KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywg
Tm8gfTsKKyAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNv
bnN0OworICAgIHZvaWQgYXBwbHkoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlKTsKKworICAg
IGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKKyAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7
CisjZW5kaWYKKyAgICBDb250ZXh0IG1fc2VsZWN0aW9uQ29udGV4dDsKKyAgICBib29sIG1fc2Vs
ZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxODk1NjQ2MmYzY2M1NTRjNWQ1ZmQ4NjE4
YTA2MGI3ODU4YjE2YzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0g
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
ZWxlY3Rpb25TdWJ0cmVlUm9vdC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJQb3NpdGlvbi5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVNlbGVjdGlvblN1YnRyZWVSb290OjpT
ZWxlY3Rpb25TdWJ0cmVlUm9vdCgpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YzY4YTcwODdhMjkxNDlkMmMyMTQ4NzZmOTQ1NTZj
MjQ5NGY5YjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMDMgKzAsMCBAQAotIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlh
IFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci0KLWNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290IHsK
LXB1YmxpYzoKLSAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PiBTZWxlY3RlZE9iamVjdE1hcDsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2tTZWxlY3Rpb25JbmZvPj4gU2VsZWN0ZWRCbG9ja01hcDsKLQotICAgIHN0cnVjdCBPbGRT
ZWxlY3Rpb25EYXRhIHsKLSAgICAgICAgT2xkU2VsZWN0aW9uRGF0YSgpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0
UG9zOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rpb25FbmRQb3M7Ci0g
ICAgICAgIFNlbGVjdGVkT2JqZWN0TWFwIHNlbGVjdGVkT2JqZWN0czsKLSAgICAgICAgU2VsZWN0
ZWRCbG9ja01hcCBzZWxlY3RlZEJsb2NrczsKLSAgICB9OwotCi0gICAgY2xhc3MgU2VsZWN0aW9u
U3VidHJlZURhdGEgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgU2VsZWN0aW9uU3VidHJlZURhdGEoUmVuZGVyT2JqZWN0
KiBzZWxlY3Rpb25TdGFydCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRQ
b3MsIFJlbmRlck9iamVjdCogc2VsZWN0aW9uRW5kLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBz
ZWxlY3Rpb25FbmRQb3MpCi0gICAgICAgICAgICA6IG1fc2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9u
U3RhcnQpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uRW5kKHNlbGVjdGlvbkVuZCkKLSAgICAg
ICAgICAgICwgbV9zZWxlY3Rpb25TdGFydFBvcyhzZWxlY3Rpb25TdGFydFBvcykKLSAgICAgICAg
ICAgICwgbV9zZWxlY3Rpb25FbmRQb3Moc2VsZWN0aW9uRW5kUG9zKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25TdGFydDsgfQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBzZWxlY3Rpb25TdGFydFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhcnRQb3M7
IH0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdGlvbkVuZDsgfQotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzZWxlY3Rp
b25FbmRQb3MoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkVuZFBvczsgfQotICAgICAgICB2
b2lkIHNlbGVjdGlvblN0YXJ0RW5kUG9zaXRpb25zKHVuc2lnbmVkJiBzdGFydFBvcywgdW5zaWdu
ZWQmIGVuZFBvcykgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgc3RhcnRQb3MgPSBtX3Nl
bGVjdGlvblN0YXJ0UG9zLnZhbHVlKCk7Ci0gICAgICAgICAgICBlbmRQb3MgPSBtX3NlbGVjdGlv
bkVuZFBvcy52YWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24o
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvblN0YXJ0ID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIG1fc2VsZWN0aW9uU3RhcnRQb3MgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAg
ICBtX3NlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBtX3NlbGVjdGlvbkVuZFBv
cyA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiBtX3NlbGVjdGlvblN0YXJ0IHsgbnVsbHB0ciB9OwotICAgICAgICBSZW5kZXJP
YmplY3QqIG1fc2VsZWN0aW9uRW5kIHsgbnVsbHB0ciB9OwotICAgICAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBtX3NlbGVjdGlvblN0YXJ0UG9zOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBtX3NlbGVjdGlvbkVuZFBvczsKLSAgICB9OwotCi0gICAgU2VsZWN0aW9uU3VidHJl
ZVJvb3QoKTsKLQotICAgIFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgeyBy
ZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQotICAgIGNvbnN0IFNlbGVjdGlvblN1YnRy
ZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVl
RGF0YTsgfQotCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvblN1YnRy
ZWVEYXRhJiBzZWxlY3Rpb25TdWJ0cmVlRGF0YSkgeyBtX3NlbGVjdGlvblN1YnRyZWVEYXRhID0g
c2VsZWN0aW9uU3VidHJlZURhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBTZWxlY3Rpb25TdWJ0cmVl
RGF0YSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>