<?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>16815</bug_id>
          
          <creation_ts>2008-01-10 07:08:21 -0800</creation_ts>
          <short_desc>Crash with navigator.plugins and navigator.mimeTypes after plugins.refresh</short_desc>
          <delta_ts>2015-04-29 10:54:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Plug-ins</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=144399</see_also>
          <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="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>lars.knoll</cc>
    
    <cc>sam</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>66737</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-10 07:08:21 -0800</bug_when>
    <thetext>The implementation of navigator.plugins and navigator.mimeTypes in kjs_navigator.cpp uses pointers to the Mime and Plugin objects retrieved from the PluginInfoStore. navigator.plugins.refresh() deletes those objects but there may still be Plugin and MimeType objects around with stale pointers. The attached testcase reproduces the crash.

We ran into this while trying to make plugins work better for the Qt platform and the second attachment to this report includes a proposed patch. The patch only demonstrates the concept, it is incomplete with regards to the implementation of PluginStoreQt and the implementations on the other platforms. If the concept finds approval we will try to implement the proposed API changes for the other platforms.

We propose to change PluginInfoStore to return values and store those values in the JavaScript binding objects. In addition we&apos;re adding a Frame pointer parameter that allows binding the PluginInfoStore to the context of a Frame or in the case of the Qt port to an entire QWebPage instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66738</commentid>
    <comment_count>1</comment_count>
      <attachid>18363</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-10 07:09:06 -0800</bug_when>
    <thetext>Created attachment 18363
Testcase to reproduce navigator.plugins crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66740</commentid>
    <comment_count>2</comment_count>
      <attachid>18364</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-10 07:09:43 -0800</bug_when>
    <thetext>Created attachment 18364
Proposed patch (concept)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67153</commentid>
    <comment_count>3</comment_count>
      <attachid>18364</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-13 14:22:05 -0800</bug_when>
    <thetext>Comment on attachment 18364
Proposed patch (concept)

Here are a few comments:

If you&apos;re going to put frame pointers into all of these separately reference counted objects, you either need to make the frame pointers get zeroed out when the frame goes away or you need to make them RefPtr&lt;Frame&gt;.

The direction I&apos;d like to see this move is to make these objects more like normal DOM objects, with automatically generated bindings.

I don&apos;t see why the list of plug-ins should be per-frame or per-page. Having each web page keep a separate list of plug-ins seems unnecessary. I&apos;m concerned that we&apos;re taking too many lower-level things and involving the page in them.

On the other hand, I could be wrong. If we are going to make the plug-in data structures be per-page we should do it cross platform with as much cross-platform code as possible.

If the plug-in information is really per-page, then the functions should be members of Page or a class with a page pointer in them. I don&apos;t think it&apos;s a good pattern to have a class PlugInInfoStore and pass a frame pointer to all the functions of that class.

This looks like a Qt-only patch.

+        PluginBase(ExecState *exec, Frame* frame);

Normally we would not name these arguments when their purpose is completely clear from their type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67197</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-14 01:44:54 -0800</bug_when>
    <thetext>The main reason for making plugins and other pieces depend on the page instead of them being just global data is modularity. This is not important if WebKit is only used in a browser application. But for example in an application that shows controlled content in one view with additional Qt based plugins that might access e.g. the filesystem and at the same time show a help documentation window with HTML documentation loaded from the web, the use of plugins has to be restricted to the application view. It must not be possible for JavaScript executed within the documentation window to see which plugins are loaded in the other window, which is the case right now due to the global mime/plugins list in the JavaScript binding.

&gt; This looks like a Qt-only patch.

Most of the patch is about fixing a WebKit security issue/crash. The addition of the frame pointer is something one might argue about, but being able to specify plugins on a per-page basis is a requirement for the Qt port. We also think that this might be an important feature for any WebKit based framework.

We&apos;ll try to replace the raw frame pointer with a reference counter pointer in the next patch revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67206</commentid>
    <comment_count>5</comment_count>
      <attachid>18436</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-14 07:11:38 -0800</bug_when>
    <thetext>Created attachment 18436
new (concept) patch

This new patch includes the following changes:

1) Auto-generate bindings for window.navigator and its sub-objects (plugins/mimeTypes)
2) Replace PlugInInfoStore with PluginData
3) Remove unused page/Plugin.h
4) Move all plugin code into WebCore/plugins
5) Move navigator object into WebCore/page

This is still just a proof of concept and requires implementation of PluginData::platformInit() and PluginData::platformRefresh() on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67208</commentid>
    <comment_count>6</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-14 07:38:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/5686501&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67210</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-01-14 07:44:23 -0800</bug_when>
    <thetext>Crash log loading Attachment #18363 on Mac OS X 10.4.11 (8S165) with Safari 3.0.4 (523.12.2) with a local debug build of WebKit r29451:

Thread 0 Crashed:
0   com.apple.WebCore         	0x01722fac WebCore::StringImpl::characters() + 20 (StringImpl.h:75)
1   com.apple.WebCore         	0x0152e768 WebCore::String::operator KJS::UString() const + 96 (String.cpp:558)
2   com.apple.WebCore         	0x015b5f58 KJS::Plugin::getValueProperty(KJS::ExecState*, int) const + 204 (kjs_navigator.cpp:434)
3   com.apple.WebCore         	0x019f9f70 KJS::JSValue* KJS::staticValueGetter&lt;KJS::Plugin&gt;(KJS::ExecState*, KJS::JSObject*, KJS::Identifier const&amp;, KJS::PropertySlot const&amp;) + 92 (lookup.h:151)
4   com.apple.JavaScriptCore  	0x006250a0 KJS::PropertySlot::getValue(KJS::ExecState*, KJS::JSObject*, KJS::Identifier const&amp;) const + 180 (property_slot.h:49)
5   com.apple.JavaScriptCore  	0x00576dc0 KJS::JSObject::get(KJS::ExecState*, KJS::Identifier const&amp;) const + 84 (object.cpp:164)
6   com.apple.JavaScriptCore  	0x00676d80 KJS::DotAccessorNode::inlineEvaluate(KJS::ExecState*) + 184 (nodes.cpp:814)
7   com.apple.JavaScriptCore  	0x005b5e30 KJS::DotAccessorNode::evaluate(KJS::ExecState*) + 40 (nodes.cpp:819)
8   com.apple.JavaScriptCore  	0x005b5d04 KJS::ArgumentListNode::evaluateList(KJS::ExecState*, KJS::List&amp;) + 100 (nodes.cpp:864)
9   com.apple.JavaScriptCore  	0x00676cb4 KJS::ArgumentsNode::evaluateList(KJS::ExecState*, KJS::List&amp;) + 124 (nodes.h:515)
10  com.apple.JavaScriptCore  	0x00677988 KJS::FunctionCallDotNode::inlineEvaluate(KJS::ExecState*) + 632 (nodes.cpp:1216)
11  com.apple.JavaScriptCore  	0x005c2e8c KJS::FunctionCallDotNode::evaluate(KJS::ExecState*) + 40 (nodes.cpp:1228)
12  com.apple.JavaScriptCore  	0x005b0dd0 KJS::ExprStatementNode::execute(KJS::ExecState*) + 84 (nodes.cpp:3640)
13  com.apple.JavaScriptCore  	0x00588b08 KJS::statementListExecute(WTF::Vector&lt;WTF::RefPtr&lt;KJS::StatementNode&gt;, (unsigned long)0&gt;&amp;, KJS::ExecState*) + 128 (nodes.cpp:3593)
14  com.apple.JavaScriptCore  	0x00588c20 KJS::BlockNode::execute(KJS::ExecState*) + 48 (nodes.cpp:3618)
15  com.apple.JavaScriptCore  	0x005b03cc KJS::ForNode::execute(KJS::ExecState*) + 332 (nodes.cpp:3807)
16  com.apple.JavaScriptCore  	0x00588b08 KJS::statementListExecute(WTF::Vector&lt;WTF::RefPtr&lt;KJS::StatementNode&gt;, (unsigned long)0&gt;&amp;, KJS::ExecState*) + 128 (nodes.cpp:3593)
17  com.apple.JavaScriptCore  	0x00588c20 KJS::BlockNode::execute(KJS::ExecState*) + 48 (nodes.cpp:3618)
18  com.apple.JavaScriptCore  	0x005adabc KJS::ProgramNode::execute(KJS::ExecState*) + 56 (nodes.cpp:4507)
19  com.apple.JavaScriptCore  	0x005d25b4 KJS::Interpreter::evaluate(KJS::ExecState*, KJS::UString const&amp;, int, KJS::UChar const*, int, KJS::JSValue*) + 860 (interpreter.cpp:123)
20  com.apple.WebCore         	0x015b89b4 WebCore::KJSProxy::evaluate(WebCore::String const&amp;, int, WebCore::String const&amp;) + 292 (kjs_proxy.cpp:90)
21  com.apple.WebCore         	0x011b5578 WebCore::FrameLoader::executeScript(WebCore::String const&amp;, int, WebCore::String const&amp;) + 128 (FrameLoader.cpp:758)
22  com.apple.WebCore         	0x012367b0 WebCore::HTMLTokenizer::scriptExecution(WebCore::DeprecatedString const&amp;, WebCore::HTMLTokenizer::State, WebCore::DeprecatedString, int) + 388 (HTMLTokenizer.cpp:520)
23  com.apple.WebCore         	0x01238354 WebCore::HTMLTokenizer::scriptHandler(WebCore::HTMLTokenizer::State) + 1664 (HTMLTokenizer.cpp:470)
24  com.apple.WebCore         	0x012389b4 WebCore::HTMLTokenizer::parseSpecial(WebCore::SegmentedString&amp;, WebCore::HTMLTokenizer::State) + 1208 (HTMLTokenizer.cpp:319)
25  com.apple.WebCore         	0x0123afc8 WebCore::HTMLTokenizer::parseTag(WebCore::SegmentedString&amp;, WebCore::HTMLTokenizer::State) + 7960 (HTMLTokenizer.cpp:1248)
26  com.apple.WebCore         	0x0123b92c WebCore::HTMLTokenizer::write(WebCore::SegmentedString const&amp;, bool) + 1504 (HTMLTokenizer.cpp:1464)
27  com.apple.WebCore         	0x011a7e10 WebCore::FrameLoader::write(char const*, int, bool) + 1288 (FrameLoader.cpp:996)
28  com.apple.WebCore         	0x011b4660 WebCore::FrameLoader::endIfNotLoadingMainResource() + 128 (FrameLoader.cpp:1033)
29  com.apple.WebCore         	0x011b4748 WebCore::FrameLoader::end() + 44 (FrameLoader.cpp:1018)
30  com.apple.WebCore         	0x01149f10 WebCore::DocumentLoader::finishedLoading() + 92 (DocumentLoader.cpp:322)
31  com.apple.WebCore         	0x011ab230 WebCore::FrameLoader::finishedLoading() + 96 (FrameLoader.cpp:2791)
32  com.apple.WebCore         	0x0133ba14 WebCore::MainResourceLoader::didFinishLoading() + 244 (MainResourceLoader.cpp:291)
33  com.apple.WebCore         	0x01459eec WebCore::ResourceLoader::didFinishLoading(WebCore::ResourceHandle*) + 60 (ResourceLoader.cpp:363)
34  com.apple.WebCore         	0x01457990 -[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:] + 204 (ResourceHandleMac.mm:456)
35  com.apple.Foundation      	0x92c1a7ec -[NSURLConnection(NSURLConnectionInternal) _sendDidFinishLoadingCallback] + 188
36  com.apple.Foundation      	0x92c18a58 -[NSURLConnection(NSURLConnectionInternal) _sendCallbacks] + 556
37  com.apple.Foundation      	0x92c187b0 _sendCallbacks + 156
38  com.apple.CoreFoundation  	0x907df30c __CFRunLoopDoSources0 + 384
39  com.apple.CoreFoundation  	0x907de83c __CFRunLoopRun + 452
40  com.apple.CoreFoundation  	0x907de2bc CFRunLoopRunSpecific + 268
41  com.apple.HIToolbox       	0x932a0b20 RunCurrentEventLoopInMode + 264
42  com.apple.HIToolbox       	0x932a01b4 ReceiveNextEventCommon + 380
43  com.apple.HIToolbox       	0x932a0020 BlockUntilNextEventMatchingListInMode + 96
44  com.apple.AppKit          	0x937a6bc4 _DPSNextEvent + 384
45  com.apple.AppKit          	0x937a6888 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 116
46  com.apple.Safari          	0x000095e0 0x1000 + 34272
47  com.apple.AppKit          	0x937a2dcc -[NSApplication run] + 472
48  com.apple.AppKit          	0x93893974 NSApplicationMain + 452
49  com.apple.Safari          	0x0009bad4 0x1000 + 633556
50  com.apple.Safari          	0x000022fc 0x1000 + 4860

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67248</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-14 12:03:58 -0800</bug_when>
    <thetext>I love the direction this patch is going!  One comment though, the class Shared has been replaced with RefCounted for quite a while, you should update accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67249</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-14 12:05:50 -0800</bug_when>
    <thetext>I will do a more thorough review later on today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67270</commentid>
    <comment_count>10</comment_count>
      <attachid>18436</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-14 23:32:40 -0800</bug_when>
    <thetext>Comment on attachment 18436
new (concept) patch

Basic approach looks great.

Here are a few comments.

For new names, please use &quot;PlugIn&quot; rather than &quot;Plugin&quot;. Because it&apos;s plug-in, not plugin. I know we&apos;re inconsistent about this, but it would be good to be consistent in the new code. Unless the real DOM goes the other way, in which case maybe we should rename it in the other direction.

I&apos;m not a big fan of the name PlugInData, because of the vagueness of the word &quot;data&quot;. Maybe PlugInSpecifications? What type of data is it? I&apos;m especially annoyed that we have both PlugInData and PlugInInfo, and they are two different things!

Formatting has a lot of strange things in it.

+        inline Navigator* clientInformation() const
+        { return navigator(); }
 
Functions in class declarations are automatically inline, so no need to say &quot;inline&quot; here. We normally put stuff like this all on one line, or format it as a multiple line function declaration. This style, where the body is all on one line, but a line after the declaration, is not the usual.

+ *  This file is part of the KDE libraries

Please don&apos;t include that in new source files.

When moving a large block of code to a new file, please use a &quot;svn copy&quot; so we don&apos;t lose all the history of the code. Also it makes it easier to review because I can see the changes.

It seems a little strange to have almost all the functions of Navigator be const members, and almost all the data members be mutable. How about just skipping &quot;const&quot; for this object, since it&apos;s a DOM object and the DOM has no real notion of const.

+        ~Navigator();
+        ~MimeType();

We normally repeat the &quot;virtual&quot; when overriding things like the virtual destructor.

+        /*readonly attribute MimeTypeArray mimeTypes; */

We normally don&apos;t check in commented-out code, even in IDL files, if it can be avoided.

+    const Vector&lt;MimeClassInfo*&gt; &amp;mimes = m_pluginData-&gt;mimes();

Misplaced &amp; character here. Should go next to the type.

+Plugin *MimeType::enabledPlugin() const
+        Plugin *enabledPlugin() const;

Misplaced * character here.

+        MimeType(const RefPtr&lt;PluginData&gt;&amp; pluginData, int index);

If you&apos;re passing ownership, the parameter type should be PassRefPtr&lt;PlugInData&gt;, not const RefPtr&amp;. And the argument name should be omitted in cases like this one.

+#include &quot;RefPtr.h&quot;

It&apos;s &lt;wtf/RefPtr.h&gt;.

+#include &quot;Shared.h&quot;

It hasn&apos;t been &quot;Shared.h&quot; for a while. It&apos;s &lt;wtf/RefCounted.h&gt;.

Headers with functions that return a String don&apos;t need to include PlatformString.h. They can just forward-declare String.

+    class PluginData : public Shared&lt;PluginData&gt;
+    {

Brace goes on the same line as the class name.

+    for (int i = 0; i &lt; m_mimes.size(); ++i)

Mixing int with size_t is going to create a warning. Better to either put the size into an int local variable or use size_t consistently.

For the various places where we are looking for MIME types, etc. the code should probably use more modern data structures like hashes rather than iterating over lists doing == on each element. Maybe the MIME types should be AtomicString to save memory if the same type appears over and over again?

It seems really poor for each frame to have its own entire copy of the plug-in database. Is there any way to allow sharing for the common cases where all frames are identical?

When you refresh, I don&apos;t think it is correct to leave all other frames with old data about plug-ins. It&apos;s good that you&apos;re fixing this so frames can be different from each other, but moving from too much sharing to no sharing at all doesn&apos;t seem good.

+    // ### hack

First, we use &quot;FIXME&quot; for such things. Second, we try to be more specific about what&apos;s up. Why is this code in the DOM? Why not elsewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67593</commentid>
    <comment_count>11</comment_count>
      <attachid>18527</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-18 05:27:04 -0800</bug_when>
    <thetext>Created attachment 18527
patch including mac support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67594</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-01-18 05:51:08 -0800</bug_when>
    <thetext>We have continued to work on the patch, including code style fixes and an implementation for the Mac port that also removes some now unused code.

We decided to stick to PluginData for now as we think that in the future we should simply merge this with PluginDataBase, which appears to be the correct name and place. But that of course requires bigger changes outside the scope of this bug report / crash.

We thought about the use of a hash for the plugins and the mime type, but given the linear nature of the JavaScript API here it appears safer to stay with the plain lists to preserve order and behaviour.

The data itself is now shared across Page instances, which simplified the sharing itself and also implements the reloading of frames that contain plugins in a platform independent way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69552</commentid>
    <comment_count>13</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-02-05 23:50:40 -0800</bug_when>
    <thetext>Although &quot;plug-in&quot; is the naming convention on Mac OS X, &quot;plugin&quot; is much more commonly used, especially in computing contexts and most particularly in the browser context. Enough that Google thinks &quot;plug-in&quot; is a misspelling for &quot;plugin&quot;:

http://www.google.com/search?&amp;q=plugin
http://www.google.com/search?&amp;q=plug-in

I don&apos;t think we need to make the code bow to the quirky Mac UI convention on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71046</commentid>
    <comment_count>14</comment_count>
      <attachid>19188</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-18 07:42:49 -0800</bug_when>
    <thetext>Created attachment 19188
updated patch that compiles against trunk

This patch is just an update to the previous patch that adds the crash as a testcase to LayoutTests and fixes the compilation after the latest round of changes in trunk.

The build on the mac is not included in this patch (working on that) and the windows implementation of PluginData is also still missing (it should use the newly landed PluginPackage of course).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71812</commentid>
    <comment_count>15</comment_count>
      <attachid>19188</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 18:38:45 -0800</bug_when>
    <thetext>Comment on attachment 19188
updated patch that compiles against trunk

This patch is great. Sorry I didn&apos;t review it earlier.

The patch will need to be revised to preserve the new Windows-only quirk in appVersion, which will require a custom binding.

+        MimeType(PluginData* pluginData, unsigned index);

This should be a PassRefPtr&lt;PluginData&gt;, not a raw pointer.

+        Plugin* enabledPlugin() const;

Since this produces a new reference counted object, the return type should be a PassRefPtr.

+        m_navigator = new Navigator(m_frame);

New refcounted classes should use the &quot;create&quot; idiom, where there&apos;s a function to create a new object that returns a PassRefPtr and the constructor should be private.

+        readonly attribute Navigator navigator;
+        readonly attribute Navigator clientInformation;

Is it correct that these are not [Replaceable]? Does this change behavior from the old version or preserve it?

+    const String userAgent = m_frame-&gt;loader()-&gt;userAgent(m_frame-&gt;document() ? m_frame-&gt;document()-&gt;url() : KURL());

There&apos;s no good reason to use &quot;const String&quot; here. We could declare many of our local variables const, but we normally don&apos;t. But instead of String, you could use const String&amp;. I don&apos;t think it would be more efficient, but it&apos;s often a good idiom. It&apos;s probably even better to just use &quot;this-&gt;userAgent()&quot; to initialize userAgent; if you did that you could even skip the m_frame null check.

+    class Frame;
+    class String;
+    class PluginData;
+    class PluginArray;
+    class MimeTypeArray;

We normally use alphabetical order for these things.

+    HashSet&lt;Page*&gt;::iterator end = allPages-&gt;end();
+    for (HashSet&lt;Page*&gt;::iterator it = allPages-&gt;begin(); it != end; ++it) {

Can calling reload() trigger anything that changes the contents of allPages? Like maybe open a new window? If it can, then this code needs to be written so it can cope with that. The behavior of iterators in a hash table that changes is undefined -- could crash. A safe idiom is to copy the set into a vector and iterate the vector.

+        for (Frame* frame = (*it)-&gt;mainFrame(); frame; frame = frame-&gt;tree()-&gt;traverseNext()) {
+            if (reload &amp;&amp; frame-&gt;loader()-&gt;containsPlugins())

I suggest putting the &quot;reload&quot; if statement outside the loop.

If reload() can change the state of frames then I think you need to use a RefPtr&lt;Frame&gt; to avoid a possible null-dereference. We might also need to copy the frames into a vector to avoid problems in case the frame tree changes.

+    : RefCounted&lt;MimeType&gt;(0)

Please use a count of 1 for new classes you&apos;re adding in the future. this is OK on this patch, but should be revised for future patches.

Sorry, I have to go now and I only got down to PluginData.h -- still got about a third of the patch to review.

review- because of the above issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71816</commentid>
    <comment_count>16</comment_count>
      <attachid>19188</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 19:51:46 -0800</bug_when>
    <thetext>Comment on attachment 19188
updated patch that compiles against trunk

One thing I&apos;m not happy about is all the classes that have the name XXXInfo and XXXData. I find them confusing. Like -- what&apos;s the difference between PluginData and PluginInfo? Anything we can do to rationalize these would be a step in the right direction.

+        PluginData(const Page* page);

We&apos;d normally omit the parameter name for something like this.

+        inline const Vector&lt;PluginInfo*&gt;&amp; plugins() const
+        { return m_plugins; }
+        inline const Vector&lt;MimeClassInfo*&gt;&amp; mimes() const
+        { return m_mimes; }

No reason for the inline keyword on these lines; it has no effect. Also, normally the function body would be to the right rather than on a separate line below.

Those are all my comments. I finished reviewing now.

I&apos;d love to help you finish the patch; if I have time soon I might take it and fix some of the issues I mentioned and do some testing on Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71871</commentid>
    <comment_count>17</comment_count>
      <attachid>19345</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-25 05:55:59 -0800</bug_when>
    <thetext>Created attachment 19345
diff against the previous patch

This attachment is just a diff against the previous posted patch, to make it easier to see the changes that happened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71872</commentid>
    <comment_count>18</comment_count>
      <attachid>19346</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-25 05:58:38 -0800</bug_when>
    <thetext>Created attachment 19346
updated patch

The complete patch including Darin&apos;s comments, a Gtk+ build fix and a crash fix in DOMImplementation::createDocument where the frame pointer can be null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71873</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-25 06:12:56 -0800</bug_when>
    <thetext>I have included your suggestions in the latest patch. Thanks for this round of review!

The readonly attribute change was indeed a bug. A little test that overwrites window.navigator indicates that it&apos;s indeed replaceable like the other window properties.

The const of the string in window.navigator.appVersion came actually from the existing code in kjs_navigator.cpp, but I&apos;ve removed the const now. I&apos;m not sure about caching the return value of FrameLoaderClient::userAgent due to the dependency of the URL though. But perhaps I misunderstood your suggestion.

I have also changed Page::refreshPlugins() to continue to operate on the allPages hashset, but instead of doing any modification it now just collects all the frames that need a reload in a separate vector. I think that should protected against potential page/frame creations/deletions as you suggested.

I agree about the confusing namng between PluginData and PluginInfo, but I think PluginData in the future should simply be merged with PluginDatabase to clean up the code and resolve this naming problem.

The latest patch still needs an implementation of PluginData on Windows. That should be pretty straightforward from the existing PluginInfoStore.cpp code. The mac implementation should require only changes to the xcode project files, the existing mac/PluginData.mm implementation should work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71876</commentid>
    <comment_count>20</comment_count>
      <attachid>19346</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-25 07:40:14 -0800</bug_when>
    <thetext>Comment on attachment 19346
updated patch

Changes look great.

+    // Version is everything in the user agent string past the &quot;Mozilla/&quot; prefix.
+    String userAgent = frame-&gt;loader()-&gt;userAgent(frame-&gt;document() ? frame-&gt;document()-&gt;url() : KURL());
+    return jsString(userAgent.substring(userAgent.find(&apos;/&apos;) + 1));

I&apos;d suggest leaving this part of appVersion in the Navigator object, and calling jsString(imp-&gt;appVersion()) here in the JSNavigator binding.

+            for (Frame* frame = (*it)-&gt;mainFrame(); frame; frame = frame-&gt;tree()-&gt;traverseNext())
+                if (frame-&gt;loader()-&gt;containsPlugins())
+                    framesNeedingReload.append(frame);

Our formatting rules would say that this for statement needs braces (the if statement doesn&apos;t).

+#include &lt;wtf/PassRefPtr.h&gt;

Compiling things that include parameters and return values of type PassRefPtr only requires &lt;wtf/Forward.h&gt;, although that&apos;s not critical.

+        MimeType(PassRefPtr&lt;PluginData&gt; pluginData, unsigned index);

We&apos;d normally omit the parameter name &quot;pluginData&quot; here.

+    for (Vector&lt;RefPtr&lt;Frame&gt; &gt;::iterator it = framesNeedingReload.begin(); it != framesNeedingReload.end(); ++it)
+        (*it)-&gt;loader()-&gt;reload();

There&apos;s no real benefit to using an iterator to iterate a vector. It&apos;s probably better practice to use indexing instead for vectors.

Obviously I can&apos;t say review+ for a patch that doesn&apos;t yet contain the changes needed to compile on Mac OS X and Windows. So I&apos;m not sure what to do next here. I guess I can apply the patch myself and try to finish it on each platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71877</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-25 07:44:18 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; The const of the string in window.navigator.appVersion came actually from the
&gt; existing code in kjs_navigator.cpp, but I&apos;ve removed the const now. I&apos;m not
&gt; sure about caching the return value of FrameLoaderClient::userAgent due to the
&gt; dependency of the URL though. But perhaps I misunderstood your suggestion.

I wasn&apos;t suggesting you cache the result. My point was that for functions that return String you can do this:

    const String&amp; result = function();
    otherFunction(result);

Using &quot;const String&amp;&quot; rather than &quot;String&quot;.

Some on the Safari team here at Apple have suggested using this idiom as the default for things like String, AtomicString. In cases where the function actually returns a reference rather than a String, it avoids a bit of refcount churn, at the expense of being ever so slightly more vulnerable to object lifetime problems if the object that returned the string is modified before the reference is used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72003</commentid>
    <comment_count>22</comment_count>
      <attachid>19374</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-26 08:16:04 -0800</bug_when>
    <thetext>Created attachment 19374
updated diff against previous patch

This is a diff against the last patch containing updates for the Gtk+ build with Automake as well as the suggested coding style changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72004</commentid>
    <comment_count>23</comment_count>
      <attachid>19375</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-26 08:19:07 -0800</bug_when>
    <thetext>Created attachment 19375
new patch including Gtk+ Automake build fix and more coding style fixes

Thanks for the suggestions, I&apos;ve added them to this latest patch.

I wanted to change the inclusions of PassRefPtr.h to Forward.h, but realized it doesn&apos;t work because the inline create() function that replaces the constructor uses adoptRef, which calls actually functions on PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72130</commentid>
    <comment_count>24</comment_count>
      <attachid>19400</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-27 04:07:25 -0800</bug_when>
    <thetext>Created attachment 19400
new patch including Mac X build fixes

This patch includes only a small fix to the testcase and changes to the xcode project files to fix the build on Mac OS X. Only Windows is missing now for patch completion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72245</commentid>
    <comment_count>25</comment_count>
      <attachid>19433</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-02-28 04:31:46 -0800</bug_when>
    <thetext>Created attachment 19433
patch including support for Windows

I have implemented PluginDataWin.cpp and modified the visual studio project files. Due to machine problems I couldn&apos;t really _test_ the resulting DLL though, but it compiled and linked for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72379</commentid>
    <comment_count>26</comment_count>
      <attachid>19433</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-02-29 14:16:52 -0800</bug_when>
    <thetext>Comment on attachment 19433
patch including support for Windows

There are no ChangeLog entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72534</commentid>
    <comment_count>27</comment_count>
      <attachid>19433</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-02 19:02:13 -0800</bug_when>
    <thetext>Comment on attachment 19433
patch including support for Windows

Great patch! Seems almost ready to go.

+    const String &amp;userAgent = m_frame-&gt;loader()-&gt;userAgent(m_frame-&gt;document() ? m_frame-&gt;document()-&gt;url() : KURL());

Should be const String&amp;, with the space after the &amp;.

+  return m_frame-&gt;settings()-&gt;isJavaEnabled();

Should be indented four spaces.

+    for (unsigned int i = 0; i &lt; framesNeedingReload.size(); ++i)

We normally just use &quot;unsigned&quot;, but also since this is a Vector, should be size_t.

+        m_pluginData = new PluginData(this);

Should be using PluginData::create instead of calling new directly. I don&apos;t think this will even compile.

+MimeType::MimeType(PassRefPtr&lt;PluginData&gt; pluginData, unsigned index)
+    : RefCounted&lt;MimeType&gt;(0)

This is going to be a problem. The constructor here starts with a count of 0, but the create function does an adoptRef. Need to remove the initialization of the refcount to 0. Same problem with PluginArray and perhaps other classes. Please double check this.

+    for (unsigned int i = 0; i &lt; plugins.size(); ++i)
+        if (plugins[i] == mimes[m_index]-&gt;plugin)
+            return Plugin::create(m_pluginData.get(), i);

Same comment about unsigned int and size_t as above. Also, we use braces around multi-line bodies, even if they are only a single statement, so the for should have braces.

Could evaluate mimes[m_index]-&gt;plugin outside the loop.

+        String type() const;
+        String suffixes() const;
+        String description() const;

Could return const String&amp; from these for better efficiency since these are stored in a persistent data structure.

+#include &quot;PluginData.h&quot;

No need to include the entire PluginData header just to compile a RefPtr to one.

+        unsigned long length() const;

unsigned long in IDL is the same as unsigned in C++, not unsigned long. So this should just be unsigned, not unsigned long.

+    // FIXME: Generated JSPlugin.cpp doesn&apos;t include JSMimeType.h for toJS
+    KJS::JSValue* toJS(KJS::ExecState*, MimeType*);

What&apos;s the deal with this? Have you discussed it with Sam Weinig?

It&apos;d be more efficient to use a constructor for MimeClassInfo rather than constructing one with null strings and then assigning to it.

The class MimeClassInfo uses the mixed class Mime as in Qt rather than the all capitals MIME used elsewhere in WebKit.

review- because of the thing that won&apos;t compile (new with a private constructor) and the refcount problems (0 with adoptRef).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72985</commentid>
    <comment_count>28</comment_count>
      <attachid>19583</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-07 07:55:55 -0800</bug_when>
    <thetext>Created attachment 19583
difference to the previous patch

This attachment is just a difference to the previous page _excluding_ the changes that were necessary to adapt the entire patch to the latest renames of files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72987</commentid>
    <comment_count>29</comment_count>
      <attachid>19584</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-07 08:02:35 -0800</bug_when>
    <thetext>Created attachment 19584
updated patch rebased against trunk and including the latest suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72989</commentid>
    <comment_count>30</comment_count>
      <attachid>19586</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-07 08:11:35 -0800</bug_when>
    <thetext>Created attachment 19586
diff against previous patch including idl changes that were missing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72990</commentid>
    <comment_count>31</comment_count>
      <attachid>19587</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-07 08:16:06 -0800</bug_when>
    <thetext>Created attachment 19587
updated patch rebased against trunk including the latest suggestion and idl fixes

Another update for the complete patch. I forgot the changes to the length property in the IDL files. This is included now. (actually the changes in the implementation to use unsigned instead of unsigned long)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72992</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-07 08:32:36 -0800</bug_when>
    <thetext>Some comments on the latest changes that go beyond the smaller fixes:

1) The reference counting was indeed incorrect and WebCore::PluginData was accidentially also not using the create()/adoptRef() pattern. This is fixed now.

2) The forward declaration of the toJS function we included because JSPlugin.cpp&apos;s indexGetter() function calls item in WebCore::Plugin. That function returns a MimeType pointer which needs to be converted to a JSValue using the toJS function generated in JSMimeType.h. So JSPlugin.cpp needs to include JSMimeType.h due to the indexGetter. We could not find a way to add this inclusion so a plain forward declaration seemed like the easiest fix.

3) I agree about the use of a constructor for MimeClassInfo, but then I&apos;m not sure how important the performance is here since this is normally called only once on startup. On the other hand I find code that initializes the members by name more readable than passing just arguments to the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73018</commentid>
    <comment_count>33</comment_count>
      <attachid>19587</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-03-07 12:22:26 -0800</bug_when>
    <thetext>Comment on attachment 19587
updated patch rebased against trunk including the latest suggestion and idl fixes

I&apos;m annoyed by the use of Mime in this new code and MIME in all existing WebCore code. I would have preferred to stick with MIME.

 1598         String pluginName;
 1599         if (m_frame-&gt;page())
 1600             pluginName = m_frame-&gt;page()-&gt;pluginData()-&gt;pluginNameForMimeType(mimeType);
15991601         if (!pluginName.isEmpty() &amp;&amp; !pluginName.contains(&quot;QuickTime&quot;, false)) 
16001602             return true;

This could have been done with a nested if; obviously the &quot;return true&quot; is not needed if the page is 0.

In fact, we could have just added the &quot;page&quot; check to the if above this.

 67     for (unsigned i = 0; i &lt; mimes.size(); ++i)
 68         if (mimes[i] == mime)
 69             return MimeType::create(m_pluginData.get(), i).get();

These should have braces.

r=me

Is there a way to make a regression test for this? We normally require them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73183</commentid>
    <comment_count>34</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2008-03-10 04:57:14 -0700</bug_when>
    <thetext>Landed in r30923.

I have included the coding style fixes suggested.

This bug as well as the patch include a LayoutTest.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>18363</attachid>
            <date>2008-01-10 07:09:06 -0800</date>
            <delta_ts>2008-01-10 07:09:06 -0800</delta_ts>
            <desc>Testcase to reproduce navigator.plugins crash</desc>
            <filename>crash.html</filename>
            <type>text/html</type>
            <size>560</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+Cgp2YXIgcGx1Z2lucyA9IG5ldyBBcnJheTsKZm9yICh2YXIgaSA9IDA7
IGkgPCBuYXZpZ2F0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkgewogICAgcGx1Z2lucy5wdXNoKG5h
dmlnYXRvci5wbHVnaW5zW2ldKTsKfQoKdmFyIG1pbWVUeXBlcyA9IG5ldyBBcnJheTsKZm9yICh2
YXIgaSA9IDA7IGkgPCBuYXZpZ2F0b3IubWltZVR5cGVzLmxlbmd0aDsgKytpKSB7CiAgICBtaW1l
VHlwZXMucHVzaChuYXZpZ2F0b3IubWltZVR5cGVzW2ldKTsKfQoKbmF2aWdhdG9yLnBsdWdpbnMu
cmVmcmVzaCgpOwoKZG9jdW1lbnQud3JpdGVsbigiPHByZT4iKTsKCmZvciAodmFyIGkgPSAwOyBp
IDwgcGx1Z2lucy5sZW5ndGg7ICsraSkgewogICAgZG9jdW1lbnQud3JpdGVsbihwbHVnaW5zW2ld
Lm5hbWUpOwp9Cgpmb3IgKHZhciBpID0gMDsgaSA8IG1pbWVUeXBlcy5sZW5ndGg7ICsraSkgewog
ICAgZG9jdW1lbnQud3JpdGVsbihtaW1lVHlwZXNbaV0udHlwZSk7Cn0KCmRvY3VtZW50LndyaXRl
bG4oIjwvcHJlPiIpOwoKPC9zY3JpcHQ+Cjxib2R5Pgo8L2JvZHk+PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18364</attachid>
            <date>2008-01-10 07:09:43 -0800</date>
            <delta_ts>2008-01-14 07:11:38 -0800</delta_ts>
            <desc>Proposed patch (concept)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>30107</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCmluZGV4IDliY2NhYTEuLjAzZWI4OTEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcApAQCAtNjgsMjggKzY4LDIyIEBA
IG5hbWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3MgUGx1Z2luQmFzZSA6IHB1YmxpYyBET01PYmpl
Y3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luQmFzZShFeGVjU3RhdGUgKmV4ZWMpOwor
ICAgICAgICBQbHVnaW5CYXNlKEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUqIGZyYW1lKTsKICAgICAg
ICAgdmlydHVhbCB+UGx1Z2luQmFzZSgpOwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0
aWMgdm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBzdGF0aWMgVmVj
dG9yPFBsdWdpbkluZm8qPiAqcGx1Z2luczsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj4gKm1pbWVzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGludCBtX3Bs
dWdJbkNhY2hlUmVmQ291bnQ7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIH07CiAKLQog
ICAgIGNsYXNzIFBsdWdpbnMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBQbHVnaW5zKEV4ZWNTdGF0ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHt9OworICAg
ICAgICBQbHVnaW5zKEV4ZWNTdGF0ZSAqZXhlYywgRnJhbWUqIGZyYW1lKSA6IFBsdWdpbkJhc2Uo
ZXhlYywgZnJhbWUpIHt9OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAg
IEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
ICAgIGVudW0geyBMZW5ndGgsIFJlZnJlc2ggfTsKLSAgICAgICAgc3RhdGljIHZvaWQgcmVmcmVz
aChib29sIHJlbG9hZCk7CisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7CiAgICAg
cHJpdmF0ZToKICAgICAgICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAq
LCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiAg
ICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkBAIC05Nyw3ICs5MSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdp
bkJhc2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSAqZXhlYykg
OiBQbHVnaW5CYXNlKGV4ZWMpIHsgfTsKKyAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSAqZXhl
YywgRnJhbWUqIGZyYW1lKSA6IFBsdWdpbkJhc2UoZXhlYywgZnJhbWUpIHsgfTsKICAgICAgICAg
dmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTExMCw3ICsx
MDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBQbHVn
aW5CYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbihFeGVjU3RhdGUgKmV4ZWMsIFBs
dWdpbkluZm8gKmluZm8pIDogUGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQorICAg
ICAgICBQbHVnaW4oRXhlY1N0YXRlICpleGVjLCBGcmFtZSogZnJhbWUsIGNvbnN0IFBsdWdpbklu
Zm8mIGluZm8pIDogUGx1Z2luQmFzZShleGVjLCBmcmFtZSksIG1faW5mbyhpbmZvKSB7IH0KICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBKU1ZhbHVlICpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KQEAgLTEy
MCwxOSArMTE0LDE5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBzdGF0aWMgSlNWYWx1ZSAq
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKIAotICAgICAgICBQbHVnaW5JbmZvICptX2luZm87CisgICAgICAgIFBsdWdpbklu
Zm8gbV9pbmZvOwogICAgIH07CiAKICAgICBjbGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBQbHVnaW5C
YXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVUeXBlKCBFeGVjU3RhdGUgKmV4ZWMsIE1p
bWVDbGFzc0luZm8gKmluZm8gKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0K
KyAgICAgICAgTWltZVR5cGUoRXhlY1N0YXRlICpleGVjLCBGcmFtZSogZnJhbWUsIGNvbnN0IE1p
bWVJbmZvJiBpbmZvKSA6IFBsdWdpbkJhc2UoZXhlYywgZnJhbWUpLCBtX2luZm8oaW5mbykgeyB9
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgSlNWYWx1ZSAqZ2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICAgICAgZW51bSB7IFR5cGUs
IFN1ZmZpeGVzLCBEZXNjcmlwdGlvbiwgRW5hYmxlZFBsdWdpbiB9OwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIE1pbWVDbGFzc0luZm8gKm1faW5mbzsKKyAgICAgICAgTWltZUluZm8gbV9pbmZvOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlCkBAIC0xNDYsMTAgKzE0MCw2IEBAIGNvbnN0IENsYXNz
SW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlwZUFycmF5IiwgMCwgJk1pbWVUeXBlc1Rh
YmxlLCAwIH07CiBjb25zdCBDbGFzc0luZm8gUGx1Z2luOjppbmZvID0geyAiUGx1Z2luIiwgMCwg
JlBsdWdpblRhYmxlLCAwIH07CiBjb25zdCBDbGFzc0luZm8gTWltZVR5cGU6OmluZm8gPSB7ICJN
aW1lVHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlLCAwIH07CiAKLVZlY3RvcjxQbHVnaW5JbmZvKj4g
KktKUzo6UGx1Z2luQmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8TWltZUNsYXNzSW5mbyo+ICpL
SlM6OlBsdWdpbkJhc2U6Om1pbWVzID0gMDsKLWludCBLSlM6OlBsdWdpbkJhc2U6Om1fcGx1Z0lu
Q2FjaGVSZWZDb3VudCA9IDA7Ci0KIGNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7
ICJOYXZpZ2F0b3IiLCAwLCAmTmF2aWdhdG9yVGFibGUsIDAgfTsKIC8qCiBAYmVnaW4gTmF2aWdh
dG9yVGFibGUgMTMKQEAgLTIwOSw5ICsxOTksOSBAQCBKU1ZhbHVlKiBOYXZpZ2F0b3I6OmdldFZh
bHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiAgIGNhc2UgUGxh
dGZvcm06CiAgICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNKTsK
ICAgY2FzZSBfUGx1Z2luczoKLSAgICByZXR1cm4gbmV3IFBsdWdpbnMoZXhlYyk7CisgICAgcmV0
dXJuIG5ldyBQbHVnaW5zKGV4ZWMsIG1fZnJhbWUpOwogICBjYXNlIF9NaW1lVHlwZXM6Ci0gICAg
cmV0dXJuIG5ldyBNaW1lVHlwZXMoZXhlYyk7CisgICAgcmV0dXJuIG5ldyBNaW1lVHlwZXMoZXhl
YywgbV9mcmFtZSk7CiAgIGNhc2UgQ29va2llRW5hYmxlZDoKICAgICByZXR1cm4ganNCb29sZWFu
KGNvb2tpZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKICAgfQpAQCAtMjIwLDcxICsy
MTAsMTkgQEAgSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBQbHVnaW5CYXNl
OjpjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKCFwbHVnaW5zKSB7Ci0g
ICAgICAgIHBsdWdpbnMgPSBuZXcgVmVjdG9yPFBsdWdpbkluZm8qPjsKLSAgICAgICAgbWltZXMg
PSBuZXcgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjsKLSAgICAgICAgCi0gICAgICAgIC8vIHJlYWQg
Y29uZmlndXJhdGlvbgotICAgICAgICBQbHVnSW5JbmZvU3RvcmUgYzsKLSAgICAgICAgdW5zaWdu
ZWQgcGx1Z2luQ291bnQgPSBjLnBsdWdpbkNvdW50KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBwbHVnaW5Db3VudDsgbisrKSB7Ci0gICAgICAgICAgICBQbHVnaW5JbmZvKiBw
bHVnaW4gPSBjLmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KG4pOwotICAgICAgICAg
ICAgaWYgKCFwbHVnaW4pIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBwbHVnaW5zLT5hcHBlbmQocGx1Z2luKTsKLSAgICAgICAgICAgIGlmIChw
bHVnaW4tPm1pbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5k
ID0gcGx1Z2luLT5taW1lcy5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPE1pbWVDbGFz
c0luZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2luLT5taW1lcy5iZWdpbigpOyBpdHIgIT0gZW5k
OyBpdHIrKykKLSAgICAgICAgICAgICAgICBtaW1lcy0+YXBwZW5kKCppdHIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1QbHVnaW5CYXNlOjpQbHVnaW5CYXNlKEV4ZWNTdGF0ZSAqZXhlYykKK1Bs
dWdpbkJhc2U6OlBsdWdpbkJhc2UoRXhlY1N0YXRlICpleGVjLCBGcmFtZSogZnJhbWUpCisgICAg
OiBtX2ZyYW1lKGZyYW1lKQogewogICAgIHNldFByb3RvdHlwZShleGVjLT5sZXhpY2FsSW50ZXJw
cmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKTsKLQotICAgIGNhY2hlUGx1Z2luRGF0
YUlmTmVjZXNzYXJ5KCk7Ci0gICAgbV9wbHVnSW5DYWNoZVJlZkNvdW50Kys7CiB9CiAKIFBsdWdp
bkJhc2U6On5QbHVnaW5CYXNlKCkKIHsKLSAgICBtX3BsdWdJbkNhY2hlUmVmQ291bnQtLTsKLSAg
ICBpZiAoIW1fcGx1Z0luQ2FjaGVSZWZDb3VudCkgewotICAgICAgICBpZiAocGx1Z2lucykgewot
ICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpwbHVnaW5zKTsKLSAgICAgICAgICAgIGRlbGV0
ZSBwbHVnaW5zOwotICAgICAgICAgICAgcGx1Z2lucyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKG1pbWVzKSB7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBtaW1lczsKLSAgICAgICAgICAgIG1pbWVzID0gMDsKLSAgICAgICAgfQot
ICAgIH0KIH0KIAogdm9pZCBQbHVnaW5zOjpyZWZyZXNoKGJvb2wgcmVsb2FkKQogewotICAgIGlm
IChwbHVnaW5zKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAgICAg
IGRlbGV0ZSBwbHVnaW5zOwotICAgICAgICBwbHVnaW5zID0gMDsKLSAgICB9Ci0gICAgaWYgKG1p
bWVzKSB7Ci0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbWltZXMpOwotICAgICAgICBkZWxldGUg
bWltZXM7Ci0gICAgICAgIG1pbWVzID0gMDsKLSAgICB9Ci0gICAgCi0gICAgcmVmcmVzaFBsdWdp
bnMocmVsb2FkKTsKLSAgICBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOworICAgIFBsdWdJ
bkluZm9TdG9yZTo6cmVmcmVzaChtX2ZyYW1lLCByZWxvYWQpOwogfQogCiAKQEAgLTMwMSwyMiAr
MjM5LDIzIEBAIEtKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9OKFBsdWdpbnNGdW5jKQog
SlNWYWx1ZSAqUGx1Z2luczo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKIHsKICAgQVNTRVJUKHRva2VuID09IExlbmd0aCk7Ci0gIHJldHVybiBqc051
bWJlcihwbHVnaW5zLT5zaXplKCkpOworICByZXR1cm4ganNOdW1iZXIoUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudChtX2ZyYW1lKSk7CiB9CiAKIEpTVmFsdWUgKlBsdWdpbnM6OmluZGV4R2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBy
ZXR1cm4gbmV3IFBsdWdpbihleGVjLCBwbHVnaW5zLT5hdChzbG90LmluZGV4KCkpKTsKKyAgICBG
cmFtZSAqZnJhbWUgPSBzdGF0aWNfY2FzdDxQbHVnaW5zICo+KHNsb3Quc2xvdEJhc2UoKSktPm1f
ZnJhbWU7CisgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgZnJhbWUsIFBsdWdJbkluZm9TdG9y
ZTo6cGx1Z2luSW5mb0F0KGZyYW1lLCBzbG90LmluZGV4KCkpKTsKIH0KIAogSlNWYWx1ZSAqUGx1
Z2luczo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CisgICAgRnJhbWUgKmZyYW1lID0gc3RhdGljX2Nhc3Q8UGx1Z2lucyAqPihzbG90LnNs
b3RCYXNlKCkpLT5tX2ZyYW1lOwogICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5kID0g
cGx1Z2lucy0+ZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8UGx1Z2luSW5mbyo+OjppdGVyYXRvciBp
dHIgPSBwbHVnaW5zLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBQbHVn
aW5JbmZvICpwbCA9ICppdHI7Ci0gICAgICAgIGlmIChwbC0+bmFtZSA9PSBhdG9taWNQcm9wZXJ0
eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVjLCBwbCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDAsIGNvdW50ID0gUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3Vu
dChmcmFtZSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8gcGwgPSBQbHVn
SW5JbmZvU3RvcmU6OnBsdWdpbkluZm9BdChmcmFtZSwgaSk7CisgICAgICAgIGlmIChwbC5uYW1l
ID09IGF0b21pY1Byb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luKGV4
ZWMsIGZyYW1lLCBwbCk7CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAt
MzM0LDE2ICsyNzMsMTcgQEAgYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUKICAgICAgICAgLy8gcGx1
Z2luc1sjXQogICAgICAgICBib29sIG9rOwogICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3Bl
cnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8IHBsdWdpbnMtPnNp
emUoKSkgeworICAgICAgICBpZiAob2sgJiYgaSA8IFBsdWdJbkluZm9TdG9yZTo6cGx1Z2luQ291
bnQobV9mcmFtZSkpIHsKICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwg
aW5kZXhHZXR0ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBwbHVnaW5bbmFtZV0KICAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5
TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0
b3IgZW5kID0gcGx1Z2lucy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8q
Pjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsK
LSAgICAgICAgICAgIGlmICgoKml0ciktPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDAsIGNvdW50ID0gUGx1Z0luSW5mb1N0b3Jl
OjpwbHVnaW5Db3VudChtX2ZyYW1lKTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIFBs
dWdpbkluZm8gcGwgPSBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkluZm9BdChtX2ZyYW1lLCBpKTsK
KyAgICAgICAgICAgIGlmIChwbC5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewogICAgICAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzY0LDIyICszMDQsMjMgQEAgYm9v
bCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUKIEpTVmFsdWUgKk1pbWVUeXBlczo6Z2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKICAgQVNTRVJUKHRva2VuID09
IExlbmd0aCk7Ci0gIHJldHVybiBqc051bWJlcihtaW1lcy0+c2l6ZSgpKTsKKyAgcmV0dXJuIGpz
TnVtYmVyKFBsdWdJbkluZm9TdG9yZTo6bWltZVR5cGVDb3VudChtX2ZyYW1lKSk7CiB9CiAKIEpT
VmFsdWUgKk1pbWVUeXBlczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAq
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMt
PmF0KHNsb3QuaW5kZXgoKSkpOworICAgIEZyYW1lICpmcmFtZSA9IHN0YXRpY19jYXN0PE1pbWVU
eXBlcyAqPihzbG90LnNsb3RCYXNlKCkpLT5tX2ZyYW1lOworICAgIHJldHVybiBuZXcgTWltZVR5
cGUoZXhlYywgZnJhbWUsIFBsdWdJbkluZm9TdG9yZTo6bWltZVR5cGVBdChmcmFtZSwgc2xvdC5p
bmRleCgpKSk7CiB9CiAKIEpTVmFsdWUgKk1pbWVUeXBlczo6bmFtZUdldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CisgICAgRnJhbWUgKmZyYW1lID0g
c3RhdGljX2Nhc3Q8TWltZVR5cGVzICo+KHNsb3Quc2xvdEJhc2UoKSktPm1fZnJhbWU7CiAgICAg
QXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0
b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5kKCk7Ci0gICAgZm9y
IChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtaW1lcy0+YmVnaW4oKTsg
aXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyAqbSA9ICgqaXRyKTsK
LSAgICAgICAgaWYgKG0tPnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBtKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MCwgY291bnQgPSBQbHVnSW5JbmZvU3RvcmU6Om1pbWVUeXBlQ291bnQoZnJhbWUpOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBNaW1lSW5mbyBtID0gUGx1Z0luSW5mb1N0b3JlOjptaW1lVHlw
ZUF0KGZyYW1lLCBpKTsKKyAgICAgICAgaWYgKG0ubWltZSgpLnR5cGUgPT0gYXRvbWljUHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBmcmFtZSwgbSk7
CiAgICAgfQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpAQCAtMzk0LDE2ICszMzUsMTYg
QEAgYm9vbCBNaW1lVHlwZXM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmEKICAgICAgICAgLy8gbWltZVR5cGVzWyNdCiAgICAg
ICAgIGJvb2wgb2s7CiAgICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUlu
dDMyKCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwgbWltZXMtPnNpemUoKSkgeworICAgICAg
ICBpZiAob2sgJiYgaSA8IFBsdWdJbkluZm9TdG9yZTo6bWltZVR5cGVDb3VudChtX2ZyYW1lKSkg
ewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIG1pbWVU
eXBlc1tuYW1lXQogICAgICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJv
cGVydHlOYW1lOwotICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQg
PSBtaW1lcy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRl
cmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAg
ICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMCwgY291bnQgPSBQbHVnSW5JbmZvU3RvcmU6Om1pbWVUeXBl
Q291bnQobV9mcmFtZSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBNaW1lSW5mbyBt
ID0gUGx1Z0luSW5mb1N0b3JlOjptaW1lVHlwZUF0KG1fZnJhbWUsIGkpOworICAgICAgICAgICAg
aWYgKG0ubWltZSgpLnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7CiAgICAgICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC00MjksMTMgKzM3MCwxMyBAQCBKU1ZhbHVlICpQ
bHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0
CiB7CiAgICAgc3dpdGNoICh0b2tlbikgewogICAgIGNhc2UgTmFtZToKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKG1faW5mby0+bmFtZSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8u
bmFtZSk7CiAgICAgY2FzZSBGaWxlbmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5m
by0+ZmlsZSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8uZmlsZSk7CiAgICAgY2Fz
ZSBEZXNjcmlwdGlvbjoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZGVzYyk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8uZGVzYyk7CiAgICAgY2FzZSBMZW5ndGg6IAot
ICAgICAgICByZXR1cm4ganNOdW1iZXIobV9pbmZvLT5taW1lcy5zaXplKCkpOworICAgICAgICBy
ZXR1cm4ganNOdW1iZXIobV9pbmZvLm1pbWVzLnNpemUoKSk7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUKDApOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTQ0NSwxOCAr
Mzg2LDI0IEBAIEpTVmFsdWUgKlBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbikgY29uc3QKIEpTVmFsdWUgKlBsdWdpbjo6aW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFBsdWdpbiAqdGhp
c09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbiAqPihzbG90LnNsb3RCYXNlKCkpOwotICAgIHJldHVy
biBuZXcgTWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1lcy5hdChzbG90LmluZGV4
KCkpKTsKKyAgICBNaW1lSW5mbyBpbmZvOworICAgIGluZm8ucGx1Z2luID0gdGhpc09iai0+bV9p
bmZvOworICAgIGluZm8ubWltZUluZGV4ID0gc2xvdC5pbmRleCgpOworICAgIHJldHVybiBuZXcg
TWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9mcmFtZSwgaW5mbyk7CiB9CiAKIEpTVmFsdWUgKlBs
dWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7CiAgICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHNsb3Qu
c2xvdEJhc2UoKSk7CiAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3Bl
cnR5TmFtZTsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSB0aGlz
T2JqLT5tX2luZm8tPm1pbWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8q
Pjo6aXRlcmF0b3IgaXRyID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5iZWdpbigpOyBpdHIgIT0g
ZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptID0gKCppdHIpOwotICAgICAg
ICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4g
bmV3IE1pbWVUeXBlKGV4ZWMsIG0pOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
dGhpc09iai0+bV9pbmZvLm1pbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IE1pbWVD
bGFzc0luZm8gJm0gPSB0aGlzT2JqLT5tX2luZm8ubWltZXMuYXQoaSk7CisgICAgICAgIGlmICht
LnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7CisgICAgICAgICAgICBNaW1lSW5mbyBpbmZv
OworICAgICAgICAgICAgaW5mby5wbHVnaW4gPSB0aGlzT2JqLT5tX2luZm87CisgICAgICAgICAg
ICBpbmZvLm1pbWVJbmRleCA9IGk7CisgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4
ZWMsIHRoaXNPYmotPm1fZnJhbWUsIGluZm8pOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQpAQCAtNDcyLDE2ICs0MTksMTYgQEAgYm9vbCBQbHVnaW46Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwKICAgICAgICAgLy8gcGx1Z2luWyNdCiAgICAgICAgIGJvb2wgb2s7CiAgICAgICAg
IHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlm
IChvayAmJiBpIDwgbV9pbmZvLT5taW1lcy5zaXplKCkpIHsKKyAgICAgICAgaWYgKG9rICYmIGkg
PCBtX2luZm8ubWltZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4
KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gcGx1Z2luWyJuYW1lIl0KICAgICAgICAgQXRvbWljU3RyaW5nIGF0
b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFz
c0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbV9pbmZvLT5taW1lcy5lbmQoKTsKLSAgICAgICAgZm9y
IChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtX2luZm8tPm1pbWVzLmJl
Z2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBl
ID09IGF0b21pY1Byb3BlcnR5TmFtZSkgeworICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbz46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faW5mby5taW1lcy5lbmQoKTsKKyAgICAgICAgZm9yIChW
ZWN0b3I8TWltZUNsYXNzSW5mbz46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1faW5mby5taW1lcy5i
ZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgeworICAgICAgICAgICAgaWYgKCgqaXRyKS50eXBl
ID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewogICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIG5hbWVHZXR0ZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgfQpAQCAtNTA2LDE4ICs0NTMsMTggQEAgSlNWYWx1ZSAqTWltZVR5cGU6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7CiAgICAgc3dpdGNo
ICh0b2tlbikgewogICAgIGNhc2UgVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5m
by0+dHlwZSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8ubWltZSgpLnR5cGUpOwog
ICAgIGNhc2UgU3VmZml4ZXM6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnN1ZmZp
eGVzKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby5taW1lKCkuc3VmZml4ZXMpOwog
ICAgIGNhc2UgRGVzY3JpcHRpb246Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPmRl
c2MpOworICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLm1pbWUoKS5kZXNjKTsKICAgICBj
YXNlIEVuYWJsZWRQbHVnaW46IHsKICAgICAgICAgU2NyaXB0SW50ZXJwcmV0ZXIgKmludGVycHJl
dGVyID0gc3RhdGljX2Nhc3Q8U2NyaXB0SW50ZXJwcmV0ZXIgKj4oZXhlYy0+ZHluYW1pY0ludGVy
cHJldGVyKCkpOwogICAgICAgICBGcmFtZSAqZnJhbWUgPSBpbnRlcnByZXRlci0+ZnJhbWUoKTsK
ICAgICAgICAgQVNTRVJUKGZyYW1lKTsKICAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJh
bWUtPnNldHRpbmdzKCk7CiAgICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+YXJlUGx1
Z2luc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIG1faW5m
by0+cGx1Z2luKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIG1fZnJhbWUs
IG1faW5mby5wbHVnaW4pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICB9CkBAIC01MzEsOSArNDc4LDEwIEBAIGJvb2wgTWltZVR5cGU6OmdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtCiAgICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxNaW1lVHlwZSwgUGx1Z2luQmFzZT4o
ZXhlYywgJk1pbWVUeXBlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKLUpT
VmFsdWUgKlBsdWdpbnNGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2Jq
ZWN0ICosIGNvbnN0IExpc3QgJmFyZ3MpCitKU1ZhbHVlICpQbHVnaW5zRnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKIHsKLSAgICBQbHVnaW5zOjpyZWZyZXNoKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgUGx1Z2lucyAqcGx1Z2lucyA9IHN0YXRpY19jYXN0PFBsdWdpbnMgKj4odGhpc09iaik7Cisg
ICAgcGx1Z2lucy0+cmVmcmVzaChhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKaW5kZXggOTAw
MzgzZS4uN2IzMjZjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24u
Y3BwCisrKyBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcApAQCAtMzcwLDE0ICsz
NzAsMTQgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURv
Y3VtZW50KGNvbnN0IFN0cmluZyYgdHlwZSwgRnJhbWUKIAogICAgIC8vIFBERiBpcyBvbmUgaW1h
Z2UgdHlwZSBmb3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0LWluIHN1cHBvcnQu
CiAgICAgLy8gV2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3ZlciBhbGwgaW1hZ2Ug
dHlwZXMsIG9idmlvdXNseS4KLSAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwg
dHlwZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUo
dHlwZSkpCisgICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0gInRl
eHQvcGRmIikgJiYgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGZyYW1lLCB0eXBl
KSkKICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAg
aWYgKEltYWdlOjpzdXBwb3J0c1R5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VE
b2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGV4Y2VwdCB0ZXh0
L3BsYWluIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBsdWdpbnMuIEluIHBhcnRpY3VsYXIsIEFkb2Jl
IFNWRyBWaWV3ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIFNWRywgaWYgaW5zdGFsbGVkLgogICAgIC8v
IERpc2FsbG93aW5nIHBsdWctaW5zIHRvIHVzZSB0ZXh0L3BsYWluIHByZXZlbnRzIHBsdWctaW5z
IGZyb20gaGlqYWNraW5nIGEgZnVuZGFtZW50YWwgdHlwZSB0aGF0IHRoZSBicm93c2VyIGlzIGV4
cGVjdGVkIHRvIGhhbmRsZSwKICAgICAvLyBhbmQgYWxzbyBzZXJ2ZXMgYXMgYW4gb3B0aW1pemF0
aW9uIHRvIHByZXZlbnQgbG9hZGluZyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBpbiB0aGUgY29tbW9u
IGNhc2UuCi0gICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIFBsdWdJbkluZm9TdG9yZTo6
c3VwcG9ydHNNSU1FVHlwZSh0eXBlKSkgCisgICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYm
IFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShmcmFtZSwgdHlwZSkpIAogICAgICAg
ICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICBpZiAoaXNUZXh0
TUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dERvY3VtZW50KHRoaXMsIGZy
YW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vUGx1Z0luSW5mb1N0b3JlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL1BsdWdJbkluZm9TdG9yZS5oCmluZGV4IDM1NjQ1NmYuLmExYWJjNWMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vUGx1Z0luSW5mb1N0b3JlLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaApAQCAtMzEsMzEgKzMxLDM5IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IFBsdWdpbkluZm87CitjbGFzcyBGcmFtZTsKIAog
c3RydWN0IE1pbWVDbGFzc0luZm8gewogICAgIFN0cmluZyB0eXBlOwogICAgIFN0cmluZyBkZXNj
OwogICAgIFN0cmluZyBzdWZmaXhlczsKLSAgICBQbHVnaW5JbmZvKiBwbHVnaW47CiB9OwogCiBz
dHJ1Y3QgUGx1Z2luSW5mbyB7CiAgICAgU3RyaW5nIG5hbWU7CiAgICAgU3RyaW5nIGZpbGU7CiAg
ICAgU3RyaW5nIGRlc2M7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiBtaW1lczsKKyAgICBW
ZWN0b3I8TWltZUNsYXNzSW5mbz4gbWltZXM7Cit9OworCitzdHJ1Y3QgTWltZUluZm8geworICAg
IFBsdWdpbkluZm8gcGx1Z2luOworICAgIGludCBtaW1lSW5kZXg7IC8vIGluZGV4IGluIHBsdWdp
bi5taW1lcworCisgICAgaW5saW5lIGNvbnN0IE1pbWVDbGFzc0luZm8gJm1pbWUoKSBjb25zdAor
ICAgIHsgcmV0dXJuIHBsdWdpbi5taW1lcy5hdChtaW1lSW5kZXgpOyB9CiB9OwogCiBjbGFzcyBQ
bHVnSW5JbmZvU3RvcmUgewogcHVibGljOgotICAgIFBsdWdpbkluZm8gKmNyZWF0ZVBsdWdpbklu
Zm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKTsKLSAgICB1bnNpZ25lZCBwbHVnaW5Db3VudCgp
IGNvbnN0OwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgc3RhdGljIFBsdWdpbkluZm8gcGx1Z2luSW5mb0F0KEZyYW1lKiBmcmFt
ZSwgdW5zaWduZWQpOworICAgIHN0YXRpYyB1bnNpZ25lZCBwbHVnaW5Db3VudChGcmFtZSogZnJh
bWUpOworICAgIHN0YXRpYyBNaW1lSW5mbyBtaW1lVHlwZUF0KEZyYW1lKiBmcmFtZSwgdW5zaWdu
ZWQpOworICAgIHN0YXRpYyB1bnNpZ25lZCBtaW1lVHlwZUNvdW50KEZyYW1lKiBmcmFtZSk7Cisg
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNNSU1FVHlwZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOworICAgIHN0YXRpYyB2b2lkIHJlZnJlc2goRnJhbWUqIGZyYW1lLCBib29s
IHJlbG9hZE9wZW5QYWdlcyk7CiB9OwogCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2Fk
T3BlblBhZ2VzKTsKLQogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZv
U3RvcmVRdC5jcHAKaW5kZXggZmM5YjE4OC4uNTAxYWI2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAKQEAgLTIxLDYyICsyMSw1NyBAQAogKi8KICNpbmNsdWRl
ICJQbHVnSW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJxZGVidWcuaCIKLSNpZiBRVF9WRVJTSU9O
IDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNlbmRpZgotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAicXdlYnBhZ2VfcC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdp
bkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpCitzdGF0aWMgUVdlYlBhZ2VQcml2YXRl
ICpwYWdlUHJpdmF0ZShGcmFtZSogZnJhbWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZy
YW1lTG9hZGVyQ2xpZW50UXQgKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSktPnBhZ2VQcml2
YXRlKCk7Cit9CisKK1BsdWdpbkluZm8gUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5JbmZvQXQoRnJh
bWUqIGZyYW1lLCB1bnNpZ25lZCBpKQogewogICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+
IFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgoIiA8PCBp
IDw8ICIpIjsKKyAgICByZXR1cm4gcGFnZVByaXZhdGUoZnJhbWUpLT5wbHVnaW5zKCkuYXQoaSk7
Cit9CiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBRV2ViRmFjdG9yeUxvYWRlciAq
bG9hZGVyID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKTsKLSAgICBpZiAoaSA+IGxvYWRlci0+
bV9wbHVnaW5JbmZvLmNvdW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IFFXZWJG
YWN0b3J5TG9hZGVyOjpJbmZvICZxaW5mbyA9IGxvYWRlci0+bV9wbHVnaW5JbmZvLmF0KGkpOwot
ICAgIFBsdWdpbkluZm8gKmluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBpbmZvLT5uYW1lID0g
cWluZm8ubmFtZTsKLSAgICBpbmZvLT5kZXNjID0gcWluZm8uZGVzY3JpcHRpb247Ci0gICAgZm9y
ZWFjaCAoY29uc3QgUVdlYkZhY3RvcnlMb2FkZXI6Ok1pbWVJbmZvICZtLCBxaW5mby5taW1lcykg
ewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAg
ICAgIG1pbWUtPnR5cGUgPSBtLnR5cGU7Ci0gICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87Ci0g
ICAgICAgIGZvcmVhY2ggKFFTdHJpbmcgZXh0LCBtLmV4dGVuc2lvbnMpCi0gICAgICAgICAgICBt
aW1lLT5zdWZmaXhlcy5hcHBlbmQoZXh0KTsKLSAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1p
bWUpOwotICAgIH0KLSAgICByZXR1cm4gaW5mbzsKLSNlbHNlCi0gICAgcmV0dXJuIDA7IC8vICMj
IyBGSVhNRQotI2VuZGlmCit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KEZy
YW1lKiBmcmFtZSkKK3sKKyAgICByZXR1cm4gcGFnZVByaXZhdGUoZnJhbWUpLT5wbHVnaW5zKCku
Y291bnQoKTsKIH0KIAotdW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNv
bnN0CitNaW1lSW5mbyBQbHVnSW5JbmZvU3RvcmU6Om1pbWVUeXBlQXQoRnJhbWUqIGZyYW1lLCB1
bnNpZ25lZCBpKQogewotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIC8vcURlYnVnKCkg
PDwgIj4+Pj4+Pj4+Pj4+IFBsdWdJbkluZm9TdG9yZTo6Y291bnQgPSIgPDwgUVdlYkZhY3RvcnlM
b2FkZXI6OnNlbGYoKS0+a2V5cygpLmNvdW50KCk7Ci0gICAgcmV0dXJuIFFXZWJGYWN0b3J5TG9h
ZGVyOjpzZWxmKCktPmtleXMoKS5jb3VudCgpOwotI2Vsc2UKLSAgICByZXR1cm4gMDsKLSNlbmRp
ZgorICAgIHJldHVybiBwYWdlUHJpdmF0ZShmcmFtZSktPnBsdWdpbk1pbWVUeXBlcygpLmF0KGkp
OwogfQogCi1ib29sIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIHN0cmluZykKK3Vuc2lnbmVkIFBsdWdJbkluZm9TdG9yZTo6bWltZVR5cGVD
b3VudChGcmFtZSogZnJhbWUpCiB7Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgYm9v
bCBzdXBwb3J0cyA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPnN1cHBvcnRzTWltZVR5cGUo
c3RyaW5nKTsKLSNlbHNlCi0gICAgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOwotI2VuZGlmCi0gICAg
Ly9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVU
eXBlKCIgPDwgc3RyaW5nIDw8ICIpID0iIDw8IHN1cHBvcnRzOwotICAgIHJldHVybiBzdXBwb3J0
czsKKyAgICByZXR1cm4gcGFnZVByaXZhdGUoZnJhbWUpLT5wbHVnaW5NaW1lVHlwZXMoKS5jb3Vu
dCgpOwogfQogCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wpIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworYm9vbCBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHN0cmluZykKK3sKKyAgICBRTGlzdDxNaW1lSW5mbz4g
bWltZVR5cGVzID0gcGFnZVByaXZhdGUoZnJhbWUpLT5wbHVnaW5NaW1lVHlwZXMoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1pbWVUeXBlcy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1pbWVUeXBlcy5hdChpKS5taW1lKCkudHlwZSA9PSBzdHJpbmcpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBsdWdJbkluZm9T
dG9yZTo6cmVmcmVzaChGcmFtZSogZnJhbWUsIGJvb2wgcmVsb2FkKSB7CisgICAgUVdlYlBhZ2VQ
cml2YXRlICpwYWdlID0gcGFnZVByaXZhdGUoZnJhbWUpOworICAgIGlmIChwYWdlLT5wbHVnaW5G
YWN0b3J5KSB7CisgICAgICAgIHBhZ2UtPnBsdWdpbkZhY3RvcnktPnJlbG9hZCgpOworICAgIH0K
KyAgICBpZiAocmVsb2FkKQorICAgICAgICBwYWdlLT5xLT50cmlnZ2VyQWN0aW9uKFFXZWJQYWdl
OjpSZWxvYWQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDkzY2FhYTAuLjQ3MmY4MjcgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAicXdlYmhpc3RvcnkuaCIK
ICNpbmNsdWRlICJxd2ViaGlzdG9yeV9wLmgiCiAjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCisj
aW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnRRdC5oIgpAQCAtNTk1LDYgKzU5Niw1NyBAQCB2b2lkIFFX
ZWJQYWdlUHJpdmF0ZTo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQgKmV2KQogI2VuZGlmCiB9CiAKK1FM
aXN0PFdlYkNvcmU6OlBsdWdpbkluZm8+IFFXZWJQYWdlUHJpdmF0ZTo6cGx1Z2lucygpIGNvbnN0
Cit7CisgICAgaWYgKCFjYWNoZWRQbHVnaW5zLmlzRW1wdHkoKSB8fCAhcGx1Z2luRmFjdG9yeSkK
KyAgICAgICAgcmV0dXJuIGNhY2hlZFBsdWdpbnM7CisKKyAgICBRTGlzdDxRV2ViUGx1Z2luRmFj
dG9yeTo6UGx1Z2luPiBwbHVnaW5zID0gcGx1Z2luRmFjdG9yeS0+cGx1Z2lucygpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiAmcGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKworICAg
ICAgICBXZWJDb3JlOjpQbHVnaW5JbmZvIHBpbmZvOworICAgICAgICBwaW5mby5uYW1lID0gcGx1
Z2luLm5hbWU7CisgICAgICAgIHBpbmZvLmRlc2MgPSBwbHVnaW4uZGVzY3JpcHRpb247CisKKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHVnaW4ubWltZVR5cGVzLmNvdW50KCk7ICsraSkg
eworICAgICAgICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBlICZtaW1lVHlw
ZSA9IHBsdWdpbi5taW1lVHlwZXMuYXQoaSk7CisKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8g
bWluZm87CisgICAgICAgICAgICBtaW5mby50eXBlID0gbWltZVR5cGUubmFtZTsKKyAgICAgICAg
ICAgIG1pbmZvLmRlc2MgPSBtaW1lVHlwZS5kZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIG1pbmZv
LnN1ZmZpeGVzID0gbWltZVR5cGUuc3VmZml4ZXMuam9pbigiOyAiKTsKKyAgICAgICAgICAgIHBp
bmZvLm1pbWVzLmFwcGVuZChtaW5mbyk7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZWRQbHVn
aW5zLmFwcGVuZChwaW5mbyk7CisgICAgfQorCisgICAgcmV0dXJuIGNhY2hlZFBsdWdpbnM7Cit9
CisKK1FMaXN0PFdlYkNvcmU6Ok1pbWVJbmZvPiBRV2ViUGFnZVByaXZhdGU6OnBsdWdpbk1pbWVU
eXBlcygpIGNvbnN0Cit7CisgICAgaWYgKCFjYWNoZWRQbHVnaW5NaW1lVHlwZXMuaXNFbXB0eSgp
IHx8ICFwbHVnaW5GYWN0b3J5KQorICAgICAgICByZXR1cm4gY2FjaGVkUGx1Z2luTWltZVR5cGVz
OworCisgICAgUUxpc3Q8V2ViQ29yZTo6UGx1Z2luSW5mbz4gcGx1Z2lucyA9IHRoaXMtPnBsdWdp
bnMoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5jb3VudCgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6UGx1Z2luSW5mbyAmcGx1Z2luID0gcGx1Z2lucy5hdChp
KTsKKworICAgICAgICBXZWJDb3JlOjpNaW1lSW5mbyBtaW5mbzsKKyAgICAgICAgbWluZm8ucGx1
Z2luID0gcGx1Z2luOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGx1Z2luLm1pbWVz
LnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBtaW5mby5taW1lSW5kZXggPSBqOworICAgICAg
ICAgICAgY2FjaGVkUGx1Z2luTWltZVR5cGVzLmFwcGVuZChtaW5mbyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gY2FjaGVkUGx1Z2luTWltZVR5cGVzOworfQorCiAvKiEKICAgICBc
ZW51bSBRV2ViUGFnZTo6V2ViQWN0aW9uCiAKQEAgLTEzODQsOSArMTQzNiwxMyBAQCBRTmV0d29y
a0FjY2Vzc01hbmFnZXIgKlFXZWJQYWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNvbnN0CiAg
ICAgcmV0dXJuIGQtPm5ldHdvcmtNYW5hZ2VyOwogfQogCisjZW5kaWYKKwogdm9pZCBRV2ViUGFn
ZTo6c2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9yeSkKIHsKICAgICBk
LT5wbHVnaW5GYWN0b3J5ID0gZmFjdG9yeTsKKyAgICBkLT5jYWNoZWRQbHVnaW5NaW1lVHlwZXMu
Y2xlYXIoKTsKKyAgICBkLT5jYWNoZWRQbHVnaW5zLmNsZWFyKCk7CiB9CiAKIFFXZWJQbHVnaW5G
YWN0b3J5ICpRV2ViUGFnZTo6cGx1Z2luRmFjdG9yeSgpIGNvbnN0CkBAIC0xMzk0LDggKzE0NTAs
NiBAQCBRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6OnBsdWdpbkZhY3RvcnkoKSBjb25zdAog
ICAgIHJldHVybiBkLT5wbHVnaW5GYWN0b3J5OwogfQogCi0jZW5kaWYKLQogLyohCiAgICAgVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHVzZXIgYWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMg
aXMgbmVlZGVkLiBZb3UgY2FuIHJlLWltcGxlbWVudCB0aGlzCiAgICAgZnVuY3Rpb24gdG8gZHlu
YW1pY2FsbHkgcmV0dXJuIGRpZmZlcmVudCB1c2VyIGFnZW50J3MgZm9yIGRpZmZlcmVudCB1cmxz
LCBiYXNlZCBvbiB0aGUgXGEgdXJsIHBhcmFtZXRlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCA2NTE1NjgyLi45
ZTIwMTUyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5oCkBAIC0xNzEsMTAgKzE3MSwxMCBAQCBwdWJsaWM6CiAjZWxzZQog
ICAgIHZvaWQgc2V0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpt
YW5hZ2VyKTsKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCkgY29uc3Q7CisjZW5kaWYKIAogICAgIHZvaWQgc2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2lu
RmFjdG9yeSAqZmFjdG9yeSk7CiAgICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3Rvcnko
KSBjb25zdDsKLSNlbmRpZgogCiAgICAgcXVpbnQ2NCB0b3RhbEJ5dGVzKCkgY29uc3Q7CiAgICAg
cXVpbnQ2NCBieXRlc1JlY2VpdmVkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmluZGV4IDY0ZWRkMzIu
LjQ2YmViMGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJL
VVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZv
U3RvcmUuaCIKIAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMTU1LDkgKzE1NiwxNCBA
QCBwdWJsaWM6CiAKICAgICBRQWN0aW9uICphY3Rpb25zW1FXZWJQYWdlOjpXZWJBY3Rpb25Db3Vu
dF07CiAKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAgICAgUVdlYlBsdWdpbkZhY3Rvcnkg
KnBsdWdpbkZhY3Rvcnk7Ci0jZW5kaWYKKyAgICBRTGlzdDxXZWJDb3JlOjpQbHVnaW5JbmZvPiBw
bHVnaW5zKCkgY29uc3Q7CisgICAgUUxpc3Q8V2ViQ29yZTo6TWltZUluZm8+IHBsdWdpbk1pbWVU
eXBlcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgUUxpc3Q8V2ViQ29yZTo6TWlt
ZUluZm8+IGNhY2hlZFBsdWdpbk1pbWVUeXBlczsKKyAgICBtdXRhYmxlIFFMaXN0PFdlYkNvcmU6
OlBsdWdpbkluZm8+IGNhY2hlZFBsdWdpbnM7CisgICAgZnJpZW5kIGNsYXNzIFFXZWJQYWdlOwog
fTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5
LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwCmluZGV4IDg2M2I0MzUu
LjdjYTI4YjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3Bw
CisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwCkBAIC0xMiw0ICsxMiw4
IEBAIFFXZWJQbHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkoKQogewogfQogCit2b2lk
IFFXZWJQbHVnaW5GYWN0b3J5OjpyZWxvYWQoKQoreworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBs
dWdpbmZhY3RvcnkuaAppbmRleCA3YTM3N2FlLi40ZDZlNzQxIDEwMDY0NAotLS0gYS9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2lu
ZmFjdG9yeS5oCkBAIC0yNCwyNiArMjQsMzUgQEAKIAogI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0
MDAKIAotI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KKyNp
bmNsdWRlIDxRdENvcmUvcXN0cmluZ2xpc3QuaD4KIAogY2xhc3MgUVVybDsKIGNsYXNzIFFXZWJQ
bHVnaW5GYWN0b3J5UHJpdmF0ZTsKIGNsYXNzIFFTdHJpbmc7Ci1jbGFzcyBRU3RyaW5nTGlzdDsK
IAogY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYlBsdWdpbkZhY3RvcnkgOiBwdWJsaWMgUU9iamVj
dAogewogICAgIFFfT0JKRUNUCiBwdWJsaWM6CisgICAgc3RydWN0IE1pbWVUeXBlIHsKKyAgICAg
ICAgUVN0cmluZyBuYW1lOworICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBR
U3RyaW5nTGlzdCBzdWZmaXhlczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpbiB7CisgICAg
ICAgIFFTdHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAg
UUxpc3Q8TWltZVR5cGU+IG1pbWVUeXBlczsKKyAgICB9OworCiAgICAgZXhwbGljaXQgUVdlYlBs
dWdpbkZhY3RvcnkoUU9iamVjdCAqcGFyZW50ID0gMCk7CiAgICAgdmlydHVhbCB+UVdlYlBsdWdp
bkZhY3RvcnkoKTsKIAotICAgIHZpcnR1YWwgaW50IHBsdWdpbkNvdW50KCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZWxvYWQoKTsKIAotICAgIHZpcnR1YWwgUVN0cmluZyBwbHVnaW5BdChpbnQgaW5k
ZXgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25BdChpbnQgaW5k
ZXgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1pbWVUeXBlc0F0KGludCBp
bmRleCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZXh0ZW5zaW9uc0Zvck1p
bWVUeXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBR
T2JqZWN0ICpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IDY4NDcyYTguLjMxOWQ5MGQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAKQEAgLTk1LDkgKzk1LDkgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpzZXRGcmFtZShR
V2ViRnJhbWUqIHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpCiAgICAgICAgICAgICBtX3dlYkZyYW1l
LCBTSUdOQUwodGl0bGVDaGFuZ2VkKGNvbnN0IFFTdHJpbmcmKSkpOwogfQogCi1RV2ViRnJhbWUq
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OndlYkZyYW1lKCkgY29uc3QKK1FXZWJQYWdlUHJpdmF0ZSAq
RnJhbWVMb2FkZXJDbGllbnRRdDo6cGFnZVByaXZhdGUoKSBjb25zdAogewotICAgIHJldHVybiBt
X3dlYkZyYW1lOworICAgIHJldHVybiBtX3dlYkZyYW1lLT5kLT5wYWdlLT5kOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNhbGxQb2xpY3lGdW5jdGlvbihGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKQpAQCAtODkzLDE5ICs4OTMsOCBAQCBP
YmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50
SW1hZ2U7CiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBpZiAoUVdlYkZhY3RvcnlM
b2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpCi0gICAgICAgIHJldHVy
biBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0jZWxzZQotICAgIGlmIChRV2ViUGx1Z2lu
RmFjdG9yeSAqZmFjdG9yeSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2luRmFjdG9yeSgpKSB7
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBwbHVnaW5Db3VudCA9IGZhY3RvcnktPnBsdWdpbkNv
dW50KCk7Ci0gICAgICAgICAgICAgaSA8IHBsdWdpbkNvdW50OyArK2kpIHsKLQotICAgICAgICAg
ICAgaWYgKGZhY3RvcnktPm1pbWVUeXBlc0F0KGkpLmNvbnRhaW5zKG1pbWVUeXBlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmCisgICAgaWYgKFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSht
X2ZyYW1lLCBtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVn
aW47CiAKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVU
eXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmggYi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCmluZGV4IDUzMjYx
YTAuLjA5ODVmODIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmgKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuaApAQCAtMzcsNyArMzcsOSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiU2hhcmVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotY2xhc3Mg
UVdlYkZyYW1lOworI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorY2xhc3MgUVdlYkZyYW1lUHJpdmF0
ZTsKK2NsYXNzIFFXZWJQYWdlUHJpdmF0ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02
OCw3ICs3MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lTG9hZGVyQ2xp
ZW50UXQoKTsKICAgICAgICAgfkZyYW1lTG9hZGVyQ2xpZW50UXQoKTsKICAgICAgICAgdm9pZCBz
ZXRGcmFtZShRV2ViRnJhbWUqIHdlYkZyYW1lLCBGcmFtZSogZnJhbWUpOwotICAgICAgICBRV2Vi
RnJhbWUqIHdlYkZyYW1lKCkgY29uc3Q7CisgICAgICAgIGlubGluZSBRV2ViRnJhbWUqIHdlYkZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV93ZWJGcmFtZTsgfQorCisgICAgICAgIFFXZWJQYWdlUHJp
dmF0ZSAqcGFnZVByaXZhdGUoKSBjb25zdDsKKyAgICAgICAgaW5saW5lIFFXZWJGcmFtZVByaXZh
dGUgKmZyYW1lUHJpdmF0ZSgpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1fd2ViRnJhbWUtPmQ7
IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OyAvLyBtYWlubHkg
Zm9yIGFzc2VydGlvbnMKICAgICAgICAgdmlydHVhbCBib29sIGhhc0ZyYW1lVmlldygpIGNvbnN0
OyAvLyBkaXR0bwo=
</data>
<flag name="review"
          id="8017"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18436</attachid>
            <date>2008-01-14 07:11:38 -0800</date>
            <delta_ts>2008-01-18 05:27:04 -0800</delta_ts>
            <desc>new (concept) patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>80519</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGY4ZjNmNjUuLjg0OGY1NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjEyLDcgKzIxMiw2IEBAIExVVF9GSUxFUyArPSBc
CiAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
a2pzX2Nzcy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKLSAgICBiaW5k
aW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX3dpbmRvdy5j
cHAKIAogTFVUX1RBQkxFX0ZJTEVTICs9IFwKQEAgLTMzNiw2ICszMzUsMTEgQEAgSURMX0JJTkRJ
TkdTICs9IFwKICAgICBwYWdlL0RPTVdpbmRvdy5pZGwgXAogICAgIHBhZ2UvSGlzdG9yeS5pZGwg
XAogICAgIHBhZ2UvU2NyZWVuLmlkbCBcCisgICAgcGFnZS9OYXZpZ2F0b3IuaWRsIFwKKyAgICBw
bHVnaW5zL1BsdWdpbi5pZGwgXAorICAgIHBsdWdpbnMvTWltZVR5cGUuaWRsIFwKKyAgICBwbHVn
aW5zL1BsdWdpbkFycmF5LmlkbCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbCBcCiAg
ICAgeG1sL0RPTVBhcnNlci5pZGwgXAogICAgIHhtbC9YTUxTZXJpYWxpemVyLmlkbAogCkBAIC0z
ODAsMTIgKzM4NCwxNCBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU1RyZWVXYWxr
ZXJDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAg
ICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNQ
bHVnaW5DdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNw
cCBcCisgICAgYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBcCiAgICAgYmlu
ZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcCBc
CiAgICAgYmluZGluZ3MvanMva2pzX2RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19ldmVu
dHMuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAgXAotICAgIGJpbmRpbmdzL2pz
L2tqc19uYXZpZ2F0b3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcCBcCiAgICAgY3NzL0NTU0JvcmRlckltYWdlVmFs
dWUuY3BwIFwKQEAgLTY0MCw2ICs2NDYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5jcHAgXAogICAgIHBhZ2UvRE9NU2VsZWN0aW9uLmNwcCBcCiAgICAg
cGFnZS9ET01XaW5kb3cuY3BwIFwKKyAgICBwYWdlL05hdmlnYXRvci5jcHAgXAogICAgIHBhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0V2ZW50SGFuZGxlci5jcHAgXAogICAgIHBh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCkBAIC02NTIsNiArNjU5LDExIEBAIFNPVVJDRVMgKz0g
XAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAgcGFnZS9T
ZXR0aW5ncy5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAgXAorICAgIHBsdWdpbnMv
UGx1Z2luQXJyYXkuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbi5jcHAgXAorICAgIHBsdWdpbnMv
TWltZVR5cGUuY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIFwKICAgICBwbGF0
Zm9ybS9BcmVuYS5jcHAgXAogICAgIHBsYXRmb3JtL0FycmF5SW1wbC5jcHAgXAogICAgIHBsYXRm
b3JtL0F0b21pY1N0cmluZy5jcHAgXApAQCAtODU3LDcgKzg2OSw2IEBAIHF0LXBvcnQgewogICAg
IHBsYXRmb3JtL3F0L1BsYXRmb3JtTW91c2VFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQv
UGxhdGZvcm1TY3JlZW5RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2Nyb2xsQmFy
UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAgXAogICAgIHBs
YXRmb3JtL3F0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUVdlYlBvcHVwLmNw
cCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXApAQCAtODczLDYgKzg4NCw3
IEBAIHF0LXBvcnQgewogICAgIHBsYXRmb3JtL3F0L1RocmVhZGluZ1F0LmNwcCBcCiAgICAgcGxh
dGZvcm0vcXQvV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3Bw
IFwKKyAgICBwbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjMxMmQ2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWlt
ZVR5cGVBcnJheUN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTWltZVR5cGVBcnJheS5oIgorCisjaW5j
bHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiTWltZVR5cGVBcnJheS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jvb2wgSlNNaW1lVHlw
ZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgTWltZVR5cGVBcnJheSogbWlt
ZVR5cGVBcnJheSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBtaW1lVHlwZUFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUocHJvcGVydHlOYW1lKTsKK30KKwor
SlNWYWx1ZSogSlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU01pbWVUeXBlQXJyYXkgKnRoaXNPYmog
PSBzdGF0aWNfY2FzdDxKU01pbWVUeXBlQXJyYXkgKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICBy
ZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1l
KSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJh
eUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjgwNTcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU1BsdWdpbkFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNs
dWRlICJQbHVnaW5BcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBLSlM7CisKK2Jvb2wgSlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNT
dGF0ZSosIFBsdWdpbkFycmF5KiBwbHVnaW5BcnJheSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW5BcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHBy
b3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTUGx1Z2lu
QXJyYXkgKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5ICo+KHNsb3Quc2xvdEJh
c2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVy
KHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTUGx1Z2luQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDMyMzEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApAQCAtMCww
ICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBs
dWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisK
K2Jvb2wgSlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW4qIHBs
dWdpbiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVn
aW4tPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1Bs
dWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVj
dCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgSlNQbHVnaW4gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbiAqPihz
bG90LnNsb3RCYXNlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+
bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGIyMTAuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDU1MSArMCwwIEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0vKgot
ICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRpbkBrZGUub3JnKQotICogIENvcHlyaWdo
dCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgImtqc19uYXZpZ2F0b3IuaCIKLQotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1
ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxhbmd1YWdlLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgotI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KLSNpZiBQTEFU
Rk9STShNQUMpICYmIFBMQVRGT1JNKFBQQykKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExB
VEZPUk0gIk1hY1BQQyIKLSNlbGlmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2KQotI2Rl
ZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjSW50ZWwiCi0jZWxpZiBQTEFURk9S
TShXSU5fT1MpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKLSNl
bHNlCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICIiCi0jZW5kaWYKLSNlbmRp
ZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KLQotI2lmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9QUk9EVUNUCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdl
Y2tvIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0KLSNpZm5k
ZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FU
T1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3IgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklH
QVRPUl9QUk9EVUNUX1NVQgotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgotI2Rl
ZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMuIgotI2Vu
ZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKLQotI2lmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9WRU5ET1JfU1VCCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9T
VUIgIiIKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgotCi11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIEtKUyB7Ci0KLSAgICBjbGFzcyBQ
bHVnaW5CYXNlIDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVn
aW5CYXNlKEV4ZWNTdGF0ZSAqZXhlYyk7Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbkJhc2UoKTsK
LSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2goYm9vbCByZWxvYWQpOwotCi0g
ICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vz
c2FyeSgpOwotICAgICAgICBzdGF0aWMgVmVjdG9yPFBsdWdpbkluZm8qPiAqcGx1Z2luczsKLSAg
ICAgICAgc3RhdGljIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gKm1pbWVzOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgc3RhdGljIGludCBtX3BsdWdJbkNhY2hlUmVmQ291bnQ7Ci0gICAgfTsKLQot
Ci0gICAgY2xhc3MgUGx1Z2lucyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFBsdWdpbnMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykge307Ci0g
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0
IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IExlbmd0aCwg
UmVmcmVzaCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdl
dHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3Rh
dGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYp
OwotICAgIH07Ci0KLSAgICBjbGFzcyBNaW1lVHlwZXMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0g
ICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZXMoRXhlY1N0YXRlICpleGVjKSA6IFBsdWdpbkJh
c2UoZXhlYykgeyB9OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpT
VmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGludCB0b2tlbikgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAg
IGVudW0geyBMZW5ndGggfTsKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAq
aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBj
b25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUgKm5hbWVHZXR0ZXIo
RXhlY1N0YXRlICosIEpTT2JqZWN0ICosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2Ug
ewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luKEV4ZWNTdGF0ZSAqZXhlYywgUGx1Z2luSW5m
byAqaW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZp
ZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IE5hbWUsIEZpbGVuYW1lLCBE
ZXNjcmlwdGlvbiwgTGVuZ3RoIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFs
dWUgKmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci0KLSAgICAgICAgUGx1Z2luSW5mbyAqbV9pbmZvOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIE1pbWVUeXBlKCBFeGVjU3RhdGUgKmV4ZWMsIE1pbWVDbGFzc0luZm8gKmluZm8gKSA6IFBs
dWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgVHlwZSwgU3VmZml4ZXMsIERlc2NyaXB0aW9uLCBF
bmFibGVkUGx1Z2luIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgTWltZUNsYXNzSW5mbyAqbV9p
bmZvOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNpbmNsdWRlICJranNfbmF2aWdhdG9y
Lmx1dC5oIgotCi1uYW1lc3BhY2UgS0pTIHsKLQotY29uc3QgQ2xhc3NJbmZvIFBsdWdpbnM6Omlu
Zm8gPSB7ICJQbHVnaW5BcnJheSIsIDAsICZQbHVnaW5zVGFibGUsIDAgfTsKLWNvbnN0IENsYXNz
SW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlwZUFycmF5IiwgMCwgJk1pbWVUeXBlc1Rh
YmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gUGx1Z2luOjppbmZvID0geyAiUGx1Z2luIiwgMCwg
JlBsdWdpblRhYmxlLCAwIH07Ci1jb25zdCBDbGFzc0luZm8gTWltZVR5cGU6OmluZm8gPSB7ICJN
aW1lVHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlLCAwIH07Ci0KLVZlY3RvcjxQbHVnaW5JbmZvKj4g
KktKUzo6UGx1Z2luQmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8TWltZUNsYXNzSW5mbyo+ICpL
SlM6OlBsdWdpbkJhc2U6Om1pbWVzID0gMDsKLWludCBLSlM6OlBsdWdpbkJhc2U6Om1fcGx1Z0lu
Q2FjaGVSZWZDb3VudCA9IDA7Ci0KLWNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7
ICJOYXZpZ2F0b3IiLCAwLCAmTmF2aWdhdG9yVGFibGUsIDAgfTsKLS8qCi1AYmVnaW4gTmF2aWdh
dG9yVGFibGUgMTMKLSAgYXBwQ29kZU5hbWUgICBOYXZpZ2F0b3I6OkFwcENvZGVOYW1lICBEb250
RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcE5hbWUgICAgICAgTmF2aWdhdG9yOjpBcHBOYW1lICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBhcHBWZXJzaW9uICAgIE5hdmlnYXRvcjo6QXBwVmVyc2lv
biAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbGFuZ3VhZ2UgICAgICBOYXZpZ2F0b3I6Okxhbmd1
YWdlICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHVzZXJBZ2VudCAgICAgTmF2aWdhdG9yOjpV
c2VyQWdlbnQgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwbGF0Zm9ybSAgICAgIE5hdmlnYXRv
cjo6UGxhdGZvcm0gICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGx1Z2lucyAgICAgICBOYXZp
Z2F0b3I6Ol9QbHVnaW5zICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIG1pbWVUeXBlcyAgICAg
TmF2aWdhdG9yOjpfTWltZVR5cGVzICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwcm9kdWN0ICAg
ICAgIE5hdmlnYXRvcjo6UHJvZHVjdCAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcHJvZHVj
dFN1YiAgICBOYXZpZ2F0b3I6OlByb2R1Y3RTdWIgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHZl
bmRvciAgICAgICAgTmF2aWdhdG9yOjpWZW5kb3IgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICB2ZW5kb3JTdWIgICAgIE5hdmlnYXRvcjo6VmVuZG9yU3ViICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgY29va2llRW5hYmxlZCBOYXZpZ2F0b3I6OkNvb2tpZUVuYWJsZWQgRG9udERlbGV0ZXxS
ZWFkT25seQotICBqYXZhRW5hYmxlZCAgIE5hdmlnYXRvcjo6SmF2YUVuYWJsZWQgIERvbnREZWxl
dGV8RnVuY3Rpb24gMAotQGVuZAotKi8KLUtKU19JTVBMRU1FTlRfUFJPVE9UWVBFX0ZVTkNUSU9O
KE5hdmlnYXRvckZ1bmMpCi0KLU5hdmlnYXRvcjo6TmF2aWdhdG9yKEV4ZWNTdGF0ZSAqZXhlYywg
RnJhbWUgKmYpIAotICAgIDogbV9mcmFtZShmKQotewotICAgIHNldFByb3RvdHlwZShleGVjLT5s
ZXhpY2FsSW50ZXJwcmV0ZXIoKS0+YnVpbHRpbk9iamVjdFByb3RvdHlwZSgpKTsKLX0KLQotYm9v
bCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICByZXR1cm4g
Z2V0U3RhdGljUHJvcGVydHlTbG90PE5hdmlnYXRvckZ1bmMsIE5hdmlnYXRvciwgSlNPYmplY3Q+
KGV4ZWMsICZOYXZpZ2F0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQot
SlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAotewotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgQXBwQ29kZU5hbWU6
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCJNb3ppbGxhIik7Ci0gIGNhc2UgQXBwTmFtZToKLSAgICBy
ZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7Ci0gIGNhc2UgQXBwVmVyc2lvbjogewotICAgIC8v
IFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUg
Ik1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUt
PmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPlVSTCgpIDogS1VSTCgpKTsKLSAgICByZXR1cm4ganNTdHJpbmcodXNlckFnZW50LnN1
YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSkpOwotICB9Ci0gIGNhc2UgUHJvZHVjdDoK
LSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVCk7Ci0gIGNhc2Ug
UHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5kb3JTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdF
QkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIpOwotICBjYXNlIExhbmd1YWdlOgotICAgIHJldHVy
biBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2UoKSk7Ci0gIGNhc2UgVXNlckFnZW50OgotICAgIHJl
dHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT5VUkwoKSA6IEtVUkwoKSkpOwotICBjYXNlIFBs
YXRmb3JtOgotICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSk7
Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0dXJuIG5ldyBQbHVnaW5zKGV4ZWMpOwotICBjYXNl
IF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZXMoZXhlYyk7Ci0gIGNhc2UgQ29v
a2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNCb29sZWFuKGNvb2tpZXNFbmFibGVkKG1fZnJhbWUt
PmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZv
aWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKQotewotICAgIGlmICgh
cGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFZlY3RvcjxQbHVnaW5JbmZvKj47Ci0g
ICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj47Ci0gICAgICAgIAotICAg
ICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgUGx1Z0luSW5mb1N0b3JlIGM7Ci0g
ICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50ID0gYy5wbHVnaW5Db3VudCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1Z2luQ291bnQ7IG4rKykgewotICAgICAgICAgICAg
UGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleChu
KTsKLSAgICAgICAgICAgIGlmICghcGx1Z2luKSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgcGx1Z2lucy0+YXBwZW5kKHBsdWdpbik7Ci0gICAg
ICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46
Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbi0+bWltZXMuYmVnaW4o
KTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAgICAgICAgICAgICAgbWltZXMtPmFwcGVuZCgqaXRy
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGx1Z2luQmFzZTo6UGx1Z2luQmFzZShFeGVjU3Rh
dGUgKmV4ZWMpCi17Ci0gICAgc2V0UHJvdG90eXBlKGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluT2JqZWN0UHJvdG90eXBlKCkpOwotCi0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNl
c3NhcnkoKTsKLSAgICBtX3BsdWdJbkNhY2hlUmVmQ291bnQrKzsKLX0KLQotUGx1Z2luQmFzZTo6
flBsdWdpbkJhc2UoKQotewotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudC0tOwotICAgIGlmICgh
bV9wbHVnSW5DYWNoZVJlZkNvdW50KSB7Ci0gICAgICAgIGlmIChwbHVnaW5zKSB7Ci0gICAgICAg
ICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAgICAgICAgZGVsZXRlIHBsdWdp
bnM7Ci0gICAgICAgICAgICBwbHVnaW5zID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAobWlt
ZXMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbWltZXMpOwotICAgICAgICAgICAg
ZGVsZXRlIG1pbWVzOwotICAgICAgICAgICAgbWltZXMgPSAwOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIFBsdWdpbkJhc2U6OnJlZnJlc2goYm9vbCByZWxvYWQpCi17Ci0gICAgaWYgKHBs
dWdpbnMpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpwbHVnaW5zKTsKLSAgICAgICAgZGVs
ZXRlIHBsdWdpbnM7Ci0gICAgICAgIHBsdWdpbnMgPSAwOwotICAgIH0KLSAgICBpZiAobWltZXMp
IHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAgIGRlbGV0ZSBtaW1l
czsKLSAgICAgICAgbWltZXMgPSAwOwotICAgIH0KLSAgICAKLSAgICByZWZyZXNoUGx1Z2lucyhy
ZWxvYWQpOwotICAgIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci19Ci0KLQotLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luc1RhYmxlIDIKLSAgbGVuZ3RoICAgICAgICBQbHVn
aW5zOjpMZW5ndGggICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlZnJlc2ggICAgICAg
UGx1Z2luczo6UmVmcmVzaCAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwot
S0pTX0lNUExFTUVOVF9QUk9UT1RZUEVfRlVOQ1RJT04oUGx1Z2luc0Z1bmMpCi0KLUpTVmFsdWUg
KlBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIocGx1
Z2lucy0+c2l6ZSgpKTsKLX0KLQotSlNWYWx1ZSAqUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBuZXcg
UGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlICpQ
bHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlO
YW1lOwotICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lu
cy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyAqcGwg
PSAqaXRyOwotICAgICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50
cnkoJlBsdWdpbnNUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAg
IGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5
KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcjxQbHVnaW5zRnVuYz4pOwotICAgICAg
ZWxzZQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1
ZUdldHRlcjxQbHVnaW5zPik7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAg
ICAgICAvLyBwbHVnaW5zWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwg
cGx1Z2lucy0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMs
IGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gcGx1Z2luW25hbWVdCi0gICAgICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9w
ZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0
ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxQbHVnaW5J
bmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisr
KSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkg
ewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBNaW1lVHlw
ZXNUYWJsZSAxCi0gIGxlbmd0aCAgICAgICAgTWltZVR5cGVzOjpMZW5ndGggICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotQGVuZAotKi8KLQotSlNWYWx1ZSAqTWltZVR5cGVzOjpnZXRWYWx1ZVBy
b3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBBU1NFUlQodG9r
ZW4gPT0gTGVuZ3RoKTsKLSAgcmV0dXJuIGpzTnVtYmVyKG1pbWVzLT5zaXplKCkpOwotfQotCi1K
U1ZhbHVlICpNaW1lVHlwZXM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3Qg
Km9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG1pbWVz
LT5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSAqTWltZVR5cGVzOjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBBdG9t
aWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IG1pbWVzLT5lbmQoKTsKLSAgICBmb3IgKFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5iZWdpbigpOyBpdHIg
IT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptID0gKCppdHIpOwotICAg
ICAgICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1
cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0pOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLX0KLQotYm9vbCBNaW1lVHlwZXM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQot
ewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTWltZVR5
cGVzVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBzbG90LnNl
dFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxNaW1lVHlwZXM+KTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIG1pbWVUeXBlc1sj
XQotICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFt
ZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8IG1pbWVzLT5zaXplKCkpIHsK
LSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW1lVHlw
ZXNbbmFtZV0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3Bl
cnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0g
bWltZXMtPmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJh
dG9yIGl0ciA9IG1pbWVzLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICAg
ICAgaWYgKCgqaXRyKS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBQbHVnaW5CYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90
KTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIFBsdWdpblRhYmxlIDQK
LSAgbmFtZSAgICAgICAgICBQbHVnaW46Ok5hbWUgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRP
bmx5Ci0gIGZpbGVuYW1lICAgICAgUGx1Z2luOjpGaWxlbmFtZSAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQotICBkZXNjcmlwdGlvbiAgIFBsdWdpbjo6RGVzY3JpcHRpb24gICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgbGVuZ3RoICAgICAgICBQbHVnaW46Okxlbmd0aCAgICAgICAgICBEb250
RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlICpQbHVnaW46OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+
bmFtZSk7Ci0gICAgY2FzZSBGaWxlbmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5m
by0+ZmlsZSk7Ci0gICAgY2FzZSBEZXNjcmlwdGlvbjoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KG1faW5mby0+ZGVzYyk7Ci0gICAgY2FzZSBMZW5ndGg6IAotICAgICAgICByZXR1cm4ganNOdW1i
ZXIobV9pbmZvLT5taW1lcy5zaXplKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCgw
KTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlICpQ
bHVnaW46OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKLXsKLSAgICBQbHVnaW4gKnRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4gKj4oc2xv
dC5zbG90QmFzZSgpKTsKLSAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIHRoaXNPYmotPm1f
aW5mby0+bWltZXMuYXQoc2xvdC5pbmRleCgpKSk7Ci19Ci0KLUpTVmFsdWUgKlBsdWdpbjo6bmFt
ZUdldHRlcihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICpvcmlnaW5hbE9iamVjdCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0g
ICAgUGx1Z2luICp0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UGx1Z2luICo+KHNsb3Quc2xvdEJhc2Uo
KSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
LSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSB0aGlzT2JqLT5tX2lu
Zm8tPm1pbWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0
b3IgaXRyID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIr
KykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptID0gKCppdHIpOwotICAgICAgICBpZiAobS0+
dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVU
eXBlKGV4ZWMsIG0pOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotCi1i
b29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVnaW5UYWJsZSwgcHJvcGVy
dHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0
aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVHZXR0ZXI8UGx1Z2luPik7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpblsjXQotICAgICAgICBib29sIG9r
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwot
ICAgICAgICBpZiAob2sgJiYgaSA8IG1faW5mby0+bWltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1Z2luWyJuYW1lIl0KLSAg
ICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAg
ICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbV9pbmZvLT5taW1l
cy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBp
dHIgPSBtX2luZm8tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAg
ICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gTWltZVR5cGVU
YWJsZSA0Ci0gIHR5cGUgICAgICAgICAgTWltZVR5cGU6OlR5cGUgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICBzdWZmaXhlcyAgICAgIE1pbWVUeXBlOjpTdWZmaXhlcyAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgZGVzY3JpcHRpb24gICBNaW1lVHlwZTo6RGVzY3JpcHRpb24gICBE
b250RGVsZXRlfFJlYWRPbmx5Ci0gIGVuYWJsZWRQbHVnaW4gTWltZVR5cGU6OkVuYWJsZWRQbHVn
aW4gRG9udERlbGV0ZXxSZWFkT25seQotQGVuZAotKi8KLQotSlNWYWx1ZSAqTWltZVR5cGU6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAg
c3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
KG1faW5mby0+dHlwZSk7Ci0gICAgY2FzZSBTdWZmaXhlczoKLSAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKG1faW5mby0+c3VmZml4ZXMpOwotICAgIGNhc2UgRGVzY3JpcHRpb246Ci0gICAgICAgIHJl
dHVybiBqc1N0cmluZyhtX2luZm8tPmRlc2MpOwotICAgIGNhc2UgRW5hYmxlZFBsdWdpbjogewot
ICAgICAgICBTY3JpcHRJbnRlcnByZXRlciAqaW50ZXJwcmV0ZXIgPSBzdGF0aWNfY2FzdDxTY3Jp
cHRJbnRlcnByZXRlciAqPihleGVjLT5keW5hbWljSW50ZXJwcmV0ZXIoKSk7Ci0gICAgICAgIEZy
YW1lICpmcmFtZSA9IGludGVycHJldGVyLT5mcmFtZSgpOwotICAgICAgICBBU1NFUlQoZnJhbWUp
OwotICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICAg
ICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgbV9pbmZvLT5wbHVnaW4pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1ib29sIE1pbWVU
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gZ2V0U3Rh
dGljVmFsdWVTbG90PE1pbWVUeXBlLCBQbHVnaW5CYXNlPihleGVjLCAmTWltZVR5cGVUYWJsZSwg
dGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotSlNWYWx1ZSAqUGx1Z2luc0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKiwgY29uc3QgTGlzdCAmYXJn
cykKLXsKLSAgICBQbHVnaW5CYXNlOjpyZWZyZXNoKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKSk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUgKk5hdmlnYXRvckZ1bmM6
OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0
IExpc3QgJikKLXsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmS0pTOjpOYXZpZ2F0b3I6Omlu
Zm8pKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gIE5hdmlnYXRv
ciAqbmF2ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yICo+KHRoaXNPYmopOwotICAvLyBqYXZhRW5h
YmxlZCgpCi0gIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+ZnJhbWUo
KS0+c2V0dGluZ3MoKSA6IDA7Ci0gIHJldHVybiBqc0Jvb2xlYW4oc2V0dGluZ3MgJiYgc2V0dGlu
Z3MtPmlzSmF2YUVuYWJsZWQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
a2pzX25hdmlnYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjk0MTZmLi4w
MDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotICogIENvcHlyaWdo
dCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBranNfbmF2aWdhdG9yX2gKLSNkZWZpbmUga2pzX25h
dmlnYXRvcl9oCi0KLSNpbmNsdWRlICJranNfYmluZGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci19Ci0KLW5hbWVzcGFjZSBLSlMgewotCi0gIGNsYXNzIE5h
dmlnYXRvciA6IHB1YmxpYyBET01PYmplY3QgewotICBwdWJsaWM6Ci0gICAgTmF2aWdhdG9yKEV4
ZWNTdGF0ZSAqZXhlYywgV2ViQ29yZTo6RnJhbWUgKnApOwotICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICBKU1ZhbHVlICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
Ci0gICAgZW51bSB7IEFwcENvZGVOYW1lLCBBcHBOYW1lLCBBcHBWZXJzaW9uLCBMYW5ndWFnZSwg
VXNlckFnZW50LCBQbGF0Zm9ybSwKLSAgICAgICAgICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFBy
b2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgVmVuZG9yU3ViLCBDb29raWVFbmFibGVkLCBKYXZh
RW5hYmxlZCB9OwotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWU7IH0KLSAgcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpGcmFtZSAqbV9mcmFtZTsKLSAgfTsK
LX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfd2luZG93LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5k
ZXggNThiNjI0YS4uMGNmMTYzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC01
NCw3ICs1NCw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCkBAIC02Miw3ICs2MSw2IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRp
bmcuaCIKICNpbmNsdWRlICJranNfY3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgotI2lu
Y2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC0xNzUsOCArMTczLDYgQEAgY29uc3QgQ2xhc3NJbmZv
IFdpbmRvdzo6aW5mbyA9IHsgIldpbmRvdyIsIDAsICZXaW5kb3dUYWJsZSwgMCB9OwogICBjcnlw
dG8gICAgICAgICAgICAgICAgV2luZG93OjpDcnlwdG8gICAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKICAgZXZlbnQgICAgICAgICAgICAgICAgIFdpbmRvdzo6RXZlbnRfICAgICAgICAg
ICAgICBEb250RGVsZXRlCiAgIGxvY2F0aW9uICAgICAgICAgICAgICBXaW5kb3c6OkxvY2F0aW9u
XyAgICAgICAgICAgRG9udERlbGV0ZQotICBuYXZpZ2F0b3IgICAgICAgICAgICAgV2luZG93OjpO
YXZpZ2F0b3JfICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgY2xpZW50SW5mb3JtYXRp
b24gICAgIFdpbmRvdzo6Q2xpZW50SW5mb3JtYXRpb24gICBEb250RGVsZXRlfFJlYWRPbmx5CiAj
IC0tIEV2ZW50IExpc3RlbmVycyAtLQogICBvbmFib3J0ICAgICAgICAgICAgICAgV2luZG93OjpP
bmFib3J0ICAgICAgICAgICAgIERvbnREZWxldGUKICAgb25ibHVyICAgICAgICAgICAgICAgIFdp
bmRvdzo6T25ibHVyICAgICAgICAgICAgICBEb250RGVsZXRlCkBAIC01MjEsMTggKzUxNyw2IEBA
IEpTVmFsdWUgKldpbmRvdzo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbikgY29uc3QKICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGQtPm1fZXZ0KTsKICAgICBjYXNl
IExvY2F0aW9uXzoKICAgICAgIHJldHVybiBsb2NhdGlvbigpOwotICAgIGNhc2UgTmF2aWdhdG9y
XzoKLSAgICBjYXNlIENsaWVudEluZm9ybWF0aW9uOiB7Ci0gICAgICBpZiAoIWlzU2FmZVNjcmlw
dChleGVjKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0
aGUgbmF2aWdhdG9yIGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRp
bWUuCi0gICAgICBOYXZpZ2F0b3IgKm4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMsIGltcGwoKS0+ZnJh
bWUoKSk7Ci0gICAgICAvLyBGSVhNRTogdGhpcyB3aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9i
amVjdCBhY2Nlc3NpYmxlIGZyb20gd2luZG93cyB0aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1
cml0eSBjaGVjayB0aGUgZmlyc3QgdGltZSwgYnV0IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVt
cyB3ZWlyZC4KLSAgICAgIGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5h
dmlnYXRvciIsIG4sIERvbnREZWxldGV8UmVhZE9ubHkpOwotICAgICAgY29uc3RfY2FzdDxXaW5k
b3cgKj4odGhpcyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3JtYXRpb24iLCBuLCBEb250RGVsZXRl
fFJlYWRPbmx5KTsKLSAgICAgIHJldHVybiBuOwotICAgIH0KICAgICBjYXNlIEltYWdlOgogICAg
ICAgaWYgKCFpc1NhZmVTY3JpcHQoZXhlYykpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcCBiL1dlYkNvcmUv
YnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAKaW5kZXggZWQ5ODFiMi4uMzY1NjUwYSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcAorKysgYi9XZWJDb3JlL2JyaWRnZS93
aW4vRnJhbWVXaW4uY3BwCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlV2luLmgiCiAjaW5jbHVkZSAi
UGx1Z2luVmlld1dpbi5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAKaW5kZXggOTAwMzgzZS4uNmNjY2ExYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCisrKyBiL1dlYkNvcmUvZG9tL0RPTUltcGxl
bWVudGF0aW9uLmNwcApAQCAtMzksOCArMzksOCBAQAogI2luY2x1ZGUgIkltYWdlRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGx1
Z0luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHREb2N1bWVudC5oIgpAQCAtMzcwLDE0ICszNzAs
MTQgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZURvY3Vt
ZW50KGNvbnN0IFN0cmluZyYgdHlwZSwgRnJhbWUKIAogICAgIC8vIFBERiBpcyBvbmUgaW1hZ2Ug
dHlwZSBmb3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0LWluIHN1cHBvcnQuCiAg
ICAgLy8gV2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3ZlciBhbGwgaW1hZ2UgdHlw
ZXMsIG9idmlvdXNseS4KLSAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgdHlw
ZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUodHlw
ZSkpCisgICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0gInRleHQv
cGRmIikgJiYgZnJhbWUtPnBsdWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkKICAg
ICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgaWYgKElt
YWdlOjpzdXBwb3J0c1R5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VEb2N1bWVu
dCh0aGlzLCBmcmFtZSk7CiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGV4Y2VwdCB0ZXh0L3BsYWlu
IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBsdWdpbnMuIEluIHBhcnRpY3VsYXIsIEFkb2JlIFNWRyBW
aWV3ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIFNWRywgaWYgaW5zdGFsbGVkLgogICAgIC8vIERpc2Fs
bG93aW5nIHBsdWctaW5zIHRvIHVzZSB0ZXh0L3BsYWluIHByZXZlbnRzIHBsdWctaW5zIGZyb20g
aGlqYWNraW5nIGEgZnVuZGFtZW50YWwgdHlwZSB0aGF0IHRoZSBicm93c2VyIGlzIGV4cGVjdGVk
IHRvIGhhbmRsZSwKICAgICAvLyBhbmQgYWxzbyBzZXJ2ZXMgYXMgYW4gb3B0aW1pemF0aW9uIHRv
IHByZXZlbnQgbG9hZGluZyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBpbiB0aGUgY29tbW9uIGNhc2Uu
Ci0gICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9y
dHNNSU1FVHlwZSh0eXBlKSkgCisgICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIGZyYW1l
LT5wbHVnaW5EYXRhKCktPnN1cHBvcnRzTWltZVR5cGUodHlwZSkpIAogICAgICAgICByZXR1cm4g
bmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICBpZiAoaXNUZXh0TUlNRVR5cGUo
dHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dERvY3VtZW50KHRoaXMsIGZyYW1lKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAKaW5kZXggNDI0MGM5Mi4uYTYwODEwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtOTgsNiArOTksMTAgQEAgdm9pZCBET01XaW5kb3c6
OmNsZWFyKCkKICAgICBpZiAobV90b29sYmFyKQogICAgICAgICBtX3Rvb2xiYXItPmRpc2Nvbm5l
Y3RGcmFtZSgpOwogICAgIG1fdG9vbGJhciA9IDA7CisKKyAgICBpZiAobV9uYXZpZ2F0b3IpCisg
ICAgICAgIG1fbmF2aWdhdG9yLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICBtX25hdmlnYXRvciA9
IDA7CiB9CiAKIFNjcmVlbiogRE9NV2luZG93OjpzY3JlZW4oKSBjb25zdApAQCAtMTU2LDYgKzE2
MSwxMyBAQCBCYXJJbmZvKiBET01XaW5kb3c6OnRvb2xiYXIoKSBjb25zdAogICAgIHJldHVybiBt
X3Rvb2xiYXIuZ2V0KCk7CiB9CiAKK05hdmlnYXRvciogRE9NV2luZG93OjpuYXZpZ2F0b3IoKSBj
b25zdAoreworICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAgIG1fbmF2aWdhdG9yID0gbmV3
IE5hdmlnYXRvcihtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9uYXZpZ2F0b3IuZ2V0KCk7Cit9CisK
IERPTVNlbGVjdGlvbiogRE9NV2luZG93OjpnZXRTZWxlY3Rpb24oKQogewogICAgIGlmICghbV9z
ZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmgKaW5kZXggNjg0MTM0OS4uOTViNTgyNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAt
NDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAg
Y2xhc3MgSGlzdG9yeTsKICAgICBjbGFzcyBTY3JlZW47CisgICAgY2xhc3MgTmF2aWdhdG9yOwog
ICAgIAogICAgIGNsYXNzIERPTVdpbmRvdyA6IHB1YmxpYyBTaGFyZWQ8RE9NV2luZG93PiB7CiAg
ICAgcHVibGljOgpAQCAtNjIsNiArNjMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEJhckluZm8qIHNjcm9sbGJhcnMoKSBjb25zdDsKICAgICAgICAgQmFySW5mbyogc3RhdHVzYmFy
KCkgY29uc3Q7CiAgICAgICAgIEJhckluZm8qIHRvb2xiYXIoKSBjb25zdDsKKyAgICAgICAgTmF2
aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsKKyAgICAgICAgaW5saW5lIE5hdmlnYXRvciogY2xp
ZW50SW5mb3JtYXRpb24oKSBjb25zdAorICAgICAgICB7IHJldHVybiBuYXZpZ2F0b3IoKTsgfQog
CiAgICAgICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCk7CiAKQEAgLTEzOSw2ICsxNDMs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhckluZm8+
IG1fc2Nyb2xsYmFyczsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFySW5mbz4gbV9zdGF0dXNi
YXI7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhckluZm8+IG1fdG9vbGJhcjsKKyAgICAgICAg
bXV0YWJsZSBSZWZQdHI8TmF2aWdhdG9yPiBtX25hdmlnYXRvcjsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBi
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDY1MmE3ZjguLjJlMTNjZmUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCisrKyBiL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsCkBAIC0zNSw2ICszNSw4IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgQmFySW5mbyBzY3JvbGxiYXJzOwogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgQmFySW5mbyBzdGF0dXNiYXI7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBCYXJJ
bmZvIHRvb2xiYXI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBOYXZpZ2F0b3IgbmF2aWdh
dG9yOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTmF2aWdhdG9yIGNsaWVudEluZm9ybWF0
aW9uOwogCiAgICAgICAgIERPTVNlbGVjdGlvbiBnZXRTZWxlY3Rpb24oKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXgg
YmJlZWIxZS4uZmEzYzBkMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysg
Yi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRN
TFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFGZWF0dXJlTmFtZXMuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5o
IgpAQCAtMTE5NSw2ICsxMTk2LDExIEBAIFJlbmRlclBhcnQqIEZyYW1lOjpvd25lclJlbmRlcmVy
KCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyUGFydCo+KG93bmVyRWxlbWVudC0+cmVu
ZGVyZXIoKSk7CiB9CiAKK1BsdWdpbkRhdGEqIEZyYW1lOjpwbHVnaW5EYXRhKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZG9tV2luZG93KCktPm5hdmlnYXRvcigpLT5wbHVnaW5EYXRhKCk7Cit9CisK
IC8vIHJldHVybnMgRmxvYXRSZWN0IGJlY2F1c2UgZ29pbmcgdGhyb3VnaCBJbnRSZWN0IHdvdWxk
IHRydW5jYXRlIGFueSBmbG9hdHMKIEZsb2F0UmVjdCBGcmFtZTo6c2VsZWN0aW9uUmVjdChib29s
IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCBiMmZhYzY3Li41MWYzZDdjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUu
aApAQCAtOTUsNiArOTUsNyBAQCBjbGFzcyBLSlNQcm94eTsKIGNsYXNzIEtVUkw7CiBjbGFzcyBO
b2RlOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBsdWdpbkRhdGE7CiBjbGFzcyBSYW5nZTsKIGNsYXNz
IFJlbmRlclBhcnQ7CiBjbGFzcyBTZWxlY3Rpb247CkBAIC0xNDAsNiArMTQxLDggQEAgcHVibGlj
OgogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdDsgLy8gcm9vdCByZW5kZXJlciBm
b3IgdGhlIGRvY3VtZW50IGNvbnRhaW5lZCBpbiB0aGlzIGZyYW1lCiAgICAgUmVuZGVyUGFydCog
b3duZXJSZW5kZXJlcigpOyAvLyByZW5kZXJlciBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlu
cyB0aGlzIGZyYW1lCiAKKyAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKCkgY29uc3Q7CisKICAg
ICBmcmllbmQgY2xhc3MgRnJhbWVQcml2YXRlOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZhOTc3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIw
MDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChj
KSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKworI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkxhbmd1
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJh
eS5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXkuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QTEFU
Rk9STQorI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oUFBDKQorI2RlZmluZSBXRUJDT1JF
X05BVklHQVRPUl9QTEFURk9STSAiTWFjUFBDIgorI2VsaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFU
Rk9STShYODYpCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNJbnRlbCIK
KyNlbGlmIFBMQVRGT1JNKFdJTl9PUykKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZP
Uk0gIldpbjMyIgorI2Vsc2UKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIiIK
KyNlbmRpZgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STQorCisj
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FU
T1JfUFJPRFVDVCAiR2Vja28iCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BS
T0RVQ1QKKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgorI2RlZmluZSBX
RUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQiAiMjAwMzAxMDciCisjZW5kaWYgLy8gaWZuZGVm
IFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FU
T1JfVkVORE9SCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUiAiQXBwbGUgQ29tcHV0
ZXIsIEluYy4iCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgorCisj
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SX1NVQiAiIgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9W
RU5ET1JfU1VCCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXZpZ2F0b3I6Ok5hdmlnYXRv
cihGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitOYXZpZ2F0b3I6
On5OYXZpZ2F0b3IoKQoreworfQorCit2b2lkIE5hdmlnYXRvcjo6ZGlzY29ubmVjdEZyYW1lKCkK
K3sKKyAgICBpZiAobV9wbHVnaW5EYXRhKSB7CisgICAgICAgIG1fcGx1Z2luRGF0YS0+ZGlzY29u
bmVjdEZyYW1lKCk7CisgICAgICAgIG1fcGx1Z2luRGF0YSA9IDA7CisgICAgfQorICAgIG1fZnJh
bWUgPSAwOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjphcHBDb2RlTmFtZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6YXBwTmFtZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICJOZXRzY2FwZSI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OmFw
cFZlcnNpb24oKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBz
dHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCisgICAgY29uc3QgU3RyaW5nIHVzZXJB
Z2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/
IG1fZnJhbWUtPmRvY3VtZW50KCktPlVSTCgpIDogS1VSTCgpKTsKKyAgICByZXR1cm4gdXNlckFn
ZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7Cit9CisKK1N0cmluZyBOYXZp
Z2F0b3I6Omxhbmd1YWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlKCk7
Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2ZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmxv
YWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50
KCktPlVSTCgpIDogS1VSTCgpKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6cGxhdGZvcm0oKSBj
b25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STTsKK30KKworUGx1
Z2luQXJyYXkqIE5hdmlnYXRvcjo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdp
bnMpCisgICAgICAgIGluaXRQbHVnaW5EYXRhKCk7CisgICAgcmV0dXJuIG1fcGx1Z2lucy5nZXQo
KTsKK30KKworTWltZVR5cGVBcnJheSogTmF2aWdhdG9yOjptaW1lVHlwZXMoKSBjb25zdAorewor
ICAgIGlmICghbV9taW1lVHlwZXMpCisgICAgICAgIGluaXRQbHVnaW5EYXRhKCk7CisgICAgcmV0
dXJuIG1fbWltZVR5cGVzLmdldCgpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpwcm9kdWN0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVDsKK30KKworU3Ry
aW5nIE5hdmlnYXRvcjo6cHJvZHVjdFN1YigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVf
TkFWSUdBVE9SX1BST0RVQ1RfU1VCOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjp2ZW5kb3IoKSBj
b25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1I7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnZlbmRvclN1YigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFW
SUdBVE9SX1ZFTkRPUl9TVUI7Cit9CisKK2Jvb2wgTmF2aWdhdG9yOjpjb29raWVFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7
Cit9CisKK2Jvb2wgTmF2aWdhdG9yOjpqYXZhRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgIHJldHVybiBtX2ZyYW1lLT5zZXR0aW5n
cygpLT5pc0phdmFFbmFibGVkKCk7Cit9CisKK1BsdWdpbkRhdGEqIE5hdmlnYXRvcjo6cGx1Z2lu
RGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbkRhdGEpCisgICAgICAgIGluaXRQbHVn
aW5EYXRhKCk7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS5nZXQoKTsKK30KKwordm9pZCBOYXZp
Z2F0b3I6OmluaXRQbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBtX3BsdWdpbkRhdGEgPSBuZXcg
UGx1Z2luRGF0YShtX2ZyYW1lKTsKKyAgICBtX3BsdWdpbnMgPSBuZXcgUGx1Z2luQXJyYXkobV9w
bHVnaW5EYXRhKTsKKyAgICBtX21pbWVUeXBlcyA9IG5ldyBNaW1lVHlwZUFycmF5KG1fcGx1Z2lu
RGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjkzOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE5hdmlnYXRvcl9oCisjZGVmaW5lIE5h
dmlnYXRvcl9oCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgU3RyaW5n
OworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAgY2xhc3MgUGx1Z2luQXJyYXk7CisgICAgY2xh
c3MgTWltZVR5cGVBcnJheTsKKworICAgIGNsYXNzIE5hdmlnYXRvciA6IHB1YmxpYyBTaGFyZWQ8
TmF2aWdhdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBOYXZpZ2F0b3IoRnJhbWUqKTsKKyAg
ICAgICAgfk5hdmlnYXRvcigpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisK
KyAgICAgICAgU3RyaW5nIGFwcENvZGVOYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBhcHBO
YW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBhcHBWZXJzaW9uKCkgY29uc3Q7CisgICAgICAg
IFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29u
c3Q7CisgICAgICAgIFN0cmluZyBwbGF0Zm9ybSgpIGNvbnN0OworICAgICAgICBQbHVnaW5BcnJh
eSogcGx1Z2lucygpIGNvbnN0OworICAgICAgICBNaW1lVHlwZUFycmF5KiBtaW1lVHlwZXMoKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIHByb2R1Y3QoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBy
b2R1Y3RTdWIoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHZlbmRvcigpIGNvbnN0OworICAgICAg
ICBTdHJpbmcgdmVuZG9yU3ViKCkgY29uc3Q7CisgICAgICAgIGJvb2wgY29va2llRW5hYmxlZCgp
IGNvbnN0OworICAgICAgICBib29sIGphdmFFbmFibGVkKCkgY29uc3Q7CisKKyAgICAgICAgLy8g
QysrIGludGVyZmFjZQorICAgICAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhKCkgY29uc3Q7CisK
KyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAg
ICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFBsdWdpbkRhdGE+
IG1fcGx1Z2luRGF0YTsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8UGx1Z2luQXJyYXk+IG1fcGx1
Z2luczsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8TWltZVR5cGVBcnJheT4gbV9taW1lVHlwZXM7
CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0
b3IuaWRsIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmQwNzI5ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9O
YXZpZ2F0b3IuaWRsCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA3
IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBOYXZp
Z2F0b3IgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFwcENvZGVOYW1l
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGFwcE5hbWU7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXBwVmVyc2lvbjsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBsYW5ndWFnZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB1c2VyQWdlbnQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgcGxhdGZvcm07CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQbHVnaW5BcnJheSBw
bHVnaW5zOworICAgICAgICAvKnJlYWRvbmx5IGF0dHJpYnV0ZSBNaW1lVHlwZUFycmF5IG1pbWVU
eXBlczsgKi8KKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwcm9kdWN0Owor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHByb2R1Y3RTdWI7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVuZG9yOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHZlbmRvclN1YjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gY29va2llRW5hYmxlZDsKKyAgICAgICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwor
ICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaCBiL1dlYkNvcmUv
cGFnZS9QbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwZjJlNS4uMDAw
MDAwMAotLS0gYS9XZWJDb3JlL3BhZ2UvUGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSAr
MCwwIEBACi0vLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5faAot
I2RlZmluZSBQbHVnaW5faAotCi0jaW5jbHVkZSAiU2hhcmVkLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGNsYXNzIFdpZGdldDsKLQotICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBT
aGFyZWQ8UGx1Z2luPiB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW4oV2lkZ2V0KiB2aWV3
KSA6IG1fdmlldyh2aWV3KSB7IH0KLSAgICAgICAgV2lkZ2V0KiB2aWV3KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFdpZGdldCogbV92
aWV3OwotICAgIH07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQ
bHVnaW5faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbSBiL1dlYkNv
cmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KaW5kZXggNmIwZmYxMi4uYjg1YjY3ZiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQorKysgYi9XZWJDb3JlL3BhZ2UvbWFjL0Zy
YW1lTWFjLm1tCkBAIC02OSw3ICs2OSw2IEBACiAjaW1wb3J0ICJQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKLSNpbXBvcnQgIlBsdWdpbi5oIgogI2ltcG9ydCAiUmVndWxhckV4cHJlc3Np
b24uaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0SXRlbS5o
IgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0gYi9X
ZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQppbmRleCA3ZjcwZjFkLi4yYWVi
MTQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQor
KysgYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQpAQCAtNjQsNyArNjQs
NyBAQAogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgotI2ltcG9ydCAiUGx1Z0luSW5mb1N0b3JlLmgiCisj
aW1wb3J0ICJQbHVnaW5EYXRhLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAi
UmVuZGVyUGFydC5oIgogI2ltcG9ydCAiUmVuZGVyVHJlZUFzVGV4dC5oIgpAQCAtMTMyMyw3ICsx
MzIzLDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVu
dChET01FbGVtZW50ICplbGVtZW50KQogICAgIAogICAgIGlmIChXZWJDb3JlOjpET01JbXBsZW1l
bnRhdGlvbjo6aXNUZXh0TUlNRVR5cGUobWltZVR5cGUpIHx8CiAgICAgICAgIEltYWdlOjpzdXBw
b3J0c1R5cGUobWltZVR5cGUpIHx8Ci0gICAgICAgIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNN
SU1FVHlwZShtaW1lVHlwZSkpCisgICAgICAgIG1fZnJhbWUtPnBsdWdpbkRhdGEoKS0+c3VwcG9y
dHNNaW1lVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKICAgICByZXR1
cm4gWUVTOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwIGIvV2ViQ29y
ZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCmluZGV4IDc0MTAzNzQuLjQ0MGJmN2QgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVR
dC5jcHAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFs
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1
ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZyYW1lUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUGx1Z0luSW5m
b1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NjQ1NmYuLjAwMDAwMDAK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUGx1Z0lu
SW5mb1N0b3JlX2gKLSNkZWZpbmUgUGx1Z0luSW5mb1N0b3JlX2gKLQotI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0cnVjdCBQbHVnaW5JbmZvOwotCi1zdHJ1Y3QgTWltZUNsYXNzSW5mbyB7Ci0gICAg
U3RyaW5nIHR5cGU7Ci0gICAgU3RyaW5nIGRlc2M7Ci0gICAgU3RyaW5nIHN1ZmZpeGVzOwotICAg
IFBsdWdpbkluZm8qIHBsdWdpbjsKLX07Ci0KLXN0cnVjdCBQbHVnaW5JbmZvIHsKLSAgICBTdHJp
bmcgbmFtZTsKLSAgICBTdHJpbmcgZmlsZTsKLSAgICBTdHJpbmcgZGVzYzsKLSAgICBWZWN0b3I8
TWltZUNsYXNzSW5mbyo+IG1pbWVzOwotfTsKLQotY2xhc3MgUGx1Z0luSW5mb1N0b3JlIHsKLXB1
YmxpYzoKLSAgICBQbHVnaW5JbmZvICpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1
bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgcGx1Z2luQ291bnQoKSBjb25zdDsKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotfTsKLQotdm9p
ZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcyk7Ci0KLX0KLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmYzliMTg4Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UGx1Z0luSW5mb1N0b3JlUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJv
dmlkZXMgYWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUg
c2hlZXRzIGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkg
Y2FjaGUgZm9yIHRoZXNlIG9iamVjdHMuCi0qLwotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5o
IgotI2luY2x1ZGUgInFkZWJ1Zy5oIgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2luY2x1
ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3Rv
cmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpCi17Ci0gICAg
Ly9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5J
bmZvRm9yUGx1Z2luQXRJbmRleCgiIDw8IGkgPDwgIikiOwotCi0jaWYgUVRfVkVSU0lPTiA8IDB4
MDQwNDAwCi0gICAgUVdlYkZhY3RvcnlMb2FkZXIgKmxvYWRlciA9IFFXZWJGYWN0b3J5TG9hZGVy
OjpzZWxmKCk7Ci0gICAgaWYgKGkgPiBsb2FkZXItPm1fcGx1Z2luSW5mby5jb3VudCgpKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6SW5mbyAmcWluZm8g
PSBsb2FkZXItPm1fcGx1Z2luSW5mby5hdChpKTsKLSAgICBQbHVnaW5JbmZvICppbmZvID0gbmV3
IFBsdWdpbkluZm87Ci0gICAgaW5mby0+bmFtZSA9IHFpbmZvLm5hbWU7Ci0gICAgaW5mby0+ZGVz
YyA9IHFpbmZvLmRlc2NyaXB0aW9uOwotICAgIGZvcmVhY2ggKGNvbnN0IFFXZWJGYWN0b3J5TG9h
ZGVyOjpNaW1lSW5mbyAmbSwgcWluZm8ubWltZXMpIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyAq
bWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBtaW1lLT50eXBlID0gbS50eXBlOwot
ICAgICAgICBtaW1lLT5wbHVnaW4gPSBpbmZvOwotICAgICAgICBmb3JlYWNoIChRU3RyaW5nIGV4
dCwgbS5leHRlbnNpb25zKQotICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMuYXBwZW5kKGV4dCk7
Ci0gICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlu
Zm87Ci0jZWxzZQotICAgIHJldHVybiAwOyAvLyAjIyMgRklYTUUKLSNlbmRpZgotfQotCi11bnNp
Z25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSNpZiBRVF9WRVJT
SU9OIDwgMHgwNDA0MDAKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnSW5JbmZv
U3RvcmU6OmNvdW50ID0iIDw8IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmtleXMoKS5jb3Vu
dCgpOwotICAgIHJldHVybiBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291bnQo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotYm9vbCBQbHVnSW5JbmZvU3Rv
cmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpCi17Ci0j
aWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgYm9vbCBzdXBwb3J0cyA9IFFXZWJGYWN0b3J5
TG9hZGVyOjpzZWxmKCktPnN1cHBvcnRzTWltZVR5cGUoc3RyaW5nKTsKLSNlbHNlCi0gICAgYm9v
bCBzdXBwb3J0cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+
Pj4gUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKCIgPDwgc3RyaW5nIDw8ICIpID0i
IDw8IHN1cHBvcnRzOwotICAgIHJldHVybiBzdXBwb3J0czsKLX0KLQotdm9pZCByZWZyZXNoUGx1
Z2lucyhib29sKSB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAxYTQ3NwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBl
LmgiCisKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5j
bHVkZSAiUGx1Z0luSW5mb1N0b3JlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK01pbWVUeXBlOjpNaW1lVHlwZShjb25zdCBSZWZQdHI8UGx1Z2luRGF0
YT4mIHBsdWdpbkRhdGEsIGludCBpbmRleCkKKyAgICA6IG1fcGx1Z2luRGF0YShwbHVnaW5EYXRh
KQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworTWltZVR5cGU6On5NaW1lVHlwZSgpCit7
Cit9CisKK1N0cmluZyBNaW1lVHlwZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgY29uc3QgVmVjdG9y
PE1pbWVDbGFzc0luZm8qPiAmbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgaWYg
KG1faW5kZXggPj0gbWltZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
cmV0dXJuIG1pbWVzW21faW5kZXhdLT50eXBlOworfQorCitTdHJpbmcgTWltZVR5cGU6OnN1ZmZp
eGVzKCkgY29uc3QKK3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+ICZtaW1lcyA9
IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBpZiAobV9pbmRleCA+PSBtaW1lcy5zaXplKCkp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbWltZXNbbV9pbmRleF0tPnN1
ZmZpeGVzOworfQorCitTdHJpbmcgTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAg
ICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+ICZtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWlt
ZXMoKTsKKyAgICBpZiAobV9pbmRleCA+PSBtaW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gbWltZXNbbV9pbmRleF0tPmRlc2M7Cit9CisKK1BsdWdpbiAq
TWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAoreworICAgIGNvbnN0IFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4gJm1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGludCBpbmRl
eCA9IDA7CisgICAgaWYgKG1faW5kZXggPCBtaW1lcy5zaXplKCkpIHsKKyAgICAgICAgY29uc3Qg
VmVjdG9yPFBsdWdpbkluZm8qPiAmcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChwbHVnaW5zW2ldID09IG1pbWVzW2luZGV4XS0+cGx1Z2luKSB7
CisgICAgICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXcgUGx1Z2luKG1fcGx1
Z2luRGF0YSwgaW5kZXgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTE2OTMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNaW1lVHlw
ZV9oCisjZGVmaW5lIE1pbWVUeXBlX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiUmVmUHRyLmgiCisjaW5jbHVkZSAiU2hhcmVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAgY2xhc3MgUGx1Z2luOworCisgICAg
Y2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgU2hhcmVkPE1pbWVUeXBlPiB7CisgICAgcHVibGljOgor
ICAgICAgICBNaW1lVHlwZShjb25zdCBSZWZQdHI8UGx1Z2luRGF0YT4mIHBsdWdpbkRhdGEsIGlu
dCBpbmRleCk7CisgICAgICAgIH5NaW1lVHlwZSgpOworCisgICAgICAgIFN0cmluZyB0eXBlKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBzdWZmaXhlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcg
ZGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICAgICAgUGx1Z2luICplbmFibGVkUGx1Z2luKCkgY29u
c3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5E
YXRhOworICAgICAgICBpbnQgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1l
VHlwZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjYzczNwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwKQEAgLTAsMCArMSwy
OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVs
ZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIE1pbWVUeXBlIHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHN1ZmZpeGVzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRl
c2NyaXB0aW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgUGx1Z2luIGVuYWJsZWRQbHVn
aW47CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJy
YXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMDEyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXkuaCIKKwor
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitNaW1lVHlwZUFycmF5OjpNaW1lVHlwZUFycmF5KGNvbnN0IFJlZlB0cjxQ
bHVnaW5EYXRhPiYgcGx1Z2luRGF0YSkKKyAgICA6IG1fcGx1Z2luRGF0YShwbHVnaW5EYXRhKQor
eworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgpCit7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVn
aW5EYXRhLT5taW1lcygpLnNpemUoKTsKK30KKworTWltZVR5cGUgKk1pbWVUeXBlQXJyYXk6Oml0
ZW0oaW50IGluZGV4KQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gJm1pbWVz
ID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgTWltZVR5cGUobV9wbHVnaW5EYXRh
LCBpbmRleCk7Cit9CisKK2Jvb2wgTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4gJm1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlw
ZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvKj4gJm1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBw
cm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKG1fcGx1Z2luRGF0
YSwgaSk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmggYi9XZWJDb3JlL3BsdWdpbnMv
TWltZVR5cGVBcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMGE0
MjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIE1pbWVUeXBlQXJyYXlfaAorI2RlZmluZSBNaW1lVHlwZUFycmF5X2gKKwor
I2luY2x1ZGUgIlNoYXJlZC5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorCituYW1lc3BhY2UgS0pT
IHsKKyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKK307CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIE5hdmlnYXRvcjsKKyAgICBjbGFzcyBNaW1lVHlw
ZTsKKyAgICBjbGFzcyBQbHVnaW5EYXRhOworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKworICAg
IC8vICMjIyBoYWNrCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgTWlt
ZVR5cGUqKTsKKworICAgIGNsYXNzIE1pbWVUeXBlQXJyYXkgOiBwdWJsaWMgU2hhcmVkPE1pbWVU
eXBlQXJyYXk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE1pbWVUeXBlQXJyYXkoY29uc3QgUmVm
UHRyPFBsdWdpbkRhdGE+JiBwbHVnaW5EYXRhKTsKKyAgICAgICAgfk1pbWVUeXBlQXJyYXkoKTsK
KworICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgICAgICBNaW1lVHlw
ZSAqaXRlbShpbnQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1pbWVUeXBlKiBuYW1lR2V0
dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgfTsKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgYi9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDA5MmIwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1l
VHlwZUFycmF5LmlkbApAQCAtMCwwICsxLDI2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAw
OCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hh
c05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0dGVyXSBNaW1lVHlwZUFycmF5IHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhYjI2MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwCkBAIC0wLDAgKzEsMTEzIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2lu
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5o
IgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW46
OlBsdWdpbihjb25zdCBSZWZQdHI8UGx1Z2luRGF0YT4mIHBsdWdpbkRhdGEsIGludCBpbmRleCkK
KyAgICA6IG1fcGx1Z2luRGF0YShwbHVnaW5EYXRhKQorICAgICwgbV9pbmRleChpbmRleCkKK3sK
K30KKworUGx1Z2luOjp+UGx1Z2luKCkKK3sKK30KKworU3RyaW5nIFBsdWdpbjo6bmFtZSgpIGNv
bnN0Cit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiAmcGx1Z2lucyA9IG1fcGx1Z2lu
RGF0YS0+cGx1Z2lucygpOworICAgIGlmIChtX2luZGV4ID49IHBsdWdpbnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIHBsdWdpbnNbbV9pbmRleF0tPm5hbWU7
Cit9CisKK1N0cmluZyBQbHVnaW46OmZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICBjb25zdCBWZWN0
b3I8UGx1Z2luSW5mbyo+ICZwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKCk7CisgICAg
aWYgKG1faW5kZXggPj0gcGx1Z2lucy5zaXplKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gcGx1Z2luc1ttX2luZGV4XS0+ZmlsZTsKK30KKworU3RyaW5nIFBsdWdpbjo6
ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4gJnBs
dWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAobV9pbmRleCA+PSBwbHVn
aW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBwbHVnaW5z
W21faW5kZXhdLT5kZXNjOworfQorCit1bnNpZ25lZCBsb25nIFBsdWdpbjo6bGVuZ3RoKCkgY29u
c3QKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+ICZwbHVnaW5zID0gbV9wbHVnaW5E
YXRhLT5wbHVnaW5zKCk7CisgICAgaWYgKG1faW5kZXggPj0gcGx1Z2lucy5zaXplKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBwbHVnaW5zW21faW5kZXhdLT5taW1lcy5zaXplKCk7
Cit9CisKK01pbWVUeXBlICpQbHVnaW46Oml0ZW0oaW50IGluZGV4KQoreworICAgIGNvbnN0IFZl
Y3RvcjxQbHVnaW5JbmZvKj4gJnBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAg
ICBpZiAobV9pbmRleCA+PSBwbHVnaW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
aWYgKGluZGV4ID49IHBsdWdpbnNbbV9pbmRleF0tPm1pbWVzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBNaW1lQ2xhc3NJbmZvICptaW1lID0gcGx1Z2luc1ttX2luZGV4XS0+bWlt
ZXNbaW5kZXhdOworCisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiAmbWltZXMgPSBt
X3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW1lcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobWltZXNbaV0gPT0gbWltZSkgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBNaW1lVHlwZShtX3BsdWdpbkRhdGEsIGkpOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCitib29sIFBsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5J
bmZvKj4gJnBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAobV9pbmRl
eCA+PSBwbHVnaW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvKj4gJm1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1l
c1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK01pbWVUeXBlKiBQbHVnaW46Om5hbWVHZXR0ZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbklu
Zm8qPiAmcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGlmIChtX2luZGV4
ID49IHBsdWdpbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8
TWltZUNsYXNzSW5mbyo+ICZtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0t
PnR5cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZSht
X3BsdWdpbkRhdGEsIGkpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmggYi9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU4NDRiMQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaApAQCAtMCwwICsxLDY0
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBQbHVnaW5faAorI2RlZmluZSBQbHVnaW5faAorCisjaW5jbHVkZSAiTWltZVR5cGUuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUg
IlNoYXJlZC5oIgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFBs
dWdpbjsKKworICAgIC8vICMjIyBoYWNrCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhl
Y1N0YXRlKiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisKKyAgICBjbGFz
cyBQbHVnaW4gOiBwdWJsaWMgU2hhcmVkPFBsdWdpbj4geworICAgIHB1YmxpYzoKKyAgICAgICAg
UGx1Z2luKGNvbnN0IFJlZlB0cjxQbHVnaW5EYXRhPiYgcGx1Z2luRGF0YSwgaW50IGluZGV4KTsK
KyAgICAgICAgflBsdWdpbigpOworCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyBmaWxlbmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24o
KSBjb25zdDsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworCisgICAg
ICAgIE1pbWVUeXBlICppdGVtKGludCBpbmRleCk7CisgICAgICAgIGJvb2wgY2FuR2V0SXRlbXNG
b3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgTWltZVR5
cGUqIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKKyAgICAg
ICAgaW50IG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW4uaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NWU0OAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAg
IGludGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdpbiB7CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBmaWxlbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5BcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjI5NzEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5o
IgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5j
bHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkFycmF5OjpQbHVnaW5BcnJheShjb25zdCBSZWZQdHI8
UGx1Z2luRGF0YT4mIHBsdWdpbkRhdGEpCisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkK
K3sKK30KKworUGx1Z2luQXJyYXk6On5QbHVnaW5BcnJheSgpCit7Cit9CisKK3Vuc2lnbmVkIGxv
bmcgUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0
YS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworUGx1Z2luICpQbHVnaW5BcnJheTo6aXRlbShpbnQg
aW5kZXgpCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiAmcGx1Z2lucyA9IG1fcGx1
Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBwbHVnaW5zLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBQbHVnaW4obV9wbHVnaW5EYXRhLCBpbmRl
eCk7Cit9CisKK2Jvb2wgUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+
ICZwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9
PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1BsdWdpbiogUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiAmcGx1
Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cGx1Z2lucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJv
cGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4obV9wbHVnaW5EYXRhLCBp
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJl
bG9hZCkKK3sKKyAgICBtX3BsdWdpbkRhdGEtPnJlZnJlc2gocmVsb2FkKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5
LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45ZjBhNTRjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkFycmF5LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luQXJyYXlfaAorI2RlZmluZSBQbHVn
aW5BcnJheV9oCisKKyNpbmNsdWRlICJTaGFyZWQuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKwor
bmFtZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3RhdGU7
Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBOYXZpZ2F0b3I7CisgICAg
Y2xhc3MgUGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAgY2xhc3MgQXRvbWljU3Ry
aW5nOworCisgICAgLy8gIyMjIGhhY2sKKyAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVj
U3RhdGUqLCBQbHVnaW4qKTsKKworICAgIGNsYXNzIFBsdWdpbkFycmF5IDogcHVibGljIFNoYXJl
ZDxQbHVnaW5BcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luQXJyYXkoY29uc3Qg
UmVmUHRyPFBsdWdpbkRhdGE+JiBwbHVnaW5EYXRhKTsKKyAgICAgICAgflBsdWdpbkFycmF5KCk7
CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgUGx1Z2lu
ICppdGVtKGludCBpbmRleCk7CisgICAgICAgIGJvb2wgY2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgUGx1Z2luKiBuYW1lR2V0dGVy
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKworICAgICAgICB2b2lkIHJlZnJl
c2goYm9vbCByZWxvYWQpOworCisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UGx1Z2lu
RGF0YT4gbV9wbHVnaW5EYXRhOworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJh
eS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZDY1MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKQEAgLTAsMCArMSwy
NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVs
ZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRleEdldHRl
cl0gUGx1Z2luQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7CisgICAgICAgIHZvaWQgcmVmcmVzaChpbiBib29sZWFuIHJlbG9hZCk7CisgICAg
fTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmFmM2E2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFy
cmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGFuaWVs
IE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIFN0
ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGx1Z2luRGF0YTo6UGx1Z2luRGF0YShGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1l
KQoreworICAgIHBsYXRmb3JtSW5pdCgpOworfQorCitQbHVnaW5EYXRhOjp+UGx1Z2luRGF0YSgp
Cit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGx1Z2lucyk7CisgICAgZGVsZXRlQWxsVmFsdWVz
KG1fbWltZXMpOworfQorCit2b2lkIFBsdWdpbkRhdGE6OmRpc2Nvbm5lY3RGcmFtZSgpCit7Cisg
ICAgbV9mcmFtZSA9IDA7Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaChib29sIHJlbG9h
ZCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9wbHVnaW5zKTsKKyAgICBtX3BsdWdpbnMuY2xl
YXIoKTsKKworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21pbWVzKTsKKyAgICBtX21pbWVzLmNsZWFy
KCk7CisKKyAgICBwbGF0Zm9ybVJlZnJlc2gocmVsb2FkKTsKKyAgICBwbGF0Zm9ybUluaXQoKTsK
K30KKworYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX21pbWVzLnNpemUoKTsg
KytpKQorICAgICAgICBpZiAobV9taW1lc1tpXS0+dHlwZSA9PSBtaW1lVHlwZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxZWU3MwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1
Z2luRGF0YV9oCisjZGVmaW5lIFBsdWdpbkRhdGFfaAorCisjaW5jbHVkZSAiU2hhcmVkLmgiCisj
aW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgc3RydWN0IFBsdWdpbkluZm87CisgICAgc3RydWN0IEZyYW1l
OworCisgICAgc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgICAgICBTdHJpbmcgdHlwZTsKKyAg
ICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAgIFN0cmluZyBzdWZmaXhlczsKKyAgICAgICAgUGx1
Z2luSW5mbyogcGx1Z2luOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAg
ICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZmlsZTsKKyAgICAgICAgU3RyaW5nIGRl
c2M7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWltZXM7CisgICAgfTsKKworICAg
IGNsYXNzIFBsdWdpbkRhdGEgOiBwdWJsaWMgU2hhcmVkPFBsdWdpbkRhdGE+CisgICAgeworICAg
IHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YShGcmFtZSogZnJhbWUpOworICAgICAgICB+UGx1
Z2luRGF0YSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisKKyAgICAgICAg
aW5saW5lIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4gJnBsdWdpbnMoKSBjb25zdAorICAgICAg
ICB7IHJldHVybiBtX3BsdWdpbnM7IH0KKyAgICAgICAgaW5saW5lIGNvbnN0IFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4gJm1pbWVzKCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gbV9taW1lczsgfQor
CisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7CisKKyAgICAgICAgYm9vbCBzdXBw
b3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKTsKKyAgICAgICAgdm9pZCBwbGF0Zm9ybVJl
ZnJlc2goYm9vbCByZWxvYWQpOworCisgICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj4gbV9wbHVn
aW5zOworICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+IG1fbWltZXM7CisgICAgICAgIEZy
YW1lKiBtX2ZyYW1lOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQu
cHJpIGIvV2ViS2l0LnByaQppbmRleCA1Y2IyMTVmLi4wOTk1NDMyIDEwMDY0NAotLS0gYS9XZWJL
aXQucHJpCisrKyBiL1dlYktpdC5wcmkKQEAgLTU2LDcgKzU2LDggQEAgSU5DTFVERVBBVEggKz0g
XAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9yZW5kZXJpbmcgXAogICAgICQkQkFTRV9ESVIvV2Vi
Q29yZS9oaXN0b3J5IFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUveG1sIFwKLSAgICAkJEJBU0Vf
RElSL1dlYkNvcmUvaHRtbAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sIFwKKyAgICAkJEJB
U0VfRElSL1dlYkNvcmUvcGx1Z2lucwogCiAKIG1hY3ggewo=
</data>
<flag name="review"
          id="8059"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18527</attachid>
            <date>2008-01-18 05:27:04 -0800</date>
            <delta_ts>2008-02-18 07:42:49 -0800</delta_ts>
            <desc>patch including mac support</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>163459</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQppbmRleCBmMGQ2NGEwLi5jYzg0YTY0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC0zMyw2ICszMyw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvZG9tIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwgXAogICAgICQoV2ViQ29yZSkvcGFnZSBcCisgICAgJChXZWJDb3JlKS9wbHVn
aW5zIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29yZSkveG1sIFwKICAg
ICAkKFdlYkNvcmUpL3N2ZwpAQCAtNDE4LDE1ICs0MTksMjAgQEAgYWxsIDogXAogICAgIEpTTWVk
aWFFcnJvci5oIFwKICAgICBKU01lZGlhTGlzdC5oIFwKICAgICBKU01lc3NhZ2VFdmVudC5oIFwK
KyAgICBKU01pbWVUeXBlLmggXAorICAgIEpTTWltZVR5cGVBcnJheS5oIFwKICAgICBKU01vdXNl
RXZlbnQuaCBcCiAgICAgSlNNdXRhdGlvbkV2ZW50LmggXAogICAgIEpTTmFtZWROb2RlTWFwLmgg
XAorICAgIEpTTmF2aWdhdG9yLmggXAogICAgIEpTTm9kZS5oIFwKICAgICBKU05vZGVGaWx0ZXIu
aCBcCiAgICAgSlNOb2RlSXRlcmF0b3IuaCBcCiAgICAgSlNOb2RlTGlzdC5oIFwKICAgICBKU05v
dGF0aW9uLmggXAogICAgIEpTT3ZlcmZsb3dFdmVudC5oIFwKKyAgICBKU1BsdWdpbi5oIFwKKyAg
ICBKU1BsdWdpbkFycmF5LmggXAogICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmggXAogICAg
IEpTUHJvZ3Jlc3NFdmVudC5oIFwKICAgICBKU1JhbmdlLmggXApAQCAtNTk3LDcgKzYwMyw2IEBA
IGFsbCA6IFwKICAgICBYUGF0aEdyYW1tYXIuY3BwIFwKICAgICBranNfY3NzLmx1dC5oIFwKICAg
ICBranNfZXZlbnRzLmx1dC5oIFwKLSAgICBranNfbmF2aWdhdG9yLmx1dC5oIFwKICAgICBranNf
d2luZG93Lmx1dC5oIFwKICAgICB0b2tlbml6ZXIuY3BwIFwKICAgICBXZWJDb3JlLmV4cCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCA1YzNiOGRkLi5mNGU1YWJjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTI0Myw3ICsyNDMsNiBAQCBMVVRfRklMRVMgKz0gXAog
ICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tq
c19jc3MuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcCBcCi0gICAgYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuY3Bw
CiAKIExVVF9UQUJMRV9GSUxFUyArPSBcCkBAIC0zNzMsNiArMzcyLDExIEBAIElETF9CSU5ESU5H
UyArPSBcCiAgICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKICAgICBwYWdlL0hpc3RvcnkuaWRsIFwK
ICAgICBwYWdlL1NjcmVlbi5pZGwgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmlkbCBcCisgICAgcGx1
Z2lucy9QbHVnaW4uaWRsIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlLmlkbCBcCisgICAgcGx1Z2lu
cy9QbHVnaW5BcnJheS5pZGwgXAorICAgIHBsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAogICAg
IHhtbC9ET01QYXJzZXIuaWRsIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRs
IFwKICAgICB4bWwvWE1MU2VyaWFsaXplci5pZGwKQEAgLTQyMSwxMiArNDI1LDE0IEBAIFNPVVJD
RVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXAogICAgIGJp
bmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQ
cm9jZXNzb3IuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAgXAorICAg
IGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9K
U01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNf
ZG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAogICAgIGJpbmRpbmdz
L2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc193aW5k
b3cuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9QYXVzZWRUaW1lb3V0cy5jcHAgXApAQCAtNzA0LDYg
KzcxMCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNw
cCBcCiAgICAgcGFnZS9ET01TZWxlY3Rpb24uY3BwIFwKICAgICBwYWdlL0RPTVdpbmRvdy5jcHAg
XAorICAgIHBhZ2UvTmF2aWdhdG9yLmNwcCBcCiAgICAgcGFnZS9EcmFnQ29udHJvbGxlci5jcHAg
XAogICAgIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgcGFnZS9Gb2N1c0NvbnRyb2xsZXIu
Y3BwIFwKQEAgLTcxNyw2ICs3MjQsMTEgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9TY3JlZW4u
Y3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNwcCBcCiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJy
YXkuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbi5jcHAgXAorICAgIHBsdWdpbnMvTWltZVR5cGUu
Y3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIFwKICAgICBwbGF0Zm9ybS9BcmVu
YS5jcHAgXAogICAgIHBsYXRmb3JtL0FycmF5SW1wbC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQv
QXRvbWljU3RyaW5nLmNwcCBcCkBAIC04ODEsNiArODkzLDcgQEAgcXQtcG9ydCB7CiAgICAgJCRQ
V0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQv
QXBpL3F3ZWJ2aWV3LmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYmhpc3Rvcnlp
bnRlcmZhY2UuaCBcCisgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9y
eS5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRRdC5oIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlI
YW5kbGVyLmgKIApAQCAtOTI4LDcgKzk0MSw2IEBAIHF0LXBvcnQgewogICAgIHBsYXRmb3JtL3F0
L1BsYXRmb3JtTW91c2VFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3Jl
ZW5RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2Nyb2xsQmFyUXQuY3BwIFwKLSAg
ICBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Bv
cHVwTWVudVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUVdlYlBvcHVwLmNwcCBcCiAgICAgcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXApAQCAtOTQ0LDYgKzk1Niw3IEBAIHF0LXBvcnQg
ewogICAgIHBsYXRmb3JtL3F0L1RocmVhZGluZ1F0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2hl
ZWxFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2lkZ2V0UXQuY3BwIFwKKyAgICBwbHVn
aW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9D
b250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRRdC5jcHAgXApAQCAtOTU3LDYgKzk3MCw3IEBAIHF0LXBvcnQgewogICAgIC4u
L1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3
ZWJzZXR0aW5ncy5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlpbnRlcmZh
Y2UuY3BwIFwKKyAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcCBcCiAg
ICAgcGxhdGZvcm0vVGhyZWFkaW5nTm9uZS5jcHAKIAogICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxh
dGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcApAQCAtOTY3LDE1ICs5ODEsMTAgQEAgcXQtcG9ydCB7
CiAgICAgICAgIEhFQURFUlMgKz0gXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0Fw
aS9xd2VibmV0d29ya2ludGVyZmFjZS5oIFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9x
dC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dl
YktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dl
YktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmggXAotICAgICAgICAgICAgJCRQV0QvLi4v
V2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmggXAogICAgICAgICAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmgKIAogICAgICAgICBTT1VSQ0VTICs9
IFwKICAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3Bw
IFwKLSAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgXAot
ICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNw
cCBcCiAgICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuY3BwCiAKICAgICAg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmZDkyYjZh
Li41Yjc2YjBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDcyLDcgKzQ3Miw2IEBACiAJCTY1NjU4MUYwMDlEMTUwOEQwMDBFNjFENyAvKiBKU1hTTFRQ
cm9jZXNzb3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTY1ODFEOTA5RDE1MDhEMDAwRTYxRDcgLyogSlNYU0xUUHJvY2Vzc29yLmx1dC5oICov
OyB9OwogCQk2NTY1ODFGMTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2Nzcy5sdXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MURBMDlEMTUwOEQw
MDBFNjFENyAvKiBranNfY3NzLmx1dC5oICovOyB9OwogCQk2NTY1ODFGMzA5RDE1MDhEMDAwRTYx
RDcgLyoga2pzX2V2ZW50cy5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NjU4MURDMDlEMTUwOEQwMDBFNjFENyAvKiBranNfZXZlbnRzLmx1dC5o
ICovOyB9OwotCQk2NTY1ODFGNTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MURF
MDlEMTUwOEQwMDBFNjFENyAvKiBranNfbmF2aWdhdG9yLmx1dC5oICovOyB9OwogCQk2NTY1ODFG
ODA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX3dpbmRvdy5sdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUUxMDlEMTUwOEQwMDBFNjFENyAvKiBr
anNfd2luZG93Lmx1dC5oICovOyB9OwogCQk2NTY1ODFGRTA5RDE1MDhEMDAwRTYxRDcgLyogU1ZH
RWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDY1NjU4MUU3MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdFbGVtZW50RmFjdG9yeS5oICov
OyB9OwogCQk2NTY1ODIwMDA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHTmFtZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUU5MDlEMTUwOEQwMDBF
NjFENyAvKiBTVkdOYW1lcy5oICovOyB9OwpAQCAtNTExLDcgKzUxMCw2IEBACiAJCTY1Qzk3QUYz
MDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAq
LzsgfTsKIAkJNjVDQkZFRjkwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUNCRkVGNzA5NzRGNjA3
MDAxREFDMjUgLyogRnJhbWVWaWV3LmNwcCAqLzsgfTsKIAkJNjVDQkZFRkEwOTc0RjYwNzAwMURB
QzI1IC8qIEZyYW1lVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjVDQkZFRjgwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTY1RDFDMUNBMDk5MzJC
MjIwMDBDQjMyNCAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1RDFDMUM5MDk5MzJCMjIwMDBDQjMyNCAvKiBQbHVnaW4uaCAqLzsgfTsK
IAkJNjVERjMxREEwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzFEODA5RDFDMTIyMDAwQkUzMjUg
LyogSlNBdHRyLmNwcCAqLzsgfTsKIAkJNjVERjMxREIwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVERjMx
RDkwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5oICovOyB9OwogCQk2NURGMzFGMzA5RDFDQzYw
MDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMURGMDlEMUNDNjAwMDBCRTMyNSAvKiBKU0NoYXJh
Y3RlckRhdGEuY3BwICovOyB9OwpAQCAtMTU5Miw4ICsxNTkwLDYgQEAKIAkJOTNCNzBENkEwOUVC
MEM3QzAwOUQ4NDY4IC8qIGtqc19ldmVudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDRFMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRz
LmggKi87IH07CiAJCTkzQjcwRDZCMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfaHRtbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0RjA5RUIw
QzdDMDA5RDg0NjggLyoga2pzX2h0bWwuY3BwICovOyB9OwogCQk5M0I3MEQ2QzA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2h0bWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzQjcwRDUwMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfaHRtbC5oICovOyB9Owot
CQk5M0I3MEQ2RDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1MTA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX25hdmlnYXRvci5jcHAgKi87IH07Ci0JCTkzQjcwRDZFMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfbmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0I3MEQ1MjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5o
ICovOyB9OwogCQk5M0I3MEQ2RjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDUzMDlFQjBD
N0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwICovOyB9OwogCQk5M0I3MEQ3MDA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX3Byb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNCNzBENzUwOUVC
MEM3QzAwOUQ4NDY4IC8qIGtqc193aW5kb3cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTkwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc193aW5k
b3cuY3BwICovOyB9OwpAQCAtMTk5NSw4ICsxOTkxLDYgQEAKIAkJQTgxODcyMjMwOTc3RDNDMDAw
NTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgxODcyMTgwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVkTm9kZU1hcC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4MTg3
MjI0MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMTkwOTc3RDNDMDAwNTgyNkQ5IC8q
IE5hbWVOb2RlTGlzdC5jcHAgKi87IH07CiAJCUE4MTg3MjI1MDk3N0QzQzAwMDU4MjZEOSAvKiBD
aGlsZE5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MTg3MjFBMDk3N0QzQzAwMDU4MjZEOSAvKiBDaGlsZE5vZGVMaXN0LmNwcCAqLzsg
fTsKLQkJQTgyMzk4QTYwOUIzQUNEQjAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzk4QTUwOUIzQUNE
QjAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZS5oICovOyB9OwotCQlBODIzOThBODA5QjNBQ0Y1
MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzk4QTcwOUIzQUNGNTAwQjYwNjQxIC8qIFBsdWdJ
bkluZm9TdG9yZU1hYy5tbSAqLzsgfTsKIAkJQTgyMzlFMDAwOUIzQ0Y4QTAwQjYwNjQxIC8qIExv
Z2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwICovOyB9OwogCQlBODIzOUUw
MTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkYwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODI2
RThBRTBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODI2RThBQzBB
MUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi87IH07
CkBAIC0yNTI3LDYgKzI1MjEsMzIgQEAKIAkJQThGNDZCODEwQ0IyMEE5RDAwM0E5NjcwIC8qIERP
TVNWR1N0cmluZ0xpc3QuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RDc5QUQyMEFDQTE3RUIwMEYwMkZDNSAvKiBET01TVkdT
dHJpbmdMaXN0LmggKi87IH07CiAJCUE4RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5k
ZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9Owog
CQlBOEY0RkI5NjBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5NTBDMTY5RTg1
MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi87IH07CisJCUE5MzUzMzVGMEQzREY5
MTIwMDgxMzM0NCAvKiBNaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOTM1MzM1RDBEM0RGOTEyMDA4MTMzNDQgLyogTWltZVR5cGUuY3Bw
ICovOyB9OworCQlBOTM1MzM2MDBEM0RGOTEyMDA4MTMzNDQgLyogTWltZVR5cGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MzUzMzVFMEQzREY5MTIw
MDgxMzM0NCAvKiBNaW1lVHlwZS5oICovOyB9OworCQlBOTM1MzM2MzBEM0RGOTI5MDA4MTMzNDQg
LyogTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOTM1MzM2MTBEM0RGOTI5MDA4MTMzNDQgLyogTWltZVR5cGVBcnJheS5jcHAg
Ki87IH07CisJCUE5MzUzMzY0MEQzREY5MjkwMDgxMzM0NCAvKiBNaW1lVHlwZUFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOTM1MzM2MjBEM0RG
OTI5MDA4MTMzNDQgLyogTWltZVR5cGVBcnJheS5oICovOyB9OworCQlBOTM1MzM2NzBEM0RGOTNF
MDA4MTMzNDQgLyogUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5MzUzMzY1MEQzREY5M0UwMDgxMzM0NCAvKiBQbHVnaW4uY3BwICovOyB9
OworCQlBOTM1MzM2ODBEM0RGOTNFMDA4MTMzNDQgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOTM1MzM2NjBEM0RGOTNFMDA4MTMzNDQg
LyogUGx1Z2luLmggKi87IH07CisJCUE5MzUzMzZCMEQzREY5NTQwMDgxMzM0NCAvKiBQbHVnaW5B
cnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OTM1MzM2OTBEM0RGOTU0MDA4MTMzNDQgLyogUGx1Z2luQXJyYXkuY3BwICovOyB9OworCQlBOTM1
MzM2QzBEM0RGOTU0MDA4MTMzNDQgLyogUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MzUzMzZBMEQzREY5NTQwMDgxMzM0NCAvKiBQ
bHVnaW5BcnJheS5oICovOyB9OworCQlBOTM1MzM2RjBEM0RGOTZFMDA4MTMzNDQgLyogUGx1Z2lu
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OTM1MzM2RDBEM0RGOTZFMDA4MTMzNDQgLyogUGx1Z2luRGF0YS5jcHAgKi87IH07CisJCUE5MzUz
MzcwMEQzREY5NkUwMDgxMzM0NCAvKiBQbHVnaW5EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOTM1MzM2RTBEM0RGOTZFMDA4MTMzNDQgLyogUGx1
Z2luRGF0YS5oICovOyB9OworCQlBOTM1MzQxMjBEM0RGRkM2MDA4MTMzNDQgLyogTmF2aWdhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MzUz
NDEwMEQzREZGQzYwMDgxMzM0NCAvKiBOYXZpZ2F0b3IuY3BwICovOyB9OworCQlBOTM1MzQxMzBE
M0RGRkM2MDA4MTMzNDQgLyogTmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOTM1MzQxMTBEM0RGRkM2MDA4MTMzNDQgLyogTmF2aWdhdG9y
LmggKi87IH07CisJCUE5MzUzNEI0MEQzRTAwM0QwMDgxMzM0NCAvKiBKU01pbWVUeXBlQXJyYXlD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTkzNTM0QjMwRDNFMDAzRDAwODEzMzQ0IC8qIEpTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgKi87
IH07CisJCUE5MzUzNEI3MEQzRTAwNEMwMDgxMzM0NCAvKiBKU1BsdWdpbkFycmF5Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MzUzNEI1
MEQzRTAwNEMwMDgxMzM0NCAvKiBKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJQTkz
NTM0QjgwRDNFMDA0QzAwODEzMzQ0IC8qIEpTUGx1Z2luQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5MzUzNEI2MEQzRTAwNEMwMDgxMzM0
NCAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgKi87IH07CisJCUE5RTY2QTA3MEQzRTEzODcwMEQzNUNC
MSAvKiBKU05hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOUU2NkEwNTBEM0UxMzg3MDBEMzVDQjEgLyogSlNOYXZpZ2F0b3IuY3BwICov
OyB9OworCQlBOUU2NkEwODBEM0UxMzg3MDBEMzVDQjEgLyogSlNOYXZpZ2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RTY2QTA2MEQzRTEzODcw
MEQzNUNCMSAvKiBKU05hdmlnYXRvci5oICovOyB9OworCQlBOUU2NkEwRDBEM0UxM0YxMDBEMzVD
QjEgLyogSlNNaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOUU2NkEwOTBEM0UxM0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZS5jcHAgKi87
IH07CisJCUE5RTY2QTBFMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUU2NkEwQTBEM0UxM0YxMDBE
MzVDQjEgLyogSlNNaW1lVHlwZS5oICovOyB9OworCQlBOUU2NkEwRjBEM0UxM0YxMDBEMzVDQjEg
LyogSlNNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5RTY2QTBCMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlQXJyYXku
Y3BwICovOyB9OworCQlBOUU2NkExMDBEM0UxM0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZUFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUU2NkEw
QzBEM0UxM0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZUFycmF5LmggKi87IH07CisJCUE5RTY2QTE1
MEQzRTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUU2NkExMTBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVn
aW4uY3BwICovOyB9OworCQlBOUU2NkExNjBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RTY2QTEyMEQz
RTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbi5oICovOyB9OworCQlBOUU2NkExNzBEM0UxNDIzMDBE
MzVDQjEgLyogSlNQbHVnaW5BcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOUU2NkExMzBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVnaW5BcnJh
eS5jcHAgKi87IH07CisJCUE5RTY2QTE4MEQzRTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbkFycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUU2NkEx
NDBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVnaW5BcnJheS5oICovOyB9OworCQlBOUU2NkExQTBE
M0Y1Qzc4MDBEMzVDQjEgLyogUGx1Z2luRGF0YU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RTY2QTE5MEQzRjVDNzgwMEQzNUNCMSAvKiBQbHVn
aW5EYXRhTWFjLm1tICovOyB9OwogCQlBQTA5NzJDQzBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5s
aW5lVGV4dEJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTA5NzJDQTBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi87
IH07CiAJCUFBMDk3MkNEMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzJDQjBCNjk0
N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5oICovOyB9OwogCQlBQTIxRUNDQTBBQkYw
RkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0ODAgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi87IH07CkBAIC00NzQxLDcgKzQ3NjEsNiBAQAogCQk2
NTY1ODFEOTA5RDE1MDhEMDAwRTYxRDcgLyogSlNYU0xUUHJvY2Vzc29yLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYU0xUUHJvY2Vzc29yLmx1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFEQTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX2Nz
cy5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19jc3MubHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MURDMDlEMTUwOEQwMDBFNjFENyAv
KiBranNfZXZlbnRzLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2pz
X2V2ZW50cy5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjU2NTgxREUwOUQx
NTA4RDAwMEU2MUQ3IC8qIGtqc19uYXZpZ2F0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBranNfbmF2aWdhdG9yLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk2NTY1ODFFMTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX3dpbmRvdy5sdXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc193aW5kb3cubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NjU4MUU2MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdFbGVt
ZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
RWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTY1ODFF
NzA5RDE1MDhEMDAwRTYxRDcgLyogU1ZHRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0VsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00NzgyLDcgKzQ4MDEsNiBAQAogCQk2NUM5N0FGMjA4RUE5MDg4MDBBQ0Qy
NzMgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDQ7
IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmll
dy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVWaWV3LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVDQkZFRjgwOTc0RjYwNzAwMURBQzI1
IC8qIEZyYW1lVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVW
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTY1RDFDMUM5MDk5MzJCMjIwMDBD
QjMyNCAvKiBQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdp
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NURGMzFEODA5RDFDMTIyMDAwQkUz
MjUgLyogSlNBdHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0F0dHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NURGMzFEOTA5RDFDMTIz
MDAwQkUzMjUgLyogSlNBdHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0F0dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMxREYwOUQxQ0M2MDAw
MEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDaGFyYWN0ZXJEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTU4MTMsOCArNTgzMSw2IEBACiAJCTkzQjcwRDRFMDlFQjBDN0MwMDlEODQ2OCAvKiBr
anNfZXZlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBranNfZXZlbnRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2
OCAvKiBranNfaHRtbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
a2pzX2h0bWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ1MDA5RUIw
QzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGtqc19odG1sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjcwRDUxMDlF
QjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBranNfbmF2aWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOTNCNzBENTIwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19uYXZpZ2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0ga2pzX3Byb3h5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4
IC8qIGtqc19wcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2pzX3By
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDU5MDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfd2luZG93LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBranNfd2luZG93LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYwNDIs
OCArNjA1OCw2IEBACiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFt
ZU5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYW1l
Tm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxQTA5NzdE
M0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE4MjM5OEE1MDlCM0FDREIwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdJbkluZm9TdG9yZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBODIzOThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0lu
SW5mb1N0b3JlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFBsdWdJbkluZm9TdG9yZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgy
MzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODIzOURGRjA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0
cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25F
bGVtZW50Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NDcs
NiArNjQ2MSwzMyBAQAogCQlBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRl
clN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVuZGVyU3Vw
cG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5RTg1MDAy
QUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTkzNTMzNUQwRDNERjkxMjAwODEzMzQ0IC8qIE1pbWVUeXBlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1pbWVUeXBlLmNwcDsgcGF0aCA9IHBsdWdpbnMv
TWltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTM1MzM1RTBEM0RG
OTEyMDA4MTMzNDQgLyogTWltZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTWltZVR5cGUuaDsgcGF0aCA9IHBsdWdpbnMvTWltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTkzNTMzNjEwRDNERjkyOTAwODEzMzQ0IC8qIE1pbWVUeXBlQXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTWltZVR5cGVBcnJheS5j
cHA7IHBhdGggPSBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOTM1MzM2MjBEM0RGOTI5MDA4MTMzNDQgLyogTWltZVR5cGVBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNaW1lVHlwZUFycmF5Lmg7IHBhdGggPSBw
bHVnaW5zL01pbWVUeXBlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTkz
NTMzNjUwRDNERjkzRTAwODEzMzQ0IC8qIFBsdWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQbHVnaW4uY3BwOyBwYXRoID0gcGx1Z2lucy9QbHVnaW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTM1MzM2NjBEM0RGOTNFMDA4MTMzNDQgLyog
UGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBsdWdpbi5oOyBwYXRo
ID0gcGx1Z2lucy9QbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTkzNTMz
NjkwRDNERjk1NDAwODEzMzQ0IC8qIFBsdWdpbkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFBsdWdpbkFycmF5LmNwcDsgcGF0aCA9IHBsdWdpbnMvUGx1Z2lu
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTM1MzM2QTBEM0RGOTU0
MDA4MTMzNDQgLyogUGx1Z2luQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUGx1Z2luQXJyYXkuaDsgcGF0aCA9IHBsdWdpbnMvUGx1Z2luQXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTkzNTMzNkQwRDNERjk2RTAwODEzMzQ0IC8qIFBsdWdpbkRh
dGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUGx1Z2luRGF0YS5j
cHA7IHBhdGggPSBwbHVnaW5zL1BsdWdpbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOTM1MzM2RTBEM0RGOTZFMDA4MTMzNDQgLyogUGx1Z2luRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbHVnaW5EYXRhLmg7IHBhdGggPSBwbHVnaW5zL1Bs
dWdpbkRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTkzNTM0MTAwRDNERkZD
NjAwODEzMzQ0IC8qIE5hdmlnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOYXZpZ2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTM1
MzQxMTBEM0RGRkM2MDA4MTMzNDQgLyogTmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5hdmlnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
OTM1MzRCMzBEM0UwMDNEMDA4MTMzNDQgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWltZVR5cGVBcnJheUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5MzUzNEI1MEQzRTAwNEMwMDgxMzM0
NCAvKiBKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOTM1MzRCNjBEM0UwMDRDMDA4MTMzNDQgLyogSlNQbHVnaW5DdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQbHVnaW5DdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOTM1MzU2NzBEM0UwMUE1MDA4MTMzNDQgLyog
TmF2aWdhdG9yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3IuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUU2NkEwNTBEM0UxMzg3MDBEMzVDQjEgLyogSlNO
YXZpZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTTmF2
aWdhdG9yLmNwcDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL1JlbGVhc2UvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU05hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
QTlFNjZBMDYwRDNFMTM4NzAwRDM1Q0IxIC8qIEpTTmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU05hdmlnYXRvci5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQv
UmVsZWFzZS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTTmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTlFNjZBMDkwRDNFMTNGMTAwRDM1Q0IxIC8qIEpTTWltZVR5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTTWltZVR5cGUu
Y3BwOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvUmVsZWFzZS9EZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTTWltZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUE5RTY2QTBB
MEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU01pbWVUeXBlLmg7IHBhdGggPSAuLi9XZWJLaXRCdWlsZC9SZWxlYXNlL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNNaW1lVHlwZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JP
T1Q7IH07CisJCUE5RTY2QTBCMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTTWltZVR5cGVBcnJheS5j
cHA7IHBhdGggPSAuLi9XZWJLaXRCdWlsZC9SZWxlYXNlL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNNaW1lVHlwZUFycmF5LmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBOUU2
NkEwQzBEM0UxM0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZUFycmF5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU01pbWVUeXBlQXJyYXkuaDsgcGF0aCA9IC4uL1dlYktpdEJ1
aWxkL1JlbGVhc2UvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU01pbWVUeXBlQXJyYXkuaDsgc291
cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlBOUU2NkExMTBEM0UxNDIzMDBEMzVDQjEgLyog
SlNQbHVnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTUGx1
Z2luLmNwcDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL1JlbGVhc2UvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU1BsdWdpbi5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQTlFNjZB
MTIwRDNFMTQyMzAwRDM1Q0IxIC8qIEpTUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBKU1BsdWdpbi5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvUmVsZWFzZS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTUGx1Z2luLmg7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsg
fTsKKwkJQTlFNjZBMTMwRDNFMTQyMzAwRDM1Q0IxIC8qIEpTUGx1Z2luQXJyYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTUGx1Z2luQXJyYXkuY3BwOyBwYXRo
ID0gLi4vV2ViS2l0QnVpbGQvUmVsZWFzZS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTUGx1Z2lu
QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUE5RTY2QTE0MEQzRTE0
MjMwMEQzNUNCMSAvKiBKU1BsdWdpbkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU1BsdWdpbkFycmF5Lmg7IHBhdGggPSAuLi9XZWJLaXRCdWlsZC9SZWxlYXNlL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNQbHVnaW5BcnJheS5oOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCUE5RTY2QTE5MEQzRjVDNzgwMEQzNUNCMSAvKiBQbHVnaW5EYXRhTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUGx1Z2luRGF0YU1hYy5t
bTsgcGF0aCA9IHBsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBMDk3MkNBMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVUZXh0
Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTcyQ0IwQjY5NDdBODAw
QTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0lubGluZVRleHRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUEwOTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzkzNiw2ICs3OTc3LDcgQEAKIAkJMDg2
N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIFdlYktpdCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTkzNTMzNUMwRDNERjhBODAwODEzMzQ0IC8qIHBsdWdp
bnMgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICovLAogCQkJ
CUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8sCiAJCQkJOTMw
NzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCkBAIC04MjA4
LDcgKzgyNTAsNiBAQAogCQkJCUJDQTM3OTNFMEQxNjQ3RTAwMEI3OTNENiAvKiBKU0xvY2F0aW9u
Lmx1dC5oICovLAogCQkJCTY1NjU4MURBMDlEMTUwOEQwMDBFNjFENyAvKiBranNfY3NzLmx1dC5o
ICovLAogCQkJCTY1NjU4MURDMDlEMTUwOEQwMDBFNjFENyAvKiBranNfZXZlbnRzLmx1dC5oICov
LAotCQkJCTY1NjU4MURFMDlEMTUwOEQwMDBFNjFENyAvKiBranNfbmF2aWdhdG9yLmx1dC5oICov
LAogCQkJCTY1NjU4MUUxMDlEMTUwOEQwMDBFNjFENyAvKiBranNfd2luZG93Lmx1dC5oICovLAog
CQkJCTY1NjU4MUU2MDlEMTUwOEQwMDBFNjFENyAvKiBTVkdFbGVtZW50RmFjdG9yeS5jcHAgKi8s
CiAJCQkJNjU2NTgxRTcwOUQxNTA4RDAwMEU2MUQ3IC8qIFNWR0VsZW1lbnRGYWN0b3J5LmggKi8s
CkBAIC04MzA5LDcgKzgzNTAsNiBAQAogCQkJCUJDOTREMTA3MEMyNzRGODgwMDZCQzYxNyAvKiBQ
bGF0Zm9ybVNjcmVlbk1hYy5tbSAqLywKIAkJCQlCQzNGQ0FBODBBQzNEQjU4MDBCQTU0QUQgLyog
UGxhdGZvcm1TY3JvbGxCYXIuaCAqLywKIAkJCQlCQzdCMkFGOTA0NTA4MjQxMDBBODAwMEYgLyog
UGxhdGZvcm1TY3JvbGxCYXJNYWMubW0gKi8sCi0JCQkJQTgyMzk4QTcwOUIzQUNGNTAwQjYwNjQx
IC8qIFBsdWdJbkluZm9TdG9yZU1hYy5tbSAqLywKIAkJCQkwNjY4RTE4RTBBREQ5NjQwMDA0MTI4
RTAgLyogUG9wdXBNZW51TWFjLm1tICovLAogCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAv
KiBTY3JvbGxCYXIuY3BwICovLAogCQkJCTkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3Jv
bGxWaWV3TWFjLm1tICovLApAQCAtODM0Nyw2ICs4Mzg3LDkgQEAKIAkJNjVCRjAyMTgwOTc0ODA2
MzAwQzQzMTk2IC8qIHBhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCUE5MzUzNTY3MEQzRTAxQTUwMDgxMzM0NCAvKiBOYXZpZ2F0b3IuaWRsICovLAor
CQkJCUE5MzUzNDEwMEQzREZGQzYwMDgxMzM0NCAvKiBOYXZpZ2F0b3IuY3BwICovLAorCQkJCUE5
MzUzNDExMEQzREZGQzYwMDgxMzM0NCAvKiBOYXZpZ2F0b3IuaCAqLywKIAkJCQkwNjY5M0Y0NTBC
RkJDOTE2MDAyMTYwNzIgLyogaW5zcGVjdG9yICovLAogCQkJCTkzQzA5QTgyMEIwNjRGMDUwMDVB
QkQ0RCAvKiBtYWMgKi8sCiAJCQkJODUzOEYwMDAwQUQ3MTc3MDAwNkE4MUQxIC8qIEFic3RyYWN0
Vmlldy5pZGwgKi8sCkBAIC04Mzk3LDcgKzg0NDAsNiBAQAogCQkJCTkzNUM0NzYyMDlBQzRDRTYw
MEE2QUFCNCAvKiBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmggKi8sCiAJCQkJNjVGRUE4
NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovLAogCQkJCTY1QTIxNDY3MDk3QTMyOTEw
MEI5MDUwQSAvKiBQYWdlLmggKi8sCi0JCQkJNjVEMUMxQzkwOTkzMkIyMjAwMENCMzI0IC8qIFBs
dWdpbi5oICovLAogCQkJCUJDRUMwMUJBMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uY3BwICov
LAogCQkJCUJDRUMwMUJCMEMyNzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaCAqLywKIAkJCQlCQ0VD
MDFCQzBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmlkbCAqLywKQEAgLTEwNTY4LDYgKzEwNjEw
LDMyIEBACiAJCQluYW1lID0gWE1MOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJQTkzNTMzNUMwRDNERjhBODAwODEzMzQ0IC8qIHBsdWdpbnMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE5RTY2QTFCMEQzRjVDOEYwMEQzNUNCMSAv
KiBtYWMgKi8sCisJCQkJQTkzNTMzNkQwRDNERjk2RTAwODEzMzQ0IC8qIFBsdWdpbkRhdGEuY3Bw
ICovLAorCQkJCUE5MzUzMzZFMEQzREY5NkUwMDgxMzM0NCAvKiBQbHVnaW5EYXRhLmggKi8sCisJ
CQkJQTkzNTMzNjkwRDNERjk1NDAwODEzMzQ0IC8qIFBsdWdpbkFycmF5LmNwcCAqLywKKwkJCQlB
OTM1MzM2QTBEM0RGOTU0MDA4MTMzNDQgLyogUGx1Z2luQXJyYXkuaCAqLywKKwkJCQlBOTM1MzM2
NTBEM0RGOTNFMDA4MTMzNDQgLyogUGx1Z2luLmNwcCAqLywKKwkJCQlBOTM1MzM2NjBEM0RGOTNF
MDA4MTMzNDQgLyogUGx1Z2luLmggKi8sCisJCQkJQTkzNTMzNjEwRDNERjkyOTAwODEzMzQ0IC8q
IE1pbWVUeXBlQXJyYXkuY3BwICovLAorCQkJCUE5MzUzMzYyMEQzREY5MjkwMDgxMzM0NCAvKiBN
aW1lVHlwZUFycmF5LmggKi8sCisJCQkJQTkzNTMzNUQwRDNERjkxMjAwODEzMzQ0IC8qIE1pbWVU
eXBlLmNwcCAqLywKKwkJCQlBOTM1MzM1RTBEM0RGOTEyMDA4MTMzNDQgLyogTWltZVR5cGUuaCAq
LywKKwkJCSk7CisJCQluYW1lID0gcGx1Z2luczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCUE5RTY2QTFCMEQzRjVDOEYwMEQzNUNCMSAvKiBtYWMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUE5RTY2QTE5MEQzRjVDNzgwMEQzNUNC
MSAvKiBQbHVnaW5EYXRhTWFjLm1tICovLAorCQkJKTsKKwkJCW5hbWUgPSBtYWM7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMjIyNzdDQTBEMDBCRjFFMDA3MUI3ODIgLyog
c3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExMzg1
LDYgKzExNDUzLDcgQEAKIAkJQkMxQTM3OTMwOTdDNkZCMTAwMTlGM0Q4IC8qIGpzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOTM1MzRCNjBEM0UwMDRD
MDA4MTMzNDQgLyogSlNQbHVnaW5DdXN0b20uY3BwICovLAogCQkJCTE0REZCMzNGMEE3REY3NjMw
MDE4Rjc2OSAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJQkM0RURFRjcwQzA4RjQxNDAwN0VE
RDQ5IC8qIEN1c3RvbSAqLywKIAkJCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyogQ29kZUdl
bmVyYXRvckpTLnBtICovLApAQCAtMTE0MzAsOCArMTE0OTksNiBAQAogCQkJCTkzQjcwRDRFMDlF
QjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggKi8sCiAJCQkJOTNCNzBENEYwOUVCMEM3QzAw
OUQ4NDY4IC8qIGtqc19odG1sLmNwcCAqLywKIAkJCQk5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0Njgg
Lyoga2pzX2h0bWwuaCAqLywKLQkJCQk5M0I3MEQ1MTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25h
dmlnYXRvci5jcHAgKi8sCi0JCQkJOTNCNzBENTIwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZp
Z2F0b3IuaCAqLywKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmNw
cCAqLywKIAkJCQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmggKi8sCiAJ
CQkJOTNCNzBENTkwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc193aW5kb3cuY3BwICovLApAQCAtMTE1
MjEsMTEgKzExNTg4LDEzIEBACiAJCQkJNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQlCQzE3Rjk2NTBCNjRFQkI4MDA0
QTY1Q0IgLyogSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQUI0Q0I0RUEw
QjhCREEzRDAwOUY0MEIwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uaCAqLywKKwkJCQlB
OTM1MzRCMzBEM0UwMDNEMDA4MTMzNDQgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLywK
IAkJCQlCQ0Q5QzI1RjBDMTdBQTY3MDA1QzkwQTIgLyogSlNOYW1lZE5vZGVNYXBDdXN0b20uY3Bw
ICovLAogCQkJCUJDRDlDMjYwMEMxN0FBNjcwMDVDOTBBMiAvKiBKU05vZGVDdXN0b20uY3BwICov
LAogCQkJCUJDQjc3MzYwMEMxNzg1M0QwMDEzMkJBNCAvKiBKU05vZGVGaWx0ZXJDdXN0b20uY3Bw
ICovLAogCQkJCTFBNzUwREQzMEE5MEU3MjkwMDBGRjIxNSAvKiBKU05vZGVJdGVyYXRvckN1c3Rv
bS5jcHAgKi8sCiAJCQkJQkNEOUMyNjEwQzE3QUE2NzAwNUM5MEEyIC8qIEpTTm9kZUxpc3RDdXN0
b20uY3BwICovLAorCQkJCUE5MzUzNEI1MEQzRTAwNEMwMDgxMzM0NCAvKiBKU1BsdWdpbkFycmF5
Q3VzdG9tLmNwcCAqLywKIAkJCQk1MURDRTgwMTBDQUM5RjFDMDA0ODgzNTggLyogSlNTUUxSZXN1
bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQkxQUQyMzE2RDBDRDI2OUU3MDBDMUYxOTQg
LyogSlNTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkM5OEEyN0MwQzBDOTk1MDAw
NEJFQkY3IC8qIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAgKi8sCkBAIC0xMTU0Myw2ICsxMTYxMiwx
NiBAQAogCQlCQzk4NTQ0MzBDRDNEOUQwMDAwNjlCQzEgLyogV2luZG93ICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUU2NkExMTBEM0UxNDIzMDBEMzVD
QjEgLyogSlNQbHVnaW4uY3BwICovLAorCQkJCUE5RTY2QTEyMEQzRTE0MjMwMEQzNUNCMSAvKiBK
U1BsdWdpbi5oICovLAorCQkJCUE5RTY2QTEzMEQzRTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbkFy
cmF5LmNwcCAqLywKKwkJCQlBOUU2NkExNDBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVnaW5BcnJh
eS5oICovLAorCQkJCUE5RTY2QTA5MEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlLmNwcCAq
LywKKwkJCQlBOUU2NkEwQTBEM0UxM0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZS5oICovLAorCQkJ
CUE5RTY2QTBCMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlQXJyYXkuY3BwICovLAorCQkJ
CUE5RTY2QTBDMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlQXJyYXkuaCAqLywKKwkJCQlB
OUU2NkEwNTBEM0UxMzg3MDBEMzVDQjEgLyogSlNOYXZpZ2F0b3IuY3BwICovLAorCQkJCUE5RTY2
QTA2MEQzRTEzODcwMEQzNUNCMSAvKiBKU05hdmlnYXRvci5oICovLAogCQkJCUJDNUE4NkIzMEMz
MzY3RTgwMEVFQTY0OSAvKiBKU0RPTVNlbGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM1QTg2QjQwQzMz
NjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmggKi8sCiAJCQkJMTQwM0JBMEIwOUVCMThD
NzAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmNwcCAqLywKQEAgLTExNzEyLDcgKzExNzkxLDYgQEAK
IAkJCQk5MzVDNDc2NzA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50LmggKi8s
CiAJCQkJQkNFQzAxRDYwQzI3NEVCNDAwOUY0RUM5IC8qIFBsYXRmb3JtU2NyZWVuLmggKi8sCiAJ
CQkJOTM1QzQ3NkEwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oICovLAot
CQkJCUE4MjM5OEE1MDlCM0FDREIwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmUuaCAqLywKIAkJ
CQkwNjY4RTE4OTBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBNZW51LmggKi8sCiAJCQkJQUJDMTI4
NzYwQjMzQUE2RDAwQzY5M0Q1IC8qIFBvcHVwTWVudUNsaWVudC5oICovLAogCQkJCUJDN0IyQUY4
MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxCYXIuaCAqLywKQEAgLTEzNzEyLDggKzEzNzkwLDYg
QEAKIAkJCQlCQzNGQ0FBOTBBQzNEQjU4MDBCQTU0QUQgLyogUGxhdGZvcm1TY3JvbGxCYXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJCMEQwMDZDMUQwMEVGNkYyNiAvKiBQbGF0Zm9ybVN0
cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBs
YXRmb3JtV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTgyMzk4QTYwOUIzQUNEQjAw
QjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjVEMUMxQ0Ew
OTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNjk0Qzgw
QTNCMTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MkIxRjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBNZW51LmggaW4g
SGVhZGVycyAqLywKQEAgLTE0MTUwLDggKzE0MjI2LDYgQEAKIAkJCQk5M0I3MEQ2QTA5RUIwQzdD
MDA5RDg0NjggLyoga2pzX2V2ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgxRjMwOUQx
NTA4RDAwMEU2MUQ3IC8qIGtqc19ldmVudHMubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I3
MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTkz
QjcwRDZFMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLywK
LQkJCQk2NTY1ODFGNTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzQjcwRDc2MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfd2luZG93
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODFGODA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX3dp
bmRvdy5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtMTQxOTgsNiArMTQyNzIsMTcgQEAKIAkJCQlB
QkZFN0UxMzBEMzJGQUY2MDA2NkY0RDIgLyogTWVkaWFDb250cm9sRWxlbWVudHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0RUVGRkM5MEQzNDU1MEMwMDQ2OUE1OCAvKiBKU0F1ZGlvQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIzRTRFMEQzQzFFODQwMEI0QTkyQiAvKiBTdHJp
bmdCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5MzUzMzYwMEQzREY5MTIwMDgxMzM0NCAv
KiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTkzNTMzNjQwRDNERjkyOTAwODEzMzQ0
IC8qIE1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5MzUzMzY4MEQzREY5M0Uw
MDgxMzM0NCAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUE5MzUzMzZDMEQzREY5NTQw
MDgxMzM0NCAvKiBQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTkzNTMzNzAwRDNE
Rjk2RTAwODEzMzQ0IC8qIFBsdWdpbkRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5MzUzNDEz
MEQzREZGQzYwMDgxMzM0NCAvKiBOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RTY2
QTA4MEQzRTEzODcwMEQzNUNCMSAvKiBKU05hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTlFNjZBMEUwRDNFMTNGMTAwRDM1Q0IxIC8qIEpTTWltZVR5cGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUE5RTY2QTEwMEQzRTEzRjEwMEQzNUNCMSAvKiBKU01pbWVUeXBlQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE5RTY2QTE2MEQzRTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTlFNjZBMTgwRDNFMTQyMzAwRDM1Q0IxIC8qIEpTUGx1Z2luQXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTQyMzYsNyArMTQzMjEsNiBAQAogCQkwODY3RDY5MEZFODQw
MjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0
OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwot
CQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JF
bmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0xNTMy
MCw3ICsxNTQwNCw2IEBACiAJCQkJOTM1QzQ3NzEwOUFDNEQ3MzAwQTZBQUI0IC8qIFBsYXRmb3Jt
TW91c2VFdmVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTA4MEMyNzRGODgwMDZC
QzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QURD
MDgyNDVFNTkwMDFFOUFCQyAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUE4MjM5OEE4MDlCM0FDRjUwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmVNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQUM2OTRDNzBBM0IxNjc2MDAzRjUwNDkgLyogUGx1Z2luRG9j
dW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMUY3MTYwRDAwQ0FBODAwNEFFQTY0IC8q
IFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjY4RTE5MDBB
REQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0xNTc1
MSw3ICsxNTgzNCw2IEBACiAJCQkJOTNCNzBENjcwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19kb20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENjkwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19l
dmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENkIwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19odG1sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQjcwRDZEMDlFQjBDN0MwMDlEODQ2
OCAvKiBranNfbmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQjcwRDZGMDlFQjBD
N0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENzUw
OUVCMEM3QzAwOUQ4NDY4IC8qIGtqc193aW5kb3cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNC
MTZDMkMwOTc5QzNCRDAwNDY3NzQxIC8qIGxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE1
Nzg4LDYgKzE1ODcwLDIxIEBACiAJCQkJMzcxRjUzRUEwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1Vu
aWNvZGVSYW5nZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCRkU3RTEyMEQzMkZBRjYw
MDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
NEVFRkZDODBEMzQ1NTBDMDA0NjlBNTggLyogSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE5MzUzMzVGMEQzREY5MTIwMDgxMzM0NCAvKiBNaW1lVHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlBOTM1MzM2MzBEM0RGOTI5MDA4MTMzNDQgLyogTWltZVR5cGVBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOTM1MzM2NzBEM0RGOTNFMDA4MTMzNDQgLyogUGx1
Z2luLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5MzUzMzZCMEQzREY5NTQwMDgxMzM0NCAvKiBQ
bHVnaW5BcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOTM1MzM2RjBEM0RGOTZFMDA4MTMz
NDQgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOTM1MzQxMjBEM0RGRkM2
MDA4MTMzNDQgLyogTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5MzUzNEI0MEQz
RTAwM0QwMDgxMzM0NCAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJQTkzNTM0QjcwRDNFMDA0QzAwODEzMzQ0IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTkzNTM0QjgwRDNFMDA0QzAwODEzMzQ0IC8qIEpTUGx1Z2lu
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5RTY2QTA3MEQzRTEzODcwMEQzNUNCMSAv
KiBKU05hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUU2NkEwRDBEM0UxM0YxMDBE
MzVDQjEgLyogSlNNaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUU2NkEwRjBEM0Ux
M0YxMDBEMzVDQjEgLyogSlNNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5
RTY2QTE1MEQzRTE0MjMwMEQzNUNCMSAvKiBKU1BsdWdpbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBOUU2NkExNzBEM0UxNDIzMDBEMzVDQjEgLyogSlNQbHVnaW5BcnJheS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBOUU2NkExQTBEM0Y1Qzc4MDBEMzVDQjEgLyogUGx1Z2luRGF0YU1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBl
QXJyYXlDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0
b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTM4ODIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5j
cHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNo
IEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTTWltZVR5cGVBcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCisjaW5jbHVkZSAiTWltZVR5cGVBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jvb2wgSlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVt
c0Zvck5hbWUoRXhlY1N0YXRlKiwgTWltZVR5cGVBcnJheSogbWltZVR5cGVBcnJheSwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBtaW1lVHlwZUFycmF5LT5j
YW5HZXRJdGVtc0Zvck5hbWUocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSogSlNNaW1lVHlw
ZUFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKK3sKKyAgICBKU01pbWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU01p
bWVUeXBlQXJyYXkqPihzbG90LnNsb3RCYXNlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRo
aXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZDdhZTRkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUGx1Z2luQXJyYXku
aCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworYm9vbCBK
U1BsdWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgUGx1Z2luQXJyYXkq
IHBsdWdpbkFycmF5LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIHBsdWdpbkFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUocHJvcGVydHlOYW1lKTsKK30KKwor
SlNWYWx1ZSogSlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNQbHVnaW5BcnJheSogdGhpc09iaiA9IHN0
YXRpY19jYXN0PEpTUGx1Z2luQXJyYXkqPihzbG90LnNsb3RCYXNlKCkpOworICAgIHJldHVybiB0
b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lNzA3OWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUGx1Z2luLmgiCisKKyNp
bmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCitib29sIEpTUGx1Z2luOjpjYW5H
ZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgUGx1Z2luKiBwbHVnaW4sIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luLT5jYW5HZXRJdGVtc0Zvck5h
bWUocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSogSlNQbHVnaW46Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTUGx1Z2lu
KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5h
bWUpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyY2VhN2QuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU1MSArMCwwIEBA
Ci0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0vKgotICogIENvcHlyaWdodCAoQykgMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwMCBE
YW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKGMpIDIw
MDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKLQotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIkxhbmd1YWdlLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlBsdWdJbkluZm9TdG9yZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAia2pz
X3dpbmRvdy5oIgotI2luY2x1ZGUgPGtqcy9vYmplY3Rfb2JqZWN0Lmg+Ci0KLSNpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk0KLSNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFBQ
QykKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIKLSNlbGlmIFBM
QVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2KQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9Q
TEFURk9STSAiTWFjSW50ZWwiCi0jZWxpZiBQTEFURk9STShXSU5fT1MpCi0jZGVmaW5lIFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKLSNlbHNlCi0jZGVmaW5lIFdFQkNPUkVfTkFW
SUdBVE9SX1BMQVRGT1JNICIiCi0jZW5kaWYKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk0KLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0jZGVm
aW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgotI2VuZGlmIC8vIGlmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJP
RFVDVF9TVUIKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3
IgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgotCi0jaWZu
ZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9W
RU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMuIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05B
VklHQVRPUl9WRU5ET1IKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0j
ZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKLSNlbmRpZiAvLyBpZm5kZWYg
V0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIEtKUyB7Ci0KLSAgICBjbGFzcyBQbHVnaW5CYXNlIDogcHVibGljIERPTU9i
amVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW5CYXNlKEV4ZWNTdGF0ZSAqZXhlYyk7
Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbkJhc2UoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyB2b2lkIHJlZnJlc2goYm9vbCByZWxvYWQpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBz
dGF0aWMgdm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBzdGF0aWMg
VmVjdG9yPFBsdWdpbkluZm8qPiAqcGx1Z2luczsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4gKm1pbWVzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGludCBt
X3BsdWdJbkNhY2hlUmVmQ291bnQ7Ci0gICAgfTsKLQotCi0gICAgY2xhc3MgUGx1Z2lucyA6IHB1
YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbnMoRXhlY1N0YXRl
ICpleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykge307Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50
IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0lu
Zm8gaW5mbzsKLSAgICAgICAgZW51bSB7IExlbmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNW
YWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIH07Ci0KLSAgICBKU1ZhbHVlKiBwbHVnaW5z
RnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotCi0g
ICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSAqZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHsgfTsK
LSAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlICpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAg
ICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTGVuZ3Ro
IH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUgKmluZGV4R2V0dGVyKEV4
ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqLCBK
U09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAg
fTsKLQotICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIFBsdWdpbihFeGVjU3RhdGUgKmV4ZWMsIFBsdWdpbkluZm8gKmluZm8pIDogUGx1
Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlT
bG90Jik7Ci0gICAgICAgIEpTVmFsdWUgKmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICosIGlu
dCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJ
bmZvIGluZm87Ci0gICAgICAgIGVudW0geyBOYW1lLCBGaWxlbmFtZSwgRGVzY3JpcHRpb24sIExl
bmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlICppbmRleEdldHRl
cihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3Bl
cnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSAqbmFtZUdldHRlcihFeGVjU3RhdGUg
KiwgSlNPYmplY3QgKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwot
Ci0gICAgICAgIFBsdWdpbkluZm8gKm1faW5mbzsKLSAgICB9OwotCi0gICAgY2xhc3MgTWltZVR5
cGUgOiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZSgg
RXhlY1N0YXRlICpleGVjLCBNaW1lQ2xhc3NJbmZvICppbmZvICkgOiBQbHVnaW5CYXNlKGV4ZWMp
LCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAg
ICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKiwgaW50IHRva2VuKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAg
ICAgICAgZW51bSB7IFR5cGUsIFN1ZmZpeGVzLCBEZXNjcmlwdGlvbiwgRW5hYmxlZFBsdWdpbiB9
OwotICAgIHByaXZhdGU6Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm1faW5mbzsKLSAgICB9Owot
Ci19IC8vIG5hbWVzcGFjZQotCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5sdXQuaCIKLQotbmFt
ZXNwYWNlIEtKUyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBQbHVnaW5zOjppbmZvID0geyAiUGx1Z2lu
QXJyYXkiLCAwLCAmUGx1Z2luc1RhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gTWltZVR5cGVzOjpp
bmZvID0geyAiTWltZVR5cGVBcnJheSIsIDAsICZNaW1lVHlwZXNUYWJsZSB9OwotY29uc3QgQ2xh
c3NJbmZvIFBsdWdpbjo6aW5mbyA9IHsgIlBsdWdpbiIsIDAsICZQbHVnaW5UYWJsZSB9OwotY29u
c3QgQ2xhc3NJbmZvIE1pbWVUeXBlOjppbmZvID0geyAiTWltZVR5cGUiLCAwLCAmTWltZVR5cGVU
YWJsZSB9OwotCi1WZWN0b3I8UGx1Z2luSW5mbyo+ICpLSlM6OlBsdWdpbkJhc2U6OnBsdWdpbnMg
PSAwOwotVmVjdG9yPE1pbWVDbGFzc0luZm8qPiAqS0pTOjpQbHVnaW5CYXNlOjptaW1lcyA9IDA7
Ci1pbnQgS0pTOjpQbHVnaW5CYXNlOjptX3BsdWdJbkNhY2hlUmVmQ291bnQgPSAwOwotCi1jb25z
dCBDbGFzc0luZm8gTmF2aWdhdG9yOjppbmZvID0geyAiTmF2aWdhdG9yIiwgMCwgJk5hdmlnYXRv
clRhYmxlIH07Ci0vKgotQGJlZ2luIE5hdmlnYXRvclRhYmxlIDEzCi0gIGFwcENvZGVOYW1lICAg
TmF2aWdhdG9yOjpBcHBDb2RlTmFtZSAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgYXBwTmFtZSAgICAgICBOYXZpZ2F0b3I6OkFwcE5hbWUgICAgICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQotICBhcHBWZXJzaW9uICAgIE5hdmlnYXRvcjo6QXBwVmVy
c2lvbiAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGxhbmd1YWdlICAg
ICAgTmF2aWdhdG9yOjpMYW5ndWFnZSAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLSAgdXNlckFnZW50ICAgICBOYXZpZ2F0b3I6OlVzZXJBZ2VudCAgICAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwbGF0Zm9ybSAgICAgIE5hdmlnYXRvcjo6UGxh
dGZvcm0gICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHBsdWdpbnMg
ICAgICAgTmF2aWdhdG9yOjpfUGx1Z2lucyAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgbWltZVR5cGVzICAgICBOYXZpZ2F0b3I6Ol9NaW1lVHlwZXMgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwcm9kdWN0ICAgICAgIE5hdmlnYXRvcjo6
UHJvZHVjdCAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHByb2R1
Y3RTdWIgICAgTmF2aWdhdG9yOjpQcm9kdWN0U3ViICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgdmVuZG9yICAgICAgICBOYXZpZ2F0b3I6OlZlbmRvciAgICAgICAgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB2ZW5kb3JTdWIgICAgIE5hdmlnYXRv
cjo6VmVuZG9yU3ViICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGNv
b2tpZUVuYWJsZWQgTmF2aWdhdG9yOjpDb29raWVFbmFibGVkICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgamF2YUVuYWJsZWQgICBuYXZpZ2F0b3JQcm90b0Z1bmNKYXZhRW5h
YmxlZCAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotCi1OYXZpZ2F0b3I6Ok5hdmln
YXRvcihKU09iamVjdCogcHJvdG90eXBlLCBGcmFtZSogZnJhbWUpCi0gICAgOiBET01PYmplY3Qo
cHJvdG90eXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotYm9vbCBOYXZpZ2F0b3I6
OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICByZXR1cm4gZ2V0U3RhdGljUHJv
cGVydHlTbG90PE5hdmlnYXRvciwgSlNPYmplY3Q+KGV4ZWMsICZOYXZpZ2F0b3JUYWJsZSwgdGhp
cywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBzd2l0Y2gg
KHRva2VuKSB7Ci0gIGNhc2UgQXBwQ29kZU5hbWU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCJNb3pp
bGxhIik7Ci0gIGNhc2UgQXBwTmFtZToKLSAgICByZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7
Ci0gIGNhc2UgQXBwVmVyc2lvbjogewotICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0
aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCi0gICAgY29u
c3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKLSAg
ICByZXR1cm4ganNTdHJpbmcodXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycp
ICsgMSkpOwotICB9Ci0gIGNhc2UgUHJvZHVjdDoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09S
RV9OQVZJR0FUT1JfUFJPRFVDVCk7Ci0gIGNhc2UgUHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNT
dHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAg
ICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5k
b3JTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIp
OwotICBjYXNlIExhbmd1YWdlOgotICAgIHJldHVybiBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2Uo
KSk7Ci0gIGNhc2UgVXNlckFnZW50OgotICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2Fk
ZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKSA6IEtVUkwoKSkpOwotICBjYXNlIFBsYXRmb3JtOgotICAgIHJldHVybiBqc1N0cmlu
ZyhXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSk7Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0
dXJuIG5ldyBQbHVnaW5zKGV4ZWMpOwotICBjYXNlIF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5l
dyBNaW1lVHlwZXMoZXhlYyk7Ci0gIGNhc2UgQ29va2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNC
b29sZWFuKGNvb2tpZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1
cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5E
YXRhSWZOZWNlc3NhcnkoKQotewotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5z
ID0gbmV3IFZlY3RvcjxQbHVnaW5JbmZvKj47Ci0gICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxN
aW1lQ2xhc3NJbmZvKj47Ci0gICAgICAgIAotICAgICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24K
LSAgICAgICAgUGx1Z0luSW5mb1N0b3JlIGM7Ci0gICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50
ID0gYy5wbHVnaW5Db3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1
Z2luQ291bnQ7IG4rKykgewotICAgICAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVh
dGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleChuKTsKLSAgICAgICAgICAgIGlmICghcGx1Z2lu
KSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
cGx1Z2lucy0+YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWlt
ZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJh
dG9yIGl0ciA9IHBsdWdpbi0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAg
ICAgICAgICAgICAgbWltZXMtPmFwcGVuZCgqaXRyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
UGx1Z2luQmFzZTo6UGx1Z2luQmFzZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBET01PYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKLXsKLSAgICBj
YWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudCsr
OwotfQotCi1QbHVnaW5CYXNlOjp+UGx1Z2luQmFzZSgpCi17Ci0gICAgbV9wbHVnSW5DYWNoZVJl
ZkNvdW50LS07Ci0gICAgaWYgKCFtX3BsdWdJbkNhY2hlUmVmQ291bnQpIHsKLSAgICAgICAgaWYg
KHBsdWdpbnMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAg
ICAgICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgICAgIHBsdWdpbnMgPSAwOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtaW1lcykgewotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpt
aW1lcyk7Ci0gICAgICAgICAgICBkZWxldGUgbWltZXM7Ci0gICAgICAgICAgICBtaW1lcyA9IDA7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJl
bG9hZCkKLXsKLSAgICBpZiAocGx1Z2lucykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBs
dWdpbnMpOwotICAgICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgcGx1Z2lucyA9IDA7Ci0g
ICAgfQotICAgIGlmIChtaW1lcykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsK
LSAgICAgICAgZGVsZXRlIG1pbWVzOwotICAgICAgICBtaW1lcyA9IDA7Ci0gICAgfQotICAgIAot
ICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZCk7Ci0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3Nh
cnkoKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBQbHVnaW5zVGFibGUgMgot
ICBsZW5ndGggICAgICAgIFBsdWdpbnM6Okxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgcmVmcmVzaCAgICAgICBwbHVnaW5zRnVuY3Rpb25SZWZyZXNo
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi0KLUpTVmFs
dWUgKlBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIo
cGx1Z2lucy0+c2l6ZSgpKTsKLX0KLQotSlNWYWx1ZSAqUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBu
ZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVl
ICpQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVy
dHlOYW1lOwotICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMt
PmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1
Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyAq
cGwgPSAqaXRyOwotICAgICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5k
RW50cnkoJlBsdWdpbnNUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAg
ICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgICBzbG90LnNldFN0YXRpY0Vu
dHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAg
ICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBs
dWdpbnM+KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBs
dWdpbnNbI10KLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9w
ZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5z
aXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhH
ZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBwbHVnaW5bbmFtZV0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5k
ID0gcGx1Z2lucy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRl
cmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAg
ICAgICAgIGlmICgoKml0ciktPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUGx1Z2luQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlc1RhYmxlIDEK
LSAgbGVuZ3RoICAgICAgICBNaW1lVHlwZXM6Okxlbmd0aCAgICAgICBEb250RGVsZXRlfFJlYWRP
bmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlICpNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5n
dGgpOwotICByZXR1cm4ganNOdW1iZXIobWltZXMtPnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUgKk1p
bWVUeXBlczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQotewotICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3Qu
aW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlICpNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEF0b21pY1N0cmluZyBh
dG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVD
bGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0
cisrKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm0gPSAoKml0cik7Ci0gICAgICAgIGlmICht
LT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWlt
ZVR5cGUoZXhlYywgbSk7Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1i
b29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50
cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPE1pbWVUeXBlcz4pOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gbWltZVR5cGVzWyNdCi0gICAgICAg
IGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMy
KCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwgbWltZXMtPnNpemUoKSkgewotICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbWVUeXBlc1tuYW1lXQot
ICAgICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwot
ICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0g
bWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCpp
dHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJh
c2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0K
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luVGFibGUgNAotICBuYW1lICAg
ICAgICAgIFBsdWdpbjo6TmFtZSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZmls
ZW5hbWUgICAgICBQbHVnaW46OkZpbGVuYW1lICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IGRlc2NyaXB0aW9uICAgUGx1Z2luOjpEZXNjcmlwdGlvbiAgICAgRG9udERlbGV0ZXxSZWFkT25s
eQotICBsZW5ndGggICAgICAgIFBsdWdpbjo6TGVuZ3RoICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLUBlbmQKLSovCi0KLUpTVmFsdWUgKlBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBOYW1lOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5uYW1lKTsKLSAg
ICBjYXNlIEZpbGVuYW1lOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5maWxlKTsK
LSAgICBjYXNlIERlc2NyaXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5k
ZXNjKTsKLSAgICBjYXNlIExlbmd0aDogCi0gICAgICAgIHJldHVybiBqc051bWJlcihtX2luZm8t
Pm1pbWVzLnNpemUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKDApOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUgKlBsdWdpbjo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIFBsdWdpbiAqdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbiAqPihzbG90LnNsb3RCYXNl
KCkpOwotICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1l
cy5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSAqUGx1Z2luOjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKm9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVnaW4g
KnRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4gKj4oc2xvdC5zbG90QmFzZSgpKTsKLSAgICBB
dG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmotPm1faW5mby0+bWltZXMu
ZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSB0
aGlzT2JqLT5tX2luZm8tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIE1pbWVDbGFzc0luZm8gKm0gPSAoKml0cik7Ci0gICAgICAgIGlmIChtLT50eXBlID09IGF0
b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywg
bSk7Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi0KLWJvb2wgUGx1Z2lu
OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBjb25zdCBIYXNoRW50cnkq
IGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJlBsdWdpblRhYmxlLCBwcm9wZXJ0eU5hbWUpOwot
ICAgIGlmIChlbnRyeSkgewotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5
LCBzdGF0aWNWYWx1ZUdldHRlcjxQbHVnaW4+KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gcGx1Z2luWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlm
IChvayAmJiBpIDwgbV9pbmZvLT5taW1lcy5zaXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwbHVnaW5bIm5hbWUiXQotICAgICAgICBBdG9t
aWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgICAgICBWZWN0
b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtX2luZm8tPm1pbWVzLmVuZCgpOwot
ICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1faW5m
by0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgICAgIGlmICgo
Kml0ciktPnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gUGx1Z2lu
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0K
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBNaW1lVHlwZVRhYmxlIDQKLSAg
dHlwZSAgICAgICAgICBNaW1lVHlwZTo6VHlwZSAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIHN1ZmZpeGVzICAgICAgTWltZVR5cGU6OlN1ZmZpeGVzICAgICAgRG9udERlbGV0ZXxSZWFk
T25seQotICBkZXNjcmlwdGlvbiAgIE1pbWVUeXBlOjpEZXNjcmlwdGlvbiAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgZW5hYmxlZFBsdWdpbiBNaW1lVHlwZTo6RW5hYmxlZFBsdWdpbiBEb250RGVs
ZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlICpNaW1lVHlwZTo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBUeXBlOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT50
eXBlKTsKLSAgICBjYXNlIFN1ZmZpeGVzOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZv
LT5zdWZmaXhlcyk7Ci0gICAgY2FzZSBEZXNjcmlwdGlvbjoKLSAgICAgICAgcmV0dXJuIGpzU3Ry
aW5nKG1faW5mby0+ZGVzYyk7Ci0gICAgY2FzZSBFbmFibGVkUGx1Z2luOiB7Ci0gICAgICAgIEZy
YW1lKiBmcmFtZSA9IFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmltcGwoKS0+ZnJhbWUo
KTsKLSAgICAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
ZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy0+YXJl
UGx1Z2luc0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIG1f
aW5mby0+cGx1Z2luKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLX0KLQotYm9vbCBNaW1lVHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgcmV0dXJuIGdldFN0YXRpY1ZhbHVlU2xvdDxNaW1lVHlwZSwgUGx1Z2luQmFz
ZT4oZXhlYywgJk1pbWVUeXBlVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0K
LUpTVmFsdWUqIHBsdWdpbnNGdW5jdGlvblJlZnJlc2goRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgUGx1Z2luQmFzZTo6cmVmcmVzaChhcmdzWzBd
LT50b0Jvb2xlYW4oZXhlYykpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1Zh
bHVlKiBuYXZpZ2F0b3JQcm90b0Z1bmNKYXZhRW5hYmxlZChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKLXsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
S0pTOjpOYXZpZ2F0b3I6OmluZm8pKQotICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7Ci0gIE5hdmlnYXRvciAqbmF2ID0gc3RhdGljX2Nhc3Q8TmF2aWdhdG9yICo+KHRoaXNP
YmopOwotICAvLyBqYXZhRW5hYmxlZCgpCi0gIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJh
bWUoKSA/IG5hdi0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDA7Ci0gIHJldHVybiBqc0Jvb2xlYW4o
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuaCBiL1dl
YkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMzJhNjk2Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25h
dmlnYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLy8gLSotIGMtYmFzaWMt
b2Zmc2V0OiAyIC0qLQotLyoKLSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJh
cmllcwotICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBranNfbmF2aWdhdG9y
X2gKLSNkZWZpbmUga2pzX25hdmlnYXRvcl9oCi0KLSNpbmNsdWRlICJranNfYmluZGluZy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRnJhbWU7Ci19Ci0KLW5hbWVzcGFjZSBL
SlMgewotCi0gIGNsYXNzIE5hdmlnYXRvciA6IHB1YmxpYyBET01PYmplY3QgewotICBwdWJsaWM6
Ci0gICAgTmF2aWdhdG9yKEpTT2JqZWN0KiBwcm90b3R5cGUsIFdlYkNvcmU6OkZyYW1lKik7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3Q7Ci0gICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgIGVudW0geyBBcHBDb2RlTmFtZSwgQXBwTmFtZSwg
QXBwVmVyc2lvbiwgTGFuZ3VhZ2UsIFVzZXJBZ2VudCwgUGxhdGZvcm0sCi0gICAgICAgICAgIF9Q
bHVnaW5zLCBfTWltZVR5cGVzLCBQcm9kdWN0LCBQcm9kdWN0U3ViLCBWZW5kb3IsIFZlbmRvclN1
YiwgQ29va2llRW5hYmxlZCB9OwotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWU7IH0KLSAgcHJpdmF0ZToKLSAgICBXZWJDb3JlOjpGcmFtZSAqbV9mcmFt
ZTsKLSAgfTsKLQotICAvLyBGdW5jdGlvbnMKLSAgSlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5j
SmF2YUVuYWJsZWQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci0KLX0gLy8g
bmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5kZXggMTNm
YjNiZi4uODhkNTg5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC01MSw3ICs1
MSw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTYwLDcgKzU5LDYgQEAKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRz
LmgiCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTE2NCw4ICsxNjIsNiBAQCBjb25zdCBD
bGFzc0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1RhYmxlIH07CiAg
IGNyeXB0byAgICAgICAgICAgICAgICBXaW5kb3c6OkNyeXB0byAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQogICBldmVudCAgICAgICAgICAgICAgICAgV2luZG93OjpFdmVudF8gICAg
ICAgICAgICAgIERvbnREZWxldGUKICAgbG9jYXRpb24gICAgICAgICAgICAgIFdpbmRvdzo6TG9j
YXRpb25fICAgICAgICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAgICAgICBXaW5k
b3c6Ok5hdmlnYXRvcl8gICAgICAgICAgRG9udERlbGV0ZQotICBjbGllbnRJbmZvcm1hdGlvbiAg
ICAgV2luZG93OjpDbGllbnRJbmZvcm1hdGlvbiAgIERvbnREZWxldGUKICMgLS0gRXZlbnQgTGlz
dGVuZXJzIC0tCiAgIG9uYWJvcnQgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYWJvcnQgICAgICAg
ICAgICAgRG9udERlbGV0ZQogICBvbmJsdXIgICAgICAgICAgICAgICAgV2luZG93OjpPbmJsdXIg
ICAgICAgICAgICAgIERvbnREZWxldGUKQEAgLTQ3OSwxOCArNDc1LDYgQEAgSlNWYWx1ZSAqV2lu
ZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAog
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZC0+bV9ldnQpOwogICAgIGNhc2UgTG9jYXRpb25fOgog
ICAgICAgcmV0dXJuIGxvY2F0aW9uKCk7Ci0gICAgY2FzZSBOYXZpZ2F0b3JfOgotICAgIGNhc2Ug
Q2xpZW50SW5mb3JtYXRpb246IHsKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0aGUgbmF2aWdh
dG9yIGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRpbWUuCi0gICAg
ICBOYXZpZ2F0b3IqIG4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+b2JqZWN0UHJvdG90eXBlKCksIGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgICAvLyBGSVhNRTog
dGhpcyB3aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxlIGZyb20gd2lu
ZG93cyB0aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUgZmlyc3QgdGlt
ZSwgYnV0IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KLSAgICAgIGNvbnN0X2Nh
c3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERvbnREZWxldGUp
OwotICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgiY2xpZW50SW5m
b3JtYXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAgIHJldHVybiBuOwotICAgIH0KICAgICBj
YXNlIEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFt
ZVdpbi5jcHAgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4IGY0ZjNlYjIu
LmY3MjEyOTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAKKysr
IGIvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2lu
Y2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJh
c2VXaW4uaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3V2luLmgiCiAjaW5jbHVkZSAiUmVndWxhckV4
cHJlc3Npb24uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9XZWJD
b3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IDc5ZTM0NmQuLjMwMTBmOWIgMTAwNzU1Ci0tLSBh
L1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNw
cApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RPTUlt
cGxlbWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAppbmRl
eCBmYjM2Mjg4Li41NGIyMDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRh
dGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0zOCw4
ICszOCw4IEBACiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVGV4dERvY3VtZW50LmgiCkBAIC0zNjMsMTYgKzM2MywxOCBAQCBQYXNzUmVmUHRyPERv
Y3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0
eXBlLCBGcmFtZQogICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KHRoaXMs
IGZyYW1lKTsKICNlbmRpZgogCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5w
YWdlKCkgPyBmcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkgOiAwOworCiAgICAgLy8gUERGIGlz
IG9uZSBpbWFnZSB0eXBlIGZvciB3aGljaCBhIHBsdWdpbiBjYW4gb3ZlcnJpZGUgYnVpbHQtaW4g
c3VwcG9ydC4KICAgICAvLyBXZSBkbyBub3Qgd2FudCBRdWlja1RpbWUgdG8gdGFrZSBvdmVyIGFs
bCBpbWFnZSB0eXBlcywgb2J2aW91c2x5LgotICAgIGlmICgodHlwZSA9PSAiYXBwbGljYXRpb24v
cGRmIiB8fCB0eXBlID09ICJ0ZXh0L3BkZiIpICYmIFBsdWdJbkluZm9TdG9yZTo6c3VwcG9ydHNN
SU1FVHlwZSh0eXBlKSkKKyAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgdHlw
ZSA9PSAidGV4dC9wZGYiKSAmJiBwbHVnaW5EYXRhICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzTWlt
ZVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luRG9jdW1lbnQodGhpcywgZnJh
bWUpOwogICAgIGlmIChJbWFnZTo6c3VwcG9ydHNUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4g
bmV3IEltYWdlRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBl
eGNlcHQgdGV4dC9wbGFpbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwbHVnaW5zLiBJbiBwYXJ0aWN1
bGFyLCBBZG9iZSBTVkcgVmlld2VyIHNob3VsZCBiZSB1c2VkIGZvciBTVkcsIGlmIGluc3RhbGxl
ZC4KICAgICAvLyBEaXNhbGxvd2luZyBwbHVnLWlucyB0byB1c2UgdGV4dC9wbGFpbiBwcmV2ZW50
cyBwbHVnLWlucyBmcm9tIGhpamFja2luZyBhIGZ1bmRhbWVudGFsIHR5cGUgdGhhdCB0aGUgYnJv
d3NlciBpcyBleHBlY3RlZCB0byBoYW5kbGUsCiAgICAgLy8gYW5kIGFsc28gc2VydmVzIGFzIGFu
IG9wdGltaXphdGlvbiB0byBwcmV2ZW50IGxvYWRpbmcgdGhlIHBsdWctaW4gZGF0YWJhc2UgaW4g
dGhlIGNvbW1vbiBjYXNlLgotICAgIGlmICh0eXBlICE9ICJ0ZXh0L3BsYWluIiAmJiBQbHVnSW5J
bmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpIAorICAgIGlmICh0eXBlICE9ICJ0ZXh0
L3BsYWluIiAmJiBwbHVnaW5EYXRhICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzTWltZVR5cGUodHlw
ZSkpIAogICAgICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAg
ICBpZiAoaXNUZXh0TUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dERvY3Vt
ZW50KHRoaXMsIGZyYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCBiZDU2ZGVjLi4xNGYy
YjJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBACiAjaW5jbHVkZSAi
TWFpblJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGEuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC0xNTkzLDcgKzE1OTMsOSBAQCBib29s
IEZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBib29sCiAgICAgLy8gQWxsb3cgb3RoZXIgcGx1Zy1pbnMgdG8gd2luIG92
ZXIgUXVpY2tUaW1lIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBhIHBsdWctaW4g
dGhhdAogICAgIC8vIGNhbiBoYW5kbGUgVElGRiAod2hpY2ggUXVpY2tUaW1lIGNhbiBhbHNvIGhh
bmRsZSkgdGhleSBwcm9iYWJseSBpbnRlbmRlZCB0byBvdmVycmlkZSBRVC4KICAgICBpZiAoKG1p
bWVUeXBlID09ICJpbWFnZS90aWZmIiB8fCBtaW1lVHlwZSA9PSAiaW1hZ2UvdGlmIiB8fCBtaW1l
VHlwZSA9PSAiaW1hZ2UveC10aWZmIikpIHsKLSAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBQ
bHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAg
IFN0cmluZyBwbHVnaW5OYW1lOworICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpKQorICAgICAg
ICAgICAgcGx1Z2luTmFtZSA9IG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5wbHVnaW5O
YW1lRm9yTWltZVR5cGUobWltZVR5cGUpOwogICAgICAgICBpZiAoIXBsdWdpbk5hbWUuaXNFbXB0
eSgpICYmICFwbHVnaW5OYW1lLmNvbnRhaW5zKCJRdWlja1RpbWUiLCBmYWxzZSkpIAogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5jcHAgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCA4MjU4NWI2Li45ZjZi
YmFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNp
bmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TY3JlZW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTU1LDYgKzE1Niwx
MCBAQCB2b2lkIERPTVdpbmRvdzo6Y2xlYXIoKQogICAgIGlmIChtX2NvbnNvbGUpCiAgICAgICAg
IG1fY29uc29sZS0+ZGlzY29ubmVjdEZyYW1lKCk7CiAgICAgbV9jb25zb2xlID0gMDsKKworICAg
IGlmIChtX25hdmlnYXRvcikKKyAgICAgICAgbV9uYXZpZ2F0b3ItPmRpc2Nvbm5lY3RGcmFtZSgp
OworICAgIG1fbmF2aWdhdG9yID0gMDsKIH0KIAogU2NyZWVuKiBET01XaW5kb3c6OnNjcmVlbigp
IGNvbnN0CkBAIC0yMjAsNiArMjI1LDEzIEBAIENvbnNvbGUqIERPTVdpbmRvdzo6Y29uc29sZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fY29uc29sZS5nZXQoKTsKIH0KIAorTmF2aWdhdG9yKiBET01X
aW5kb3c6Om5hdmlnYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX25hdmlnYXRvcikKKyAgICAg
ICAgbV9uYXZpZ2F0b3IgPSBuZXcgTmF2aWdhdG9yKG1fZnJhbWUpOworICAgIHJldHVybiBtX25h
dmlnYXRvci5nZXQoKTsKK30KKwogdm9pZCBET01XaW5kb3c6OnBvc3RNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgdXJpLCBE
T01XaW5kb3cqIHNvdXJjZSkgY29uc3QKIHsKICAgIEV4Y2VwdGlvbkNvZGUgZWM7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgK
aW5kZXggODJjN2NiYy4uMTljNDliZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDQsNiArNDQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEZyYW1lOwog
ICAgIGNsYXNzIEhpc3Rvcnk7CisgICAgY2xhc3MgTmF2aWdhdG9yOwogICAgIGNsYXNzIFNjcmVl
bjsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC02OSw2ICs3MCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogc2Nyb2xsYmFycygpIGNvbnN0Owog
ICAgICAgICBCYXJJbmZvKiBzdGF0dXNiYXIoKSBjb25zdDsKICAgICAgICAgQmFySW5mbyogdG9v
bGJhcigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OworICAg
ICAgICBOYXZpZ2F0b3IqIGNsaWVudEluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF2aWdh
dG9yKCk7IH0KIAogICAgICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpOwogCkBAIC0x
NjMsNiArMTY2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFJlZlB0
cjxCYXJJbmZvPiBtX3N0YXR1c2JhcjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFySW5mbz4g
bV90b29sYmFyOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxDb25zb2xlPiBtX2NvbnNvbGU7Cisg
ICAgICAgIG11dGFibGUgUmVmUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCAzYzUwODM5Li41YmMzMDEx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbApAQCAtMzUsNiArMzUsOCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAg
ICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzY3JvbGxiYXJzOwogICAgICAgICBh
dHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBCYXJJbmZvIHN0YXR1c2JhcjsKICAgICAgICAgYXR0cmli
dXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyB0b29sYmFyOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE5h
dmlnYXRvciBjbGllbnRJbmZvcm1hdGlvbjsKIAogICAgICAgICBET01TZWxlY3Rpb24gZ2V0U2Vs
ZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAg
Yi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGVjY2E1ZTcuLmQxMzEwMzAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIk1v
dmVTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKLSNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDA2ODQ1MTguLjUyZDBjZDAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApA
QCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5kZXggMTAxZmYzYi4uM2E4NWMyNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKQEAgLTk5LDYgKzk5LDcgQEAgY2xhc3MgS0pTUHJveHk7CiBjbGFzcyBLVVJMOwogY2xhc3Mg
Tm9kZTsKIGNsYXNzIFBhZ2U7CitjbGFzcyBQbHVnaW5EYXRhOwogY2xhc3MgUmFuZ2U7CiBjbGFz
cyBSZW5kZXJQYXJ0OwogY2xhc3MgU2VsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZThkYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChj
KSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRpbkBrZGUub3JnKQorICogIENvcHlyaWdo
dCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
IENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisK
KyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJM
YW5ndWFnZS5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXkuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1Jf
UExBVEZPUk0KKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFBQQykKKyNkZWZpbmUgV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIKKyNlbGlmIFBMQVRGT1JNKE1BQykgJiYg
UExBVEZPUk0oWDg2KQorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjSW50
ZWwiCisjZWxpZiBQTEFURk9STShXSU5fT1MpCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BM
QVRGT1JNICJXaW4zMiIKKyNlbHNlCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JN
ICIiCisjZW5kaWYKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0K
KworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCisjZGVmaW5lIFdFQkNPUkVfTkFW
SUdBVE9SX1BST0RVQ1QgIkdlY2tvIgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRP
Ul9QUk9EVUNUCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIKKyNkZWZp
bmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3IgorI2VuZGlmIC8vIGlm
bmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgorCisjaWZuZGVmIFdFQkNPUkVfTkFW
SUdBVE9SX1ZFTkRPUgorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IgIkFwcGxlIENv
bXB1dGVyLCBJbmMuIgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IK
KworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCisjZGVmaW5lIFdFQkNPUkVf
TkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FU
T1JfVkVORE9SX1NVQgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF2aWdhdG9yOjpOYXZp
Z2F0b3IoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworTmF2aWdh
dG9yOjp+TmF2aWdhdG9yKCkKK3sKKyAgICBkaXNjb25uZWN0RnJhbWUoKTsKK30KKwordm9pZCBO
YXZpZ2F0b3I6OmRpc2Nvbm5lY3RGcmFtZSgpCit7CisgICAgaWYgKG1fcGx1Z2lucykgeworICAg
ICAgICBtX3BsdWdpbnMtPmRpc2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBtX3BsdWdpbnMgPSAw
OworICAgIH0KKyAgICBpZiAobV9taW1lVHlwZXMpIHsKKyAgICAgICAgbV9taW1lVHlwZXMtPmRp
c2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBtX21pbWVUeXBlcyA9IDA7CisgICAgfQorICAgIG1f
ZnJhbWUgPSAwOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjphcHBDb2RlTmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6YXBwTmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICJOZXRzY2FwZSI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6
OmFwcFZlcnNpb24oKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2Vu
dCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCisgICAgY29uc3QgU3RyaW5nIHVz
ZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQo
KSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICByZXR1cm4gdXNl
ckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7Cit9CisKK1N0cmluZyBO
YXZpZ2F0b3I6Omxhbmd1YWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdl
KCk7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUt
PmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpIDogS1VSTCgpKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6cGxhdGZvcm0o
KSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STTsKK30KKwor
UGx1Z2luQXJyYXkqIE5hdmlnYXRvcjo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Bs
dWdpbnMpCisgICAgICAgIG1fcGx1Z2lucyA9IG5ldyBQbHVnaW5BcnJheShtX2ZyYW1lKTsKKyAg
ICByZXR1cm4gbV9wbHVnaW5zLmdldCgpOworfQorCitNaW1lVHlwZUFycmF5KiBOYXZpZ2F0b3I6
Om1pbWVUeXBlcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX21pbWVUeXBlcykKKyAgICAgICAgbV9t
aW1lVHlwZXMgPSBuZXcgTWltZVR5cGVBcnJheShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9taW1l
VHlwZXMuZ2V0KCk7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBjb25zdAorewor
ICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdh
dG9yOjpwcm9kdWN0U3ViKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1Jf
UFJPRFVDVF9TVUI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUjsKK30KKworU3RyaW5nIE5hdmlnYXRv
cjo6dmVuZG9yU3ViKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVO
RE9SX1NVQjsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKworYm9v
bCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIG1fZnJhbWUtPnNldHRpbmdzKCktPmlzSmF2
YUVuYWJsZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5oIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjlkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTmF2aWdhdG9yX2gKKyNkZWZp
bmUgTmF2aWdhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFtZTsK
KyAgICBjbGFzcyBTdHJpbmc7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBjbGFzcyBQbHVn
aW5BcnJheTsKKyAgICBjbGFzcyBNaW1lVHlwZUFycmF5OworCisgICAgY2xhc3MgTmF2aWdhdG9y
IDogcHVibGljIFJlZkNvdW50ZWQ8TmF2aWdhdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBO
YXZpZ2F0b3IoRnJhbWUqKTsKKyAgICAgICAgfk5hdmlnYXRvcigpOworCisgICAgICAgIHZvaWQg
ZGlzY29ubmVjdEZyYW1lKCk7CisgICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWU7IH0KKworICAgICAgICBTdHJpbmcgYXBwQ29kZU5hbWUoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGFwcE5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGFwcFZlcnNpb24oKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyB1
c2VyQWdlbnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBsYXRmb3JtKCkgY29uc3Q7CisgICAg
ICAgIFBsdWdpbkFycmF5KiBwbHVnaW5zKCkgY29uc3Q7CisgICAgICAgIE1pbWVUeXBlQXJyYXkq
IG1pbWVUeXBlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcgcHJvZHVjdCgpIGNvbnN0OworICAg
ICAgICBTdHJpbmcgcHJvZHVjdFN1YigpIGNvbnN0OworICAgICAgICBTdHJpbmcgdmVuZG9yKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyB2ZW5kb3JTdWIoKSBjb25zdDsKKyAgICAgICAgYm9vbCBj
b29raWVFbmFibGVkKCkgY29uc3Q7CisgICAgICAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdDsK
KworICAgIHByaXZhdGU6CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBtdXRhYmxl
IFJlZlB0cjxQbHVnaW5BcnJheT4gbV9wbHVnaW5zOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxN
aW1lVHlwZUFycmF5PiBtX21pbWVUeXBlczsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjM3ODFiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5k
b3cgeworCisgICAgaW50ZXJmYWNlIE5hdmlnYXRvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgYXBwQ29kZU5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgYXBwTmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
cHBWZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhbmd1YWdl
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZXJBZ2VudDsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwbGF0Zm9ybTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIFBsdWdpbkFycmF5IHBsdWdpbnM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBNaW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBwcm9kdWN0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHByb2R1Y3RTdWI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVuZG9y
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlbmRvclN1YjsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY29va2llRW5hYmxlZDsKKyAgICAgICAgYm9v
bGVhbiBqYXZhRW5hYmxlZCgpOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAyM2U5YzQwLi5jODMxNDJl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC0zNCw2ICsz
NSw4IEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgi
CkBAIC0yMDQsNiArMjA3LDMxIEBAIHZvaWQgUGFnZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkK
ICAgICAgICAgICAgIGZyYW1lLT5zZXROZWVkc1JlYXBwbHlTdHlsZXMoKTsKIH0KIAordm9pZCBQ
YWdlOjpyZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZCkKK3sKKyAgICBpZiAoIWFsbFBhZ2VzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBQbHVnaW5EYXRhOjpyZWZyZXNoKCk7CisKKyAgICBIYXNo
U2V0PFBhZ2UqPjo6aXRlcmF0b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxQYWdlKj46Oml0ZXJhdG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICAoKml0KS0+bV9wbHVnaW5EYXRhID0gMDsKKworICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChyZWxvYWQgJiYgZnJh
bWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkKKyAgICAgICAgICAgICAgICBmcmFtZS0+
bG9hZGVyKCktPnJlbG9hZCgpOworICAgICAgICB9CisgICAgfQorfQorCitQbHVnaW5EYXRhKiBQ
YWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2luRGF0YSkKKyAgICAg
ICAgbV9wbHVnaW5EYXRhID0gbmV3IFBsdWdpbkRhdGEodGhpcyk7CisgICAgcmV0dXJuIG1fcGx1
Z2luRGF0YS5nZXQoKTsKK30KKwogc3RhdGljIEZyYW1lKiBpbmNyZW1lbnRGcmFtZShGcmFtZSog
Y3VyciwgYm9vbCBmb3J3YXJkLCBib29sIHdyYXBGbGFnKQogewogICAgIHJldHVybiBmb3J3YXJk
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdlL1BhZ2UuaApp
bmRleCBlNjc5ZjM4Li43NjkyYTc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisr
KyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJbnNwZWN0b3JDb250
cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKICAgICBjbGFz
cyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgU2VsZWN0aW9uOwogICAgIGNsYXNzIFNlbGVj
dGlvbkNvbnRyb2xsZXI7CkBAIC03MCw2ICs3MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgUGFnZShDaHJvbWVDbGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVu
dCosIERyYWdDbGllbnQqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKICAg
ICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKTsK
KyAgICAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSgpIGNvbnN0OworCiAgICAgICAgIEVkaXRv
ckNsaWVudCogZWRpdG9yQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JDbGllbnQ7IH0K
IAogICAgICAgICB2b2lkIHNldE1haW5GcmFtZShQYXNzUmVmUHRyPEZyYW1lPik7CkBAIC0xNDMs
NiArMTQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8RnJhbWU+IG1f
bWFpbkZyYW1lOwogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9mb2N1c2VkTm9kZTsKIAorICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisKICAgICAgICAgRWRp
dG9yQ2xpZW50KiBtX2VkaXRvckNsaWVudDsKIAogICAgICAgICBpbnQgbV9mcmFtZUNvdW50Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BsdWdpbi5oIGIvV2ViQ29yZS9wYWdlL1BsdWdpbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWI0YzYzLi4wMDAwMDAwCi0tLSBhL1dl
YkNvcmUvcGFnZS9QbHVnaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8vIC0q
LSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbl9oCi0jZGVmaW5lIFBsdWdp
bl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICBjbGFzcyBXaWRnZXQ7Ci0KLSAgICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291
bnRlZDxQbHVnaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbihXaWRnZXQqIHZpZXcp
IDogbV92aWV3KHZpZXcpIHsgfQotICAgICAgICBXaWRnZXQqIHZpZXcoKSBjb25zdCB7IHJldHVy
biBtX3ZpZXc7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2lkZ2V0KiBtX3Zp
ZXc7Ci0gICAgfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBs
dWdpbl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29y
ZS9wYWdlL21hYy9GcmFtZU1hYy5tbQppbmRleCBiODFjMzYxLi41MGI2MzBhIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJh
bWVNYWMubW0KQEAgLTY4LDcgKzY4LDYgQEAKICNpbXBvcnQgIlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgotI2ltcG9ydCAiUGx1Z2luLmgiCiAjaW1wb3J0ICJSZWd1bGFyRXhwcmVzc2lv
bi5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RJdGVtLmgi
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbSBiL1dl
YkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCmluZGV4IGMzMTQwOTYuLjE0Y2U0
NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCisr
KyBiL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCkBAIC02Myw3ICs2Myw3
IEBACiAjaW1wb3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNp
bXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCi0jaW1wb3J0ICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNp
bXBvcnQgIlBsdWdpbkRhdGEuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJS
ZW5kZXJQYXJ0LmgiCiAjaW1wb3J0ICJSZW5kZXJUcmVlQXNUZXh0LmgiCkBAIC0xMjEzLDcgKzEy
MTMsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ET01FbGVtZW50
KERPTUVsZW1lbnQgKmVsZW1lbnQpCiAgICAgCiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVu
dGF0aW9uOjppc1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKICAgICAgICAgSW1hZ2U6OnN1cHBv
cnRzVHlwZShtaW1lVHlwZSkgfHwKLSAgICAgICAgUGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01J
TUVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5w
YWdlKCktPnBsdWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpKQogICAgICAg
ICByZXR1cm4gTk87CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9tYWMvV2ViQ29yZVZpZXdGYWN0b3J5LmggYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVW
aWV3RmFjdG9yeS5oCmluZGV4IDU1NTE0ZWQuLjlkY2JmZjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9tYWMvV2ViQ29yZVZpZXdGYWN0b3J5LmgKKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJD
b3JlVmlld0ZhY3RvcnkuaApAQCAtMzUsOSArMzUsNyBAQAogQHByb3RvY29sIFdlYkNvcmVWaWV3
RmFjdG9yeQogCiAtIChOU0FycmF5ICopcGx1Z2luc0luZm87IC8vIGFycmF5IG9mIGlkIDxXZWJD
b3JlUGx1Z2luSW5mbz4KLS0gKHZvaWQpcmVmcmVzaFBsdWdpbnM6KEJPT0wpcmVsb2FkUGFnZXM7
Ci0tIChOU1N0cmluZyAqKXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlw
ZTsKLS0gKEJPT0wpcGx1Z2luU3VwcG9ydHNNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsK
Ky0gKHZvaWQpcmVmcmVzaFBsdWdpbnM7CiAKIC0gKE5TU3RyaW5nICopaW5wdXRFbGVtZW50QWx0
VGV4dDsKIC0gKE5TU3RyaW5nICopcmVzZXRCdXR0b25EZWZhdWx0TGFiZWw7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5j
cHAKaW5kZXggN2FlMWRkOS4uMWYwMzI1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3F0L0Zy
YW1lUXQuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcApAQCAtNDgsNyArNDgs
NiBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BsdWdJbklu
Zm9TdG9yZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbHVnSW5JbmZvU3RvcmUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWMzMWFjYS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL1BsdWdJbkluZm9TdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBQbHVnSW5JbmZvU3RvcmVfaAotI2RlZmlu
ZSBQbHVnSW5JbmZvU3RvcmVfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFBsdWdp
bkluZm87Ci0KLXN0cnVjdCBNaW1lQ2xhc3NJbmZvIHsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBT
dHJpbmcgZGVzYzsKLSAgICBTdHJpbmcgc3VmZml4ZXM7Ci0gICAgUGx1Z2luSW5mbyogcGx1Z2lu
OwotfTsKLQotc3RydWN0IFBsdWdpbkluZm8gewotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmlu
ZyBmaWxlOwotICAgIFN0cmluZyBkZXNjOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWlt
ZXM7Ci19OwotCi1jbGFzcyBQbHVnSW5JbmZvU3RvcmUgewotcHVibGljOgotICAgIFBsdWdpbklu
Zm8gKmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKTsKLSAgICB1bnNp
Z25lZCBwbHVnaW5Db3VudCgpIGNvbnN0OwotICAgIHN0YXRpYyBTdHJpbmcgcGx1Z2luTmFtZUZv
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci19OwotCi12b2lkIHJlZnJlc2hQ
bHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbSBiL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYjU5MzBiNy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnSW5J
bmZvU3RvcmVNYWMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlBsdWdJbkluZm9TdG9yZS5o
IgotCi0jaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNp
bXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0
cmluZyBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQotewotICAgIHJldHVybiBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSBwbHVnaW5OYW1lRm9yTUlNRVR5cGU6bWltZVR5cGVdOwotfQotCi1QbHVnaW5JbmZvICpQ
bHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVk
IGluZGV4KQotewotICAgIFBsdWdpbkluZm8gKnBsdWdpbkluZm8gPSBuZXcgUGx1Z2luSW5mbzsK
LSAgICAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBpZCA8V2ViQ29y
ZVBsdWdpbkluZm8+IHBsdWdpbiA9IFtbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSBwbHVnaW5zSW5mb10gb2JqZWN0QXRJbmRleDppbmRleF07Ci0gICAgCi0gICAgcGx1Z2luSW5m
by0+bmFtZSA9IFtwbHVnaW4gbmFtZV07Ci0gICAgcGx1Z2luSW5mby0+ZmlsZSA9IFtwbHVnaW4g
ZmlsZW5hbWVdOwotICAgIHBsdWdpbkluZm8tPmRlc2MgPSBbcGx1Z2luIHBsdWdpbkRlc2NyaXB0
aW9uXTsKLQotICAgIE5TRW51bWVyYXRvciAqTUlNRVR5cGVFbnVtZXJhdG9yID0gW3BsdWdpbiBN
SU1FVHlwZUVudW1lcmF0b3JdOwotICAgIHdoaWxlIChOU1N0cmluZyAqTUlNRSA9IFtNSU1FVHlw
ZUVudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyAqbWltZSA9
IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBwbHVnaW5JbmZvLT5taW1lcy5hcHBlbmQobWlt
ZSk7Ci0gICAgICAgIG1pbWUtPnR5cGUgPSBTdHJpbmcoTUlNRSkubG93ZXIoKTsKLSAgICAgICAg
bWltZS0+c3VmZml4ZXMgPSBbW3BsdWdpbiBleHRlbnNpb25zRm9yTUlNRVR5cGU6TUlNRV0gY29t
cG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLCJdOwotICAgICAgICBtaW1lLT5kZXNjID0gW3BsdWdp
biBkZXNjcmlwdGlvbkZvck1JTUVUeXBlOk1JTUVdOwotICAgICAgICBtaW1lLT5wbHVnaW4gPSBw
bHVnaW5JbmZvOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcGx1Z2luSW5mbzsKLQotICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgaWYgKHBsdWdpbkluZm8gJiYgIXBs
dWdpbkluZm8tPm1pbWVzLmlzRW1wdHkoKSkKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKHBsdWdp
bkluZm8tPm1pbWVzKTsKLSAgICBkZWxldGUgcGx1Z2luSW5mbzsKLQotICAgIHJldHVybiAwOwot
fQotCi11bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtbW1dlYkNvcmVWaWV3
RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBwbHVnaW5zSW5mb10gY291bnRdOwotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgUGx1Z0lu
SW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0g
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBbW1dlYkNvcmVWaWV3
RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBwbHVnaW5TdXBwb3J0c01JTUVUeXBlOm1pbWVUeXBlXTsK
LSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOyAgICAKLSAgICAKLSAgICByZXR1cm4gTk87
Ci19Ci0KLXZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWRPcGVuUGFnZXMpCi17Ci0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNo
YXJlZEZhY3RvcnldIHJlZnJlc2hQbHVnaW5zOnJlbG9hZE9wZW5QYWdlc107Ci0gICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKLX0KLQotfQotCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVU
eXBlUmVnaXN0cnlRdC5jcHAKaW5kZXggNmIzZTI0My4uN2M4ZWIxOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcApAQCAtMjgsMTEgKzI4LDYgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2luY2x1ZGUg
InF3ZWJvYmplY3RwbHVnaW5fcC5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RydWN0IEV4dGVuc2lvbk1hcCB7CkBAIC03OSwxMiArNzQsNiBAQCBTdHJpbmcgTUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nICZleHQpCiAgICAg
ICAgICAgICByZXR1cm4gZS0+bWltZVR5cGU7CiAgICAgICAgICsrZTsKICAgICB9Ci0gICAgLy8g
IyMjIEZJWE1FOiBRdCA0LjQKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBRU3RyaW5n
IHR5cGUgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5taW1lVHlwZUZvckV4dGVuc2lvbihl
eHQpOwotICAgIGlmICghdHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0eXBlOwotI2Vu
ZGlmCiAKICAgICByZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1MjZlOGFiLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGx1Z0lu
SW5mb1N0b3JlUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAgICBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMg
YWxsIGZ1bmN0aW9uYWxpdHkgbmVlZGVkIGZvciBsb2FkaW5nIGltYWdlcywgc3R5bGUgc2hlZXRz
IGFuZCBodG1sCi0gICAgcGFnZXMgZnJvbSB0aGUgd2ViLiBJdCBoYXMgYSBtZW1vcnkgY2FjaGUg
Zm9yIHRoZXNlIG9iamVjdHMuCi0qLwotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgotI2lu
Y2x1ZGUgInFkZWJ1Zy5oIgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2luY2x1ZGUgInF3
ZWJvYmplY3RwbHVnaW5fcC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNy
ZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkIGkpCi17Ci0gICAgLy9xRGVi
dWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9y
UGx1Z2luQXRJbmRleCgiIDw8IGkgPDwgIikiOwotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgUVdlYkZhY3RvcnlMb2FkZXIgKmxvYWRlciA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxm
KCk7Ci0gICAgaWYgKGkgPiBsb2FkZXItPm1fcGx1Z2luSW5mby5jb3VudCgpKQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6SW5mbyAmcWluZm8gPSBsb2Fk
ZXItPm1fcGx1Z2luSW5mby5hdChpKTsKLSAgICBQbHVnaW5JbmZvICppbmZvID0gbmV3IFBsdWdp
bkluZm87Ci0gICAgaW5mby0+bmFtZSA9IHFpbmZvLm5hbWU7Ci0gICAgaW5mby0+ZGVzYyA9IHFp
bmZvLmRlc2NyaXB0aW9uOwotICAgIGZvcmVhY2ggKGNvbnN0IFFXZWJGYWN0b3J5TG9hZGVyOjpN
aW1lSW5mbyAmbSwgcWluZm8ubWltZXMpIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyAqbWltZSA9
IG5ldyBNaW1lQ2xhc3NJbmZvOwotICAgICAgICBtaW1lLT50eXBlID0gbS50eXBlOwotICAgICAg
ICBtaW1lLT5wbHVnaW4gPSBpbmZvOwotICAgICAgICBmb3JlYWNoIChRU3RyaW5nIGV4dCwgbS5l
eHRlbnNpb25zKQotICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMuYXBwZW5kKGV4dCk7Ci0gICAg
ICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZm87Ci0j
ZWxzZQotICAgIHJldHVybiAwOyAvLyAjIyMgRklYTUUKLSNlbmRpZgotfQotCi11bnNpZ25lZCBQ
bHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QKLXsKLSNpZiBRVF9WRVJTSU9OIDwg
MHgwNDA0MDAKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+PiBQbHVnSW5JbmZvU3RvcmU6
OmNvdW50ID0iIDw8IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmtleXMoKS5jb3VudCgpOwot
ICAgIHJldHVybiBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291bnQoKTsKLSNl
bHNlCi0gICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFBsdWdJbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8g
RklYTUU6IFRoaXMgbWV0aG9kIGlzIHN0dWJiZWQgb3V0IGFuZCBzaG91bGQgcmVhbGx5IHJldHVy
biB0aGUgbmFtZSBvZiBhIHBsdWctaW4gcGFja2FnZSBmb3IKLSAgICAvLyBhIGdpdmVuIE1JTUUg
dHlwZS4KLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi1ib29sIFBsdWdJbkluZm9TdG9y
ZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHN0cmluZykKLXsKLSNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBib29sIHN1cHBvcnRzID0gUVdlYkZhY3RvcnlM
b2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShzdHJpbmcpOwotI2Vsc2UKLSAgICBib29s
IHN1cHBvcnRzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+Pj4+Pj4+
PiBQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoIiA8PCBzdHJpbmcgPDwgIikgPSIg
PDwgc3VwcG9ydHM7Ci0gICAgcmV0dXJuIHN1cHBvcnRzOwotfQotCi12b2lkIHJlZnJlc2hQbHVn
aW5zKGJvb2wpIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKaW5kZXggNGJiMTg1Ny4uNThkYWZiZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtNTksNyArNTks
NiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgogI2lu
Y2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWlt
ZVR5cGUuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mZDRmMDMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bHVnaW5zL01pbWVUeXBlLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWltZVR5cGUuaCIKKworI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK01pbWVUeXBlOjpNaW1lVHlwZShQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25l
ZCBpbmRleCkKKyAgICA6IG1fcGx1Z2luRGF0YShwbHVnaW5EYXRhKQorICAgICwgbV9pbmRleChp
bmRleCkKK3sKK30KKworTWltZVR5cGU6On5NaW1lVHlwZSgpCit7Cit9CisKK1N0cmluZyBNaW1l
VHlwZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVtt
X2luZGV4XS0+dHlwZTsKK30KKworU3RyaW5nIE1pbWVUeXBlOjpzdWZmaXhlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+c3VmZml4ZXM7Cit9
CisKK1N0cmluZyBNaW1lVHlwZTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X3BsdWdpbkRhdGEtPm1pbWVzKClbbV9pbmRleF0tPmRlc2M7Cit9CisKK1BsdWdpbiogTWltZVR5
cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAoreworICAgIGNvbnN0IFBhZ2UqIHAgPSBtX3BsdWdp
bkRhdGEtPnBhZ2UoKTsKKyAgICBpZiAoIXAgfHwgIXAtPnNldHRpbmdzKCktPmFyZVBsdWdpbnNF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFz
c0luZm8qPiYgbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgY29uc3QgVmVjdG9y
PFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkKKyAgICAgICAg
aWYgKHBsdWdpbnNbaV0gPT0gbWltZXNbbV9pbmRleF0tPnBsdWdpbikKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgUGx1Z2luKG1fcGx1Z2luRGF0YS5nZXQoKSwgaSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9N
aW1lVHlwZS5oIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTQ5ZTRlZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1pbWVUeXBlX2gKKyNkZWZpbmUgTWltZVR5
cGVfaAorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAg
Y2xhc3MgUGx1Z2luOworICAgIGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNzIE1pbWVUeXBlIDog
cHVibGljIFJlZkNvdW50ZWQ8TWltZVR5cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE1pbWVU
eXBlKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgfk1p
bWVUeXBlKCk7CisKKyAgICAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IHN1ZmZpeGVzKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0Owor
ICAgICAgICBQbHVnaW4qIGVuYWJsZWRQbHVnaW4oKSBjb25zdDsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M3MzcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAg
IGludGVyZmFjZSBNaW1lVHlwZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZmaXhlczsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbiBlbmFibGVkUGx1Z2luOworICAgIH07CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBiL1dlYkNvcmUv
cGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42NTk5YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
QXJyYXkuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpCisgICAgOiBt
X2ZyYW1lKGZyYW1lKQoreworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgpCit7
Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGEtPm1pbWVzKCkuc2l6ZSgpOworfQorCitN
aW1lVHlwZSogTWltZVR5cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQbHVn
aW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRh
LT5taW1lcygpOworICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBuZXcgTWltZVR5cGUoZGF0YSwgaW5kZXgpOworfQorCitib29sIE1p
bWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRhICpkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAg
IGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFz
c0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHBy
b3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsK
K30KKworTWltZVR5cGUqIE1pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdpbkRh
dGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+
dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGRh
dGEsIGkpOworICAgIHJldHVybiAwOworfQorCitQbHVnaW5EYXRhKiBNaW1lVHlwZUFycmF5Ojpn
ZXRQbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworICAgIFBhZ2UqIHAgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gcC0+cGx1Z2luRGF0YSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5o
IGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hNDVhN2U3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L01pbWVUeXBlQXJyYXkuaApAQCAtMCwwICsxLDU5IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNaW1lVHlwZUFycmF5X2gKKyNkZWZpbmUg
TWltZVR5cGVBcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAg
ICBjbGFzcyBFeGVjU3RhdGU7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBGcmFtZTsKKyAgICBjbGFzcyBNaW1lVHlwZTsKKyAgICBjbGFzcyBQbHVnaW5EYXRhOworICAg
IGNsYXNzIEF0b21pY1N0cmluZzsKKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNNaW1lVHlw
ZUFycmF5LmNwcCBkb2Vzbid0IGluY2x1ZGUgSlNNaW1lVHlwZS5oIGZvciB0b0pTCisgICAgS0pT
OjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNz
IE1pbWVUeXBlQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZUFycmF5PiB7CisgICAg
cHVibGljOgorICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKiBmcmFtZSk7CisgICAgICAgIH5N
aW1lVHlwZUFycmF5KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJh
bWUgPSAwOyB9CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAg
ICAgTWltZVR5cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0
ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1p
bWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisK
KyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWlt
ZVR5cGVBcnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MmIw
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbApA
QCAtMCwwICsxLDI2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhh
c0luZGV4R2V0dGVyXSBNaW1lVHlwZUFycmF5IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW4uY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZjYTM0ZAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKworI2luY2x1ZGUg
IkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbjo6UGx1Z2luKFBsdWdpbkRhdGEq
IHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9wbHVnaW5EYXRhKHBsdWdpbkRh
dGEpCisgICAgLCBtX2luZGV4KGluZGV4KQoreworfQorCitQbHVnaW46On5QbHVnaW4oKQorewor
fQorCitTdHJpbmcgUGx1Z2luOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5E
YXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPm5hbWU7Cit9CisKK1N0cmluZyBQbHVnaW46OmZpbGVu
YW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRl
eF0tPmZpbGU7Cit9CisKK1N0cmluZyBQbHVnaW46OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPmRlc2M7Cit9CisKK3Vu
c2lnbmVkIGxvbmcgUGx1Z2luOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdp
bkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+bWltZXMuc2l6ZSgpOworfQorCitNaW1lVHlwZSog
UGx1Z2luOjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5J
bmZvKj4mIHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAoaW5kZXgg
Pj0gcGx1Z2luc1ttX2luZGV4XS0+bWltZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBwbHVnaW5zW21faW5kZXhdLT5taW1lc1tpbmRleF07
CisKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0
YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIGlmIChtaW1lc1tpXSA9PSBtaW1lKQorICAgICAgICAgICAgcmV0dXJuIG5l
dyBNaW1lVHlwZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOworICAgIHJldHVybiAwOworfQorCiti
b29sIFBsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVy
dHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9w
bHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5z
aXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHByb3BlcnR5TmFtZSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworTWltZVR5
cGUqIFBsdWdpbjo6bmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0
YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAg
ICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKG1fcGx1Z2luRGF0YS5nZXQoKSwgaSk7CisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW4uaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThkMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbl9oCisjZGVmaW5lIFBsdWdp
bl9oCisKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBK
U1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3Mg
U3RyaW5nOworCisgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBKU1BsdWdpbi5jcHAgZG9lc24ndCBp
bmNsdWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6
OkV4ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBQbHVnaW5EYXRhOworCisgICAg
Y2xhc3MgUGx1Z2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luPiB7CisgICAgcHVibGljOgor
ICAgICAgICBQbHVnaW4oUGx1Z2luRGF0YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpOwor
ICAgICAgICB+UGx1Z2luKCk7CisKKyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGZpbGVuYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisKKyAgICAg
ICAgTWltZVR5cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0
ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1p
bWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5p
ZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NWU0OAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93
IHsKKworICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdp
biB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxlbmFtZTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNzQwNjEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTcg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVn
aW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1
Z2luRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkFycmF5OjpQbHVnaW5B
cnJheShGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitQbHVnaW5B
cnJheTo6flBsdWdpbkFycmF5KCkKK3sKK30KKwordW5zaWduZWQgbG9uZyBQbHVnaW5BcnJheTo6
bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgp
OworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGEtPnBs
dWdpbnMoKS5zaXplKCk7Cit9CisKK1BsdWdpbiogUGx1Z2luQXJyYXk6Oml0ZW0odW5zaWduZWQg
aW5kZXgpCit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBp
ZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZv
Kj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5zKCk7CisgICAgaWYgKGluZGV4ID49IHBsdWdpbnMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV3IFBsdWdpbihkYXRhLCBp
bmRleCk7Cit9CisKK2Jvb2wgUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0
UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29u
c3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdpbnMoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYg
KHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbHVnaW4qIFBsdWdpbkFycmF5OjpuYW1lR2V0
dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEq
IGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lu
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gbmV3IFBsdWdpbihkYXRhLCBpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQ
bHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZCkKK3sKKyAgICBQYWdlOjpyZWZyZXNoUGx1
Z2lucyhyZWxvYWQpOworfQorCitQbHVnaW5EYXRhKiBQbHVnaW5BcnJheTo6Z2V0UGx1Z2luRGF0
YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQ
YWdlKiBwID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHAtPnBsdWdpbkRhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmggYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
ODExNTJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmgK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgUGx1Z2luQXJyYXlfaAorI2RlZmluZSBQbHVnaW5BcnJheV9oCisKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQ
bHVnaW47CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisK
KyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luQXJyYXkuY3BwIGRvZXNuJ3QgaW5jbHVk
ZSBKU1BsdWdpbi5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0
YXRlKiwgUGx1Z2luKik7CisKKyAgICBjbGFzcyBQbHVnaW5BcnJheSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFBsdWdpbkFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5BcnJheShGcmFt
ZSogZnJhbWUpOworICAgICAgICB+UGx1Z2luQXJyYXkoKTsKKworICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KKworICAgICAgICB1bnNpZ25lZCBsb25nIGxl
bmd0aCgpIGNvbnN0OworICAgICAgICBQbHVnaW4qIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAg
ICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIFBsdWdpbiogbmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7CisKKyAgICAgICAgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2FkKTsKKyAgICBw
cml2YXRlOgorICAgICAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAg
ICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFy
cmF5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNkNjUyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbApAQCAtMCwwICsx
LDI3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9k
dWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0
dGVyXSBQbHVnaW5BcnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKKyAgICAgICAgdm9pZCByZWZyZXNoKGluIGJvb2xlYW4gcmVsb2FkKTsKKyAg
ICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDJjMWVmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYW5p
ZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAg
U3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKGNvbnN0IFBhZ2UqIHBhZ2UpCisgICAgOiBtX3BhZ2Uo
cGFnZSkKK3sKKyAgICBpbml0UGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBQbHVnaW5JbmZvKiBw
bHVnaW4gPSBtX3BsdWdpbnNbaV07CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBw
bHVnaW4tPm1pbWVzLnNpemUoKTsgKytqKQorICAgICAgICAgICAgbV9taW1lcy5hcHBlbmQocGx1
Z2luLT5taW1lc1tqXSk7CisgICAgfQorfQorCitQbHVnaW5EYXRhOjp+UGx1Z2luRGF0YSgpCit7
CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGx1Z2lucyk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1f
bWltZXMpOworfQorCitib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
aW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fbWltZXNbaV0tPnR5cGUgPT0gbWltZVR5
cGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0
cmluZyBQbHVnaW5EYXRhOjpwbHVnaW5OYW1lRm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9taW1lcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1fbWltZXNbaV0tPnR5cGUgPT0gbWltZVR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gbV9taW1lc1tpXS0+cGx1Z2luLT5uYW1lOworICAgIHJldHVybiBTdHJp
bmcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaCBi
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTVmMzA2MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luRGF0YV9oCisjZGVmaW5lIFBsdWdpbkRhdGFf
aAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgc3RydWN0IFBsdWdpbkluZm87CisgICAgc3RydWN0IFBhZ2U7CisKKyAgICBzdHJ1Y3QgTWlt
ZUNsYXNzSW5mbyB7CisgICAgICAgIFN0cmluZyB0eXBlOworICAgICAgICBTdHJpbmcgZGVzYzsK
KyAgICAgICAgU3RyaW5nIHN1ZmZpeGVzOworICAgICAgICBQbHVnaW5JbmZvKiBwbHVnaW47Cisg
ICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW5JbmZvIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7Cisg
ICAgICAgIFN0cmluZyBmaWxlOworICAgICAgICBTdHJpbmcgZGVzYzsKKyAgICAgICAgVmVjdG9y
PE1pbWVDbGFzc0luZm8qPiBtaW1lczsKKyAgICB9OworCisgICAgLy8gRklYTUU6IG1lcmdlIHdp
dGggUGx1Z2luRGF0YWJhc2UgaW4gdGhlIGZ1dHVyZQorICAgIGNsYXNzIFBsdWdpbkRhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxQbHVnaW5EYXRhPiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVn
aW5EYXRhKGNvbnN0IFBhZ2UqIHBhZ2UpOworICAgICAgICB+UGx1Z2luRGF0YSgpOworCisgICAg
ICAgIHZvaWQgZGlzY29ubmVjdFBhZ2UoKSB7IG1fcGFnZSA9IDA7IH0KKyAgICAgICAgY29uc3Qg
UGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorCisgICAgICAgIGlubGluZSBj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zKCkgY29uc3QKKyAgICAgICAgeyByZXR1
cm4gbV9wbHVnaW5zOyB9CisgICAgICAgIGlubGluZSBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5m
byo+JiBtaW1lcygpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1fbWltZXM7IH0KKworICAgICAg
ICBib29sIHN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7Cisg
ICAgICAgIFN0cmluZyBwbHVnaW5OYW1lRm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkgY29uc3Q7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaCgpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdm9pZCBpbml0UGx1Z2lucygpOworCisgICAgICAgIFZlY3RvcjxQbHVnaW5J
bmZvKj4gbV9wbHVnaW5zOworICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+IG1fbWltZXM7
CisgICAgICAgIGNvbnN0IFBhZ2UqIG1fcGFnZTsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFjLm1tIGIvV2ViQ29yZS9w
bHVnaW5zL21hYy9QbHVnaW5EYXRhTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVlYjkzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1Bs
dWdpbkRhdGFNYWMubW0KQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiUGx1Z2luRGF0YS5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQoreworICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIE5TQXJyYXkqIHBsdWdpbnMgPSBbW1dl
YkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBwbHVnaW5zSW5mb107CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBbcGx1Z2lucyBjb3VudF07ICsraSkgeworICAgICAgICBQ
bHVnaW5JbmZvKiBwbHVnaW5JbmZvID0gbmV3IFBsdWdpbkluZm87CisKKyAgICAgICAgaWQgPFdl
YkNvcmVQbHVnaW5JbmZvPiBwbHVnaW4gPSBbcGx1Z2lucyBvYmplY3RBdEluZGV4OmldOworICAg
IAorICAgICAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3BsdWdpbiBuYW1lXTsKKyAgICAgICAgcGx1
Z2luSW5mby0+ZmlsZSA9IFtwbHVnaW4gZmlsZW5hbWVdOworICAgICAgICBwbHVnaW5JbmZvLT5k
ZXNjID0gW3BsdWdpbiBwbHVnaW5EZXNjcmlwdGlvbl07CisKKyAgICAgICAgTlNFbnVtZXJhdG9y
KiBNSU1FVHlwZUVudW1lcmF0b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07CisgICAg
ICAgIHdoaWxlIChOU1N0cmluZyogTUlNRSA9IFtNSU1FVHlwZUVudW1lcmF0b3IgbmV4dE9iamVj
dF0pIHsKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5m
bzsKKyAgICAgICAgICAgIHBsdWdpbkluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAg
ICAgIG1pbWUtPnR5cGUgPSBTdHJpbmcoTUlNRSkubG93ZXIoKTsKKyAgICAgICAgICAgIG1pbWUt
PnN1ZmZpeGVzID0gW1twbHVnaW4gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlOk1JTUVdIGNvbXBvbmVu
dHNKb2luZWRCeVN0cmluZzpAIiwiXTsKKyAgICAgICAgICAgIG1pbWUtPmRlc2MgPSBbcGx1Z2lu
IGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6TUlNRV07CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4g
PSBwbHVnaW5JbmZvOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChwbHVn
aW5JbmZvKTsKKyAgICB9CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKwor
ICAgIHJldHVybjsKK30KKwordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVk
RmFjdG9yeV0gcmVmcmVzaFBsdWdpbnNdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5j
cHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hYTJkZWRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlIDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJwbHVn
aW5mYWN0b3J5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucygpCit7CisgICAgUVdlYlBhZ2UqIHdlYlBhZ2UgPSBzdGF0aWNfY2FzdDxDaHJv
bWVDbGllbnRRdCo+KG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOworICAg
IFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gd2ViUGFnZS0+cGx1Z2luRmFjdG9yeSgpOwor
ICAgIGlmICghZmFjdG9yeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUUxpc3Q8UVdlYlBsdWdp
bkZhY3Rvcnk6OlBsdWdpbj4gcGx1Z2lucyA9IGZhY3RvcnktPnBsdWdpbnMoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHBsdWdpbnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFX
ZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4mIHBsdWdpbiA9IHBsdWdpbnMuYXQoaSk7CisKKyAgICAg
ICAgUGx1Z2luSW5mbyogaW5mbyA9IG5ldyBQbHVnaW5JbmZvOworICAgICAgICBpbmZvLT5uYW1l
ID0gcGx1Z2luLm5hbWU7CisgICAgICAgIGluZm8tPmRlc2MgPSBwbHVnaW4uZGVzY3JpcHRpb247
CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwbHVnaW4ubWltZVR5cGVzLmNvdW50KCk7
ICsraikgeworICAgICAgICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBlJiBt
aW1lVHlwZSA9IHBsdWdpbi5taW1lVHlwZXMuYXQoaik7CisKKyAgICAgICAgICAgIE1pbWVDbGFz
c0luZm8qIG1pbWVJbmZvID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgICAgICBtaW1lSW5m
by0+dHlwZSA9IG1pbWVUeXBlLm5hbWU7CisgICAgICAgICAgICBtaW1lSW5mby0+ZGVzYyA9IG1p
bWVUeXBlLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgbWltZUluZm8tPnN1ZmZpeGVzID0gbWlt
ZVR5cGUuc3VmZml4ZXMuam9pbigiOyAiKTsKKworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBw
ZW5kKG1pbWVJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5m
byk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIC8vIG5v
dGhpbmcgdG8gZG8KK30KKworfTsKZGlmZiAtLWdpdCBhL1dlYktpdC5wcmkgYi9XZWJLaXQucHJp
CmluZGV4IGQ4ZmM5ZmQuLjBiOWM2YmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcmkKKysrIGIvV2Vi
S2l0LnByaQpAQCAtOTYsNyArOTYsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRCQVNFX0RJ
Ui9XZWJDb3JlL3JlbmRlcmluZyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2hpc3RvcnkgXAog
ICAgICQkQkFTRV9ESVIvV2ViQ29yZS94bWwgXAotICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1s
CisgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2h0bWwgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9w
bHVnaW5zCiAKIAogbWFjeCB7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlZpZXdGYWN0b3J5Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFj
dG9yeS5tbQppbmRleCBlNzE3NGZlLi5kODdjMDRmIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KQEAgLTcxLDIyICs3MSw5IEBACiAgICAgcmV0dXJuIFtb
V2ViUGx1Z2luRGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHBsdWdpbnNdOwogfQogCi0tIChOU1N0
cmluZyAqKXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAg
IHJldHVybiBbW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlN
RVR5cGU6TUlNRVR5cGVdIG5hbWVdOwotfQotCi0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09M
KXJlbG9hZFBhZ2VzCistICh2b2lkKXJlZnJlc2hQbHVnaW5zCiB7CiAgICAgW1tXZWJQbHVnaW5E
YXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcmVmcmVzaF07Ci0gICAgaWYgKHJlbG9hZFBhZ2VzKSB7
Ci0gICAgICAgIFtXZWJWaWV3IF9tYWtlQWxsV2ViVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKF9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzKV07Ci0gICAgfQotfQotCi0tIChCT09MKXBsdWdp
blN1cHBvcnRzTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tX
ZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5
cGVdICE9IG5pbDsKIH0KIAogLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzoo
TlNWaWV3ICopdgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDcxYWMwZWIuLjA3Njk0OGIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTM1NCwxNiArMzU0LDYgQEAgV2ViVmlldyAqZ2V0V2Vi
VmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmxvYWRlcigp
LT5udW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMocmVjdXJzZSk7CiB9CiAKLS0gKHZvaWQpX3Jl
bG9hZEZvclBsdWdpbkNoYW5nZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxm
KTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxX
ZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOwotICAgICAgICBpZiAoKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdp
bnMoKSkpCi0gICAgICAgICAgICBba2l0KGZyYW1lKSByZWxvYWRdOwotICAgIH0KLX0KLQogLSAo
dm9pZClfYXR0YWNoU2NyaXB0RGVidWdnZXIKIHsKICAgICBpZiAoIV9wcml2YXRlLT5zY3JpcHRE
ZWJ1Z2dlciAmJiBjb3JlKHNlbGYpLT5zY3JpcHRQcm94eSgpLT5oYXZlR2xvYmFsT2JqZWN0KCkp
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA4OWI1YjFkLi40MjdiYTlm
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBi
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE1Myw4ICsxNTMsNiBA
QCBzdHJ1Y3QgV2ViQ29yZUhpc3RvcnlJdGVtOwogCiAtIChpbnQpX251bVBlbmRpbmdPckxvYWRp
bmdSZXF1ZXN0czooQk9PTClyZWN1cnNlOwogCi0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFu
Z2VzOwotCiAtICh2b2lkKV9hdHRhY2hTY3JpcHREZWJ1Z2dlcjsKIC0gKHZvaWQpX2RldGFjaFNj
cmlwdERlYnVnZ2VyOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IGFhODUwNTkuLjIzOWYzNDgg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xMjc5LDExICsxMjc5LDYgQEAgV2ViRnJhbWVMb2Fk
RGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJ
bXBsZW1lbnRhdGkKICAgICBbTlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKIH0KIAot
LSAodm9pZClfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlcwotewotICAgIFtbc2VsZiBtYWluRnJhbWVd
IF9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzXTsKLX0KLQogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAq
KV9jYWNoZWRSZXNwb25zZUZvclVSTDooTlNVUkwgKilVUkwKIHsKICAgICBOU011dGFibGVVUkxS
ZXF1ZXN0ICpyZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVS
TDpVUkxdOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5j
cHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAppbmRleCBkNjgxNDBk
Li5jZmJhNmRhIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNl
LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcApAQCAtMjYs
NyArMjYsNiBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3b3Jr
aW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1
ZGUgInF3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgog
I2luY2x1ZGUgInFjb29raWVqYXIuaCIKICNpbmNsdWRlIDxxZGVidWcuaD4KQEAgLTM2MCw3ICsz
NTksNyBAQCB2b2lkIFFXZWJOZXR3b3JrSm9iOjpzZXRFcnJvclN0cmluZyhjb25zdCBRU3RyaW5n
JiBlcnJvclN0cmluZykKICovCiBib29sIFFXZWJOZXR3b3JrSm9iOjpjYW5jZWxsZWQoKSBjb25z
dAogewotICAgIHJldHVybiAhZC0+cmVzb3VyY2VIYW5kbGUgJiYgIWQtPmNvbm5lY3RvcjsKKyAg
ICByZXR1cm4gIWQtPnJlc291cmNlSGFuZGxlOwogfQogCiAvKiEKQEAgLTQ0OSw3ICs0NDgsNiBA
QCBib29sIFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlICpoYW5kbGUsIFFX
ZWJOZXR3b3JrSW50ZXJmYWNlICppbnRlcgogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9q
b2IgPSBqb2I7CiAgICAgam9iLT5kLT5yZXNvdXJjZUhhbmRsZSA9IGhhbmRsZTsKICAgICBqb2It
PmQtPmludGVyZmFjZSA9IGludGVyZmFjZTsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAK
ICAgICBqb2ItPmQtPnJlcXVlc3QuaW5pdChoYW5kbGUtPnJlcXVlc3QoKSk7CiAKQEAgLTQ3OCw3
ICs0NzYsNiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxl
ICpoYW5kbGUpCiAgICAgICAgIHJldHVybjsKICAgICBERUJVRygpIDw8ICJRV2ViTmV0d29ya01h
bmFnZXI6OmNhbmNlbDoiIDw8ICBqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygp
OwogICAgIGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUgPSAwOwotICAgIGpvYi0+ZC0+Y29ubmVjdG9y
ID0gMDsKICAgICBqb2ItPmQtPmludGVyZmFjZS0+Y2FuY2VsSm9iKGpvYik7CiAgICAgaGFuZGxl
LT5nZXRJbnRlcm5hbCgpLT5tX2pvYiA9IDA7CiB9CkBAIC00OTUsNyArNDkyLDcgQEAgdm9pZCBR
V2ViTmV0d29ya01hbmFnZXI6OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IgKmpvYikKICAgICAgICAg
Y2xpZW50ID0gam9iLT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICgh
Y2xpZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29u
bmVjdG9yKSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTcw
LDggKzU2Nyw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJOZXR3b3Jr
Sm9iICpqb2IpCiAKICAgICBpZiAoY2xpZW50KQogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVS
ZXNwb25zZShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCByZXNwb25zZSk7Ci0gICAgaWYgKGpvYi0+
ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5zdGFydGVkKGpv
Yik7CiAKIH0KIApAQCAtNTg2LDcgKzU4MSw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpk
YXRhKFFXZWJOZXR3b3JrSm9iICpqb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiAgICAgICAg
IGNsaWVudCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAo
IWNsaWVudCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNv
bm5lY3RvcikgeworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU5
Niw4ICs1OTEsNiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pv
YiAqam9iLCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhKQogICAgIERFQlVHKCkgPDwgInJlY2VpdmVk
RGF0YSIgPDwgam9iLT5kLT5yZXF1ZXN0LnVybC5wYXRoKCk7CiAgICAgaWYgKGNsaWVudCkKICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCBkYXRh
LmNvbnN0RGF0YSgpLCBkYXRhLmxlbmd0aCgpLCBkYXRhLmxlbmd0aCgpIC8qRml4TWUqLyk7Ci0g
ICAgaWYgKGpvYi0+ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9y
LT5kYXRhKGpvYiwgZGF0YSk7CiAKIH0KIApAQCAtNjE2LDcgKzYwOSw3IEBAIHZvaWQgUVdlYk5l
dHdvcmtNYW5hZ2VyOjpmaW5pc2hlZChRV2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2Rl
KQogICAgICAgICBjbGllbnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAg
ICAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgh
am9iLT5kLT5jb25uZWN0b3IpIHsKKyAgICB9IGVsc2UgewogICAgICAgICBqb2ItPmRlcmVmKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02NDQsOSArNjM3LDYgQEAgdm9pZCBRV2ViTmV0
d29ya01hbmFnZXI6OmZpbmlzaGVkKFFXZWJOZXR3b3JrSm9iICpqb2IsIGludCBlcnJvckNvZGUp
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoam9iLT5kLT5jb25uZWN0b3IpCi0gICAgICAg
IGVtaXQgam9iLT5kLT5jb25uZWN0b3ItPmZpbmlzaGVkKGpvYiwgZXJyb3JDb2RlKTsKLQogICAg
IERFQlVHKCkgPDwgInJlY2VpdmVkRmluaXNoZWQgZG9uZSIgPDwgam9iLT5kLT5yZXF1ZXN0LnVy
bDsKIAogICAgIGpvYi0+ZGVyZWYoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm5l
dHdvcmtpbnRlcmZhY2VfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9w
LmgKaW5kZXggYzcxMmFlNC4uOWI2ZjRkMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZV9wLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVy
ZmFjZV9wLmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgICAgICAsIHJlc291cmNlSGFu
ZGxlKDApCiAgICAgICAgICwgcmVkaXJlY3RlZChmYWxzZSkKICAgICAgICAgLCBpbnRlcmZhY2Uo
MCkKLSAgICAgICAgLCBjb25uZWN0b3IoMCkKICAgICAgICAgLCBqb2JTdGF0dXMoUVdlYk5ldHdv
cmtKb2I6OkpvYkNyZWF0ZWQpCiAgICAgICAgIHt9CiAgICAgaW50IHJlZjsKQEAgLTY5LDcgKzY4
LDYgQEAgcHVibGljOgogICAgIGJvb2wgcmVkaXJlY3RlZDsKIAogICAgIFFXZWJOZXR3b3JrSW50
ZXJmYWNlICppbnRlcmZhY2U7Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVj
dG9yOwogICAgIFFXZWJOZXR3b3JrSm9iOjpKb2JTdGF0dXMgam9iU3RhdHVzOwogICAgIFFTdHJp
bmcgZXJyb3JTdHJpbmc7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0
cGx1Z2luLmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNGQ2MDQuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0Fw
aS9xd2Vib2JqZWN0cGx1Z2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0v
KgotICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLQotKi8KLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNpbmNs
dWRlIDxxd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8cWNvcmVhcHBsaWNh
dGlvbi5oPgotI2luY2x1ZGUgPHFmaWxlaW5mby5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0KLSNpZm5kZWYgUVRfTk9fTElCUkFSWQotUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhR
V2ViRmFjdG9yeUxvYWRlciwgbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoUVdl
Yk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2VfaWlkLCBRQ29yZUFwcGxpY2F0aW9uOjpsaWJy
YXJ5UGF0aHMoKSwgUUxhdGluMVN0cmluZygiL3dlYnBsdWdpbnMiKSkpCi0jZW5kaWYKLQotCi1R
V2ViRmFjdG9yeUxvYWRlcjo6UVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLCBjb25z
dCBRU3RyaW5nTGlzdCAmcGF0aHMsIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCwgUXQ6OkNhc2VTZW5z
aXRpdml0eSkKLSAgICA6IFFGYWN0b3J5TG9hZGVyKGlpZCwgcGF0aHMsIHN1ZmZpeCkKLXsKLSAg
ICBRU3RyaW5nTGlzdCBwbHVnaW5zID0ga2V5cygpOwotICAgIGZvcmVhY2goUVN0cmluZyBrLCBw
bHVnaW5zKSB7Ci0gICAgICAgIFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmplY3RfY2Fz
dDxRV2ViT2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKGspKTsKLSAgICAgICAgaWYgKCFwbHVnaW4p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSW5mbyBpbmZvOwotICAgICAgICBpbmZv
Lm5hbWUgPSBrOwotICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gcGx1Z2luLT5kZXNjcmlwdGlv
bkZvcktleShrKTsKLSAgICAgICAgUVN0cmluZ0xpc3QgbWltZXR5cGVzID0gcGx1Z2luLT5taW1l
dHlwZXNGb3JLZXkoayk7Ci0gICAgICAgIGZvcmVhY2goUVN0cmluZyBtLCBtaW1ldHlwZXMpIHsK
LSAgICAgICAgICAgIE1pbWVJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBtOwot
ICAgICAgICAgICAgbWltZS5leHRlbnNpb25zID0gcGx1Z2luLT5leHRlbnNpb25zRm9yTWltZXR5
cGUobSk7Ci0gICAgICAgICAgICBpbmZvLm1pbWVzIDw8IG1pbWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgbV9wbHVnaW5JbmZvLmFwcGVuZChpbmZvKTsKLSAgICB9Ci19Ci0KLVFXZWJGYWN0b3J5TG9h
ZGVyICpRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpCi17Ci0gICAgcmV0dXJuIGxvYWRlcigpOwot
fQotCi0KLVFTdHJpbmcgUVdlYkZhY3RvcnlMb2FkZXI6OmRlc2NyaXB0aW9uRm9yTmFtZShjb25z
dCBRU3RyaW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBt
X3BsdWdpbkluZm8pIHsKLSAgICAgICAgaWYgKGluZm8ubmFtZSA9PSBrZXkpCi0gICAgICAgICAg
ICByZXR1cm4gaW5mby5kZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsK
LX0KLQotUVN0cmluZ0xpc3QgUVdlYkZhY3RvcnlMb2FkZXI6Om1pbWV0eXBlc0Zvck5hbWUoY29u
c3QgUVN0cmluZyAma2V5KSBjb25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywg
bV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUgPT0ga2V5KSB7Ci0gICAgICAg
ICAgICBRU3RyaW5nTGlzdCBtaW1ldHlwZXM7Ci0gICAgICAgICAgICBmb3JlYWNoIChjb25zdCBN
aW1lSW5mbyAmbSwgaW5mby5taW1lcykKLSAgICAgICAgICAgICAgICBtaW1ldHlwZXMuYXBwZW5k
KG0udHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbWltZXR5cGVzOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9h
ZGVyOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24pCi17Ci0g
ICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9y
ZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmICht
LmV4dGVuc2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bS50eXBlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLQot
UVN0cmluZ0xpc3QgUVdlYkZhY3RvcnlMb2FkZXI6OmV4dGVuc2lvbnMoKSBjb25zdAotewotICAg
IFFTdHJpbmdMaXN0IGV4dGVuc2lvbnM7Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBt
X3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8u
bWltZXMpCi0gICAgICAgICAgICBleHRlbnNpb25zIDw8IG0uZXh0ZW5zaW9uczsKLSAgICB9Ci0g
ICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci0KLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRl
cjo6bmFtZUZvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAotewotICAg
IGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVh
Y2ggKGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgaWYgKG0udHlw
ZSA9PSBtaW1lVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5uYW1lOwotICAgIH0K
LSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi1RT2JqZWN0ICpRV2ViRmFjdG9yeUxvYWRlcjo6
Y3JlYXRlKFFXZWJGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZyAmX21pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKQotewot
ICAgIFFTdHJpbmcgbWltZVR5cGUgPSBfbWltZVR5cGU7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1w
dHkoKSkgewotICAgICAgICBRRmlsZUluZm8gZmkodXJsLnBhdGgoKSk7Ci0gICAgICAgIG1pbWVU
eXBlID0gbWltZVR5cGVGb3JFeHRlbnNpb24oZmkuc3VmZml4KCkpOwotICAgIH0KLSAgICBRU3Ry
aW5nIG5hbWUgPSBuYW1lRm9yTWltZXR5cGUobWltZVR5cGUpOwotICAgIFFXZWJPYmplY3RQbHVn
aW4gKnBsdWdpbiA9IHFvYmplY3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKG5h
bWUpKTsKLSAgICBpZiAoIXBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVdlYk9iamVj
dFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0
b3IoZnJhbWUpOwotICAgIHJldHVybiBwbHVnaW4tPmNyZWF0ZShjb25uZWN0b3IsIHVybCwgbWlt
ZVR5cGUsIGFyZ3VtZW50TmFtZXMsIGFyZ3VtZW50VmFsdWVzKTsKLX0KLQotCi0KLS8qISBcY2xh
c3MgUVdlYk9iamVjdFBsdWdpbgotCi0gIFRoaXMgY2xhc3MgaXMgYSBwbHVnaW4gZm9yIHRoZSBI
VE1MIG9iamVjdCB0YWcuIEl0IGNhbiBiZSB1c2VkIHRvIGVtYmVkIGFyYml0cmFyeSBjb250ZW50
IGluIGEgd2ViIHBhZ2UuCi0qLwotCi0KLVFXZWJPYmplY3RQbHVnaW46OlFXZWJPYmplY3RQbHVn
aW4oUU9iamVjdCAqcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi17Ci19Ci0KLVFXZWJP
YmplY3RQbHVnaW46On5RV2ViT2JqZWN0UGx1Z2luKCkKLXsKLX0KLQotLyohCi0gIFxmbiBRU3Ry
aW5nTGlzdCBRV2ViT2JqZWN0UGx1Z2luOjprZXlzKCkgY29uc3QKLQotICBUaGUga2V5cyBzaG91
bGQgYmUgdW5pcXVlIG5hbWVzLgotKi8KLQotLyohCi0gIEEgZGVzY3JpcHRpb24gZm9yIFxhIGtl
eS4KLSovCi1RU3RyaW5nIFFXZWJPYmplY3RQbHVnaW46OmRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0
IFFTdHJpbmcgJmtleSkgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0vKiEK
LSAgcmV0dXJucyB0aGUgbWltZXR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgXGEga2V5Lgot
Ki8KLVFTdHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBR
U3RyaW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLQot
LyohCi0gIFxmbiBRU3RyaW5nTGlzdCBRV2ViT2JqZWN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWlt
ZXR5cGUoKSBjb25zdAotCi0gIFNob3VsZCByZXR1cm4gYSBsaXN0IG9mIGV4dGVuc2lvbnMgdGhh
dCBhcmUgcmVjb2duaXNlZCB0byBtYXRjaCB0aGUgXGEgbWltZVR5cGUuCi0qLwotUVN0cmluZ0xp
c3QgUVdlYk9iamVjdFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcg
Jm1pbWVUeXBlKSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0vKiEK
LSAgXGZuIFFPYmplY3QgKlFXZWJPYmplY3RQbHVnaW46OmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2lu
Q29ubmVjdG9yICpjb25uZWN0b3IsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgUVN0cmluZyAmbWlt
ZVR5cGUsIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLCBjb25zdCBRU3RyaW5nTGlz
dCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0Ci0KLSAgQ3JlYXRlcyBhIFFPYmplY3Qgd2l0aCBcYSBj
b25uZWN0b3IgdG8gaGFuZGxlIFxhIG1pbWVUeXBlLiBcYSBhcmd1bWVudE5hbWVzIGFuZCBcYSBh
cmd1bWVudFZhbHVlcyBhcmUgYSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHBhc3NlZCBkaXJlY3Rs
eQotICBmcm9tIHRoZSAmbHQ7cGFyYW0mZ3Q7IGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgSFRN
TCBvYmplY3QgdGFnLgotKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3
ZWJvYmplY3RwbHVnaW4uaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzdjYWY3Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9x
dC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAot
LyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0KLSovCi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fSAotI2RlZmluZSBR
V0VCT0JKRUNUUExVR0lOX0gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRl
IDxRdENvcmUvcXBsdWdpbi5oPgotI2luY2x1ZGUgPFF0Q29yZS9xZmFjdG9yeWludGVyZmFjZS5o
PgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLWNsYXNzIFFXZWJPYmplY3RQbHVnaW5D
b25uZWN0b3I7Ci1jbGFzcyBRVXJsOwotCi1zdHJ1Y3QgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVj
dFBsdWdpbkZhY3RvcnlJbnRlcmZhY2UgOiBwdWJsaWMgUUZhY3RvcnlJbnRlcmZhY2UKLXsKLSAg
ICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25u
ZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZh
bHVlcykgY29uc3QgPSAwOwotfTsKLQotI2RlZmluZSBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUlu
dGVyZmFjZV9paWQgImNvbS50cm9sbHRlY2guUXQuUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRl
cmZhY2UiCi1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJm
YWNlLCBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZV9paWQpCi0KLWNsYXNzIFFXRUJL
SVRfRVhQT1JUIFFXZWJPYmplY3RQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJP
YmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlCi17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX0lOVEVS
RkFDRVMoUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2U6UUZhY3RvcnlJbnRlcmZhY2Up
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUVdlYk9iamVjdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQg
PSAwKTsKLSAgICB2aXJ0dWFsIH5RV2ViT2JqZWN0UGx1Z2luKCk7Ci0KLSAgICB2aXJ0dWFsIFFT
dHJpbmdMaXN0IGtleXMoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3Jp
cHRpb25Gb3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJp
bmdMaXN0IG1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZp
cnR1YWwgUVN0cmluZ0xpc3QgZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1p
bWVUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1
Z2luQ29ubmVjdG9yICpjb25uZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUVVybCAmdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcg
Jm1pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0
ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOwotfTsKLQotI2VuZGlmCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBiL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUyMDI2MWYuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2lu
X3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSNpZm5kZWYgUVdFQk9CSkVDVFBM
VUdJTl9QX0gKLSNkZWZpbmUgUVdFQk9CSkVDVFBMVUdJTl9QX0gKLQotI2luY2x1ZGUgPFF0Q29y
ZS9xZ2xvYmFsLmg+Ci0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbi5oIgotCi0jaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNDAwCi0KLS8qCi0gIEZJWE1FOiBUaGlzIGlzIGNvcGllZCBmcm9tIHFmYWN0
b3J5bG9hZGVyX3AuaC4KLSAgUmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWRlIHFmYWN0b3J5bG9hZGVy
IHB1YmxpYyBpbiBRdAotKi8KLWNsYXNzIFFGYWN0b3J5TG9hZGVyUHJpdmF0ZTsKLQotY2xhc3Mg
UV9DT1JFX0VYUE9SVCBRRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9P
QkpFQ1RfRkFLRQotICAgIFFfREVDTEFSRV9QUklWQVRFKFFGYWN0b3J5TG9hZGVyKQotCi1wdWJs
aWM6Ci0gICAgUUZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAg
ICAgICAgICAgY29uc3QgUVN0cmluZyAmc3VmZml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAg
ICAgICAgIFF0OjpDYXNlU2Vuc2l0aXZpdHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0gICAgflFG
YWN0b3J5TG9hZGVyKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7Ci0gICAgUU9i
amVjdCAqaW5zdGFuY2UoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLQotfTsKLQotY2xhc3Mg
UVdlYkZyYW1lOwotCi1jbGFzcyBRV2ViRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRRmFjdG9yeUxv
YWRlcgotewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZhY3RvcnlMb2FkZXIoY29u
c3QgY2hhciAqaWlkLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZw
YXRocyA9IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyAmc3VmZml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vu
c2l0aXZpdHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0KLSAgICBzdGF0aWMgUVdlYkZhY3RvcnlM
b2FkZXIgKnNlbGYoKTsKLQotICAgIFFTdHJpbmdMaXN0IG5hbWVzKCkgY29uc3QgeyByZXR1cm4g
a2V5cygpOyB9Ci0gICAgUVN0cmluZ0xpc3QgZXh0ZW5zaW9ucygpIGNvbnN0OwotICAgIFFTdHJp
bmcgZGVzY3JpcHRpb25Gb3JOYW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgUVN0
cmluZ0xpc3QgbWltZXR5cGVzRm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAg
IFFTdHJpbmcgbmFtZUZvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsK
LSAgICBpbmxpbmUgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBl
KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAhbmFtZUZvck1pbWV0eXBlKG1pbWVUeXBlKS5pc0Vt
cHR5KCk7Ci0gICAgfQotCi0gICAgUVN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBR
U3RyaW5nICZleHRlbnNpb24pOwotCi0gICAgUU9iamVjdCAqY3JlYXRlKFFXZWJGcmFtZSAqZnJh
bWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpOwotCi0gICAgc3RydWN0IE1pbWVJbmZvIHsKLSAg
ICAgICAgUVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zOwotICAg
IH07Ci0gICAgc3RydWN0IEluZm8gewotICAgICAgICBRU3RyaW5nIG5hbWU7Ci0gICAgICAgIFFT
dHJpbmcgZGVzY3JpcHRpb247Ci0gICAgICAgIFFMaXN0PE1pbWVJbmZvPiBtaW1lczsKLSAgICB9
OwotICAgIFFMaXN0PEluZm8+IG1fcGx1Z2luSW5mbzsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAg
Yi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmNTNjMTY0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkv
cXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0vKgotICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotICAKLSAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAK
LSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAgCi0qLwotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVn
aW5jb25uZWN0b3IuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vi
bmV0d29ya2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIK
LSNpbmNsdWRlICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotCi1zdHJ1Y3Qg
UVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUKLXsKLSAgICBRV2ViRnJhbWUgKmZyYW1l
OwotfTsKLQotUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6UVdlYk9iamVjdFBsdWdpbkNvbm5l
Y3RvcihRV2ViRnJhbWUgKmZyYW1lKQotewotICAgIGQgPSBuZXcgUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvclByaXZhdGU7Ci0gICAgZC0+ZnJhbWUgPSBmcmFtZTsKLX0KLQotUVdlYkZyYW1lICpR
V2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQt
PmZyYW1lOwotfQotCi1RV2lkZ2V0ICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpwbHVnaW5Q
YXJlbnRXaWRnZXQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5mcmFtZS0+cGFnZSgpLT52aWV3
KCk7Ci19Ci0KLVFXZWJOZXR3b3JrSm9iICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpyZXF1
ZXN0VXJsKGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgVGFyZ2V0IHRhcmdldCkK
LXsKLSAgICBpZiAodGFyZ2V0ICE9IFBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBR
V2ViTmV0d29ya0pvYiAqam9iID0gbmV3IFFXZWJOZXR3b3JrSm9iOwotICAgIFFXZWJOZXR3b3Jr
Sm9iUHJpdmF0ZSAqcCA9IGpvYi0+ZDsKLSAgICBwLT5pbnRlcmZhY2UgPSBkLT5mcmFtZS0+cGFn
ZSgpLT5uZXR3b3JrSW50ZXJmYWNlKCk7Ci0gICAgcC0+Y29ubmVjdG9yID0gdGhpczsKLQotICAg
IHAtPnJlcXVlc3QgPSAqcmVxdWVzdC5kOwotCi0gICAgZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29y
a0ludGVyZmFjZSgpLT5hZGRKb2Ioam9iKTsKLSAgICByZXR1cm4gam9iOwotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIGIv
V2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYyMjUxYTMuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luY29ubmVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0v
KgotICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLQotKi8KLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTkNPTk5FQ1RPUl9ICi0j
ZGVmaW5lIFFXRUJPQkpFQ1RQTFVHSU5DT05ORUNUT1JfSAotCi0jaW5jbHVkZSAicXdlYmtpdGds
b2JhbC5oIgotI2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwg
MHgwNDA0MDAKLQotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCi0KLWNsYXNzIFFX
ZWJGcmFtZTsKLWNsYXNzIFFXZWJQYWdlOwotY2xhc3MgUVdpZGdldDsKLWNsYXNzIFFVcmw7Ci1j
bGFzcyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yUHJpdmF0ZTsKLWNsYXNzIFFXZWJGYWN0b3J5
TG9hZGVyOwotY2xhc3MgUVdlYk5ldHdvcmtNYW5hZ2VyOwotCi1jbGFzcyBRV0VCS0lUX0VYUE9S
VCBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yIDogcHVibGljIFFPYmplY3QKLXsKLSAgICBRX09C
SkVDVAotcHVibGljOgotICAgIFFXZWJGcmFtZSAqZnJhbWUoKSBjb25zdDsKLSAgICBRV2lkZ2V0
ICpwbHVnaW5QYXJlbnRXaWRnZXQoKSBjb25zdDsKLQotICAgIGVudW0gVGFyZ2V0IHsKLSAgICAg
ICAgUGx1Z2luLAotICAgICAgICBOZXcsCi0gICAgICAgIFNlbGYsCi0gICAgICAgIFBhcmVudCwK
LSAgICAgICAgVG9wCi0gICAgfTsKLSAgICBRV2ViTmV0d29ya0pvYiAqcmVxdWVzdFVybChjb25z
dCBRV2ViTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQgPSBQbHVnaW4pOwot
Ci1zaWduYWxzOgotICAgIHZvaWQgc3RhcnRlZChRV2ViTmV0d29ya0pvYiopOwotICAgIHZvaWQg
ZGF0YShRV2ViTmV0d29ya0pvYiosIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpOwotICAgIHZvaWQg
ZmluaXNoZWQoUVdlYk5ldHdvcmtKb2IqLCBpbnQgZXJyb3JDb2RlKTsKLQotcHJpdmF0ZToKLSAg
ICBmcmllbmQgY2xhc3MgUVdlYkZhY3RvcnlMb2FkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJO
ZXR3b3JrTWFuYWdlcjsKLSAgICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKFFXZWJGcmFtZSAq
ZnJhbWUpOwotCi0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUgKmQ7Ci19Owot
Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNw
cCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGE4MDI3Y2UuLmE3OGUwOTUgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCkBAIC0xMjgsNiArMTI4LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFn
ZVByaXZhdGUoUVdlYlBhZ2UgKnFxKQogICAgIG5ldHdvcmtJbnRlcmZhY2UgPSAwOwogI2Vsc2UK
ICAgICBuZXR3b3JrTWFuYWdlciA9IDA7CisgICAgcGx1Z2luRmFjdG9yeSA9IDA7CiAjZW5kaWYK
ICAgICBpbnNpZGVPcGVuQ2FsbCA9IGZhbHNlOwogCkBAIC0xMzk1LDYgKzEzOTYsMTYgQEAgUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyICpRV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25z
dAogICAgIHJldHVybiBkLT5uZXR3b3JrTWFuYWdlcjsKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0
UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9yeSkKK3sKKyAgICBkLT5wbHVn
aW5GYWN0b3J5ID0gZmFjdG9yeTsKK30KKworUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdlOjpw
bHVnaW5GYWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cGx1Z2luRmFjdG9yeTsKK30K
KwogI2VuZGlmCiAKIC8qIQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IGNjZmMwYTYuLjY1MTU2ODIgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgUVdlYkhpc3Rvcnk7CiBjbGFzcyBRV2ViUGFnZVBy
aXZhdGU7CiBjbGFzcyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7
CitjbGFzcyBRV2ViUGx1Z2luRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIENocm9tZUNsaWVudFF0OwpAQCAtMTcwLDYgKzE3MSw5IEBAIHB1YmxpYzoKICNlbHNlCiAg
ICAgdm9pZCBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1h
bmFnZXIpOwogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAq
ZmFjdG9yeSk7CisgICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3RvcnkoKSBjb25zdDsK
ICNlbmRpZgogCiAgICAgcXVpbnQ2NCB0b3RhbEJ5dGVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmlu
ZGV4IDI2NDU3YTEuLmNiMmNhYTUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Vf
cC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0xNTgsNiArMTU4LDEwIEBA
IHB1YmxpYzoKICAgICBRV2ViU2V0dGluZ3MgKnNldHRpbmdzOwogCiAgICAgUUFjdGlvbiAqYWN0
aW9uc1tRV2ViUGFnZTo6V2ViQWN0aW9uQ291bnRdOworCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0
MDQwMAorICAgIFFXZWJQbHVnaW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5OworI2VuZGlmCiB9Owog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3Bw
IGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzNhZDA4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9B
cGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJxd2VicGx1Z2luZmFjdG9yeS5oIgorCitRV2ViUGx1Z2luRmFjdG9y
eTo6UVdlYlBsdWdpbkZhY3RvcnkoUU9iamVjdCAqcGFyZW50KQorICAgIDogUU9iamVjdChwYXJl
bnQpCit7Cit9CisKK1FXZWJQbHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkoKQorewor
fQorCit2b2lkIFFXZWJQbHVnaW5GYWN0b3J5OjpyZWxvYWQoKQoreworfQorCmRpZmYgLS1naXQg
YS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJw
bHVnaW5mYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliOTUy
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaApA
QCAtMCwwICsxLDYzIEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQor
CisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKyNpZm5kZWYgUVdFQlBMVUdJTkZB
Q1RPUllfSAorI2RlZmluZSBRV0VCUExVR0lORkFDVE9SWV9ICisKKyNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgorI2luY2x1ZGUgPFF0Q29y
ZS9xc3RyaW5nbGlzdC5oPgorCitjbGFzcyBRVXJsOworY2xhc3MgUVdlYlBsdWdpbkZhY3RvcnlQ
cml2YXRlOworY2xhc3MgUVN0cmluZzsKKworY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYlBsdWdp
bkZhY3RvcnkgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAg
c3RydWN0IE1pbWVUeXBlIHsKKyAgICAgICAgUVN0cmluZyBuYW1lOworICAgICAgICBRU3RyaW5n
IGRlc2NyaXB0aW9uOworICAgICAgICBRU3RyaW5nTGlzdCBzdWZmaXhlczsKKyAgICB9OworCisg
ICAgc3RydWN0IFBsdWdpbiB7CisgICAgICAgIFFTdHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmlu
ZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgUUxpc3Q8TWltZVR5cGU+IG1pbWVUeXBlczsKKyAgICB9
OworCisgICAgZXhwbGljaXQgUVdlYlBsdWdpbkZhY3RvcnkoUU9iamVjdCAqcGFyZW50ID0gMCk7
CisgICAgdmlydHVhbCB+UVdlYlBsdWdpbkZhY3RvcnkoKTsKKworICAgIHZpcnR1YWwgUUxpc3Q8
UGx1Z2luPiBwbHVnaW5zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxvYWQoKTsK
KworICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMp
IGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBRV2ViUGx1Z2luRmFjdG9yeVByaXZhdGUgKmQ7
Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcAppbmRleCAwM2UwOGEzLi42MzA0MGI4IDEwMDY0NAotLS0gYS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIkhpc3RvcnlJdGVtLmgiCkBAIC00NywxNSArNDgsMTYgQEAKICNpbmNsdWRlICJxd2Vi
ZnJhbWUuaCIKICNpbmNsdWRlICJxd2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5
aW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKIAogI2luY2x1ZGUg
PHFmaWxlaW5mby5oPgogCiAjaW5jbHVkZSA8UURlYnVnPgogI2lmIFFUX1ZFUlNJT04gPj0gMHgw
NDA0MDAKICNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXBs
eT4KICNlbHNlCiAjaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1ZGUg
InF3ZWJvYmplY3RwbHVnaW5fcC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC04
ODUsMTEgKzg4Nyw4IEBAIE9iamVjdENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9i
amVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QKICAgICBpZiAoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0
dXJuIE9iamVjdENvbnRlbnRJbWFnZTsKIAotICAgIC8vICMjIyBGSVhNRSBRdCA0LjQKLSNpZiBR
VF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBpZiAoUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+
c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpCi0gICAgICAgIHJldHVybiBPYmplY3RDb250ZW50
TmV0c2NhcGVQbHVnaW47Ci0jZW5kaWYKKyAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJh
bWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlKSkKKyAg
ICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBsdWdpbjsKIAogICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAg
ICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwpAQCAtOTUwLDExICs5NDksMTEgQEAgV2lkZ2V0
KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnMKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vICMjIyBGSVhNRTog
cXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgaWYgKCFvYmplY3QpCi0gICAg
ICAgIG9iamVjdCA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmNyZWF0ZShtX3dlYkZyYW1l
LCBxdXJsLCBtaW1lVHlwZSwgcGFyYW1zLCB2YWx1ZXMpOwotI2VuZGlmCisgICAgaWYgKCFvYmpl
Y3QpIHsKKyAgICAgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5w
YWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKKyAgICAgICAgaWYgKGZhY3RvcnkpCisgICAgICAgICAg
ICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWltZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVz
KTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0KSB7CiAgICAgICAgIFFXaWRnZXQgKndpZGdldCA9
IHFvYmplY3RfY2FzdDxRV2lkZ2V0ICo+KG9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggOGM1M2M3OS4uMzlkOTRiYiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNw
cApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNs
dWRlICJqc29iamVjdHMuaCIKKyNpbmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKICNpbmNsdWRlIDxR
RGlyPgogI2luY2x1ZGUgPFFGaWxlPgpAQCAtODYsNiArODcsOCBAQCBXZWJQYWdlOjpXZWJQYWdl
KFFXaWRnZXQgKnBhcmVudCwgRHVtcFJlbmRlclRyZWUgKmRydCkKICAgICBzZXR0aW5ncygpLT5z
ZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkLCB0
cnVlKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChnZW9tZXRyeUNoYW5nZVJlcXVlc3QoY29u
c3QgUVJlY3QgJikpLAogICAgICAgICAgICAgdGhpcywgU0xPVChzZXRWaWV3R2VvbWV0cnkoY29u
c3QgUVJlY3QgJiApKSk7CisKKyAgICBzZXRQbHVnaW5GYWN0b3J5KG5ldyBUZXN0UGx1Z2luKHRo
aXMpKTsKIH0KIAogUVdlYlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdygpCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcCBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCmluZGV4IGRkNGMwZTkuLjczOGJlN2YgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAidGVzdHBsdWdpbi5oIgogCiAj
aW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KICNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KQEAgLTQ5
LDEwICs0OCw2IEBACiAjaW5jbHVkZSA8ZXhlY2luZm8uaD4KICNlbmRpZgogCi0jaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNDAwCi1RX0lNUE9SVF9QTFVHSU4odGVzdHBsdWdpbikKLSNlbmRpZgotCiB2
b2lkIG1lc3NhZ2VIYW5kbGVyKFF0TXNnVHlwZSB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQog
ewogICAgIGlmICh0eXBlID09IFF0Q3JpdGljYWxNc2cpIHsKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKaW5kZXggMjc1NThjOS4uYWU4MjIwMyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKKysrIGIv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKQEAgLTI3LDEwICsy
Nyw4IEBACiAgKi8KICNpbmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKLSNpZiBRVF9WRVJTSU9OIDwg
MHgwNDA0MDAKLQogVGVzdFBsdWdpbjo6VGVzdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQpCi0gICAg
OiBRV2ViT2JqZWN0UGx1Z2luKHBhcmVudCkKKyAgICA6IFFXZWJQbHVnaW5GYWN0b3J5KHBhcmVu
dCkKIHsKIH0KIApAQCAtMzgsMzQgKzM2LDMyIEBAIFRlc3RQbHVnaW46On5UZXN0UGx1Z2luKCkK
IHsKIH0KIAotUVN0cmluZ0xpc3QgVGVzdFBsdWdpbjo6a2V5cygpIGNvbnN0CitRTGlzdDxRV2Vi
UGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBUZXN0UGx1Z2luOjpwbHVnaW5zKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGluMVN0cmluZygidGVzdHBsdWdpbiIpKTsKLX0KKyAg
ICBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luIHBsdWdpbjsKIAotUVN0cmluZyBUZXN0UGx1Z2lu
OjpkZXNjcmlwdGlvbkZvcktleShjb25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFFMYXRpbjFTdHJpbmcoInRlc3RkZXNjcmlwdGlvbiIpOwotfQorICAgIHBsdWdpbi5uYW1lID0g
InRlc3RwbHVnaW4iOworICAgIHBsdWdpbi5kZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24i
OworICAgIE1pbWVUeXBlIG1pbWVUeXBlOworICAgIG1pbWVUeXBlLm5hbWUgPSAidGVzdHR5cGUi
OworICAgIG1pbWVUeXBlLnN1ZmZpeGVzLmFwcGVuZCgidGVzdHN1ZmZpeGVzIik7CisgICAgcGx1
Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOwogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2lu
OjptaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmluZyAmKSBjb25zdAotewotICAgIHJldHVybiBR
U3RyaW5nTGlzdChRTGF0aW4xU3RyaW5nKCJ0ZXN0dHlwZSIpKTsKLX0KKyAgICBwbHVnaW4ubmFt
ZSA9ICJ0ZXN0cGx1Z2luMiI7CisgICAgcGx1Z2luLmRlc2NyaXB0aW9uID0gInRlc3RkZXNjcmlw
dGlvbjIiOworICAgIG1pbWVUeXBlLm5hbWUgPSAidGVzdHR5cGUyIjsKKyAgICBtaW1lVHlwZS5z
dWZmaXhlcy5hcHBlbmQoInRlc3RzdWZmaXhlczIiKTsKKyAgICBtaW1lVHlwZS5zdWZmaXhlcy5h
cHBlbmQoInRlc3RzdWZmaXhlczMiKTsKKyAgICBwbHVnaW4ubWltZVR5cGVzLmFwcGVuZChtaW1l
VHlwZSk7CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVnaW46OmV4dGVuc2lvbnNGb3JNaW1ldHlwZShj
b25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRpbjFT
dHJpbmcoInRlc3RzdWZmaXhlcyIpKTsKKyAgICByZXR1cm4gUUxpc3Q8UVdlYlBsdWdpbkZhY3Rv
cnk6OlBsdWdpbj4oKSA8PCBwbHVnaW47CiB9CiAKLVFPYmplY3QgKlRlc3RQbHVnaW46OmNyZWF0
ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUVVybCAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmcgJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICYpIGNvbnN0CitR
T2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29u
c3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotUV9FWFBPUlRfUExVR0lOMih0ZXN0cGx1Z2luLCBU
ZXN0UGx1Z2luKQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC90ZXN0cGx1Z2luLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1
Z2luLmgKaW5kZXggZTMwNTA2OS4uZWNmZDk3NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L3Rlc3RwbHVnaW4uaApAQCAtMjUsMjggKzI1LDIxIEBACiAgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0jZGVmaW5lIFFUX1NUQVRJQ1BMVUdJTgotI2luY2x1ZGUgPHF3ZWJvYmpl
Y3RwbHVnaW4uaD4KKyNpbmNsdWRlIDxxd2VicGx1Z2luZmFjdG9yeS5oPgogCiAKLWNsYXNzIFRl
c3RQbHVnaW4gOiBwdWJsaWMgUVdlYk9iamVjdFBsdWdpbgorY2xhc3MgVGVzdFBsdWdpbiA6IHB1
YmxpYyBRV2ViUGx1Z2luRmFjdG9yeQogewogcHVibGljOgogICAgIGV4cGxpY2l0IFRlc3RQbHVn
aW4oUU9iamVjdCAqcGFyZW50ID0gMCk7CiAgICAgdmlydHVhbCB+VGVzdFBsdWdpbigpOwogCi0g
ICAgdmlydHVhbCBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7CisgICAgdmlydHVhbCBRTGlzdDxQ
bHVnaW4+IHBsdWdpbnMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUVN0cmluZyBkZXNjcmlwdGlv
bkZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xp
c3QgbWltZXR5cGVzRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmlydHVh
bCBRU3RyaW5nTGlzdCBleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmbWltZVR5
cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKFFXZWJPYmplY3RQbHVnaW5D
b25uZWN0b3IgKmNvbm5lY3RvciwKKyAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJs
ICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmbWltZVR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3Vt
ZW50TmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3Qg
JmFyZ3VtZW50VmFsdWVzKSBjb25zdDsKKwogfTsKIAotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19188</attachid>
            <date>2008-02-18 07:42:49 -0800</date>
            <delta_ts>2008-02-25 05:58:38 -0800</delta_ts>
            <desc>updated patch that compiles against trunk</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>130201</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFz
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdp
bnMtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2
aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlw
ZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMg
YW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU3YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MzUgQEAKKzxodG1sPgorPHNjcmlwdD4KKwordmFyIHBsdWdpbnMgPSBuZXcgQXJyYXk7Citmb3Ig
KHZhciBpID0gMDsgaSA8IG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7CisgICAgcGx1
Z2lucy5wdXNoKG5hdmlnYXRvci5wbHVnaW5zW2ldKTsKK30KKwordmFyIG1pbWVUeXBlcyA9IG5l
dyBBcnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGg7
ICsraSkgeworICAgIG1pbWVUeXBlcy5wdXNoKG5hdmlnYXRvci5taW1lVHlwZXNbaV0pOworfQor
CituYXZpZ2F0b3IucGx1Z2lucy5yZWZyZXNoKCk7CisKK3ZhciBvdXRwdXQgPSAiPHByZT4iOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyArK2kpIHsKKyAgICBvdXRwdXQg
Kz0gcGx1Z2luc1tpXS5uYW1lOworICAgIG91dHB1dCArPSAiXG4iOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IG1pbWVUeXBlcy5sZW5ndGg7ICsraSkgeworICAgIG91dHB1dCArPSBtaW1lVHlw
ZXNbaV0udHlwZTsKKyAgICBvdXRwdXQgKz0gIlxuIjsKK30KKworb3V0cHV0ICs9ICI8L3ByZT4i
OworCisvL2RvY3VtZW50LndyaXRlbG4ob3V0cHV0KTsKK2RvY3VtZW50LndyaXRlbG4oIlRlc3Rz
IGFjY2VzcyB0byBwcmV2aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVn
aW5zIGFuZCBtaW1ldHlwZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhp
cyB0ZXh0IGFwcGVhcnMgYW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2Nl
ZWRlZC4iKTsKKworPC9zY3JpcHQ+Cis8Ym9keT4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKaW5kZXggY2JhOWU3YS4uMWE2MDIwNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzMsNiArMzMs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3JlKS9odG1s
IFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAg
JChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3Jl
KS9zdmcKQEAgLTQxOSwxNSArNDIwLDIwIEBAIGFsbCA6IFwKICAgICBKU01lZGlhRXJyb3IuaCBc
CiAgICAgSlNNZWRpYUxpc3QuaCBcCiAgICAgSlNNZXNzYWdlRXZlbnQuaCBcCisgICAgSlNNaW1l
VHlwZS5oIFwKKyAgICBKU01pbWVUeXBlQXJyYXkuaCBcCiAgICAgSlNNb3VzZUV2ZW50LmggXAog
ICAgIEpTTXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9kZU1hcC5oIFwKKyAgICBKU05h
dmlnYXRvci5oIFwKICAgICBKU05vZGUuaCBcCiAgICAgSlNOb2RlRmlsdGVyLmggXAogICAgIEpT
Tm9kZUl0ZXJhdG9yLmggXAogICAgIEpTTm9kZUxpc3QuaCBcCiAgICAgSlNOb3RhdGlvbi5oIFwK
ICAgICBKU092ZXJmbG93RXZlbnQuaCBcCisgICAgSlNQbHVnaW4uaCBcCisgICAgSlNQbHVnaW5B
cnJheS5oIFwKICAgICBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKICAgICBKU1Byb2dyZXNz
RXZlbnQuaCBcCiAgICAgSlNSYW5nZS5oIFwKQEAgLTU5OCw3ICs2MDQsNiBAQCBhbGwgOiBcCiAg
ICAgWFBhdGhHcmFtbWFyLmNwcCBcCiAgICAga2pzX2Nzcy5sdXQuaCBcCiAgICAga2pzX2V2ZW50
cy5sdXQuaCBcCi0gICAga2pzX25hdmlnYXRvci5sdXQuaCBcCiAgICAga2pzX3dpbmRvdy5sdXQu
aCBcCiAgICAgdG9rZW5pemVyLmNwcCBcCiAgICAgV2ViQ29yZS5leHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYmFiMDJhNS4u
ODA5YzdiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC0yNTAsNyArMjUwLDYgQEAgTFVUX0ZJTEVTICs9IFwKICAgICBiaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcCBc
CiAgICAgYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19u
YXZpZ2F0b3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAogCiBMVVRfVEFC
TEVfRklMRVMgKz0gXApAQCAtMzc5LDYgKzM3OCwxMSBAQCBJRExfQklORElOR1MgKz0gXAogICAg
IHBhZ2UvRE9NV2luZG93LmlkbCBcCiAgICAgcGFnZS9IaXN0b3J5LmlkbCBcCiAgICAgcGFnZS9T
Y3JlZW4uaWRsIFwKKyAgICBwYWdlL05hdmlnYXRvci5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2lu
LmlkbCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZS5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJy
YXkuaWRsIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsIFwKICAgICB4bWwvRE9NUGFy
c2VyLmlkbCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAgICAgeG1s
L1hNTFNlcmlhbGl6ZXIuaWRsCkBAIC00MjgsMTIgKzQzMiwxNCBAQCBTT1VSQ0VTICs9IFwKICAg
ICBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNw
cCBcCisgICAgYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9q
cy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNNaW1lVHlwZUFy
cmF5Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9ranNfY3NzLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfaHRt
bC5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9ranNfcHJveHkuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcCBcCiAg
ICAgYmluZGluZ3MvanMvUGF1c2VkVGltZW91dHMuY3BwIFwKQEAgLTcxMSw2ICs3MTcsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgXAogICAgIHBh
Z2UvRE9NU2VsZWN0aW9uLmNwcCBcCiAgICAgcGFnZS9ET01XaW5kb3cuY3BwIFwKKyAgICBwYWdl
L05hdmlnYXRvci5jcHAgXAogICAgIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdl
L0V2ZW50SGFuZGxlci5jcHAgXAogICAgIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCkBAIC03
MjQsNiArNzMxLDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAg
cGFnZS9TZXR0aW5ncy5jcHAgXAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKKyAgICBw
bHVnaW5zL1BsdWdpbkRhdGEuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbkFycmF5LmNwcCBcCisg
ICAgcGx1Z2lucy9QbHVnaW4uY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlLmNwcCBcCisgICAg
cGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKICAg
ICBwbGF0Zm9ybS9BcnJheUltcGwuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmlu
Zy5jcHAgXApAQCAtODg4LDYgKzkwMCw3IEBAIHF0LXBvcnQgewogICAgICQkUFdELy4uL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vidmll
dy5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmgg
XAorICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCiAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaCBc
CiAgICAgJCRQV0QvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCiAK
QEAgLTkzNSw3ICs5NDgsNiBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybU1v
dXNlRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhclF0LmNwcCBcCi0gICAgcGxhdGZvcm0v
cXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9Qb3B1cE1lbnVRdC5j
cHAgXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQb3B1cC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwIFwKQEAgLTk1MSw2ICs5NjMsNyBAQCBxdC1wb3J0IHsKICAgICBwbGF0
Zm9ybS9xdC9UaHJlYWRpbmdRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1doZWVsRXZlbnRRdC5j
cHAgXAogICAgIHBsYXRmb3JtL3F0L1dpZGdldFF0LmNwcCBcCisgICAgcGx1Z2lucy9xdC9QbHVn
aW5EYXRhUXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVD
bGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
UXQuY3BwIFwKQEAgLTk2NCw2ICs5NzcsNyBAQCBxdC1wb3J0IHsKICAgICAuLi9XZWJLaXQvcXQv
QXBpL3F3ZWJoaXN0b3J5LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3Mu
Y3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmNwcCBcCisg
ICAgLi4vV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAgXAogICAgIHBsYXRmb3Jt
L1RocmVhZGluZ05vbmUuY3BwCiAKICAgICB1bml4OiBTT1VSQ0VTICs9IHBsYXRmb3JtL3F0L1N5
c3RlbVRpbWVRdC5jcHAKQEAgLTk3NCwxNSArOTg4LDEwIEBAIHF0LXBvcnQgewogICAgICAgICBI
RUFERVJTICs9IFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdv
cmtpbnRlcmZhY2UuaCBcCiAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJu
ZXR3b3JraW50ZXJmYWNlX3AuaCBcCi0gICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBp
L3F3ZWJvYmplY3RwbHVnaW4uaCBcCi0gICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBp
L3F3ZWJvYmplY3RwbHVnaW5fcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9B
cGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIFwKICAgICAgICAgICAgICQkUFdELy4uL1dl
YktpdC9xdC9BcGkvcWNvb2tpZWphci5oCiAKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAg
ICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcCBcCi0gICAgICAg
ICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwIFwKLSAgICAgICAgICAg
IC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAgXAogICAgICAg
ICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmNwcAogCiAgICAgIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43ZGEzODgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01pbWVUeXBl
QXJyYXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBl
QXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOwor
Citib29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIE1p
bWVUeXBlQXJyYXkqIG1pbWVUeXBlQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gbWltZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3Bl
cnR5TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNNaW1lVHlw
ZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xvdC5zbG90
QmFzZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0
ZXIocHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2lu
QXJyYXlDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWU0
ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlD
dXN0b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU1BsdWdpbkFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9taWNT
dHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jvb2wgSlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRl
bXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFBsdWdpbkFycmF5KiBwbHVnaW5BcnJheSwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW5BcnJheS0+Y2FuR2V0
SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTUGx1Z2luQXJyYXk6
Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIEpTUGx1Z2luQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbkFycmF5
Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBs
KCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BsdWdpbkN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcw
NzlkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0
b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xs
dGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKU1BsdWdpbi5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSAiUGx1Z2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEtKUzsKKworYm9vbCBKU1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSosIFBsdWdpbiogcGx1Z2luLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIHBsdWdpbi0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7Cit9CisK
K0pTVmFsdWUqIEpTUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1BsdWdpbiogdGhpc09iaiA9IHN0YXRpY19jYXN0
PEpTUGx1Z2luKj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlz
T2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
NTdhODYzLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NTAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKGMpIDIw
MDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJranNfbmF2aWdhdG9yLmgiCi0KLSNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJET01XaW5kb3cu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJMYW5ndWFnZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIK
LSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgImtqc193aW5kb3cuaCIKLSNpbmNsdWRlIDxranMvb2JqZWN0X29iamVjdC5oPgotCi0j
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNCi0jaWYgUExBVEZPUk0oTUFDKSAmJiBQ
TEFURk9STShQUEMpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMi
Ci0jZWxpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFg4NikKLSNkZWZpbmUgV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk0gIk1hY0ludGVsIgotI2VsaWYgUExBVEZPUk0oV0lOX09TKQotI2Rl
ZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiV2luMzIiCi0jZWxzZQotI2RlZmluZSBX
RUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiIgotI2VuZGlmCi0jZW5kaWYgLy8gaWZuZGVmIFdF
QkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJP
RFVDVAotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKLSNlbmRpZiAv
LyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAotCi0jaWZuZGVmIFdFQkNPUkVfTkFW
SUdBVE9SX1BST0RVQ1RfU1VCCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VC
ICIyMDAzMDEwNyIKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9T
VUIKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKLSNkZWZpbmUgV0VCQ09SRV9O
QVZJR0FUT1JfVkVORE9SICJBcHBsZSBDb21wdXRlciwgSW5jLiIKLSNlbmRpZiAvLyBpZm5kZWYg
V0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVO
RE9SX1NVQgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCi0jZW5kaWYg
Ly8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKLQotdXNpbmcgbmFtZXNwYWNl
IEtKUzsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSAgICBjbGFzcyBQbHVnaW5CYXNlIDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgcHVibGljOgot
ICAgICAgICBQbHVnaW5CYXNlKEV4ZWNTdGF0ZSopOwotICAgICAgICB2aXJ0dWFsIH5QbHVnaW5C
YXNlKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2Fk
KTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgc3RhdGljIHZvaWQgY2FjaGVQbHVnaW5EYXRh
SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxQbHVnaW5JbmZvKj4qIHBsdWdp
bnM7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8TWltZUNsYXNzSW5mbyo+KiBtaW1lczsKLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBpbnQgbV9wbHVnSW5DYWNoZVJlZkNvdW50OwotICAg
IH07Ci0KLQotICAgIGNsYXNzIFBsdWdpbnMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVi
bGljOgotICAgICAgICBQbHVnaW5zKEV4ZWNTdGF0ZSogZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMp
IHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTGVu
Z3RoIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB9
OwotCi0gICAgSlNWYWx1ZSogcGx1Z2luc0Z1bmN0aW9uUmVmcmVzaChFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IExpc3QmKTsKLQotICAgIGNsYXNzIE1pbWVUeXBlcyA6IHB1YmxpYyBQbHVn
aW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVUeXBlcyhFeGVjU3RhdGUqIGV4ZWMp
IDogUGx1Z2luQmFzZShleGVjKSB7IH07Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
Ci0gICAgICAgIGVudW0geyBMZW5ndGggfTsKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotICAgIH07Ci0KLSAgICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUGx1Z2lu
QmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBQbHVnaW4oRXhlY1N0YXRlKiBleGVjLCBQbHVn
aW5JbmZvKiBpbmZvKSA6IFBsdWdpbkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KLSAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IE5hbWUsIEZpbGVuYW1l
LCBEZXNjcmlwdGlvbiwgTGVuZ3RoIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpT
VmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLQotICAgICAgICBQbHVnaW5JbmZvKiBtX2luZm87Ci0gICAgfTsKLQotICAg
IGNsYXNzIE1pbWVUeXBlIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgTWltZVR5cGUoRXhlY1N0YXRlKiBleGVjLCBNaW1lQ2xhc3NJbmZvKiBpbmZvKSA6IFBsdWdp
bkJhc2UoZXhlYyksIG1faW5mbyhpbmZvKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGdldE93
blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90
Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRv
a2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKLSAgICAgICAgZW51bSB7IFR5cGUsIFN1ZmZpeGVzLCBEZXNjcmlwdGlvbiwgRW5hYmxl
ZFBsdWdpbiB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIE1pbWVDbGFzc0luZm8qIG1faW5mbzsK
LSAgICB9OwotCi19Ci0KLSNpbmNsdWRlICJranNfbmF2aWdhdG9yLmx1dC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNvbnN0IENsYXNzSW5mbyBQbHVnaW5zOjppbmZvID0geyAiUGx1Z2lu
QXJyYXkiLCAwLCAmUGx1Z2luc1RhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gTWltZVR5cGVzOjpp
bmZvID0geyAiTWltZVR5cGVBcnJheSIsIDAsICZNaW1lVHlwZXNUYWJsZSB9OwotY29uc3QgQ2xh
c3NJbmZvIFBsdWdpbjo6aW5mbyA9IHsgIlBsdWdpbiIsIDAsICZQbHVnaW5UYWJsZSB9OwotY29u
c3QgQ2xhc3NJbmZvIE1pbWVUeXBlOjppbmZvID0geyAiTWltZVR5cGUiLCAwLCAmTWltZVR5cGVU
YWJsZSB9OwotCi1WZWN0b3I8UGx1Z2luSW5mbyo+KiBQbHVnaW5CYXNlOjpwbHVnaW5zID0gMDsK
LVZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4qIFBsdWdpbkJhc2U6Om1pbWVzID0gMDsKLWludCBQbHVn
aW5CYXNlOjptX3BsdWdJbkNhY2hlUmVmQ291bnQgPSAwOwotCi1jb25zdCBDbGFzc0luZm8gTmF2
aWdhdG9yOjppbmZvID0geyAiTmF2aWdhdG9yIiwgMCwgJk5hdmlnYXRvclRhYmxlIH07Ci0vKgot
QGJlZ2luIE5hdmlnYXRvclRhYmxlIDEzCi0gIGFwcENvZGVOYW1lICAgTmF2aWdhdG9yOjpBcHBD
b2RlTmFtZSAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgYXBwTmFtZSAg
ICAgICBOYXZpZ2F0b3I6OkFwcE5hbWUgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQotICBhcHBWZXJzaW9uICAgIE5hdmlnYXRvcjo6QXBwVmVyc2lvbiAgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGxhbmd1YWdlICAgICAgTmF2aWdhdG9yOjpM
YW5ndWFnZSAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgdXNlckFn
ZW50ICAgICBOYXZpZ2F0b3I6OlVzZXJBZ2VudCAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICBwbGF0Zm9ybSAgICAgIE5hdmlnYXRvcjo6UGxhdGZvcm0gICAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHBsdWdpbnMgICAgICAgTmF2aWdhdG9y
OjpfUGx1Z2lucyAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbWlt
ZVR5cGVzICAgICBOYXZpZ2F0b3I6Ol9NaW1lVHlwZXMgICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICBwcm9kdWN0ICAgICAgIE5hdmlnYXRvcjo6UHJvZHVjdCAgICAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHByb2R1Y3RTdWIgICAgTmF2aWdh
dG9yOjpQcm9kdWN0U3ViICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAg
dmVuZG9yICAgICAgICBOYXZpZ2F0b3I6OlZlbmRvciAgICAgICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZXxSZWFkT25seQotICB2ZW5kb3JTdWIgICAgIE5hdmlnYXRvcjo6VmVuZG9yU3ViICAg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGNvb2tpZUVuYWJsZWQgTmF2
aWdhdG9yOjpDb29raWVFbmFibGVkICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkK
LSAgamF2YUVuYWJsZWQgICBuYXZpZ2F0b3JQcm90b0Z1bmNKYXZhRW5hYmxlZCAgRG9udERlbGV0
ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotCi1OYXZpZ2F0b3I6Ok5hdmlnYXRvcihKU09iamVjdCog
cHJvdG90eXBlLCBGcmFtZSogZnJhbWUpCi0gICAgOiBET01PYmplY3QocHJvdG90eXBlKQotICAg
ICwgbV9mcmFtZShmcmFtZSkKLXsKLX0KLQotYm9vbCBOYXZpZ2F0b3I6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PE5hdmln
YXRvciwgSlNPYmplY3Q+KGV4ZWMsICZOYXZpZ2F0b3JUYWJsZSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKLX0KLQotSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNh
c2UgQXBwQ29kZU5hbWU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCJNb3ppbGxhIik7Ci0gIGNhc2Ug
QXBwTmFtZToKLSAgICByZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7Ci0gIGNhc2UgQXBwVmVy
c2lvbjogewotICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBz
dHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3QgU3RyaW5nIHVzZXJB
Z2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKLSAgICByZXR1cm4ganNTdHJp
bmcodXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSkpOwotICB9Ci0g
IGNhc2UgUHJvZHVjdDoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJP
RFVDVCk7Ci0gIGNhc2UgUHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9O
QVZJR0FUT1JfUFJPRFVDVF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAgICByZXR1cm4ganNTdHJp
bmcoV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5kb3JTdWI6Ci0gICAgcmV0
dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIpOwotICBjYXNlIExhbmd1
YWdlOgotICAgIHJldHVybiBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2UoKSk7Ci0gIGNhc2UgVXNl
ckFnZW50OgotICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50
KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwo
KSkpOwotICBjYXNlIFBsYXRmb3JtOgotICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05BVklH
QVRPUl9QTEFURk9STSk7Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0dXJuIG5ldyBQbHVnaW5z
KGV4ZWMpOwotICBjYXNlIF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZXMoZXhl
Yyk7Ci0gIGNhc2UgQ29va2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNCb29sZWFuKGNvb2tpZXNF
bmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLXZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3Nhcnko
KQotewotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFZlY3RvcjxQ
bHVnaW5JbmZvKj47Ci0gICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj47
Ci0gICAgICAgIAotICAgICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgUGx1Z2lu
SW5mb1N0b3JlIGM7Ci0gICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50ID0gYy5wbHVnaW5Db3Vu
dCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1Z2luQ291bnQ7IG4rKykg
ewotICAgICAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVhdGVQbHVnaW5JbmZvRm9y
UGx1Z2luQXRJbmRleChuKTsKLSAgICAgICAgICAgIGlmICghcGx1Z2luKSAKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGx1Z2lucy0+YXBwZW5k
KHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxN
aW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7Ci0gICAg
ICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdp
bi0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAgICAgICAgICAgICAgbWlt
ZXMtPmFwcGVuZCgqaXRyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGx1Z2luQmFzZTo6UGx1
Z2luQmFzZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKLXsKLSAgICBjYWNoZVBsdWdpbkRhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudCsrOwotfQotCi1QbHVnaW5C
YXNlOjp+UGx1Z2luQmFzZSgpCi17Ci0gICAgbV9wbHVnSW5DYWNoZVJlZkNvdW50LS07Ci0gICAg
aWYgKCFtX3BsdWdJbkNhY2hlUmVmQ291bnQpIHsKLSAgICAgICAgaWYgKHBsdWdpbnMpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAgICAgICAgICBkZWxldGUg
cGx1Z2luczsKLSAgICAgICAgICAgIHBsdWdpbnMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtaW1lcykgewotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAg
ICAgICBkZWxldGUgbWltZXM7Ci0gICAgICAgICAgICBtaW1lcyA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKLXsKLSAgICBp
ZiAocGx1Z2lucykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAg
ICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgcGx1Z2lucyA9IDA7Ci0gICAgfQotICAgIGlmICht
aW1lcykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsKLSAgICAgICAgZGVsZXRl
IG1pbWVzOwotICAgICAgICBtaW1lcyA9IDA7Ci0gICAgfQotICAgIAotICAgIHJlZnJlc2hQbHVn
aW5zKHJlbG9hZCk7Ci0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKTsKLX0KLQotCi0v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBQbHVnaW5zVGFibGUgMgotICBsZW5ndGggICAgICAg
IFBsdWdpbnM6Okxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgcmVmcmVzaCAgICAgICBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoICAgICAgICAgICAgICAg
ICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi0KLUpTVmFsdWUqIFBsdWdpbnM6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFT
U0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIocGx1Z2lucy0+c2l6ZSgp
KTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMs
IHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW5zOjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAg
ICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZl
Y3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVuZCgpOwotICAgIGZv
ciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsg
aXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyogcGwgPSAqaXRyOwotICAg
ICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAgICAgICAgICAgcmV0
dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLX0KLQotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJlBsdWdpbnNU
YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIGlmIChlbnRyeS0+
YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5
LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0U3Rh
dGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBsdWdpbnM+KTsKLSAgICAg
IHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpbnNbI10KLSAgICAg
ICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VSW50
MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5zaXplKCkpIHsKLSAgICAg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwbHVnaW5bbmFtZV0K
LSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
LSAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5kID0gcGx1Z2lucy0+ZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1
Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgICAgIGlmICgoKml0
ciktPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gUGx1Z2luQmFz
ZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlc1RhYmxlIDEKLSAgbGVuZ3RoICAgICAg
ICBNaW1lVHlwZXM6Okxlbmd0aCAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwot
Ci1KU1ZhbHVlKiBNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4g
anNOdW1iZXIobWltZXMtPnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIE1pbWVUeXBlczo6aW5kZXhH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAg
IHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQot
Ci1KU1ZhbHVlKiBNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5h
bWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3Ig
ZW5kID0gbWltZXMtPmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRl
cmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAg
IE1pbWVDbGFzc0luZm8qIG0gPSAoKml0cik7Ci0gICAgICAgIGlmIChtLT50eXBlID09IGF0b21p
Y1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbSk7
Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIE1pbWVUeXBlczo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJsZSwgcHJvcGVydHlOYW1lKTsK
LSAgICBpZiAoZW50cnkpIHsKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnks
IHN0YXRpY1ZhbHVlR2V0dGVyPE1pbWVUeXBlcz4pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gbWltZVR5cGVzWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgICAg
IGlmIChvayAmJiBpIDwgbWltZXMtPnNpemUoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0
b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbWVUeXBlc1tuYW1lXQotICAgICAgICBBdG9taWNT
dHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgICAgICBWZWN0b3I8
TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7
IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0
b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0KLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luVGFibGUgNAotICBuYW1lICAgICAgICAgIFBsdWdpbjo6
TmFtZSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZmlsZW5hbWUgICAgICBQbHVn
aW46OkZpbGVuYW1lICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRlc2NyaXB0aW9uICAg
UGx1Z2luOjpEZXNjcmlwdGlvbiAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBsZW5ndGggICAg
ICAgIFBsdWdpbjo6TGVuZ3RoICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLUBlbmQKLSov
Ci0KLUpTVmFsdWUqIFBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBOYW1lOgot
ICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5uYW1lKTsKLSAgICBjYXNlIEZpbGVuYW1l
OgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5maWxlKTsKLSAgICBjYXNlIERlc2Ny
aXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5kZXNjKTsKLSAgICBjYXNl
IExlbmd0aDogCi0gICAgICAgIHJldHVybiBqc051bWJlcihtX2luZm8tPm1pbWVzLnNpemUoKSk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKDApOwotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbjo6aW5kZXhHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiogdGhp
c09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJu
IG5ldyBNaW1lVHlwZShleGVjLCB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmF0KHNsb3QuaW5kZXgo
KSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW46Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0b21p
Y1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+
OjppdGVyYXRvciBlbmQgPSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmVuZCgpOwotICAgIGZvciAo
VmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gdGhpc09iai0+bV9pbmZvLT5t
aW1lcy5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZv
KiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0pOwotICAgIH0KLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotCi1ib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZQbHVnaW5UYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsK
LSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVHZXR0
ZXI8UGx1Z2luPik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIHBsdWdpblsjXQotICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9
IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8IG1faW5m
by0+bWltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMs
IGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gcGx1Z2luWyJuYW1lIl0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1By
b3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8q
Pjo6aXRlcmF0b3IgZW5kID0gbV9pbmZvLT5taW1lcy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0
b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtX2luZm8tPm1pbWVzLmJlZ2luKCk7
IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0
b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLS8qCi1AYmVnaW4gTWltZVR5cGVUYWJsZSA0Ci0gIHR5cGUgICAgICAgICAgTWlt
ZVR5cGU6OlR5cGUgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzdWZmaXhlcyAgICAg
IE1pbWVUeXBlOjpTdWZmaXhlcyAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZGVzY3JpcHRp
b24gICBNaW1lVHlwZTo6RGVzY3JpcHRpb24gICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGVuYWJs
ZWRQbHVnaW4gTWltZVR5cGU6OkVuYWJsZWRQbHVnaW4gRG9udERlbGV0ZXxSZWFkT25seQotQGVu
ZAotKi8KLQotSlNWYWx1ZSogTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
VHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+dHlwZSk7Ci0gICAgY2FzZSBT
dWZmaXhlczoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+c3VmZml4ZXMpOwotICAg
IGNhc2UgRGVzY3JpcHRpb246Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPmRlc2Mp
OwotICAgIGNhc2UgRW5hYmxlZFBsdWdpbjogewotICAgICAgICBGcmFtZSogZnJhbWUgPSBXaW5k
b3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgICAgIEFTU0VS
VChmcmFtZSk7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygp
OwotICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVjLCBtX2luZm8tPnBsdWdpbik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgTWltZVR5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZVNsb3Q8TWltZVR5cGUsIFBsdWdpbkJhc2U+KGV4ZWMsICZNaW1lVHlw
ZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiBwbHVnaW5z
RnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBh
cmdzKQotewotICAgIFBsdWdpbkJhc2U6OnJlZnJlc2goYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMp
KTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogbmF2aWdhdG9yUHJv
dG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29u
c3QgTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTmF2aWdhdG9yOjppbmZv
KSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBOYXZp
Z2F0b3IqIG5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+KHRoaXNPYmopOwotICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6
IDA7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhRW5h
YmxlZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9y
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNmY3ZWEuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIGtqc19u
YXZpZ2F0b3JfaAotI2RlZmluZSBranNfbmF2aWdhdG9yX2gKLQotI2luY2x1ZGUgImtqc19iaW5k
aW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZyYW1lOwotCi0gICAg
Y2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAg
ICBOYXZpZ2F0b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBlLCBGcmFtZSopOwotCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBL
SlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBLSlM6OkpTVmFs
dWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5m
bzsKLQotICAgICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5hbWUsIEFwcFZlcnNpb24sIExh
bmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAgICAgICAgICAgX1BsdWdpbnMsIF9N
aW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgVmVuZG9yU3ViLCBDb29raWVF
bmFibGVkIH07Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgfTsKLQot
ICAgIEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoS0pTOjpFeGVj
U3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7Ci0KLX0gLy8gbmFtZXNw
YWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5kZXggNTNlNGRkNS4u
MjQ5OGYxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC01MCw3ICs1MCw2IEBA
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTU5LDcgKzU4LDYgQEAKICNpbmNsdWRlICJodG1sZWRp
dGluZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0j
aW5jbHVkZSAia2pzX25hdmlnYXRvci5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTE2Myw4ICsxNjEsNiBAQCBjb25zdCBDbGFzc0lu
Zm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1RhYmxlIH07CiAgIGNyeXB0
byAgICAgICAgICAgICAgICBXaW5kb3c6OkNyeXB0byAgICAgICAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQogICBldmVudCAgICAgICAgICAgICAgICAgV2luZG93OjpFdmVudF8gICAgICAgICAg
ICAgIERvbnREZWxldGUKICAgbG9jYXRpb24gICAgICAgICAgICAgIFdpbmRvdzo6TG9jYXRpb25f
ICAgICAgICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAgICAgICBXaW5kb3c6Ok5h
dmlnYXRvcl8gICAgICAgICAgRG9udERlbGV0ZQotICBjbGllbnRJbmZvcm1hdGlvbiAgICAgV2lu
ZG93OjpDbGllbnRJbmZvcm1hdGlvbiAgIERvbnREZWxldGUKICMgLS0gRXZlbnQgTGlzdGVuZXJz
IC0tCiAgIG9uYWJvcnQgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYWJvcnQgICAgICAgICAgICAg
RG9udERlbGV0ZQogICBvbmJsdXIgICAgICAgICAgICAgICAgV2luZG93OjpPbmJsdXIgICAgICAg
ICAgICAgIERvbnREZWxldGUKQEAgLTQ3OSwxOCArNDc1LDYgQEAgSlNWYWx1ZSAqV2luZG93Ojpn
ZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZC0+bV9ldnQpOwogICAgIGNhc2UgTG9jYXRpb25fOgogICAgICAg
cmV0dXJuIGxvY2F0aW9uKCk7Ci0gICAgY2FzZSBOYXZpZ2F0b3JfOgotICAgIGNhc2UgQ2xpZW50
SW5mb3JtYXRpb246IHsKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0aGUgbmF2aWdhdG9yIGlu
IHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRpbWUuCi0gICAgICBOYXZp
Z2F0b3IqIG4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2Jq
ZWN0UHJvdG90eXBlKCksIGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgICAvLyBGSVhNRTogdGhpcyB3
aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxlIGZyb20gd2luZG93cyB0
aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUgZmlyc3QgdGltZSwgYnV0
IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KLSAgICAgIGNvbnN0X2Nhc3Q8V2lu
ZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERvbnREZWxldGUpOwotICAg
ICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3JtYXRp
b24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAgIHJldHVybiBuOwotICAgIH0KICAgICBjYXNlIElt
YWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5j
cHAgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4IDY1OTlhODguLjY2NjY0
ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAKKysrIGIvV2Vi
Q29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUg
Ik5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9XZWJDb3JlL2RvbS9DbGlw
Ym9hcmQuY3BwCmluZGV4IDRjODA4ZDEuLjEzYjgxNWEgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvZG9t
L0NsaXBib2FyZC5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9u
LmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAppbmRleCA0OWY3MzJlLi5j
OGM1NDMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKKysr
IGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0zOCw4ICszOCw4IEBACiAj
aW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZWd1
bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dERv
Y3VtZW50LmgiCkBAIC0zNzAsMTYgKzM3MCwxOCBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBET01J
bXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0eXBlLCBGcmFtZQog
ICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KHRoaXMsIGZyYW1lKTsKICNl
bmRpZgogCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCkgPyBmcmFt
ZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkgOiAwOworCiAgICAgLy8gUERGIGlzIG9uZSBpbWFnZSB0
eXBlIGZvciB3aGljaCBhIHBsdWdpbiBjYW4gb3ZlcnJpZGUgYnVpbHQtaW4gc3VwcG9ydC4KICAg
ICAvLyBXZSBkbyBub3Qgd2FudCBRdWlja1RpbWUgdG8gdGFrZSBvdmVyIGFsbCBpbWFnZSB0eXBl
cywgb2J2aW91c2x5LgotICAgIGlmICgodHlwZSA9PSAiYXBwbGljYXRpb24vcGRmIiB8fCB0eXBl
ID09ICJ0ZXh0L3BkZiIpICYmIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSh0eXBl
KSkKKyAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgdHlwZSA9PSAidGV4dC9w
ZGYiKSAmJiBwbHVnaW5EYXRhICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzTWltZVR5cGUodHlwZSkp
CiAgICAgICAgIHJldHVybiBuZXcgUGx1Z2luRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIGlm
IChJbWFnZTo6c3VwcG9ydHNUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IEltYWdlRG9j
dW1lbnQodGhpcywgZnJhbWUpOwogICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBleGNlcHQgdGV4dC9w
bGFpbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwbHVnaW5zLiBJbiBwYXJ0aWN1bGFyLCBBZG9iZSBT
VkcgVmlld2VyIHNob3VsZCBiZSB1c2VkIGZvciBTVkcsIGlmIGluc3RhbGxlZC4KICAgICAvLyBE
aXNhbGxvd2luZyBwbHVnLWlucyB0byB1c2UgdGV4dC9wbGFpbiBwcmV2ZW50cyBwbHVnLWlucyBm
cm9tIGhpamFja2luZyBhIGZ1bmRhbWVudGFsIHR5cGUgdGhhdCB0aGUgYnJvd3NlciBpcyBleHBl
Y3RlZCB0byBoYW5kbGUsCiAgICAgLy8gYW5kIGFsc28gc2VydmVzIGFzIGFuIG9wdGltaXphdGlv
biB0byBwcmV2ZW50IGxvYWRpbmcgdGhlIHBsdWctaW4gZGF0YWJhc2UgaW4gdGhlIGNvbW1vbiBj
YXNlLgotICAgIGlmICh0eXBlICE9ICJ0ZXh0L3BsYWluIiAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1
cHBvcnRzTUlNRVR5cGUodHlwZSkpIAorICAgIGlmICh0eXBlICE9ICJ0ZXh0L3BsYWluIiAmJiBw
bHVnaW5EYXRhICYmIHBsdWdpbkRhdGEtPnN1cHBvcnRzTWltZVR5cGUodHlwZSkpIAogICAgICAg
ICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICBpZiAoaXNUZXh0
TUlNRVR5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dERvY3VtZW50KHRoaXMsIGZy
YW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA5YTVlYjk5Li5lZmFhZmIzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCkBAIC02Niw3ICs2Niw3IEBACiAjaW5jbHVkZSAiTWFpblJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgotI2lu
Y2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNs
dWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC0xNTk0LDcgKzE1OTQsOSBAQCBib29sIEZyYW1lTG9hZGVy
OjpzaG91bGRVc2VQbHVnaW4oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBib29sCiAgICAgLy8gQWxsb3cgb3RoZXIgcGx1Zy1pbnMgdG8gd2luIG92ZXIgUXVpY2tUaW1l
IGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBhIHBsdWctaW4gdGhhdAogICAgIC8v
IGNhbiBoYW5kbGUgVElGRiAod2hpY2ggUXVpY2tUaW1lIGNhbiBhbHNvIGhhbmRsZSkgdGhleSBw
cm9iYWJseSBpbnRlbmRlZCB0byBvdmVycmlkZSBRVC4KICAgICBpZiAoKG1pbWVUeXBlID09ICJp
bWFnZS90aWZmIiB8fCBtaW1lVHlwZSA9PSAiaW1hZ2UvdGlmIiB8fCBtaW1lVHlwZSA9PSAiaW1h
Z2UveC10aWZmIikpIHsKLSAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWUgPSBQbHVnaW5JbmZvU3Rv
cmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAgIFN0cmluZyBwbHVn
aW5OYW1lOworICAgICAgICBpZiAobV9mcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcGx1Z2lu
TmFtZSA9IG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5wbHVnaW5OYW1lRm9yTWltZVR5
cGUobWltZVR5cGUpOwogICAgICAgICBpZiAoIXBsdWdpbk5hbWUuaXNFbXB0eSgpICYmICFwbHVn
aW5OYW1lLmNvbnRhaW5zKCJRdWlja1RpbWUiLCBmYWxzZSkpIAogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9X
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBhMDUyM2JjLi5kOTMzYzU2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhpc3RvcnkuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJOYXZp
Z2F0b3IuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtMTU1LDYgKzE1NiwxMCBAQCB2b2lkIERP
TVdpbmRvdzo6Y2xlYXIoKQogICAgIGlmIChtX2NvbnNvbGUpCiAgICAgICAgIG1fY29uc29sZS0+
ZGlzY29ubmVjdEZyYW1lKCk7CiAgICAgbV9jb25zb2xlID0gMDsKKworICAgIGlmIChtX25hdmln
YXRvcikKKyAgICAgICAgbV9uYXZpZ2F0b3ItPmRpc2Nvbm5lY3RGcmFtZSgpOworICAgIG1fbmF2
aWdhdG9yID0gMDsKIH0KIAogU2NyZWVuKiBET01XaW5kb3c6OnNjcmVlbigpIGNvbnN0CkBAIC0y
MjAsNiArMjI1LDEzIEBAIENvbnNvbGUqIERPTVdpbmRvdzo6Y29uc29sZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fY29uc29sZS5nZXQoKTsKIH0KIAorTmF2aWdhdG9yKiBET01XaW5kb3c6Om5hdmln
YXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX25hdmlnYXRvcikKKyAgICAgICAgbV9uYXZpZ2F0
b3IgPSBuZXcgTmF2aWdhdG9yKG1fZnJhbWUpOworICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQo
KTsKK30KKwogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCiB2b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiB1cmksIERPTVdpbmRvdyogc291cmNlKSBjb25zdAogewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCmluZGV4IDA1ZmRjNGYuLjdjY2Q2MDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFt
ZTsKICAgICBjbGFzcyBIaXN0b3J5OworICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBT
Y3JlZW47CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNjksNiArNzAsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEJhckluZm8qIHNjcm9sbGJhcnMoKSBjb25z
dDsKICAgICAgICAgQmFySW5mbyogc3RhdHVzYmFyKCkgY29uc3Q7CiAgICAgICAgIEJhckluZm8q
IHRvb2xiYXIoKSBjb25zdDsKKyAgICAgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsK
KyAgICAgICAgTmF2aWdhdG9yKiBjbGllbnRJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG5h
dmlnYXRvcigpOyB9CiAKICAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKTsKIApA
QCAtMTY4LDYgKzE3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8QmFySW5mbz4gbV9zdGF0dXNiYXI7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhcklu
Zm8+IG1fdG9vbGJhcjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q29uc29sZT4gbV9jb25zb2xl
OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggNjU1ZDZhYi4uYzky
MGRkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gc2Nyb2xsYmFyczsKICAgICAg
ICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzdGF0dXNiYXI7CiAgICAgICAgIGF0
dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gdG9vbGJhcjsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE5hdmlnYXRvciBuYXZpZ2F0b3I7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBOYXZpZ2F0b3IgY2xpZW50SW5mb3JtYXRpb247CiAKICAgICAgICAgRE9NU2VsZWN0aW9uIGdl
dFNlbGVjdGlvbigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA4ZWVjNmUwLi4zYTNk
Yzk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRl
ICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA1ZjQ3ZjkyLi45OWM2YTNlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDEwOGQ4ZWIuLjFjZjQy
ZDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9G
cmFtZS5oCkBAIC05OSw2ICs5OSw3IEBAIGNsYXNzIEtKU1Byb3h5OwogY2xhc3MgS1VSTDsKIGNs
YXNzIE5vZGU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGx1Z2luRGF0YTsKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgUmVuZGVyUGFydDsKIGNsYXNzIFNlbGVjdGlvbjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ZTNmOAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdo
dCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAqICBDb3B5
cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5o
IgorCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdB
VE9SX1BMQVRGT1JNCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShQUEMpCisjZGVmaW5l
IFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMiCisjZWxpZiBQTEFURk9STShNQUMp
ICYmIFBMQVRGT1JNKFg4NikKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1h
Y0ludGVsIgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2RlZmluZSBXRUJDT1JFX05BVklHQVRP
Ul9QTEFURk9STSAiV2luMzIiCisjZWxzZQorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFU
Rk9STSAiIgorI2VuZGlmCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRG
T1JNCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAorI2RlZmluZSBXRUJDT1JF
X05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJ
R0FUT1JfUFJPRFVDVAorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCCisj
ZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCICIyMDAzMDEwNyIKKyNlbmRpZiAv
LyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIKKworI2lmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9WRU5ET1IKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SICJBcHBs
ZSBDb21wdXRlciwgSW5jLiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVO
RE9SCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgorI2RlZmluZSBXRUJD
T1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFW
SUdBVE9SX1ZFTkRPUl9TVUIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmlnYXRvcjo6
TmF2aWdhdG9yKEZyYW1lKiBmcmFtZSkKKyAgICA6IFJlZkNvdW50ZWQ8TmF2aWdhdG9yPigwKQor
ICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworTmF2aWdhdG9yOjp+TmF2aWdhdG9yKCkKK3sK
KyAgICBkaXNjb25uZWN0RnJhbWUoKTsKK30KKwordm9pZCBOYXZpZ2F0b3I6OmRpc2Nvbm5lY3RG
cmFtZSgpCit7CisgICAgaWYgKG1fcGx1Z2lucykgeworICAgICAgICBtX3BsdWdpbnMtPmRpc2Nv
bm5lY3RGcmFtZSgpOworICAgICAgICBtX3BsdWdpbnMgPSAwOworICAgIH0KKyAgICBpZiAobV9t
aW1lVHlwZXMpIHsKKyAgICAgICAgbV9taW1lVHlwZXMtPmRpc2Nvbm5lY3RGcmFtZSgpOworICAg
ICAgICBtX21pbWVUeXBlcyA9IDA7CisgICAgfQorICAgIG1fZnJhbWUgPSAwOworfQorCitTdHJp
bmcgTmF2aWdhdG9yOjphcHBDb2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxh
IjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6YXBwTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICJOZXRzY2FwZSI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OmFwcFZlcnNpb24oKSBjb25zdAor
eworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIFZl
cnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1v
emlsbGEvIiBwcmVmaXguCisgICAgY29uc3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxv
YWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICByZXR1cm4gdXNlckFnZW50LnN1YnN0cmluZyh1c2Vy
QWdlbnQuZmluZCgnLycpICsgMSk7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6Omxhbmd1YWdlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlKCk7Cit9CisKK1N0cmluZyBOYXZp
Z2F0b3I6OnVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgp
KTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6cGxhdGZvcm0oKSBjb25zdAoreworICAgIHJldHVy
biBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STTsKK30KKworUGx1Z2luQXJyYXkqIE5hdmlnYXRv
cjo6cGx1Z2lucygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbnMpCisgICAgICAgIG1fcGx1
Z2lucyA9IG5ldyBQbHVnaW5BcnJheShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9wbHVnaW5zLmdl
dCgpOworfQorCitNaW1lVHlwZUFycmF5KiBOYXZpZ2F0b3I6Om1pbWVUeXBlcygpIGNvbnN0Cit7
CisgICAgaWYgKCFtX21pbWVUeXBlcykKKyAgICAgICAgbV9taW1lVHlwZXMgPSBuZXcgTWltZVR5
cGVBcnJheShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMuZ2V0KCk7Cit9CisKK1N0
cmluZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05B
VklHQVRPUl9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUI7Cit9CisKK1N0
cmluZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFW
SUdBVE9SX1ZFTkRPUjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQjsKK30KKworYm9vbCBO
YXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRW5h
YmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFi
bGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgcmV0dXJuIG1fZnJhbWUtPnNldHRpbmdzKCktPmlzSmF2YUVuYWJsZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5o
IGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjlkZjlkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9y
LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNo
IEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgTmF2aWdhdG9yX2gKKyNkZWZpbmUgTmF2aWdhdG9yX2gKKworI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBTdHJpbmc7Cisg
ICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBjbGFzcyBQbHVnaW5BcnJheTsKKyAgICBjbGFzcyBN
aW1lVHlwZUFycmF5OworCisgICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8
TmF2aWdhdG9yPiB7CisgICAgcHVibGljOgorICAgICAgICBOYXZpZ2F0b3IoRnJhbWUqKTsKKyAg
ICAgICAgfk5hdmlnYXRvcigpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7Cisg
ICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKworICAgICAg
ICBTdHJpbmcgYXBwQ29kZU5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGFwcE5hbWUoKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIGFwcFZlcnNpb24oKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IGxhbmd1YWdlKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyB1c2VyQWdlbnQoKSBjb25zdDsKKyAg
ICAgICAgU3RyaW5nIHBsYXRmb3JtKCkgY29uc3Q7CisgICAgICAgIFBsdWdpbkFycmF5KiBwbHVn
aW5zKCkgY29uc3Q7CisgICAgICAgIE1pbWVUeXBlQXJyYXkqIG1pbWVUeXBlcygpIGNvbnN0Owor
ICAgICAgICBTdHJpbmcgcHJvZHVjdCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcHJvZHVjdFN1
YigpIGNvbnN0OworICAgICAgICBTdHJpbmcgdmVuZG9yKCkgY29uc3Q7CisgICAgICAgIFN0cmlu
ZyB2ZW5kb3JTdWIoKSBjb25zdDsKKyAgICAgICAgYm9vbCBjb29raWVFbmFibGVkKCkgY29uc3Q7
CisgICAgICAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5BcnJheT4g
bV9wbHVnaW5zOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxNaW1lVHlwZUFycmF5PiBtX21pbWVU
eXBlczsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5pZGwgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iYjM3ODFiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
YWdlL05hdmlnYXRvci5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNl
IE5hdmlnYXRvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXBwQ29k
ZU5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgYXBwTmFtZTsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBhcHBWZXJzaW9uOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxhbmd1YWdlOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHVzZXJBZ2VudDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBwbGF0Zm9ybTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbkFy
cmF5IHBsdWdpbnM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBNaW1lVHlwZUFycmF5IG1p
bWVUeXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwcm9kdWN0Owor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHByb2R1Y3RTdWI7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVuZG9yOworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHZlbmRvclN1YjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGJvb2xlYW4gY29va2llRW5hYmxlZDsKKyAgICAgICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOwor
ICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcAppbmRleCBlZmFlM2JmLi4zODA2ZWU3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yNSw2ICsyNSw3
IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJDb250ZXh0TWVu
dUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKyNpbmNsdWRlICJET01X
aW5kb3cuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAgLTM1LDYgKzM2LDggQEAKICNp
bmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAi
UGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTIwOCw2
ICsyMTEsMzEgQEAgdm9pZCBQYWdlOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMoKQogICAgICAgICAg
ICAgZnJhbWUtPnNldE5lZWRzUmVhcHBseVN0eWxlcygpOwogfQogCit2b2lkIFBhZ2U6OnJlZnJl
c2hQbHVnaW5zKGJvb2wgcmVsb2FkKQoreworICAgIGlmICghYWxsUGFnZXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFBsdWdpbkRhdGE6OnJlZnJlc2goKTsKKworICAgIEhhc2hTZXQ8UGFnZSo+
OjppdGVyYXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFBhZ2Uq
Pjo6aXRlcmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgICgqaXQpLT5tX3BsdWdpbkRhdGEgPSAwOworCisgICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgeworICAgICAgICAgICAgaWYgKHJlbG9hZCAmJiBmcmFtZS0+bG9hZGVy
KCktPmNvbnRhaW5zUGx1Z2lucygpKQorICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+
cmVsb2FkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1BsdWdpbkRhdGEqIFBhZ2U6OnBsdWdp
bkRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW5EYXRhKQorICAgICAgICBtX3BsdWdp
bkRhdGEgPSBuZXcgUGx1Z2luRGF0YSh0aGlzKTsKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLmdl
dCgpOworfQorCiBzdGF0aWMgRnJhbWUqIGluY3JlbWVudEZyYW1lKEZyYW1lKiBjdXJyLCBib29s
IGZvcndhcmQsIGJvb2wgd3JhcEZsYWcpCiB7CiAgICAgcmV0dXJuIGZvcndhcmQKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IGI2ODVl
M2YuLjE1OGZkOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvV2ViQ29y
ZS9wYWdlL1BhZ2UuaApAQCAtNTcsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgSW5zcGVjdG9yQ2xpZW50OwogICAgIGNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7CiAg
ICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBQbHVnaW5EYXRhOwogICAgIGNsYXNzIFByb2dyZXNz
VHJhY2tlcjsKICAgICBjbGFzcyBTZWxlY3Rpb247CiAgICAgY2xhc3MgU2VsZWN0aW9uQ29udHJv
bGxlcjsKQEAgLTcwLDYgKzcxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQYWdl
KENocm9tZUNsaWVudCosIENvbnRleHRNZW51Q2xpZW50KiwgRWRpdG9yQ2xpZW50KiwgRHJhZ0Ns
aWVudCosIEluc3BlY3RvckNsaWVudCopOwogICAgICAgICB+UGFnZSgpOwogICAgICAgICAKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpOworICAgICAgICBQ
bHVnaW5EYXRhKiBwbHVnaW5EYXRhKCkgY29uc3Q7CisKICAgICAgICAgRWRpdG9yQ2xpZW50KiBl
ZGl0b3JDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2VkaXRvckNsaWVudDsgfQogCiAgICAgICAg
IHZvaWQgc2V0TWFpbkZyYW1lKFBhc3NSZWZQdHI8RnJhbWU+KTsKQEAgLTE0Niw2ICsxNTAsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0cjxGcmFtZT4gbV9tYWluRnJhbWU7
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX2ZvY3VzZWROb2RlOwogCisgICAgICAgIG11dGFibGUg
UmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKKwogICAgICAgICBFZGl0b3JDbGllbnQq
IG1fZWRpdG9yQ2xpZW50OwogCiAgICAgICAgIGludCBtX2ZyYW1lQ291bnQ7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvUGx1Z2luLmggYi9XZWJDb3JlL3BhZ2UvUGx1Z2luLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1YjUwZGQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wYWdl
L1BsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLy8gLSotIG1vZGU6IGMr
KzsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpZm5kZWYgUGx1Z2luX2gKLSNkZWZpbmUgUGx1Z2luX2gKLQotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNs
YXNzIFdpZGdldDsKLQotICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdp
bj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luKFdpZGdldCogdmlldykgOiBSZWZDb3Vu
dGVkPFBsdWdpbj4oMCksIG1fdmlldyh2aWV3KSB7IH0KLSAgICAgICAgV2lkZ2V0KiB2aWV3KCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IFdpZGdldCogbV92aWV3OwotICAgIH07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBQbHVnaW5faApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1h
Yy5tbSBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KaW5kZXggOGE3NTc5Ny4uOGYwZjc3
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQorKysgYi9XZWJDb3Jl
L3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCkBAIC02OCw3ICs2OCw2IEBACiAjaW1wb3J0ICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbXBvcnQgIlBsdWdpbi5oIgogI2ltcG9ydCAiUmVn
dWxhckV4cHJlc3Npb24uaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5k
ZXJMaXN0SXRlbS5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UubW0gYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQppbmRleCA2
M2RiM2YzLi41ZTI4YWVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFt
ZUJyaWRnZS5tbQorKysgYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQpA
QCAtNjMsNyArNjMsNyBAQAogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1Nb3Vz
ZUV2ZW50LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgotI2ltcG9ydCAiUGx1Z2luSW5m
b1N0b3JlLmgiCisjaW1wb3J0ICJQbHVnaW5EYXRhLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5o
IgogI2ltcG9ydCAiUmVuZGVyUGFydC5oIgogI2ltcG9ydCAiUmVuZGVyVHJlZUFzVGV4dC5oIgpA
QCAtMTIwNyw3ICsxMjA3LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudCAqZm9ybUVsZW1lbnRG
cm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQogICAgIAogICAgIGlmIChXZWJDb3Jl
OjpET01JbXBsZW1lbnRhdGlvbjo6aXNUZXh0TUlNRVR5cGUobWltZVR5cGUpIHx8CiAgICAgICAg
IEltYWdlOjpzdXBwb3J0c1R5cGUobWltZVR5cGUpIHx8Ci0gICAgICAgIFBsdWdpbkluZm9TdG9y
ZTo6c3VwcG9ydHNNSU1FVHlwZShtaW1lVHlwZSkpCisgICAgICAgIChtX2ZyYW1lLT5wYWdlKCkg
JiYgbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCktPnN1cHBvcnRzTWltZVR5cGUobWltZVR5
cGUpKSkKICAgICAgICAgcmV0dXJuIE5POwogICAgIAogICAgIHJldHVybiBZRVM7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9yeS5oIGIvV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaAppbmRleCA0Y2YyMWUzLi43ZDU1MTUwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9yeS5oCisrKyBiL1dlYkNvcmUv
cGFnZS9tYWMvV2ViQ29yZVZpZXdGYWN0b3J5LmgKQEAgLTM1LDkgKzM1LDcgQEAKIEBwcm90b2Nv
bCBXZWJDb3JlVmlld0ZhY3RvcnkKIAogLSAoTlNBcnJheSAqKXBsdWdpbnNJbmZvOyAvLyBhcnJh
eSBvZiBpZCA8V2ViQ29yZVBsdWdpbkluZm8+Ci0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09M
KXJlbG9hZFBhZ2VzOwotLSAoTlNTdHJpbmcgKilwbHVnaW5OYW1lRm9yTUlNRVR5cGU6KE5TU3Ry
aW5nICopTUlNRVR5cGU7Ci0tIChCT09MKXBsdWdpblN1cHBvcnRzTUlNRVR5cGU6KE5TU3RyaW5n
ICopTUlNRVR5cGU7CistICh2b2lkKXJlZnJlc2hQbHVnaW5zOwogCiAtIChOU1N0cmluZyAqKWlu
cHV0RWxlbWVudEFsdFRleHQ7CiAtIChOU1N0cmluZyAqKXJlc2V0QnV0dG9uRGVmYXVsdExhYmVs
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwIGIvV2ViQ29yZS9wYWdl
L3F0L0ZyYW1lUXQuY3BwCmluZGV4IDdhZTFkZDkuLjFmMDMyNTQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9xdC9GcmFtZVF0LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAK
QEAgLTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlBs
dWdpbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1
Z0luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc2ZWFl
Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5t
bQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1Z2luSW5mb1N0b3JlLmgiCi0KLSNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29y
ZVZpZXdGYWN0b3J5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU3RyaW5nIFBsdWdpbklu
Zm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbk5h
bWVGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci19Ci0KLVBsdWdpbkluZm8gKlBsdWdpbkluZm9TdG9y
ZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0g
ICAgUGx1Z2luSW5mbyAqcGx1Z2luSW5mbyA9IG5ldyBQbHVnaW5JbmZvOwotICAgIAotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQotICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4g
cGx1Z2luID0gW1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZv
XSBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAKLSAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3Bs
dWdpbiBuYW1lXTsKLSAgICBwbHVnaW5JbmZvLT5maWxlID0gW3BsdWdpbiBmaWxlbmFtZV07Ci0g
ICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVnaW4gcGx1Z2luRGVzY3JpcHRpb25dOwotCi0gICAg
TlNFbnVtZXJhdG9yICpNSU1FVHlwZUVudW1lcmF0b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVy
YXRvcl07Ci0gICAgd2hpbGUgKE5TU3RyaW5nICpNSU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBu
ZXh0T2JqZWN0XSkgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFz
c0luZm87Ci0gICAgICAgIHBsdWdpbkluZm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAg
bWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigpOwotICAgICAgICBtaW1lLT5zdWZmaXhl
cyA9IFtbcGx1Z2luIGV4dGVuc2lvbnNGb3JNSU1FVHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVk
QnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIG1pbWUtPmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9u
Rm9yTUlNRVR5cGU6TUlNRV07Ci0gICAgICAgIG1pbWUtPnBsdWdpbiA9IHBsdWdpbkluZm87Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBwbHVnaW5JbmZvOwotCi0gICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAocGx1Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWlt
ZXMuaXNFbXB0eSgpKQotICAgICAgICBkZWxldGVBbGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMp
OwotICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVk
IFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewotICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBjb3VudF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICAKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1
cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIHBsdWdpblN1cHBvcnRzTUlNRVR5cGU6bWltZVR5cGVdOwotICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7ICAgIAotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQotdm9pZCBy
ZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5QYWdlcykKLXsKLSAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0g
cmVmcmVzaFBsdWdpbnM6cmVsb2FkT3BlblBhZ2VzXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotfQotCi19Ci0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5
cGVSZWdpc3RyeVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0
LmNwcAppbmRleCA2YjNlMjQzLi43YzhlYjE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1F
VHlwZVJlZ2lzdHJ5UXQuY3BwCkBAIC0yOCwxMSArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBs
dWdpbl9wLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRXh0ZW5z
aW9uTWFwIHsKQEAgLTc5LDEyICs3NCw2IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcgJmV4dCkKICAgICAgICAgICAgIHJldHVy
biBlLT5taW1lVHlwZTsKICAgICAgICAgKytlOwogICAgIH0KLSAgICAvLyAjIyMgRklYTUU6IFF0
IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIFFTdHJpbmcgdHlwZSA9IFFXZWJG
YWN0b3J5TG9hZGVyOjpzZWxmKCktPm1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgaWYg
KCF0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci0jZW5kaWYKIAogICAgIHJl
dHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vcXQvUGx1Z0luSW5mb1N0b3JlUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Q
bHVnSW5JbmZvU3RvcmVRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3Y2Mz
YTkuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAwNyBUcm9sbHRlY2ggQVNBCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBhbGwgZnVuY3Rpb25h
bGl0eSBuZWVkZWQgZm9yIGxvYWRpbmcgaW1hZ2VzLCBzdHlsZSBzaGVldHMgYW5kIGh0bWwKLSAg
ICBwYWdlcyBmcm9tIHRoZSB3ZWIuIEl0IGhhcyBhIG1lbW9yeSBjYWNoZSBmb3IgdGhlc2Ugb2Jq
ZWN0cy4KLSovCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAicWRlYnVn
LmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdp
bl9wLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBsdWdpbkluZm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5m
b0ZvclBsdWdpbkF0SW5kZXgodW5zaWduZWQgaSkKLXsKLSAgICAvL3FEZWJ1ZygpIDw8ICI+Pj4+
Pj4+Pj4+PiBQbHVnaW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4
KCIgPDwgaSA8PCAiKSI7Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBRV2ViRmFj
dG9yeUxvYWRlciAqbG9hZGVyID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKTsKLSAgICBpZiAo
aSA+IGxvYWRlci0+bV9wbHVnaW5JbmZvLmNvdW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGNvbnN0IFFXZWJGYWN0b3J5TG9hZGVyOjpJbmZvICZxaW5mbyA9IGxvYWRlci0+bV9wbHVnaW5J
bmZvLmF0KGkpOwotICAgIFBsdWdpbkluZm8gKmluZm8gPSBuZXcgUGx1Z2luSW5mbzsKLSAgICBp
bmZvLT5uYW1lID0gcWluZm8ubmFtZTsKLSAgICBpbmZvLT5kZXNjID0gcWluZm8uZGVzY3JpcHRp
b247Ci0gICAgZm9yZWFjaCAoY29uc3QgUVdlYkZhY3RvcnlMb2FkZXI6Ok1pbWVJbmZvICZtLCBx
aW5mby5taW1lcykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFz
c0luZm87Ci0gICAgICAgIG1pbWUtPnR5cGUgPSBtLnR5cGU7Ci0gICAgICAgIG1pbWUtPnBsdWdp
biA9IGluZm87Ci0gICAgICAgIGZvcmVhY2ggKFFTdHJpbmcgZXh0LCBtLmV4dGVuc2lvbnMpCi0g
ICAgICAgICAgICBtaW1lLT5zdWZmaXhlcy5hcHBlbmQoZXh0KTsKLSAgICAgICAgaW5mby0+bWlt
ZXMuYXBwZW5kKG1pbWUpOwotICAgIH0KLSAgICByZXR1cm4gaW5mbzsKLSNlbHNlCi0gICAgcmV0
dXJuIDA7IC8vICMjIyBGSVhNRQotI2VuZGlmCi19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9y
ZTo6cGx1Z2luQ291bnQoKSBjb25zdAotewotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAg
IC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBsdWdpbkluZm9TdG9yZTo6Y291bnQgPSIgPDwg
UVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+a2V5cygpLmNvdW50KCk7Ci0gICAgcmV0dXJuIFFX
ZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPmtleXMoKS5jb3VudCgpOwotI2Vsc2UKLSAgICByZXR1
cm4gMDsKLSNlbmRpZgotfQotCi1TdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9y
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBt
ZXRob2QgaXMgc3R1YmJlZCBvdXQgYW5kIHNob3VsZCByZWFsbHkgcmV0dXJuIHRoZSBuYW1lIG9m
IGEgcGx1Zy1pbiBwYWNrYWdlIGZvcgotICAgIC8vIGEgZ2l2ZW4gTUlNRSB0eXBlLgotICAgIHJl
dHVybiBTdHJpbmcoKTsKLX0KLSAgICAKLWJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01J
TUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgc3RyaW5nKQotewotI2lmIFFUX1ZFUlNJT04g
PCAweDA0MDQwMAotICAgIGJvb2wgc3VwcG9ydHMgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigp
LT5zdXBwb3J0c01pbWVUeXBlKHN0cmluZyk7Ci0jZWxzZQotICAgIGJvb2wgc3VwcG9ydHMgPSBm
YWxzZTsKLSNlbmRpZgotICAgIC8vcURlYnVnKCkgPDwgIj4+Pj4+Pj4+Pj4+IFBsdWdpbkluZm9T
dG9yZTo6c3VwcG9ydHNNSU1FVHlwZSgiIDw8IHN0cmluZyA8PCAiKSA9IiA8PCBzdXBwb3J0czsK
LSAgICByZXR1cm4gc3VwcG9ydHM7Ci19Ci0KLXZvaWQgcmVmcmVzaFBsdWdpbnMoYm9vbCkgewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9y
YXJ5TGlua1N0dWJzLmNwcAppbmRleCA4MTc0OTFlLi5iZDQyMmYzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTeXN0
ZW1UaW1lLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jYTJiNTJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
LmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRl
Y2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTWltZVR5cGUuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK01pbWVUeXBl
OjpNaW1lVHlwZShQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6
IFJlZkNvdW50ZWQ8TWltZVR5cGU+KDApCisgICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkK
KyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK01pbWVUeXBlOjp+TWltZVR5cGUoKQorewor
fQorCitTdHJpbmcgTWltZVR5cGU6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdp
bkRhdGEtPm1pbWVzKClbbV9pbmRleF0tPnR5cGU7Cit9CisKK1N0cmluZyBNaW1lVHlwZTo6c3Vm
Zml4ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPm1pbWVzKClbbV9pbmRl
eF0tPnN1ZmZpeGVzOworfQorCitTdHJpbmcgTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5kZXNjOworfQor
CitQbHVnaW4qIE1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29uc3QKK3sKKyAgICBjb25zdCBQ
YWdlKiBwID0gbV9wbHVnaW5EYXRhLT5wYWdlKCk7CisgICAgaWYgKCFwIHx8ICFwLT5zZXR0aW5n
cygpLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0
IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOwor
ICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBs
dWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChwbHVnaW5zW2ldID09IG1pbWVzW21faW5kZXhdLT5wbHVnaW4p
CisgICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOwor
ICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OWU0ZWUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNaW1lVHlwZV9o
CisjZGVmaW5lIE1pbWVUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBQ
bHVnaW5EYXRhOworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBj
bGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1pbWVUeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBNaW1lVHlwZShQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRl
eCk7CisgICAgICAgIH5NaW1lVHlwZSgpOworCisgICAgICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7
CisgICAgICAgIFN0cmluZyBzdWZmaXhlcygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZGVzY3Jp
cHRpb24oKSBjb25zdDsKKyAgICAgICAgUGx1Z2luKiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwor
ICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmNjNzM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmlkbApAQCAtMCwwICsxLDI5
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxl
IHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgTWltZVR5cGUgeworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgc3VmZml4ZXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGVz
Y3JpcHRpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQbHVnaW4gZW5hYmxlZFBsdWdp
bjsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJh
eS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5M2JiOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWltZVR5cGVBcnJheS5oIgorCisj
aW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK01pbWVUeXBlQXJyYXk6Ok1pbWVUeXBlQXJyYXkoRnJhbWUq
IGZyYW1lKQorICAgIDogUmVmQ291bnRlZDxNaW1lVHlwZUFycmF5PigwKQorICAgICwgbV9mcmFt
ZShmcmFtZSkKK3sKK30KKworTWltZVR5cGVBcnJheTo6fk1pbWVUeXBlQXJyYXkoKQoreworfQor
Cit1bnNpZ25lZCBsb25nIE1pbWVUeXBlQXJyYXk6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgUGx1
Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBkYXRhLT5taW1lcygpLnNpemUoKTsKK30KKworTWltZVR5
cGUqIE1pbWVUeXBlQXJyYXk6Oml0ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgUGx1Z2luRGF0
YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVy
biAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+bWlt
ZXMoKTsKKyAgICBpZiAoaW5kZXggPj0gbWltZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGRhdGEsIGluZGV4KTsKK30KKworYm9vbCBNaW1lVHlw
ZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0
eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEgKmRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8TWlt
ZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0tPnR5cGUg
PT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShkYXRhLCBp
KTsKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luRGF0YSogTWltZVR5cGVBcnJheTo6Z2V0UGx1
Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBQYWdlKiBwID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIHAtPnBsdWdpbkRhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaCBiL1dl
YkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYTQ1YTdlNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1l
VHlwZUFycmF5LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDgg
VHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWltZVR5cGVBcnJheV9oCisjZGVmaW5lIE1pbWVU
eXBlQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIGNsYXNzIEpTVmFsdWU7CisgICAgY2xh
c3MgRXhlY1N0YXRlOworfTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRnJh
bWU7CisgICAgY2xhc3MgTWltZVR5cGU7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBjbGFz
cyBBdG9taWNTdHJpbmc7CisKKyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTTWltZVR5cGVBcnJh
eS5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNW
YWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBNaW1l
VHlwZUFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgTWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpOworICAgICAgICB+TWltZVR5
cGVBcnJheSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0g
MDsgfQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIE1p
bWVUeXBlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zv
ck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBNaW1lVHlw
ZSogbmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUGx1Z2luRGF0YSogZ2V0UGx1Z2luRGF0YSgpIGNvbnN0OworCisgICAg
ICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
QXJyYXkuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTJiMDgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwKQEAgLTAs
MCArMSwyNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
K21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRl
eEdldHRlcl0gTWltZVR5cGVBcnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nIGxlbmd0aDsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NzIyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luLmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW46OlBsdWdpbihQbHVnaW5EYXRhKiBwbHVn
aW5EYXRhLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luPigwKQorICAg
ICwgbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCisgICAgLCBtX2luZGV4KGluZGV4KQoreworfQor
CitQbHVnaW46On5QbHVnaW4oKQoreworfQorCitTdHJpbmcgUGx1Z2luOjpuYW1lKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPm5hbWU7Cit9
CisKK1N0cmluZyBQbHVnaW46OmZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVn
aW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPmZpbGU7Cit9CisKK1N0cmluZyBQbHVnaW46OmRl
c2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClb
bV9pbmRleF0tPmRlc2M7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUGx1Z2luOjpsZW5ndGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+bWltZXMu
c2l6ZSgpOworfQorCitNaW1lVHlwZSogUGx1Z2luOjppdGVtKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBs
dWdpbnMoKTsKKyAgICBpZiAoaW5kZXggPj0gcGx1Z2luc1ttX2luZGV4XS0+bWltZXMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBwbHVnaW5z
W21faW5kZXhdLT5taW1lc1tpbmRleF07CisKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5m
byo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXSA9PSBtaW1l
KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkp
OworICAgIHJldHVybiAwOworfQorCitib29sIFBsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ld
LT50eXBlID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworTWltZVR5cGUqIFBsdWdpbjo6bmFtZUdldHRlcihjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5m
byo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9
PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKG1fcGx1Z2lu
RGF0YS5nZXQoKSwgaSk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaCBiL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZThkMjk5Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IFBsdWdpbl9oCisjZGVmaW5lIFBsdWdpbl9oCisKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgS0pTIHsKKyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKK307
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBjbGFzcyBB
dG9taWNTdHJpbmc7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgLy8gRklYTUU6IEdlbmVyYXRl
ZCBKU1BsdWdpbi5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAg
IEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBj
bGFzcyBQbHVnaW5EYXRhOworCisgICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFJlZkNvdW50ZWQ8
UGx1Z2luPiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW4oUGx1Z2luRGF0YSogcGx1Z2lu
RGF0YSwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICB+UGx1Z2luKCk7CisKKyAgICAgICAgU3Ry
aW5nIG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworCisgICAgICAgIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoKCkgY29uc3Q7CisKKyAgICAgICAgTWltZVR5cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
OworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIE1pbWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0
cmluZyYgcHJvcGVydHlOYW1lKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxQbHVn
aW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIGIv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDU2NWU0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4u
aWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVj
aCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRl
ciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdpbiB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxl
bmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAgYi9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmU0YmI4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
QXJyYXkuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkFycmF5OjpQbHVnaW5BcnJheShGcmFtZSogZnJhbWUpCisgICAgOiBSZWZDb3Vu
dGVkPFBsdWdpbkFycmF5PigwKQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworUGx1Z2lu
QXJyYXk6On5QbHVnaW5BcnJheSgpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUGx1Z2luQXJyYXk6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEo
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRhLT5w
bHVnaW5zKCkuc2l6ZSgpOworfQorCitQbHVnaW4qIFBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVk
IGluZGV4KQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAg
aWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5m
byo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBwbHVnaW5z
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBQbHVnaW4oZGF0YSwg
aW5kZXgpOworfQorCitib29sIFBsdWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdl
dFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNv
bnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5zKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlm
IChwbHVnaW5zW2ldLT5uYW1lID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworUGx1Z2luKiBQbHVnaW5BcnJheTo6bmFtZUdl
dHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRh
KiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdp
bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBQbHVnaW4oZGF0YSwgaSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
UGx1Z2luQXJyYXk6OnJlZnJlc2goYm9vbCByZWxvYWQpCit7CisgICAgUGFnZTo6cmVmcmVzaFBs
dWdpbnMocmVsb2FkKTsKK30KKworUGx1Z2luRGF0YSogUGx1Z2luQXJyYXk6OmdldFBsdWdpbkRh
dGEoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
UGFnZSogcCA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBwLT5wbHVnaW5EYXRhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5oIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTgxMTUyZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5o
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBB
U0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFBsdWdpbkFycmF5X2gKKyNkZWZpbmUgUGx1Z2luQXJyYXlfaAorCisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBLSlMgeworICAgIGNsYXNzIEpTVmFsdWU7CisgICAgY2xhc3MgRXhlY1N0YXRlOwor
fTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3Mg
UGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOwor
CisgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBKU1BsdWdpbkFycmF5LmNwcCBkb2Vzbid0IGluY2x1
ZGUgSlNQbHVnaW4uaCBmb3IgdG9KUworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNT
dGF0ZSosIFBsdWdpbiopOworCisgICAgY2xhc3MgUGx1Z2luQXJyYXkgOiBwdWJsaWMgUmVmQ291
bnRlZDxQbHVnaW5BcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luQXJyYXkoRnJh
bWUqIGZyYW1lKTsKKyAgICAgICAgflBsdWdpbkFycmF5KCk7CisKKyAgICAgICAgdm9pZCBkaXNj
b25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBs
ZW5ndGgoKSBjb25zdDsKKyAgICAgICAgUGx1Z2luKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAg
ICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpOworICAgICAgICBQbHVnaW4qIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpOworCisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUGx1Z2luRGF0YSogZ2V0UGx1Z2luRGF0YSgpIGNvbnN0OworCisg
ICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5B
cnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZDY1MgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKQEAgLTAsMCAr
MSwyNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21v
ZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRleEdl
dHRlcl0gUGx1Z2luQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBsZW5ndGg7CisgICAgICAgIHZvaWQgcmVmcmVzaChpbiBib29sZWFuIHJlbG9hZCk7Cisg
ICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmI2MGVjOGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luRGF0YS5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGFu
aWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAw
IFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGx1Z2luRGF0YTo6UGx1Z2luRGF0YShjb25zdCBQYWdlKiBwYWdlKQorICAgIDogUmVmQ291
bnRlZDxQbHVnaW5EYXRhPigwKQorICAgICwgbV9wYWdlKHBhZ2UpCit7CisgICAgaW5pdFBsdWdp
bnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsdWdpbnMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgUGx1Z2luSW5mbyogcGx1Z2luID0gbV9wbHVnaW5zW2ldOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcGx1Z2luLT5taW1lcy5zaXplKCk7ICsr
aikKKyAgICAgICAgICAgIG1fbWltZXMuYXBwZW5kKHBsdWdpbi0+bWltZXNbal0pOworICAgIH0K
K30KKworUGx1Z2luRGF0YTo6flBsdWdpbkRhdGEoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyht
X3BsdWdpbnMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21pbWVzKTsKK30KKworYm9vbCBQbHVn
aW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGlmIChtX21pbWVzW2ldLT50eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2lu
TmFtZUZvck1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmICht
X21pbWVzW2ldLT50eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG1fbWltZXNb
aV0tPnBsdWdpbi0+bmFtZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjMwNjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IFBsdWdpbkRhdGFfaAorI2RlZmluZSBQbHVnaW5EYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHN0cnVjdCBQbHVnaW5JbmZvOwor
ICAgIHN0cnVjdCBQYWdlOworCisgICAgc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgICAgICBT
dHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAgIFN0cmluZyBzdWZmaXhl
czsKKyAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1
Z2luSW5mbyB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZmlsZTsKKyAg
ICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWltZXM7
CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBtZXJnZSB3aXRoIFBsdWdpbkRhdGFiYXNlIGluIHRo
ZSBmdXR1cmUKKyAgICBjbGFzcyBQbHVnaW5EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2lu
RGF0YT4geworICAgIHB1YmxpYzoKKyAgICAgICAgUGx1Z2luRGF0YShjb25zdCBQYWdlKiBwYWdl
KTsKKyAgICAgICAgflBsdWdpbkRhdGEoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RQYWdl
KCkgeyBtX3BhZ2UgPSAwOyB9CisgICAgICAgIGNvbnN0IFBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2U7IH0KKworICAgICAgICBpbmxpbmUgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8q
PiYgcGx1Z2lucygpIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1fcGx1Z2luczsgfQorICAgICAg
ICBpbmxpbmUgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMoKSBjb25zdAorICAg
ICAgICB7IHJldHVybiBtX21pbWVzOyB9CisKKyAgICAgICAgYm9vbCBzdXBwb3J0c01pbWVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICBTdHJpbmcgcGx1Z2luTmFt
ZUZvck1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCisgICAgICAgIHN0
YXRpYyB2b2lkIHJlZnJlc2goKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5pdFBs
dWdpbnMoKTsKKworICAgICAgICBWZWN0b3I8UGx1Z2luSW5mbyo+IG1fcGx1Z2luczsKKyAgICAg
ICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiBtX21pbWVzOworICAgICAgICBjb25zdCBQYWdlKiBt
X3BhZ2U7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lu
cy9tYWMvUGx1Z2luRGF0YU1hYy5tbSBiL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luRGF0YU1h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWI5MzE2Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFjLm1tCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlBsdWdpbkRhdGEuaCIKKwor
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0
ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBs
dWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CisKKyAgICBOU0FycmF5KiBwbHVnaW5zID0gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVk
RmFjdG9yeV0gcGx1Z2luc0luZm9dOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
W3BsdWdpbnMgY291bnRdOyArK2kpIHsKKyAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luSW5mbyA9
IG5ldyBQbHVnaW5JbmZvOworCisgICAgICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4gcGx1Z2lu
ID0gW3BsdWdpbnMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAKKyAgICAgICAgcGx1Z2luSW5mby0+
bmFtZSA9IFtwbHVnaW4gbmFtZV07CisgICAgICAgIHBsdWdpbkluZm8tPmZpbGUgPSBbcGx1Z2lu
IGZpbGVuYW1lXTsKKyAgICAgICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVnaW4gcGx1Z2luRGVz
Y3JpcHRpb25dOworCisgICAgICAgIE5TRW51bWVyYXRvciogTUlNRVR5cGVFbnVtZXJhdG9yID0g
W3BsdWdpbiBNSU1FVHlwZUVudW1lcmF0b3JdOworICAgICAgICB3aGlsZSAoTlNTdHJpbmcqIE1J
TUUgPSBbTUlNRVR5cGVFbnVtZXJhdG9yIG5leHRPYmplY3RdKSB7CisgICAgICAgICAgICBNaW1l
Q2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgICAgICBwbHVnaW5J
bmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisgICAgICAgICAgICBtaW1lLT50eXBlID0gU3RyaW5n
KE1JTUUpLmxvd2VyKCk7CisgICAgICAgICAgICBtaW1lLT5zdWZmaXhlcyA9IFtbcGx1Z2luIGV4
dGVuc2lvbnNGb3JNSU1FVHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIsIl07
CisgICAgICAgICAgICBtaW1lLT5kZXNjID0gW3BsdWdpbiBkZXNjcmlwdGlvbkZvck1JTUVUeXBl
Ok1JTUVdOworICAgICAgICAgICAgbWltZS0+cGx1Z2luID0gcGx1Z2luSW5mbzsKKyAgICAgICAg
fQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQocGx1Z2luSW5mbyk7CisgICAgfQorICAgIAor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQg
UGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworICAgIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHJlZnJlc2hQbHVnaW5z
XTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworfQorCit9CisKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhUXQuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpbkRhdGFRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEy
ZGVkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhUXQu
Y3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVj
aCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgor
CisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSA8cXdlYnBhZ2UuaD4KKyNpbmNsdWRlIDxxd2VicGx1Z2luZmFjdG9yeS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQoreworICAgIFFX
ZWJQYWdlKiB3ZWJQYWdlID0gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50UXQqPihtX3BhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKSktPm1fd2ViUGFnZTsKKyAgICBRV2ViUGx1Z2luRmFjdG9yeSogZmFj
dG9yeSA9IHdlYlBhZ2UtPnBsdWdpbkZhY3RvcnkoKTsKKyAgICBpZiAoIWZhY3RvcnkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IHBsdWdp
bnMgPSBmYWN0b3J5LT5wbHVnaW5zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHVnaW5z
LmNvdW50KCk7ICsraSkgeworICAgICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2lu
JiBwbHVnaW4gPSBwbHVnaW5zLmF0KGkpOworCisgICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBu
ZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgaW5mby0+bmFtZSA9IHBsdWdpbi5uYW1lOworICAgICAg
ICBpbmZvLT5kZXNjID0gcGx1Z2luLmRlc2NyaXB0aW9uOworCisgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgcGx1Z2luLm1pbWVUeXBlcy5jb3VudCgpOyArK2opIHsKKyAgICAgICAgICAgIGNv
bnN0IFFXZWJQbHVnaW5GYWN0b3J5OjpNaW1lVHlwZSYgbWltZVR5cGUgPSBwbHVnaW4ubWltZVR5
cGVzLmF0KGopOworCisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lSW5mbyA9IG5ldyBN
aW1lQ2xhc3NJbmZvOworICAgICAgICAgICAgbWltZUluZm8tPnR5cGUgPSBtaW1lVHlwZS5uYW1l
OworICAgICAgICAgICAgbWltZUluZm8tPmRlc2MgPSBtaW1lVHlwZS5kZXNjcmlwdGlvbjsKKyAg
ICAgICAgICAgIG1pbWVJbmZvLT5zdWZmaXhlcyA9IG1pbWVUeXBlLnN1ZmZpeGVzLmpvaW4oIjsg
Iik7CisKKyAgICAgICAgICAgIGluZm8tPm1pbWVzLmFwcGVuZChtaW1lSW5mbyk7CisgICAgICAg
IH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOworICAgIH0KK30KKwordm9pZCBQ
bHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICAvLyBub3RoaW5nIHRvIGRvCit9CisKK307CmRp
ZmYgLS1naXQgYS9XZWJLaXQucHJpIGIvV2ViS2l0LnByaQppbmRleCA1NWRlOWIzLi5kMTI0MjNi
IDEwMDY0NAotLS0gYS9XZWJLaXQucHJpCisrKyBiL1dlYktpdC5wcmkKQEAgLTk3LDcgKzk3LDgg
QEAgSU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9yZW5kZXJpbmcgXAog
ICAgICQkQkFTRV9ESVIvV2ViQ29yZS9oaXN0b3J5IFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUv
eG1sIFwKLSAgICAkJEJBU0VfRElSL1dlYkNvcmUvaHRtbAorICAgICQkQkFTRV9ESVIvV2ViQ29y
ZS9odG1sIFwKKyAgICAkJEJBU0VfRElSL1dlYkNvcmUvcGx1Z2lucwogCiAKIG1hY3ggewpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbSBiL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KaW5kZXggYzUyNGI0Yi4u
NDFmMzgzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFj
dG9yeS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1t
CkBAIC03MSwyMiArNzEsOSBAQAogICAgIHJldHVybiBbW1dlYlBsdWdpbkRhdGFiYXNlIHNoYXJl
ZERhdGFiYXNlXSBwbHVnaW5zXTsKIH0KIAotLSAoTlNTdHJpbmcgKilwbHVnaW5OYW1lRm9yTUlN
RVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tbV2ViUGx1Z2luRGF0
YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHBsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXSBuYW1lXTsK
LX0KLQotLSAodm9pZClyZWZyZXNoUGx1Z2luczooQk9PTClyZWxvYWRQYWdlcworLSAodm9pZCly
ZWZyZXNoUGx1Z2lucwogewogICAgIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2Vd
IHJlZnJlc2hdOwotICAgIGlmIChyZWxvYWRQYWdlcykgewotICAgICAgICBbV2ViVmlldyBfbWFr
ZUFsbFdlYlZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcmVsb2FkRm9yUGx1Z2luQ2hh
bmdlcyldOwotICAgIH0KLX0KLQotLSAoQk9PTClwbHVnaW5TdXBwb3J0c01JTUVUeXBlOihOU1N0
cmluZyAqKU1JTUVUeXBlCi17Ci0gICAgcmV0dXJuIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hhcmVk
RGF0YWJhc2VdIHBsdWdpbkZvck1JTUVUeXBlOk1JTUVUeXBlXSAhPSBuaWw7CiB9CiAKIC0gKFdl
YkNvcmVGcmFtZUJyaWRnZSAqKWJyaWRnZUZvclZpZXc6KE5TVmlldyAqKXYKZGlmZiAtLWdpdCBh
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQppbmRleCA3MWFjMGViLi4wNzY5NDhiIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC0zNTQsMTYgKzM1NCw2IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1l
KQogICAgIHJldHVybiBjb3JlKHNlbGYpLT5sb2FkZXIoKS0+bnVtUGVuZGluZ09yTG9hZGluZ1Jl
cXVlc3RzKHJlY3Vyc2UpOwogfQogCi0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzCi17
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1l
bnRWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICAgICAg
aWYgKChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYg
Y29yZUZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkpKQotICAgICAgICAgICAgW2tp
dChmcmFtZSkgcmVsb2FkXTsKLSAgICB9Ci19Ci0KIC0gKHZvaWQpX2F0dGFjaFNjcmlwdERlYnVn
Z2VyCiB7CiAgICAgaWYgKCFfcHJpdmF0ZS0+c2NyaXB0RGVidWdnZXIgJiYgY29yZShzZWxmKS0+
c2NyaXB0UHJveHkoKS0+aGF2ZUdsb2JhbE9iamVjdCgpKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgKaW5kZXggODliNWIxZC4uNDI3YmE5ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWVJbnRlcm5hbC5oCkBAIC0xNTMsOCArMTUzLDYgQEAgc3RydWN0IFdlYkNvcmVIaXN0b3J5
SXRlbTsKIAogLSAoaW50KV9udW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHM6KEJPT0wpcmVjdXJz
ZTsKIAotLSAodm9pZClfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlczsKLQogLSAodm9pZClfYXR0YWNo
U2NyaXB0RGVidWdnZXI7CiAtICh2b2lkKV9kZXRhY2hTY3JpcHREZWJ1Z2dlcjsKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQppbmRleCAzNTRiYTUyLi5jZGM0NTYxIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpA
QCAtMTI4MSwxMSArMTI4MSw2IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoZSogV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpCiAgICAgW05TQXBw
IHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU107CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdp
bkNoYW5nZXMKLXsKLSAgICBbW3NlbGYgbWFpbkZyYW1lXSBfcmVsb2FkRm9yUGx1Z2luQ2hhbmdl
c107Ci19Ci0KIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilfY2FjaGVkUmVzcG9uc2VGb3JVUkw6
KE5TVVJMICopVVJMCiB7CiAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtbTlNN
dXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJMXTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZS5jcHAKaW5kZXggZDY4MTQwZC4uY2ZiYTZkYSAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAKKysrIGIvV2ViS2l0L3F0L0Fw
aS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJx
d2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZS5oIgogI2luY2x1ZGUg
InF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luY29u
bmVjdG9yLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxY29va2llamFyLmgi
CiAjaW5jbHVkZSA8cWRlYnVnLmg+CkBAIC0zNjAsNyArMzU5LDcgQEAgdm9pZCBRV2ViTmV0d29y
a0pvYjo6c2V0RXJyb3JTdHJpbmcoY29uc3QgUVN0cmluZyYgZXJyb3JTdHJpbmcpCiAqLwogYm9v
bCBRV2ViTmV0d29ya0pvYjo6Y2FuY2VsbGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWQtPnJl
c291cmNlSGFuZGxlICYmICFkLT5jb25uZWN0b3I7CisgICAgcmV0dXJuICFkLT5yZXNvdXJjZUhh
bmRsZTsKIH0KIAogLyohCkBAIC00NDksNyArNDQ4LDYgQEAgYm9vbCBRV2ViTmV0d29ya01hbmFn
ZXI6OmFkZChSZXNvdXJjZUhhbmRsZSAqaGFuZGxlLCBRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50
ZXIKICAgICBoYW5kbGUtPmdldEludGVybmFsKCktPm1fam9iID0gam9iOwogICAgIGpvYi0+ZC0+
cmVzb3VyY2VIYW5kbGUgPSBoYW5kbGU7CiAgICAgam9iLT5kLT5pbnRlcmZhY2UgPSBpbnRlcmZh
Y2U7Ci0gICAgam9iLT5kLT5jb25uZWN0b3IgPSAwOwogCiAgICAgam9iLT5kLT5yZXF1ZXN0Lmlu
aXQoaGFuZGxlLT5yZXF1ZXN0KCkpOwogCkBAIC00NzgsNyArNDc2LDYgQEAgdm9pZCBRV2ViTmV0
d29ya01hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSAqaGFuZGxlKQogICAgICAgICByZXR1
cm47CiAgICAgREVCVUcoKSA8PCAiUVdlYk5ldHdvcmtNYW5hZ2VyOjpjYW5jZWw6IiA8PCAgam9i
LT5kLT5yZXF1ZXN0Lmh0dHBIZWFkZXIudG9TdHJpbmcoKTsKICAgICBqb2ItPmQtPnJlc291cmNl
SGFuZGxlID0gMDsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAgICAgam9iLT5kLT5pbnRl
cmZhY2UtPmNhbmNlbEpvYihqb2IpOwogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2Ig
PSAwOwogfQpAQCAtNDk1LDcgKzQ5Miw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFy
dGVkKFFXZWJOZXR3b3JrSm9iICpqb2IpCiAgICAgICAgIGNsaWVudCA9IGpvYi0+ZC0+cmVzb3Vy
Y2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3RvcikgeworICAgIH0gZWxzZSB7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU3MCw4ICs1NjcsNiBAQCB2b2lkIFFXZWJO
ZXR3b3JrTWFuYWdlcjo6c3RhcnRlZChRV2ViTmV0d29ya0pvYiAqam9iKQogCiAgICAgaWYgKGNs
aWVudCkKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLT5kLT5yZXNvdXJj
ZUhhbmRsZSwgcmVzcG9uc2UpOwotICAgIGlmIChqb2ItPmQtPmNvbm5lY3RvcikKLSAgICAgICAg
ZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+c3RhcnRlZChqb2IpOwogCiB9CiAKQEAgLTU4Niw3ICs1
ODEsNyBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pvYiAqam9i
LCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhKQogICAgICAgICBjbGllbnQgPSBqb2ItPmQtPnJlc291
cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5kLT5jb25uZWN0b3IpIHsKKyAgICB9IGVsc2Ug
ewogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01OTYsOCArNTkxLDYgQEAgdm9pZCBRV2Vi
TmV0d29ya01hbmFnZXI6OmRhdGEoUVdlYk5ldHdvcmtKb2IgKmpvYiwgY29uc3QgUUJ5dGVBcnJh
eSAmZGF0YSkKICAgICBERUJVRygpIDw8ICJyZWNlaXZlZERhdGEiIDw8IGpvYi0+ZC0+cmVxdWVz
dC51cmwucGF0aCgpOwogICAgIGlmIChjbGllbnQpCiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2
ZURhdGEoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSwgZGF0YS5jb25zdERhdGEoKSwgZGF0YS5sZW5n
dGgoKSwgZGF0YS5sZW5ndGgoKSAvKkZpeE1lKi8pOwotICAgIGlmIChqb2ItPmQtPmNvbm5lY3Rv
cikKLSAgICAgICAgZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+ZGF0YShqb2IsIGRhdGEpOwogCiB9
CiAKQEAgLTYxNiw3ICs2MDksNyBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZmluaXNoZWQo
UVdlYk5ldHdvcmtKb2IgKmpvYiwgaW50IGVycm9yQ29kZSkKICAgICAgICAgY2xpZW50ID0gam9i
LT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29ubmVjdG9yKSB7Cisg
ICAgfSBlbHNlIHsKICAgICAgICAgam9iLT5kZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNjQ0LDkgKzYzNyw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5pc2hlZChR
V2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGpvYi0+ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9y
LT5maW5pc2hlZChqb2IsIGVycm9yQ29kZSk7Ci0KICAgICBERUJVRygpIDw8ICJyZWNlaXZlZEZp
bmlzaGVkIGRvbmUiIDw8IGpvYi0+ZC0+cmVxdWVzdC51cmw7CiAKICAgICBqb2ItPmRlcmVmKCk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCBiL1dl
YktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCmluZGV4IGM3MTJhZTQuLjliNmY0
ZDAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCisr
KyBiL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCkBAIC01Nyw3ICs1Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgLCByZXNvdXJjZUhhbmRsZSgwKQogICAgICAgICAsIHJlZGly
ZWN0ZWQoZmFsc2UpCiAgICAgICAgICwgaW50ZXJmYWNlKDApCi0gICAgICAgICwgY29ubmVjdG9y
KDApCiAgICAgICAgICwgam9iU3RhdHVzKFFXZWJOZXR3b3JrSm9iOjpKb2JDcmVhdGVkKQogICAg
ICAgICB7fQogICAgIGludCByZWY7CkBAIC02OSw3ICs2OCw2IEBAIHB1YmxpYzoKICAgICBib29s
IHJlZGlyZWN0ZWQ7CiAKICAgICBRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50ZXJmYWNlOwotICAg
IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvcjsKICAgICBRV2ViTmV0d29ya0pv
Yjo6Sm9iU3RhdHVzIGpvYlN0YXR1czsKICAgICBRU3RyaW5nIGVycm9yU3RyaW5nOwogfTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgYi9XZWJLaXQvcXQv
QXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
MjRkNjA0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3
IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0jaW5j
bHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jaW5jbHVkZSA8cXdlYm9iamVjdHBsdWdpbmNv
bm5lY3Rvci5oPgotI2luY2x1ZGUgPHFjb3JlYXBwbGljYXRpb24uaD4KLSNpbmNsdWRlIDxxZmls
ZWluZm8uaD4KLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCi0jaWZuZGVmIFFUX05PX0xJ
QlJBUlkKLVFfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoUVdlYkZhY3RvcnlMb2FkZXIsIGxvYWRl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50
ZXJmYWNlX2lpZCwgUUNvcmVBcHBsaWNhdGlvbjo6bGlicmFyeVBhdGhzKCksIFFMYXRpbjFTdHJp
bmcoIi93ZWJwbHVnaW5zIikpKQotI2VuZGlmCi0KLQotUVdlYkZhY3RvcnlMb2FkZXI6OlFXZWJG
YWN0b3J5TG9hZGVyKGNvbnN0IGNoYXIgKmlpZCwgY29uc3QgUVN0cmluZ0xpc3QgJnBhdGhzLCBj
b25zdCBRU3RyaW5nICZzdWZmaXgsIFF0OjpDYXNlU2Vuc2l0aXZpdHkpCi0gICAgOiBRRmFjdG9y
eUxvYWRlcihpaWQsIHBhdGhzLCBzdWZmaXgpCi17Ci0gICAgUVN0cmluZ0xpc3QgcGx1Z2lucyA9
IGtleXMoKTsKLSAgICBmb3JlYWNoKFFTdHJpbmcgaywgcGx1Z2lucykgewotICAgICAgICBRV2Vi
T2JqZWN0UGx1Z2luICpwbHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVdlYk9iamVjdFBsdWdpbiAqPihp
bnN0YW5jZShrKSk7Ci0gICAgICAgIGlmICghcGx1Z2luKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIEluZm8gaW5mbzsKLSAgICAgICAgaW5mby5uYW1lID0gazsKLSAgICAgICAgaW5m
by5kZXNjcmlwdGlvbiA9IHBsdWdpbi0+ZGVzY3JpcHRpb25Gb3JLZXkoayk7Ci0gICAgICAgIFFT
dHJpbmdMaXN0IG1pbWV0eXBlcyA9IHBsdWdpbi0+bWltZXR5cGVzRm9yS2V5KGspOwotICAgICAg
ICBmb3JlYWNoKFFTdHJpbmcgbSwgbWltZXR5cGVzKSB7Ci0gICAgICAgICAgICBNaW1lSW5mbyBt
aW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gbTsKLSAgICAgICAgICAgIG1pbWUuZXh0ZW5z
aW9ucyA9IHBsdWdpbi0+ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKG0pOwotICAgICAgICAgICAgaW5m
by5taW1lcyA8PCBtaW1lOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luSW5mby5hcHBlbmQo
aW5mbyk7Ci0gICAgfQotfQotCi1RV2ViRmFjdG9yeUxvYWRlciAqUVdlYkZhY3RvcnlMb2FkZXI6
OnNlbGYoKQotewotICAgIHJldHVybiBsb2FkZXIoKTsKLX0KLQotCi1RU3RyaW5nIFFXZWJGYWN0
b3J5TG9hZGVyOjpkZXNjcmlwdGlvbkZvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdAot
ewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAg
IGlmIChpbmZvLm5hbWUgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGluZm8uZGVzY3JpcHRp
b247Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLVFTdHJpbmdMaXN0IFFXZWJG
YWN0b3J5TG9hZGVyOjptaW1ldHlwZXNGb3JOYW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3QK
LXsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1Z2luSW5mbykgewotICAgICAg
ICBpZiAoaW5mby5uYW1lID09IGtleSkgewotICAgICAgICAgICAgUVN0cmluZ0xpc3QgbWltZXR5
cGVzOwotICAgICAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMp
Ci0gICAgICAgICAgICAgICAgbWltZXR5cGVzLmFwcGVuZChtLnR5cGUpOwotICAgICAgICAgICAg
cmV0dXJuIG1pbWV0eXBlczsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gUVN0cmluZ0xp
c3QoKTsKLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6bWltZVR5cGVGb3JFeHRlbnNp
b24oY29uc3QgUVN0cmluZyAmZXh0ZW5zaW9uKQotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAm
aW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZvICZt
LCBpbmZvLm1pbWVzKSB7Ci0gICAgICAgICAgICBpZiAobS5leHRlbnNpb25zLmNvbnRhaW5zKGV4
dGVuc2lvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG0udHlwZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0KLVFTdHJpbmdMaXN0IFFXZWJGYWN0b3J5
TG9hZGVyOjpleHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25z
OwotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAg
IGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgZXh0
ZW5zaW9ucyA8PCBtLmV4dGVuc2lvbnM7Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nTGlzdCgp
OwotCi19Ci0KLVFTdHJpbmcgUVdlYkZhY3RvcnlMb2FkZXI6Om5hbWVGb3JNaW1ldHlwZShjb25z
dCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QKLXsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmlu
Zm8sIG1fcGx1Z2luSW5mbykgewotICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwg
aW5mby5taW1lcykKLSAgICAgICAgICAgIGlmIChtLnR5cGUgPT0gbWltZVR5cGUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGluZm8ubmFtZTsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsK
LX0KLQotUU9iamVjdCAqUVdlYkZhY3RvcnlMb2FkZXI6OmNyZWF0ZShRV2ViRnJhbWUgKmZyYW1l
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJl9taW1lVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3Qg
JmFyZ3VtZW50TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykKLXsKLSAgICBRU3RyaW5nIG1pbWVUeXBlID0g
X21pbWVUeXBlOwotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUUZpbGVJ
bmZvIGZpKHVybC5wYXRoKCkpOwotICAgICAgICBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5z
aW9uKGZpLnN1ZmZpeCgpKTsKLSAgICB9Ci0gICAgUVN0cmluZyBuYW1lID0gbmFtZUZvck1pbWV0
eXBlKG1pbWVUeXBlKTsKLSAgICBRV2ViT2JqZWN0UGx1Z2luICpwbHVnaW4gPSBxb2JqZWN0X2Nh
c3Q8UVdlYk9iamVjdFBsdWdpbiAqPihpbnN0YW5jZShuYW1lKSk7Ci0gICAgaWYgKCFwbHVnaW4p
Ci0gICAgICAgIHJldHVybiAwOwotICAgIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNvbm5l
Y3RvciA9IG5ldyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKGZyYW1lKTsKLSAgICByZXR1cm4g
cGx1Z2luLT5jcmVhdGUoY29ubmVjdG9yLCB1cmwsIG1pbWVUeXBlLCBhcmd1bWVudE5hbWVzLCBh
cmd1bWVudFZhbHVlcyk7Ci19Ci0KLQotCi0vKiEgXGNsYXNzIFFXZWJPYmplY3RQbHVnaW4KLQot
ICBUaGlzIGNsYXNzIGlzIGEgcGx1Z2luIGZvciB0aGUgSFRNTCBvYmplY3QgdGFnLiBJdCBjYW4g
YmUgdXNlZCB0byBlbWJlZCBhcmJpdHJhcnkgY29udGVudCBpbiBhIHdlYiBwYWdlLgotKi8KLQot
Ci1RV2ViT2JqZWN0UGx1Z2luOjpRV2ViT2JqZWN0UGx1Z2luKFFPYmplY3QgKnBhcmVudCkKLSAg
ICA6IFFPYmplY3QocGFyZW50KQotewotfQotCi1RV2ViT2JqZWN0UGx1Z2luOjp+UVdlYk9iamVj
dFBsdWdpbigpCi17Ci19Ci0KLS8qIQotICBcZm4gUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdp
bjo6a2V5cygpIGNvbnN0Ci0KLSAgVGhlIGtleXMgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lcy4KLSov
Ci0KLS8qIQotICBBIGRlc2NyaXB0aW9uIGZvciBcYSBrZXkuCi0qLwotUVN0cmluZyBRV2ViT2Jq
ZWN0UGx1Z2luOjpkZXNjcmlwdGlvbkZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotLyohCi0gIHJldHVybnMgdGhlIG1pbWV0eXBl
cyB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IFxhIGtleS4KLSovCi1RU3RyaW5nTGlzdCBRV2ViT2Jq
ZWN0UGx1Z2luOjptaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdAotewot
ICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0KLS8qIQotICBcZm4gUVN0cmluZ0xpc3Qg
UVdlYk9iamVjdFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKCkgY29uc3QKLQotICBTaG91
bGQgcmV0dXJuIGEgbGlzdCBvZiBleHRlbnNpb25zIHRoYXQgYXJlIHJlY29nbmlzZWQgdG8gbWF0
Y2ggdGhlIFxhIG1pbWVUeXBlLgotKi8KLVFTdHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46OmV4
dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLX0KLQotLyohCi0gIFxmbiBRT2JqZWN0ICpRV2ViT2Jq
ZWN0UGx1Z2luOjpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLCBj
b25zdCBRVXJsICZ1cmwsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLCBjb25zdCBRU3RyaW5nTGlz
dCAmYXJndW1lbnROYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25z
dAotCi0gIENyZWF0ZXMgYSBRT2JqZWN0IHdpdGggXGEgY29ubmVjdG9yIHRvIGhhbmRsZSBcYSBt
aW1lVHlwZS4gXGEgYXJndW1lbnROYW1lcyBhbmQgXGEgYXJndW1lbnRWYWx1ZXMgYXJlIGEgc2V0
IG9mIGtleS12YWx1ZSBwYWlycyBwYXNzZWQgZGlyZWN0bHkKLSAgZnJvbSB0aGUgJmx0O3BhcmFt
Jmd0OyBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIEhUTUwgb2JqZWN0IHRhZy4KLSovCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2M3Y2FmNy4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4u
aAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gIENvcHlyaWdodCAoQykgMjAw
NyBUcm9sbHRlY2ggQVNBCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotI2lm
bmRlZiBRV0VCT0JKRUNUUExVR0lOX0gKLSNkZWZpbmUgUVdFQk9CSkVDVFBMVUdJTl9ICi0KLSNp
bmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXRDb3JlL3FwbHVnaW4uaD4KLSNp
bmNsdWRlIDxRdENvcmUvcWZhY3RvcnlpbnRlcmZhY2UuaD4KLQotI2lmIFFUX1ZFUlNJT04gPCAw
eDA0MDQwMAotCi1jbGFzcyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOwotY2xhc3MgUVVybDsK
LQotc3RydWN0IFFXRUJLSVRfRVhQT1JUIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNl
IDogcHVibGljIFFGYWN0b3J5SW50ZXJmYWNlCi17Ci0gICAgdmlydHVhbCBRT2JqZWN0ICpjcmVh
dGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0gMDsKLX07Ci0K
LSNkZWZpbmUgUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2VfaWlkICJjb20udHJvbGx0
ZWNoLlF0LlFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlIgotUV9ERUNMQVJFX0lOVEVS
RkFDRShRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZSwgUVdlYk9iamVjdFBsdWdpbkZh
Y3RvcnlJbnRlcmZhY2VfaWlkKQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViT2JqZWN0UGx1
Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVy
ZmFjZQotewotICAgIFFfT0JKRUNUCi0gICAgUV9JTlRFUkZBQ0VTKFFXZWJPYmplY3RQbHVnaW5G
YWN0b3J5SW50ZXJmYWNlOlFGYWN0b3J5SW50ZXJmYWNlKQotcHVibGljOgotICAgIGV4cGxpY2l0
IFFXZWJPYmplY3RQbHVnaW4oUU9iamVjdCAqcGFyZW50ID0gMCk7Ci0gICAgdmlydHVhbCB+UVdl
Yk9iamVjdFBsdWdpbigpOwotCi0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Qg
PSAwOwotCi0gICAgdmlydHVhbCBRU3RyaW5nIGRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJp
bmcgJmtleSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBtaW1ldHlwZXNGb3JLZXko
Y29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGV4dGVu
c2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMp
IGNvbnN0ID0gMDsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVn
aW5fcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjAyNjFmLi4wMDAwMDAwCi0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw3NiArMCwwIEBACi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fUF9ICi0jZGVmaW5lIFFXRUJP
QkpFQ1RQTFVHSU5fUF9ICi0KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgotI2luY2x1ZGUg
InF3ZWJvYmplY3RwbHVnaW4uaCIKLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCi0vKgot
ICBGSVhNRTogVGhpcyBpcyBjb3BpZWQgZnJvbSBxZmFjdG9yeWxvYWRlcl9wLmguCi0gIFJlbW92
ZSB0aGlzIG9uY2Ugd2UgbWFkZSBxZmFjdG9yeWxvYWRlciBwdWJsaWMgaW4gUXQKLSovCi1jbGFz
cyBRRmFjdG9yeUxvYWRlclByaXZhdGU7Ci0KLWNsYXNzIFFfQ09SRV9FWFBPUlQgUUZhY3RvcnlM
b2FkZXIgOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNUX0ZBS0UKLSAgICBRX0RFQ0xB
UkVfUFJJVkFURShRRmFjdG9yeUxvYWRlcikKLQotcHVibGljOgotICAgIFFGYWN0b3J5TG9hZGVy
KGNvbnN0IGNoYXIgKmlpZCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAm
cGF0aHMgPSBRU3RyaW5nTGlzdCgpLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcg
JnN1ZmZpeCA9IFFTdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICBRdDo6Q2FzZVNlbnNpdGl2
aXR5ID0gUXQ6OkNhc2VTZW5zaXRpdmUpOwotICAgIH5RRmFjdG9yeUxvYWRlcigpOwotCi0gICAg
UVN0cmluZ0xpc3Qga2V5cygpIGNvbnN0OwotICAgIFFPYmplY3QgKmluc3RhbmNlKGNvbnN0IFFT
dHJpbmcgJmtleSkgY29uc3Q7Ci0KLX07Ci0KLWNsYXNzIFFXZWJGcmFtZTsKLQotY2xhc3MgUVdl
YkZhY3RvcnlMb2FkZXIgOiBwdWJsaWMgUUZhY3RvcnlMb2FkZXIKLXsKLSAgICBRX09CSkVDVAot
cHVibGljOgotICAgIFFXZWJGYWN0b3J5TG9hZGVyKGNvbnN0IGNoYXIgKmlpZCwKLSAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGF0aHMgPSBRU3RyaW5nTGlzdCgpLAot
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCA9IFFTdHJpbmcoKSwK
LSAgICAgICAgICAgICAgICAgICAgICBRdDo6Q2FzZVNlbnNpdGl2aXR5ID0gUXQ6OkNhc2VTZW5z
aXRpdmUpOwotCi0gICAgc3RhdGljIFFXZWJGYWN0b3J5TG9hZGVyICpzZWxmKCk7Ci0KLSAgICBR
U3RyaW5nTGlzdCBuYW1lcygpIGNvbnN0IHsgcmV0dXJuIGtleXMoKTsgfQotICAgIFFTdHJpbmdM
aXN0IGV4dGVuc2lvbnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGRlc2NyaXB0aW9uRm9yTmFtZShj
b25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zvck5h
bWUoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICBRU3RyaW5nIG5hbWVGb3JNaW1ldHlw
ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAgaW5saW5lIGJvb2wgc3VwcG9y
dHNNaW1lVHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QgewotICAgICAgICByZXR1
cm4gIW5hbWVGb3JNaW1ldHlwZShtaW1lVHlwZSkuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIFFT
dHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgUVN0cmluZyAmZXh0ZW5zaW9uKTsKLQot
ICAgIFFPYmplY3QgKmNyZWF0ZShRV2ViRnJhbWUgKmZyYW1lLAotICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1p
bWVUeXBlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRO
YW1lcywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFs
dWVzKTsKLQotICAgIHN0cnVjdCBNaW1lSW5mbyB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAg
ICAgICAgUVN0cmluZ0xpc3QgZXh0ZW5zaW9uczsKLSAgICB9OwotICAgIHN0cnVjdCBJbmZvIHsK
LSAgICAgICAgUVN0cmluZyBuYW1lOwotICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOwotICAg
ICAgICBRTGlzdDxNaW1lSW5mbz4gbWltZXM7Ci0gICAgfTsKLSAgICBRTGlzdDxJbmZvPiBtX3Bs
dWdpbkluZm87Ci19OwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vib2Jq
ZWN0cGx1Z2luY29ubmVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUz
YzE2NC4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0
b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKLSAgCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAgCi0gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gIAotKi8KLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgiCi0jaWYgUVRf
VkVSU0lPTiA8IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIKLSNp
bmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lLmgi
Ci0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLQotc3RydWN0IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0
b3JQcml2YXRlCi17Ci0gICAgUVdlYkZyYW1lICpmcmFtZTsKLX07Ci0KLVFXZWJPYmplY3RQbHVn
aW5Db25uZWN0b3I6OlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoUVdlYkZyYW1lICpmcmFtZSkK
LXsKLSAgICBkID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRlOwotICAgIGQt
PmZyYW1lID0gZnJhbWU7Ci19Ci0KLVFXZWJGcmFtZSAqUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rv
cjo6ZnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBkLT5mcmFtZTsKLX0KLQotUVdpZGdldCAq
UVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6cGx1Z2luUGFyZW50V2lkZ2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZC0+ZnJhbWUtPnBhZ2UoKS0+dmlldygpOwotfQotCi1RV2ViTmV0d29ya0pv
YiAqUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6cmVxdWVzdFVybChjb25zdCBRV2ViTmV0d29y
a1JlcXVlc3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBQ
bHVnaW4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUVdlYk5ldHdvcmtKb2IgKmpvYiA9IG5l
dyBRV2ViTmV0d29ya0pvYjsKLSAgICBRV2ViTmV0d29ya0pvYlByaXZhdGUgKnAgPSBqb2ItPmQ7
Ci0gICAgcC0+aW50ZXJmYWNlID0gZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29ya0ludGVyZmFjZSgp
OwotICAgIHAtPmNvbm5lY3RvciA9IHRoaXM7Ci0KLSAgICBwLT5yZXF1ZXN0ID0gKnJlcXVlc3Qu
ZDsKLQotICAgIGQtPmZyYW1lLT5wYWdlKCktPm5ldHdvcmtJbnRlcmZhY2UoKS0+YWRkSm9iKGpv
Yik7Ci0gICAgcmV0dXJuIGpvYjsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVj
dHBsdWdpbmNvbm5lY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjI1MWEz
Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3
IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0jaWZu
ZGVmIFFXRUJPQkpFQ1RQTFVHSU5DT05ORUNUT1JfSAotI2RlZmluZSBRV0VCT0JKRUNUUExVR0lO
Q09OTkVDVE9SX0gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdENv
cmUvcW9iamVjdC5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLSNpbmNsdWRlICJx
d2VibmV0d29ya2ludGVyZmFjZS5oIgotCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBRV2ViUGFn
ZTsKLWNsYXNzIFFXaWRnZXQ7Ci1jbGFzcyBRVXJsOwotY2xhc3MgUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvclByaXZhdGU7Ci1jbGFzcyBRV2ViRmFjdG9yeUxvYWRlcjsKLWNsYXNzIFFXZWJOZXR3
b3JrTWFuYWdlcjsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdpbkNvbm5l
Y3RvciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRV2Vi
RnJhbWUgKmZyYW1lKCkgY29uc3Q7Ci0gICAgUVdpZGdldCAqcGx1Z2luUGFyZW50V2lkZ2V0KCkg
Y29uc3Q7Ci0KLSAgICBlbnVtIFRhcmdldCB7Ci0gICAgICAgIFBsdWdpbiwKLSAgICAgICAgTmV3
LAotICAgICAgICBTZWxmLAotICAgICAgICBQYXJlbnQsCi0gICAgICAgIFRvcAotICAgIH07Ci0g
ICAgUVdlYk5ldHdvcmtKb2IgKnJlcXVlc3RVcmwoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZy
ZXF1ZXN0LCBUYXJnZXQgdGFyZ2V0ID0gUGx1Z2luKTsKLQotc2lnbmFsczoKLSAgICB2b2lkIHN0
YXJ0ZWQoUVdlYk5ldHdvcmtKb2IqKTsKLSAgICB2b2lkIGRhdGEoUVdlYk5ldHdvcmtKb2IqLCBj
b25zdCBRQnl0ZUFycmF5ICZkYXRhKTsKLSAgICB2b2lkIGZpbmlzaGVkKFFXZWJOZXR3b3JrSm9i
KiwgaW50IGVycm9yQ29kZSk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJGYWN0
b3J5TG9hZGVyOwotICAgIGZyaWVuZCBjbGFzcyBRV2ViTmV0d29ya01hbmFnZXI7Ci0gICAgUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvcihRV2ViRnJhbWUgKmZyYW1lKTsKLQotICAgIFFXZWJPYmpl
Y3RQbHVnaW5Db25uZWN0b3JQcml2YXRlICpkOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcAppbmRleCA2ZTVlOTg0Li40MTIxYTQxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMTI4LDYg
KzEyOCw3IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkK
ICAgICBuZXR3b3JrSW50ZXJmYWNlID0gMDsKICNlbHNlCiAgICAgbmV0d29ya01hbmFnZXIgPSAw
OworICAgIHBsdWdpbkZhY3RvcnkgPSAwOwogI2VuZGlmCiAgICAgaW5zaWRlT3BlbkNhbGwgPSBm
YWxzZTsKIApAQCAtMTQwNiw2ICsxNDA3LDE2IEBAIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdl
YlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKICAgICByZXR1cm4gZC0+bmV0d29y
a01hbmFnZXI7CiB9CiAKK3ZvaWQgUVdlYlBhZ2U6OnNldFBsdWdpbkZhY3RvcnkoUVdlYlBsdWdp
bkZhY3RvcnkgKmZhY3RvcnkpCit7CisgICAgZC0+cGx1Z2luRmFjdG9yeSA9IGZhY3Rvcnk7Cit9
CisKK1FXZWJQbHVnaW5GYWN0b3J5ICpRV2ViUGFnZTo6cGx1Z2luRmFjdG9yeSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGQtPnBsdWdpbkZhY3Rvcnk7Cit9CisKICNlbmRpZgogCiAvKiEKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
aAppbmRleCBlNzZmOTM1Li44NTU3YzMxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC00Miw2ICs0Miw3IEBAIGNs
YXNzIFFXZWJIaXN0b3J5OwogY2xhc3MgUVdlYlBhZ2VQcml2YXRlOwogY2xhc3MgUVdlYkZyYW1l
RGF0YTsKIGNsYXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlOworY2xhc3MgUVdlYlBsdWdpbkZhY3Rv
cnk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKQEAg
LTE3MSw2ICsxNzIsOSBAQCBwdWJsaWM6CiAjZWxzZQogICAgIHZvaWQgc2V0TmV0d29ya0FjY2Vz
c01hbmFnZXIoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2VyKTsKICAgICBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIgKm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFBsdWdpbkZhY3RvcnkoUVdlYlBsdWdpbkZhY3RvcnkgKmZhY3RvcnkpOworICAgIFFXZWJQbHVn
aW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHF1aW50NjQg
dG90YWxCeXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9w
LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAppbmRleCA4MGIxZTI5Li42NGVkZDMyIDEw
MDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAorKysgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlX3AuaApAQCAtMTU0LDYgKzE1NCwxMCBAQCBwdWJsaWM6CiAgICAgUVdlYlNldHRp
bmdzICpzZXR0aW5nczsKIAogICAgIFFBY3Rpb24gKmFjdGlvbnNbUVdlYlBhZ2U6OldlYkFjdGlv
bkNvdW50XTsKKworI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKKyAgICBRV2ViUGx1Z2luRmFj
dG9yeSAqcGx1Z2luRmFjdG9yeTsKKyNlbmRpZgogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBs
dWdpbmZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYWQw
OGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNw
cApAQCAtMCwwICsxLDE2IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdlYnBs
dWdpbmZhY3RvcnkuaCIKKworUVdlYlBsdWdpbkZhY3Rvcnk6OlFXZWJQbHVnaW5GYWN0b3J5KFFP
YmplY3QgKnBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQoreworfQorCitRV2ViUGx1Z2lu
RmFjdG9yeTo6flFXZWJQbHVnaW5GYWN0b3J5KCkKK3sKK30KKwordm9pZCBRV2ViUGx1Z2luRmFj
dG9yeTo6cmVsb2FkKCkKK3sKK30KKwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1
Z2luZmFjdG9yeS5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Yjk1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAg
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKworICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisKKyovCisjaWZuZGVmIFFXRUJQTFVHSU5GQUNUT1JZX0gKKyNkZWZpbmUgUVdFQlBM
VUdJTkZBQ1RPUllfSAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8
UXRDb3JlL3FvYmplY3QuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXN0cmluZ2xpc3QuaD4KKworY2xh
c3MgUVVybDsKK2NsYXNzIFFXZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZTsKK2NsYXNzIFFTdHJpbmc7
CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJQbHVnaW5GYWN0b3J5IDogcHVibGljIFFPYmpl
Y3QKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHN0cnVjdCBNaW1lVHlwZSB7CisgICAg
ICAgIFFTdHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAg
UVN0cmluZ0xpc3Qgc3VmZml4ZXM7CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW4geworICAg
ICAgICBRU3RyaW5nIG5hbWU7CisgICAgICAgIFFTdHJpbmcgZGVzY3JpcHRpb247CisgICAgICAg
IFFMaXN0PE1pbWVUeXBlPiBtaW1lVHlwZXM7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFFXZWJQ
bHVnaW5GYWN0b3J5KFFPYmplY3QgKnBhcmVudCA9IDApOworICAgIHZpcnR1YWwgflFXZWJQbHVn
aW5GYWN0b3J5KCk7CisKKyAgICB2aXJ0dWFsIFFMaXN0PFBsdWdpbj4gcGx1Z2lucygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsb2FkKCk7CisKKyAgICB2aXJ0dWFsIFFPYmplY3Qg
KmNyZWF0ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRVXJsICZ1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6
CisgICAgUVdlYlBsdWdpbkZhY3RvcnlQcml2YXRlICpkOworfTsKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAgYi9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKaW5kZXggYmI2
ZmI5NS4uNTI3MzViOCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgpA
QCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJm
cmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYmhpc3RvcnlpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJx
d2VicGx1Z2luZmFjdG9yeS5oIgogCiAjaW5jbHVkZSA8cWZpbGVpbmZvLmg+CiAKQEAgLTYwLDcg
KzYyLDYgQEAKICNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgogI2Vsc2UKICNpbmNsdWRlICJxd2Vi
bmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTkxMiwxMSArOTEzLDggQEAgT2JqZWN0Q29u
dGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEltYWdlOwog
Ci0gICAgLy8gIyMjIEZJWE1FIFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAg
IGlmIChRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBl
KSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKLSNlbmRpZgor
ICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCkt
PnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUpKQorICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVu
dE90aGVyUGx1Z2luOwogCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9u
SW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJh
bWU7CkBAIC05NzcsMTEgKzk3NSwxMSBAQCBXaWRnZXQqIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNy
ZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwgY29ucwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgLy8gIyMjIEZJWE1FOiBxdCA0LjQKLSNpZiBRVF9WRVJTSU9OIDwg
MHgwNDA0MDAKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgb2JqZWN0ID0gUVdlYkZhY3RvcnlM
b2FkZXI6OnNlbGYoKS0+Y3JlYXRlKG1fd2ViRnJhbWUsIHF1cmwsIG1pbWVUeXBlLCBwYXJhbXMs
IHZhbHVlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBRV2ViUGx1Z2lu
RmFjdG9yeSogZmFjdG9yeSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2luRmFjdG9yeSgpOwor
ICAgICAgICBpZiAoZmFjdG9yeSkKKyAgICAgICAgICAgIG9iamVjdCA9IGZhY3RvcnktPmNyZWF0
ZShtaW1lVHlwZSwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOworICAgIH0KIAogICAgIGlmIChvYmpl
Y3QpIHsKICAgICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gcW9iamVjdF9jYXN0PFFXaWRnZXQgKj4o
b2JqZWN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBS
ZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJU
cmVlLmNwcAppbmRleCA1ZGY4YTM4Li4yZTQ5NzBhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgImpzb2JqZWN0cy5oIgorI2luY2x1
ZGUgInRlc3RwbHVnaW4uaCIKIAogI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUZpbGU+CkBA
IC04Nyw2ICs4OCw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUVdpZGdldCAqcGFyZW50LCBEdW1wUmVu
ZGVyVHJlZSAqZHJ0KQogICAgIHNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6
OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4sIGZhbHNlKTsKICAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChnZW9tZXRyeUNoYW5nZVJlcXVlc3QoY29uc3QgUVJlY3QgJikpLAogICAgICAgICAgICAg
dGhpcywgU0xPVChzZXRWaWV3R2VvbWV0cnkoY29uc3QgUVJlY3QgJiApKSk7CisKKyAgICBzZXRQ
bHVnaW5GYWN0b3J5KG5ldyBUZXN0UGx1Z2luKHRoaXMpKTsKIH0KIAogUVdlYlBhZ2UgKldlYlBh
Z2U6OmNyZWF0ZVdpbmRvdygpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9tYWluLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCmlu
ZGV4IGRkNGMwZTkuLjczOGJlN2YgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4u
Y3BwCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgi
Ci0jaW5jbHVkZSAidGVzdHBsdWdpbi5oIgogCiAjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KICNp
bmNsdWRlIDxxYXBwbGljYXRpb24uaD4KQEAgLTQ5LDEwICs0OCw2IEBACiAjaW5jbHVkZSA8ZXhl
Y2luZm8uaD4KICNlbmRpZgogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi1RX0lNUE9SVF9Q
TFVHSU4odGVzdHBsdWdpbikKLSNlbmRpZgotCiB2b2lkIG1lc3NhZ2VIYW5kbGVyKFF0TXNnVHlw
ZSB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIGlmICh0eXBlID09IFF0Q3JpdGlj
YWxNc2cpIHsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3Rw
bHVnaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAK
aW5kZXggMjc1NThjOS4uYWU4MjIwMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvdGVzdHBsdWdpbi5jcHAKQEAgLTI3LDEwICsyNyw4IEBACiAgKi8KICNpbmNsdWRlICJ0ZXN0
cGx1Z2luLmgiCiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLQogVGVzdFBsdWdpbjo6VGVz
dFBsdWdpbihRT2JqZWN0ICpwYXJlbnQpCi0gICAgOiBRV2ViT2JqZWN0UGx1Z2luKHBhcmVudCkK
KyAgICA6IFFXZWJQbHVnaW5GYWN0b3J5KHBhcmVudCkKIHsKIH0KIApAQCAtMzgsMzQgKzM2LDMy
IEBAIFRlc3RQbHVnaW46On5UZXN0UGx1Z2luKCkKIHsKIH0KIAotUVN0cmluZ0xpc3QgVGVzdFBs
dWdpbjo6a2V5cygpIGNvbnN0CitRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBUZXN0
UGx1Z2luOjpwbHVnaW5zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGlu
MVN0cmluZygidGVzdHBsdWdpbiIpKTsKLX0KKyAgICBRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2lu
IHBsdWdpbjsKIAotUVN0cmluZyBUZXN0UGx1Z2luOjpkZXNjcmlwdGlvbkZvcktleShjb25zdCBR
U3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFMYXRpbjFTdHJpbmcoInRlc3RkZXNjcmlw
dGlvbiIpOwotfQorICAgIHBsdWdpbi5uYW1lID0gInRlc3RwbHVnaW4iOworICAgIHBsdWdpbi5k
ZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24iOworICAgIE1pbWVUeXBlIG1pbWVUeXBlOwor
ICAgIG1pbWVUeXBlLm5hbWUgPSAidGVzdHR5cGUiOworICAgIG1pbWVUeXBlLnN1ZmZpeGVzLmFw
cGVuZCgidGVzdHN1ZmZpeGVzIik7CisgICAgcGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5
cGUpOwogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2luOjptaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0
cmluZyAmKSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3RyaW5nKCJ0
ZXN0dHlwZSIpKTsKLX0KKyAgICBwbHVnaW4ubmFtZSA9ICJ0ZXN0cGx1Z2luMiI7CisgICAgcGx1
Z2luLmRlc2NyaXB0aW9uID0gInRlc3RkZXNjcmlwdGlvbjIiOworICAgIG1pbWVUeXBlLm5hbWUg
PSAidGVzdHR5cGUyIjsKKyAgICBtaW1lVHlwZS5zdWZmaXhlcy5hcHBlbmQoInRlc3RzdWZmaXhl
czIiKTsKKyAgICBtaW1lVHlwZS5zdWZmaXhlcy5hcHBlbmQoInRlc3RzdWZmaXhlczMiKTsKKyAg
ICBwbHVnaW4ubWltZVR5cGVzLmFwcGVuZChtaW1lVHlwZSk7CiAKLVFTdHJpbmdMaXN0IFRlc3RQ
bHVnaW46OmV4dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRpbjFTdHJpbmcoInRlc3RzdWZmaXhlcyIpKTsKKyAg
ICByZXR1cm4gUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4oKSA8PCBwbHVnaW47CiB9
CiAKLVFPYmplY3QgKlRlc3RQbHVnaW46OmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9y
ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmdMaXN0ICYpIGNvbnN0CitRT2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUo
Y29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUVVybCAmdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdM
aXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFT
dHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAot
UV9FWFBPUlRfUExVR0lOMih0ZXN0cGx1Z2luLCBUZXN0UGx1Z2luKQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmggYi9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmgKaW5kZXggZTMwNTA2OS4uZWNmZDk3
NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5o
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaApAQCAtMjUs
MjggKzI1LDIxIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNs
dWRlIDxxZ2xvYmFsLmg+Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0jZGVmaW5lIFFUX1NU
QVRJQ1BMVUdJTgotI2luY2x1ZGUgPHF3ZWJvYmplY3RwbHVnaW4uaD4KKyNpbmNsdWRlIDxxd2Vi
cGx1Z2luZmFjdG9yeS5oPgogCiAKLWNsYXNzIFRlc3RQbHVnaW4gOiBwdWJsaWMgUVdlYk9iamVj
dFBsdWdpbgorY2xhc3MgVGVzdFBsdWdpbiA6IHB1YmxpYyBRV2ViUGx1Z2luRmFjdG9yeQogewog
cHVibGljOgogICAgIGV4cGxpY2l0IFRlc3RQbHVnaW4oUU9iamVjdCAqcGFyZW50ID0gMCk7CiAg
ICAgdmlydHVhbCB+VGVzdFBsdWdpbigpOwogCi0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBrZXlz
KCkgY29uc3Q7CisgICAgdmlydHVhbCBRTGlzdDxQbHVnaW4+IHBsdWdpbnMoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgUVN0cmluZyBkZXNjcmlwdGlvbkZvcktleShjb25zdCBRU3RyaW5nICZrZXkp
IGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgbWltZXR5cGVzRm9yS2V5KGNvbnN0IFFT
dHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBleHRlbnNpb25zRm9y
TWltZXR5cGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgUU9i
amVjdCAqY3JlYXRlKFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvciwKKyAgICB2
aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdDsKKwog
fTsKIAotI2VuZGlmCg==
</data>
<flag name="review"
          id="8381"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19345</attachid>
            <date>2008-02-25 05:55:59 -0800</date>
            <delta_ts>2008-02-26 08:16:04 -0800</delta_ts>
            <desc>diff against the previous patch</desc>
            <filename>diff_delta.txt</filename>
            <type>text/plain</type>
            <size>25188</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IDg4ODQyMDYuLmUwZjAxYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDI1LDYgKzQyNSw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05hbWVk
Tm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rp
b24uY3BwICBcCisgICAgYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwICBcCiAgICAg
YmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ29uZGl0aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDNlY2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcApAQCAtMCwwICsxLDExNyBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
KyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgiCisKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIk5hdmlnYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBLSlM7CisKK3N0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1l
Kik7CisKKyNpZiAhUExBVEZPUk0oV0lOKQorCitzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNZb3VU
dWJlUXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
I2Vsc2UKKworc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBG
cmFtZSogZnJhbWUpCit7CisgICAgLy8gVGhpcyBxdWlyayB3b3JrcyBhcm91bmQgYSBtaXN0YWtl
biBjaGVjayBpbiBhbiBhZCBhdCB5b3V0dWJlLmNvbS4KKyAgICAvLyBUaGVyZSdzIGEgZnVuY3Rp
b24gY2FsbGVkIGlzU2FmYXJpIHRoYXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24KKyAg
ICAvLyBjYWxsZWQgaXNXaW5kb3dzIHJldHVybnMgdHJ1ZTsgdGh1cyB0aGUgc2l0ZSBtYWxmdW5j
dGlvbnMgd2l0aCBXaW5kb3dzIFNhZmFyaS4KKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlm
IHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgImlzV2luZG93cyIuCisgICAgRnVuY3Rpb25JbXAqIGZ1
bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBpZiAoIWZ1bmN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXImIGlzV2luZG93c0Z1bmN0
aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNXaW5kb3dzIik7CisgICAgaWYgKGZ1bmN0aW9u
LT5mdW5jdGlvbk5hbWUoKSAhPSBpc1dpbmRvd3NGdW5jdGlvbk5hbWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbiBpcyBj
YWxsZWQgYnkgYW4gImlzU2FmYXJpIiBmdW5jdGlvbi4KKyAgICAvLyBIb3dldmVyLCB0aGF0IGZ1
bmN0aW9uIGlzIG5vdCBpdHNlbGYgbmFtZWQgLS0gaXQgaXMgc3RvcmVkIGluIHRoZSBpc1NhZmFy
aQorICAgIC8vIHByb3BlcnR5LCB0aG91Z2gsIHNvIHRoYXQncyBob3cgd2UgcmVjb2duaXplIGl0
LgorICAgIEV4ZWNTdGF0ZSogY2FsbGluZ0V4ZWMgPSBleGVjLT5jYWxsaW5nRXhlY1N0YXRlKCk7
CisgICAgaWYgKCFjYWxsaW5nRXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZ1bmN0
aW9uSW1wKiBjYWxsaW5nRnVuY3Rpb24gPSBjYWxsaW5nRXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBp
ZiAoIWNhbGxpbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0gY2FsbGluZ0V4ZWMtPnRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc09i
amVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVy
JiBpc1NhZmFyaUZ1bmN0aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNTYWZhcmkiKTsKKyAg
ICBKU1ZhbHVlKiBpc1NhZmFyaUZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2Fm
YXJpRnVuY3Rpb25OYW1lKTsKKyAgICBpZiAoaXNTYWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVu
Y3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgIC8vIEZJWE1FOiBUaGUgZG9jdW1lbnQgaXMgbmV2ZXIg
bnVsbCwgc28gd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGNoZWNrIGFsb25nIHdpdGggdGhlCisgICAg
Ly8gb3RoZXIgc2ltaWxhciBvbmVzIGluIHRoaXMgZmlsZSB3aGVuIHdlIGFyZSBhYnNvbHV0ZWx5
IHN1cmUgaXQncyBzYWZlLgorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IG9uIHRoZSBmcm9udCBwYWdlIG9mIHRoZSBn
bG9iYWwgdmVyc2lvbiBvZiBZb3VUdWJlLgorICAgIGNvbnN0IEtVUkwmIHVybCA9IGRvY3VtZW50
LT51cmwoKTsKKyAgICBpZiAodXJsLmhvc3QoKSAhPSAieW91dHViZS5jb20iICYmIHVybC5ob3N0
KCkgIT0gInd3dy55b3V0dWJlLmNvbSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
dXJsLnBhdGgoKSAhPSAiLyIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFzIHdp
dGggb3RoZXIgc2l0ZS1zcGVjaWZpYyBxdWlya3MsIGFsbG93IHdlYnNpdGUgZGV2ZWxvcGVycyB0
byB0dXJuIHRoaXMgb2ZmLgorICAgIC8vIEluIHRoZW9yeSwgdGhpcyBhbGxvd3Mgd2Vic2l0ZSBk
ZXZlbG9wZXJzIHRvIGNoZWNrIGlmIHRoZWlyIGZpeGVzIGFyZSBlZmZlY3RpdmUuCisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisjZW5kaWYKKworSlNWYWx1ZSogSlNOYXZpZ2F0b3I6OmFwcFZlcnNpb24oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAoreworICAgIE5hdmlnYXRvciogaW1wID0gc3RhdGljX2Nhc3Q8TmF2aWdh
dG9yKj4oaW1wbCgpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKworICAgIGlmIChuZWVkc1lv
dVR1YmVRdWlyayhleGVjLCBmcmFtZSkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygiIik7Cisg
ICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50IHN0cmluZyBwYXN0
IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KKyAgICBTdHJpbmcgdXNlckFnZW50ID0gZnJhbWUtPmxv
YWRlcigpLT51c2VyQWdlbnQoZnJhbWUtPmRvY3VtZW50KCkgPyBmcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkgOiBLVVJMKCkpOworICAgIHJldHVybiBqc1N0cmluZyh1c2VyQWdlbnQuc3Vic3RyaW5n
KHVzZXJBZ2VudC5maW5kKCcvJykgKyAxKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9u
LmNwcAppbmRleCBhZTcwNGZhLi4zZTFkNGY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01J
bXBsZW1lbnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
CkBAIC0zNjYsNyArMzY2LDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRp
b246OmNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgdHlwZSwgRnJhbWUKICAgICAgICAgcmV0
dXJuIG5ldyBGVFBEaXJlY3RvcnlEb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAjZW5kaWYKIAotICAg
IFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEgPSBmcmFtZS0+cGFnZSgpID8gZnJhbWUtPnBhZ2UoKS0+
cGx1Z2luRGF0YSgpIDogMDsKKyAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gMDsKKyAgICBp
ZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGx1Z2luRGF0YSA9IGZyYW1lLT5w
YWdlKCktPnBsdWdpbkRhdGEoKTsKIAogICAgIC8vIFBERiBpcyBvbmUgaW1hZ2UgdHlwZSBmb3Ig
d2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0LWluIHN1cHBvcnQuCiAgICAgLy8gV2Ug
ZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3ZlciBhbGwgaW1hZ2UgdHlwZXMsIG9idmlv
dXNseS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggOTgzN2I0Ni4uZWRiNWZiNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
QEAgLTIyNyw3ICsyMjcsNyBAQCBDb25zb2xlKiBET01XaW5kb3c6OmNvbnNvbGUoKSBjb25zdAog
TmF2aWdhdG9yKiBET01XaW5kb3c6Om5hdmlnYXRvcigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25h
dmlnYXRvcikKLSAgICAgICAgbV9uYXZpZ2F0b3IgPSBuZXcgTmF2aWdhdG9yKG1fZnJhbWUpOwor
ICAgICAgICBtX25hdmlnYXRvciA9IE5hdmlnYXRvcjo6Y3JlYXRlKG1fZnJhbWUpOwogICAgIHJl
dHVybiBtX25hdmlnYXRvci5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBjOTIwZGRlLi45
M2ZhOTI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNDQsOCArNDQsOCBAQCBtb2R1bGUgd2luZG93IHsK
ICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzY3JvbGxiYXJzOwogICAg
ICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBCYXJJbmZvIHN0YXR1c2JhcjsKICAgICAgICAg
YXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyB0b29sYmFyOwotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgTmF2aWdhdG9yIG5hdmlnYXRvcjsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIE5hdmlnYXRvciBjbGllbnRJbmZvcm1hdGlvbjsKKyAgICAgICAgYXR0cmlidXRlIFtSZXBs
YWNlYWJsZV0gTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNl
YWJsZV0gTmF2aWdhdG9yIGNsaWVudEluZm9ybWF0aW9uOwogCiAgICAgICAgIERPTVNlbGVjdGlv
biBnZXRTZWxlY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5j
cHAgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAppbmRleCAxMjhlM2Y4Li45ODdkZTVhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yLmNwcApAQCAtNjYsOCArNjYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBO
YXZpZ2F0b3I6Ok5hdmlnYXRvcihGcmFtZSogZnJhbWUpCi0gICAgOiBSZWZDb3VudGVkPE5hdmln
YXRvcj4oMCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQogewog
fQogCkBAIC05OSwxNSArOTgsNiBAQCBTdHJpbmcgTmF2aWdhdG9yOjphcHBOYW1lKCkgY29uc3QK
ICAgICByZXR1cm4gIk5ldHNjYXBlIjsKIH0KIAotU3RyaW5nIE5hdmlnYXRvcjo6YXBwVmVyc2lv
bigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50IHN0cmluZyBw
YXN0IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KLSAgICBjb25zdCBTdHJpbmcgdXNlckFnZW50ID0g
bV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpOwotICAgIHJldHVybiB1c2VyQWdlbnQuc3Vi
c3RyaW5nKHVzZXJBZ2VudC5maW5kKCcvJykgKyAxKTsKLX0KLQogU3RyaW5nIE5hdmlnYXRvcjo6
bGFuZ3VhZ2UoKSBjb25zdAogewogICAgIHJldHVybiBkZWZhdWx0TGFuZ3VhZ2UoKTsKQEAgLTEy
OCwxNCArMTE4LDE0IEBAIFN0cmluZyBOYXZpZ2F0b3I6OnBsYXRmb3JtKCkgY29uc3QKIFBsdWdp
bkFycmF5KiBOYXZpZ2F0b3I6OnBsdWdpbnMoKSBjb25zdAogewogICAgIGlmICghbV9wbHVnaW5z
KQotICAgICAgICBtX3BsdWdpbnMgPSBuZXcgUGx1Z2luQXJyYXkobV9mcmFtZSk7CisgICAgICAg
IG1fcGx1Z2lucyA9IFBsdWdpbkFycmF5OjpjcmVhdGUobV9mcmFtZSk7CiAgICAgcmV0dXJuIG1f
cGx1Z2lucy5nZXQoKTsKIH0KIAogTWltZVR5cGVBcnJheSogTmF2aWdhdG9yOjptaW1lVHlwZXMo
KSBjb25zdAogewogICAgIGlmICghbV9taW1lVHlwZXMpCi0gICAgICAgIG1fbWltZVR5cGVzID0g
bmV3IE1pbWVUeXBlQXJyYXkobV9mcmFtZSk7CisgICAgICAgIG1fbWltZVR5cGVzID0gTWltZVR5
cGVBcnJheTo6Y3JlYXRlKG1fZnJhbWUpOwogICAgIHJldHVybiBtX21pbWVUeXBlcy5nZXQoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5oCmluZGV4IDlkZjlkOTguLjhlNzAxY2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuaAorKysgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTIwLDIw
ICsyMCwyMSBAQAogI2lmbmRlZiBOYXZpZ2F0b3JfaAogI2RlZmluZSBOYXZpZ2F0b3JfaAogCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgRnJhbWU7Ci0gICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIE1pbWVUeXBlQXJyYXk7CiAg
ICAgY2xhc3MgUGx1Z2luRGF0YTsKICAgICBjbGFzcyBQbHVnaW5BcnJheTsKLSAgICBjbGFzcyBN
aW1lVHlwZUFycmF5OworICAgIGNsYXNzIFN0cmluZzsKIAogICAgIGNsYXNzIE5hdmlnYXRvciA6
IHB1YmxpYyBSZWZDb3VudGVkPE5hdmlnYXRvcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgTmF2
aWdhdG9yKEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5hdmlnYXRvcj4gY3Jl
YXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE5hdmlnYXRvcihmcmFtZSkp
OyB9CiAgICAgICAgIH5OYXZpZ2F0b3IoKTsKIAogICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFt
ZSgpOwpAQCAtNDEsNyArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3Ry
aW5nIGFwcENvZGVOYW1lKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBhcHBOYW1lKCkgY29uc3Q7
Ci0gICAgICAgIFN0cmluZyBhcHBWZXJzaW9uKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBsYW5n
dWFnZSgpIGNvbnN0OwogICAgICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CiAgICAgICAg
IFN0cmluZyBwbGF0Zm9ybSgpIGNvbnN0OwpAQCAtNTUsNiArNTUsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGJvb2wgamF2YUVuYWJsZWQoKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CisgICAgICAgIE5hdmlnYXRvcihGcmFtZSopOwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8UGx1Z2luQXJyYXk+IG1fcGx1Z2luczsKICAgICAgICAgbXV0
YWJsZSBSZWZQdHI8TWltZVR5cGVBcnJheT4gbV9taW1lVHlwZXM7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCmluZGV4
IGJiMzc4MWIuLjllNzNhMDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRs
CisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCkBAIC0yMiw3ICsyMiw3IEBAIG1vZHVs
ZSB3aW5kb3cgewogICAgIGludGVyZmFjZSBOYXZpZ2F0b3IgewogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGFwcENvZGVOYW1lOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGFwcE5hbWU7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgYXBwVmVyc2lvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJd
IERPTVN0cmluZyBhcHBWZXJzaW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGxhbmd1YWdlOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZXJB
Z2VudDsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwbGF0Zm9ybTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCA0MDFjN2Y1Li5jZWM1N2Q3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yMTgsMTUgKzIxOCwyMSBAQCB2b2lkIFBh
Z2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQogCiAgICAgUGx1Z2luRGF0YTo6cmVmcmVz
aCgpOwogCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXNOZWVkaW5nUmVsb2FkOwor
CiAgICAgSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsKICAg
ICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdCA9IGFsbFBhZ2VzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgKCppdCktPm1fcGx1Z2luRGF0YSA9IDA7CiAKLSAg
ICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAocmVs
b2FkICYmIGZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQbHVnaW5zKCkpCi0gICAgICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKKyAgICAgICAgaWYgKHJlbG9hZCkgeworICAg
ICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAgICAgICAgICAgICAgIGlm
IChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lucygpKQorICAgICAgICAgICAgICAgICAg
ICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFtZSk7CiAgICAgICAgIH0KICAgICB9CisK
KyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RnJhbWU+ID46Oml0ZXJhdG9yIGl0ID0gZnJhbWVzTmVl
ZGluZ1JlbG9hZC5iZWdpbigpOyBpdCAhPSBmcmFtZXNOZWVkaW5nUmVsb2FkLmVuZCgpOyArK2l0
KQorICAgICAgICAoKml0KS0+bG9hZGVyKCktPnJlbG9hZCgpOwogfQogCiBQbHVnaW5EYXRhKiBQ
YWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCmluZGV4IDUyNWE2ZjguLmYwZmQ4ZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
Ikdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNTksMTMgKzU5LDYgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJh
eShjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRh
aW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbklu
Zm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z2luSW5m
b1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQot
Ym9vbCBXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQg
V2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQog
Q29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2
b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkg
eyB9CiAKQEAgLTc3LDUgKzcwLDkgQEAgZmxvYXQgdXNlcklkbGVUaW1lKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMC4wOyB9CiBTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQogCiBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3Qg
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorCit2b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBsdWdpbkRhdGE6
OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGUuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcApp
bmRleCBjYTJiNTJlLi4xNzBlMjA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5
cGUuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKQEAgLTI3LDcgKzI3LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NaW1lVHlwZTo6TWltZVR5cGUoUGx1Z2luRGF0
YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpCitNaW1lVHlwZTo6TWltZVR5cGUoUGFzc1Jl
ZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCkKICAgICA6IFJlZkNv
dW50ZWQ8TWltZVR5cGU+KDApCiAgICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkKICAgICAs
IG1faW5kZXgoaW5kZXgpCkBAIC01Myw3ICs1Myw3IEBAIFN0cmluZyBNaW1lVHlwZTo6ZGVzY3Jp
cHRpb24oKSBjb25zdAogICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPm1pbWVzKClbbV9pbmRleF0t
PmRlc2M7CiB9CiAKLVBsdWdpbiogTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAorUGFz
c1JlZlB0cjxQbHVnaW4+IE1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29uc3QKIHsKICAgICBj
b25zdCBQYWdlKiBwID0gbV9wbHVnaW5EYXRhLT5wYWdlKCk7CiAgICAgaWYgKCFwIHx8ICFwLT5z
ZXR0aW5ncygpLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQpAQCAtNjMsNyArNjMsNyBAQCBQbHVnaW4q
IE1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkgY29uc3QKICAgICBjb25zdCBWZWN0b3I8UGx1Z2lu
SW5mbyo+JiBwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKQogICAgICAgICBpZiAocGx1
Z2luc1tpXSA9PSBtaW1lc1ttX2luZGV4XS0+cGx1Z2luKQotICAgICAgICAgICAgcmV0dXJuIG5l
dyBQbHVnaW4obV9wbHVnaW5EYXRhLmdldCgpLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBQbHVn
aW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOwogICAgIHJldHVybiAwOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaCBiL1dlYkNvcmUvcGx1Z2lucy9N
aW1lVHlwZS5oCmluZGV4IGU0OWU0ZWUuLjQzMzBiNmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5oCkBAIC0yMCwy
NiArMjAsMjkgQEAKICNpZm5kZWYgTWltZVR5cGVfaAogI2RlZmluZSBNaW1lVHlwZV9oCiAKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBQbHVnaW5EYXRhOwogICAgIGNsYXNzIFBsdWdp
bjsKICAgICBjbGFzcyBTdHJpbmc7CiAKICAgICBjbGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBSZWZD
b3VudGVkPE1pbWVUeXBlPiB7CiAgICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZShQbHVnaW5E
YXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1pbWVUeXBlPiBjcmVhdGUoUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5EYXRhLCB1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1pbWVUeXBlKHBsdWdpbkRhdGEs
IGluZGV4KSk7IH0KICAgICAgICAgfk1pbWVUeXBlKCk7CiAKICAgICAgICAgU3RyaW5nIHR5cGUo
KSBjb25zdDsKICAgICAgICAgU3RyaW5nIHN1ZmZpeGVzKCkgY29uc3Q7CiAgICAgICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0OwotICAgICAgICBQbHVnaW4qIGVuYWJsZWRQbHVnaW4oKSBj
b25zdDsKKyAgICAgICAgUGFzc1JlZlB0cjxQbHVnaW4+IGVuYWJsZWRQbHVnaW4oKSBjb25zdDsK
IAogICAgIHByaXZhdGU6CisgICAgICAgIE1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4g
cGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpOwogICAgICAgICBSZWZQdHI8UGx1Z2luRGF0YT4g
bV9wbHVnaW5EYXRhOwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIH07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMv
TWltZVR5cGVBcnJheS5jcHAKaW5kZXggOGI5M2JiOC4uYjlmODM1OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1l
VHlwZUFycmF5LmNwcApAQCAtNTMsNyArNTMsNyBAQCBNaW1lVHlwZSogTWltZVR5cGVBcnJheTo6
aXRlbSh1bnNpZ25lZCBpbmRleCkKICAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBt
aW1lcyA9IGRhdGEtPm1pbWVzKCk7CiAgICAgaWYgKGluZGV4ID49IG1pbWVzLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZShkYXRhLCBpbmRleCk7Cisg
ICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgaW5kZXgpLmdldCgpOwogfQogCiBib29s
IE1pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKQEAgLTc2LDcgKzc2LDcgQEAgTWltZVR5cGUqIE1pbWVUeXBlQXJyYXk6Om5h
bWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiAgICAgY29uc3QgVmVj
dG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKICAgICAgICAgaWYgKG1pbWVzW2ld
LT50eXBlID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUo
ZGF0YSwgaSk7CisgICAgICAgICAgICByZXR1cm4gTWltZVR5cGU6OmNyZWF0ZShkYXRhLCBpKS5n
ZXQoKTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlQXJyYXkuaCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmgKaW5kZXggYTQ1
YTdlNy4uNjRhNGQwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXku
aAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCkBAIC0yMCwyNyArMjAsMjgg
QEAKICNpZm5kZWYgTWltZVR5cGVBcnJheV9oCiAjZGVmaW5lIE1pbWVUeXBlQXJyYXlfaAogCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEtKUyB7Ci0gICAgY2xhc3MgSlNW
YWx1ZTsKICAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgSlNWYWx1ZTsKIH07CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIEF0b21pY1N0cmluZzsKICAgICBjbGFzcyBG
cmFtZTsKICAgICBjbGFzcyBNaW1lVHlwZTsKICAgICBjbGFzcyBQbHVnaW5EYXRhOwotICAgIGNs
YXNzIEF0b21pY1N0cmluZzsKIAogICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNNaW1lVHlwZUFy
cmF5LmNwcCBkb2Vzbid0IGluY2x1ZGUgSlNNaW1lVHlwZS5oIGZvciB0b0pTCiAgICAgS0pTOjpK
U1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgTWltZVR5cGUqKTsKIAogICAgIGNsYXNzIE1p
bWVUeXBlQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZUFycmF5PiB7CiAgICAgcHVi
bGljOgotICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKiBmcmFtZSk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1pbWVUeXBlQXJyYXk+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNaW1lVHlwZUFycmF5KGZyYW1lKSk7IH0KICAgICAgICAgfk1pbWVUeXBl
QXJyYXkoKTsKIAogICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7
IH0KQEAgLTUwLDYgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGNh
bkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CiAgICAg
ICAgIE1pbWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
KTsKICAgICBwcml2YXRlOgorICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKik7CiAgICAgICAg
IFBsdWdpbkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKIAogICAgICAgICBGcmFtZSogbV9m
cmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbi5jcHAKaW5kZXggNDY3MjJiNy4uZmMwMDU0OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbi5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAK
QEAgLTY3LDcgKzY3LDcgQEAgTWltZVR5cGUqIFBsdWdpbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkK
ICAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+
bWltZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kp
CiAgICAgICAgIGlmIChtaW1lc1tpXSA9PSBtaW1lKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBN
aW1lVHlwZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOworICAgICAgICAgICAgcmV0dXJuIE1pbWVU
eXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBpKS5nZXQoKTsKICAgICByZXR1cm4gMDsK
IH0KIApAQCAtODUsNyArODUsNyBAQCBNaW1lVHlwZSogUGx1Z2luOjpuYW1lR2V0dGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKICAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBl
ID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUobV9wbHVn
aW5EYXRhLmdldCgpLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBNaW1lVHlwZTo6Y3JlYXRlKG1f
cGx1Z2luRGF0YS5nZXQoKSwgaSkuZ2V0KCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaApp
bmRleCAxZThkMjk5Li5hOTYxZjgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
LmgKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCkBAIC0yNSwxNCArMjUsMTQgQEAKICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgS0pTIHsKLSAgICBjbGFzcyBK
U1ZhbHVlOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOwogfTsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUGx1Z2luOwogICAgIGNsYXNzIEF0b21p
Y1N0cmluZzsKKyAgICBjbGFzcyBQbHVnaW47CiAgICAgY2xhc3MgU3RyaW5nOwogCiAgICAgLy8g
RklYTUU6IEdlbmVyYXRlZCBKU1BsdWdpbi5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUu
aCBmb3IgdG9KUwpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFBsdWdpbihQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCk7Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFBsdWdpbkRhdGEqIHBsdWdp
bkRhdGEsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luKHBsdWdp
bkRhdGEsIGluZGV4KSk7IH0KICAgICAgICAgflBsdWdpbigpOwogCiAgICAgICAgIFN0cmluZyBu
YW1lKCkgY29uc3Q7CkBAIC01Niw2ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgTWltZVR5cGUqIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luKFBsdWdpbkRhdGEqLCB1bnNpZ25lZCBp
bmRleCk7CiAgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CiAgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCmluZGV4IGU0
YmI4OGIuLjI1MTIzYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5j
cHAKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcApAQCAtNTMsNyArNTMsNyBA
QCBQbHVnaW4qIFBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQogICAgIGNvbnN0IFZl
Y3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5zKCk7CiAgICAgaWYgKGlu
ZGV4ID49IHBsdWdpbnMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3
IFBsdWdpbihkYXRhLCBpbmRleCk7CisgICAgcmV0dXJuIFBsdWdpbjo6Y3JlYXRlKGRhdGEsIGlu
ZGV4KS5nZXQoKTsKIH0KIAogYm9vbCBQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQpAQCAtNzYsNyArNzYsNyBAQCBQbHVnaW4q
IFBsdWdpbkFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
KQogICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5z
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgIGlmIChwbHVnaW5zW2ldLT5uYW1lID09IHByb3BlcnR5TmFtZSkKLSAgICAgICAgICAg
IHJldHVybiBuZXcgUGx1Z2luKGRhdGEsIGkpOworICAgICAgICAgICAgcmV0dXJuIFBsdWdpbjo6
Y3JlYXRlKGRhdGEsIGkpLmdldCgpOwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJh
eS5oCmluZGV4IDk4MTE1MmUuLjMwNTg2Y2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5BcnJheS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5oCkBAIC0yMCw2
ICsyMCw3IEBACiAjaWZuZGVmIFBsdWdpbkFycmF5X2gKICNkZWZpbmUgUGx1Z2luQXJyYXlfaAog
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzAsMTcgKzMxLDE3IEBAIG5hbWVzcGFj
ZSBLSlMgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7
CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgUGx1Z2luOwogICAgIGNsYXNzIFBsdWdpbkRh
dGE7Ci0gICAgY2xhc3MgQXRvbWljU3RyaW5nOwogCiAgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBK
U1BsdWdpbkFycmF5LmNwcCBkb2Vzbid0IGluY2x1ZGUgSlNQbHVnaW4uaCBmb3IgdG9KUwogICAg
IEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIFBsdWdpbiopOwogCiAgICAgY2xh
c3MgUGx1Z2luQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5BcnJheT4gewogICAgIHB1
YmxpYzoKLSAgICAgICAgUGx1Z2luQXJyYXkoRnJhbWUqIGZyYW1lKTsKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGx1Z2luQXJyYXk+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQbHVnaW5BcnJheShmcmFtZSkpOyB9CiAgICAgICAgIH5QbHVnaW5BcnJheSgp
OwogCiAgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsgfQpAQCAt
NTIsNiArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCByZWZyZXNo
KGJvb2wgcmVsb2FkKTsKICAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5BcnJheShGcmFtZSop
OwogICAgICAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CiAKICAgICAgICAg
RnJhbWUqIG1fZnJhbWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5o
IGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAppbmRleCBlNWYzMDYyLi42Nzc5YWFlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhLmgKQEAgLTI2LDggKzI2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi0gICAgc3RydWN0IFBsdWdpbkluZm87CiAgICAgc3RydWN0IFBhZ2U7CisgICAgc3RydWN0
IFBsdWdpbkluZm87CiAKICAgICBzdHJ1Y3QgTWltZUNsYXNzSW5mbyB7CiAgICAgICAgIFN0cmlu
ZyB0eXBlOwpAQCAtNDYsMTYgKzQ2LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBG
SVhNRTogbWVyZ2Ugd2l0aCBQbHVnaW5EYXRhYmFzZSBpbiB0aGUgZnV0dXJlCiAgICAgY2xhc3Mg
UGx1Z2luRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpbkRhdGE+IHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIFBsdWdpbkRhdGEoY29uc3QgUGFnZSogcGFnZSk7CisgICAgICAgIFBsdWdpbkRh
dGEoY29uc3QgUGFnZSopOwogICAgICAgICB+UGx1Z2luRGF0YSgpOwogCiAgICAgICAgIHZvaWQg
ZGlzY29ubmVjdFBhZ2UoKSB7IG1fcGFnZSA9IDA7IH0KICAgICAgICAgY29uc3QgUGFnZSogcGFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQogCi0gICAgICAgIGlubGluZSBjb25zdCBWZWN0
b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zKCkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gbV9wbHVn
aW5zOyB9Ci0gICAgICAgIGlubGluZSBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1l
cygpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1fbWltZXM7IH0KKyAgICAgICAgY29uc3QgVmVj
dG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luczsgfQor
ICAgICAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcygpIGNvbnN0IHsgcmV0
dXJuIG1fbWltZXM7IH0KIAogICAgICAgICBib29sIHN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBwbHVnaW5OYW1lRm9yTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
dWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRh
UXQuY3BwCmluZGV4IGFhMmRlZGYuLjc1YTZkYzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lu
cy9xdC9QbHVnaW5EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRh
UXQuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgUGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQog
ICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZUluZm8gPSBuZXcgTWltZUNsYXNzSW5mbzsK
ICAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsKICAgICAgICAgICAg
IG1pbWVJbmZvLT5kZXNjID0gbWltZVR5cGUuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICBtaW1l
SW5mby0+c3VmZml4ZXMgPSBtaW1lVHlwZS5zdWZmaXhlcy5qb2luKCI7ICIpOworICAgICAgICAg
ICAgbWltZUluZm8tPnN1ZmZpeGVzID0gbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuam9pbigiOyAi
KTsKIAogICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAgYi9XZWJL
aXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcAppbmRleCA3M2FkMDhmLi5jYjVkNDU1IDEw
MDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcAorKysgYi9XZWJL
aXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcApAQCAtMTAsNyArMTAsMTQgQEAgUVdlYlBs
dWdpbkZhY3Rvcnk6On5RV2ViUGx1Z2luRmFjdG9yeSgpCiB7CiB9CiAKLXZvaWQgUVdlYlBsdWdp
bkZhY3Rvcnk6OnJlbG9hZCgpCit2b2lkIFFXZWJQbHVnaW5GYWN0b3J5OjpyZWZyZXNoUGx1Z2lu
cygpCiB7CiB9CiAKK2Jvb2wgUVdlYlBsdWdpbkZhY3Rvcnk6OmV4dGVuc2lvbihFeHRlbnNpb24g
ZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24gKm9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJu
ICpvdXRwdXQpCit7Cit9CisKK2Jvb2wgUVdlYlBsdWdpbkZhY3Rvcnk6OnN1cHBvcnRzRXh0ZW5z
aW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0Cit7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0
b3J5LmgKaW5kZXggNzliOTUyOS4uZTMwNWY1YiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9x
d2VicGx1Z2luZmFjdG9yeS5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3Rvcnku
aApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IE1pbWVUeXBlIHsKICAgICAg
ICAgUVN0cmluZyBuYW1lOwogICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBR
U3RyaW5nTGlzdCBzdWZmaXhlczsKKyAgICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7
CiAgICAgfTsKIAogICAgIHN0cnVjdCBQbHVnaW4gewpAQCAtNDksMTMgKzQ5LDIyIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5RV2ViUGx1Z2luRmFjdG9yeSgpOwogCiAgICAgdmlydHVhbCBRTGlz
dDxQbHVnaW4+IHBsdWdpbnMoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbG9hZCgp
OworICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOwogCiAgICAgdmlydHVhbCBRT2Jq
ZWN0ICpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUVVybCAmdXJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOwogCisgICAg
ZW51bSBFeHRlbnNpb24geworICAgIH07CisgICAgY2xhc3MgRXh0ZW5zaW9uT3B0aW9uCisgICAg
e307CisgICAgY2xhc3MgRXh0ZW5zaW9uUmV0dXJuCisgICAge307CisgICAgdmlydHVhbCBib29s
IGV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24gKm9w
dGlvbiA9IDAsIEV4dGVuc2lvblJldHVybiAqb3V0cHV0ID0gMCk7CisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0OworCiBwcml2YXRl
OgogICAgIFFXZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZSAqZDsKIH07CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNwcCBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCmluZGV4IGFlODIyMDMuLmYzZTAzOTkgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCkBAIC00NCwx
NCArNDQsMTQgQEAgUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gVGVzdFBsdWdpbjo6
cGx1Z2lucygpIGNvbnN0CiAgICAgcGx1Z2luLmRlc2NyaXB0aW9uID0gInRlc3RkZXNjcmlwdGlv
biI7CiAgICAgTWltZVR5cGUgbWltZVR5cGU7CiAgICAgbWltZVR5cGUubmFtZSA9ICJ0ZXN0dHlw
ZSI7Ci0gICAgbWltZVR5cGUuc3VmZml4ZXMuYXBwZW5kKCJ0ZXN0c3VmZml4ZXMiKTsKKyAgICBt
aW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5hcHBlbmQoInRlc3RzdWZmaXhlcyIpOwogICAgIHBsdWdp
bi5taW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBlKTsKIAogICAgIHBsdWdpbi5uYW1lID0gInRlc3Rw
bHVnaW4yIjsKICAgICBwbHVnaW4uZGVzY3JpcHRpb24gPSAidGVzdGRlc2NyaXB0aW9uMiI7CiAg
ICAgbWltZVR5cGUubmFtZSA9ICJ0ZXN0dHlwZTIiOwotICAgIG1pbWVUeXBlLnN1ZmZpeGVzLmFw
cGVuZCgidGVzdHN1ZmZpeGVzMiIpOwotICAgIG1pbWVUeXBlLnN1ZmZpeGVzLmFwcGVuZCgidGVz
dHN1ZmZpeGVzMyIpOworICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1
ZmZpeGVzMiIpOworICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1ZmZp
eGVzMyIpOwogICAgIHBsdWdpbi5taW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBlKTsKIAogICAgIHJl
dHVybiBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPigpIDw8IHBsdWdpbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19346</attachid>
            <date>2008-02-25 05:58:38 -0800</date>
            <delta_ts>2008-02-26 08:19:07 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>140377</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFz
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdp
bnMtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2
aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlw
ZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMg
YW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU3YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MzUgQEAKKzxodG1sPgorPHNjcmlwdD4KKwordmFyIHBsdWdpbnMgPSBuZXcgQXJyYXk7Citmb3Ig
KHZhciBpID0gMDsgaSA8IG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7CisgICAgcGx1
Z2lucy5wdXNoKG5hdmlnYXRvci5wbHVnaW5zW2ldKTsKK30KKwordmFyIG1pbWVUeXBlcyA9IG5l
dyBBcnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGg7
ICsraSkgeworICAgIG1pbWVUeXBlcy5wdXNoKG5hdmlnYXRvci5taW1lVHlwZXNbaV0pOworfQor
CituYXZpZ2F0b3IucGx1Z2lucy5yZWZyZXNoKCk7CisKK3ZhciBvdXRwdXQgPSAiPHByZT4iOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyArK2kpIHsKKyAgICBvdXRwdXQg
Kz0gcGx1Z2luc1tpXS5uYW1lOworICAgIG91dHB1dCArPSAiXG4iOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IG1pbWVUeXBlcy5sZW5ndGg7ICsraSkgeworICAgIG91dHB1dCArPSBtaW1lVHlw
ZXNbaV0udHlwZTsKKyAgICBvdXRwdXQgKz0gIlxuIjsKK30KKworb3V0cHV0ICs9ICI8L3ByZT4i
OworCisvL2RvY3VtZW50LndyaXRlbG4ob3V0cHV0KTsKK2RvY3VtZW50LndyaXRlbG4oIlRlc3Rz
IGFjY2VzcyB0byBwcmV2aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVn
aW5zIGFuZCBtaW1ldHlwZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhp
cyB0ZXh0IGFwcGVhcnMgYW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2Nl
ZWRlZC4iKTsKKworPC9zY3JpcHQ+Cis8Ym9keT4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKaW5kZXggNThmYzU3OS4uMjk4ZWUyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzMsNiArMzMs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3JlKS9odG1s
IFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAg
JChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3Jl
KS9zdmcKQEAgLTQyMSwxNSArNDIyLDIwIEBAIGFsbCA6IFwKICAgICBKU01lZGlhRXJyb3IuaCBc
CiAgICAgSlNNZWRpYUxpc3QuaCBcCiAgICAgSlNNZXNzYWdlRXZlbnQuaCBcCisgICAgSlNNaW1l
VHlwZS5oIFwKKyAgICBKU01pbWVUeXBlQXJyYXkuaCBcCiAgICAgSlNNb3VzZUV2ZW50LmggXAog
ICAgIEpTTXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9kZU1hcC5oIFwKKyAgICBKU05h
dmlnYXRvci5oIFwKICAgICBKU05vZGUuaCBcCiAgICAgSlNOb2RlRmlsdGVyLmggXAogICAgIEpT
Tm9kZUl0ZXJhdG9yLmggXAogICAgIEpTTm9kZUxpc3QuaCBcCiAgICAgSlNOb3RhdGlvbi5oIFwK
ICAgICBKU092ZXJmbG93RXZlbnQuaCBcCisgICAgSlNQbHVnaW4uaCBcCisgICAgSlNQbHVnaW5B
cnJheS5oIFwKICAgICBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKICAgICBKU1Byb2dyZXNz
RXZlbnQuaCBcCiAgICAgSlNSYW5nZS5oIFwKQEAgLTYwMCw3ICs2MDYsNiBAQCBhbGwgOiBcCiAg
ICAgWFBhdGhHcmFtbWFyLmNwcCBcCiAgICAga2pzX2Nzcy5sdXQuaCBcCiAgICAga2pzX2V2ZW50
cy5sdXQuaCBcCi0gICAga2pzX25hdmlnYXRvci5sdXQuaCBcCiAgICAga2pzX3dpbmRvdy5sdXQu
aCBcCiAgICAgdG9rZW5pemVyLmNwcCBcCiAgICAgV2ViQ29yZS5leHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYzcyY2ZkNS4u
ZTBmMDFiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC0yNTAsNyArMjUwLDYgQEAgTFVUX0ZJTEVTICs9IFwKICAgICBiaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcCBc
CiAgICAgYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19u
YXZpZ2F0b3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAogCiBMVVRfVEFC
TEVfRklMRVMgKz0gXApAQCAtMzgxLDYgKzM4MCwxMSBAQCBJRExfQklORElOR1MgKz0gXAogICAg
IHBhZ2UvRE9NV2luZG93LmlkbCBcCiAgICAgcGFnZS9IaXN0b3J5LmlkbCBcCiAgICAgcGFnZS9T
Y3JlZW4uaWRsIFwKKyAgICBwYWdlL05hdmlnYXRvci5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2lu
LmlkbCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZS5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJy
YXkuaWRsIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsIFwKICAgICB4bWwvRE9NUGFy
c2VyLmlkbCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAgICAgeG1s
L1hNTFNlcmlhbGl6ZXIuaWRsCkBAIC00MjEsNiArNDI1LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
YmluZGluZ3MvanMvSlNMb2NhdGlvbi5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2Rl
TWFwQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5j
cHAgIFwKKyAgICBiaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgIFwKICAgICBiaW5k
aW5ncy9qcy9KU05vZGVDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJD
b25kaXRpb24uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIFwK
QEAgLTQzMSwxMiArNDM2LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTVHJl
ZVdhbGtlckN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3Bw
IFwKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwIFwKKyAgICBiaW5kaW5ncy9q
cy9KU1BsdWdpbkN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0
b20uY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19jc3Mu
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfZG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pz
X2V2ZW50cy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9QYXVz
ZWRUaW1lb3V0cy5jcHAgXApAQCAtNzE2LDYgKzcyMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9ET01TZWxlY3Rpb24uY3Bw
IFwKICAgICBwYWdlL0RPTVdpbmRvdy5jcHAgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmNwcCBcCiAg
ICAgcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgXAogICAgIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcCBc
CiAgICAgcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIFwKQEAgLTcyOSw2ICs3MzcsMTEgQEAgU09V
UkNFUyArPSBcCiAgICAgcGFnZS9TY3JlZW4uY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNwcCBc
CiAgICAgcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5j
cHAgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJyYXkuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbi5j
cHAgXAorICAgIHBsdWdpbnMvTWltZVR5cGUuY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJy
YXkuY3BwIFwKICAgICBwbGF0Zm9ybS9BcmVuYS5jcHAgXAogICAgIHBsYXRmb3JtL0FycmF5SW1w
bC5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcCBcCkBAIC04OTEsNiAr
OTA0LDcgQEAgcXQtcG9ydCB7CiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5o
IFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmggXAogICAgICQkUFdELy4u
L1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlpbnRlcmZhY2UuaCBcCisgICAgJCRQV0QvLi4vV2Vi
S2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIFwKICAgICAkJFBXRC9wbGF0Zm9y
bS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKIApAQCAtOTM5LDcgKzk1Myw2IEBA
IHF0LXBvcnQgewogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtTW91c2VFdmVudFF0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Bs
YXRmb3JtU2Nyb2xsQmFyUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVR
dC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BvcHVwTWVudVF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
cXQvUVdlYlBvcHVwLmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXApA
QCAtOTU0LDYgKzk2Nyw3IEBAIHF0LXBvcnQgewogICAgIHBsYXRmb3JtL3RleHQvcXQvVGV4dENv
ZGVjUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9XaGVlbEV2ZW50UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9xdC9XaWRnZXRRdC5jcHAgXAorICAgIHBsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcCBc
CiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudFF0LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50UXQuY3BwIFwK
ICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBcCkBAIC05
NjcsNiArOTgxLDcgQEAgcXQtcG9ydCB7CiAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYnNldHRpbmdzLmNwcCBcCiAgICAgLi4v
V2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeWludGVyZmFjZS5jcHAgXAorICAgIC4uL1dlYktpdC9x
dC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwCiAKICAgICB1bml4OiBTT1VSQ0VTICs9IHBsYXRm
b3JtL3F0L1N5c3RlbVRpbWVRdC5jcHAKICAgICBlbHNlOiBTT1VSQ0VTICs9IHBsYXRmb3JtL3dp
bi9TeXN0ZW1UaW1lV2luLmNwcApAQCAtOTc2LDE1ICs5OTEsMTAgQEAgcXQtcG9ydCB7CiAgICAg
ICAgIEhFQURFUlMgKz0gXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZS5oIFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkv
cXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9x
dC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9x
dC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmggXAotICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0
L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmggXAogICAgICAgICAgICAgJCRQV0Qv
Li4vV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAg
ICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIFwKLSAg
ICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgXAotICAgICAg
ICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcCBcCiAg
ICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuY3BwCiAKICAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYTM4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTWlt
ZVR5cGVBcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiTWlt
ZVR5cGVBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBL
SlM7CisKK2Jvb2wgSlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRl
KiwgTWltZVR5cGVBcnJheSogbWltZVR5cGVBcnJheSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBtaW1lVHlwZUFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUo
cHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSogSlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU01p
bWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU01pbWVUeXBlQXJyYXkqPihzbG90
LnNsb3RCYXNlKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFt
ZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2
aWdhdG9yQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQz
ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1
c3RvbS5jcHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmll
bCBNb2xrZW50aW4gKG1vbGtlbnRpbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBT
dGVmYW4gU2NoaW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU05h
dmlnYXRvci5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCitzdGF0aWMgYm9vbCBuZWVkc1lv
dVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopOworCisjaWYgIVBMQVRGT1JNKFdJTikKKwor
c3RhdGljIGlubGluZSBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1lKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29sIG5lZWRzWW91
VHViZVF1aXJrKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1lKQoreworICAgIC8vIFRoaXMg
cXVpcmsgd29ya3MgYXJvdW5kIGEgbWlzdGFrZW4gY2hlY2sgaW4gYW4gYWQgYXQgeW91dHViZS5j
b20uCisgICAgLy8gVGhlcmUncyBhIGZ1bmN0aW9uIGNhbGxlZCBpc1NhZmFyaSB0aGF0IHJldHVy
bnMgZmFsc2UgaWYgdGhlIGZ1bmN0aW9uCisgICAgLy8gY2FsbGVkIGlzV2luZG93cyByZXR1cm5z
IHRydWU7IHRodXMgdGhlIHNpdGUgbWFsZnVuY3Rpb25zIHdpdGggV2luZG93cyBTYWZhcmkuCisK
KyAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rpb24ncyBuYW1lIGlzICJpc1dp
bmRvd3MiLgorICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7Cisg
ICAgaWYgKCFmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25z
dCBJZGVudGlmaWVyJiBpc1dpbmRvd3NGdW5jdGlvbk5hbWUgPSAqbmV3IElkZW50aWZpZXIoImlz
V2luZG93cyIpOworICAgIGlmIChmdW5jdGlvbi0+ZnVuY3Rpb25OYW1lKCkgIT0gaXNXaW5kb3dz
RnVuY3Rpb25OYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEbyB0aGUgcXVp
cmsgb25seSBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGFuICJpc1NhZmFyaSIgZnVuY3Rp
b24uCisgICAgLy8gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBub3QgaXRzZWxmIG5hbWVkIC0t
IGl0IGlzIHN0b3JlZCBpbiB0aGUgaXNTYWZhcmkKKyAgICAvLyBwcm9wZXJ0eSwgdGhvdWdoLCBz
byB0aGF0J3MgaG93IHdlIHJlY29nbml6ZSBpdC4KKyAgICBFeGVjU3RhdGUqIGNhbGxpbmdFeGVj
ID0gZXhlYy0+Y2FsbGluZ0V4ZWNTdGF0ZSgpOworICAgIGlmICghY2FsbGluZ0V4ZWMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBGdW5jdGlvbkltcCogY2FsbGluZ0Z1bmN0aW9uID0gY2Fs
bGluZ0V4ZWMtPmZ1bmN0aW9uKCk7CisgICAgaWYgKCFjYWxsaW5nRnVuY3Rpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNhbGxpbmdFeGVjLT50
aGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNPYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciYgaXNTYWZhcmlGdW5jdGlvbk5hbWUgPSAqbmV3
IElkZW50aWZpZXIoImlzU2FmYXJpIik7CisgICAgSlNWYWx1ZSogaXNTYWZhcmlGdW5jdGlvbiA9
IHRoaXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9uTmFtZSk7CisgICAgaWYgKGlz
U2FmYXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAvLyBG
SVhNRTogVGhlIGRvY3VtZW50IGlzIG5ldmVyIG51bGwsIHNvIHdlIHNob3VsZCByZW1vdmUgdGhp
cyBjaGVjayBhbG9uZyB3aXRoIHRoZQorICAgIC8vIG90aGVyIHNpbWlsYXIgb25lcyBpbiB0aGlz
IGZpbGUgd2hlbiB3ZSBhcmUgYWJzb2x1dGVseSBzdXJlIGl0J3Mgc2FmZS4KKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBEbyB0aGUgcXVpcmsgb25s
eSBvbiB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgZ2xvYmFsIHZlcnNpb24gb2YgWW91VHViZS4KKyAg
ICBjb25zdCBLVVJMJiB1cmwgPSBkb2N1bWVudC0+dXJsKCk7CisgICAgaWYgKHVybC5ob3N0KCkg
IT0gInlvdXR1YmUuY29tIiAmJiB1cmwuaG9zdCgpICE9ICJ3d3cueW91dHViZS5jb20iKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHVybC5wYXRoKCkgIT0gIi8iKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBcyB3aXRoIG90aGVyIHNpdGUtc3BlY2lmaWMgcXVpcmtz
LCBhbGxvdyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gdHVybiB0aGlzIG9mZi4KKyAgICAvLyBJbiB0
aGVvcnksIHRoaXMgYWxsb3dzIHdlYnNpdGUgZGV2ZWxvcGVycyB0byBjaGVjayBpZiB0aGVpciBm
aXhlcyBhcmUgZWZmZWN0aXZlLgorICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0
aW5ncygpOworICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIXNldHRpbmdzLT5uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCisKK0pTVmFsdWUqIEpTTmF2
aWdhdG9yOjphcHBWZXJzaW9uKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBOYXZpZ2F0
b3IqIGltcCA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+KGltcGwoKSk7CisgICAgRnJhbWUqIGZy
YW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBqc1N0
cmluZygiIik7CisKKyAgICBpZiAobmVlZHNZb3VUdWJlUXVpcmsoZXhlYywgZnJhbWUpKQorICAg
ICAgICByZXR1cm4ganNTdHJpbmcoIiIpOworICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBp
biB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCisgICAg
U3RyaW5nIHVzZXJBZ2VudCA9IGZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KGZyYW1lLT5kb2N1
bWVudCgpID8gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICByZXR1cm4g
anNTdHJpbmcodXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSkpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FlNGQzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGx1Z2luQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
S0pTOworCitib29sIEpTUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUq
LCBQbHVnaW5BcnJheSogcGx1Z2luQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0
eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1BsdWdpbkFycmF5
KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJheSo+KHNsb3Quc2xvdEJhc2UoKSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3Bl
cnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDc5ZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApAQCAtMCwwICsxLDQw
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQ
bHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jvb2wg
SlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW4qIHBsdWdpbiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW4tPmNh
bkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbjo6
bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7
CisgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbio+KHNsb3Quc2xv
dEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0
dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19uYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9y
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU5ZmJiZC4uMDAwMDAwMAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50aW4g
KG1vbGtlbnRpbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2NoaW1h
bnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAia2pzX25hdmlnYXRvci5oIgotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5j
bHVkZSAiTGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5m
b1N0b3JlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJranNfd2luZG93Lmgi
Ci0jaW5jbHVkZSA8a2pzL29iamVjdF9vYmplY3QuaD4KLQotI2lmbmRlZiBXRUJDT1JFX05BVklH
QVRPUl9QTEFURk9STQotI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oUFBDKQotI2RlZmlu
ZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjUFBDIgotI2VsaWYgUExBVEZPUk0oTUFD
KSAmJiBQTEFURk9STShYODYpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJN
YWNJbnRlbCIKLSNlbGlmIFBMQVRGT1JNKFdJTl9PUykKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FU
T1JfUExBVEZPUk0gIldpbjMyIgotI2Vsc2UKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExB
VEZPUk0gIiIKLSNlbmRpZgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QTEFU
Rk9STQotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLSNkZWZpbmUgV0VCQ09S
RV9OQVZJR0FUT1JfUFJPRFVDVCAiR2Vja28iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFW
SUdBVE9SX1BST0RVQ1QKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgot
I2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQiAiMjAwMzAxMDciCi0jZW5kaWYg
Ly8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCCi0KLSNpZm5kZWYgV0VCQ09S
RV9OQVZJR0FUT1JfVkVORE9SCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUiAiQXBw
bGUgQ29tcHV0ZXIsIEluYy4iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZF
TkRPUgotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKLSNkZWZpbmUgV0VC
Q09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQiAiIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05B
VklHQVRPUl9WRU5ET1JfU1VCCi0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgUGx1Z2luQmFz
ZSA6IHB1YmxpYyBET01PYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luQmFzZShF
eGVjU3RhdGUqKTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luQmFzZSgpOwotICAgICAgICAKLSAg
ICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7Ci0KLSAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAg
ICAgIHN0YXRpYyBWZWN0b3I8UGx1Z2luSW5mbyo+KiBwbHVnaW5zOwotICAgICAgICBzdGF0aWMg
VmVjdG9yPE1pbWVDbGFzc0luZm8qPiogbWltZXM7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBz
dGF0aWMgaW50IG1fcGx1Z0luQ2FjaGVSZWZDb3VudDsKLSAgICB9OwotCi0KLSAgICBjbGFzcyBQ
bHVnaW5zIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2lu
cyhFeGVjU3RhdGUqIGV4ZWMpIDogUGx1Z2luQmFzZShleGVjKSB7IH0KLSAgICAgICAgdmlydHVh
bCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwg
UHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IExlbmd0aCB9OwotICAgIHByaXZhdGU6
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgfTsKLQotICAgIEpTVmFsdWUqIHBs
dWdpbnNGdW5jdGlvblJlZnJlc2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7
Ci0KLSAgICBjbGFzcyBNaW1lVHlwZXMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVibGlj
OgotICAgICAgICBNaW1lVHlwZXMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykg
eyB9OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0K
LSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTGVu
Z3RoIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB9
OwotCi0gICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoK
LSAgICAgICAgUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYywgUGx1Z2luSW5mbyogaW5mbykgOiBQbHVn
aW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0
b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZv
IGluZm87Ci0gICAgICAgIGVudW0geyBOYW1lLCBGaWxlbmFtZSwgRGVzY3JpcHRpb24sIExlbmd0
aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAg
ICAgUGx1Z2luSW5mbyogbV9pbmZvOwotICAgIH07Ci0KLSAgICBjbGFzcyBNaW1lVHlwZSA6IHB1
YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVUeXBlKEV4ZWNTdGF0
ZSogZXhlYywgTWltZUNsYXNzSW5mbyogaW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8o
aW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVl
KiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5m
bzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVudW0g
eyBUeXBlLCBTdWZmaXhlcywgRGVzY3JpcHRpb24sIEVuYWJsZWRQbHVnaW4gfTsKLSAgICBwcml2
YXRlOgotICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtX2luZm87Ci0gICAgfTsKLQotfQotCi0jaW5j
bHVkZSAia2pzX25hdmlnYXRvci5sdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25z
dCBDbGFzc0luZm8gUGx1Z2luczo6aW5mbyA9IHsgIlBsdWdpbkFycmF5IiwgMCwgJlBsdWdpbnNU
YWJsZSB9OwotY29uc3QgQ2xhc3NJbmZvIE1pbWVUeXBlczo6aW5mbyA9IHsgIk1pbWVUeXBlQXJy
YXkiLCAwLCAmTWltZVR5cGVzVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBQbHVnaW46OmluZm8g
PSB7ICJQbHVnaW4iLCAwLCAmUGx1Z2luVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBNaW1lVHlw
ZTo6aW5mbyA9IHsgIk1pbWVUeXBlIiwgMCwgJk1pbWVUeXBlVGFibGUgfTsKLQotVmVjdG9yPFBs
dWdpbkluZm8qPiogUGx1Z2luQmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8TWltZUNsYXNzSW5m
byo+KiBQbHVnaW5CYXNlOjptaW1lcyA9IDA7Ci1pbnQgUGx1Z2luQmFzZTo6bV9wbHVnSW5DYWNo
ZVJlZkNvdW50ID0gMDsKLQotY29uc3QgQ2xhc3NJbmZvIE5hdmlnYXRvcjo6aW5mbyA9IHsgIk5h
dmlnYXRvciIsIDAsICZOYXZpZ2F0b3JUYWJsZSB9OwotLyoKLUBiZWdpbiBOYXZpZ2F0b3JUYWJs
ZSAxMwotICBhcHBDb2RlTmFtZSAgIE5hdmlnYXRvcjo6QXBwQ29kZU5hbWUgICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcE5hbWUgICAgICAgTmF2aWdhdG9yOjpBcHBO
YW1lICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgYXBwVmVyc2lv
biAgICBOYXZpZ2F0b3I6OkFwcFZlcnNpb24gICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQotICBsYW5ndWFnZSAgICAgIE5hdmlnYXRvcjo6TGFuZ3VhZ2UgICAgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHVzZXJBZ2VudCAgICAgTmF2aWdhdG9yOjpV
c2VyQWdlbnQgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGxhdGZv
cm0gICAgICBOYXZpZ2F0b3I6OlBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICBwbHVnaW5zICAgICAgIE5hdmlnYXRvcjo6X1BsdWdpbnMgICAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIG1pbWVUeXBlcyAgICAgTmF2aWdhdG9y
OjpfTWltZVR5cGVzICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcHJv
ZHVjdCAgICAgICBOYXZpZ2F0b3I6OlByb2R1Y3QgICAgICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICBwcm9kdWN0U3ViICAgIE5hdmlnYXRvcjo6UHJvZHVjdFN1YiAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHZlbmRvciAgICAgICAgTmF2aWdh
dG9yOjpWZW5kb3IgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAg
dmVuZG9yU3ViICAgICBOYXZpZ2F0b3I6OlZlbmRvclN1YiAgICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZXxSZWFkT25seQotICBjb29raWVFbmFibGVkIE5hdmlnYXRvcjo6Q29va2llRW5hYmxl
ZCAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGphdmFFbmFibGVkICAgbmF2
aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQgIERvbnREZWxldGV8RnVuY3Rpb24gMAotQGVuZAot
Ki8KLQotTmF2aWdhdG9yOjpOYXZpZ2F0b3IoSlNPYmplY3QqIHByb3RvdHlwZSwgRnJhbWUqIGZy
YW1lKQotICAgIDogRE9NT2JqZWN0KHByb3RvdHlwZSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi17
Ci19Ci0KLWJvb2wgTmF2aWdhdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxOYXZpZ2F0b3IsIEpTT2JqZWN0PihleGVj
LCAmTmF2aWdhdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLXN0YXRp
YyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1lKik7Ci0KLSNpZiAhUExB
VEZPUk0oV0lOKQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0
YXRlKiwgRnJhbWUqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2Vsc2UKLQotc3RhdGlj
IGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBGcmFtZSogZnJhbWUpCi17
Ci0gICAgLy8gVGhpcyBxdWlyayB3b3JrcyBhcm91bmQgYSBtaXN0YWtlbiBjaGVjayBpbiBhbiBh
ZCBhdCB5b3V0dWJlLmNvbS4KLSAgICAvLyBUaGVyZSdzIGEgZnVuY3Rpb24gY2FsbGVkIGlzU2Fm
YXJpIHRoYXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24KLSAgICAvLyBjYWxsZWQgaXNX
aW5kb3dzIHJldHVybnMgdHJ1ZTsgdGh1cyB0aGUgc2l0ZSBtYWxmdW5jdGlvbnMgd2l0aCBXaW5k
b3dzIFNhZmFyaS4KLQotICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbidz
IG5hbWUgaXMgImlzV2luZG93cyIuCi0gICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uID0gZXhlYy0+
ZnVuY3Rpb24oKTsKLSAgICBpZiAoIWZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXImIGlzV2luZG93c0Z1bmN0aW9uTmFtZSA9ICpuZXcg
SWRlbnRpZmllcigiaXNXaW5kb3dzIik7Ci0gICAgaWYgKGZ1bmN0aW9uLT5mdW5jdGlvbk5hbWUo
KSAhPSBpc1dpbmRvd3NGdW5jdGlvbk5hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYW4gImlz
U2FmYXJpIiBmdW5jdGlvbi4KLSAgICAvLyBIb3dldmVyLCB0aGF0IGZ1bmN0aW9uIGlzIG5vdCBp
dHNlbGYgbmFtZWQgLS0gaXQgaXMgc3RvcmVkIGluIHRoZSBpc1NhZmFyaQotICAgIC8vIHByb3Bl
cnR5LCB0aG91Z2gsIHNvIHRoYXQncyBob3cgd2UgcmVjb2duaXplIGl0LgotICAgIEV4ZWNTdGF0
ZSogY2FsbGluZ0V4ZWMgPSBleGVjLT5jYWxsaW5nRXhlY1N0YXRlKCk7Ci0gICAgaWYgKCFjYWxs
aW5nRXhlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZ1bmN0aW9uSW1wKiBjYWxsaW5n
RnVuY3Rpb24gPSBjYWxsaW5nRXhlYy0+ZnVuY3Rpb24oKTsKLSAgICBpZiAoIWNhbGxpbmdGdW5j
dGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
Y2FsbGluZ0V4ZWMtPnRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc09iamVjdCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyJiBpc1NhZmFyaUZ1bmN0
aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNTYWZhcmkiKTsKLSAgICBKU1ZhbHVlKiBpc1Nh
ZmFyaUZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2FmYXJpRnVuY3Rpb25OYW1l
KTsKLSAgICBpZiAoaXNTYWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVuY3Rpb24pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpOyAKLSAgICAvLyBGSVhNRTogVGhlIGRvY3VtZW50IGlzIG5ldmVyIG51bGwsIHNvIHdlIHNo
b3VsZCByZW1vdmUgdGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZQotICAgIC8vIG90aGVyIHNpbWls
YXIgb25lcyBpbiB0aGlzIGZpbGUgd2hlbiB3ZSBhcmUgYWJzb2x1dGVseSBzdXJlIGl0J3Mgc2Fm
ZS4KLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBE
byB0aGUgcXVpcmsgb25seSBvbiB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgZ2xvYmFsIHZlcnNpb24g
b2YgWW91VHViZS4KLSAgICBjb25zdCBLVVJMJiB1cmwgPSBkb2N1bWVudC0+dXJsKCk7Ci0gICAg
aWYgKHVybC5ob3N0KCkgIT0gInlvdXR1YmUuY29tIiAmJiB1cmwuaG9zdCgpICE9ICJ3d3cueW91
dHViZS5jb20iKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHVybC5wYXRoKCkgIT0g
Ii8iKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBcyB3aXRoIG90aGVyIHNpdGUt
c3BlY2lmaWMgcXVpcmtzLCBhbGxvdyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gdHVybiB0aGlzIG9m
Zi4KLSAgICAvLyBJbiB0aGVvcnksIHRoaXMgYWxsb3dzIHdlYnNpdGUgZGV2ZWxvcGVycyB0byBj
aGVjayBpZiB0aGVpciBmaXhlcyBhcmUgZWZmZWN0aXZlLgotICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGZyYW1lLT5zZXR0aW5ncygpOyAKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbmRpZgot
Ci1KU1ZhbHVlKiBOYXZpZ2F0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Ci17Ci0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBBcHBDb2RlTmFt
ZToKLSAgICByZXR1cm4ganNTdHJpbmcoIk1vemlsbGEiKTsKLSAgY2FzZSBBcHBOYW1lOgotICAg
IHJldHVybiBqc1N0cmluZygiTmV0c2NhcGUiKTsKLSAgY2FzZSBBcHBWZXJzaW9uOiB7Ci0gICAg
aWYgKG5lZWRzWW91VHViZVF1aXJrKGV4ZWMsIG1fZnJhbWUpKQotICAgICAgICByZXR1cm4ganNT
dHJpbmcoIiIpOwotICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2Vu
dCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3QgU3RyaW5nIHVz
ZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQo
KSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKLSAgICByZXR1cm4ganNT
dHJpbmcodXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSkpOwotICB9
Ci0gIGNhc2UgUHJvZHVjdDoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1Jf
UFJPRFVDVCk7Ci0gIGNhc2UgUHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09S
RV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAgICByZXR1cm4ganNT
dHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5kb3JTdWI6Ci0gICAg
cmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIpOwotICBjYXNlIExh
bmd1YWdlOgotICAgIHJldHVybiBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2UoKSk7Ci0gIGNhc2Ug
VXNlckFnZW50OgotICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFn
ZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtV
UkwoKSkpOwotICBjYXNlIFBsYXRmb3JtOgotICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05B
VklHQVRPUl9QTEFURk9STSk7Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0dXJuIG5ldyBQbHVn
aW5zKGV4ZWMpOwotICBjYXNlIF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZXMo
ZXhlYyk7Ci0gIGNhc2UgQ29va2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNCb29sZWFuKGNvb2tp
ZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0KLXZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3Nh
cnkoKQotewotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFZlY3Rv
cjxQbHVnaW5JbmZvKj47Ci0gICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj47Ci0gICAgICAgIAotICAgICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgUGx1
Z2luSW5mb1N0b3JlIGM7Ci0gICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50ID0gYy5wbHVnaW5D
b3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1Z2luQ291bnQ7IG4r
KykgewotICAgICAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVhdGVQbHVnaW5JbmZv
Rm9yUGx1Z2luQXRJbmRleChuKTsKLSAgICAgICAgICAgIGlmICghcGx1Z2luKSAKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcGx1Z2lucy0+YXBw
ZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3Rv
cjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7Ci0g
ICAgICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBs
dWdpbi0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAgICAgICAgICAgICAg
bWltZXMtPmFwcGVuZCgqaXRyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGx1Z2luQmFzZTo6
UGx1Z2luQmFzZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKLXsKLSAgICBjYWNoZVBsdWdpbkRh
dGFJZk5lY2Vzc2FyeSgpOwotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudCsrOwotfQotCi1QbHVn
aW5CYXNlOjp+UGx1Z2luQmFzZSgpCi17Ci0gICAgbV9wbHVnSW5DYWNoZVJlZkNvdW50LS07Ci0g
ICAgaWYgKCFtX3BsdWdJbkNhY2hlUmVmQ291bnQpIHsKLSAgICAgICAgaWYgKHBsdWdpbnMpIHsK
LSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAgICAgICAgICBkZWxl
dGUgcGx1Z2luczsKLSAgICAgICAgICAgIHBsdWdpbnMgPSAwOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtaW1lcykgewotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAg
ICAgICAgICBkZWxldGUgbWltZXM7Ci0gICAgICAgICAgICBtaW1lcyA9IDA7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKLXsKLSAg
ICBpZiAocGx1Z2lucykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAg
ICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgcGx1Z2lucyA9IDA7Ci0gICAgfQotICAgIGlm
IChtaW1lcykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsKLSAgICAgICAgZGVs
ZXRlIG1pbWVzOwotICAgICAgICBtaW1lcyA9IDA7Ci0gICAgfQotICAgIAotICAgIHJlZnJlc2hQ
bHVnaW5zKHJlbG9hZCk7Ci0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKTsKLX0KLQot
Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBQbHVnaW5zVGFibGUgMgotICBsZW5ndGggICAg
ICAgIFBsdWdpbnM6Okxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLSAgcmVmcmVzaCAgICAgICBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi0KLUpTVmFsdWUqIFBsdWdpbnM6
OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0g
IEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIocGx1Z2lucy0+c2l6
ZSgpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBuZXcgUGx1Z2luKGV4
ZWMsIHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW5zOjpu
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsK
LSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAg
IFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVuZCgpOwotICAg
IGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4o
KTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyogcGwgPSAqaXRyOwot
ICAgICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
LXsKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJlBsdWdp
bnNUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIGlmIChlbnRy
eS0+YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVu
dHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0
U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBsdWdpbnM+KTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpbnNbI10KLSAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9V
SW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5zaXplKCkpIHsKLSAg
ICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwbHVnaW5bbmFt
ZV0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFt
ZTsKLSAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5kID0gcGx1Z2lucy0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0g
cGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgICAgIGlmICgo
Kml0ciktPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgc2xv
dC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gUGx1Z2lu
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0K
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlc1RhYmxlIDEKLSAgbGVuZ3RoICAg
ICAgICBNaW1lVHlwZXM6Okxlbmd0aCAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0q
LwotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1
cm4ganNOdW1iZXIobWltZXMtPnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIE1pbWVUeXBlczo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3QuaW5kZXgoKSkpOwot
fQotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0
b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6
aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIE1pbWVDbGFzc0luZm8qIG0gPSAoKml0cik7Ci0gICAgICAgIGlmIChtLT50eXBlID09IGF0
b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywg
bSk7Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIE1pbWVUeXBl
czo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJsZSwgcHJvcGVydHlOYW1l
KTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50
cnksIHN0YXRpY1ZhbHVlR2V0dGVyPE1pbWVUeXBlcz4pOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gbWltZVR5cGVzWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAg
ICAgIGlmIChvayAmJiBpIDwgbWltZXMtPnNpemUoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRD
dXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbWVUeXBlc1tuYW1lXQotICAgICAgICBBdG9t
aWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgICAgICBWZWN0
b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5kKCk7Ci0gICAgICAg
IGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2lu
KCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09
IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luVGFibGUgNAotICBuYW1lICAgICAgICAgIFBsdWdp
bjo6TmFtZSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZmlsZW5hbWUgICAgICBQ
bHVnaW46OkZpbGVuYW1lICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRlc2NyaXB0aW9u
ICAgUGx1Z2luOjpEZXNjcmlwdGlvbiAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBsZW5ndGgg
ICAgICAgIFBsdWdpbjo6TGVuZ3RoICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLUBlbmQK
LSovCi0KLUpTVmFsdWUqIFBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBOYW1l
OgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5uYW1lKTsKLSAgICBjYXNlIEZpbGVu
YW1lOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5maWxlKTsKLSAgICBjYXNlIERl
c2NyaXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5kZXNjKTsKLSAgICBj
YXNlIExlbmd0aDogCi0gICAgICAgIHJldHVybiBqc051bWJlcihtX2luZm8tPm1pbWVzLnNpemUo
KSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKDApOwotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbjo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiog
dGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0
dXJuIG5ldyBNaW1lVHlwZShleGVjLCB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmF0KHNsb3QuaW5k
ZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW46Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiogdGhpc09iaiA9IHN0
YXRpY19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0
b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5m
byo+OjppdGVyYXRvciBlbmQgPSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmVuZCgpOwotICAgIGZv
ciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gdGhpc09iai0+bV9pbmZv
LT5taW1lcy5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJ
bmZvKiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5h
bWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0pOwotICAgIH0KLSAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotCi1ib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1
cDo6ZmluZEVudHJ5KCZQbHVnaW5UYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkp
IHsKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVH
ZXR0ZXI8UGx1Z2luPik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIHBsdWdpblsjXQotICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBpbnQg
aSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8IG1f
aW5mby0+bWltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRo
aXMsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gcGx1Z2luWyJuYW1lIl0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21p
Y1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPjo6aXRlcmF0b3IgZW5kID0gbV9pbmZvLT5taW1lcy5lbmQoKTsKLSAgICAgICAgZm9yIChW
ZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtX2luZm8tPm1pbWVzLmJlZ2lu
KCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09
IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRo
aXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0KLS8qCi1AYmVnaW4gTWltZVR5cGVUYWJsZSA0Ci0gIHR5cGUgICAgICAgICAg
TWltZVR5cGU6OlR5cGUgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzdWZmaXhlcyAg
ICAgIE1pbWVUeXBlOjpTdWZmaXhlcyAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZGVzY3Jp
cHRpb24gICBNaW1lVHlwZTo6RGVzY3JpcHRpb24gICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGVu
YWJsZWRQbHVnaW4gTWltZVR5cGU6OkVuYWJsZWRQbHVnaW4gRG9udERlbGV0ZXxSZWFkT25seQot
QGVuZAotKi8KLQotSlNWYWx1ZSogTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+dHlwZSk7Ci0gICAgY2Fz
ZSBTdWZmaXhlczoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+c3VmZml4ZXMpOwot
ICAgIGNhc2UgRGVzY3JpcHRpb246Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPmRl
c2MpOwotICAgIGNhc2UgRW5hYmxlZFBsdWdpbjogewotICAgICAgICBGcmFtZSogZnJhbWUgPSBX
aW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgICAgIEFT
U0VSVChmcmFtZSk7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5n
cygpOwotICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVk
KCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVjLCBtX2luZm8tPnBsdWdpbik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0K
LWJvb2wgTWltZVR5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJl
dHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TWltZVR5cGUsIFBsdWdpbkJhc2U+KGV4ZWMsICZNaW1l
VHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiBwbHVn
aW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0
JiBhcmdzKQotewotICAgIFBsdWdpbkJhc2U6OnJlZnJlc2goYXJnc1swXS0+dG9Cb29sZWFuKGV4
ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogbmF2aWdhdG9y
UHJvdG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTmF2aWdhdG9yOjpp
bmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBO
YXZpZ2F0b3IqIG5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+KHRoaXNPYmopOwotICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+ZnJhbWUoKS0+c2V0dGluZ3Mo
KSA6IDA7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZh
RW5hYmxlZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX25hdmlnYXRvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNmY3ZWEuLjAwMDAwMDAKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBv
cnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIGtq
c19uYXZpZ2F0b3JfaAotI2RlZmluZSBranNfbmF2aWdhdG9yX2gKLQotI2luY2x1ZGUgImtqc19i
aW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZyYW1lOwotCi0g
ICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgcHVibGljOgotICAg
ICAgICBOYXZpZ2F0b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBlLCBGcmFtZSopOwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25z
dCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBLSlM6OkpT
VmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8g
aW5mbzsKLQotICAgICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5hbWUsIEFwcFZlcnNpb24s
IExhbmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAgICAgICAgICAgX1BsdWdpbnMs
IF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgVmVuZG9yU3ViLCBDb29r
aWVFbmFibGVkIH07Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgfTsK
LQotICAgIEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoS0pTOjpF
eGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7Ci0KLX0gLy8gbmFt
ZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2lu
ZG93LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5kZXggMDM1ZDJi
My4uMzAyNGU5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC01MCw3ICs1MCw2
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTU5LDcgKzU4LDYgQEAKICNpbmNsdWRlICJodG1s
ZWRpdGluZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgi
Ci0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTE2Myw4ICsxNjEsNiBAQCBjb25zdCBDbGFz
c0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1RhYmxlIH07CiAgIGNy
eXB0byAgICAgICAgICAgICAgICBXaW5kb3c6OkNyeXB0byAgICAgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQogICBldmVudCAgICAgICAgICAgICAgICAgV2luZG93OjpFdmVudF8gICAgICAg
ICAgICAgIERvbnREZWxldGUKICAgbG9jYXRpb24gICAgICAgICAgICAgIFdpbmRvdzo6TG9jYXRp
b25fICAgICAgICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAgICAgICBXaW5kb3c6
Ok5hdmlnYXRvcl8gICAgICAgICAgRG9udERlbGV0ZQotICBjbGllbnRJbmZvcm1hdGlvbiAgICAg
V2luZG93OjpDbGllbnRJbmZvcm1hdGlvbiAgIERvbnREZWxldGUKICMgLS0gRXZlbnQgTGlzdGVu
ZXJzIC0tCiAgIG9uYWJvcnQgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYWJvcnQgICAgICAgICAg
ICAgRG9udERlbGV0ZQogICBvbmJsdXIgICAgICAgICAgICAgICAgV2luZG93OjpPbmJsdXIgICAg
ICAgICAgICAgIERvbnREZWxldGUKQEAgLTQ3OSwxOCArNDc1LDYgQEAgSlNWYWx1ZSAqV2luZG93
OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAogICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZC0+bV9ldnQpOwogICAgIGNhc2UgTG9jYXRpb25fOgogICAg
ICAgcmV0dXJuIGxvY2F0aW9uKCk7Ci0gICAgY2FzZSBOYXZpZ2F0b3JfOgotICAgIGNhc2UgQ2xp
ZW50SW5mb3JtYXRpb246IHsKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJvbShleGVjKSkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0aGUgbmF2aWdhdG9y
IGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRpbWUuCi0gICAgICBO
YXZpZ2F0b3IqIG4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCksIGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgICAvLyBGSVhNRTogdGhp
cyB3aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxlIGZyb20gd2luZG93
cyB0aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUgZmlyc3QgdGltZSwg
YnV0IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KLSAgICAgIGNvbnN0X2Nhc3Q8
V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERvbnREZWxldGUpOwot
ICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3Jt
YXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAgIHJldHVybiBuOwotICAgIH0KICAgICBjYXNl
IEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdp
bi5jcHAgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4IDY1OTlhODguLjY2
NjY0ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAKKysrIGIv
V2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1
ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24u
aCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9XZWJDb3JlL2RvbS9D
bGlwYm9hcmQuY3BwCmluZGV4IDRjODA4ZDEuLjEzYjgxNWEgMTAwNzU1Ci0tLSBhL1dlYkNvcmUv
ZG9tL0NsaXBib2FyZC5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcApAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0
aW9uLmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAppbmRleCBkYjI3N2Q1
Li4zZTFkNGY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAK
KysrIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0zOCw4ICszOCw4IEBA
CiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUGx1
Z2luRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJS
ZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4
dERvY3VtZW50LmgiCkBAIC0zNjYsMTYgKzM2NiwyMCBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBE
T01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB0eXBlLCBGcmFt
ZQogICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KHRoaXMsIGZyYW1lKTsK
ICNlbmRpZgogCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IDA7CisgICAgaWYgKGZyYW1l
ICYmIGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBsdWdpbkRhdGEgPSBmcmFtZS0+cGFnZSgpLT5w
bHVnaW5EYXRhKCk7CisKICAgICAvLyBQREYgaXMgb25lIGltYWdlIHR5cGUgZm9yIHdoaWNoIGEg
cGx1Z2luIGNhbiBvdmVycmlkZSBidWlsdC1pbiBzdXBwb3J0LgogICAgIC8vIFdlIGRvIG5vdCB3
YW50IFF1aWNrVGltZSB0byB0YWtlIG92ZXIgYWxsIGltYWdlIHR5cGVzLCBvYnZpb3VzbHkuCi0g
ICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0gInRleHQvcGRmIikg
JiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKHR5cGUpKQorICAgIGlmICgodHlw
ZSA9PSAiYXBwbGljYXRpb24vcGRmIiB8fCB0eXBlID09ICJ0ZXh0L3BkZiIpICYmIHBsdWdpbkRh
dGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJu
IG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgaWYgKEltYWdlOjpzdXBwb3J0
c1R5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VEb2N1bWVudCh0aGlzLCBmcmFt
ZSk7CiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGV4Y2VwdCB0ZXh0L3BsYWluIGNhbiBiZSBvdmVy
cmlkZGVuIGJ5IHBsdWdpbnMuIEluIHBhcnRpY3VsYXIsIEFkb2JlIFNWRyBWaWV3ZXIgc2hvdWxk
IGJlIHVzZWQgZm9yIFNWRywgaWYgaW5zdGFsbGVkLgogICAgIC8vIERpc2FsbG93aW5nIHBsdWct
aW5zIHRvIHVzZSB0ZXh0L3BsYWluIHByZXZlbnRzIHBsdWctaW5zIGZyb20gaGlqYWNraW5nIGEg
ZnVuZGFtZW50YWwgdHlwZSB0aGF0IHRoZSBicm93c2VyIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSwK
ICAgICAvLyBhbmQgYWxzbyBzZXJ2ZXMgYXMgYW4gb3B0aW1pemF0aW9uIHRvIHByZXZlbnQgbG9h
ZGluZyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBpbiB0aGUgY29tbW9uIGNhc2UuCi0gICAgaWYgKHR5
cGUgIT0gInRleHQvcGxhaW4iICYmIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSh0
eXBlKSkgCisgICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIHBsdWdpbkRhdGEgJiYgcGx1
Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkgCiAgICAgICAgIHJldHVybiBuZXcgUGx1
Z2luRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIGlmIChpc1RleHRNSU1FVHlwZSh0eXBlKSkK
ICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RG9jdW1lbnQodGhpcywgZnJhbWUpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCmluZGV4IDA0YjIyZTQuLmI0MDJhNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
QEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5m
b1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQu
aCIKQEAgLTE1OTMsNyArMTU5Myw5IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZFVzZVBsdWdp
bihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJvb2wKICAgICAvLyBB
bGxvdyBvdGhlciBwbHVnLWlucyB0byB3aW4gb3ZlciBRdWlja1RpbWUgYmVjYXVzZSBpZiB0aGUg
dXNlciBoYXMgaW5zdGFsbGVkIGEgcGx1Zy1pbiB0aGF0CiAgICAgLy8gY2FuIGhhbmRsZSBUSUZG
ICh3aGljaCBRdWlja1RpbWUgY2FuIGFsc28gaGFuZGxlKSB0aGV5IHByb2JhYmx5IGludGVuZGVk
IHRvIG92ZXJyaWRlIFFULgogICAgIGlmICgobWltZVR5cGUgPT0gImltYWdlL3RpZmYiIHx8IG1p
bWVUeXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94LXRpZmYiKSkgewot
ICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZv
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWU7CisgICAgICAg
IGlmIChtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwbHVnaW5OYW1lID0gbV9mcmFtZS0+
cGFnZSgpLT5wbHVnaW5EYXRhKCktPnBsdWdpbk5hbWVGb3JNaW1lVHlwZShtaW1lVHlwZSk7CiAg
ICAgICAgIGlmICghcGx1Z2luTmFtZS5pc0VtcHR5KCkgJiYgIXBsdWdpbk5hbWUuY29udGFpbnMo
IlF1aWNrVGltZSIsIGZhbHNlKSkgCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCmluZGV4IDIyZjc0ODkuLmVkYjVmYjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC00Miw2
ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGlzdG9yeS5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCkBAIC0xNTQsNiArMTU1LDEwIEBAIHZvaWQgRE9NV2luZG93OjpjbGVhcigp
CiAgICAgaWYgKG1fY29uc29sZSkKICAgICAgICAgbV9jb25zb2xlLT5kaXNjb25uZWN0RnJhbWUo
KTsKICAgICBtX2NvbnNvbGUgPSAwOworCisgICAgaWYgKG1fbmF2aWdhdG9yKQorICAgICAgICBt
X25hdmlnYXRvci0+ZGlzY29ubmVjdEZyYW1lKCk7CisgICAgbV9uYXZpZ2F0b3IgPSAwOwogfQog
CiBTY3JlZW4qIERPTVdpbmRvdzo6c2NyZWVuKCkgY29uc3QKQEAgLTIxOSw2ICsyMjQsMTMgQEAg
Q29uc29sZSogRE9NV2luZG93Ojpjb25zb2xlKCkgY29uc3QKICAgICByZXR1cm4gbV9jb25zb2xl
LmdldCgpOwogfQogCitOYXZpZ2F0b3IqIERPTVdpbmRvdzo6bmF2aWdhdG9yKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICBtX25hdmlnYXRvciA9IE5hdmlnYXRvcjo6
Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsKK30KKwogI2lm
IEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCiB2b2lkIERPTVdpbmRvdzo6cG9zdE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3Qg
U3RyaW5nJiB1cmksIERPTVdpbmRvdyogc291cmNlKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCmluZGV4IGFk
YjQ3MzEuLjgxOGZmMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaAorKysg
Yi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFz
cyBIaXN0b3J5OworICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBTY3JlZW47CiAKICAg
ICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNjksNiArNzAsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIEJhckluZm8qIHNjcm9sbGJhcnMoKSBjb25zdDsKICAgICAgICAg
QmFySW5mbyogc3RhdHVzYmFyKCkgY29uc3Q7CiAgICAgICAgIEJhckluZm8qIHRvb2xiYXIoKSBj
b25zdDsKKyAgICAgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsKKyAgICAgICAgTmF2
aWdhdG9yKiBjbGllbnRJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG5hdmlnYXRvcigpOyB9
CiAKICAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKTsKIApAQCAtMTcwLDYgKzE3
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFySW5m
bz4gbV9zdGF0dXNiYXI7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhckluZm8+IG1fdG9vbGJh
cjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q29uc29sZT4gbV9jb25zb2xlOworICAgICAgICBt
dXRhYmxlIFJlZlB0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIGIv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggNjU1ZDZhYi4uOTNmYTkyOSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJp
YnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gc2Nyb2xsYmFyczsKICAgICAgICAgYXR0cmlidXRl
IFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzdGF0dXNiYXI7CiAgICAgICAgIGF0dHJpYnV0ZSBbUmVw
bGFjZWFibGVdIEJhckluZm8gdG9vbGJhcjsKKyAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJs
ZV0gTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0g
TmF2aWdhdG9yIGNsaWVudEluZm9ybWF0aW9uOwogCiAgICAgICAgIERPTVNlbGVjdGlvbiBnZXRT
ZWxlY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggOGVlYzZlMC4uM2EzZGM5
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAi
TW92ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlJlbmRlckZpbGVV
cGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMjU1MmVkNC4uZWFhMzE5OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3Bw
CkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKKyNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAyNGM5OTAzLi5jYTcwNzcz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJh
bWUuaApAQCAtOTksNiArOTksNyBAQCBjbGFzcyBLSlNQcm94eTsKIGNsYXNzIEtVUkw7CiBjbGFz
cyBOb2RlOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBsdWdpbkRhdGE7CiBjbGFzcyBSYW5nZTsKIGNs
YXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogY2xhc3MgUmVuZGVyUGFydDsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3ZGU1YQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENv
cHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5hdmln
YXRvci5oIgorCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgorI2luY2x1ZGUg
IlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCisjaWZuZGVmIFdFQkNPUkVf
TkFWSUdBVE9SX1BMQVRGT1JNCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShQUEMpCisj
ZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMiCisjZWxpZiBQTEFURk9S
TShNQUMpICYmIFBMQVRGT1JNKFg4NikKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZP
Uk0gIk1hY0ludGVsIgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9QTEFURk9STSAiV2luMzIiCisjZWxzZQorI2RlZmluZSBXRUJDT1JFX05BVklHQVRP
Ul9QTEFURk9STSAiIgorI2VuZGlmCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9S
X1BMQVRGT1JNCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAorI2RlZmluZSBX
RUJDT1JFX05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09S
RV9OQVZJR0FUT1JfUFJPRFVDVAorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1Rf
U1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCICIyMDAzMDEwNyIKKyNl
bmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIKKworI2lmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9S
ICJBcHBsZSBDb21wdXRlciwgSW5jLiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FU
T1JfVkVORE9SCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgorI2RlZmlu
ZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNP
UkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdmln
YXRvcjo6TmF2aWdhdG9yKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7Cit9
CisKK05hdmlnYXRvcjo6fk5hdmlnYXRvcigpCit7CisgICAgZGlzY29ubmVjdEZyYW1lKCk7Cit9
CisKK3ZvaWQgTmF2aWdhdG9yOjpkaXNjb25uZWN0RnJhbWUoKQoreworICAgIGlmIChtX3BsdWdp
bnMpIHsKKyAgICAgICAgbV9wbHVnaW5zLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgbV9w
bHVnaW5zID0gMDsKKyAgICB9CisgICAgaWYgKG1fbWltZVR5cGVzKSB7CisgICAgICAgIG1fbWlt
ZVR5cGVzLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgbV9taW1lVHlwZXMgPSAwOworICAg
IH0KKyAgICBtX2ZyYW1lID0gMDsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6YXBwQ29kZU5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiAiTW96aWxsYSI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6
OmFwcE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTmV0c2NhcGUiOworfQorCitTdHJpbmcg
TmF2aWdhdG9yOjpsYW5ndWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFn
ZSgpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjp1c2VyQWdlbnQoKSBjb25zdAoreworICAgIGlm
ICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX2ZyYW1l
LT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnBsYXRmb3Jt
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk07Cit9CisK
K1BsdWdpbkFycmF5KiBOYXZpZ2F0b3I6OnBsdWdpbnMoKSBjb25zdAoreworICAgIGlmICghbV9w
bHVnaW5zKQorICAgICAgICBtX3BsdWdpbnMgPSBQbHVnaW5BcnJheTo6Y3JlYXRlKG1fZnJhbWUp
OworICAgIHJldHVybiBtX3BsdWdpbnMuZ2V0KCk7Cit9CisKK01pbWVUeXBlQXJyYXkqIE5hdmln
YXRvcjo6bWltZVR5cGVzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWltZVR5cGVzKQorICAgICAg
ICBtX21pbWVUeXBlcyA9IE1pbWVUeXBlQXJyYXk6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICByZXR1
cm4gbV9taW1lVHlwZXMuZ2V0KCk7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBj
b25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUOworfQorCitTdHJp
bmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9O
QVZJR0FUT1JfUFJPRFVDVF9TVUI7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUjsKK30KKworU3RyaW5n
IE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SX1NVQjsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBj
b25zdAoreworICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsK
K30KKworYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgcmV0dXJuIG1fZnJhbWUtPnNldHRpbmdz
KCktPmlzSmF2YUVuYWJsZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNzAxY2EKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTmF2aWdhdG9y
X2gKKyNkZWZpbmUgTmF2aWdhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIE1pbWVUeXBl
QXJyYXk7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBjbGFzcyBQbHVnaW5BcnJheTsKKyAg
ICBjbGFzcyBTdHJpbmc7CisKKyAgICBjbGFzcyBOYXZpZ2F0b3IgOiBwdWJsaWMgUmVmQ291bnRl
ZDxOYXZpZ2F0b3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5h
dmlnYXRvcj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE5hdmln
YXRvcihmcmFtZSkpOyB9CisgICAgICAgIH5OYXZpZ2F0b3IoKTsKKworICAgICAgICB2b2lkIGRp
c2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBGcmFtZSogZnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lOyB9CisKKyAgICAgICAgU3RyaW5nIGFwcENvZGVOYW1lKCkgY29uc3Q7CisgICAgICAg
IFN0cmluZyBhcHBOYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0
OworICAgICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwbGF0
Zm9ybSgpIGNvbnN0OworICAgICAgICBQbHVnaW5BcnJheSogcGx1Z2lucygpIGNvbnN0OworICAg
ICAgICBNaW1lVHlwZUFycmF5KiBtaW1lVHlwZXMoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBy
b2R1Y3QoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHByb2R1Y3RTdWIoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIHZlbmRvcigpIGNvbnN0OworICAgICAgICBTdHJpbmcgdmVuZG9yU3ViKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgY29va2llRW5hYmxlZCgpIGNvbnN0OworICAgICAgICBib29sIGph
dmFFbmFibGVkKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBOYXZpZ2F0b3IoRnJh
bWUqKTsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFBs
dWdpbkFycmF5PiBtX3BsdWdpbnM7CisgICAgICAgIG11dGFibGUgUmVmUHRyPE1pbWVUeXBlQXJy
YXk+IG1fbWltZVR5cGVzOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzNhMDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAg
ICBpbnRlcmZhY2UgTmF2aWdhdG9yIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyBhcHBDb2RlTmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
cHBOYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gRE9NU3Ry
aW5nIGFwcFZlcnNpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFu
Z3VhZ2U7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdXNlckFnZW50Owor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBsYXRmb3JtOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgUGx1Z2luQXJyYXkgcGx1Z2luczsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHByb2R1Y3Q7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgcHJvZHVjdFN1YjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2
ZW5kb3I7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVuZG9yU3ViOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb29raWVFbmFibGVkOworICAgICAg
ICBib29sZWFuIGphdmFFbmFibGVkKCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGY2MGQwNWMuLmNl
YzU3ZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxl
ci5oIgpAQCAtMzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUHJvZ3Jl
c3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgpAQCAtMjA4LDYgKzIxMSwzNyBAQCB2b2lkIFBhZ2U6OnNldE5lZWRz
UmVhcHBseVN0eWxlcygpCiAgICAgICAgICAgICBmcmFtZS0+c2V0TmVlZHNSZWFwcGx5U3R5bGVz
KCk7CiB9CiAKK3ZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCit7CisgICAg
aWYgKCFhbGxQYWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGx1Z2luRGF0YTo6cmVmcmVz
aCgpOworCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXNOZWVkaW5nUmVsb2FkOwor
CisgICAgSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdCA9IGFsbFBhZ2VzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPm1fcGx1Z2luRGF0YSA9IDA7CisKKyAg
ICAgICAgaWYgKHJlbG9hZCkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0
KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKQorICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1Z2lu
cygpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFt
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RnJhbWU+ID46
Oml0ZXJhdG9yIGl0ID0gZnJhbWVzTmVlZGluZ1JlbG9hZC5iZWdpbigpOyBpdCAhPSBmcmFtZXNO
ZWVkaW5nUmVsb2FkLmVuZCgpOyArK2l0KQorICAgICAgICAoKml0KS0+bG9hZGVyKCktPnJlbG9h
ZCgpOworfQorCitQbHVnaW5EYXRhKiBQYWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fcGx1Z2luRGF0YSkKKyAgICAgICAgbV9wbHVnaW5EYXRhID0gbmV3IFBsdWdpbkRhdGEo
dGhpcyk7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS5nZXQoKTsKK30KKwogc3RhdGljIEZyYW1l
KiBpbmNyZW1lbnRGcmFtZShGcmFtZSogY3VyciwgYm9vbCBmb3J3YXJkLCBib29sIHdyYXBGbGFn
KQogewogICAgIHJldHVybiBmb3J3YXJkCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5o
IGIvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBiNjg1ZTNmLi4xNThmZDkzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTU3LDYg
KzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsK
ICAgICBjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xh
c3MgUGx1Z2luRGF0YTsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgU2Vs
ZWN0aW9uOwogICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CkBAIC03MCw2ICs3MSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZShDaHJvbWVDbGllbnQqLCBDb250ZXh0
TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNwZWN0b3JDbGllbnQq
KTsKICAgICAgICAgflBhZ2UoKTsKICAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZnJl
c2hQbHVnaW5zKGJvb2wgcmVsb2FkKTsKKyAgICAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSgp
IGNvbnN0OworCiAgICAgICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9lZGl0b3JDbGllbnQ7IH0KIAogICAgICAgICB2b2lkIHNldE1haW5GcmFtZShQYXNz
UmVmUHRyPEZyYW1lPik7CkBAIC0xNDYsNiArMTUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBSZWZQdHI8RnJhbWU+IG1fbWFpbkZyYW1lOwogICAgICAgICBSZWZQdHI8Tm9kZT4g
bV9mb2N1c2VkTm9kZTsKIAorICAgICAgICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3Bs
dWdpbkRhdGE7CisKICAgICAgICAgRWRpdG9yQ2xpZW50KiBtX2VkaXRvckNsaWVudDsKIAogICAg
ICAgICBpbnQgbV9mcmFtZUNvdW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BsdWdpbi5o
IGIvV2ViQ29yZS9wYWdlL1BsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
ZTUzMTg0Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaAorKysgL2Rldi9udWxs
CkBAIC0xLDQyICswLDAgQEAKLS8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0q
LQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IFBsdWdpbl9oCi0jZGVmaW5lIFBsdWdpbl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBXaWRnZXQ7Ci0KLSAgICBjbGFz
cyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFdpZGdldCogdmlldykgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpbih2aWV3KSk7IH0KLSAgICAgICAgV2lkZ2V0KiB2aWV3KCkg
Y29uc3QgeyByZXR1cm4gbV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAg
IFBsdWdpbihXaWRnZXQqIHZpZXcpIDogbV92aWV3KHZpZXcpIHsgfQotICAgICAgICBXaWRnZXQq
IG1fdmlldzsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gUGx1Z2luX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gYi9X
ZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCmluZGV4IGQ0ZmRjODEuLjRkZTFjMGYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9wYWdlL21h
Yy9GcmFtZU1hYy5tbQpAQCAtNjgsNyArNjgsNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcm9sbEJhci5oIgogI2ltcG9ydCAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJQbHVnaW4uaCIKICNpbXBvcnQgIlJlZ3VsYXJFeHBy
ZXNzaW9uLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEl0
ZW0uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
IGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KaW5kZXggMDg3MjFjNC4u
YWNkZTYzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2Uu
bW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KQEAgLTYzLDcg
KzYzLDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9TdG9yZS5o
IgorI2ltcG9ydCAiUGx1Z2luRGF0YS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBv
cnQgIlJlbmRlclBhcnQuaCIKICNpbXBvcnQgIlJlbmRlclRyZWVBc1RleHQuaCIKQEAgLTEyMDcs
NyArMTIwNyw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbURPTUVs
ZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAKICAgICBpZiAoV2ViQ29yZTo6RE9NSW1w
bGVtZW50YXRpb246OmlzVGV4dE1JTUVUeXBlKG1pbWVUeXBlKSB8fAogICAgICAgICBJbWFnZTo6
c3VwcG9ydHNUeXBlKG1pbWVUeXBlKSB8fAotICAgICAgICBQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUobWltZVR5cGUpKQorICAgICAgICAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJh
bWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlKSkpCiAg
ICAgICAgIHJldHVybiBOTzsKICAgICAKICAgICByZXR1cm4gWUVTOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaCBiL1dlYkNvcmUvcGFnZS9tYWMvV2Vi
Q29yZVZpZXdGYWN0b3J5LmgKaW5kZXggNGNmMjFlMy4uN2Q1NTE1MCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaAorKysgYi9XZWJDb3JlL3BhZ2UvbWFj
L1dlYkNvcmVWaWV3RmFjdG9yeS5oCkBAIC0zNSw5ICszNSw3IEBACiBAcHJvdG9jb2wgV2ViQ29y
ZVZpZXdGYWN0b3J5CiAKIC0gKE5TQXJyYXkgKilwbHVnaW5zSW5mbzsgLy8gYXJyYXkgb2YgaWQg
PFdlYkNvcmVQbHVnaW5JbmZvPgotLSAodm9pZClyZWZyZXNoUGx1Z2luczooQk9PTClyZWxvYWRQ
YWdlczsKLS0gKE5TU3RyaW5nICopcGx1Z2luTmFtZUZvck1JTUVUeXBlOihOU1N0cmluZyAqKU1J
TUVUeXBlOwotLSAoQk9PTClwbHVnaW5TdXBwb3J0c01JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVU
eXBlOworLSAodm9pZClyZWZyZXNoUGx1Z2luczsKIAogLSAoTlNTdHJpbmcgKilpbnB1dEVsZW1l
bnRBbHRUZXh0OwogLSAoTlNTdHJpbmcgKilyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dlYkNvcmUvcGFnZS9xdC9GcmFt
ZVF0LmNwcAppbmRleCA3YWUxZGQ5Li4xZjAzMjU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
cXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCkBAIC00OCw3
ICs0OCw2IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlM
aW5rU3R1YnMuY3BwCmluZGV4IDUyNWE2ZjguLmYwZmQ4ZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUg
Ikdsb2JhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5E
YXRhLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNTksMTMgKzU5LDYgQEAgVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJh
eShjb25zdCBjaGFyKiByZXNvdXJjZU5hbWUpCiAKIGJvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRh
aW5zKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAKLVBsdWdpbklu
Zm8qIFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgodW5z
aWduZWQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7fQotdW5zaWduZWQgUGx1Z2luSW5m
b1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdpbk5hbWVGb3JNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQot
Ym9vbCBXZWJDb3JlOjpQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2Vi
Q29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQg
V2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci0KLQog
Q29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IHJldHVybiAweEZGMDAwMEZGOyB9CiB2
b2lkIFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rpb24odm9pZCAoKikoKSkg
eyB9CiAKQEAgLTc3LDUgKzcwLDkgQEAgZmxvYXQgdXNlcklkbGVUaW1lKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMC4wOyB9CiBTdHJpbmcgS1VSTDo6ZmlsZVN5c3RlbVBhdGgoKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQogCiBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVudHNPZkZpbGUoY29uc3Qg
U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorCit2b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBsdWdpbkRhdGE6
OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDI3NzZlYWUuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0
b3JlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQbHVnaW5JbmZvU3RvcmUuaCIKLQot
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TdHJpbmcg
UGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKLXsKLSAgICByZXR1cm4gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0g
cGx1Z2luTmFtZUZvck1JTUVUeXBlOm1pbWVUeXBlXTsKLX0KLQotUGx1Z2luSW5mbyAqUGx1Z2lu
SW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpbmRl
eCkKLXsKLSAgICBQbHVnaW5JbmZvICpwbHVnaW5JbmZvID0gbmV3IFBsdWdpbkluZm87Ci0gICAg
Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgaWQgPFdlYkNvcmVQbHVn
aW5JbmZvPiBwbHVnaW4gPSBbW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcGx1
Z2luc0luZm9dIG9iamVjdEF0SW5kZXg6aW5kZXhdOwotICAgIAotICAgIHBsdWdpbkluZm8tPm5h
bWUgPSBbcGx1Z2luIG5hbWVdOwotICAgIHBsdWdpbkluZm8tPmZpbGUgPSBbcGx1Z2luIGZpbGVu
YW1lXTsKLSAgICBwbHVnaW5JbmZvLT5kZXNjID0gW3BsdWdpbiBwbHVnaW5EZXNjcmlwdGlvbl07
Ci0KLSAgICBOU0VudW1lcmF0b3IgKk1JTUVUeXBlRW51bWVyYXRvciA9IFtwbHVnaW4gTUlNRVR5
cGVFbnVtZXJhdG9yXTsKLSAgICB3aGlsZSAoTlNTdHJpbmcgKk1JTUUgPSBbTUlNRVR5cGVFbnVt
ZXJhdG9yIG5leHRPYmplY3RdKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm1pbWUgPSBuZXcg
TWltZUNsYXNzSW5mbzsKLSAgICAgICAgcGx1Z2luSW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOwot
ICAgICAgICBtaW1lLT50eXBlID0gU3RyaW5nKE1JTUUpLmxvd2VyKCk7Ci0gICAgICAgIG1pbWUt
PnN1ZmZpeGVzID0gW1twbHVnaW4gZXh0ZW5zaW9uc0Zvck1JTUVUeXBlOk1JTUVdIGNvbXBvbmVu
dHNKb2luZWRCeVN0cmluZzpAIiwiXTsKLSAgICAgICAgbWltZS0+ZGVzYyA9IFtwbHVnaW4gZGVz
Y3JpcHRpb25Gb3JNSU1FVHlwZTpNSU1FXTsKLSAgICAgICAgbWltZS0+cGx1Z2luID0gcGx1Z2lu
SW5mbzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBsdWdpbkluZm87Ci0KLSAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmIChwbHVnaW5JbmZvICYmICFwbHVnaW5J
bmZvLT5taW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhwbHVnaW5JbmZv
LT5taW1lcyk7Ci0gICAgZGVsZXRlIHBsdWdpbkluZm87Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
dW5zaWduZWQgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Ci17Ci0gICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBbW1tXZWJDb3JlVmlld0ZhY3Rv
cnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luc0luZm9dIGNvdW50XTsKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiAwOwotfQotCi1ib29sIFBsdWdpbkluZm9T
dG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gW1tXZWJDb3JlVmlld0ZhY3Rv
cnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luU3VwcG9ydHNNSU1FVHlwZTptaW1lVHlwZV07Ci0gICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsgICAgCi0gICAgCi0gICAgcmV0dXJuIE5POwotfQot
Ci12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3BlblBhZ2VzKQotewotICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRG
YWN0b3J5XSByZWZyZXNoUGx1Z2luczpyZWxvYWRPcGVuUGFnZXNdOwotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJl
Z2lzdHJ5UXQuY3BwCmluZGV4IDZiM2UyNDMuLjdjOGViMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKQEAgLTI4LDExICsyOCw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vi
b2JqZWN0cGx1Z2luX3AuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVj
dCBFeHRlbnNpb25NYXAgewpAQCAtNzksMTIgKzc0LDYgQEAgU3RyaW5nIE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQogICAgICAgICAg
ICAgcmV0dXJuIGUtPm1pbWVUeXBlOwogICAgICAgICArK2U7CiAgICAgfQotICAgIC8vICMjIyBG
SVhNRTogUXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgUVN0cmluZyB0eXBl
ID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0KTsK
LSAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHlwZTsKLSNlbmRpZgog
CiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9QbHVnSW5JbmZvU3RvcmVRdC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL3F0L1BsdWdJbkluZm9TdG9yZVF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTdjYzNhOS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsdWdJbkluZm9T
dG9yZVF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGFsbCBm
dW5jdGlvbmFsaXR5IG5lZWRlZCBmb3IgbG9hZGluZyBpbWFnZXMsIHN0eWxlIHNoZWV0cyBhbmQg
aHRtbAotICAgIHBhZ2VzIGZyb20gdGhlIHdlYi4gSXQgaGFzIGEgbWVtb3J5IGNhY2hlIGZvciB0
aGVzZSBvYmplY3RzLgotKi8KLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRl
ICJxZGVidWcuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2Vib2Jq
ZWN0cGx1Z2luX3AuaCIKLSNlbmRpZgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotUGx1Z2luSW5mbyogUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQ
bHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCBpKQotewotICAgIC8vcURlYnVnKCkg
PDwgIj4+Pj4+Pj4+Pj4+IFBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgoIiA8PCBpIDw8ICIpIjsKLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAg
IFFXZWJGYWN0b3J5TG9hZGVyICpsb2FkZXIgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpOwot
ICAgIGlmIChpID4gbG9hZGVyLT5tX3BsdWdpbkluZm8uY291bnQoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY29uc3QgUVdlYkZhY3RvcnlMb2FkZXI6OkluZm8gJnFpbmZvID0gbG9hZGVyLT5t
X3BsdWdpbkluZm8uYXQoaSk7Ci0gICAgUGx1Z2luSW5mbyAqaW5mbyA9IG5ldyBQbHVnaW5JbmZv
OwotICAgIGluZm8tPm5hbWUgPSBxaW5mby5uYW1lOwotICAgIGluZm8tPmRlc2MgPSBxaW5mby5k
ZXNjcmlwdGlvbjsKLSAgICBmb3JlYWNoIChjb25zdCBRV2ViRmFjdG9yeUxvYWRlcjo6TWltZUlu
Zm8gJm0sIHFpbmZvLm1pbWVzKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8gKm1pbWUgPSBuZXcg
TWltZUNsYXNzSW5mbzsKLSAgICAgICAgbWltZS0+dHlwZSA9IG0udHlwZTsKLSAgICAgICAgbWlt
ZS0+cGx1Z2luID0gaW5mbzsKLSAgICAgICAgZm9yZWFjaCAoUVN0cmluZyBleHQsIG0uZXh0ZW5z
aW9ucykKLSAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzLmFwcGVuZChleHQpOwotICAgICAgICBp
bmZvLT5taW1lcy5hcHBlbmQobWltZSk7Ci0gICAgfQotICAgIHJldHVybiBpbmZvOwotI2Vsc2UK
LSAgICByZXR1cm4gMDsgLy8gIyMjIEZJWE1FCi0jZW5kaWYKLX0KLQotdW5zaWduZWQgUGx1Z2lu
SW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0Ci17Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1Z2luSW5mb1N0b3JlOjpjb3Vu
dCA9IiA8PCBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5rZXlzKCkuY291bnQoKTsKLSAgICBy
ZXR1cm4gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+a2V5cygpLmNvdW50KCk7Ci0jZWxzZQot
ICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLVN0cmluZyBQbHVnaW5JbmZvU3RvcmU6OnBsdWdp
bk5hbWVGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBpcyBzdHViYmVkIG91dCBhbmQgc2hvdWxkIHJlYWxseSByZXR1cm4gdGhl
IG5hbWUgb2YgYSBwbHVnLWluIHBhY2thZ2UgZm9yCi0gICAgLy8gYSBnaXZlbiBNSU1FIHR5cGUu
Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotICAgIAotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1
cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBzdHJpbmcpCi17Ci0jaWYgUVRf
VkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgYm9vbCBzdXBwb3J0cyA9IFFXZWJGYWN0b3J5TG9hZGVy
OjpzZWxmKCktPnN1cHBvcnRzTWltZVR5cGUoc3RyaW5nKTsKLSNlbHNlCi0gICAgYm9vbCBzdXBw
b3J0cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgLy9xRGVidWcoKSA8PCAiPj4+Pj4+Pj4+Pj4gUGx1
Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKCIgPDwgc3RyaW5nIDw8ICIpID0iIDw8IHN1
cHBvcnRzOwotICAgIHJldHVybiBzdXBwb3J0czsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhi
b29sKSB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCmluZGV4IDgxNzQ5MWUuLmJkNDIyZjMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKQEAgLTU5LDcgKzU5LDYgQEAK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5j
cHAgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjE3MGUyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
TWltZVR5cGUuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
TWltZVR5cGU6Ok1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5z
aWduZWQgaW5kZXgpCisgICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlPigwKQorICAgICwgbV9wbHVn
aW5EYXRhKHBsdWdpbkRhdGEpCisgICAgLCBtX2luZGV4KGluZGV4KQoreworfQorCitNaW1lVHlw
ZTo6fk1pbWVUeXBlKCkKK3sKK30KKworU3RyaW5nIE1pbWVUeXBlOjp0eXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT50eXBlOworfQorCitT
dHJpbmcgTWltZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5E
YXRhLT5taW1lcygpW21faW5kZXhdLT5zdWZmaXhlczsKK30KKworU3RyaW5nIE1pbWVUeXBlOjpk
ZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVtt
X2luZGV4XS0+ZGVzYzsKK30KKworUGFzc1JlZlB0cjxQbHVnaW4+IE1pbWVUeXBlOjplbmFibGVk
UGx1Z2luKCkgY29uc3QKK3sKKyAgICBjb25zdCBQYWdlKiBwID0gbV9wbHVnaW5EYXRhLT5wYWdl
KCk7CisgICAgaWYgKCFwIHx8ICFwLT5zZXR0aW5ncygpLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1p
bWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZv
Kj4mIHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChwbHVnaW5z
W2ldID09IG1pbWVzW21faW5kZXhdLT5wbHVnaW4pCisgICAgICAgICAgICByZXR1cm4gUGx1Z2lu
OjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBpKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
LmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40MzMwYjZhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWltZVR5cGVfaAorI2RlZmluZSBNaW1lVHlwZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3MgU3RyaW5n
OworCisgICAgY2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZT4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWltZVR5cGU+IGNyZWF0ZShQ
YXNzUmVmUHRyPFBsdWdpbkRhdGE+IHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBhZG9wdFJlZihuZXcgTWltZVR5cGUocGx1Z2luRGF0YSwgaW5kZXgpKTsgfQorICAgICAgICB+
TWltZVR5cGUoKTsKKworICAgICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgICAgICBTdHJp
bmcgc3VmZml4ZXMoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7
CisgICAgICAgIFBhc3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBNaW1lVHlwZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+IHBsdWdp
bkRhdGEsIHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1
Z2luRGF0YTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmlkbCBiL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJj
YzczNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwKQEAg
LTAsMCArMSwyOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIE1pbWVUeXBlIHsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHN1ZmZpeGVzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgUGx1Z2luIGVu
YWJsZWRQbHVnaW47CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlQXJyYXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZjgzNTkKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJy
YXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRh
dGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitNaW1lVHlwZUFycmF5OjpNaW1lVHlwZUFy
cmF5KEZyYW1lKiBmcmFtZSkKKyAgICA6IFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4oMCkKKyAg
ICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK01pbWVUeXBlQXJyYXk6On5NaW1lVHlwZUFycmF5
KCkKK3sKK30KKwordW5zaWduZWQgbG9uZyBNaW1lVHlwZUFycmF5OjpsZW5ndGgoKSBjb25zdAor
eworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRh
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGF0YS0+bWltZXMoKS5zaXplKCk7Cit9
CisKK01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9
IGRhdGEtPm1pbWVzKCk7CisgICAgaWYgKGluZGV4ID49IG1pbWVzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgaW5kZXgpLmdldCgp
OworfQorCitib29sIE1pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRhICpkYXRhID0gZ2V0UGx1
Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3Qg
VmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVz
W2ldLT50eXBlID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KKworTWltZVR5cGUqIE1pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0
YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4g
TWltZVR5cGU6OmNyZWF0ZShkYXRhLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGx1
Z2luRGF0YSogTWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQYWdlKiBwID0gbV9mcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHAtPnBsdWdp
bkRhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhNGQwMwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmgKQEAgLTAsMCArMSw2MSBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
TWltZVR5cGVBcnJheV9oCisjZGVmaW5lIE1pbWVUeXBlQXJyYXlfaAorCisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAg
IGNsYXNzIEpTVmFsdWU7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBB
dG9taWNTdHJpbmc7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgTWltZVR5cGU7CisgICAg
Y2xhc3MgUGx1Z2luRGF0YTsKKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNNaW1lVHlwZUFy
cmF5LmNwcCBkb2Vzbid0IGluY2x1ZGUgSlNNaW1lVHlwZS5oIGZvciB0b0pTCisgICAgS0pTOjpK
U1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNzIE1p
bWVUeXBlQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZUFycmF5PiB7CisgICAgcHVi
bGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNaW1lVHlwZUFycmF5PiBjcmVhdGUoRnJh
bWUqIGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWltZVR5cGVBcnJheShmcmFtZSkpOyB9
CisgICAgICAgIH5NaW1lVHlwZUFycmF5KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJh
bWUoKSB7IG1fZnJhbWUgPSAwOyB9CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBj
b25zdDsKKyAgICAgICAgTWltZVR5cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBi
b29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIE1pbWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVy
dHlOYW1lKTsKKyAgICBwcml2YXRlOgorICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKik7Cisg
ICAgICAgIFBsdWdpbkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKKworICAgICAgICBGcmFt
ZSogbV9mcmFtZTsKKyAgICB9OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5Lmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDkyYjA4Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsCkBAIC0wLDAgKzEsMjYg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUg
d2luZG93IHsKKworICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJd
IE1pbWVUeXBlQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mYzAwNTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbi5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgg
VHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGx1Z2luOjpQbHVnaW4oUGx1Z2luRGF0YSogcGx1Z2luRGF0YSwg
dW5zaWduZWQgaW5kZXgpCisgICAgOiBSZWZDb3VudGVkPFBsdWdpbj4oMCkKKyAgICAsIG1fcGx1
Z2luRGF0YShwbHVnaW5EYXRhKQorICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworUGx1Z2lu
Ojp+UGx1Z2luKCkKK3sKK30KKworU3RyaW5nIFBsdWdpbjo6bmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpW21faW5kZXhdLT5uYW1lOworfQorCitTdHJp
bmcgUGx1Z2luOjpmaWxlbmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+
cGx1Z2lucygpW21faW5kZXhdLT5maWxlOworfQorCitTdHJpbmcgUGx1Z2luOjpkZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpW21faW5kZXhd
LT5kZXNjOworfQorCit1bnNpZ25lZCBsb25nIFBsdWdpbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPm1pbWVzLnNpemUoKTsK
K30KKworTWltZVR5cGUqIFBsdWdpbjo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBjb25z
dCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKCk7
CisgICAgaWYgKGluZGV4ID49IHBsdWdpbnNbbV9pbmRleF0tPm1pbWVzLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gcGx1Z2luc1ttX2luZGV4
XS0+bWltZXNbaW5kZXhdOworCisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWlt
ZXMgPSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0gPT0gbWltZSkKKyAgICAg
ICAgICAgIHJldHVybiBNaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgaSkuZ2V0
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgUGx1Z2luOjpjYW5HZXRJdGVtc0Zvck5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29uc3QgVmVjdG9yPE1p
bWVDbGFzc0luZm8qPiYgbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNb
aV0tPnR5cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitNaW1lVHlwZSogUGx1Z2luOjpuYW1lR2V0dGVyKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBl
ID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBNaW1lVHlwZTo6Y3JlYXRlKG1f
cGx1Z2luRGF0YS5nZXQoKSwgaSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaCBiL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hOTYxZjgxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIFBsdWdpbl9oCisjZGVmaW5lIFBsdWdpbl9oCisKKyNpbmNsdWRlICJNaW1l
VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3Mg
SlNWYWx1ZTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0
cmluZzsKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgLy8gRklY
TUU6IEdlbmVyYXRlZCBKU1BsdWdpbi5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUuaCBm
b3IgdG9KUworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIE1pbWVUeXBl
Kik7CisKKyAgICBjbGFzcyBQbHVnaW5EYXRhOworCisgICAgY2xhc3MgUGx1Z2luIDogcHVibGlj
IFJlZkNvdW50ZWQ8UGx1Z2luPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQbHVnaW4+IGNyZWF0ZShQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbihwbHVnaW5EYXRhLCBpbmRleCkpOyB9Cisg
ICAgICAgIH5QbHVnaW4oKTsKKworICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgICAg
ICBTdHJpbmcgZmlsZW5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkg
Y29uc3Q7CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKworICAgICAg
ICBNaW1lVHlwZSogaXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIGJvb2wgY2FuR2V0SXRl
bXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgTWlt
ZVR5cGUqIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luKFBsdWdpbkRhdGEqLCB1bnNpZ25lZCBpbmRleCk7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW4uaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NWU0OAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGlu
dGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdpbiB7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBmaWxlbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MTIzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgor
CisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkFycmF5OjpQbHVnaW5BcnJheShGcmFtZSog
ZnJhbWUpCisgICAgOiBSZWZDb3VudGVkPFBsdWdpbkFycmF5PigwKQorICAgICwgbV9mcmFtZShm
cmFtZSkKK3sKK30KKworUGx1Z2luQXJyYXk6On5QbHVnaW5BcnJheSgpCit7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgUGx1Z2luRGF0YSog
ZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBkYXRhLT5wbHVnaW5zKCkuc2l6ZSgpOworfQorCitQbHVnaW4qIFBsdWdp
bkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBn
ZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAg
IGlmIChpbmRleCA+PSBwbHVnaW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFBsdWdpbjo6Y3JlYXRlKGRhdGEsIGluZGV4KS5nZXQoKTsKK30KKworYm9vbCBQbHVnaW5B
cnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
KQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFk
YXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBw
bHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
bHVnaW5zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9w
ZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1BsdWdpbiogUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
KyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxQbHVn
aW5JbmZvKj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5zKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChwbHVnaW5zW2ldLT5u
YW1lID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShk
YXRhLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQbHVnaW5BcnJheTo6cmVm
cmVzaChib29sIHJlbG9hZCkKK3sKKyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWQpOwor
fQorCitQbHVnaW5EYXRhKiBQbHVnaW5BcnJheTo6Z2V0UGx1Z2luRGF0YSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICBQYWdlKiBwID0gbV9mcmFt
ZS0+cGFnZSgpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHAt
PnBsdWdpbkRhdGEoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJy
YXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU4NmNkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
UGx1Z2luQXJyYXlfaAorI2RlZmluZSBQbHVnaW5BcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNz
IEV4ZWNTdGF0ZTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21p
Y1N0cmluZzsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3Mg
UGx1Z2luRGF0YTsKKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNQbHVnaW5BcnJheS5jcHAg
ZG9lc24ndCBpbmNsdWRlIEpTUGx1Z2luLmggZm9yIHRvSlMKKyAgICBLSlM6OkpTVmFsdWUqIHRv
SlMoS0pTOjpFeGVjU3RhdGUqLCBQbHVnaW4qKTsKKworICAgIGNsYXNzIFBsdWdpbkFycmF5IDog
cHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luQXJyYXk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkFycmF5PiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgUGx1Z2luQXJyYXkoZnJhbWUpKTsgfQorICAgICAgICB+UGx1Z2luQXJy
YXkoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0K
KworICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OworICAgICAgICBQbHVnaW4q
IGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIFBsdWdpbiogbmFtZUdl
dHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAgdm9pZCBy
ZWZyZXNoKGJvb2wgcmVsb2FkKTsKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5BcnJheShG
cmFtZSopOworICAgICAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAg
ICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFy
cmF5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNkNjUyCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbApAQCAtMCwwICsx
LDI3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9k
dWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0
dGVyXSBQbHVnaW5BcnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKKyAgICAgICAgdm9pZCByZWZyZXNoKGluIGJvb2xlYW4gcmVsb2FkKTsKKyAg
ICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjYwZWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5EYXRhLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYW5p
ZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAg
U3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKGNvbnN0IFBhZ2UqIHBhZ2UpCisgICAgOiBSZWZDb3Vu
dGVkPFBsdWdpbkRhdGE+KDApCisgICAgLCBtX3BhZ2UocGFnZSkKK3sKKyAgICBpbml0UGx1Z2lu
cygpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGx1Z2lucy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBQbHVnaW5JbmZvKiBwbHVnaW4gPSBtX3BsdWdpbnNbaV07Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBwbHVnaW4tPm1pbWVzLnNpemUoKTsgKytq
KQorICAgICAgICAgICAgbV9taW1lcy5hcHBlbmQocGx1Z2luLT5taW1lc1tqXSk7CisgICAgfQor
fQorCitQbHVnaW5EYXRhOjp+UGx1Z2luRGF0YSgpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1f
cGx1Z2lucyk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fbWltZXMpOworfQorCitib29sIFBsdWdp
bkRhdGE6OnN1cHBvcnRzTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9taW1lcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgaWYgKG1fbWltZXNbaV0tPnR5cGUgPT0gbWltZVR5cGUpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhOjpwbHVnaW5O
YW1lRm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9taW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1f
bWltZXNbaV0tPnR5cGUgPT0gbWltZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gbV9taW1lc1tp
XS0+cGx1Z2luLT5uYW1lOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3OWFhZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
UGx1Z2luRGF0YV9oCisjZGVmaW5lIFBsdWdpbkRhdGFfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgc3RydWN0IFBhZ2U7CisgICAgc3Ry
dWN0IFBsdWdpbkluZm87CisKKyAgICBzdHJ1Y3QgTWltZUNsYXNzSW5mbyB7CisgICAgICAgIFN0
cmluZyB0eXBlOworICAgICAgICBTdHJpbmcgZGVzYzsKKyAgICAgICAgU3RyaW5nIHN1ZmZpeGVz
OworICAgICAgICBQbHVnaW5JbmZvKiBwbHVnaW47CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVn
aW5JbmZvIHsKKyAgICAgICAgU3RyaW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBmaWxlOworICAg
ICAgICBTdHJpbmcgZGVzYzsKKyAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiBtaW1lczsK
KyAgICB9OworCisgICAgLy8gRklYTUU6IG1lcmdlIHdpdGggUGx1Z2luRGF0YWJhc2UgaW4gdGhl
IGZ1dHVyZQorICAgIGNsYXNzIFBsdWdpbkRhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5E
YXRhPiB7CisgICAgcHVibGljOgorICAgICAgICBQbHVnaW5EYXRhKGNvbnN0IFBhZ2UqKTsKKyAg
ICAgICAgflBsdWdpbkRhdGEoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RQYWdlKCkgeyBt
X3BhZ2UgPSAwOyB9CisgICAgICAgIGNvbnN0IFBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2U7IH0KKworICAgICAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zKCkg
Y29uc3QgeyByZXR1cm4gbV9wbHVnaW5zOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj4mIG1pbWVzKCkgY29uc3QgeyByZXR1cm4gbV9taW1lczsgfQorCisgICAgICAgIGJv
b2wgc3VwcG9ydHNNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIHBsdWdpbk5hbWVGb3JNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBj
b25zdDsKKworICAgICAgICBzdGF0aWMgdm9pZCByZWZyZXNoKCk7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICB2b2lkIGluaXRQbHVnaW5zKCk7CisKKyAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8q
PiBtX3BsdWdpbnM7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbV9taW1lczsKKyAg
ICAgICAgY29uc3QgUGFnZSogbV9wYWdlOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW0gYi9XZWJDb3JlL3BsdWdp
bnMvbWFjL1BsdWdpbkRhdGFNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWViOTMxNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2lu
RGF0YU1hYy5tbQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJQbHVnaW5EYXRhLmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAi
TG9nZ2luZy5oIgorI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSogcGx1Z2lucyA9IFtbV2ViQ29y
ZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IFtwbHVnaW5zIGNvdW50XTsgKytpKSB7CisgICAgICAgIFBsdWdp
bkluZm8qIHBsdWdpbkluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKworICAgICAgICBpZCA8V2ViQ29y
ZVBsdWdpbkluZm8+IHBsdWdpbiA9IFtwbHVnaW5zIG9iamVjdEF0SW5kZXg6aV07CisgICAgCisg
ICAgICAgIHBsdWdpbkluZm8tPm5hbWUgPSBbcGx1Z2luIG5hbWVdOworICAgICAgICBwbHVnaW5J
bmZvLT5maWxlID0gW3BsdWdpbiBmaWxlbmFtZV07CisgICAgICAgIHBsdWdpbkluZm8tPmRlc2Mg
PSBbcGx1Z2luIHBsdWdpbkRlc2NyaXB0aW9uXTsKKworICAgICAgICBOU0VudW1lcmF0b3IqIE1J
TUVUeXBlRW51bWVyYXRvciA9IFtwbHVnaW4gTUlNRVR5cGVFbnVtZXJhdG9yXTsKKyAgICAgICAg
d2hpbGUgKE5TU3RyaW5nKiBNSU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkg
eworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOwor
ICAgICAgICAgICAgcGx1Z2luSW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAgICAg
bWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigpOworICAgICAgICAgICAgbWltZS0+c3Vm
Zml4ZXMgPSBbW3BsdWdpbiBleHRlbnNpb25zRm9yTUlNRVR5cGU6TUlNRV0gY29tcG9uZW50c0pv
aW5lZEJ5U3RyaW5nOkAiLCJdOworICAgICAgICAgICAgbWltZS0+ZGVzYyA9IFtwbHVnaW4gZGVz
Y3JpcHRpb25Gb3JNSU1FVHlwZTpNSU1FXTsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IHBs
dWdpbkluZm87CisgICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKHBsdWdpbklu
Zm8pOworICAgIH0KKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAg
cmV0dXJuOworfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSByZWZyZXNoUGx1Z2luc107CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30K
KworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcCBi
L1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjc1YTZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdp
bnMvcXQvUGx1Z2luRGF0YVF0LmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdlYnBsdWdpbmZh
Y3RvcnkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQ
bHVnaW5zKCkKK3sKKyAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENocm9tZUNs
aWVudFF0Kj4obV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CisgICAgUVdl
YlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7CisgICAg
aWYgKCFmYWN0b3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRV2ViUGx1Z2luRmFj
dG9yeTo6UGx1Z2luPiBwbHVnaW5zID0gZmFjdG9yeS0+cGx1Z2lucygpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgcGx1Z2lucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVdlYlBs
dWdpbkZhY3Rvcnk6OlBsdWdpbiYgcGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKworICAgICAgICBQ
bHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgICAgIGluZm8tPm5hbWUgPSBw
bHVnaW4ubmFtZTsKKyAgICAgICAgaW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlwdGlvbjsKKwor
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBsdWdpbi5taW1lVHlwZXMuY291bnQoKTsgKytq
KSB7CisgICAgICAgICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6TWltZVR5cGUmIG1pbWVU
eXBlID0gcGx1Z2luLm1pbWVUeXBlcy5hdChqKTsKKworICAgICAgICAgICAgTWltZUNsYXNzSW5m
byogbWltZUluZm8gPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIG1pbWVJbmZvLT50
eXBlID0gbWltZVR5cGUubmFtZTsKKyAgICAgICAgICAgIG1pbWVJbmZvLT5kZXNjID0gbWltZVR5
cGUuZGVzY3JpcHRpb247CisgICAgICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMgPSBtaW1lVHlw
ZS5maWxlRXh0ZW5zaW9ucy5qb2luKCI7ICIpOworCisgICAgICAgICAgICBpbmZvLT5taW1lcy5h
cHBlbmQobWltZUluZm8pOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChp
bmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgLy8g
bm90aGluZyB0byBkbworfQorCit9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0LnByaSBiL1dlYktpdC5w
cmkKaW5kZXggNTVkZTliMy4uZDEyNDIzYiAxMDA2NDQKLS0tIGEvV2ViS2l0LnByaQorKysgYi9X
ZWJLaXQucHJpCkBAIC05Nyw3ICs5Nyw4IEBAIElOQ0xVREVQQVRIICs9IFwKICAgICAkJEJBU0Vf
RElSL1dlYkNvcmUvcmVuZGVyaW5nIFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUvaGlzdG9yeSBc
CiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3htbCBcCi0gICAgJCRCQVNFX0RJUi9XZWJDb3JlL2h0
bWwKKyAgICAkJEJBU0VfRElSL1dlYkNvcmUvaHRtbCBcCisgICAgJCRCQVNFX0RJUi9XZWJDb3Jl
L3BsdWdpbnMKIAogCiBtYWN4IHsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViVmlld0ZhY3RvcnkubW0gYi9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdG
YWN0b3J5Lm1tCmluZGV4IGM1MjRiNGIuLjQxZjM4MzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KKysrIGIvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQpAQCAtNzEsMjIgKzcxLDkgQEAKICAgICByZXR1cm4g
W1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luc107CiB9CiAKLS0gKE5T
U3RyaW5nICopcGx1Z2luTmFtZUZvck1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlCi17Ci0g
ICAgcmV0dXJuIFtbW1dlYlBsdWdpbkRhdGFiYXNlIHNoYXJlZERhdGFiYXNlXSBwbHVnaW5Gb3JN
SU1FVHlwZTpNSU1FVHlwZV0gbmFtZV07Ci19Ci0KLS0gKHZvaWQpcmVmcmVzaFBsdWdpbnM6KEJP
T0wpcmVsb2FkUGFnZXMKKy0gKHZvaWQpcmVmcmVzaFBsdWdpbnMKIHsKICAgICBbW1dlYlBsdWdp
bkRhdGFiYXNlIHNoYXJlZERhdGFiYXNlXSByZWZyZXNoXTsKLSAgICBpZiAocmVsb2FkUGFnZXMp
IHsKLSAgICAgICAgW1dlYlZpZXcgX21ha2VBbGxXZWJWaWV3c1BlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3IoX3JlbG9hZEZvclBsdWdpbkNoYW5nZXMpXTsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpcGx1
Z2luU3VwcG9ydHNNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAgIHJldHVybiBb
W1dlYlBsdWdpbkRhdGFiYXNlIHNoYXJlZERhdGFiYXNlXSBwbHVnaW5Gb3JNSU1FVHlwZTpNSU1F
VHlwZV0gIT0gbmlsOwogfQogCiAtIChXZWJDb3JlRnJhbWVCcmlkZ2UgKilicmlkZ2VGb3JWaWV3
OihOU1ZpZXcgKil2CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggNzFhYzBlYi4uMDc2OTQ4YiAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtMzU0LDE2ICszNTQsNiBAQCBXZWJWaWV3ICpnZXRX
ZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSkKICAgICByZXR1cm4gY29yZShzZWxmKS0+bG9hZGVy
KCktPm51bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0cyhyZWN1cnNlKTsKIH0KIAotLSAodm9pZClf
cmVsb2FkRm9yUGx1Z2luQ2hhbmdlcwotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHNl
bGYpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkgewotICAgICAgICBOU1ZpZXcg
PFdlYkRvY3VtZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtba2l0KGZyYW1lKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld107Ci0gICAgICAgIGlmICgoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNz
OltXZWJIVE1MVmlldyBjbGFzc11dICYmIGNvcmVGcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1
Z2lucygpKSkKLSAgICAgICAgICAgIFtraXQoZnJhbWUpIHJlbG9hZF07Ci0gICAgfQotfQotCiAt
ICh2b2lkKV9hdHRhY2hTY3JpcHREZWJ1Z2dlcgogewogICAgIGlmICghX3ByaXZhdGUtPnNjcmlw
dERlYnVnZ2VyICYmIGNvcmUoc2VsZiktPnNjcmlwdFByb3h5KCktPmhhdmVHbG9iYWxPYmplY3Qo
KSkKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCmluZGV4IDg5YjViMWQuLjQyN2Jh
OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTUzLDggKzE1Myw2
IEBAIHN0cnVjdCBXZWJDb3JlSGlzdG9yeUl0ZW07CiAKIC0gKGludClfbnVtUGVuZGluZ09yTG9h
ZGluZ1JlcXVlc3RzOihCT09MKXJlY3Vyc2U7CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdpbkNo
YW5nZXM7Ci0KIC0gKHZvaWQpX2F0dGFjaFNjcmlwdERlYnVnZ2VyOwogLSAodm9pZClfZGV0YWNo
U2NyaXB0RGVidWdnZXI7CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggOGE3OWNlYy4uNTY2YTlh
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTEyODIsMTEgKzEyODIsNiBAQCBXZWJGcmFtZUxv
YWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIFdlYlZpZXdHZXRGcmFtZUxvYWREZWxlZ2F0
ZUltcGxlbWVudGF0aQogICAgIFtOU0FwcCBzZXRXaW5kb3dzTmVlZFVwZGF0ZTpZRVNdOwogfQog
Ci0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzCi17Ci0gICAgW1tzZWxmIG1haW5GcmFt
ZV0gX3JlbG9hZEZvclBsdWdpbkNoYW5nZXNdOwotfQotCiAtIChOU0NhY2hlZFVSTFJlc3BvbnNl
ICopX2NhY2hlZFJlc3BvbnNlRm9yVVJMOihOU1VSTCAqKVVSTAogewogICAgIE5TTXV0YWJsZVVS
TFJlcXVlc3QgKnJlcXVlc3QgPSBbW05TTXV0YWJsZVVSTFJlcXVlc3QgYWxsb2NdIGluaXRXaXRo
VVJMOlVSTF07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNl
LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwCmluZGV4IGZkMGM2
OTQuLjYzMTIxZjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZh
Y2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwCkBAIC0y
Niw3ICsyNiw2IEBACiAjaW5jbHVkZSAicXdlYmZyYW1lLmgiCiAjaW5jbHVkZSAicXdlYm5ldHdv
cmtpbnRlcmZhY2UuaCIKICNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5j
bHVkZSAicXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIgogI2luY2x1ZGUgInF3ZWJwYWdlLmgi
CiAjaW5jbHVkZSAicWNvb2tpZWphci5oIgogI2luY2x1ZGUgPHFkZWJ1Zy5oPgpAQCAtMzYxLDcg
KzM2MCw3IEBAIHZvaWQgUVdlYk5ldHdvcmtKb2I6OnNldEVycm9yU3RyaW5nKGNvbnN0IFFTdHJp
bmcmIGVycm9yU3RyaW5nKQogKi8KIGJvb2wgUVdlYk5ldHdvcmtKb2I6OmNhbmNlbGxlZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFkLT5yZXNvdXJjZUhhbmRsZSAmJiAhZC0+Y29ubmVjdG9yOwor
ICAgIHJldHVybiAhZC0+cmVzb3VyY2VIYW5kbGU7CiB9CiAKIC8qIQpAQCAtNDUwLDcgKzQ0OSw2
IEBAIGJvb2wgUVdlYk5ldHdvcmtNYW5hZ2VyOjphZGQoUmVzb3VyY2VIYW5kbGUgKmhhbmRsZSwg
UVdlYk5ldHdvcmtJbnRlcmZhY2UgKmludGVyCiAgICAgaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X2pvYiA9IGpvYjsKICAgICBqb2ItPmQtPnJlc291cmNlSGFuZGxlID0gaGFuZGxlOwogICAgIGpv
Yi0+ZC0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwotICAgIGpvYi0+ZC0+Y29ubmVjdG9yID0gMDsK
IAogICAgIGpvYi0+ZC0+cmVxdWVzdC5pbml0KGhhbmRsZS0+cmVxdWVzdCgpKTsKIApAQCAtNDc5
LDcgKzQ3Nyw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpjYW5jZWwoUmVzb3VyY2VIYW5k
bGUgKmhhbmRsZSkKICAgICAgICAgcmV0dXJuOwogICAgIERFQlVHKCkgPDwgIlFXZWJOZXR3b3Jr
TWFuYWdlcjo6Y2FuY2VsOiIgPDwgIGpvYi0+ZC0+cmVxdWVzdC5odHRwSGVhZGVyLnRvU3RyaW5n
KCk7CiAgICAgam9iLT5kLT5yZXNvdXJjZUhhbmRsZSA9IDA7Ci0gICAgam9iLT5kLT5jb25uZWN0
b3IgPSAwOwogICAgIGpvYi0+ZC0+aW50ZXJmYWNlLT5jYW5jZWxKb2Ioam9iKTsKICAgICBoYW5k
bGUtPmdldEludGVybmFsKCktPm1fam9iID0gMDsKIH0KQEAgLTQ5Niw3ICs0OTMsNyBAQCB2b2lk
IFFXZWJOZXR3b3JrTWFuYWdlcjo6c3RhcnRlZChRV2ViTmV0d29ya0pvYiAqam9iKQogICAgICAg
ICBjbGllbnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAgaWYg
KCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5kLT5j
b25uZWN0b3IpIHsKKyAgICB9IGVsc2UgewogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01
NzEsOCArNTY4LDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OnN0YXJ0ZWQoUVdlYk5ldHdv
cmtKb2IgKmpvYikKIAogICAgIGlmIChjbGllbnQpCiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUsIHJlc3BvbnNlKTsKLSAgICBpZiAoam9i
LT5kLT5jb25uZWN0b3IpCi0gICAgICAgIGVtaXQgam9iLT5kLT5jb25uZWN0b3ItPnN0YXJ0ZWQo
am9iKTsKIAogfQogCkBAIC01ODcsNyArNTgyLDcgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6
OmRhdGEoUVdlYk5ldHdvcmtKb2IgKmpvYiwgY29uc3QgUUJ5dGVBcnJheSAmZGF0YSkKICAgICAg
ICAgY2xpZW50ID0gam9iLT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlm
ICghY2xpZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+
Y29ubmVjdG9yKSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NTk3LDggKzU5Miw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpkYXRhKFFXZWJOZXR3b3Jr
Sm9iICpqb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiAgICAgREVCVUcoKSA8PCAicmVjZWl2
ZWREYXRhIiA8PCBqb2ItPmQtPnJlcXVlc3QudXJsLnBhdGgoKTsKICAgICBpZiAoY2xpZW50KQog
ICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUsIGRh
dGEuY29uc3REYXRhKCksIGRhdGEubGVuZ3RoKCksIGRhdGEubGVuZ3RoKCkgLypGaXhNZSovKTsK
LSAgICBpZiAoam9iLT5kLT5jb25uZWN0b3IpCi0gICAgICAgIGVtaXQgam9iLT5kLT5jb25uZWN0
b3ItPmRhdGEoam9iLCBkYXRhKTsKIAogfQogCkBAIC02MTcsNyArNjEwLDcgQEAgdm9pZCBRV2Vi
TmV0d29ya01hbmFnZXI6OmZpbmlzaGVkKFFXZWJOZXR3b3JrSm9iICpqb2IsIGludCBlcnJvckNv
ZGUpCiAgICAgICAgIGNsaWVudCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwog
ICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYg
KCFqb2ItPmQtPmNvbm5lY3RvcikgeworICAgIH0gZWxzZSB7CiAgICAgICAgIGpvYi0+ZGVyZWYo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY0NSw5ICs2MzgsNiBAQCB2b2lkIFFXZWJO
ZXR3b3JrTWFuYWdlcjo6ZmluaXNoZWQoUVdlYk5ldHdvcmtKb2IgKmpvYiwgaW50IGVycm9yQ29k
ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChqb2ItPmQtPmNvbm5lY3RvcikKLSAgICAg
ICAgZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+ZmluaXNoZWQoam9iLCBlcnJvckNvZGUpOwotCiAg
ICAgREVCVUcoKSA8PCAicmVjZWl2ZWRGaW5pc2hlZCBkb25lIiA8PCBqb2ItPmQtPnJlcXVlc3Qu
dXJsOwogCiAgICAgam9iLT5kZXJlZigpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNl
X3AuaAppbmRleCBjNzEyYWU0Li45YjZmNGQwIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3
ZWJuZXR3b3JraW50ZXJmYWNlX3AuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50
ZXJmYWNlX3AuaApAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgcmVzb3VyY2VI
YW5kbGUoMCkKICAgICAgICAgLCByZWRpcmVjdGVkKGZhbHNlKQogICAgICAgICAsIGludGVyZmFj
ZSgwKQotICAgICAgICAsIGNvbm5lY3RvcigwKQogICAgICAgICAsIGpvYlN0YXR1cyhRV2ViTmV0
d29ya0pvYjo6Sm9iQ3JlYXRlZCkKICAgICAgICAge30KICAgICBpbnQgcmVmOwpAQCAtNjksNyAr
NjgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCByZWRpcmVjdGVkOwogCiAgICAgUVdlYk5ldHdvcmtJ
bnRlcmZhY2UgKmludGVyZmFjZTsKLSAgICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25u
ZWN0b3I7CiAgICAgUVdlYk5ldHdvcmtKb2I6OkpvYlN0YXR1cyBqb2JTdGF0dXM7CiAgICAgUVN0
cmluZyBlcnJvclN0cmluZzsKIH07CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmpl
Y3RwbHVnaW4uY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI0ZDYwNC4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQv
QXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAK
LS8qCi0gIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0KLSAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotCi0qLwotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgotI2lu
Y2x1ZGUgPHF3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaD4KLSNpbmNsdWRlIDxxY29yZWFwcGxp
Y2F0aW9uLmg+Ci0jaW5jbHVkZSA8cWZpbGVpbmZvLmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgw
NDA0MDAKLQotI2lmbmRlZiBRVF9OT19MSUJSQVJZCi1RX0dMT0JBTF9TVEFUSUNfV0lUSF9BUkdT
KFFXZWJGYWN0b3J5TG9hZGVyLCBsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChR
V2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZV9paWQsIFFDb3JlQXBwbGljYXRpb246Omxp
YnJhcnlQYXRocygpLCBRTGF0aW4xU3RyaW5nKCIvd2VicGx1Z2lucyIpKSkKLSNlbmRpZgotCi0K
LVFXZWJGYWN0b3J5TG9hZGVyOjpRV2ViRmFjdG9yeUxvYWRlcihjb25zdCBjaGFyICppaWQsIGNv
bnN0IFFTdHJpbmdMaXN0ICZwYXRocywgY29uc3QgUVN0cmluZyAmc3VmZml4LCBRdDo6Q2FzZVNl
bnNpdGl2aXR5KQotICAgIDogUUZhY3RvcnlMb2FkZXIoaWlkLCBwYXRocywgc3VmZml4KQotewot
ICAgIFFTdHJpbmdMaXN0IHBsdWdpbnMgPSBrZXlzKCk7Ci0gICAgZm9yZWFjaChRU3RyaW5nIGss
IHBsdWdpbnMpIHsKLSAgICAgICAgUVdlYk9iamVjdFBsdWdpbiAqcGx1Z2luID0gcW9iamVjdF9j
YXN0PFFXZWJPYmplY3RQbHVnaW4gKj4oaW5zdGFuY2UoaykpOwotICAgICAgICBpZiAoIXBsdWdp
bikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBJbmZvIGluZm87Ci0gICAgICAgIGlu
Zm8ubmFtZSA9IGs7Ci0gICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBwbHVnaW4tPmRlc2NyaXB0
aW9uRm9yS2V5KGspOwotICAgICAgICBRU3RyaW5nTGlzdCBtaW1ldHlwZXMgPSBwbHVnaW4tPm1p
bWV0eXBlc0ZvcktleShrKTsKLSAgICAgICAgZm9yZWFjaChRU3RyaW5nIG0sIG1pbWV0eXBlcykg
ewotICAgICAgICAgICAgTWltZUluZm8gbWltZTsKLSAgICAgICAgICAgIG1pbWUudHlwZSA9IG07
Ci0gICAgICAgICAgICBtaW1lLmV4dGVuc2lvbnMgPSBwbHVnaW4tPmV4dGVuc2lvbnNGb3JNaW1l
dHlwZShtKTsKLSAgICAgICAgICAgIGluZm8ubWltZXMgPDwgbWltZTsKLSAgICAgICAgfQotICAg
ICAgICBtX3BsdWdpbkluZm8uYXBwZW5kKGluZm8pOwotICAgIH0KLX0KLQotUVdlYkZhY3RvcnlM
b2FkZXIgKlFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCkKLXsKLSAgICByZXR1cm4gbG9hZGVyKCk7
Ci19Ci0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6ZGVzY3JpcHRpb25Gb3JOYW1lKGNv
bnN0IFFTdHJpbmcgJmtleSkgY29uc3QKLXsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8s
IG1fcGx1Z2luSW5mbykgewotICAgICAgICBpZiAoaW5mby5uYW1lID09IGtleSkKLSAgICAgICAg
ICAgIHJldHVybiBpbmZvLmRlc2NyaXB0aW9uOwotICAgIH0KLSAgICByZXR1cm4gUVN0cmluZygp
OwotfQotCi1RU3RyaW5nTGlzdCBRV2ViRmFjdG9yeUxvYWRlcjo6bWltZXR5cGVzRm9yTmFtZShj
b25zdCBRU3RyaW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZv
LCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgaWYgKGluZm8ubmFtZSA9PSBrZXkpIHsKLSAgICAg
ICAgICAgIFFTdHJpbmdMaXN0IG1pbWV0eXBlczsKLSAgICAgICAgICAgIGZvcmVhY2ggKGNvbnN0
IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgICAgIG1pbWV0eXBlcy5hcHBl
bmQobS50eXBlKTsKLSAgICAgICAgICAgIHJldHVybiBtaW1ldHlwZXM7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLVFTdHJpbmcgUVdlYkZhY3RvcnlM
b2FkZXI6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFFTdHJpbmcgJmV4dGVuc2lvbikKLXsK
LSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1Z2luSW5mbykgewotICAgICAgICBm
b3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwgaW5mby5taW1lcykgewotICAgICAgICAgICAgaWYg
KG0uZXh0ZW5zaW9ucy5jb250YWlucyhleHRlbnNpb24pKQotICAgICAgICAgICAgICAgIHJldHVy
biBtLnR5cGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQot
Ci1RU3RyaW5nTGlzdCBRV2ViRmFjdG9yeUxvYWRlcjo6ZXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0g
ICAgUVN0cmluZ0xpc3QgZXh0ZW5zaW9uczsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8s
IG1fcGx1Z2luSW5mbykgewotICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwgaW5m
by5taW1lcykKLSAgICAgICAgICAgIGV4dGVuc2lvbnMgPDwgbS5leHRlbnNpb25zOwotICAgIH0K
LSAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLQotfQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9h
ZGVyOjpuYW1lRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUpIGNvbnN0Ci17Ci0g
ICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9y
ZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpCi0gICAgICAgICAgICBpZiAobS50
eXBlID09IG1pbWVUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLm5hbWU7Ci0gICAg
fQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLVFPYmplY3QgKlFXZWJGYWN0b3J5TG9hZGVy
OjpjcmVhdGUoUVdlYkZyYW1lICpmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nICZfbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpCi17
Ci0gICAgUVN0cmluZyBtaW1lVHlwZSA9IF9taW1lVHlwZTsKLSAgICBpZiAobWltZVR5cGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIFFGaWxlSW5mbyBmaSh1cmwucGF0aCgpKTsKLSAgICAgICAgbWlt
ZVR5cGUgPSBtaW1lVHlwZUZvckV4dGVuc2lvbihmaS5zdWZmaXgoKSk7Ci0gICAgfQotICAgIFFT
dHJpbmcgbmFtZSA9IG5hbWVGb3JNaW1ldHlwZShtaW1lVHlwZSk7Ci0gICAgUVdlYk9iamVjdFBs
dWdpbiAqcGx1Z2luID0gcW9iamVjdF9jYXN0PFFXZWJPYmplY3RQbHVnaW4gKj4oaW5zdGFuY2Uo
bmFtZSkpOwotICAgIGlmICghcGx1Z2luKQotICAgICAgICByZXR1cm4gMDsKLSAgICBRV2ViT2Jq
ZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0b3IgPSBuZXcgUVdlYk9iamVjdFBsdWdpbkNvbm5l
Y3RvcihmcmFtZSk7Ci0gICAgcmV0dXJuIHBsdWdpbi0+Y3JlYXRlKGNvbm5lY3RvciwgdXJsLCBt
aW1lVHlwZSwgYXJndW1lbnROYW1lcywgYXJndW1lbnRWYWx1ZXMpOwotfQotCi0KLQotLyohIFxj
bGFzcyBRV2ViT2JqZWN0UGx1Z2luCi0KLSAgVGhpcyBjbGFzcyBpcyBhIHBsdWdpbiBmb3IgdGhl
IEhUTUwgb2JqZWN0IHRhZy4gSXQgY2FuIGJlIHVzZWQgdG8gZW1iZWQgYXJiaXRyYXJ5IGNvbnRl
bnQgaW4gYSB3ZWIgcGFnZS4KLSovCi0KLQotUVdlYk9iamVjdFBsdWdpbjo6UVdlYk9iamVjdFBs
dWdpbihRT2JqZWN0ICpwYXJlbnQpCi0gICAgOiBRT2JqZWN0KHBhcmVudCkKLXsKLX0KLQotUVdl
Yk9iamVjdFBsdWdpbjo6flFXZWJPYmplY3RQbHVnaW4oKQotewotfQotCi0vKiEKLSAgXGZuIFFT
dHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46OmtleXMoKSBjb25zdAotCi0gIFRoZSBrZXlzIHNo
b3VsZCBiZSB1bmlxdWUgbmFtZXMuCi0qLwotCi0vKiEKLSAgQSBkZXNjcmlwdGlvbiBmb3IgXGEg
a2V5LgotKi8KLVFTdHJpbmcgUVdlYk9iamVjdFBsdWdpbjo6ZGVzY3JpcHRpb25Gb3JLZXkoY29u
c3QgUVN0cmluZyAma2V5KSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLS8q
IQotICByZXR1cm5zIHRoZSBtaW1ldHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZCBieSBcYSBrZXku
Ci0qLwotUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdpbjo6bWltZXR5cGVzRm9yS2V5KGNvbnN0
IFFTdHJpbmcgJmtleSkgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLX0KLQot
Ci0vKiEKLSAgXGZuIFFTdHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46OmV4dGVuc2lvbnNGb3JN
aW1ldHlwZSgpIGNvbnN0Ci0KLSAgU2hvdWxkIHJldHVybiBhIGxpc3Qgb2YgZXh0ZW5zaW9ucyB0
aGF0IGFyZSByZWNvZ25pc2VkIHRvIG1hdGNoIHRoZSBcYSBtaW1lVHlwZS4KLSovCi1RU3RyaW5n
TGlzdCBRV2ViT2JqZWN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmlu
ZyAmbWltZVR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLS8q
IQotICBcZm4gUU9iamVjdCAqUVdlYk9iamVjdFBsdWdpbjo6Y3JlYXRlKFFXZWJPYmplY3RQbHVn
aW5Db25uZWN0b3IgKmNvbm5lY3RvciwgY29uc3QgUVVybCAmdXJsLCBjb25zdCBRU3RyaW5nICZt
aW1lVHlwZSwgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsIGNvbnN0IFFTdHJpbmdM
aXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QKLQotICBDcmVhdGVzIGEgUU9iamVjdCB3aXRoIFxh
IGNvbm5lY3RvciB0byBoYW5kbGUgXGEgbWltZVR5cGUuIFxhIGFyZ3VtZW50TmFtZXMgYW5kIFxh
IGFyZ3VtZW50VmFsdWVzIGFyZSBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgcGFzc2VkIGRpcmVj
dGx5Ci0gIGZyb20gdGhlICZsdDtwYXJhbSZndDsgZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBI
VE1MIG9iamVjdCB0YWcuCi0qLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkv
cXdlYm9iamVjdHBsdWdpbi5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjN2NhZjcuLjAwMDAwMDAKLS0tIGEvV2ViS2l0
L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBA
Ci0vKgotICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLQotKi8KLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTl9ICi0jZGVmaW5l
IFFXRUJPQkpFQ1RQTFVHSU5fSAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1
ZGUgPFF0Q29yZS9xcGx1Z2luLmg+Ci0jaW5jbHVkZSA8UXRDb3JlL3FmYWN0b3J5aW50ZXJmYWNl
Lmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLQotY2xhc3MgUVdlYk9iamVjdFBsdWdp
bkNvbm5lY3RvcjsKLWNsYXNzIFFVcmw7Ci0KLXN0cnVjdCBRV0VCS0lUX0VYUE9SVCBRV2ViT2Jq
ZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZSA6IHB1YmxpYyBRRmFjdG9yeUludGVyZmFjZQotewot
ICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNv
bm5lY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50
VmFsdWVzKSBjb25zdCA9IDA7Ci19OwotCi0jZGVmaW5lIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5
SW50ZXJmYWNlX2lpZCAiY29tLnRyb2xsdGVjaC5RdC5RV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUlu
dGVyZmFjZSIKLVFfREVDTEFSRV9JTlRFUkZBQ0UoUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRl
cmZhY2UsIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlX2lpZCkKLQotY2xhc3MgUVdF
QktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdpbiA6IHB1YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVdl
Yk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2UKLXsKLSAgICBRX09CSkVDVAotICAgIFFfSU5U
RVJGQUNFUyhRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZTpRRmFjdG9yeUludGVyZmFj
ZSkKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBRV2ViT2JqZWN0UGx1Z2luKFFPYmplY3QgKnBhcmVu
dCA9IDApOwotICAgIHZpcnR1YWwgflFXZWJPYmplY3RQbHVnaW4oKTsKLQotICAgIHZpcnR1YWwg
UVN0cmluZ0xpc3Qga2V5cygpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgUVN0cmluZyBkZXNj
cmlwdGlvbkZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0
cmluZ0xpc3QgbWltZXR5cGVzRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBRU3RyaW5nTGlzdCBleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAm
bWltZVR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKFFXZWJPYmplY3RQ
bHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyAmbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xp
c3QgJmFyZ3VtZW50TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdCA9IDA7Ci19OwotCi0jZW5kaWYKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5fcC5oIGIvV2Vi
S2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTIwMjYxZi4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVn
aW5fcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotI2lmbmRlZiBRV0VCT0JKRUNU
UExVR0lOX1BfSAotI2RlZmluZSBRV0VCT0JKRUNUUExVR0lOX1BfSAotCi0jaW5jbHVkZSA8UXRD
b3JlL3FnbG9iYWwuaD4KLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luLmgiCi0KLSNpZiBRVF9W
RVJTSU9OIDwgMHgwNDA0MDAKLQotLyoKLSAgRklYTUU6IFRoaXMgaXMgY29waWVkIGZyb20gcWZh
Y3Rvcnlsb2FkZXJfcC5oLgotICBSZW1vdmUgdGhpcyBvbmNlIHdlIG1hZGUgcWZhY3Rvcnlsb2Fk
ZXIgcHVibGljIGluIFF0Ci0qLwotY2xhc3MgUUZhY3RvcnlMb2FkZXJQcml2YXRlOwotCi1jbGFz
cyBRX0NPUkVfRVhQT1JUIFFGYWN0b3J5TG9hZGVyIDogcHVibGljIFFPYmplY3QKLXsKLSAgICBR
X09CSkVDVF9GQUtFCi0gICAgUV9ERUNMQVJFX1BSSVZBVEUoUUZhY3RvcnlMb2FkZXIpCi0KLXB1
YmxpYzoKLSAgICBRRmFjdG9yeUxvYWRlcihjb25zdCBjaGFyICppaWQsCi0gICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJnBhdGhzID0gUVN0cmluZ0xpc3QoKSwKLSAgICAgICAg
ICAgICAgICAgICBjb25zdCBRU3RyaW5nICZzdWZmaXggPSBRU3RyaW5nKCksCi0gICAgICAgICAg
ICAgICAgICAgUXQ6OkNhc2VTZW5zaXRpdml0eSA9IFF0OjpDYXNlU2Vuc2l0aXZlKTsKLSAgICB+
UUZhY3RvcnlMb2FkZXIoKTsKLQotICAgIFFTdHJpbmdMaXN0IGtleXMoKSBjb25zdDsKLSAgICBR
T2JqZWN0ICppbnN0YW5jZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotCi19OwotCi1jbGFz
cyBRV2ViRnJhbWU7Ci0KLWNsYXNzIFFXZWJGYWN0b3J5TG9hZGVyIDogcHVibGljIFFGYWN0b3J5
TG9hZGVyCi17Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRV2ViRmFjdG9yeUxvYWRlcihj
b25zdCBjaGFyICppaWQsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3Qg
JnBhdGhzID0gUVN0cmluZ0xpc3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry
aW5nICZzdWZmaXggPSBRU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgUXQ6OkNhc2VT
ZW5zaXRpdml0eSA9IFF0OjpDYXNlU2Vuc2l0aXZlKTsKLQotICAgIHN0YXRpYyBRV2ViRmFjdG9y
eUxvYWRlciAqc2VsZigpOwotCi0gICAgUVN0cmluZ0xpc3QgbmFtZXMoKSBjb25zdCB7IHJldHVy
biBrZXlzKCk7IH0KLSAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zKCkgY29uc3Q7Ci0gICAgUVN0
cmluZyBkZXNjcmlwdGlvbkZvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICBR
U3RyaW5nTGlzdCBtaW1ldHlwZXNGb3JOYW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0g
ICAgUVN0cmluZyBuYW1lRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUpIGNvbnN0
OwotICAgIGlubGluZSBib29sIHN1cHBvcnRzTWltZVR5cGUoY29uc3QgUVN0cmluZyAmbWltZVR5
cGUpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICFuYW1lRm9yTWltZXR5cGUobWltZVR5cGUpLmlz
RW1wdHkoKTsKLSAgICB9Ci0KLSAgICBRU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0
IFFTdHJpbmcgJmV4dGVuc2lvbik7Ci0KLSAgICBRT2JqZWN0ICpjcmVhdGUoUVdlYkZyYW1lICpm
cmFtZSwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcyk7Ci0KLSAgICBzdHJ1Y3QgTWltZUluZm8gewot
ICAgICAgICBRU3RyaW5nIHR5cGU7Ci0gICAgICAgIFFTdHJpbmdMaXN0IGV4dGVuc2lvbnM7Ci0g
ICAgfTsKLSAgICBzdHJ1Y3QgSW5mbyB7Ci0gICAgICAgIFFTdHJpbmcgbmFtZTsKLSAgICAgICAg
UVN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAgUUxpc3Q8TWltZUluZm8+IG1pbWVzOwotICAg
IH07Ci0gICAgUUxpc3Q8SW5mbz4gbV9wbHVnaW5JbmZvOwotfTsKLQotI2VuZGlmCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNw
cCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1M2MxNjQuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0Fw
aS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICsw
LDAgQEAKLS8qCi0gIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0gIAotICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gIAotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
IAotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICAKLSovCi0jaW5jbHVkZSAicXdlYm9iamVjdHBs
dWdpbmNvbm5lY3Rvci5oIgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2luY2x1ZGUgInF3
ZWJuZXR3b3JraW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5o
IgotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJwYWdlLmgiCi0KLXN0cnVj
dCBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yUHJpdmF0ZQotewotICAgIFFXZWJGcmFtZSAqZnJh
bWU7Ci19OwotCi1RV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpRV2ViT2JqZWN0UGx1Z2luQ29u
bmVjdG9yKFFXZWJGcmFtZSAqZnJhbWUpCi17Ci0gICAgZCA9IG5ldyBRV2ViT2JqZWN0UGx1Z2lu
Q29ubmVjdG9yUHJpdmF0ZTsKLSAgICBkLT5mcmFtZSA9IGZyYW1lOwotfQotCi1RV2ViRnJhbWUg
KlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I6OmZyYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZC0+ZnJhbWU7Ci19Ci0KLVFXaWRnZXQgKlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I6OnBsdWdp
blBhcmVudFdpZGdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmZyYW1lLT5wYWdlKCktPnZp
ZXcoKTsKLX0KLQotUVdlYk5ldHdvcmtKb2IgKlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I6OnJl
cXVlc3RVcmwoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBUYXJnZXQgdGFyZ2V0
KQotewotICAgIGlmICh0YXJnZXQgIT0gUGx1Z2luKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IFFXZWJOZXR3b3JrSm9iICpqb2IgPSBuZXcgUVdlYk5ldHdvcmtKb2I7Ci0gICAgUVdlYk5ldHdv
cmtKb2JQcml2YXRlICpwID0gam9iLT5kOwotICAgIHAtPmludGVyZmFjZSA9IGQtPmZyYW1lLT5w
YWdlKCktPm5ldHdvcmtJbnRlcmZhY2UoKTsKLSAgICBwLT5jb25uZWN0b3IgPSB0aGlzOwotCi0g
ICAgcC0+cmVxdWVzdCA9ICpyZXF1ZXN0LmQ7Ci0KLSAgICBkLT5mcmFtZS0+cGFnZSgpLT5uZXR3
b3JrSW50ZXJmYWNlKCktPmFkZEpvYihqb2IpOwotICAgIHJldHVybiBqb2I7Ci19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgg
Yi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNjIyNTFhMy4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3
ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAK
LS8qCi0gIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0KLSAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotCi0qLwotI2lmbmRlZiBRV0VCT0JKRUNUUExVR0lOQ09OTkVDVE9SX0gK
LSNkZWZpbmUgUVdFQk9CSkVDVFBMVUdJTkNPTk5FQ1RPUl9ICi0KLSNpbmNsdWRlICJxd2Via2l0
Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KLQotI2lmIFFUX1ZFUlNJT04g
PCAweDA0MDQwMAotCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIKLQotY2xhc3Mg
UVdlYkZyYW1lOwotY2xhc3MgUVdlYlBhZ2U7Ci1jbGFzcyBRV2lkZ2V0OwotY2xhc3MgUVVybDsK
LWNsYXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRlOwotY2xhc3MgUVdlYkZhY3Rv
cnlMb2FkZXI7Ci1jbGFzcyBRV2ViTmV0d29ya01hbmFnZXI7Ci0KLWNsYXNzIFFXRUJLSVRfRVhQ
T1JUIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFf
T0JKRUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZyYW1lICpmcmFtZSgpIGNvbnN0OwotICAgIFFXaWRn
ZXQgKnBsdWdpblBhcmVudFdpZGdldCgpIGNvbnN0OwotCi0gICAgZW51bSBUYXJnZXQgewotICAg
ICAgICBQbHVnaW4sCi0gICAgICAgIE5ldywKLSAgICAgICAgU2VsZiwKLSAgICAgICAgUGFyZW50
LAotICAgICAgICBUb3AKLSAgICB9OwotICAgIFFXZWJOZXR3b3JrSm9iICpyZXF1ZXN0VXJsKGNv
bnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgVGFyZ2V0IHRhcmdldCA9IFBsdWdpbik7
Ci0KLXNpZ25hbHM6Ci0gICAgdm9pZCBzdGFydGVkKFFXZWJOZXR3b3JrSm9iKik7Ci0gICAgdm9p
ZCBkYXRhKFFXZWJOZXR3b3JrSm9iKiwgY29uc3QgUUJ5dGVBcnJheSAmZGF0YSk7Ci0gICAgdm9p
ZCBmaW5pc2hlZChRV2ViTmV0d29ya0pvYiosIGludCBlcnJvckNvZGUpOwotCi1wcml2YXRlOgot
ICAgIGZyaWVuZCBjbGFzcyBRV2ViRmFjdG9yeUxvYWRlcjsKLSAgICBmcmllbmQgY2xhc3MgUVdl
Yk5ldHdvcmtNYW5hZ2VyOwotICAgIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoUVdlYkZyYW1l
ICpmcmFtZSk7Ci0KLSAgICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yUHJpdmF0ZSAqZDsKLX07
Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggNmU1ZTk4NC4uNDEyMWE0MSAx
MDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAKQEAgLTEyOCw2ICsxMjgsNyBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQ
YWdlUHJpdmF0ZShRV2ViUGFnZSAqcXEpCiAgICAgbmV0d29ya0ludGVyZmFjZSA9IDA7CiAjZWxz
ZQogICAgIG5ldHdvcmtNYW5hZ2VyID0gMDsKKyAgICBwbHVnaW5GYWN0b3J5ID0gMDsKICNlbmRp
ZgogICAgIGluc2lkZU9wZW5DYWxsID0gZmFsc2U7CiAKQEAgLTE0MDYsNiArMTQwNywxNiBAQCBR
TmV0d29ya0FjY2Vzc01hbmFnZXIgKlFXZWJQYWdlOjpuZXR3b3JrQWNjZXNzTWFuYWdlcigpIGNv
bnN0CiAgICAgcmV0dXJuIGQtPm5ldHdvcmtNYW5hZ2VyOwogfQogCit2b2lkIFFXZWJQYWdlOjpz
ZXRQbHVnaW5GYWN0b3J5KFFXZWJQbHVnaW5GYWN0b3J5ICpmYWN0b3J5KQoreworICAgIGQtPnBs
dWdpbkZhY3RvcnkgPSBmYWN0b3J5OworfQorCitRV2ViUGx1Z2luRmFjdG9yeSAqUVdlYlBhZ2U6
OnBsdWdpbkZhY3RvcnkoKSBjb25zdAoreworICAgIHJldHVybiBkLT5wbHVnaW5GYWN0b3J5Owor
fQorCiAjZW5kaWYKIAogLyohCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgg
Yi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKaW5kZXggZTc2ZjkzNS4uODU1N2MzMSAxMDA2NDQK
LS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuaApAQCAtNDIsNiArNDIsNyBAQCBjbGFzcyBRV2ViSGlzdG9yeTsKIGNsYXNzIFFXZWJQYWdl
UHJpdmF0ZTsKIGNsYXNzIFFXZWJGcmFtZURhdGE7CiBjbGFzcyBRV2ViTmV0d29ya0ludGVyZmFj
ZTsKK2NsYXNzIFFXZWJQbHVnaW5GYWN0b3J5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ2hyb21lQ2xpZW50UXQ7CkBAIC0xNzEsNiArMTcyLDkgQEAgcHVibGljOgogI2Vsc2UK
ICAgICB2b2lkIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKFFOZXR3b3JrQWNjZXNzTWFuYWdlciAq
bWFuYWdlcik7CiAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrQWNjZXNzTWFuYWdl
cigpIGNvbnN0OworCisgICAgdm9pZCBzZXRQbHVnaW5GYWN0b3J5KFFXZWJQbHVnaW5GYWN0b3J5
ICpmYWN0b3J5KTsKKyAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1Z2luRmFjdG9yeSgpIGNvbnN0
OwogI2VuZGlmCiAKICAgICBxdWludDY0IHRvdGFsQnl0ZXMoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgK
aW5kZXggODBiMWUyOS4uNjRlZGQzMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZV9wLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmgKQEAgLTE1NCw2ICsxNTQsMTAg
QEAgcHVibGljOgogICAgIFFXZWJTZXR0aW5ncyAqc2V0dGluZ3M7CiAKICAgICBRQWN0aW9uICph
Y3Rpb25zW1FXZWJQYWdlOjpXZWJBY3Rpb25Db3VudF07CisKKyNpZiBRVF9WRVJTSU9OID49IDB4
MDQwNDAwCisgICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3Rvcnk7CisjZW5kaWYKIH07
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5j
cHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jYjVkNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L3F0
L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKQEAgLTAsMCArMSwyMyBAQAorI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgInF3ZWJwbHVnaW5mYWN0b3J5LmgiCisKK1FXZWJQbHVnaW5GYWN0
b3J5OjpRV2ViUGx1Z2luRmFjdG9yeShRT2JqZWN0ICpwYXJlbnQpCisgICAgOiBRT2JqZWN0KHBh
cmVudCkKK3sKK30KKworUVdlYlBsdWdpbkZhY3Rvcnk6On5RV2ViUGx1Z2luRmFjdG9yeSgpCit7
Cit9CisKK3ZvaWQgUVdlYlBsdWdpbkZhY3Rvcnk6OnJlZnJlc2hQbHVnaW5zKCkKK3sKK30KKwor
Ym9vbCBRV2ViUGx1Z2luRmFjdG9yeTo6ZXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24sIGNv
bnN0IEV4dGVuc2lvbk9wdGlvbiAqb3B0aW9uLCBFeHRlbnNpb25SZXR1cm4gKm91dHB1dCkKK3sK
K30KKworYm9vbCBRV2ViUGx1Z2luRmFjdG9yeTo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9u
IGV4dGVuc2lvbikgY29uc3QKK3sKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBs
dWdpbmZhY3RvcnkuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzA1ZjViCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
IENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisKKyAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorCisqLworI2lmbmRlZiBRV0VCUExVR0lORkFDVE9SWV9ICisjZGVmaW5lIFFXRUJQ
TFVHSU5GQUNUT1JZX0gKKworI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKKworI2luY2x1ZGUg
PFF0Q29yZS9xb2JqZWN0Lmg+CisjaW5jbHVkZSA8UXRDb3JlL3FzdHJpbmdsaXN0Lmg+CisKK2Ns
YXNzIFFVcmw7CitjbGFzcyBRV2ViUGx1Z2luRmFjdG9yeVByaXZhdGU7CitjbGFzcyBRU3RyaW5n
OworCitjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViUGx1Z2luRmFjdG9yeSA6IHB1YmxpYyBRT2Jq
ZWN0Cit7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWltZVR5cGUgeworICAg
ICAgICBRU3RyaW5nIG5hbWU7CisgICAgICAgIFFTdHJpbmcgZGVzY3JpcHRpb247CisgICAgICAg
IFFTdHJpbmdMaXN0IGZpbGVFeHRlbnNpb25zOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2lu
IHsKKyAgICAgICAgUVN0cmluZyBuYW1lOworICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOwor
ICAgICAgICBRTGlzdDxNaW1lVHlwZT4gbWltZVR5cGVzOworICAgIH07CisKKyAgICBleHBsaWNp
dCBRV2ViUGx1Z2luRmFjdG9yeShRT2JqZWN0ICpwYXJlbnQgPSAwKTsKKyAgICB2aXJ0dWFsIH5R
V2ViUGx1Z2luRmFjdG9yeSgpOworCisgICAgdmlydHVhbCBRTGlzdDxQbHVnaW4+IHBsdWdpbnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlZnJlc2hQbHVnaW5zKCk7CisKKyAgICB2
aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdCA9
IDA7CisKKyAgICBlbnVtIEV4dGVuc2lvbiB7CisgICAgfTsKKyAgICBjbGFzcyBFeHRlbnNpb25P
cHRpb24KKyAgICB7fTsKKyAgICBjbGFzcyBFeHRlbnNpb25SZXR1cm4KKyAgICB7fTsKKyAgICB2
aXJ0dWFsIGJvb2wgZXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24sIGNvbnN0IEV4dGVuc2lv
bk9wdGlvbiAqb3B0aW9uID0gMCwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQgPSAwKTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgUVdlYlBsdWdpbkZhY3RvcnlQcml2YXRlICpkOworfTsKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAKaW5kZXggZWQ5MWI4Ni4uZGRhMGNlZSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQcm9ncmVz
c1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXN0
b3J5SXRlbS5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2lu
Y2x1ZGUgInF3ZWJmcmFtZV9wLmgiCiAjaW5jbHVkZSAicXdlYmhpc3RvcnlpbnRlcmZhY2UuaCIK
KyNpbmNsdWRlICJxd2VicGx1Z2luZmFjdG9yeS5oIgogCiAjaW5jbHVkZSA8cWZpbGVpbmZvLmg+
CiAKQEAgLTYwLDcgKzYyLDYgQEAKICNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgogI2Vsc2UKICNp
bmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5jbHVkZSAicXdlYm9iamVjdHBs
dWdpbl9wLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTkwNywxMSArOTA4LDgg
QEAgT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5
cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29u
dGVudEltYWdlOwogCi0gICAgLy8gIyMjIEZJWE1FIFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAw
eDA0MDQwMAotICAgIGlmIChRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5zdXBwb3J0c01pbWVU
eXBlKG1pbWVUeXBlKSkKLSAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdp
bjsKLSNlbmRpZgorICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5w
bHVnaW5EYXRhKCktPnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUpKQorICAgICAgICByZXR1cm4g
T2JqZWN0Q29udGVudE90aGVyUGx1Z2luOwogCiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmpl
Y3RDb250ZW50RnJhbWU7CkBAIC05NzIsMTEgKzk3MCwxMSBAQCBXaWRnZXQqIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgRWxlbWVudCogZWxlbWVudCwg
Y29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gIyMjIEZJWE1FOiBxdCA0LjQKLSNpZiBR
VF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgb2JqZWN0ID0g
UVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+Y3JlYXRlKG1fd2ViRnJhbWUsIHF1cmwsIG1pbWVU
eXBlLCBwYXJhbXMsIHZhbHVlcyk7Ci0jZW5kaWYKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICBRV2ViUGx1Z2luRmFjdG9yeSogZmFjdG9yeSA9IG1fd2ViRnJhbWUtPnBhZ2UoKS0+cGx1Z2lu
RmFjdG9yeSgpOworICAgICAgICBpZiAoZmFjdG9yeSkKKyAgICAgICAgICAgIG9iamVjdCA9IGZh
Y3RvcnktPmNyZWF0ZShtaW1lVHlwZSwgcXVybCwgcGFyYW1zLCB2YWx1ZXMpOworICAgIH0KIAog
ICAgIGlmIChvYmplY3QpIHsKICAgICAgICAgUVdpZGdldCAqd2lkZ2V0ID0gcW9iamVjdF9jYXN0
PFFXaWRnZXQgKj4ob2JqZWN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA1ZGY4YTM4Li4yZTQ5NzBhIDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgogI2luY2x1ZGUgImpzb2JqZWN0
cy5oIgorI2luY2x1ZGUgInRlc3RwbHVnaW4uaCIKIAogI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVk
ZSA8UUZpbGU+CkBAIC04Nyw2ICs4OCw4IEBAIFdlYlBhZ2U6OldlYlBhZ2UoUVdpZGdldCAqcGFy
ZW50LCBEdW1wUmVuZGVyVHJlZSAqZHJ0KQogICAgIHNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShR
V2ViU2V0dGluZ3M6OkxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4sIGZhbHNlKTsKICAgICBjb25u
ZWN0KHRoaXMsIFNJR05BTChnZW9tZXRyeUNoYW5nZVJlcXVlc3QoY29uc3QgUVJlY3QgJikpLAog
ICAgICAgICAgICAgdGhpcywgU0xPVChzZXRWaWV3R2VvbWV0cnkoY29uc3QgUVJlY3QgJiApKSk7
CisKKyAgICBzZXRQbHVnaW5GYWN0b3J5KG5ldyBUZXN0UGx1Z2luKHRoaXMpKTsKIH0KIAogUVdl
YlBhZ2UgKldlYlBhZ2U6OmNyZWF0ZVdpbmRvdygpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L21haW4uY3BwCmluZGV4IGRkNGMwZTkuLjczOGJlN2YgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L21haW4uY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAidGVzdHBsdWdpbi5oIgogCiAjaW5jbHVkZSA8cXN0cmlu
Z2xpc3QuaD4KICNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KQEAgLTQ5LDEwICs0OCw2IEBACiAj
aW5jbHVkZSA8ZXhlY2luZm8uaD4KICNlbmRpZgogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci1RX0lNUE9SVF9QTFVHSU4odGVzdHBsdWdpbikKLSNlbmRpZgotCiB2b2lkIG1lc3NhZ2VIYW5k
bGVyKFF0TXNnVHlwZSB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogICAgIGlmICh0eXBl
ID09IFF0Q3JpdGljYWxNc2cpIHsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L3Rlc3RwbHVnaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVz
dHBsdWdpbi5jcHAKaW5kZXggMjc1NThjOS4uZjNlMDM5OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAKQEAgLTI3LDEwICsyNyw4IEBACiAgKi8KICNp
bmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLQogVGVz
dFBsdWdpbjo6VGVzdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQpCi0gICAgOiBRV2ViT2JqZWN0UGx1
Z2luKHBhcmVudCkKKyAgICA6IFFXZWJQbHVnaW5GYWN0b3J5KHBhcmVudCkKIHsKIH0KIApAQCAt
MzgsMzQgKzM2LDMyIEBAIFRlc3RQbHVnaW46On5UZXN0UGx1Z2luKCkKIHsKIH0KIAotUVN0cmlu
Z0xpc3QgVGVzdFBsdWdpbjo6a2V5cygpIGNvbnN0CitRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6
UGx1Z2luPiBUZXN0UGx1Z2luOjpwbHVnaW5zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUVN0cmlu
Z0xpc3QoUUxhdGluMVN0cmluZygidGVzdHBsdWdpbiIpKTsKLX0KKyAgICBRV2ViUGx1Z2luRmFj
dG9yeTo6UGx1Z2luIHBsdWdpbjsKIAotUVN0cmluZyBUZXN0UGx1Z2luOjpkZXNjcmlwdGlvbkZv
cktleShjb25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFMYXRpbjFTdHJpbmco
InRlc3RkZXNjcmlwdGlvbiIpOwotfQorICAgIHBsdWdpbi5uYW1lID0gInRlc3RwbHVnaW4iOwor
ICAgIHBsdWdpbi5kZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24iOworICAgIE1pbWVUeXBl
IG1pbWVUeXBlOworICAgIG1pbWVUeXBlLm5hbWUgPSAidGVzdHR5cGUiOworICAgIG1pbWVUeXBl
LmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1ZmZpeGVzIik7CisgICAgcGx1Z2luLm1pbWVU
eXBlcy5hcHBlbmQobWltZVR5cGUpOwogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2luOjptaW1ldHlw
ZXNGb3JLZXkoY29uc3QgUVN0cmluZyAmKSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlz
dChRTGF0aW4xU3RyaW5nKCJ0ZXN0dHlwZSIpKTsKLX0KKyAgICBwbHVnaW4ubmFtZSA9ICJ0ZXN0
cGx1Z2luMiI7CisgICAgcGx1Z2luLmRlc2NyaXB0aW9uID0gInRlc3RkZXNjcmlwdGlvbjIiOwor
ICAgIG1pbWVUeXBlLm5hbWUgPSAidGVzdHR5cGUyIjsKKyAgICBtaW1lVHlwZS5maWxlRXh0ZW5z
aW9ucy5hcHBlbmQoInRlc3RzdWZmaXhlczIiKTsKKyAgICBtaW1lVHlwZS5maWxlRXh0ZW5zaW9u
cy5hcHBlbmQoInRlc3RzdWZmaXhlczMiKTsKKyAgICBwbHVnaW4ubWltZVR5cGVzLmFwcGVuZCht
aW1lVHlwZSk7CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVnaW46OmV4dGVuc2lvbnNGb3JNaW1ldHlw
ZShjb25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRp
bjFTdHJpbmcoInRlc3RzdWZmaXhlcyIpKTsKKyAgICByZXR1cm4gUUxpc3Q8UVdlYlBsdWdpbkZh
Y3Rvcnk6OlBsdWdpbj4oKSA8PCBwbHVnaW47CiB9CiAKLVFPYmplY3QgKlRlc3RQbHVnaW46OmNy
ZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVVybCAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFT
dHJpbmcgJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICYpIGNvbnN0
CitRT2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykg
Y29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KIAotUV9FWFBPUlRfUExVR0lOMih0ZXN0cGx1Z2lu
LCBUZXN0UGx1Z2luKQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC90ZXN0cGx1Z2luLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0
cGx1Z2luLmgKaW5kZXggZTMwNTA2OS4uZWNmZDk3NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaApAQCAtMjUsMjggKzI1LDIxIEBACiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0jaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNDAwCi0jZGVmaW5lIFFUX1NUQVRJQ1BMVUdJTgotI2luY2x1ZGUgPHF3ZWJv
YmplY3RwbHVnaW4uaD4KKyNpbmNsdWRlIDxxd2VicGx1Z2luZmFjdG9yeS5oPgogCiAKLWNsYXNz
IFRlc3RQbHVnaW4gOiBwdWJsaWMgUVdlYk9iamVjdFBsdWdpbgorY2xhc3MgVGVzdFBsdWdpbiA6
IHB1YmxpYyBRV2ViUGx1Z2luRmFjdG9yeQogewogcHVibGljOgogICAgIGV4cGxpY2l0IFRlc3RQ
bHVnaW4oUU9iamVjdCAqcGFyZW50ID0gMCk7CiAgICAgdmlydHVhbCB+VGVzdFBsdWdpbigpOwog
Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7CisgICAgdmlydHVhbCBRTGlz
dDxQbHVnaW4+IHBsdWdpbnMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgUVN0cmluZyBkZXNjcmlw
dGlvbkZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmlu
Z0xpc3QgbWltZXR5cGVzRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBRU3RyaW5nTGlzdCBleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmbWlt
ZVR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKFFXZWJPYmplY3RQbHVn
aW5Db25uZWN0b3IgKmNvbm5lY3RvciwKKyAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShjb25z
dCBRU3RyaW5nICZtaW1lVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
VXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmbWlt
ZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFy
Z3VtZW50TmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xp
c3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdDsKKwogfTsKIAotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19374</attachid>
            <date>2008-02-26 08:16:04 -0800</date>
            <delta_ts>2008-02-28 04:31:46 -0800</delta_ts>
            <desc>updated diff against previous patch</desc>
            <filename>diff_delta.txt</filename>
            <type>text/plain</type>
            <size>7853</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCmluZGV4IDM0MzZmZTAuLjc4OGU1YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNTQsNyArNTQsNiBAQCB3ZWJj
b3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3IubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2Nzcy5sdXQuaCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmx1dC5oIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19uYXZpZ2F0b3IubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5s
dXQuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxJbnB1dEVsZW1lbnRCYXNlVGFibGUu
Y3BwCiAKQEAgLTE3MSwxNSArMTcwLDIwIEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJ
RGVyaXZlZFNvdXJjZXMvSlNJbWFnZURhdGEuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNLZXlib2Fy
ZEV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL0pTTWVkaWFMaXN0LmggXAorCURlcml2ZWRTb3Vy
Y2VzL0pTTWltZVR5cGUuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZUFycmF5LmggXAog
CURlcml2ZWRTb3VyY2VzL0pTTW91c2VFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9KU011dGF0
aW9uRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOYW1lZE5vZGVNYXAuaCBcCisJRGVyaXZl
ZFNvdXJjZXMvSlNOYXZpZ2F0b3IuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlLmggXAogCURl
cml2ZWRTb3VyY2VzL0pTTm9kZUZpbHRlci5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVJdGVy
YXRvci5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVMaXN0LmggXAogCURlcml2ZWRTb3VyY2Vz
L0pTTm90YXRpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNPdmVyZmxvd0V2ZW50LmggXAorCURl
cml2ZWRTb3VyY2VzL0pTUGx1Z2luLmggXAorCURlcml2ZWRTb3VyY2VzL0pTUGx1Z2luQXJyYXku
aCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCBcCiAJRGVyaXZl
ZFNvdXJjZXMvSlNQcm9ncmVzc0V2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL0pTUmFuZ2UuaCBc
CkBAIC0yOTYsMTUgKzMwMCwyMCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2
ZWRTb3VyY2VzL0pTSW1hZ2VEYXRhLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNLZXlib2FyZEV2
ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNZWRpYUxpc3QuY3BwIFwKKwlEZXJpdmVkU291
cmNlcy9KU01pbWVUeXBlLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZUFycmF5LmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNb3VzZUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMv
SlNNdXRhdGlvbkV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOYW1lZE5vZGVNYXAuY3Bw
IFwKKwlEZXJpdmVkU291cmNlcy9KU05hdmlnYXRvci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pT
Tm9kZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTm9kZUZpbHRlci5jcHAgXAogCURlcml2ZWRT
b3VyY2VzL0pTTm9kZUl0ZXJhdG9yLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlTGlzdC5j
cHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTm90YXRpb24uY3BwIFwKIAlEZXJpdmVkU291cmNlcy9K
U092ZXJmbG93RXZlbnQuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9KU1BsdWdpbi5jcHAgXAorCURl
cml2ZWRTb3VyY2VzL0pTUGx1Z2luQXJyYXkuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTUHJvZ3Jlc3NFdmVudC5j
cHAgXAogCURlcml2ZWRTb3VyY2VzL0pTUmFuZ2UuY3BwIFwKQEAgLTQ0MSw3ICs0NTAsMTIgQEAg
SURMX0JJTkRJTkdTICs9ICBcCiAJV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXAogCVdl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwgXAor
CVdlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvU2NyZWVuLmlkbCBc
CisJV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmlkbCBcCisJV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlQXJyYXkuaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmlkbCBcCisJV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkFycmF5LmlkbCBcCiAJV2ViQ29yZS94bWwvRE9NUGFyc2VyLmlkbCBcCiAJ
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRsIFwKIAlXZWJDb3JlL3htbC9Y
TUxTZXJpYWxpemVyLmlkbApAQCAtNDgyLDEzICs0OTYsMTcgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20u
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3Bw
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVNYXBDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTmFtZWROb2Rlc0NvbGxlY3Rpb24uY3BwICBcCisJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9u
LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwIFwKQEAgLTQ5OSw3ICs1MTcs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2RvbS5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2h0bWwuY3BwIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0
b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAogCVdlYkNvcmUv
YmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvUGF1c2Vk
VGltZW91dHMuY3BwIFwKQEAgLTc4OCw2ICs4MDUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcCBcCiAJV2ViQ29yZS9wYWdlL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5j
cHAgXAorCVdlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvUGFnZS5j
cHAgXAogCVdlYkNvcmUvcGFnZS9TY3JlZW4uY3BwIFwKIAlXZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwIFwKQEAgLTg1MCw2ICs4NjgsMTEgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1VuaWNvZGVSYW5n
ZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5z
L01pbWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIFwKKwlX
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIFwKIAlXZWJDb3JlL3BsdWdp
bnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luSW5mb1N0b3Jl
LmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblN0cmVhbS5jcHAgXApAQCAtMjAzNSw3ICsy
MDU4LDggQEAgdnBhdGggJS5pZGwgPSBcCiAgICAgJChXZWJDb3JlKS9wYWdlIFwKICAgICAkKFdl
YkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKLSAgICAkKFdlYkNvcmUpL3ht
bAorICAgICQoV2ViQ29yZSkveG1sIFwKKyAgICAkKFdlYkNvcmUpL3BsdWdpbnMKIAogRGVyaXZl
ZFNvdXJjZXMvSlMlLmg6IERlcml2ZWRTb3VyY2VzL0pTJS5jcHA7CiAKQEAgLTIwNTYsNiArMjA4
MCw1IEBAIENMRUFORklMRVMgKz0gXAogCUpTWFNMVFByb2Nlc3Nvci5sdXQuaCBcCiAJa2pzX2Nz
cy5sdXQuaCBcCiAJa2pzX2V2ZW50cy5sdXQuaCBcCi0Ja2pzX25hdmlnYXRvci5sdXQuaCBcCiAJ
a2pzX3dpbmRvdy5sdXQuaAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2
aWdhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20u
Y3BwCmluZGV4IGMyZDNlY2MuLjc5NTBmMjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZp
Z2F0b3JDdXN0b20uY3BwCkBAIC0xMDksOSArMTA5LDcgQEAgSlNWYWx1ZSogSlNOYXZpZ2F0b3I6
OmFwcFZlcnNpb24oRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiAgICAgaWYgKG5lZWRzWW91VHVi
ZVF1aXJrKGV4ZWMsIGZyYW1lKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKLSAgICAv
LyBWZXJzaW9uIGlzIGV2ZXJ5dGhpbmcgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhl
ICJNb3ppbGxhLyIgcHJlZml4LgotICAgIFN0cmluZyB1c2VyQWdlbnQgPSBmcmFtZS0+bG9hZGVy
KCktPnVzZXJBZ2VudChmcmFtZS0+ZG9jdW1lbnQoKSA/IGZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KSA6IEtVUkwoKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVzZXJBZ2VudC5zdWJzdHJpbmcodXNl
ckFnZW50LmZpbmQoJy8nKSArIDEpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoaW1wLT5hcHBWZXJz
aW9uKCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcCBi
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IDk4N2RlNWEuLjczMWI1ODEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuY3BwCkBAIC05OCw2ICs5OCwxNSBAQCBTdHJpbmcgTmF2aWdhdG9yOjphcHBOYW1lKCkg
Y29uc3QKICAgICByZXR1cm4gIk5ldHNjYXBlIjsKIH0KIAorU3RyaW5nIE5hdmlnYXRvcjo6YXBw
VmVyc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50IHN0
cmluZyBwYXN0IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KKyAgICBjb25zdCBTdHJpbmcgJnVzZXJB
Z2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/
IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICByZXR1cm4gdXNlckFn
ZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7Cit9CisKIFN0cmluZyBOYXZp
Z2F0b3I6Omxhbmd1YWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZGVmYXVsdExhbmd1YWdlKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmggYi9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmgKaW5kZXggOGU3MDFjYS4uZDMyMDdmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5oCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaApAQCAtNDIsNiArNDIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgU3RyaW5nIGFwcENvZGVOYW1lKCkg
Y29uc3Q7CiAgICAgICAgIFN0cmluZyBhcHBOYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBh
cHBWZXJzaW9uKCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0OwogICAg
ICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CiAgICAgICAgIFN0cmluZyBwbGF0Zm9ybSgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCmluZGV4IGNlYzU3ZDcuLjI4ODMyOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTIyNSwxNCArMjI1LDE1
IEBAIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCiAgICAgICAgICgqaXQp
LT5tX3BsdWdpbkRhdGEgPSAwOwogCiAgICAgICAgIGlmIChyZWxvYWQpIHsKLSAgICAgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNv
bnRhaW5zUGx1Z2lucygpKQogICAgICAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2Fk
LmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8RnJhbWU+ID46Oml0ZXJhdG9yIGl0ID0gZnJhbWVzTmVlZGluZ1Jl
bG9hZC5iZWdpbigpOyBpdCAhPSBmcmFtZXNOZWVkaW5nUmVsb2FkLmVuZCgpOyArK2l0KQotICAg
ICAgICAoKml0KS0+bG9hZGVyKCktPnJlbG9hZCgpOworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9hZC5zaXplKCk7ICsraSkKKyAgICAgICAgZnJhbWVz
TmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCktPnJlbG9hZCgpOwogfQogCiBQbHVnaW5EYXRhKiBQ
YWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1l
VHlwZS5oIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgKaW5kZXggNDMzMGI2YS4uYTExZmNh
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgKKysrIGIvV2ViQ29yZS9w
bHVnaW5zL01pbWVUeXBlLmgKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBQYXNzUmVmUHRyPFBsdWdpbj4gZW5hYmxlZFBsdWdpbigpIGNvbnN0OwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgTWltZVR5cGUoUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5E
YXRhLCB1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIE1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2lu
RGF0YT4sIHVuc2lnbmVkIGluZGV4KTsKICAgICAgICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1
Z2luRGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19375</attachid>
            <date>2008-02-26 08:19:07 -0800</date>
            <delta_ts>2008-02-27 04:07:25 -0800</delta_ts>
            <desc>new patch including Gtk+ Automake build fix and more coding style fixes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>140528</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFz
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdp
bnMtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2
aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlw
ZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMg
YW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzU3YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MzUgQEAKKzxodG1sPgorPHNjcmlwdD4KKwordmFyIHBsdWdpbnMgPSBuZXcgQXJyYXk7Citmb3Ig
KHZhciBpID0gMDsgaSA8IG5hdmlnYXRvci5wbHVnaW5zLmxlbmd0aDsgKytpKSB7CisgICAgcGx1
Z2lucy5wdXNoKG5hdmlnYXRvci5wbHVnaW5zW2ldKTsKK30KKwordmFyIG1pbWVUeXBlcyA9IG5l
dyBBcnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGg7
ICsraSkgeworICAgIG1pbWVUeXBlcy5wdXNoKG5hdmlnYXRvci5taW1lVHlwZXNbaV0pOworfQor
CituYXZpZ2F0b3IucGx1Z2lucy5yZWZyZXNoKCk7CisKK3ZhciBvdXRwdXQgPSAiPHByZT4iOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyArK2kpIHsKKyAgICBvdXRwdXQg
Kz0gcGx1Z2luc1tpXS5uYW1lOworICAgIG91dHB1dCArPSAiXG4iOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IG1pbWVUeXBlcy5sZW5ndGg7ICsraSkgeworICAgIG91dHB1dCArPSBtaW1lVHlw
ZXNbaV0udHlwZTsKKyAgICBvdXRwdXQgKz0gIlxuIjsKK30KKworb3V0cHV0ICs9ICI8L3ByZT4i
OworCisvL2RvY3VtZW50LndyaXRlbG4ob3V0cHV0KTsKK2RvY3VtZW50LndyaXRlbG4oIlRlc3Rz
IGFjY2VzcyB0byBwcmV2aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVn
aW5zIGFuZCBtaW1ldHlwZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhp
cyB0ZXh0IGFwcGVhcnMgYW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2Nl
ZWRlZC4iKTsKKworPC9zY3JpcHQ+Cis8Ym9keT4KKzwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKaW5kZXggNThmYzU3OS4uMjk4ZWUyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzMsNiArMzMs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3JlKS9odG1s
IFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAg
JChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3Jl
KS9zdmcKQEAgLTQyMSwxNSArNDIyLDIwIEBAIGFsbCA6IFwKICAgICBKU01lZGlhRXJyb3IuaCBc
CiAgICAgSlNNZWRpYUxpc3QuaCBcCiAgICAgSlNNZXNzYWdlRXZlbnQuaCBcCisgICAgSlNNaW1l
VHlwZS5oIFwKKyAgICBKU01pbWVUeXBlQXJyYXkuaCBcCiAgICAgSlNNb3VzZUV2ZW50LmggXAog
ICAgIEpTTXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9kZU1hcC5oIFwKKyAgICBKU05h
dmlnYXRvci5oIFwKICAgICBKU05vZGUuaCBcCiAgICAgSlNOb2RlRmlsdGVyLmggXAogICAgIEpT
Tm9kZUl0ZXJhdG9yLmggXAogICAgIEpTTm9kZUxpc3QuaCBcCiAgICAgSlNOb3RhdGlvbi5oIFwK
ICAgICBKU092ZXJmbG93RXZlbnQuaCBcCisgICAgSlNQbHVnaW4uaCBcCisgICAgSlNQbHVnaW5B
cnJheS5oIFwKICAgICBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKICAgICBKU1Byb2dyZXNz
RXZlbnQuaCBcCiAgICAgSlNSYW5nZS5oIFwKQEAgLTYwMCw3ICs2MDYsNiBAQCBhbGwgOiBcCiAg
ICAgWFBhdGhHcmFtbWFyLmNwcCBcCiAgICAga2pzX2Nzcy5sdXQuaCBcCiAgICAga2pzX2V2ZW50
cy5sdXQuaCBcCi0gICAga2pzX25hdmlnYXRvci5sdXQuaCBcCiAgICAga2pzX3dpbmRvdy5sdXQu
aCBcCiAgICAgdG9rZW5pemVyLmNwcCBcCiAgICAgV2ViQ29yZS5leHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMzQz
NmZlMC4uNzg4ZTVhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC01NCw3ICs1NCw2IEBAIHdlYmNvcmVfYnVpbHRfbm9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5sdXQuaCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfY3NzLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19ldmVudHMubHV0LmggXAotCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRv
ci5sdXQuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93Lmx1dC5oIFwKIAlXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTElucHV0RWxlbWVudEJhc2VUYWJsZS5jcHAKIApAQCAtMTcx
LDE1ICsxNzAsMjAgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNl
cy9KU0ltYWdlRGF0YS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvSlNNZWRpYUxpc3QuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlw
ZS5oIFwKKwlEZXJpdmVkU291cmNlcy9KU01pbWVUeXBlQXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvSlNNb3VzZUV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL0pTTXV0YXRpb25FdmVudC5oIFwK
IAlEZXJpdmVkU291cmNlcy9KU05hbWVkTm9kZU1hcC5oIFwKKwlEZXJpdmVkU291cmNlcy9KU05h
dmlnYXRvci5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
SlNOb2RlRmlsdGVyLmggXAogCURlcml2ZWRTb3VyY2VzL0pTTm9kZUl0ZXJhdG9yLmggXAogCURl
cml2ZWRTb3VyY2VzL0pTTm9kZUxpc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb3RhdGlvbi5o
IFwKIAlEZXJpdmVkU291cmNlcy9KU092ZXJmbG93RXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMv
SlNQbHVnaW4uaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW5BcnJheS5oIFwKIAlEZXJpdmVk
U291cmNlcy9KU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9KU1By
b2dyZXNzRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNSYW5nZS5oIFwKQEAgLTI5NiwxNSAr
MzAwLDIwIEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvSlNJ
bWFnZURhdGEuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuY3BwIFwKIAlE
ZXJpdmVkU291cmNlcy9KU01lZGlhTGlzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5
cGUuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9KU01pbWVUeXBlQXJyYXkuY3BwIFwKIAlEZXJpdmVk
U291cmNlcy9KU01vdXNlRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU011dGF0aW9uRXZl
bnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05hbWVkTm9kZU1hcC5jcHAgXAorCURlcml2ZWRT
b3VyY2VzL0pTTmF2aWdhdG9yLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlLmNwcCBcCiAJ
RGVyaXZlZFNvdXJjZXMvSlNOb2RlRmlsdGVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2Rl
SXRlcmF0b3IuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVMaXN0LmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvSlNOb3RhdGlvbi5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTT3ZlcmZsb3dFdmVu
dC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTUGx1Z2luLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMv
SlNQbHVnaW5BcnJheS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNQcm9ncmVzc0V2ZW50LmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvSlNSYW5nZS5jcHAgXApAQCAtNDQxLDcgKzQ1MCwxMiBAQCBJRExfQklORElOR1Mg
Kz0gIFwKIAlXZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwgXAogCVdlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbCBcCisJV2ViQ29yZS9wYWdl
L05hdmlnYXRvci5pZGwgXAogCVdlYkNvcmUvcGFnZS9TY3JlZW4uaWRsIFwKKwlXZWJDb3JlL3Bs
dWdpbnMvTWltZVR5cGUuaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwg
XAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
QXJyYXkuaWRsIFwKIAlXZWJDb3JlL3htbC9ET01QYXJzZXIuaWRsIFwKIAlXZWJDb3JlL3htbC9Y
TUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5pZGwgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIu
aWRsCkBAIC00ODIsMTMgKzQ5NiwxNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgXAorCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNO
YW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAgIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdh
dG9yQ3VzdG9tLmNwcCAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBc
CiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIFwKIAlXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUxpc3RDdXN0b20uY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlD
dXN0b20uY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXApAQCAtNDk5LDcgKzUxNyw2IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHAgXAotCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMva2pzX3Byb3h5LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfd2luZG93LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9QYXVzZWRUaW1lb3V0cy5jcHAg
XApAQCAtNzg4LDYgKzgwNSw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdl
L0hpc3RvcnkuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAog
CVdlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmNwcCBcCisJV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5jcHAgXAogCVdlYkNvcmUvcGFnZS9QYWdlLmNwcCBcCiAJV2ViQ29y
ZS9wYWdlL1NjcmVlbi5jcHAgXAogCVdlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgXApAQCAtODUw
LDYgKzg2OCwxMSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vVGlt
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL3RleHQvVW5pY29kZVJhbmdlLmNwcCBcCiAJV2Vi
Q29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuY3Bw
IFwKKwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lu
cy9QbHVnaW4uY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwIFwKKwlXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRh
YmFzZS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIFwKIAlXZWJD
b3JlL3BsdWdpbnMvUGx1Z2luU3RyZWFtLmNwcCBcCkBAIC0yMDM1LDcgKzIwNTgsOCBAQCB2cGF0
aCAlLmlkbCA9IFwKICAgICAkKFdlYkNvcmUpL3BhZ2UgXAogICAgICQoV2ViQ29yZSkvc3RvcmFn
ZSBcCiAgICAgJChXZWJDb3JlKS9zdmcgXAotICAgICQoV2ViQ29yZSkveG1sCisgICAgJChXZWJD
b3JlKS94bWwgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucwogCiBEZXJpdmVkU291cmNlcy9KUyUu
aDogRGVyaXZlZFNvdXJjZXMvSlMlLmNwcDsKIApAQCAtMjA1Niw2ICsyMDgwLDUgQEAgQ0xFQU5G
SUxFUyArPSBcCiAJSlNYU0xUUHJvY2Vzc29yLmx1dC5oIFwKIAlranNfY3NzLmx1dC5oIFwKIAlr
anNfZXZlbnRzLmx1dC5oIFwKLQlranNfbmF2aWdhdG9yLmx1dC5oIFwKIAlranNfd2luZG93Lmx1
dC5oCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUu
cHJvCmluZGV4IGZkMzNjMGMuLjZmM2ZkZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjUwLDcgKzI1MCw2IEBAIExVVF9GSUxF
UyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMva2pzX2Nzcy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKLSAg
ICBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX3dp
bmRvdy5jcHAKIAogTFVUX1RBQkxFX0ZJTEVTICs9IFwKQEAgLTM4MSw2ICszODAsMTEgQEAgSURM
X0JJTkRJTkdTICs9IFwKICAgICBwYWdlL0RPTVdpbmRvdy5pZGwgXAogICAgIHBhZ2UvSGlzdG9y
eS5pZGwgXAogICAgIHBhZ2UvU2NyZWVuLmlkbCBcCisgICAgcGFnZS9OYXZpZ2F0b3IuaWRsIFwK
KyAgICBwbHVnaW5zL1BsdWdpbi5pZGwgXAorICAgIHBsdWdpbnMvTWltZVR5cGUuaWRsIFwKKyAg
ICBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZUFycmF5Lmlk
bCBcCiAgICAgeG1sL0RPTVBhcnNlci5pZGwgXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbi5pZGwgXAogICAgIHhtbC9YTUxTZXJpYWxpemVyLmlkbApAQCAtNDIxLDYgKzQyNSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFt
ZWROb2Rlc0NvbGxlY3Rpb24uY3BwICBcCisgICAgYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0
b20uY3BwICBcCiAgICAgYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOb2Rl
RmlsdGVyQ3VzdG9tLmNwcCBcCkBAIC00MzEsMTIgKzQzNiwxNCBAQCBTT1VSQ0VTICs9IFwKICAg
ICBiaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9K
U1hNTEh0dHBSZXF1ZXN0LmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yLmNw
cCBcCisgICAgYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwIFwKKyAgICBiaW5kaW5ncy9q
cy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNNaW1lVHlwZUFy
cmF5Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9ranNfY3NzLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2RvbS5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfaHRt
bC5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9ranNfcHJveHkuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcCBcCiAg
ICAgYmluZGluZ3MvanMvUGF1c2VkVGltZW91dHMuY3BwIFwKQEAgLTcxNiw2ICs3MjMsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgXAogICAgIHBh
Z2UvRE9NU2VsZWN0aW9uLmNwcCBcCiAgICAgcGFnZS9ET01XaW5kb3cuY3BwIFwKKyAgICBwYWdl
L05hdmlnYXRvci5jcHAgXAogICAgIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdl
L0V2ZW50SGFuZGxlci5jcHAgXAogICAgIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCkBAIC03
MjksNiArNzM3LDExIEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvU2NyZWVuLmNwcCBcCiAgICAg
cGFnZS9TZXR0aW5ncy5jcHAgXAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwIFwKKyAgICBw
bHVnaW5zL1BsdWdpbkRhdGEuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbkFycmF5LmNwcCBcCisg
ICAgcGx1Z2lucy9QbHVnaW4uY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlLmNwcCBcCisgICAg
cGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBcCiAgICAgcGxhdGZvcm0vQXJlbmEuY3BwIFwKICAg
ICBwbGF0Zm9ybS9BcnJheUltcGwuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmlu
Zy5jcHAgXApAQCAtODk0LDYgKzkwNyw3IEBAIHF0LXBvcnQgewogICAgICQkUFdELy4uL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vidmll
dy5oIFwKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmgg
XAorICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCiAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaCBc
CiAgICAgJCRQV0QvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCiAK
QEAgLTk1Niw2ICs5NzAsNyBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS90ZXh0L3F0L1RleHRD
b2RlY1F0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgcGxh
dGZvcm0vcXQvV2lkZ2V0UXQuY3BwIFwKKyAgICBwbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAg
XAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgXAog
ICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBc
CiAgICAgLi4vV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgXApAQCAt
OTY5LDYgKzk4NCw3IEBAIHF0LXBvcnQgewogICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYmhpc3Rv
cnkuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJzZXR0aW5ncy5jcHAgXAogICAgIC4u
L1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnlpbnRlcmZhY2UuY3BwIFwKKyAgICAuLi9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcAogCiAgICAgdW5peDogU09VUkNFUyArPSBwbGF0
Zm9ybS9xdC9TeXN0ZW1UaW1lUXQuY3BwCiAgICAgZWxzZTogU09VUkNFUyArPSBwbGF0Zm9ybS93
aW4vU3lzdGVtVGltZVdpbi5jcHAKQEAgLTk3OCwxNSArOTk0LDEwIEBAIHF0LXBvcnQgewogICAg
ICAgICBIRUFERVJTICs9IFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
Ym5ldHdvcmtpbnRlcmZhY2UuaCBcCiAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBp
L3F3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCBcCi0gICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQv
cXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaCBcCi0gICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQv
cXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5fcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIFwKICAgICAgICAgICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcWNvb2tpZWphci5oCiAKICAgICAgICAgU09VUkNFUyArPSBcCiAg
ICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcCBcCi0g
ICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwIFwKLSAgICAg
ICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAgXAog
ICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmNwcAogCiAgICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEzODgyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01p
bWVUeXBlQXJyYXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk1p
bWVUeXBlQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
S0pTOworCitib29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSosIE1pbWVUeXBlQXJyYXkqIG1pbWVUeXBlQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICByZXR1cm4gbWltZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1l
KHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNN
aW1lVHlwZUFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xv
dC5zbG90QmFzZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5h
bWVHZXR0ZXIocHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05h
dmlnYXRvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1
MGYyMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JD
dXN0b20uY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5p
ZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAg
U3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNO
YXZpZ2F0b3IuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworc3RhdGljIGJvb2wgbmVlZHNZ
b3VUdWJlUXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUqKTsKKworI2lmICFQTEFURk9STShXSU4pCisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSop
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBuZWVkc1lv
dVR1YmVRdWlyayhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUaGlz
IHF1aXJrIHdvcmtzIGFyb3VuZCBhIG1pc3Rha2VuIGNoZWNrIGluIGFuIGFkIGF0IHlvdXR1YmUu
Y29tLgorICAgIC8vIFRoZXJlJ3MgYSBmdW5jdGlvbiBjYWxsZWQgaXNTYWZhcmkgdGhhdCByZXR1
cm5zIGZhbHNlIGlmIHRoZSBmdW5jdGlvbgorICAgIC8vIGNhbGxlZCBpc1dpbmRvd3MgcmV0dXJu
cyB0cnVlOyB0aHVzIHRoZSBzaXRlIG1hbGZ1bmN0aW9ucyB3aXRoIFdpbmRvd3MgU2FmYXJpLgor
CisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgaWYgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyAiaXNX
aW5kb3dzIi4KKyAgICBGdW5jdGlvbkltcCogZnVuY3Rpb24gPSBleGVjLT5mdW5jdGlvbigpOwor
ICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3QgSWRlbnRpZmllciYgaXNXaW5kb3dzRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlmaWVyKCJp
c1dpbmRvd3MiKTsKKyAgICBpZiAoZnVuY3Rpb24tPmZ1bmN0aW9uTmFtZSgpICE9IGlzV2luZG93
c0Z1bmN0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1
aXJrIG9ubHkgaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhbiAiaXNTYWZhcmkiIGZ1bmN0
aW9uLgorICAgIC8vIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgbm90IGl0c2VsZiBuYW1lZCAt
LSBpdCBpcyBzdG9yZWQgaW4gdGhlIGlzU2FmYXJpCisgICAgLy8gcHJvcGVydHksIHRob3VnaCwg
c28gdGhhdCdzIGhvdyB3ZSByZWNvZ25pemUgaXQuCisgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhl
YyA9IGV4ZWMtPmNhbGxpbmdFeGVjU3RhdGUoKTsKKyAgICBpZiAoIWNhbGxpbmdFeGVjKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgRnVuY3Rpb25JbXAqIGNhbGxpbmdGdW5jdGlvbiA9IGNh
bGxpbmdFeGVjLT5mdW5jdGlvbigpOworICAgIGlmICghY2FsbGluZ0Z1bmN0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjYWxsaW5nRXhlYy0+
dGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXImIGlzU2FmYXJpRnVuY3Rpb25OYW1lID0gKm5l
dyBJZGVudGlmaWVyKCJpc1NhZmFyaSIpOworICAgIEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24g
PSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoaXNTYWZhcmlGdW5jdGlvbk5hbWUpOworICAgIGlmIChp
c1NhZmFyaUZ1bmN0aW9uICE9IGNhbGxpbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgLy8g
RklYTUU6IFRoZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRo
aXMgY2hlY2sgYWxvbmcgd2l0aCB0aGUKKyAgICAvLyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhp
cyBmaWxlIHdoZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdzIHNhZmUuCisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9u
bHkgb24gdGhlIGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCisg
ICAgY29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICh1cmwuaG9zdCgp
ICE9ICJ5b3V0dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3LnlvdXR1YmUuY29tIikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1cmwucGF0aCgpICE9ICIvIikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gQXMgd2l0aCBvdGhlciBzaXRlLXNwZWNpZmljIHF1aXJr
cywgYWxsb3cgd2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhpcyBvZmYuCisgICAgLy8gSW4g
dGhlb3J5LCB0aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gY2hlY2sgaWYgdGhlaXIg
Zml4ZXMgYXJlIGVmZmVjdGl2ZS4KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0
dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitKU1ZhbHVlKiBKU05h
dmlnYXRvcjo6YXBwVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgTmF2aWdh
dG9yKiBpbXAgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3IqPihpbXBsKCkpOworICAgIEZyYW1lKiBm
cmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNT
dHJpbmcoIiIpOworCisgICAgaWYgKG5lZWRzWW91VHViZVF1aXJrKGV4ZWMsIGZyYW1lKSkKKyAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoaW1wLT5hcHBW
ZXJzaW9uKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQXJyYXlDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3Vz
dG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FlNGQzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNw
cApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2gg
QVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSlNQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgi
CisjaW5jbHVkZSAiUGx1Z2luQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgS0pTOworCitib29sIEpTUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFt
ZShFeGVjU3RhdGUqLCBQbHVnaW5BcnJheSogcGx1Z2luQXJyYXksIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9y
TmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBK
U1BsdWdpbkFycmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJheSo+KHNsb3Qu
c2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1l
R2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5D
dXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDc5ZDkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApA
QCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1
ZGUgIlBsdWdpbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBL
SlM7CisKK2Jvb2wgSlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVn
aW4qIHBsdWdpbiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBwbHVnaW4tPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVl
KiBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5h
bE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdp
bio+KHNsb3Quc2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1w
bCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfbmF2aWdhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU5ZmJiZC4u
MDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmll
bCBNb2xrZW50aW4gKG1vbGtlbnRpbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwMCBT
dGVmYW4gU2NoaW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5oIgotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJr
anNfd2luZG93LmgiCi0jaW5jbHVkZSA8a2pzL29iamVjdF9vYmplY3QuaD4KLQotI2lmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9QTEFURk9STQotI2lmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0o
UFBDKQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjUFBDIgotI2VsaWYg
UExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShYODYpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9S
X1BMQVRGT1JNICJNYWNJbnRlbCIKLSNlbGlmIFBMQVRGT1JNKFdJTl9PUykKLSNkZWZpbmUgV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIldpbjMyIgotI2Vsc2UKLSNkZWZpbmUgV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk0gIiIKLSNlbmRpZgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05B
VklHQVRPUl9QTEFURk9STQotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLSNk
ZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVCAiR2Vja28iCi0jZW5kaWYgLy8gaWZuZGVm
IFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9Q
Uk9EVUNUX1NVQgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQiAiMjAwMzAx
MDciCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCCi0KLSNp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9S
X1ZFTkRPUiAiQXBwbGUgQ29tcHV0ZXIsIEluYy4iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVf
TkFWSUdBVE9SX1ZFTkRPUgotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIK
LSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQiAiIgotI2VuZGlmIC8vIGlmbmRl
ZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xh
c3MgUGx1Z2luQmFzZSA6IHB1YmxpYyBET01PYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAg
UGx1Z2luQmFzZShFeGVjU3RhdGUqKTsKLSAgICAgICAgdmlydHVhbCB+UGx1Z2luQmFzZSgpOwot
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8UGx1Z2luSW5mbyo+KiBwbHVnaW5zOwotICAg
ICAgICBzdGF0aWMgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiogbWltZXM7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBzdGF0aWMgaW50IG1fcGx1Z0luQ2FjaGVSZWZDb3VudDsKLSAgICB9OwotCi0K
LSAgICBjbGFzcyBQbHVnaW5zIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgUGx1Z2lucyhFeGVjU3RhdGUqIGV4ZWMpIDogUGx1Z2luQmFzZShleGVjKSB7IH0KLSAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAg
IHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IExlbmd0aCB9Owot
ICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsK
LSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgfTsKLQotICAg
IEpTVmFsdWUqIHBsdWdpbnNGdW5jdGlvblJlZnJlc2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBMaXN0Jik7Ci0KLSAgICBjbGFzcyBNaW1lVHlwZXMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZXMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdp
bkJhc2UoZXhlYykgeyB9OwotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
SlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0Owot
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAg
ICBlbnVtIHsgTGVuZ3RoIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUq
IGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNv
bnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNs
b3QmKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFBsdWdpbkJhc2Ugewot
ICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luKEV4ZWNTdGF0ZSogZXhlYywgUGx1Z2luSW5mbyog
aW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVudW0geyBOYW1lLCBGaWxlbmFtZSwgRGVzY3Jp
cHRpb24sIExlbmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBp
bmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90
Jik7Ci0KLSAgICAgICAgUGx1Z2luSW5mbyogbV9pbmZvOwotICAgIH07Ci0KLSAgICBjbGFzcyBN
aW1lVHlwZSA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVU
eXBlKEV4ZWNTdGF0ZSogZXhlYywgTWltZUNsYXNzSW5mbyogaW5mbykgOiBQbHVnaW5CYXNlKGV4
ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29u
c3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7
IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0g
ICAgICAgIGVudW0geyBUeXBlLCBTdWZmaXhlcywgRGVzY3JpcHRpb24sIEVuYWJsZWRQbHVnaW4g
fTsKLSAgICBwcml2YXRlOgotICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtX2luZm87Ci0gICAgfTsK
LQotfQotCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5sdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jb25zdCBDbGFzc0luZm8gUGx1Z2luczo6aW5mbyA9IHsgIlBsdWdpbkFycmF5Iiwg
MCwgJlBsdWdpbnNUYWJsZSB9OwotY29uc3QgQ2xhc3NJbmZvIE1pbWVUeXBlczo6aW5mbyA9IHsg
Ik1pbWVUeXBlQXJyYXkiLCAwLCAmTWltZVR5cGVzVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBQ
bHVnaW46OmluZm8gPSB7ICJQbHVnaW4iLCAwLCAmUGx1Z2luVGFibGUgfTsKLWNvbnN0IENsYXNz
SW5mbyBNaW1lVHlwZTo6aW5mbyA9IHsgIk1pbWVUeXBlIiwgMCwgJk1pbWVUeXBlVGFibGUgfTsK
LQotVmVjdG9yPFBsdWdpbkluZm8qPiogUGx1Z2luQmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8
TWltZUNsYXNzSW5mbyo+KiBQbHVnaW5CYXNlOjptaW1lcyA9IDA7Ci1pbnQgUGx1Z2luQmFzZTo6
bV9wbHVnSW5DYWNoZVJlZkNvdW50ID0gMDsKLQotY29uc3QgQ2xhc3NJbmZvIE5hdmlnYXRvcjo6
aW5mbyA9IHsgIk5hdmlnYXRvciIsIDAsICZOYXZpZ2F0b3JUYWJsZSB9OwotLyoKLUBiZWdpbiBO
YXZpZ2F0b3JUYWJsZSAxMwotICBhcHBDb2RlTmFtZSAgIE5hdmlnYXRvcjo6QXBwQ29kZU5hbWUg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcE5hbWUgICAgICAgTmF2
aWdhdG9yOjpBcHBOYW1lICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkK
LSAgYXBwVmVyc2lvbiAgICBOYXZpZ2F0b3I6OkFwcFZlcnNpb24gICAgICAgICAgICAgICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBsYW5ndWFnZSAgICAgIE5hdmlnYXRvcjo6TGFuZ3VhZ2Ug
ICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHVzZXJBZ2VudCAgICAg
TmF2aWdhdG9yOjpVc2VyQWdlbnQgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgcGxhdGZvcm0gICAgICBOYXZpZ2F0b3I6OlBsYXRmb3JtICAgICAgICAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwbHVnaW5zICAgICAgIE5hdmlnYXRvcjo6X1BsdWdp
bnMgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIG1pbWVUeXBlcyAg
ICAgTmF2aWdhdG9yOjpfTWltZVR5cGVzICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLSAgcHJvZHVjdCAgICAgICBOYXZpZ2F0b3I6OlByb2R1Y3QgICAgICAgICAgICAgICAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwcm9kdWN0U3ViICAgIE5hdmlnYXRvcjo6UHJv
ZHVjdFN1YiAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHZlbmRvciAg
ICAgICAgTmF2aWdhdG9yOjpWZW5kb3IgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKLSAgdmVuZG9yU3ViICAgICBOYXZpZ2F0b3I6OlZlbmRvclN1YiAgICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBjb29raWVFbmFibGVkIE5hdmlnYXRvcjo6
Q29va2llRW5hYmxlZCAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGphdmFF
bmFibGVkICAgbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQgIERvbnREZWxldGV8RnVuY3Rp
b24gMAotQGVuZAotKi8KLQotTmF2aWdhdG9yOjpOYXZpZ2F0b3IoSlNPYmplY3QqIHByb3RvdHlw
ZSwgRnJhbWUqIGZyYW1lKQotICAgIDogRE9NT2JqZWN0KHByb3RvdHlwZSkKLSAgICAsIG1fZnJh
bWUoZnJhbWUpCi17Ci19Ci0KLWJvb2wgTmF2aWdhdG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgcmV0dXJuIGdldFN0YXRpY1Byb3BlcnR5U2xvdDxOYXZpZ2F0b3IsIEpT
T2JqZWN0PihleGVjLCAmTmF2aWdhdG9yVGFibGUsIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7
Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1lKik7
Ci0KLSNpZiAhUExBVEZPUk0oV0lOKQotCi1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNZb3VUdWJl
UXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2Vs
c2UKLQotc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBGcmFt
ZSogZnJhbWUpCi17Ci0gICAgLy8gVGhpcyBxdWlyayB3b3JrcyBhcm91bmQgYSBtaXN0YWtlbiBj
aGVjayBpbiBhbiBhZCBhdCB5b3V0dWJlLmNvbS4KLSAgICAvLyBUaGVyZSdzIGEgZnVuY3Rpb24g
Y2FsbGVkIGlzU2FmYXJpIHRoYXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24KLSAgICAv
LyBjYWxsZWQgaXNXaW5kb3dzIHJldHVybnMgdHJ1ZTsgdGh1cyB0aGUgc2l0ZSBtYWxmdW5jdGlv
bnMgd2l0aCBXaW5kb3dzIFNhZmFyaS4KLQotICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRo
ZSBmdW5jdGlvbidzIG5hbWUgaXMgImlzV2luZG93cyIuCi0gICAgRnVuY3Rpb25JbXAqIGZ1bmN0
aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKLSAgICBpZiAoIWZ1bmN0aW9uKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXImIGlzV2luZG93c0Z1bmN0aW9u
TmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNXaW5kb3dzIik7Ci0gICAgaWYgKGZ1bmN0aW9uLT5m
dW5jdGlvbk5hbWUoKSAhPSBpc1dpbmRvd3NGdW5jdGlvbk5hbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgYW4gImlzU2FmYXJpIiBmdW5jdGlvbi4KLSAgICAvLyBIb3dldmVyLCB0aGF0IGZ1bmN0
aW9uIGlzIG5vdCBpdHNlbGYgbmFtZWQgLS0gaXQgaXMgc3RvcmVkIGluIHRoZSBpc1NhZmFyaQot
ICAgIC8vIHByb3BlcnR5LCB0aG91Z2gsIHNvIHRoYXQncyBob3cgd2UgcmVjb2duaXplIGl0Lgot
ICAgIEV4ZWNTdGF0ZSogY2FsbGluZ0V4ZWMgPSBleGVjLT5jYWxsaW5nRXhlY1N0YXRlKCk7Ci0g
ICAgaWYgKCFjYWxsaW5nRXhlYykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEZ1bmN0aW9u
SW1wKiBjYWxsaW5nRnVuY3Rpb24gPSBjYWxsaW5nRXhlYy0+ZnVuY3Rpb24oKTsKLSAgICBpZiAo
IWNhbGxpbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiB0
aGlzT2JqZWN0ID0gY2FsbGluZ0V4ZWMtPnRoaXNWYWx1ZSgpOwotICAgIGlmICghdGhpc09iamVj
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyJiBp
c1NhZmFyaUZ1bmN0aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNTYWZhcmkiKTsKLSAgICBK
U1ZhbHVlKiBpc1NhZmFyaUZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2FmYXJp
RnVuY3Rpb25OYW1lKTsKLSAgICBpZiAoaXNTYWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVuY3Rp
b24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOyAKLSAgICAvLyBGSVhNRTogVGhlIGRvY3VtZW50IGlzIG5ldmVyIG51
bGwsIHNvIHdlIHNob3VsZCByZW1vdmUgdGhpcyBjaGVjayBhbG9uZyB3aXRoIHRoZQotICAgIC8v
IG90aGVyIHNpbWlsYXIgb25lcyBpbiB0aGlzIGZpbGUgd2hlbiB3ZSBhcmUgYWJzb2x1dGVseSBz
dXJlIGl0J3Mgc2FmZS4KLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBvbiB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgZ2xv
YmFsIHZlcnNpb24gb2YgWW91VHViZS4KLSAgICBjb25zdCBLVVJMJiB1cmwgPSBkb2N1bWVudC0+
dXJsKCk7Ci0gICAgaWYgKHVybC5ob3N0KCkgIT0gInlvdXR1YmUuY29tIiAmJiB1cmwuaG9zdCgp
ICE9ICJ3d3cueW91dHViZS5jb20iKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHVy
bC5wYXRoKCkgIT0gIi8iKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBcyB3aXRo
IG90aGVyIHNpdGUtc3BlY2lmaWMgcXVpcmtzLCBhbGxvdyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8g
dHVybiB0aGlzIG9mZi4KLSAgICAvLyBJbiB0aGVvcnksIHRoaXMgYWxsb3dzIHdlYnNpdGUgZGV2
ZWxvcGVycyB0byBjaGVjayBpZiB0aGVpciBmaXhlcyBhcmUgZWZmZWN0aXZlLgotICAgIFNldHRp
bmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOyAKLSAgICBpZiAoIXNldHRpbmdzKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lm
aWNRdWlya3MoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLSNlbmRpZgotCi1KU1ZhbHVlKiBOYXZpZ2F0b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2Fz
ZSBBcHBDb2RlTmFtZToKLSAgICByZXR1cm4ganNTdHJpbmcoIk1vemlsbGEiKTsKLSAgY2FzZSBB
cHBOYW1lOgotICAgIHJldHVybiBqc1N0cmluZygiTmV0c2NhcGUiKTsKLSAgY2FzZSBBcHBWZXJz
aW9uOiB7Ci0gICAgaWYgKG5lZWRzWW91VHViZVF1aXJrKGV4ZWMsIG1fZnJhbWUpKQotICAgICAg
ICByZXR1cm4ganNTdHJpbmcoIiIpOwotICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0
aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXguCi0gICAgY29u
c3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKLSAg
ICByZXR1cm4ganNTdHJpbmcodXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycp
ICsgMSkpOwotICB9Ci0gIGNhc2UgUHJvZHVjdDoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09S
RV9OQVZJR0FUT1JfUFJPRFVDVCk7Ci0gIGNhc2UgUHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNT
dHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAg
ICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5k
b3JTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIp
OwotICBjYXNlIExhbmd1YWdlOgotICAgIHJldHVybiBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2Uo
KSk7Ci0gIGNhc2UgVXNlckFnZW50OgotICAgIHJldHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2Fk
ZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKSA6IEtVUkwoKSkpOwotICBjYXNlIFBsYXRmb3JtOgotICAgIHJldHVybiBqc1N0cmlu
ZyhXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSk7Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0
dXJuIG5ldyBQbHVnaW5zKGV4ZWMpOwotICBjYXNlIF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5l
dyBNaW1lVHlwZXMoZXhlYyk7Ci0gIGNhc2UgQ29va2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNC
b29sZWFuKGNvb2tpZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1
cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5E
YXRhSWZOZWNlc3NhcnkoKQotewotICAgIGlmICghcGx1Z2lucykgewotICAgICAgICBwbHVnaW5z
ID0gbmV3IFZlY3RvcjxQbHVnaW5JbmZvKj47Ci0gICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxN
aW1lQ2xhc3NJbmZvKj47Ci0gICAgICAgIAotICAgICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24K
LSAgICAgICAgUGx1Z2luSW5mb1N0b3JlIGM7Ci0gICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50
ID0gYy5wbHVnaW5Db3VudCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1
Z2luQ291bnQ7IG4rKykgewotICAgICAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVh
dGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleChuKTsKLSAgICAgICAgICAgIGlmICghcGx1Z2lu
KSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
cGx1Z2lucy0+YXBwZW5kKHBsdWdpbik7Ci0gICAgICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWlt
ZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJh
dG9yIGl0ciA9IHBsdWdpbi0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAg
ICAgICAgICAgICAgbWltZXMtPmFwcGVuZCgqaXRyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
UGx1Z2luQmFzZTo6UGx1Z2luQmFzZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgOiBET01PYmplY3Qo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkKLXsKLSAgICBj
YWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudCsr
OwotfQotCi1QbHVnaW5CYXNlOjp+UGx1Z2luQmFzZSgpCi17Ci0gICAgbV9wbHVnSW5DYWNoZVJl
ZkNvdW50LS07Ci0gICAgaWYgKCFtX3BsdWdJbkNhY2hlUmVmQ291bnQpIHsKLSAgICAgICAgaWYg
KHBsdWdpbnMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAg
ICAgICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgICAgIHBsdWdpbnMgPSAwOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtaW1lcykgewotICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpt
aW1lcyk7Ci0gICAgICAgICAgICBkZWxldGUgbWltZXM7Ci0gICAgICAgICAgICBtaW1lcyA9IDA7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJl
bG9hZCkKLXsKLSAgICBpZiAocGx1Z2lucykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBs
dWdpbnMpOwotICAgICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAgICAgcGx1Z2lucyA9IDA7Ci0g
ICAgfQotICAgIGlmIChtaW1lcykgewotICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsK
LSAgICAgICAgZGVsZXRlIG1pbWVzOwotICAgICAgICBtaW1lcyA9IDA7Ci0gICAgfQotICAgIAot
ICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZCk7Ci0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3Nh
cnkoKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBQbHVnaW5zVGFibGUgMgot
ICBsZW5ndGggICAgICAgIFBsdWdpbnM6Okxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgcmVmcmVzaCAgICAgICBwbHVnaW5zRnVuY3Rpb25SZWZyZXNo
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi0KLUpTVmFs
dWUqIFBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIo
cGx1Z2lucy0+c2l6ZSgpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBu
ZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVl
KiBQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFs
T2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVy
dHlOYW1lOwotICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMt
PmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1
Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyog
cGwgPSAqaXRyOwotICAgICAgICBpZiAocGwtPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQot
ICAgICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBQbHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5k
RW50cnkoJlBsdWdpbnNUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAg
ICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgICBzbG90LnNldFN0YXRpY0Vu
dHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAg
ICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBs
dWdpbnM+KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBs
dWdpbnNbI10KLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9w
ZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5z
aXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhH
ZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBwbHVnaW5bbmFtZV0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5k
ID0gcGx1Z2lucy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRl
cmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAg
ICAgICAgIGlmICgoKml0ciktPm5hbWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAg
ICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgbmFtZUdldHRlcik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gUGx1Z2luQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlc1RhYmxlIDEK
LSAgbGVuZ3RoICAgICAgICBNaW1lVHlwZXM6Okxlbmd0aCAgICAgICBEb250RGVsZXRlfFJlYWRP
bmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5n
dGgpOwotICByZXR1cm4ganNOdW1iZXIobWltZXMtPnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIE1p
bWVUeXBlczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxP
YmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90
JiBzbG90KQotewotICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3Qu
aW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEF0b21pY1N0cmluZyBh
dG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVD
bGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0
cisrKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8qIG0gPSAoKml0cik7Ci0gICAgICAgIGlmICht
LT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWlt
ZVR5cGUoZXhlYywgbSk7Ci0gICAgfQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1i
b29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29u
c3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50
cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPE1pbWVUeXBlcz4pOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gbWltZVR5cGVzWyNdCi0gICAgICAg
IGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMy
KCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwgbWltZXMtPnNpemUoKSkgewotICAgICAgICAg
ICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbWVUeXBlc1tuYW1lXQot
ICAgICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwot
ICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5k
KCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0g
bWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCpp
dHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJh
c2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0K
LS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luVGFibGUgNAotICBuYW1lICAg
ICAgICAgIFBsdWdpbjo6TmFtZSAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZmls
ZW5hbWUgICAgICBQbHVnaW46OkZpbGVuYW1lICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IGRlc2NyaXB0aW9uICAgUGx1Z2luOjpEZXNjcmlwdGlvbiAgICAgRG9udERlbGV0ZXxSZWFkT25s
eQotICBsZW5ndGggICAgICAgIFBsdWdpbjo6TGVuZ3RoICAgICAgICAgIERvbnREZWxldGV8UmVh
ZE9ubHkKLUBlbmQKLSovCi0KLUpTVmFsdWUqIFBsdWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBOYW1lOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5uYW1lKTsKLSAg
ICBjYXNlIEZpbGVuYW1lOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5maWxlKTsK
LSAgICBjYXNlIERlc2NyaXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5k
ZXNjKTsKLSAgICBjYXNlIExlbmd0aDogCi0gICAgICAgIHJldHVybiBqc051bWJlcihtX2luZm8t
Pm1pbWVzLnNpemUoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKDApOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbjo6aW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIFBsdWdpbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2Uo
KSk7Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCB0aGlzT2JqLT5tX2luZm8tPm1pbWVz
LmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW46Om5hbWVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiog
dGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgQXRv
bWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0b3I8
TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gdGhp
c09iai0+bV9pbmZvLT5taW1lcy5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAg
ICBNaW1lQ2xhc3NJbmZvKiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9PSBhdG9t
aWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0p
OwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotCi1ib29sIFBsdWdpbjo6
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBl
bnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVnaW5UYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAg
ICBpZiAoZW50cnkpIHsKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwg
c3RhdGljVmFsdWVHZXR0ZXI8UGx1Z2luPik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpblsjXQotICAgICAgICBib29sIG9rOwotICAgICAgICB1
bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAo
b2sgJiYgaSA8IG1faW5mby0+bWltZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1
c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1Z2luWyJuYW1lIl0KLSAgICAgICAgQXRvbWlj
U3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9y
PE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbV9pbmZvLT5taW1lcy5lbmQoKTsKLSAg
ICAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBtX2luZm8t
Pm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCpp
dHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJh
c2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0v
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gTWltZVR5cGVUYWJsZSA0Ci0gIHR5
cGUgICAgICAgICAgTWltZVR5cGU6OlR5cGUgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBzdWZmaXhlcyAgICAgIE1pbWVUeXBlOjpTdWZmaXhlcyAgICAgIERvbnREZWxldGV8UmVhZE9u
bHkKLSAgZGVzY3JpcHRpb24gICBNaW1lVHlwZTo6RGVzY3JpcHRpb24gICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIGVuYWJsZWRQbHVnaW4gTWltZVR5cGU6OkVuYWJsZWRQbHVnaW4gRG9udERlbGV0
ZXxSZWFkT25seQotQGVuZAotKi8KLQotSlNWYWx1ZSogTWltZVR5cGU6OmdldFZhbHVlUHJvcGVy
dHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+dHlw
ZSk7Ci0gICAgY2FzZSBTdWZmaXhlczoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+
c3VmZml4ZXMpOwotICAgIGNhc2UgRGVzY3JpcHRpb246Ci0gICAgICAgIHJldHVybiBqc1N0cmlu
ZyhtX2luZm8tPmRlc2MpOwotICAgIGNhc2UgRW5hYmxlZFBsdWdpbjogewotICAgICAgICBGcmFt
ZSogZnJhbWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7
Ci0gICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZy
YW1lLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBs
dWdpbnNFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVjLCBtX2lu
Zm8tPnBsdWdpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci19Ci0KLWJvb2wgTWltZVR5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TWltZVR5cGUsIFBsdWdpbkJhc2U+
KGV4ZWMsICZNaW1lVHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1K
U1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIFBsdWdpbkJhc2U6OnJlZnJlc2goYXJnc1swXS0+
dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1
ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygm
TmF2aWdhdG9yOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKLSAgICBOYXZpZ2F0b3IqIG5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+KHRoaXNP
YmopOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+ZnJhbWUo
KS0+c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAmJiBzZXR0
aW5ncy0+aXNKYXZhRW5hYmxlZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfbmF2aWdhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNmY3ZWEu
LjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaWZuZGVmIGtqc19uYXZpZ2F0b3JfaAotI2RlZmluZSBranNfbmF2aWdhdG9yX2gKLQotI2lu
Y2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNz
IEZyYW1lOwotCi0gICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVjdCB7Ci0gICAg
cHVibGljOgotICAgICAgICBOYXZpZ2F0b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBlLCBGcmFt
ZSopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVj
U3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAg
ICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQg
dG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgS0pT
OjpDbGFzc0luZm8gaW5mbzsKLQotICAgICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5hbWUs
IEFwcFZlcnNpb24sIExhbmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAgICAgICAg
ICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgVmVu
ZG9yU3ViLCBDb29raWVFbmFibGVkIH07Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUqIG1fZnJh
bWU7Ci0gICAgfTsKLQotICAgIEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVu
YWJsZWQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7
Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfd2luZG93LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAK
aW5kZXggMDM1ZDJiMy4uMzAyNGU5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfd2luZG93LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBA
IC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVv
dXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZv
U3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0
aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTU5LDcgKzU4LDYgQEAKICNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJr
anNfZXZlbnRzLmgiCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5oIgogI2luY2x1ZGUgImtqc19w
cm94eS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKQEAgLTE2Myw4ICsxNjEsNiBA
QCBjb25zdCBDbGFzc0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1Rh
YmxlIH07CiAgIGNyeXB0byAgICAgICAgICAgICAgICBXaW5kb3c6OkNyeXB0byAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQogICBldmVudCAgICAgICAgICAgICAgICAgV2luZG93OjpF
dmVudF8gICAgICAgICAgICAgIERvbnREZWxldGUKICAgbG9jYXRpb24gICAgICAgICAgICAgIFdp
bmRvdzo6TG9jYXRpb25fICAgICAgICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAg
ICAgICBXaW5kb3c6Ok5hdmlnYXRvcl8gICAgICAgICAgRG9udERlbGV0ZQotICBjbGllbnRJbmZv
cm1hdGlvbiAgICAgV2luZG93OjpDbGllbnRJbmZvcm1hdGlvbiAgIERvbnREZWxldGUKICMgLS0g
RXZlbnQgTGlzdGVuZXJzIC0tCiAgIG9uYWJvcnQgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYWJv
cnQgICAgICAgICAgICAgRG9udERlbGV0ZQogICBvbmJsdXIgICAgICAgICAgICAgICAgV2luZG93
OjpPbmJsdXIgICAgICAgICAgICAgIERvbnREZWxldGUKQEAgLTQ3OSwxOCArNDc1LDYgQEAgSlNW
YWx1ZSAqV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZC0+bV9ldnQpOwogICAgIGNhc2UgTG9j
YXRpb25fOgogICAgICAgcmV0dXJuIGxvY2F0aW9uKCk7Ci0gICAgY2FzZSBOYXZpZ2F0b3JfOgot
ICAgIGNhc2UgQ2xpZW50SW5mb3JtYXRpb246IHsKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0
aGUgbmF2aWdhdG9yIGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRp
bWUuCi0gICAgICBOYXZpZ2F0b3IqIG4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCksIGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgICAv
LyBGSVhNRTogdGhpcyB3aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxl
IGZyb20gd2luZG93cyB0aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUg
Zmlyc3QgdGltZSwgYnV0IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KLSAgICAg
IGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERv
bnREZWxldGUpOwotICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgi
Y2xpZW50SW5mb3JtYXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAgIHJldHVybiBuOwotICAg
IH0KICAgICBjYXNlIEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdl
L3dpbi9GcmFtZVdpbi5jcHAgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4
IDY1OTlhODguLjY2NjY0ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdp
bi5jcHAKKysrIGIvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcApAQCAtNDQsNyArNDQs
NiBAQAogI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUmVndWxh
ckV4cHJlc3Npb24uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IDRjODA4ZDEuLjEzYjgxNWEgMTAwNzU1Ci0t
LSBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJk
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9y
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RP
TUltcGxlbWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcApp
bmRleCBkYjI3N2Q1Li4zZTFkNGY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0z
OCw4ICszOCw4IEBACiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIK
ICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiVGV4dERvY3VtZW50LmgiCkBAIC0zNjYsMTYgKzM2NiwyMCBAQCBQYXNzUmVmUHRy
PERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5n
JiB0eXBlLCBGcmFtZQogICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KHRo
aXMsIGZyYW1lKTsKICNlbmRpZgogCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IDA7Cisg
ICAgaWYgKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBsdWdpbkRhdGEgPSBmcmFt
ZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCk7CisKICAgICAvLyBQREYgaXMgb25lIGltYWdlIHR5cGUg
Zm9yIHdoaWNoIGEgcGx1Z2luIGNhbiBvdmVycmlkZSBidWlsdC1pbiBzdXBwb3J0LgogICAgIC8v
IFdlIGRvIG5vdCB3YW50IFF1aWNrVGltZSB0byB0YWtlIG92ZXIgYWxsIGltYWdlIHR5cGVzLCBv
YnZpb3VzbHkuCi0gICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0g
InRleHQvcGRmIikgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKHR5cGUpKQor
ICAgIGlmICgodHlwZSA9PSAiYXBwbGljYXRpb24vcGRmIiB8fCB0eXBlID09ICJ0ZXh0L3BkZiIp
ICYmIHBsdWdpbkRhdGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkKICAg
ICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgaWYgKElt
YWdlOjpzdXBwb3J0c1R5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VEb2N1bWVu
dCh0aGlzLCBmcmFtZSk7CiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGV4Y2VwdCB0ZXh0L3BsYWlu
IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBsdWdpbnMuIEluIHBhcnRpY3VsYXIsIEFkb2JlIFNWRyBW
aWV3ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIFNWRywgaWYgaW5zdGFsbGVkLgogICAgIC8vIERpc2Fs
bG93aW5nIHBsdWctaW5zIHRvIHVzZSB0ZXh0L3BsYWluIHByZXZlbnRzIHBsdWctaW5zIGZyb20g
aGlqYWNraW5nIGEgZnVuZGFtZW50YWwgdHlwZSB0aGF0IHRoZSBicm93c2VyIGlzIGV4cGVjdGVk
IHRvIGhhbmRsZSwKICAgICAvLyBhbmQgYWxzbyBzZXJ2ZXMgYXMgYW4gb3B0aW1pemF0aW9uIHRv
IHByZXZlbnQgbG9hZGluZyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBpbiB0aGUgY29tbW9uIGNhc2Uu
Ci0gICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9y
dHNNSU1FVHlwZSh0eXBlKSkgCisgICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIHBsdWdp
bkRhdGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkgCiAgICAgICAgIHJl
dHVybiBuZXcgUGx1Z2luRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIGlmIChpc1RleHRNSU1F
VHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RG9jdW1lbnQodGhpcywgZnJhbWUp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDAyMzc2YmEuLjI1NTE5YzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKQEAgLTE1OTMsNyArMTU5Myw5IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNo
b3VsZFVzZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wKICAgICAvLyBBbGxvdyBvdGhlciBwbHVnLWlucyB0byB3aW4gb3ZlciBRdWlja1RpbWUgYmVj
YXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGEgcGx1Zy1pbiB0aGF0CiAgICAgLy8gY2Fu
IGhhbmRsZSBUSUZGICh3aGljaCBRdWlja1RpbWUgY2FuIGFsc28gaGFuZGxlKSB0aGV5IHByb2Jh
Ymx5IGludGVuZGVkIHRvIG92ZXJyaWRlIFFULgogICAgIGlmICgobWltZVR5cGUgPT0gImltYWdl
L3RpZmYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94
LXRpZmYiKSkgewotICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IFBsdWdpbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgU3RyaW5nIHBsdWdpbk5h
bWU7CisgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwbHVnaW5OYW1l
ID0gbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCktPnBsdWdpbk5hbWVGb3JNaW1lVHlwZSht
aW1lVHlwZSk7CiAgICAgICAgIGlmICghcGx1Z2luTmFtZS5pc0VtcHR5KCkgJiYgIXBsdWdpbk5h
bWUuY29udGFpbnMoIlF1aWNrVGltZSIsIGZhbHNlKSkgCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDIyZjc0ODkuLmVkYjVmYjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
SGlzdG9yeS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdmlnYXRv
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xNTQsNiArMTU1LDEwIEBAIHZvaWQgRE9NV2lu
ZG93OjpjbGVhcigpCiAgICAgaWYgKG1fY29uc29sZSkKICAgICAgICAgbV9jb25zb2xlLT5kaXNj
b25uZWN0RnJhbWUoKTsKICAgICBtX2NvbnNvbGUgPSAwOworCisgICAgaWYgKG1fbmF2aWdhdG9y
KQorICAgICAgICBtX25hdmlnYXRvci0+ZGlzY29ubmVjdEZyYW1lKCk7CisgICAgbV9uYXZpZ2F0
b3IgPSAwOwogfQogCiBTY3JlZW4qIERPTVdpbmRvdzo6c2NyZWVuKCkgY29uc3QKQEAgLTIxOSw2
ICsyMjQsMTMgQEAgQ29uc29sZSogRE9NV2luZG93Ojpjb25zb2xlKCkgY29uc3QKICAgICByZXR1
cm4gbV9jb25zb2xlLmdldCgpOwogfQogCitOYXZpZ2F0b3IqIERPTVdpbmRvdzo6bmF2aWdhdG9y
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICBtX25hdmlnYXRvciA9
IE5hdmlnYXRvcjo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQo
KTsKK30KKwogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCiB2b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiB1cmksIERPTVdpbmRvdyogc291cmNlKSBjb25zdAogewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCmluZGV4IGFkYjQ3MzEuLjgxOGZmMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFt
ZTsKICAgICBjbGFzcyBIaXN0b3J5OworICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBT
Y3JlZW47CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNjksNiArNzAsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEJhckluZm8qIHNjcm9sbGJhcnMoKSBjb25z
dDsKICAgICAgICAgQmFySW5mbyogc3RhdHVzYmFyKCkgY29uc3Q7CiAgICAgICAgIEJhckluZm8q
IHRvb2xiYXIoKSBjb25zdDsKKyAgICAgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsK
KyAgICAgICAgTmF2aWdhdG9yKiBjbGllbnRJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG5h
dmlnYXRvcigpOyB9CiAKICAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKTsKIApA
QCAtMTcwLDYgKzE3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8QmFySW5mbz4gbV9zdGF0dXNiYXI7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhcklu
Zm8+IG1fdG9vbGJhcjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q29uc29sZT4gbV9jb25zb2xl
OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggNjU1ZDZhYi4uOTNm
YTkyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gc2Nyb2xsYmFyczsKICAgICAg
ICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzdGF0dXNiYXI7CiAgICAgICAgIGF0
dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gdG9vbGJhcjsKKyAgICAgICAgYXR0cmlidXRl
IFtSZXBsYWNlYWJsZV0gTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgICAgICAgYXR0cmlidXRlIFtS
ZXBsYWNlYWJsZV0gTmF2aWdhdG9yIGNsaWVudEluZm9ybWF0aW9uOwogCiAgICAgICAgIERPTVNl
bGVjdGlvbiBnZXRTZWxlY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggOGVl
YzZlMC4uM2EzZGM5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw2IEBA
CiAjaW5jbHVkZSAiTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUg
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNp
bmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMjU1MmVkNC4uZWFh
MzE5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFt
ZXMuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAyNGM5
OTAzLi5jYTcwNzczIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJD
b3JlL3BhZ2UvRnJhbWUuaApAQCAtOTksNiArOTksNyBAQCBjbGFzcyBLSlNQcm94eTsKIGNsYXNz
IEtVUkw7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBsdWdpbkRhdGE7CiBjbGFz
cyBSYW5nZTsKIGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogY2xhc3MgUmVuZGVyUGFydDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9wYWdlL05hdmln
YXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxYjU4MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0wLDAgKzEsMTcz
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGlt
bWlAa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgorCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCisjaWZu
ZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFU
Rk9STShQUEMpCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMiCisj
ZWxpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFg4NikKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk0gIk1hY0ludGVsIgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2RlZmlu
ZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiV2luMzIiCisjZWxzZQorI2RlZmluZSBXRUJD
T1JFX05BVklHQVRPUl9QTEFURk9STSAiIgorI2VuZGlmCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VAorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKKyNlbmRpZiAvLyBp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdB
VE9SX1BST0RVQ1RfU1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCICIy
MDAzMDEwNyIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIK
KworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SICJBcHBsZSBDb21wdXRlciwgSW5jLiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfVkVORE9SCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9S
X1NVQgorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCisjZW5kaWYgLy8g
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK05hdmlnYXRvcjo6TmF2aWdhdG9yKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUo
ZnJhbWUpCit7Cit9CisKK05hdmlnYXRvcjo6fk5hdmlnYXRvcigpCit7CisgICAgZGlzY29ubmVj
dEZyYW1lKCk7Cit9CisKK3ZvaWQgTmF2aWdhdG9yOjpkaXNjb25uZWN0RnJhbWUoKQoreworICAg
IGlmIChtX3BsdWdpbnMpIHsKKyAgICAgICAgbV9wbHVnaW5zLT5kaXNjb25uZWN0RnJhbWUoKTsK
KyAgICAgICAgbV9wbHVnaW5zID0gMDsKKyAgICB9CisgICAgaWYgKG1fbWltZVR5cGVzKSB7Cisg
ICAgICAgIG1fbWltZVR5cGVzLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgbV9taW1lVHlw
ZXMgPSAwOworICAgIH0KKyAgICBtX2ZyYW1lID0gMDsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6
YXBwQ29kZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTW96aWxsYSI7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OmFwcE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTmV0c2NhcGUiOwor
fQorCitTdHJpbmcgTmF2aWdhdG9yOjphcHBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAvLyBWZXJzaW9uIGlzIGV2ZXJ5
dGhpbmcgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxhLyIgcHJlZml4
LgorICAgIGNvbnN0IFN0cmluZyAmdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJB
Z2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBL
VVJMKCkpOworICAgIHJldHVybiB1c2VyQWdlbnQuc3Vic3RyaW5nKHVzZXJBZ2VudC5maW5kKCcv
JykgKyAxKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6bGFuZ3VhZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBkZWZhdWx0TGFuZ3VhZ2UoKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dXNlckFn
ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1
bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpOworfQorCitTdHJp
bmcgTmF2aWdhdG9yOjpwbGF0Zm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFW
SUdBVE9SX1BMQVRGT1JNOworfQorCitQbHVnaW5BcnJheSogTmF2aWdhdG9yOjpwbHVnaW5zKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2lucykKKyAgICAgICAgbV9wbHVnaW5zID0gUGx1Z2lu
QXJyYXk6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9wbHVnaW5zLmdldCgpOworfQor
CitNaW1lVHlwZUFycmF5KiBOYXZpZ2F0b3I6Om1pbWVUeXBlcygpIGNvbnN0Cit7CisgICAgaWYg
KCFtX21pbWVUeXBlcykKKyAgICAgICAgbV9taW1lVHlwZXMgPSBNaW1lVHlwZUFycmF5OjpjcmVh
dGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzLmdldCgpOworfQorCitTdHJpbmcg
TmF2aWdhdG9yOjpwcm9kdWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FU
T1JfUFJPRFVDVDsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6cHJvZHVjdFN1YigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCOworfQorCitTdHJpbmcg
TmF2aWdhdG9yOjp2ZW5kb3IoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRP
Ul9WRU5ET1I7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnZlbmRvclN1YigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUI7Cit9CisKK2Jvb2wgTmF2aWdh
dG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0VuYWJsZWQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKK2Jvb2wgTmF2aWdhdG9yOjpqYXZhRW5hYmxlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgIHJl
dHVybiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5pc0phdmFFbmFibGVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaCBiL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kMzIwN2YxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIE5hdmlnYXRvcl9oCisjZGVmaW5lIE5hdmlnYXRvcl9oCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFt
ZTsKKyAgICBjbGFzcyBNaW1lVHlwZUFycmF5OworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAg
Y2xhc3MgUGx1Z2luQXJyYXk7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgTmF2aWdh
dG9yIDogcHVibGljIFJlZkNvdW50ZWQ8TmF2aWdhdG9yPiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxOYXZpZ2F0b3I+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOYXZpZ2F0b3IoZnJhbWUpKTsgfQorICAgICAgICB+TmF2aWdhdG9y
KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgRnJhbWUqIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorCisgICAgICAgIFN0cmluZyBhcHBDb2Rl
TmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgYXBwTmFtZSgpIGNvbnN0OworICAgICAgICBT
dHJpbmcgYXBwVmVyc2lvbigpIGNvbnN0OworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25z
dDsKKyAgICAgICAgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcGxh
dGZvcm0oKSBjb25zdDsKKyAgICAgICAgUGx1Z2luQXJyYXkqIHBsdWdpbnMoKSBjb25zdDsKKyAg
ICAgICAgTWltZVR5cGVBcnJheSogbWltZVR5cGVzKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBw
cm9kdWN0KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwcm9kdWN0U3ViKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyB2ZW5kb3IoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHZlbmRvclN1YigpIGNv
bnN0OworICAgICAgICBib29sIGNvb2tpZUVuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBq
YXZhRW5hYmxlZCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTmF2aWdhdG9yKEZy
YW1lKik7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxQ
bHVnaW5BcnJheT4gbV9wbHVnaW5zOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxNaW1lVHlwZUFy
cmF5PiBtX21pbWVUeXBlczsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTczYTAyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisg
ICAgaW50ZXJmYWNlIE5hdmlnYXRvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgYXBwQ29kZU5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
YXBwTmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIERPTVN0
cmluZyBhcHBWZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxh
bmd1YWdlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZXJBZ2VudDsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwbGF0Zm9ybTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbkFycmF5IHBsdWdpbnM7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBNaW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBwcm9kdWN0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHByb2R1Y3RTdWI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
dmVuZG9yOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlbmRvclN1YjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY29va2llRW5hYmxlZDsKKyAgICAg
ICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBmNjBkMDVjLi4y
ODgzMjlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGll
bnQuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEcmFnQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dy
ZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKQEAgLTIwOCw2ICsyMTEsMzggQEAgdm9pZCBQYWdlOjpzZXROZWVk
c1JlYXBwbHlTdHlsZXMoKQogICAgICAgICAgICAgZnJhbWUtPnNldE5lZWRzUmVhcHBseVN0eWxl
cygpOwogfQogCit2b2lkIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQoreworICAg
IGlmICghYWxsUGFnZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFBsdWdpbkRhdGE6OnJlZnJl
c2goKTsKKworICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzTmVlZGluZ1JlbG9hZDsK
KworICAgIEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5tX3BsdWdpbkRhdGEgPSAwOworCisg
ICAgICAgIGlmIChyZWxvYWQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gKCpp
dCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1
Z2lucygpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChm
cmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGZyYW1lc05lZWRpbmdSZWxvYWQuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGZyYW1lc05lZWRpbmdSZWxvYWRbaV0tPmxvYWRlcigpLT5yZWxvYWQoKTsKK30KKworUGx1
Z2luRGF0YSogUGFnZTo6cGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbkRh
dGEpCisgICAgICAgIG1fcGx1Z2luRGF0YSA9IG5ldyBQbHVnaW5EYXRhKHRoaXMpOworICAgIHJl
dHVybiBtX3BsdWdpbkRhdGEuZ2V0KCk7Cit9CisKIHN0YXRpYyBGcmFtZSogaW5jcmVtZW50RnJh
bWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykKIHsKICAgICByZXR1
cm4gZm9yd2FyZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKaW5kZXggYjY4NWUzZi4uMTU4ZmQ5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiAgICAgY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKICAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFBsdWdpbkRhdGE7
CiAgICAgY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwogICAgIGNsYXNzIFNlbGVjdGlvbjsKICAgICBj
bGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwpAQCAtNzAsNiArNzEsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFBhZ2UoQ2hyb21lQ2xpZW50KiwgQ29udGV4dE1lbnVDbGllbnQqLCBF
ZGl0b3JDbGllbnQqLCBEcmFnQ2xpZW50KiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAgICAgIH5Q
YWdlKCk7CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCByZWZyZXNoUGx1Z2lucyhib29s
IHJlbG9hZCk7CisgICAgICAgIFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEoKSBjb25zdDsKKwogICAg
ICAgICBFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9y
Q2xpZW50OyB9CiAKICAgICAgICAgdm9pZCBzZXRNYWluRnJhbWUoUGFzc1JlZlB0cjxGcmFtZT4p
OwpAQCAtMTQ2LDYgKzE1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRy
PEZyYW1lPiBtX21haW5GcmFtZTsKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZm9jdXNlZE5vZGU7
CiAKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOworCiAg
ICAgICAgIEVkaXRvckNsaWVudCogbV9lZGl0b3JDbGllbnQ7CiAKICAgICAgICAgaW50IG1fZnJh
bWVDb3VudDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaCBiL1dlYkNvcmUvcGFn
ZS9QbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU1MzE4NC4uMDAwMDAw
MAotLS0gYS9XZWJDb3JlL3BhZ2UvUGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCww
IEBACi0vLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5faAotI2Rl
ZmluZSBQbHVnaW5faAotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgV2lkZ2V0OwotCi0gICAgY2xhc3MgUGx1Z2luIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGx1Z2luPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQbHVnaW4+IGNyZWF0ZShXaWRnZXQqIHZpZXcpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQbHVnaW4odmlldykpOyB9Ci0gICAgICAgIFdpZGdldCogdmlldygpIGNvbnN0IHsgcmV0dXJu
IG1fdmlldzsgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW4oV2lkZ2V0
KiB2aWV3KSA6IG1fdmlldyh2aWV3KSB7IH0KLSAgICAgICAgV2lkZ2V0KiBtX3ZpZXc7Ci0gICAg
fTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpbl9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21h
Yy9GcmFtZU1hYy5tbQppbmRleCBkNGZkYzgxLi40ZGUxYzBmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0K
QEAgLTY4LDcgKzY4LDYgQEAKICNpbXBvcnQgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2lt
cG9ydCAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgotI2ltcG9ydCAiUGx1Z2luLmgiCiAjaW1wb3J0ICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2lt
cG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RJdGVtLmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbSBiL1dlYkNvcmUvcGFn
ZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCmluZGV4IDA4NzIxYzQuLmFjZGU2MzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCisrKyBiL1dlYkNv
cmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCkBAIC02Myw3ICs2Myw3IEBACiAjaW1w
b3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbXBvcnQgIlBs
YXRmb3JtU2NyZWVuLmgiCi0jaW1wb3J0ICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbXBvcnQgIlBs
dWdpbkRhdGEuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJQYXJ0
LmgiCiAjaW1wb3J0ICJSZW5kZXJUcmVlQXNUZXh0LmgiCkBAIC0xMjA3LDcgKzEyMDcsNyBAQCBz
dGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1l
bnQgKmVsZW1lbnQpCiAgICAgCiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpp
c1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKICAgICAgICAgSW1hZ2U6OnN1cHBvcnRzVHlwZSht
aW1lVHlwZSkgfHwKLSAgICAgICAgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKG1p
bWVUeXBlKSkKKyAgICAgICAgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnBs
dWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpKQogICAgICAgICByZXR1cm4g
Tk87CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmggYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9y
eS5oCmluZGV4IDRjZjIxZTMuLjdkNTUxNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmgKKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0Zh
Y3RvcnkuaApAQCAtMzUsOSArMzUsNyBAQAogQHByb3RvY29sIFdlYkNvcmVWaWV3RmFjdG9yeQog
CiAtIChOU0FycmF5ICopcGx1Z2luc0luZm87IC8vIGFycmF5IG9mIGlkIDxXZWJDb3JlUGx1Z2lu
SW5mbz4KLS0gKHZvaWQpcmVmcmVzaFBsdWdpbnM6KEJPT0wpcmVsb2FkUGFnZXM7Ci0tIChOU1N0
cmluZyAqKXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKLS0gKEJP
T0wpcGx1Z2luU3VwcG9ydHNNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKKy0gKHZvaWQp
cmVmcmVzaFBsdWdpbnM7CiAKIC0gKE5TU3RyaW5nICopaW5wdXRFbGVtZW50QWx0VGV4dDsKIC0g
KE5TU3RyaW5nICopcmVzZXRCdXR0b25EZWZhdWx0TGFiZWw7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvcXQvRnJhbWVRdC5jcHAgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKaW5kZXgg
N2FlMWRkOS4uMWYwMzI1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApp
bmRleCBmNDhiMWFiLi4wODE0YzZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC04MCw1ICs4MSw5IEBAIGZsb2F0IHVzZXJJ
ZGxlVGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDAuMDsgfQogU3RyaW5nIEtVUkw6
OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5n
KCk7IH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0
aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc2ZWFlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
UGx1Z2luSW5mb1N0b3JlLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9y
dCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdG
YWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbk5hbWVGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci19
Ci0KLVBsdWdpbkluZm8gKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgUGx1Z2luSW5mbyAqcGx1Z2luSW5mbyA9
IG5ldyBQbHVnaW5JbmZvOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LQotICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4gcGx1Z2luID0gW1tbV2ViQ29yZVZpZXdGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAg
ICAKLSAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3BsdWdpbiBuYW1lXTsKLSAgICBwbHVnaW5JbmZv
LT5maWxlID0gW3BsdWdpbiBmaWxlbmFtZV07Ci0gICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVn
aW4gcGx1Z2luRGVzY3JpcHRpb25dOwotCi0gICAgTlNFbnVtZXJhdG9yICpNSU1FVHlwZUVudW1l
cmF0b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKE5TU3RyaW5n
ICpNSU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgewotICAgICAgICBNaW1l
Q2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIHBsdWdpbkluZm8t
Pm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5s
b3dlcigpOwotICAgICAgICBtaW1lLT5zdWZmaXhlcyA9IFtbcGx1Z2luIGV4dGVuc2lvbnNGb3JN
SU1FVHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIG1p
bWUtPmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6TUlNRV07Ci0gICAgICAg
IG1pbWUtPnBsdWdpbiA9IHBsdWdpbkluZm87Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwbHVn
aW5JbmZvOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAo
cGx1Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNFbXB0eSgpKQotICAgICAgICBkZWxl
dGVBbGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwotICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291
bnQoKSBjb25zdAotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1
cm4gW1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBjb3Vu
dF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0
dXJuIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpblN1cHBvcnRzTUlN
RVR5cGU6bWltZVR5cGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAgIAotICAg
IAotICAgIHJldHVybiBOTzsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9w
ZW5QYWdlcykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW1tXZWJD
b3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnM6cmVsb2FkT3BlblBh
Z2VzXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi19Ci0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAppbmRleCA2YjNlMjQzLi43YzhlYjE4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCkBAIC0yOCwx
MSArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4
MDQwNDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKQEAgLTc5LDEyICs3NCw2IEBA
IFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBT
dHJpbmcgJmV4dCkKICAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKICAgICAgICAgKytl
OwogICAgIH0KLSAgICAvLyAjIyMgRklYTUU6IFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0
MDQwMAotICAgIFFTdHJpbmcgdHlwZSA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPm1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHR5cGU7Ci0jZW5kaWYKIAogICAgIHJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIjsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgYi9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3MGUyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVj
aCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWltZVR5cGU6
Ok1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlPigwKQorICAgICwgbV9wbHVnaW5EYXRhKHBs
dWdpbkRhdGEpCisgICAgLCBtX2luZGV4KGluZGV4KQoreworfQorCitNaW1lVHlwZTo6fk1pbWVU
eXBlKCkKK3sKK30KKworU3RyaW5nIE1pbWVUeXBlOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT50eXBlOworfQorCitTdHJpbmcgTWlt
ZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1l
cygpW21faW5kZXhdLT5zdWZmaXhlczsKK30KKworU3RyaW5nIE1pbWVUeXBlOjpkZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+
ZGVzYzsKK30KKworUGFzc1JlZlB0cjxQbHVnaW4+IE1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBQYWdlKiBwID0gbV9wbHVnaW5EYXRhLT5wYWdlKCk7CisgICAg
aWYgKCFwIHx8ICFwLT5zZXR0aW5ncygpLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9w
bHVnaW5EYXRhLT5taW1lcygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdp
bnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChwbHVnaW5zW2ldID09IG1p
bWVzW21faW5kZXhdLT5wbHVnaW4pCisgICAgICAgICAgICByZXR1cm4gUGx1Z2luOjpjcmVhdGUo
bV9wbHVnaW5EYXRhLmdldCgpLCBpKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMTFmY2FjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgTWltZVR5cGVfaAorI2RlZmluZSBNaW1lVHlwZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAg
Y2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWltZVR5cGU+IGNyZWF0ZShQYXNzUmVmUHRy
PFBsdWdpbkRhdGE+IHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgTWltZVR5cGUocGx1Z2luRGF0YSwgaW5kZXgpKTsgfQorICAgICAgICB+TWltZVR5cGUo
KTsKKworICAgICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgc3VmZml4
ZXMoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAg
IFBhc3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBNaW1lVHlwZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+LCB1bnNpZ25lZCBpbmRl
eCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M3MzcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBNaW1lVHlwZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZm
aXhlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbiBlbmFibGVkUGx1Z2luOworICAgIH07
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBiL1dl
YkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iOWY4MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpCisg
ICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlQXJyYXk+KDApCisgICAgLCBtX2ZyYW1lKGZyYW1lKQor
eworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgpCit7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBQbHVnaW5EYXRhKiBk
YXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGRhdGEtPm1pbWVzKCkuc2l6ZSgpOworfQorCitNaW1lVHlwZSogTWltZVR5
cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0g
Z2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Y29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAg
IGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBNaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGluZGV4KS5nZXQoKTsKK30KKworYm9vbCBNaW1lVHlw
ZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0
eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEgKmRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8TWlt
ZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0tPnR5cGUg
PT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUoZGF0
YSwgaSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpbkRhdGEqIE1pbWVUeXBlQXJy
YXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5EYXRhKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFy
cmF5LmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY0YTRkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
dWdpbnMvTWltZVR5cGVBcnJheS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1pbWVUeXBlQXJyYXlfaAorI2Rl
ZmluZSBNaW1lVHlwZUFycmF5X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBLSlMgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNs
YXNzIEZyYW1lOworICAgIGNsYXNzIE1pbWVUeXBlOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisK
KyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTTWltZVR5cGVBcnJheS5jcHAgZG9lc24ndCBpbmNs
dWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4
ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBNaW1lVHlwZUFycmF5IDogcHVibGlj
IFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWltZVR5cGVBcnJheT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IE1pbWVUeXBlQXJyYXkoZnJhbWUpKTsgfQorICAgICAgICB+TWltZVR5cGVB
cnJheSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsg
fQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIE1pbWVU
eXBlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBNaW1lVHlwZSog
bmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgTWltZVR5cGVBcnJheShGcmFtZSopOworICAgICAgICBQbHVnaW5EYXRhKiBn
ZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5p
ZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDA5MmIwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbApAQCAtMCwwICsxLDI2IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRl
cmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0dGVyXSBNaW1lVHlwZUFycmF5IHsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwIGIvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMDU0
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bs
dWdpbjo6UGx1Z2luKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KQorICAg
IDogUmVmQ291bnRlZDxQbHVnaW4+KDApCisgICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkK
KyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK1BsdWdpbjo6flBsdWdpbigpCit7Cit9CisK
K1N0cmluZyBQbHVnaW46Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEt
PnBsdWdpbnMoKVttX2luZGV4XS0+bmFtZTsKK30KKworU3RyaW5nIFBsdWdpbjo6ZmlsZW5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+
ZmlsZTsKK30KKworU3RyaW5nIFBsdWdpbjo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+ZGVzYzsKK30KKwordW5zaWdu
ZWQgbG9uZyBQbHVnaW46Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0
YS0+cGx1Z2lucygpW21faW5kZXhdLT5taW1lcy5zaXplKCk7Cit9CisKK01pbWVUeXBlKiBQbHVn
aW46Oml0ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8q
PiYgcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBw
bHVnaW5zW21faW5kZXhdLT5taW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
TWltZUNsYXNzSW5mbyogbWltZSA9IHBsdWdpbnNbbV9pbmRleF0tPm1pbWVzW2luZGV4XTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5t
aW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKG1pbWVzW2ldID09IG1pbWUpCisgICAgICAgICAgICByZXR1cm4gTWltZVR5
cGU6OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpLmdldCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIFBsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVz
ID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHByb3BlcnR5
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
TWltZVR5cGUqIFBsdWdpbjo6bmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1
Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisg
ICAgICAgICAgICByZXR1cm4gTWltZVR5cGU6OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkp
LmdldCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MWY4MQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBQbHVnaW5f
aAorI2RlZmluZSBQbHVnaW5faAorCisjaW5jbHVkZSAiTWltZVR5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEtK
UyB7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTVmFsdWU7Cit9OworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3MgUGx1
Z2luOworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNQbHVn
aW4uY3BwIGRvZXNuJ3QgaW5jbHVkZSBKU01pbWVUeXBlLmggZm9yIHRvSlMKKyAgICBLSlM6OkpT
VmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBNaW1lVHlwZSopOworCisgICAgY2xhc3MgUGx1
Z2luRGF0YTsKKworICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpbj4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luPiBjcmVhdGUo
UGx1Z2luRGF0YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQbHVnaW4ocGx1Z2luRGF0YSwgaW5kZXgpKTsgfQorICAgICAgICB+UGx1Z2luKCk7CisK
KyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworCisgICAgICAgIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisKKyAgICAgICAgTWltZVR5cGUqIGl0ZW0odW5z
aWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1pbWVUeXBlKiBuYW1lR2V0dGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IFBsdWdpbihQbHVnaW5EYXRhKiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBSZWZQdHI8UGx1
Z2luRGF0YT4gbV9wbHVnaW5EYXRhOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmlkbCBi
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1NjVlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
LmlkbApAQCAtMCwwICsxLDI5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRl
Y2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0
ZXIsIEhhc0luZGV4R2V0dGVyXSBQbHVnaW4geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZmls
ZW5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGVzY3JpcHRpb247
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICB9
OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yNTEyM2JiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBU
cm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luQXJyYXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQbHVnaW5BcnJheTo6UGx1Z2luQXJyYXkoRnJhbWUqIGZyYW1lKQorICAgIDogUmVmQ291
bnRlZDxQbHVnaW5BcnJheT4oMCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK1BsdWdp
bkFycmF5Ojp+UGx1Z2luQXJyYXkoKQoreworfQorCit1bnNpZ25lZCBsb25nIFBsdWdpbkFycmF5
OjpsZW5ndGgoKSBjb25zdAoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGF0YS0+
cGx1Z2lucygpLnNpemUoKTsKK30KKworUGx1Z2luKiBQbHVnaW5BcnJheTo6aXRlbSh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAg
IGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbklu
Zm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAoaW5kZXggPj0gcGx1Z2lu
cy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShk
YXRhLCBpbmRleCkuZ2V0KCk7Cit9CisKK2Jvb2wgUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9y
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRh
KiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdp
bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbHVnaW4qIFBsdWdpbkFy
cmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0g
ZGF0YS0+cGx1Z2lucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNp
emUoKTsgKytpKQorICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9wZXJ0eU5hbWUp
CisgICAgICAgICAgICByZXR1cm4gUGx1Z2luOjpjcmVhdGUoZGF0YSwgaSkuZ2V0KCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luQXJyYXk6OnJlZnJlc2goYm9vbCByZWxvYWQpCit7
CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkKTsKK30KKworUGx1Z2luRGF0YSogUGx1
Z2luQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5EYXRhKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5BcnJheS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ODZjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5BcnJheS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkFycmF5X2gKKyNkZWZp
bmUgUGx1Z2luQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgY2xhc3MgUGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisKKyAgICAv
LyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luQXJyYXkuY3BwIGRvZXNuJ3QgaW5jbHVkZSBKU1Bs
dWdpbi5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwg
UGx1Z2luKik7CisKKyAgICBjbGFzcyBQbHVnaW5BcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
dWdpbkFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVn
aW5BcnJheT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdp
bkFycmF5KGZyYW1lKSk7IH0KKyAgICAgICAgflBsdWdpbkFycmF5KCk7CisKKyAgICAgICAgdm9p
ZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CisKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgUGx1Z2luKiBpdGVtKHVuc2lnbmVkIGluZGV4
KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBQbHVnaW4qIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luQXJyYXkoRnJhbWUqKTsKKyAgICAgICAgUGx1
Z2luRGF0YSogZ2V0UGx1Z2luRGF0YSgpIGNvbnN0OworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1l
OworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZDY1MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAg
aW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRleEdldHRlcl0gUGx1Z2luQXJyYXkgewor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAg
IHZvaWQgcmVmcmVzaChpbiBib29sZWFuIHJlbG9hZCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGVjOGQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2Vu
dGluQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChz
Y2hpbW1pQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YTo6UGx1Z2lu
RGF0YShjb25zdCBQYWdlKiBwYWdlKQorICAgIDogUmVmQ291bnRlZDxQbHVnaW5EYXRhPigwKQor
ICAgICwgbV9wYWdlKHBhZ2UpCit7CisgICAgaW5pdFBsdWdpbnMoKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3BsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
UGx1Z2luSW5mbyogcGx1Z2luID0gbV9wbHVnaW5zW2ldOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgcGx1Z2luLT5taW1lcy5zaXplKCk7ICsraikKKyAgICAgICAgICAgIG1fbWlt
ZXMuYXBwZW5kKHBsdWdpbi0+bWltZXNbal0pOworICAgIH0KK30KKworUGx1Z2luRGF0YTo6flBs
dWdpbkRhdGEoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BsdWdpbnMpOworICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX21pbWVzKTsKK30KKworYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50
eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50eXBlID09IG1p
bWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG1fbWltZXNbaV0tPnBsdWdpbi0+bmFtZTsKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzlhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkRhdGFfaAorI2RlZmlu
ZSBQbHVnaW5EYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIHN0cnVjdCBQYWdlOworICAgIHN0cnVjdCBQbHVnaW5JbmZvOworCisg
ICAgc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAg
U3RyaW5nIGRlc2M7CisgICAgICAgIFN0cmluZyBzdWZmaXhlczsKKyAgICAgICAgUGx1Z2luSW5m
byogcGx1Z2luOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAgICAgIFN0
cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZmlsZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7Cisg
ICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWltZXM7CisgICAgfTsKKworICAgIC8vIEZJ
WE1FOiBtZXJnZSB3aXRoIFBsdWdpbkRhdGFiYXNlIGluIHRoZSBmdXR1cmUKKyAgICBjbGFzcyBQ
bHVnaW5EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luRGF0YT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgUGx1Z2luRGF0YShjb25zdCBQYWdlKik7CisgICAgICAgIH5QbHVnaW5EYXRhKCk7
CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0UGFnZSgpIHsgbV9wYWdlID0gMDsgfQorICAgICAg
ICBjb25zdCBQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICAgICAg
Y29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luczsgfQorICAgICAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcygpIGNv
bnN0IHsgcmV0dXJuIG1fbWltZXM7IH0KKworICAgICAgICBib29sIHN1cHBvcnRzTWltZVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwbHVnaW5OYW1l
Rm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisKKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVmcmVzaCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbml0UGx1
Z2lucygpOworCisgICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj4gbV9wbHVnaW5zOworICAgICAg
ICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+IG1fbWltZXM7CisgICAgICAgIGNvbnN0IFBhZ2UqIG1f
cGFnZTsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5z
L21hYy9QbHVnaW5EYXRhTWFjLm1tIGIvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFj
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjkzMTYKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW0KQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGx1Z2luRGF0YS5oIgorCisj
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IldlYkNvcmVWaWV3RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1
Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKworICAgIE5TQXJyYXkqIHBsdWdpbnMgPSBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRG
YWN0b3J5XSBwbHVnaW5zSW5mb107CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBb
cGx1Z2lucyBjb3VudF07ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBwbHVnaW5JbmZvID0g
bmV3IFBsdWdpbkluZm87CisKKyAgICAgICAgaWQgPFdlYkNvcmVQbHVnaW5JbmZvPiBwbHVnaW4g
PSBbcGx1Z2lucyBvYmplY3RBdEluZGV4OmldOworICAgIAorICAgICAgICBwbHVnaW5JbmZvLT5u
YW1lID0gW3BsdWdpbiBuYW1lXTsKKyAgICAgICAgcGx1Z2luSW5mby0+ZmlsZSA9IFtwbHVnaW4g
ZmlsZW5hbWVdOworICAgICAgICBwbHVnaW5JbmZvLT5kZXNjID0gW3BsdWdpbiBwbHVnaW5EZXNj
cmlwdGlvbl07CisKKyAgICAgICAgTlNFbnVtZXJhdG9yKiBNSU1FVHlwZUVudW1lcmF0b3IgPSBb
cGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07CisgICAgICAgIHdoaWxlIChOU1N0cmluZyogTUlN
RSA9IFtNSU1FVHlwZUVudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIHBsdWdpbklu
Zm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgICAgIG1pbWUtPnR5cGUgPSBTdHJpbmco
TUlNRSkubG93ZXIoKTsKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzID0gW1twbHVnaW4gZXh0
ZW5zaW9uc0Zvck1JTUVUeXBlOk1JTUVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIiwiXTsK
KyAgICAgICAgICAgIG1pbWUtPmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6
TUlNRV07CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4gPSBwbHVnaW5JbmZvOworICAgICAgICB9
CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChwbHVnaW5JbmZvKTsKKyAgICB9CisgICAgCisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybjsKK30KKwordm9pZCBQ
bHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnNd
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luRGF0YVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE2
ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5j
cHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNo
IEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
IDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgUVdl
YlBhZ2UqIHdlYlBhZ2UgPSBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRRdCo+KG1fcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOworICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0
b3J5ID0gd2ViUGFnZS0+cGx1Z2luRmFjdG9yeSgpOworICAgIGlmICghZmFjdG9yeSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gcGx1Z2lu
cyA9IGZhY3RvcnktPnBsdWdpbnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdWdpbnMu
Y291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4m
IHBsdWdpbiA9IHBsdWdpbnMuYXQoaSk7CisKKyAgICAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5l
dyBQbHVnaW5JbmZvOworICAgICAgICBpbmZvLT5uYW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAg
IGluZm8tPmRlc2MgPSBwbHVnaW4uZGVzY3JpcHRpb247CisKKyAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBwbHVnaW4ubWltZVR5cGVzLmNvdW50KCk7ICsraikgeworICAgICAgICAgICAgY29u
c3QgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBlJiBtaW1lVHlwZSA9IHBsdWdpbi5taW1lVHlw
ZXMuYXQoaik7CisKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWVJbmZvID0gbmV3IE1p
bWVDbGFzc0luZm87CisgICAgICAgICAgICBtaW1lSW5mby0+dHlwZSA9IG1pbWVUeXBlLm5hbWU7
CisgICAgICAgICAgICBtaW1lSW5mby0+ZGVzYyA9IG1pbWVUeXBlLmRlc2NyaXB0aW9uOworICAg
ICAgICAgICAgbWltZUluZm8tPnN1ZmZpeGVzID0gbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuam9p
bigiOyAiKTsKKworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2
b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIC8vIG5vdGhpbmcgdG8gZG8KK30KKwor
fTsKZGlmZiAtLWdpdCBhL1dlYktpdC5wcmkgYi9XZWJLaXQucHJpCmluZGV4IDU1ZGU5YjMuLmQx
MjQyM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcmkKKysrIGIvV2ViS2l0LnByaQpAQCAtOTcsNyAr
OTcsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3JlbmRlcmlu
ZyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2hpc3RvcnkgXAogICAgICQkQkFTRV9ESVIvV2Vi
Q29yZS94bWwgXAotICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sCisgICAgJCRCQVNFX0RJUi9X
ZWJDb3JlL2h0bWwgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbHVnaW5zCiAKIAogbWFjeCB7
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1t
IGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQppbmRleCBjNTI0
YjRiLi40MWYzODM3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZp
ZXdGYWN0b3J5Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3Rv
cnkubW0KQEAgLTcxLDIyICs3MSw5IEBACiAgICAgcmV0dXJuIFtbV2ViUGx1Z2luRGF0YWJhc2Ug
c2hhcmVkRGF0YWJhc2VdIHBsdWdpbnNdOwogfQogCi0tIChOU1N0cmluZyAqKXBsdWdpbk5hbWVG
b3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAgIHJldHVybiBbW1tXZWJQbHVn
aW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdIG5h
bWVdOwotfQotCi0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09MKXJlbG9hZFBhZ2VzCistICh2
b2lkKXJlZnJlc2hQbHVnaW5zCiB7CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRh
YmFzZV0gcmVmcmVzaF07Ci0gICAgaWYgKHJlbG9hZFBhZ2VzKSB7Ci0gICAgICAgIFtXZWJWaWV3
IF9tYWtlQWxsV2ViVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9yZWxvYWRGb3JQbHVn
aW5DaGFuZ2VzKV07Ci0gICAgfQotfQotCi0tIChCT09MKXBsdWdpblN1cHBvcnRzTUlNRVR5cGU6
KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tXZWJQbHVnaW5EYXRhYmFzZSBz
aGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdICE9IG5pbDsKIH0KIAog
LSAoV2ViQ29yZUZyYW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopdgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCmluZGV4IDI1YzYyNDYuLjcwZDQ3OTcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTM1NCwxNiArMzU0LDYgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2Vi
RnJhbWUpCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmxvYWRlcigpLT5udW1QZW5kaW5nT3JMb2Fk
aW5nUmVxdWVzdHMocmVjdXJzZSk7CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdpbkNoYW5n
ZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpk
b2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAg
ICAgICBpZiAoKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkpCi0gICAgICAgICAg
ICBba2l0KGZyYW1lKSByZWxvYWRdOwotICAgIH0KLX0KLQogLSAodm9pZClfYXR0YWNoU2NyaXB0
RGVidWdnZXIKIHsKICAgICBpZiAoIV9wcml2YXRlLT5zY3JpcHREZWJ1Z2dlciAmJiBjb3JlKHNl
bGYpLT5zY3JpcHRQcm94eSgpLT5oYXZlR2xvYmFsT2JqZWN0KCkpCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lSW50ZXJuYWwuaAppbmRleCA4OWI1YjFkLi40MjdiYTlmIDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE1Myw4ICsxNTMsNiBAQCBzdHJ1Y3QgV2ViQ29yZUhp
c3RvcnlJdGVtOwogCiAtIChpbnQpX251bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0czooQk9PTCly
ZWN1cnNlOwogCi0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzOwotCiAtICh2b2lkKV9h
dHRhY2hTY3JpcHREZWJ1Z2dlcjsKIC0gKHZvaWQpX2RldGFjaFNjcmlwdERlYnVnZ2VyOwogCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCmluZGV4IDhhNzljZWMuLjU2NmE5YWQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCkBAIC0xMjgyLDExICsxMjgyLDYgQEAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGkKICAgICBb
TlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKIH0KIAotLSAodm9pZClfcmVsb2FkRm9y
UGx1Z2luQ2hhbmdlcwotewotICAgIFtbc2VsZiBtYWluRnJhbWVdIF9yZWxvYWRGb3JQbHVnaW5D
aGFuZ2VzXTsKLX0KLQogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKV9jYWNoZWRSZXNwb25zZUZv
clVSTDooTlNVUkwgKilVUkwKIHsKICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0g
W1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxdOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAppbmRleCBmZDBjNjk0Li42MzEyMWYyIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAorKysgYi9XZWJLaXQv
cXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1
ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCiAjaW5j
bHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVn
aW5jb25uZWN0b3IuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgInFjb29raWVq
YXIuaCIKICNpbmNsdWRlIDxxZGVidWcuaD4KQEAgLTM2MSw3ICszNjAsNyBAQCB2b2lkIFFXZWJO
ZXR3b3JrSm9iOjpzZXRFcnJvclN0cmluZyhjb25zdCBRU3RyaW5nJiBlcnJvclN0cmluZykKICov
CiBib29sIFFXZWJOZXR3b3JrSm9iOjpjYW5jZWxsZWQoKSBjb25zdAogewotICAgIHJldHVybiAh
ZC0+cmVzb3VyY2VIYW5kbGUgJiYgIWQtPmNvbm5lY3RvcjsKKyAgICByZXR1cm4gIWQtPnJlc291
cmNlSGFuZGxlOwogfQogCiAvKiEKQEAgLTQ1MCw3ICs0NDksNiBAQCBib29sIFFXZWJOZXR3b3Jr
TWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlICpoYW5kbGUsIFFXZWJOZXR3b3JrSW50ZXJmYWNl
ICppbnRlcgogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2IgPSBqb2I7CiAgICAgam9i
LT5kLT5yZXNvdXJjZUhhbmRsZSA9IGhhbmRsZTsKICAgICBqb2ItPmQtPmludGVyZmFjZSA9IGlu
dGVyZmFjZTsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAKICAgICBqb2ItPmQtPnJlcXVl
c3QuaW5pdChoYW5kbGUtPnJlcXVlc3QoKSk7CiAKQEAgLTQ3OSw3ICs0NzcsNiBAQCB2b2lkIFFX
ZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlICpoYW5kbGUpCiAgICAgICAg
IHJldHVybjsKICAgICBERUJVRygpIDw8ICJRV2ViTmV0d29ya01hbmFnZXI6OmNhbmNlbDoiIDw8
ICBqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygpOwogICAgIGpvYi0+ZC0+cmVz
b3VyY2VIYW5kbGUgPSAwOwotICAgIGpvYi0+ZC0+Y29ubmVjdG9yID0gMDsKICAgICBqb2ItPmQt
PmludGVyZmFjZS0+Y2FuY2VsSm9iKGpvYik7CiAgICAgaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X2pvYiA9IDA7CiB9CkBAIC00OTYsNyArNDkzLDcgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6
OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IgKmpvYikKICAgICAgICAgY2xpZW50ID0gam9iLT5kLT5y
ZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29ubmVjdG9yKSB7CisgICAgfSBl
bHNlIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTcxLDggKzU2OCw2IEBAIHZvaWQg
UVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJOZXR3b3JrSm9iICpqb2IpCiAKICAgICBp
ZiAoY2xpZW50KQogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShqb2ItPmQtPnJl
c291cmNlSGFuZGxlLCByZXNwb25zZSk7Ci0gICAgaWYgKGpvYi0+ZC0+Y29ubmVjdG9yKQotICAg
ICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5zdGFydGVkKGpvYik7CiAKIH0KIApAQCAtNTg3
LDcgKzU4Miw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpkYXRhKFFXZWJOZXR3b3JrSm9i
ICpqb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiAgICAgICAgIGNsaWVudCA9IGpvYi0+ZC0+
cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3RvcikgeworICAgIH0g
ZWxzZSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU5Nyw4ICs1OTIsNiBAQCB2b2lk
IFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pvYiAqam9iLCBjb25zdCBRQnl0
ZUFycmF5ICZkYXRhKQogICAgIERFQlVHKCkgPDwgInJlY2VpdmVkRGF0YSIgPDwgam9iLT5kLT5y
ZXF1ZXN0LnVybC5wYXRoKCk7CiAgICAgaWYgKGNsaWVudCkKICAgICAgICAgY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCBkYXRhLmNvbnN0RGF0YSgpLCBkYXRh
Lmxlbmd0aCgpLCBkYXRhLmxlbmd0aCgpIC8qRml4TWUqLyk7Ci0gICAgaWYgKGpvYi0+ZC0+Y29u
bmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5kYXRhKGpvYiwgZGF0YSk7
CiAKIH0KIApAQCAtNjE3LDcgKzYxMCw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5p
c2hlZChRV2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAgICAgICBjbGllbnQg
PSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5kLT5jb25uZWN0b3Ip
IHsKKyAgICB9IGVsc2UgewogICAgICAgICBqb2ItPmRlcmVmKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC02NDUsOSArNjM4LDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OmZpbmlz
aGVkKFFXZWJOZXR3b3JrSm9iICpqb2IsIGludCBlcnJvckNvZGUpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoam9iLT5kLT5jb25uZWN0b3IpCi0gICAgICAgIGVtaXQgam9iLT5kLT5jb25u
ZWN0b3ItPmZpbmlzaGVkKGpvYiwgZXJyb3JDb2RlKTsKLQogICAgIERFQlVHKCkgPDwgInJlY2Vp
dmVkRmluaXNoZWQgZG9uZSIgPDwgam9iLT5kLT5yZXF1ZXN0LnVybDsKIAogICAgIGpvYi0+ZGVy
ZWYoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5o
IGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmgKaW5kZXggYzcxMmFlNC4u
OWI2ZjRkMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9w
LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmgKQEAgLTU3LDcg
KzU3LDYgQEAgcHVibGljOgogICAgICAgICAsIHJlc291cmNlSGFuZGxlKDApCiAgICAgICAgICwg
cmVkaXJlY3RlZChmYWxzZSkKICAgICAgICAgLCBpbnRlcmZhY2UoMCkKLSAgICAgICAgLCBjb25u
ZWN0b3IoMCkKICAgICAgICAgLCBqb2JTdGF0dXMoUVdlYk5ldHdvcmtKb2I6OkpvYkNyZWF0ZWQp
CiAgICAgICAgIHt9CiAgICAgaW50IHJlZjsKQEAgLTY5LDcgKzY4LDYgQEAgcHVibGljOgogICAg
IGJvb2wgcmVkaXJlY3RlZDsKIAogICAgIFFXZWJOZXR3b3JrSW50ZXJmYWNlICppbnRlcmZhY2U7
Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yOwogICAgIFFXZWJOZXR3
b3JrSm9iOjpKb2JTdGF0dXMgam9iU3RhdHVzOwogICAgIFFTdHJpbmcgZXJyb3JTdHJpbmc7CiB9
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIyNGQ2MDQuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2lu
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8K
LSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNpbmNsdWRlIDxxd2Vib2JqZWN0cGx1
Z2luY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8cWNvcmVhcHBsaWNhdGlvbi5oPgotI2luY2x1ZGUg
PHFmaWxlaW5mby5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLSNpZm5kZWYgUVRf
Tk9fTElCUkFSWQotUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhRV2ViRmFjdG9yeUxvYWRlciwg
bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoUVdlYk9iamVjdFBsdWdpbkZhY3Rv
cnlJbnRlcmZhY2VfaWlkLCBRQ29yZUFwcGxpY2F0aW9uOjpsaWJyYXJ5UGF0aHMoKSwgUUxhdGlu
MVN0cmluZygiL3dlYnBsdWdpbnMiKSkpCi0jZW5kaWYKLQotCi1RV2ViRmFjdG9yeUxvYWRlcjo6
UVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLCBjb25zdCBRU3RyaW5nTGlzdCAmcGF0
aHMsIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCwgUXQ6OkNhc2VTZW5zaXRpdml0eSkKLSAgICA6IFFG
YWN0b3J5TG9hZGVyKGlpZCwgcGF0aHMsIHN1ZmZpeCkKLXsKLSAgICBRU3RyaW5nTGlzdCBwbHVn
aW5zID0ga2V5cygpOwotICAgIGZvcmVhY2goUVN0cmluZyBrLCBwbHVnaW5zKSB7Ci0gICAgICAg
IFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmplY3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2lu
ICo+KGluc3RhbmNlKGspKTsKLSAgICAgICAgaWYgKCFwbHVnaW4pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5hbWUgPSBrOwotICAgICAg
ICBpbmZvLmRlc2NyaXB0aW9uID0gcGx1Z2luLT5kZXNjcmlwdGlvbkZvcktleShrKTsKLSAgICAg
ICAgUVN0cmluZ0xpc3QgbWltZXR5cGVzID0gcGx1Z2luLT5taW1ldHlwZXNGb3JLZXkoayk7Ci0g
ICAgICAgIGZvcmVhY2goUVN0cmluZyBtLCBtaW1ldHlwZXMpIHsKLSAgICAgICAgICAgIE1pbWVJ
bmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBtOwotICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGx1Z2luLT5leHRlbnNpb25zRm9yTWltZXR5cGUobSk7Ci0gICAgICAgICAg
ICBpbmZvLm1pbWVzIDw8IG1pbWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wbHVnaW5JbmZvLmFw
cGVuZChpbmZvKTsKLSAgICB9Ci19Ci0KLVFXZWJGYWN0b3J5TG9hZGVyICpRV2ViRmFjdG9yeUxv
YWRlcjo6c2VsZigpCi17Ci0gICAgcmV0dXJuIGxvYWRlcigpOwotfQotCi0KLVFTdHJpbmcgUVdl
YkZhY3RvcnlMb2FkZXI6OmRlc2NyaXB0aW9uRm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNv
bnN0Ci17Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAg
ICAgICAgaWYgKGluZm8ubmFtZSA9PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4gaW5mby5kZXNj
cmlwdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotUVN0cmluZ0xpc3Qg
UVdlYkZhY3RvcnlMb2FkZXI6Om1pbWV0eXBlc0Zvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBj
b25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0g
ICAgICAgIGlmIChpbmZvLm5hbWUgPT0ga2V5KSB7Ci0gICAgICAgICAgICBRU3RyaW5nTGlzdCBt
aW1ldHlwZXM7Ci0gICAgICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwgaW5mby5t
aW1lcykKLSAgICAgICAgICAgICAgICBtaW1ldHlwZXMuYXBwZW5kKG0udHlwZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbWltZXR5cGVzOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBRU3Ry
aW5nTGlzdCgpOwotfQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9hZGVyOjptaW1lVHlwZUZvckV4
dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24pCi17Ci0gICAgZm9yZWFjaChjb25zdCBJ
bmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUlu
Zm8gJm0sIGluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmIChtLmV4dGVuc2lvbnMuY29udGFp
bnMoZXh0ZW5zaW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbS50eXBlOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLQotUVN0cmluZ0xpc3QgUVdlYkZh
Y3RvcnlMb2FkZXI6OmV4dGVuc2lvbnMoKSBjb25zdAotewotICAgIFFTdHJpbmdMaXN0IGV4dGVu
c2lvbnM7Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAg
ICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpCi0gICAgICAgICAg
ICBleHRlbnNpb25zIDw8IG0uZXh0ZW5zaW9uczsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmdM
aXN0KCk7Ci0KLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6bmFtZUZvck1pbWV0eXBl
KGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5m
byAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZv
ICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgaWYgKG0udHlwZSA9PSBtaW1lVHlwZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5mby5uYW1lOwotICAgIH0KLSAgICByZXR1cm4gUVN0cmlu
ZygpOwotfQotCi1RT2JqZWN0ICpRV2ViRmFjdG9yeUxvYWRlcjo6Y3JlYXRlKFFXZWJGcmFtZSAq
ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVy
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmX21p
bWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n
TGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKQotewotICAgIFFTdHJpbmcgbWltZVR5
cGUgPSBfbWltZVR5cGU7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICBR
RmlsZUluZm8gZmkodXJsLnBhdGgoKSk7Ci0gICAgICAgIG1pbWVUeXBlID0gbWltZVR5cGVGb3JF
eHRlbnNpb24oZmkuc3VmZml4KCkpOwotICAgIH0KLSAgICBRU3RyaW5nIG5hbWUgPSBuYW1lRm9y
TWltZXR5cGUobWltZVR5cGUpOwotICAgIFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmpl
Y3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKG5hbWUpKTsKLSAgICBpZiAoIXBs
dWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAq
Y29ubmVjdG9yID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoZnJhbWUpOwotICAgIHJl
dHVybiBwbHVnaW4tPmNyZWF0ZShjb25uZWN0b3IsIHVybCwgbWltZVR5cGUsIGFyZ3VtZW50TmFt
ZXMsIGFyZ3VtZW50VmFsdWVzKTsKLX0KLQotCi0KLS8qISBcY2xhc3MgUVdlYk9iamVjdFBsdWdp
bgotCi0gIFRoaXMgY2xhc3MgaXMgYSBwbHVnaW4gZm9yIHRoZSBIVE1MIG9iamVjdCB0YWcuIEl0
IGNhbiBiZSB1c2VkIHRvIGVtYmVkIGFyYml0cmFyeSBjb250ZW50IGluIGEgd2ViIHBhZ2UuCi0q
LwotCi0KLVFXZWJPYmplY3RQbHVnaW46OlFXZWJPYmplY3RQbHVnaW4oUU9iamVjdCAqcGFyZW50
KQotICAgIDogUU9iamVjdChwYXJlbnQpCi17Ci19Ci0KLVFXZWJPYmplY3RQbHVnaW46On5RV2Vi
T2JqZWN0UGx1Z2luKCkKLXsKLX0KLQotLyohCi0gIFxmbiBRU3RyaW5nTGlzdCBRV2ViT2JqZWN0
UGx1Z2luOjprZXlzKCkgY29uc3QKLQotICBUaGUga2V5cyBzaG91bGQgYmUgdW5pcXVlIG5hbWVz
LgotKi8KLQotLyohCi0gIEEgZGVzY3JpcHRpb24gZm9yIFxhIGtleS4KLSovCi1RU3RyaW5nIFFX
ZWJPYmplY3RQbHVnaW46OmRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29u
c3QKLXsKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0vKiEKLSAgcmV0dXJucyB0aGUgbWlt
ZXR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgXGEga2V5LgotKi8KLVFTdHJpbmdMaXN0IFFX
ZWJPYmplY3RQbHVnaW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLQotLyohCi0gIFxmbiBRU3RyaW5n
TGlzdCBRV2ViT2JqZWN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoKSBjb25zdAotCi0g
IFNob3VsZCByZXR1cm4gYSBsaXN0IG9mIGV4dGVuc2lvbnMgdGhhdCBhcmUgcmVjb2duaXNlZCB0
byBtYXRjaCB0aGUgXGEgbWltZVR5cGUuCi0qLwotUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdp
bjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAot
ewotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0vKiEKLSAgXGZuIFFPYmplY3QgKlFX
ZWJPYmplY3RQbHVnaW46OmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0
b3IsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgUVN0cmluZyAmbWltZVR5cGUsIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudE5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMp
IGNvbnN0Ci0KLSAgQ3JlYXRlcyBhIFFPYmplY3Qgd2l0aCBcYSBjb25uZWN0b3IgdG8gaGFuZGxl
IFxhIG1pbWVUeXBlLiBcYSBhcmd1bWVudE5hbWVzIGFuZCBcYSBhcmd1bWVudFZhbHVlcyBhcmUg
YSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHBhc3NlZCBkaXJlY3RseQotICBmcm9tIHRoZSAmbHQ7
cGFyYW0mZ3Q7IGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgSFRNTCBvYmplY3QgdGFnLgotKi8K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaCBi
L1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzYzdjYWY3Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBs
dWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSov
Ci0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fSAotI2RlZmluZSBRV0VCT0JKRUNUUExVR0lOX0gK
LQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdENvcmUvcXBsdWdpbi5o
PgotI2luY2x1ZGUgPFF0Q29yZS9xZmFjdG9yeWludGVyZmFjZS5oPgotCi0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0KLWNsYXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I7Ci1jbGFzcyBR
VXJsOwotCi1zdHJ1Y3QgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRl
cmZhY2UgOiBwdWJsaWMgUUZhY3RvcnlJbnRlcmZhY2UKLXsKLSAgICB2aXJ0dWFsIFFPYmplY3Qg
KmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOwot
fTsKLQotI2RlZmluZSBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZV9paWQgImNvbS50
cm9sbHRlY2guUXQuUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2UiCi1RX0RFQ0xBUkVf
SU5URVJGQUNFKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlLCBRV2ViT2JqZWN0UGx1
Z2luRmFjdG9yeUludGVyZmFjZV9paWQpCi0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJPYmpl
Y3RQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5
SW50ZXJmYWNlCi17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX0lOVEVSRkFDRVMoUVdlYk9iamVjdFBs
dWdpbkZhY3RvcnlJbnRlcmZhY2U6UUZhY3RvcnlJbnRlcmZhY2UpCi1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgUVdlYk9iamVjdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQgPSAwKTsKLSAgICB2aXJ0dWFs
IH5RV2ViT2JqZWN0UGx1Z2luKCk7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGtleXMoKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JLZXkoY29uc3Qg
UVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zv
cktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3Qg
ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25u
ZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZh
bHVlcykgY29uc3QgPSAwOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVj
dHBsdWdpbl9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDI2MWYuLjAwMDAw
MDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTl9QX0gKLSNkZWZpbmUg
UVdFQk9CSkVDVFBMVUdJTl9QX0gKLQotI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+Ci0jaW5j
bHVkZSAicXdlYm9iamVjdHBsdWdpbi5oIgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0K
LS8qCi0gIEZJWE1FOiBUaGlzIGlzIGNvcGllZCBmcm9tIHFmYWN0b3J5bG9hZGVyX3AuaC4KLSAg
UmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWRlIHFmYWN0b3J5bG9hZGVyIHB1YmxpYyBpbiBRdAotKi8K
LWNsYXNzIFFGYWN0b3J5TG9hZGVyUHJpdmF0ZTsKLQotY2xhc3MgUV9DT1JFX0VYUE9SVCBRRmFj
dG9yeUxvYWRlciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1RfRkFLRQotICAgIFFf
REVDTEFSRV9QUklWQVRFKFFGYWN0b3J5TG9hZGVyKQotCi1wdWJsaWM6Ci0gICAgUUZhY3RvcnlM
b2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdM
aXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZyAmc3VmZml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vu
c2l0aXZpdHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0gICAgflFGYWN0b3J5TG9hZGVyKCk7Ci0K
LSAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7Ci0gICAgUU9iamVjdCAqaW5zdGFuY2UoY29u
c3QgUVN0cmluZyAma2V5KSBjb25zdDsKLQotfTsKLQotY2xhc3MgUVdlYkZyYW1lOwotCi1jbGFz
cyBRV2ViRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRRmFjdG9yeUxvYWRlcgotewotICAgIFFfT0JK
RUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmc3VmZml4ID0gUVN0cmlu
ZygpLAotICAgICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vuc2l0aXZpdHkgPSBRdDo6Q2Fz
ZVNlbnNpdGl2ZSk7Ci0KLSAgICBzdGF0aWMgUVdlYkZhY3RvcnlMb2FkZXIgKnNlbGYoKTsKLQot
ICAgIFFTdHJpbmdMaXN0IG5hbWVzKCkgY29uc3QgeyByZXR1cm4ga2V5cygpOyB9Ci0gICAgUVN0
cmluZ0xpc3QgZXh0ZW5zaW9ucygpIGNvbnN0OwotICAgIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JO
YW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgUVN0cmluZ0xpc3QgbWltZXR5cGVz
Rm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJpbmcgbmFtZUZvck1p
bWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAgICBpbmxpbmUgYm9vbCBz
dXBwb3J0c01pbWVUeXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiAhbmFtZUZvck1pbWV0eXBlKG1pbWVUeXBlKS5pc0VtcHR5KCk7Ci0gICAgfQotCi0g
ICAgUVN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24p
OwotCi0gICAgUU9iamVjdCAqY3JlYXRlKFFXZWJGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyAmbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1
bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1l
bnRWYWx1ZXMpOwotCi0gICAgc3RydWN0IE1pbWVJbmZvIHsKLSAgICAgICAgUVN0cmluZyB0eXBl
OwotICAgICAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zOwotICAgIH07Ci0gICAgc3RydWN0IElu
Zm8gewotICAgICAgICBRU3RyaW5nIG5hbWU7Ci0gICAgICAgIFFTdHJpbmcgZGVzY3JpcHRpb247
Ci0gICAgICAgIFFMaXN0PE1pbWVJbmZvPiBtaW1lczsKLSAgICB9OwotICAgIFFMaXN0PEluZm8+
IG1fcGx1Z2luSW5mbzsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmNTNjMTY0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNv
bm5lY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICBDb3B5cmln
aHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAKLSAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAgCi0qLwotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCIKLSNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZS5o
IgotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJxd2ViZnJh
bWUuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotCi1zdHJ1Y3QgUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvclByaXZhdGUKLXsKLSAgICBRV2ViRnJhbWUgKmZyYW1lOwotfTsKLQotUVdlYk9iamVj
dFBsdWdpbkNvbm5lY3Rvcjo6UVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvcihRV2ViRnJhbWUgKmZy
YW1lKQotewotICAgIGQgPSBuZXcgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGU7Ci0g
ICAgZC0+ZnJhbWUgPSBmcmFtZTsKLX0KLQotUVdlYkZyYW1lICpRV2ViT2JqZWN0UGx1Z2luQ29u
bmVjdG9yOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmZyYW1lOwotfQotCi1RV2lk
Z2V0ICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpwbHVnaW5QYXJlbnRXaWRnZXQoKSBjb25z
dAotewotICAgIHJldHVybiBkLT5mcmFtZS0+cGFnZSgpLT52aWV3KCk7Ci19Ci0KLVFXZWJOZXR3
b3JrSm9iICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpyZXF1ZXN0VXJsKGNvbnN0IFFXZWJO
ZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgVGFyZ2V0IHRhcmdldCkKLXsKLSAgICBpZiAodGFyZ2V0
ICE9IFBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRV2ViTmV0d29ya0pvYiAqam9i
ID0gbmV3IFFXZWJOZXR3b3JrSm9iOwotICAgIFFXZWJOZXR3b3JrSm9iUHJpdmF0ZSAqcCA9IGpv
Yi0+ZDsKLSAgICBwLT5pbnRlcmZhY2UgPSBkLT5mcmFtZS0+cGFnZSgpLT5uZXR3b3JrSW50ZXJm
YWNlKCk7Ci0gICAgcC0+Y29ubmVjdG9yID0gdGhpczsKLQotICAgIHAtPnJlcXVlc3QgPSAqcmVx
dWVzdC5kOwotCi0gICAgZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29ya0ludGVyZmFjZSgpLT5hZGRK
b2Ioam9iKTsKLSAgICByZXR1cm4gam9iOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luY29ubmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYy
MjUxYTMuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVj
dG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8K
LSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTkNPTk5FQ1RPUl9ICi0jZGVmaW5lIFFXRUJPQkpFQ1RQ
TFVHSU5DT05ORUNUT1JfSAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUg
PFF0Q29yZS9xb2JqZWN0Lmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLQotI2luY2x1
ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCi0KLWNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIFFX
ZWJQYWdlOwotY2xhc3MgUVdpZGdldDsKLWNsYXNzIFFVcmw7Ci1jbGFzcyBRV2ViT2JqZWN0UGx1
Z2luQ29ubmVjdG9yUHJpdmF0ZTsKLWNsYXNzIFFXZWJGYWN0b3J5TG9hZGVyOwotY2xhc3MgUVdl
Yk5ldHdvcmtNYW5hZ2VyOwotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViT2JqZWN0UGx1Z2lu
Q29ubmVjdG9yIDogcHVibGljIFFPYmplY3QKLXsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IFFXZWJGcmFtZSAqZnJhbWUoKSBjb25zdDsKLSAgICBRV2lkZ2V0ICpwbHVnaW5QYXJlbnRXaWRn
ZXQoKSBjb25zdDsKLQotICAgIGVudW0gVGFyZ2V0IHsKLSAgICAgICAgUGx1Z2luLAotICAgICAg
ICBOZXcsCi0gICAgICAgIFNlbGYsCi0gICAgICAgIFBhcmVudCwKLSAgICAgICAgVG9wCi0gICAg
fTsKLSAgICBRV2ViTmV0d29ya0pvYiAqcmVxdWVzdFVybChjb25zdCBRV2ViTmV0d29ya1JlcXVl
c3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQgPSBQbHVnaW4pOwotCi1zaWduYWxzOgotICAgIHZv
aWQgc3RhcnRlZChRV2ViTmV0d29ya0pvYiopOwotICAgIHZvaWQgZGF0YShRV2ViTmV0d29ya0pv
YiosIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpOwotICAgIHZvaWQgZmluaXNoZWQoUVdlYk5ldHdv
cmtKb2IqLCBpbnQgZXJyb3JDb2RlKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUVdl
YkZhY3RvcnlMb2FkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJOZXR3b3JrTWFuYWdlcjsKLSAg
ICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKFFXZWJGcmFtZSAqZnJhbWUpOwotCi0gICAgUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUgKmQ7Ci19OwotCi0jZW5kaWYKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCmluZGV4IDZlNWU5ODQuLjQxMjFhNDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0x
MjgsNiArMTI4LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2Ug
KnFxKQogICAgIG5ldHdvcmtJbnRlcmZhY2UgPSAwOwogI2Vsc2UKICAgICBuZXR3b3JrTWFuYWdl
ciA9IDA7CisgICAgcGx1Z2luRmFjdG9yeSA9IDA7CiAjZW5kaWYKICAgICBpbnNpZGVPcGVuQ2Fs
bCA9IGZhbHNlOwogCkBAIC0xNDA2LDYgKzE0MDcsMTYgQEAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
ICpRV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdAogICAgIHJldHVybiBkLT5u
ZXR3b3JrTWFuYWdlcjsKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0UGx1Z2luRmFjdG9yeShRV2Vi
UGx1Z2luRmFjdG9yeSAqZmFjdG9yeSkKK3sKKyAgICBkLT5wbHVnaW5GYWN0b3J5ID0gZmFjdG9y
eTsKK30KKworUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdlOjpwbHVnaW5GYWN0b3J5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+cGx1Z2luRmFjdG9yeTsKK30KKwogI2VuZGlmCiAKIC8qIQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5oCmluZGV4IGU3NmY5MzUuLjg1NTdjMzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTQyLDYgKzQyLDcg
QEAgY2xhc3MgUVdlYkhpc3Rvcnk7CiBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiBjbGFzcyBRV2Vi
RnJhbWVEYXRhOwogY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7CitjbGFzcyBRV2ViUGx1Z2lu
RmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENocm9tZUNsaWVudFF0
OwpAQCAtMTcxLDYgKzE3Miw5IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgdm9pZCBzZXROZXR3b3Jr
QWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpOwogICAgIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdDsKKworICAgIHZv
aWQgc2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9yeSk7CisgICAgUVdl
YlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3RvcnkoKSBjb25zdDsKICNlbmRpZgogCiAgICAgcXVp
bnQ2NCB0b3RhbEJ5dGVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmluZGV4IDgwYjFlMjkuLjY0ZWRk
MzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0xNTQsNiArMTU0LDEwIEBAIHB1YmxpYzoKICAgICBRV2Vi
U2V0dGluZ3MgKnNldHRpbmdzOwogCiAgICAgUUFjdGlvbiAqYWN0aW9uc1tRV2ViUGFnZTo6V2Vi
QWN0aW9uQ291bnRdOworCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAorICAgIFFXZWJQbHVn
aW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5OworI2VuZGlmCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGx1Z2luZmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2I1ZDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3Rv
cnkuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJx
d2VicGx1Z2luZmFjdG9yeS5oIgorCitRV2ViUGx1Z2luRmFjdG9yeTo6UVdlYlBsdWdpbkZhY3Rv
cnkoUU9iamVjdCAqcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCit7Cit9CisKK1FXZWJQ
bHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkoKQoreworfQorCit2b2lkIFFXZWJQbHVn
aW5GYWN0b3J5OjpyZWZyZXNoUGx1Z2lucygpCit7Cit9CisKK2Jvb2wgUVdlYlBsdWdpbkZhY3Rv
cnk6OmV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24g
Km9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQpCit7Cit9CisKK2Jvb2wgUVdlYlBsdWdp
bkZhY3Rvcnk6OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0Cit7
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTMwNWY1YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBs
dWdpbmZhY3RvcnkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMDcg
VHJvbGx0ZWNoIEFTQQorCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKyNpZm5k
ZWYgUVdFQlBMVUdJTkZBQ1RPUllfSAorI2RlZmluZSBRV0VCUExVR0lORkFDVE9SWV9ICisKKyNp
bmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgor
I2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nbGlzdC5oPgorCitjbGFzcyBRVXJsOworY2xhc3MgUVdl
YlBsdWdpbkZhY3RvcnlQcml2YXRlOworY2xhc3MgUVN0cmluZzsKKworY2xhc3MgUVdFQktJVF9F
WFBPUlQgUVdlYlBsdWdpbkZhY3RvcnkgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgc3RydWN0IE1pbWVUeXBlIHsKKyAgICAgICAgUVN0cmluZyBuYW1lOwor
ICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBRU3RyaW5nTGlzdCBmaWxlRXh0
ZW5zaW9uczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpbiB7CisgICAgICAgIFFTdHJpbmcg
bmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgUUxpc3Q8TWltZVR5
cGU+IG1pbWVUeXBlczsKKyAgICB9OworCisgICAgZXhwbGljaXQgUVdlYlBsdWdpbkZhY3Rvcnko
UU9iamVjdCAqcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVdlYlBsdWdpbkZhY3RvcnkoKTsK
KworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOworCisgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVh
dGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVVybCAmdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOworCisgICAgZW51bSBFeHRl
bnNpb24geworICAgIH07CisgICAgY2xhc3MgRXh0ZW5zaW9uT3B0aW9uCisgICAge307CisgICAg
Y2xhc3MgRXh0ZW5zaW9uUmV0dXJuCisgICAge307CisgICAgdmlydHVhbCBib29sIGV4dGVuc2lv
bihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24gKm9wdGlvbiA9IDAs
IEV4dGVuc2lvblJldHVybiAqb3V0cHV0ID0gMCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIFFX
ZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZSAqZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IGVkOTFiODYuLmRk
YTBjZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKQEAgLTUwLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2ViZnJhbWVfcC5o
IgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicXdlYnBsdWdp
bmZhY3RvcnkuaCIKIAogI2luY2x1ZGUgPHFmaWxlaW5mby5oPgogCkBAIC02MCw3ICs2Miw2IEBA
CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KICNlbHNlCiAjaW5jbHVkZSAicXdlYm5ldHdvcmtp
bnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlCkBAIC05MDcsMTEgKzkwOCw4IEBAIE9iamVjdENvbnRlbnRUeXBl
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
KG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRJbWFnZTsKIAotICAgIC8v
ICMjIyBGSVhNRSBRdCA0LjQKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBpZiAoUVdl
YkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpCi0gICAg
ICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0jZW5kaWYKKyAgICBpZiAo
bV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0
c01pbWVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBs
dWdpbjsKIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlN
RVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwpAQCAt
OTcyLDExICs5NzAsMTEgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVn
aW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnMKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vICMjIyBGSVhNRTogcXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIG9iamVjdCA9IFFXZWJGYWN0b3J5TG9hZGVyOjpz
ZWxmKCktPmNyZWF0ZShtX3dlYkZyYW1lLCBxdXJsLCBtaW1lVHlwZSwgcGFyYW1zLCB2YWx1ZXMp
OwotI2VuZGlmCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgUVdlYlBsdWdpbkZhY3Rvcnkq
IGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKKyAgICAgICAg
aWYgKGZhY3RvcnkpCisgICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWltZVR5
cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0ICo+KG9iamVjdCk7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJl
ZS5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAK
aW5kZXggNWRmOGEzOC4uMmU0OTcwYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
RHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJqc29iamVjdHMuaCIKKyNpbmNsdWRlICJ0ZXN0
cGx1Z2luLmgiCiAKICNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFGaWxlPgpAQCAtODcsNiAr
ODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdlKFFXaWRnZXQgKnBhcmVudCwgRHVtcFJlbmRlclRyZWUg
KmRydCkKICAgICBzZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0lu
Y2x1ZGVkSW5Gb2N1c0NoYWluLCBmYWxzZSk7CiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoZ2Vv
bWV0cnlDaGFuZ2VSZXF1ZXN0KGNvbnN0IFFSZWN0ICYpKSwKICAgICAgICAgICAgIHRoaXMsIFNM
T1Qoc2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFSZWN0ICYgKSkpOworCisgICAgc2V0UGx1Z2luRmFj
dG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiB9CiAKIFFXZWJQYWdlICpXZWJQYWdlOjpjcmVh
dGVXaW5kb3coKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFp
bi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCBkZDRj
MGU5Li43MzhiZTdmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9t
YWluLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAt
MjgsNyArMjgsNiBAQAogICovCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1
ZGUgInRlc3RwbHVnaW4uaCIKIAogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CiAjaW5jbHVkZSA8
cWFwcGxpY2F0aW9uLmg+CkBAIC00OSwxMCArNDgsNiBAQAogI2luY2x1ZGUgPGV4ZWNpbmZvLmg+
CiAjZW5kaWYKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotUV9JTVBPUlRfUExVR0lOKHRl
c3RwbHVnaW4pCi0jZW5kaWYKLQogdm9pZCBtZXNzYWdlSGFuZGxlcihRdE1zZ1R5cGUgdHlwZSwg
Y29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgICBpZiAodHlwZSA9PSBRdENyaXRpY2FsTXNnKSB7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNw
cCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCmluZGV4IDI3
NTU4YzkuLmYzZTAzOTkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L3Rlc3RwbHVnaW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3Rw
bHVnaW4uY3BwCkBAIC0yNywxMCArMjcsOCBAQAogICovCiAjaW5jbHVkZSAidGVzdHBsdWdpbi5o
IgogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KIFRlc3RQbHVnaW46OlRlc3RQbHVnaW4o
UU9iamVjdCAqcGFyZW50KQotICAgIDogUVdlYk9iamVjdFBsdWdpbihwYXJlbnQpCisgICAgOiBR
V2ViUGx1Z2luRmFjdG9yeShwYXJlbnQpCiB7CiB9CiAKQEAgLTM4LDM0ICszNiwzMiBAQCBUZXN0
UGx1Z2luOjp+VGVzdFBsdWdpbigpCiB7CiB9CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVnaW46Omtl
eXMoKSBjb25zdAorUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gVGVzdFBsdWdpbjo6
cGx1Z2lucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRpbjFTdHJpbmco
InRlc3RwbHVnaW4iKSk7Ci19CisgICAgUVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiBwbHVnaW47
CiAKLVFTdHJpbmcgVGVzdFBsdWdpbjo6ZGVzY3JpcHRpb25Gb3JLZXkoY29uc3QgUVN0cmluZyAm
KSBjb25zdAotewotICAgIHJldHVybiBRTGF0aW4xU3RyaW5nKCJ0ZXN0ZGVzY3JpcHRpb24iKTsK
LX0KKyAgICBwbHVnaW4ubmFtZSA9ICJ0ZXN0cGx1Z2luIjsKKyAgICBwbHVnaW4uZGVzY3JpcHRp
b24gPSAidGVzdGRlc2NyaXB0aW9uIjsKKyAgICBNaW1lVHlwZSBtaW1lVHlwZTsKKyAgICBtaW1l
VHlwZS5uYW1lID0gInRlc3R0eXBlIjsKKyAgICBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5hcHBl
bmQoInRlc3RzdWZmaXhlcyIpOworICAgIHBsdWdpbi5taW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBl
KTsKIAotUVN0cmluZ0xpc3QgVGVzdFBsdWdpbjo6bWltZXR5cGVzRm9yS2V5KGNvbnN0IFFTdHJp
bmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGluMVN0cmluZygidGVz
dHR5cGUiKSk7Ci19CisgICAgcGx1Z2luLm5hbWUgPSAidGVzdHBsdWdpbjIiOworICAgIHBsdWdp
bi5kZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24yIjsKKyAgICBtaW1lVHlwZS5uYW1lID0g
InRlc3R0eXBlMiI7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3Vm
Zml4ZXMyIik7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3VmZml4
ZXMzIik7CisgICAgcGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOwogCi1RU3RyaW5n
TGlzdCBUZXN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmKSBj
b25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3RyaW5nKCJ0ZXN0c3VmZml4
ZXMiKSk7CisgICAgcmV0dXJuIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+KCkgPDwg
cGx1Z2luOwogfQogCi1RT2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUoUVdlYk9iamVjdFBsdWdp
bkNvbm5lY3RvciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmKSBjb25zdAorUU9iamVjdCAqVGVzdFBsdWdp
bjo6Y3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFVcmwgJnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLVFfRVhQT1JUX1BMVUdJTjIodGVzdHBsdWdpbiwgVGVzdFBsdWdpbikKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5o
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oCmluZGV4IGUzMDUw
NjkuLmVjZmQ5NzcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rl
c3RwbHVnaW4uaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2lu
LmgKQEAgLTI1LDI4ICsyNSwyMSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2Rl
ZmluZSBRVF9TVEFUSUNQTFVHSU4KLSNpbmNsdWRlIDxxd2Vib2JqZWN0cGx1Z2luLmg+CisjaW5j
bHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KIAogCi1jbGFzcyBUZXN0UGx1Z2luIDogcHVibGlj
IFFXZWJPYmplY3RQbHVnaW4KK2NsYXNzIFRlc3RQbHVnaW4gOiBwdWJsaWMgUVdlYlBsdWdpbkZh
Y3RvcnkKIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBUZXN0UGx1Z2luKFFPYmplY3QgKnBhcmVu
dCA9IDApOwogICAgIHZpcnR1YWwgflRlc3RQbHVnaW4oKTsKIAotICAgIHZpcnR1YWwgUVN0cmlu
Z0xpc3Qga2V5cygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JLZXkoY29uc3QgUVN0
cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zvcktl
eShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZXh0
ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0
b3IsCisgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykg
Y29uc3Q7CisKIH07CiAKLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19400</attachid>
            <date>2008-02-27 04:07:25 -0800</date>
            <delta_ts>2008-02-28 04:31:46 -0800</delta_ts>
            <desc>new patch including Mac X build fixes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>168914</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFz
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdp
bnMtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2
aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlw
ZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMg
YW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjRmZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MzggQEAKKzxodG1sPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgcGx1
Z2lucyA9IG5ldyBBcnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLnBsdWdpbnMu
bGVuZ3RoOyArK2kpIHsKKyAgICBwbHVnaW5zLnB1c2gobmF2aWdhdG9yLnBsdWdpbnNbaV0pOwor
fQorCit2YXIgbWltZVR5cGVzID0gbmV3IEFycmF5OworZm9yICh2YXIgaSA9IDA7IGkgPCBuYXZp
Z2F0b3IubWltZVR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgbWltZVR5cGVzLnB1c2gobmF2aWdh
dG9yLm1pbWVUeXBlc1tpXSk7Cit9CisKK25hdmlnYXRvci5wbHVnaW5zLnJlZnJlc2goKTsKKwor
dmFyIG91dHB1dCA9ICI8cHJlPiI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5n
dGg7ICsraSkgeworICAgIG91dHB1dCArPSBwbHVnaW5zW2ldLm5hbWU7CisgICAgb3V0cHV0ICs9
ICJcbiI7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgKytpKSB7
CisgICAgb3V0cHV0ICs9IG1pbWVUeXBlc1tpXS50eXBlOworICAgIG91dHB1dCArPSAiXG4iOwor
fQorCitvdXRwdXQgKz0gIjwvcHJlPiI7CisKKy8vZG9jdW1lbnQud3JpdGVsbihvdXRwdXQpOwor
ZG9jdW1lbnQud3JpdGVsbigiVGVzdHMgYWNjZXNzIHRvIHByZXZpb3VzbHkgcmVjZWl2ZWQgYXJy
YXlzIGZyb20gbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG1pbWV0eXBlcyBhZnRlciBjYWxsaW5nIHBs
dWdpbnMucmVmcmVzaCgpLiBJZiB0aGlzIHRleHQgYXBwZWFycyBhbmQgdGhlcmUgaXMgbm8gY3Jh
c2gsIHRoZW4gdGhlIHRlc3Qgc3VjY2VlZGVkLiIpOworCis8L3NjcmlwdD4KKzxib2R5PgorPC9i
b2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA1OGZjNTc5Li4yOThlZTI5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCkBAIC0zMyw2ICszMyw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvZG9t
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwgXAogICAgICQoV2ViQ29yZSkvcGFnZSBcCisgICAgJChX
ZWJDb3JlKS9wbHVnaW5zIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29y
ZSkveG1sIFwKICAgICAkKFdlYkNvcmUpL3N2ZwpAQCAtNDIxLDE1ICs0MjIsMjAgQEAgYWxsIDog
XAogICAgIEpTTWVkaWFFcnJvci5oIFwKICAgICBKU01lZGlhTGlzdC5oIFwKICAgICBKU01lc3Nh
Z2VFdmVudC5oIFwKKyAgICBKU01pbWVUeXBlLmggXAorICAgIEpTTWltZVR5cGVBcnJheS5oIFwK
ICAgICBKU01vdXNlRXZlbnQuaCBcCiAgICAgSlNNdXRhdGlvbkV2ZW50LmggXAogICAgIEpTTmFt
ZWROb2RlTWFwLmggXAorICAgIEpTTmF2aWdhdG9yLmggXAogICAgIEpTTm9kZS5oIFwKICAgICBK
U05vZGVGaWx0ZXIuaCBcCiAgICAgSlNOb2RlSXRlcmF0b3IuaCBcCiAgICAgSlNOb2RlTGlzdC5o
IFwKICAgICBKU05vdGF0aW9uLmggXAogICAgIEpTT3ZlcmZsb3dFdmVudC5oIFwKKyAgICBKU1Bs
dWdpbi5oIFwKKyAgICBKU1BsdWdpbkFycmF5LmggXAogICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmggXAogICAgIEpTUHJvZ3Jlc3NFdmVudC5oIFwKICAgICBKU1JhbmdlLmggXApAQCAtNjAw
LDcgKzYwNiw2IEBAIGFsbCA6IFwKICAgICBYUGF0aEdyYW1tYXIuY3BwIFwKICAgICBranNfY3Nz
Lmx1dC5oIFwKICAgICBranNfZXZlbnRzLmx1dC5oIFwKLSAgICBranNfbmF2aWdhdG9yLmx1dC5o
IFwKICAgICBranNfd2luZG93Lmx1dC5oIFwKICAgICB0b2tlbml6ZXIuY3BwIFwKICAgICBXZWJD
b3JlLmV4cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBmMWM3OTBjLi4xZDdiYTJjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTU0LDcgKzU0
LDYgQEAgd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MubHV0
LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5sdXQuaCBcCi0JV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
QmFzZVRhYmxlLmNwcAogCkBAIC0xNzEsMTUgKzE3MCwyMCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJj
ZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL0pTSW1hZ2VEYXRhLmggXAogCURlcml2ZWRTb3VyY2Vz
L0pTS2V5Ym9hcmRFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9KU01lZGlhTGlzdC5oIFwKKwlE
ZXJpdmVkU291cmNlcy9KU01pbWVUeXBlLmggXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5cGVB
cnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU01vdXNlRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvSlNNdXRhdGlvbkV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL0pTTmFtZWROb2RlTWFwLmgg
XAorCURlcml2ZWRTb3VyY2VzL0pTTmF2aWdhdG9yLmggXAogCURlcml2ZWRTb3VyY2VzL0pTTm9k
ZS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVGaWx0ZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
SlNOb2RlSXRlcmF0b3IuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlTGlzdC5oIFwKIAlEZXJp
dmVkU291cmNlcy9KU05vdGF0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL0pTT3ZlcmZsb3dFdmVu
dC5oIFwKKwlEZXJpdmVkU291cmNlcy9KU1BsdWdpbi5oIFwKKwlEZXJpdmVkU291cmNlcy9KU1Bs
dWdpbkFycmF5LmggXAogCURlcml2ZWRTb3VyY2VzL0pTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgg
XAogCURlcml2ZWRTb3VyY2VzL0pTUHJvZ3Jlc3NFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9K
U1JhbmdlLmggXApAQCAtMjk2LDE1ICszMDAsMjAgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9
IFwKIAlEZXJpdmVkU291cmNlcy9KU0ltYWdlRGF0YS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pT
S2V5Ym9hcmRFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTWVkaWFMaXN0LmNwcCBcCisJ
RGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZS5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5
cGVBcnJheS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTW91c2VFdmVudC5jcHAgXAogCURlcml2
ZWRTb3VyY2VzL0pTTXV0YXRpb25FdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTmFtZWRO
b2RlTWFwLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNOYXZpZ2F0b3IuY3BwIFwKIAlEZXJpdmVk
U291cmNlcy9KU05vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVGaWx0ZXIuY3BwIFwK
IAlEZXJpdmVkU291cmNlcy9KU05vZGVJdGVyYXRvci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pT
Tm9kZUxpc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05vdGF0aW9uLmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvSlNPdmVyZmxvd0V2ZW50LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW4u
Y3BwIFwKKwlEZXJpdmVkU291cmNlcy9KU1BsdWdpbkFycmF5LmNwcCBcCiAJRGVyaXZlZFNvdXJj
ZXMvSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2dy
ZXNzRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU1JhbmdlLmNwcCBcCkBAIC00NDEsNyAr
NDUwLDEyIEBAIElETF9CSU5ESU5HUyArPSAgXAogCVdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
aWRsIFwKIAlXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBcCiAJV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuaWRsIFwKKwlXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBcCiAJV2ViQ29yZS9wYWdlL1Nj
cmVlbi5pZGwgXAorCVdlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwgXAorCVdlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwgXAor
CVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwgXAogCVdlYkNvcmUveG1sL0RPTVBhcnNl
ci5pZGwgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAJV2Vi
Q29yZS94bWwvWE1MU2VyaWFsaXplci5pZGwKQEAgLTQ4MiwxMyArNDk2LDE3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20u
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcCAgXAorCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwICBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9t
LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNQbHVnaW5DdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBcCkBAIC00
OTksNyArNTE3LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19kb20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0JV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfbmF2aWdhdG9yLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL1BhdXNlZFRpbWVvdXRzLmNwcCBcCkBAIC03ODgsNiArODA1LDcgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgXAogCVdlYkNvcmUvcGFnZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcCBcCiAJV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcCBcCiAJV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcCBcCkBAIC04NDgsNiArODY2LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9V
bmljb2RlUmFuZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAorCVdlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkluZm9TdG9yZS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKQEAg
LTIwMzMsNyArMjA1Niw4IEBAIHZwYXRoICUuaWRsID0gXAogICAgICQoV2ViQ29yZSkvcGFnZSBc
CiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCi0gICAgJChX
ZWJDb3JlKS94bWwKKyAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS9wbHVnaW5z
CiAKIERlcml2ZWRTb3VyY2VzL0pTJS5oOiBEZXJpdmVkU291cmNlcy9KUyUuY3BwOwogCkBAIC0y
MDU0LDYgKzIwNzgsNSBAQCBDTEVBTkZJTEVTICs9IFwKIAlKU1hTTFRQcm9jZXNzb3IubHV0Lmgg
XAogCWtqc19jc3MubHV0LmggXAogCWtqc19ldmVudHMubHV0LmggXAotCWtqc19uYXZpZ2F0b3Iu
bHV0LmggXAogCWtqc193aW5kb3cubHV0LmgKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMDRiZWUyNS4uOTBhN2M4OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0y
NTAsNyArMjUwLDYgQEAgTFVUX0ZJTEVTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcCBcCiAgICAgYmluZGluZ3Mv
anMva2pzX2V2ZW50cy5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAogCiBMVVRfVEFCTEVfRklMRVMgKz0gXApA
QCAtMzgxLDYgKzM4MCwxMSBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHBhZ2UvRE9NV2luZG93
LmlkbCBcCiAgICAgcGFnZS9IaXN0b3J5LmlkbCBcCiAgICAgcGFnZS9TY3JlZW4uaWRsIFwKKyAg
ICBwYWdlL05hdmlnYXRvci5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luLmlkbCBcCisgICAgcGx1
Z2lucy9NaW1lVHlwZS5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIFwKKyAgICBw
bHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsIFwKICAgICB4bWwvRE9NUGFyc2VyLmlkbCBcCiAgICAg
eG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAgICAgeG1sL1hNTFNlcmlhbGl6ZXIu
aWRsCkBAIC00MjEsNiArNDI1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNM
b2NhdGlvbi5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBc
CiAgICAgYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAgIFwKKyAgICBiaW5k
aW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIFwKQEAgLTQzMSwxMiArNDM2
LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3Rv
bS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIFwKKyAgICBi
aW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9r
anNfYmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9ranNfZG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGluZ3MvanMva2pzX25hdmln
YXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAogICAgIGJpbmRpbmdz
L2pzL2tqc193aW5kb3cuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9QYXVzZWRUaW1lb3V0cy5jcHAg
XApAQCAtNzE2LDYgKzcyMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9ET01TZWxlY3Rpb24uY3BwIFwKICAgICBwYWdlL0RP
TVdpbmRvdy5jcHAgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmNwcCBcCiAgICAgcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAgXAogICAgIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwIFwKQEAgLTcyOSw2ICs3MzcsMTEgQEAgU09VUkNFUyArPSBcCiAgICAg
cGFnZS9TY3JlZW4uY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNwcCBcCiAgICAgcGFnZS9XaW5k
b3dGZWF0dXJlcy5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAgXAorICAgIHBsdWdp
bnMvUGx1Z2luQXJyYXkuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbi5jcHAgXAorICAgIHBsdWdp
bnMvTWltZVR5cGUuY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcCBc
CiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKQEAgLTg5Miw2ICs5MDUsNyBAQCBxdC1w
b3J0IHsKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0Fw
aS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3
ZWJwbHVnaW5mYWN0b3J5LmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQkUFdEL3BsYXRmb3JtL25ldHdvcmsvcXQv
UU5ldHdvcmtSZXBseUhhbmRsZXIuaAogCkBAIC05NTQsNiArOTY4LDcgQEAgcXQtcG9ydCB7CiAg
ICAgcGxhdGZvcm0vdGV4dC9xdC9UZXh0Q29kZWNRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1do
ZWVsRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1dpZGdldFF0LmNwcCBcCisgICAgcGx1
Z2lucy9xdC9QbHVnaW5EYXRhUXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9EcmFnQ2xpZW50UXQuY3BwIFwKQEAgLTk2Nyw2ICs5ODIsNyBAQCBxdC1wb3J0IHsKICAgICAu
Li9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJm
YWNlLmNwcCBcCisgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKIAog
ICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcAogICAgIGVs
c2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3BwCkBAIC05NzYsMTUg
Kzk5MiwxMCBAQCBxdC1wb3J0IHsKICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmggXAogICAgICAgICAg
ICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmggXAotICAg
ICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmggXAotICAg
ICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBcCi0g
ICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0
b3IuaCBcCiAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuaAog
CiAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZS5jcHAgXAotICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luLmNwcCBcCi0gICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmpl
Y3RwbHVnaW5jb25uZWN0b3IuY3BwIFwKICAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcWNv
b2tpZWphci5jcHAKIAogICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDkyYzFmZTMuLjAyZjcwZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC01MDYsNyArNTA2LDYgQEAKIAkJNjVDOTdBRjMwOEVBOTA4
ODAwQUNEMjczIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICovOyB9Owog
CQk2NUNCRkVGOTA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Q0JGRUY3MDk3NEY2MDcwMDFEQUMy
NSAvKiBGcmFtZVZpZXcuY3BwICovOyB9OwogCQk2NUNCRkVGQTA5NzRGNjA3MDAxREFDMjUgLyog
RnJhbWVWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NUNCRkVGODA5NzRGNjA3MDAxREFDMjUgLyogRnJhbWVWaWV3LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNjVEMUMxQ0EwOTkzMkIyMjAwMENC
MzI0IC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjVEMUMxQzkwOTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oICovOyB9OwogCQk2NURG
MzFEQTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMUQ4MDlEMUMxMjIwMDBCRTMyNSAvKiBKU0F0
dHIuY3BwICovOyB9OwogCQk2NURGMzFEQjA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzFEOTA5RDFD
MTIzMDAwQkUzMjUgLyogSlNBdHRyLmggKi87IH07CiAJCTY1REYzMUYzMDlEMUNDNjAwMDBCRTMy
NSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjVERjMxREYwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0
YS5jcHAgKi87IH07CkBAIC0xNTkwLDggKzE1ODksNiBAQAogCQk5M0I3MEQ2QTA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2V2ZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNCNzBENEUwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19ldmVudHMuaCAqLzsg
fTsKIAkJOTNCNzBENkIwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDRGMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfaHRtbC5jcHAgKi87IH07CiAJCTkzQjcwRDZDMDlFQjBDN0MwMDlEODQ2OCAv
KiBranNfaHRtbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmggKi87IH07Ci0JCTkzQjcw
RDZEMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQjcwRDUxMDlFQjBDN0MwMDlEODQ2OCAv
KiBranNfbmF2aWdhdG9yLmNwcCAqLzsgfTsKLQkJOTNCNzBENkUwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19uYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmggKi87IH07
CiAJCTkzQjcwRDZGMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTMwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19wcm94eS5jcHAgKi87IH07CiAJCTkzQjcwRDcwMDlFQjBDN0MwMDlEODQ2OCAv
KiBranNfcHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0I3MEQ3NTA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX3dpbmRvdy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0I3MEQ1OTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3dpbmRvdy5jcHAg
Ki87IH07CkBAIC0yMDAyLDcgKzE5OTksNiBAQAogCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkg
LyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTgxODcyMjQwOTc3
RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5v
ZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovOyB9OwotCQlB
ODIzOThBODA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzk4QTcwOUIzQUNGNTAw
QjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZU1hYy5tbSAqLzsgfTsKIAkJQTgyMzlFMDAwOUIzQ0Y4
QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwICov
OyB9OwogCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkYwOUIzQ0Y4QTAwQjYw
NjQxIC8qIExvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBODI2RThBRTBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0
cnVjdG9yLmggKi87IH07CkBAIC0yNTMzLDYgKzI1MjksMzMgQEAKIAkJQThGNDZCODEwQ0IyMEE5
RDAwM0E5NjcwIC8qIERPTVNWR1N0cmluZ0xpc3QuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RDc5QUQyMEFDQTE3RUIwMEYw
MkZDNSAvKiBET01TVkdTdHJpbmdMaXN0LmggKi87IH07CiAJCUE4RjRGQjk0MEMxNjlFN0IwMDJB
RkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZHUmVuZGVyU3Vw
cG9ydC5oICovOyB9OwogCQlBOEY0RkI5NjBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3Vw
cG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi87IH07CisJ
CUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkg
LyogTWltZVR5cGUuY3BwICovOyB9OworCQlBOUM2RTRFNDBENzQ1RTA1MDA2NDQyRTkgLyogTWlt
ZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5
QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oICovOyB9OworCQlBOUM2RTRFNzBE
NzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWlt
ZVR5cGVBcnJheS5jcHAgKi87IH07CisJCUE5QzZFNEU4MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1l
VHlwZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOUM2RTRFNjBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5oICovOyB9OworCQlB
OUM2RTRFQjBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEU5MEQ3NDVFMkIwMDY0NDJFOSAvKiBQ
bHVnaW4uY3BwICovOyB9OworCQlBOUM2RTRFQzBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFQTBE
NzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggKi87IH07CisJCUE5QzZFNEVGMEQ3NDVFMzgwMDY0
NDJFOSAvKiBQbHVnaW5BcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOUM2RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuY3Bw
ICovOyB9OworCQlBOUM2RTRGMDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEVFMEQ3NDVF
MzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovOyB9OworCQlBOUM2RTRGMzBENzQ1RTQ4MDA2
NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOUM2RTRGMTBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAg
Ki87IH07CisJCUE5QzZFNEY0MEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRGMjBENzQ1RTQ4
MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovOyB9OworCQlBOUM2RTRGNjBENzQ1RTYxMDA2NDQy
RTkgLyogUGx1Z2luRGF0YU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5QzZFNEY1MEQ3NDVFNjEwMDY0NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1t
ICovOyB9OworCQlBOUM2RTVBNTBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNUEzMEQ3NDY0
NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovOyB9OworCQlBOUM2RTVBNjBENzQ2NDU4MDA2
NDQyRTkgLyogTmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOUM2RTVBNDBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmggKi87IH07
CisJCUE5QzZFNjQ3MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU2NDYw
RDc0NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgKi87IH07CisJCUE5
QzZFNjQ5MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmlnYXRvckN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0ODBENzQ2NUQ4MDA2
NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICovOyB9OworCQlBOUM2RTY0QzBENzQ2NUU3
MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0QTBENzQ2NUU3MDA2NDQyRTkgLyogSlNQ
bHVnaW5BcnJheUN1c3RvbS5jcHAgKi87IH07CisJCUE5QzZFNjREMEQ3NDY1RTcwMDY0NDJFOSAv
KiBKU1BsdWdpbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOUM2RTY0QjBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3Bw
ICovOyB9OworCQlBOUQyNDdGNzBENzU3RTM0MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ3RjUwRDc1
N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCAqLzsgfTsKKwkJQTlEMjQ3RjgwRDc1N0Uz
NDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDdGNjBENzU3RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3Iu
aCAqLzsgfTsKKwkJQTlEMjQ3RkUwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0N0ZBMEQ3NTdF
NjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi87IH07CisJCUE5RDI0N0ZGMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU1BsdWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggKi87IH07CisJ
CUE5RDI0ODAwMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0N0ZDMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU1BsdWdpbkFycmF5LmNwcCAqLzsgfTsKKwkJQTlEMjQ4MDEwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5RDI0N0ZEMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5Lmgg
Ki87IH07CisJCUE5RDI0ODA2MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODAyMEQ3NTdF
N0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCAqLzsgfTsKKwkJQTlEMjQ4MDcwRDc1N0U3RDAw
RkRGOTU5IC8qIEpTTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmggKi87
IH07CisJCUE5RDI0ODA4MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4MDQwRDc1
N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5jcHAgKi87IH07CisJCUE5RDI0ODA5MEQ3
NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODA1MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01p
bWVUeXBlQXJyYXkuaCAqLzsgfTsKIAkJQUEwOTcyQ0MwQjY5NDdBODAwQTcwNUU5IC8qIFNWR0lu
bGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUEwOTcyQ0EwQjY5NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guY3BwICov
OyB9OwogCQlBQTA5NzJDRDBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTcyQ0IwQjY5
NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guaCAqLzsgfTsKIAkJQUEyMUVDQ0EwQUJG
MEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTc4RUQwQUJBQTZFMTAwODc0NDgwIC8q
IENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovOyB9OwpAQCAtNDc5NSw3ICs0ODE4LDYgQEAKIAkJ
NjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9IDA7IH07CiAJCTY1Q0JGRUY3MDk3NEY2
MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZyYW1lVmlldy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1
Q0JGRUY4MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZyYW1lVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdHRyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjVERjMxRDkwOUQxQzEyMzAwMEJFMzI1IC8qIEpTQXR0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1REYzMURGMDlEMUNDNjAwMDBCRTMyNSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2hhcmFjdGVyRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODI5LDggKzU4NTEsNiBAQAogCQk5M0I3MEQ0
RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0ga2pzX2V2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
M0I3MEQ0RjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtqc19odG1sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBranNfaHRtbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk5M0I3MEQ1MTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0ga2pzX25hdmlnYXRvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzQjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAv
KiBranNfbmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBranNf
bmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDUzMDlFQjBD
N0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IGtqc19wcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
QjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGtqc19wcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0I3MEQ1OTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3dpbmRvdy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0ga2pzX3dpbmRvdy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MDY5LDcgKzYwODksNiBAQAogCQlBODE4NzIxODA5NzdEM0MwMDA1
ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBOYW1lZE5vZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTkw
OTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTmFtZU5vZGVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTm9kZUxpc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODIzOThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyog
UGx1Z0luSW5mb1N0b3JlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFBsdWdJbkluZm9TdG9yZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODIzOURGRjA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTY0NzMsNiArNjQ5MiwzOCBAQAogCQlBOEVBODAwNjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGNEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNW
R1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVu
ZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5
RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTlDNkU0RTEwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaW1lVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1pbWVU
eXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFNjBENzQ1
RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWltZVR5cGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
OUM2RTRFOTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOUM2RTRFQTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTlDNkU0RUQwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW5BcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEVFMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luQXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RjEwRDc0NUU0ODAwNjQ0MkU5IC8qIFBs
dWdpbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdp
bkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRGMjBENzQ1RTQ4
MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGx1Z2luRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRGNTBE
NzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBQbHVnaW5EYXRhTWFjLm1tOyBwYXRoID0gbWFjL1BsdWdpbkRh
dGFNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNUEzMEQ3NDY0NTgw
MDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE5hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZF
NUE0MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5hdmlnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlB
OUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pbWVUeXBlQXJyYXlDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTY0ODBENzQ2NUQ4MDA2NDQy
RTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTmF2aWdhdG9yQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQTlDNkU2NEEwRDc0NjVFNzAwNjQ0MkU5IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luQXJyYXlDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTY0QjBENzQ2NUU3MDA2
NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUGx1Z2luQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTlDNkU2NUQwRDc0NjY5NDAwNjQ0MkU5IC8qIE5hdmlnYXRvci5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IE5hdmlnYXRvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE5QzZFNjVFMEQ3NDY2RjIwMDY0NDJFOSAvKiBNaW1lVHlwZS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IE1pbWVUeXBlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlD
NkU2NUYwRDc0NjcwMDAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBNaW1lVHlwZUFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTlDNkU2NjAwRDc0NjcwQzAwNjQ0MkU5IC8qIFBsdWdpbi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFBsdWdpbi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZF
NjYxMEQ3NDY3MUUwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFBsdWdpbkFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlE
MjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE5RDI0N0Y2MEQ3NTdFMzMwMEZERjk1OSAvKiBKU05hdmlnYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RkEwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2lu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1BsdWdpbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0N0ZCMEQ3NTdFNjkwMEZERjk1OSAv
KiBKU1BsdWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RkMwRDc1N0U2OTAwRkRGOTU5
IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTUGx1Z2luQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUQy
NDdGRDBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW5BcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOUQyNDgwMjBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNaW1lVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01pbWVUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODA0MEQ3NTdFN0QwMEZERjk1OSAvKiBK
U01pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0
ODA1MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWltZVR5cGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQTA5NzJDQTBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJv
eC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMDk3MkNCMEI2OTQ3QTgwMEE3
MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdJbmxpbmVUZXh0Qm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFB
MDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgwNjcsNiArODExOCw3IEBACiAJCQkJQkM5
ODU0NDMwQ0QzRDlEMDAwMDY5QkMxIC8qIFdpbmRvdyAqLywKIAkJCQlBODNCNzkyMjBDQ0IwMEYw
MDAwQjA4MjUgLyogWE1MICovLAogCQkJCUE4M0I3OTBDMENDQUZGODMwMDBCMDgyNSAvKiBYUGF0
aCAqLywKKwkJCQlBOUQyNDdGOTBENzU3RTQxMDBGREY5NTkgLyogUGx1Z2lucyAqLywKIAkJCSk7
CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZTsKQEAgLTgyMTUsNiArODI2NywyMSBAQAogCQk1RENGODM2OTBENTkxNTc4MDA5NTNC
QzYgLyogcGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJQTlDNkU2NjEwRDc0NjcxRTAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmlkbCAqLywKKwkJ
CQlBOUM2RTY2MDBENzQ2NzBDMDA2NDQyRTkgLyogUGx1Z2luLmlkbCAqLywKKwkJCQlBOUM2RTY1
RjBENzQ2NzAwMDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5pZGwgKi8sCisJCQkJQTlDNkU2NUUw
RDc0NjZGMjAwNjQ0MkU5IC8qIE1pbWVUeXBlLmlkbCAqLywKKwkJCQlBOUM2RTRGNTBENzQ1RTYx
MDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSAqLywKKwkJCQlBOUM2RTRGMTBENzQ1RTQ4MDA2
NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgKi8sCisJCQkJQTlDNkU0RjIwRDc0NUU0ODAwNjQ0MkU5
IC8qIFBsdWdpbkRhdGEuaCAqLywKKwkJCQlBOUM2RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1
Z2luQXJyYXkuY3BwICovLAorCQkJCUE5QzZFNEVFMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5B
cnJheS5oICovLAorCQkJCUE5QzZFNEU5MEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICov
LAorCQkJCUE5QzZFNEVBMEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uaCAqLywKKwkJCQlBOUM2
RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi8sCisJCQkJQTlDNkU0
RTYwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuaCAqLywKKwkJCQlBOUM2RTRFMTBE
NzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovLAorCQkJCUE5QzZFNEUyMEQ3NDVFMDUw
MDY0NDJFOSAvKiBNaW1lVHlwZS5oICovLAogCQkJCTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAv
KiBQbHVnaW5JbmZvU3RvcmUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gcGx1Z2luczsKQEAgLTgz
NDUsNyArODQxMiw2IEBACiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3Jt
U2NyZWVuTWFjLm1tICovLAogCQkJCUJDM0ZDQUE4MEFDM0RCNTgwMEJBNTRBRCAvKiBQbGF0Zm9y
bVNjcm9sbEJhci5oICovLAogCQkJCUJDN0IyQUY5MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9y
bVNjcm9sbEJhck1hYy5tbSAqLywKLQkJCQlBODIzOThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1
Z0luSW5mb1N0b3JlTWFjLm1tICovLAogCQkJCTA2NjhFMThFMEFERDk2NDAwMDQxMjhFMCAvKiBQ
b3B1cE1lbnVNYWMubW0gKi8sCiAJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9s
bEJhci5jcHAgKi8sCiAJCQkJOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8qIFNjcm9sbFZpZXdN
YWMubW0gKi8sCkBAIC04MzgyLDYgKzg0NDgsOSBAQAogCQk2NUJGMDIxODA5NzQ4MDYzMDBDNDMx
OTYgLyogcGFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQTlDNkU2NUQwRDc0NjY5NDAwNjQ0MkU5IC8qIE5hdmlnYXRvci5pZGwgKi8sCisJCQkJQTlD
NkU1QTMwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgKi8sCisJCQkJQTlDNkU1QTQw
RDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oICovLAogCQkJCTA2NjkzRjQ1MEJGQkM5MTYw
MDIxNjA3MiAvKiBpbnNwZWN0b3IgKi8sCiAJCQkJOTNDMDlBODIwQjA2NEYwNTAwNUFCRDREIC8q
IG1hYyAqLywKIAkJCQk4NTM4RjAwMDBBRDcxNzcwMDA2QTgxRDEgLyogQWJzdHJhY3RWaWV3Lmlk
bCAqLywKQEAgLTg0MzIsNyArODUwMSw2IEBACiAJCQkJOTM1QzQ3NjIwOUFDNENFNjAwQTZBQUI0
IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCAqLywKIAkJCQk2NUZFQTg2ODA5ODMz
QURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8sCiAJCQkJNjVBMjE0NjcwOTdBMzI5MTAwQjkwNTBB
IC8qIFBhZ2UuaCAqLywKLQkJCQk2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmgg
Ki8sCiAJCQkJQkNFQzAxQkEwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgKi8sCiAJCQkJ
QkNFQzAxQkIwQzI3NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5oICovLAogCQkJCUJDRUMwMUJDMEMy
NzREQUMwMDlGNEVDOSAvKiBTY3JlZW4uaWRsICovLApAQCAtMTA2MTcsNiArMTA2ODUsMjEgQEAK
IAkJCW5hbWUgPSBYTUw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlBOUQy
NDdGOTBENzU3RTQxMDBGREY5NTkgLyogUGx1Z2lucyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlEMjQ4MDIwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWlt
ZVR5cGUuY3BwICovLAorCQkJCUE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBl
LmggKi8sCisJCQkJQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5j
cHAgKi8sCisJCQkJQTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5o
ICovLAorCQkJCUE5RDI0N0ZBMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi8sCisJ
CQkJQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggKi8sCisJCQkJQTlEMjQ3
RkMwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovLAorCQkJCUE5RDI0N0ZE
MEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi8sCisJCQkpOworCQkJbmFtZSA9
IFBsdWdpbnM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMjIyNzdDQTBE
MDBCRjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKQEAgLTExNDgxLDggKzExNTY0LDYgQEAKIAkJCQk5M0I3MEQ0RTA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2V2ZW50cy5oICovLAogCQkJCTkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAv
KiBranNfaHRtbC5jcHAgKi8sCiAJCQkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19o
dG1sLmggKi8sCi0JCQkJOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3Iu
Y3BwICovLAotCQkJCTkzQjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmgg
Ki8sCiAJCQkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgKi8sCiAJ
CQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oICovLAogCQkJCTkzQjcw
RDU5MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfd2luZG93LmNwcCAqLywKQEAgLTExNTM5LDYgKzEx
NjIwLDEwIEBACiAJCUJDNEVERUY3MEMwOEY0MTQwMDdFREQ0OSAvKiBDdXN0b20gKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUE5QzZFNjRBMEQ3NDY1RTcw
MDY0NDJFOSAvKiBKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCAqLywKKwkJCQlBOUM2RTY0QjBENzQ2
NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICovLAorCQkJCUE5QzZFNjQ4MEQ3NDY1
RDgwMDY0NDJFOSAvKiBKU05hdmlnYXRvckN1c3RvbS5jcHAgKi8sCisJCQkJQTlDNkU2NDYwRDc0
NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJQTc2NkYz
NTIwRDZCREUzNTAwQUJEREIzIC8qIEpTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgKi8sCiAJ
CQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAgKi8sCiAJCQkJ
MUE5RUY0NTYwQTFCOTU3RDAwMzMyQjYzIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcCAqLywKQEAgLTExNTk2LDYgKzExNjgxLDggQEAKIAkJQkM5ODU0NDMwQ0QzRDlEMDAw
MDY5QkMxIC8qIFdpbmRvdyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJQTlEMjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCAqLywK
KwkJCQlBOUQyNDdGNjBENzU3RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCAqLywKIAkJCQlC
QzVBODZCMzBDMzM2N0U4MDBFRUE2NDkgLyogSlNET01TZWxlY3Rpb24uY3BwICovLAogCQkJCUJD
NUE4NkI0MEMzMzY3RTgwMEVFQTY0OSAvKiBKU0RPTVNlbGVjdGlvbi5oICovLAogCQkJCTE0MDNC
QTBCMDlFQjE4QzcwMDc5N0M3RiAvKiBKU0RPTVdpbmRvdy5jcHAgKi8sCkBAIC0xMzc0Niw3ICsx
MzgzMyw2IEBACiAJCQkJQkMzRkNBQTkwQUMzREI1ODAwQkE1NEFEIC8qIFBsYXRmb3JtU2Nyb2xs
QmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEyQjBEMDA2QzFEMDBFRjZGMjYgLyogUGxh
dGZvcm1TdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzZCMDlBQzRENEYwMEE2QUFC
NCAvKiBQbGF0Zm9ybVdoZWVsRXZlbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTY1RDFDMUNBMDk5
MzJCMjIwMDBDQjMyNCAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzY5NEM4MEEz
QjE2NzYwMDNGNTA0OSAvKiBQbHVnaW5Eb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJC
MUY3MTcwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDY2OEUxOEIwQUREOTYyNDAwNDEyOEUwIC8qIFBvcHVwTWVudS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xNDE4MSw3ICsxNDI2Nyw2IEBACiAJCQkJOTNCNzBENkEwOUVCMEM3QzAw
OUQ4NDY4IC8qIGtqc19ldmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MUYzMDlEMTUw
OEQwMDBFNjFENyAvKiBranNfZXZlbnRzLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNCNzBE
NkMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0I3
MEQ2RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjU2NTgxRjUwOUQxNTA4RDAwMEU2MUQ3IC8qIGtqc19uYXZpZ2F0b3IubHV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0I3MEQ3MDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0I3MEQ3NjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3dpbmRvdy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0xNDI0Nyw2ICsxNDMzMiwxNyBAQAogCQkJCUE3Nzk3OTFBMEQ2
QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Nzk3OTI3
MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0NhbnZhc1BpeGVsQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTlDNkU0RTQwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBOUM2RTRFODBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RUMwRDc0NUUyQjAwNjQ0MkU5IC8qIFBsdWdpbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RjAwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5
LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUM2RTRGNDBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2lu
RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlDNkU1QTYwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5h
dmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlEMjQ3RjgwRDc1N0UzNDAwRkRGOTU5IC8q
IEpTTmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUQyNDdGRjBENzU3RTY5MDBGREY5
NTkgLyogSlNQbHVnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RDI0ODAxMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU1BsdWdpbkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUQyNDgwNzBENzU3
RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlEMjQ4MDkw
RDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0x
NTM2Myw3ICsxNTQ1OSw2IEBACiAJCQkJOTM1QzQ3NzEwOUFDNEQ3MzAwQTZBQUI0IC8qIFBsYXRm
b3JtTW91c2VFdmVudE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTA4MEMyNzRGODgw
MDZCQzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5
QURDMDgyNDVFNTkwMDFFOUFCQyAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCUE4MjM5OEE4MDlCM0FDRjUwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmVNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUM2OTRDNzBBM0IxNjc2MDAzRjUwNDkgLyogUGx1Z2lu
RG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJCMUY3MTYwRDAwQ0FBODAwNEFFQTY0
IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNjY4RTE5
MDBBREQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0x
NTc5MSw3ICsxNTg4Niw2IEBACiAJCQkJOTNCNzBENjcwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19k
b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENjkwOUVCMEM3QzAwOUQ4NDY4IC8qIGtq
c19ldmVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENkIwOUVCMEM3QzAwOUQ4NDY4
IC8qIGtqc19odG1sLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzQjcwRDZEMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfbmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzQjcwRDZGMDlF
QjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBE
NzUwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc193aW5kb3cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNCMTZDMkMwOTc5QzNCRDAwNDY3NzQxIC8qIGxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTE1ODQyLDYgKzE1OTM2LDIyIEBACiAJCQkJQTc3OTc5MjYwRDZCOUU2NDAwMzg1MUI5IC8qIEpT
Q2FudmFzUGl4ZWxBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzc5NzkyODBENkI5RTY0
MDAzODUxQjkgLyogSlNJbWFnZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc2NkYzNTMw
RDZCREUzNTAwQUJEREIzIC8qIEpTQ2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBOUM2RTRFMzBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTlDNkU0RTcwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RUIwRDc0NUUyQjAwNjQ0MkU5IC8qIFBsdWdp
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTRFRjBENzQ1RTM4MDA2NDQyRTkgLyogUGx1
Z2luQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RjMwRDc0NUU0ODAwNjQ0MkU5
IC8qIFBsdWdpbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RjYwRDc0NUU2MTAw
NjQ0MkU5IC8qIFBsdWdpbkRhdGFNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTVBNTBE
NzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZF
NjQ3MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTlDNkU2NDkwRDc0NjVEODAwNjQ0MkU5IC8qIEpTTmF2aWdhdG9yQ3VzdG9t
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNjRDMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1Bs
dWdpbkFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNjREMEQ3NDY1RTcw
MDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUQyNDdG
NzBENzU3RTM0MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTlEMjQ3RkUwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUE5RDI0ODAwMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUE5RDI0ODA2MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUE5RDI0ODA4MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBl
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWltZVR5
cGVBcnJheUN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Rh
Mzg4MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFy
cmF5Q3VzdG9tLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
OCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworYm9vbCBKU01pbWVUeXBlQXJyYXk6
OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBNaW1lVHlwZUFycmF5KiBtaW1lVHlwZUFy
cmF5LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIG1pbWVU
eXBlQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVl
KiBKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
b3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJv
cGVydHlTbG90JiBzbG90KQoreworICAgIEpTTWltZVR5cGVBcnJheSogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PEpTTWltZVR5cGVBcnJheSo+KHNsb3Quc2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRv
SlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQor
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTBmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcApAQCAtMCwwICsxLDExNSBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
KyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTTmF2aWdhdG9yLmgiCisKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIk5hdmlnYXRvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBLSlM7CisKK3N0YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1l
Kik7CisKKyNpZiAhUExBVEZPUk0oV0lOKQorCitzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNZb3VU
dWJlUXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
I2Vsc2UKKworc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiBleGVjLCBG
cmFtZSogZnJhbWUpCit7CisgICAgLy8gVGhpcyBxdWlyayB3b3JrcyBhcm91bmQgYSBtaXN0YWtl
biBjaGVjayBpbiBhbiBhZCBhdCB5b3V0dWJlLmNvbS4KKyAgICAvLyBUaGVyZSdzIGEgZnVuY3Rp
b24gY2FsbGVkIGlzU2FmYXJpIHRoYXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZnVuY3Rpb24KKyAg
ICAvLyBjYWxsZWQgaXNXaW5kb3dzIHJldHVybnMgdHJ1ZTsgdGh1cyB0aGUgc2l0ZSBtYWxmdW5j
dGlvbnMgd2l0aCBXaW5kb3dzIFNhZmFyaS4KKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlm
IHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgImlzV2luZG93cyIuCisgICAgRnVuY3Rpb25JbXAqIGZ1
bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBpZiAoIWZ1bmN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXImIGlzV2luZG93c0Z1bmN0
aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNXaW5kb3dzIik7CisgICAgaWYgKGZ1bmN0aW9u
LT5mdW5jdGlvbk5hbWUoKSAhPSBpc1dpbmRvd3NGdW5jdGlvbk5hbWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbiBpcyBj
YWxsZWQgYnkgYW4gImlzU2FmYXJpIiBmdW5jdGlvbi4KKyAgICAvLyBIb3dldmVyLCB0aGF0IGZ1
bmN0aW9uIGlzIG5vdCBpdHNlbGYgbmFtZWQgLS0gaXQgaXMgc3RvcmVkIGluIHRoZSBpc1NhZmFy
aQorICAgIC8vIHByb3BlcnR5LCB0aG91Z2gsIHNvIHRoYXQncyBob3cgd2UgcmVjb2duaXplIGl0
LgorICAgIEV4ZWNTdGF0ZSogY2FsbGluZ0V4ZWMgPSBleGVjLT5jYWxsaW5nRXhlY1N0YXRlKCk7
CisgICAgaWYgKCFjYWxsaW5nRXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEZ1bmN0
aW9uSW1wKiBjYWxsaW5nRnVuY3Rpb24gPSBjYWxsaW5nRXhlYy0+ZnVuY3Rpb24oKTsKKyAgICBp
ZiAoIWNhbGxpbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEpTT2JqZWN0
KiB0aGlzT2JqZWN0ID0gY2FsbGluZ0V4ZWMtPnRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc09i
amVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVy
JiBpc1NhZmFyaUZ1bmN0aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNTYWZhcmkiKTsKKyAg
ICBKU1ZhbHVlKiBpc1NhZmFyaUZ1bmN0aW9uID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGlzU2Fm
YXJpRnVuY3Rpb25OYW1lKTsKKyAgICBpZiAoaXNTYWZhcmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVu
Y3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgIC8vIEZJWE1FOiBUaGUgZG9jdW1lbnQgaXMgbmV2ZXIg
bnVsbCwgc28gd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGNoZWNrIGFsb25nIHdpdGggdGhlCisgICAg
Ly8gb3RoZXIgc2ltaWxhciBvbmVzIGluIHRoaXMgZmlsZSB3aGVuIHdlIGFyZSBhYnNvbHV0ZWx5
IHN1cmUgaXQncyBzYWZlLgorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIC8vIERvIHRoZSBxdWlyayBvbmx5IG9uIHRoZSBmcm9udCBwYWdlIG9mIHRoZSBn
bG9iYWwgdmVyc2lvbiBvZiBZb3VUdWJlLgorICAgIGNvbnN0IEtVUkwmIHVybCA9IGRvY3VtZW50
LT51cmwoKTsKKyAgICBpZiAodXJsLmhvc3QoKSAhPSAieW91dHViZS5jb20iICYmIHVybC5ob3N0
KCkgIT0gInd3dy55b3V0dWJlLmNvbSIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
dXJsLnBhdGgoKSAhPSAiLyIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFzIHdp
dGggb3RoZXIgc2l0ZS1zcGVjaWZpYyBxdWlya3MsIGFsbG93IHdlYnNpdGUgZGV2ZWxvcGVycyB0
byB0dXJuIHRoaXMgb2ZmLgorICAgIC8vIEluIHRoZW9yeSwgdGhpcyBhbGxvd3Mgd2Vic2l0ZSBk
ZXZlbG9wZXJzIHRvIGNoZWNrIGlmIHRoZWlyIGZpeGVzIGFyZSBlZmZlY3RpdmUuCisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCisjZW5kaWYKKworSlNWYWx1ZSogSlNOYXZpZ2F0b3I6OmFwcFZlcnNpb24oRXhlY1N0YXRl
KiBleGVjKSBjb25zdAoreworICAgIE5hdmlnYXRvciogaW1wID0gc3RhdGljX2Nhc3Q8TmF2aWdh
dG9yKj4oaW1wbCgpKTsKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKworICAgIGlmIChuZWVkc1lv
dVR1YmVRdWlyayhleGVjLCBmcmFtZSkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygiIik7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nKGltcC0+YXBwVmVyc2lvbigpKTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDdhZTRkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUGx1Z2luQXJyYXkuaCIK
KworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworYm9vbCBKU1Bs
dWdpbkFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgUGx1Z2luQXJyYXkqIHBs
dWdpbkFycmF5LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJu
IHBsdWdpbkFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUocHJvcGVydHlOYW1lKTsKK30KKworSlNW
YWx1ZSogSlNQbHVnaW5BcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNQbHVnaW5BcnJheSogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PEpTUGx1Z2luQXJyYXkqPihzbG90LnNsb3RCYXNlKCkpOworICAgIHJldHVybiB0b0pT
KGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUpKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lNzA3OWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkN1c3RvbS5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUGx1Z2luLmgiCisKKyNpbmNs
dWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCitib29sIEpTUGx1Z2luOjpjYW5HZXRJ
dGVtc0Zvck5hbWUoRXhlY1N0YXRlKiwgUGx1Z2luKiBwbHVnaW4sIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luLT5jYW5HZXRJdGVtc0Zvck5hbWUo
cHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSogSlNQbHVnaW46Om5hbWVHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEpTUGx1Z2luKiB0
aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOworICAgIHJl
dHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZUdldHRlcihwcm9wZXJ0eU5hbWUp
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9y
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZlOWZiYmQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfbmF2aWdhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDYyMCArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9y
ZykKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2Rl
Lm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImtqc19uYXZpZ2F0b3Iu
aCIKLQotI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgot
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkxhbmd1YWdlLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgotI2luY2x1
ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAia2pzX3dpbmRvdy5oIgotI2luY2x1ZGUgPGtqcy9v
YmplY3Rfb2JqZWN0Lmg+Ci0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KLSNp
ZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFBQQykKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FU
T1JfUExBVEZPUk0gIk1hY1BQQyIKLSNlbGlmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2
KQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiTWFjSW50ZWwiCi0jZWxpZiBQ
TEFURk9STShXSU5fT1MpCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4z
MiIKLSNlbHNlCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICIiCi0jZW5kaWYK
LSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KLQotI2lmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RV
Q1QgIkdlY2tvIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0K
LSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIKLSNkZWZpbmUgV0VCQ09SRV9O
QVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3IgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9QUk9EVUNUX1NVQgotCi0jaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRP
UgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMu
IgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKLQotI2lmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZF
TkRPUl9TVUIgIiIKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NV
QgotCi11c2luZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBsdWdpbkJhc2UgOiBwdWJsaWMgRE9NT2Jq
ZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkJhc2UoRXhlY1N0YXRlKik7Ci0gICAg
ICAgIHZpcnR1YWwgflBsdWdpbkJhc2UoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lk
IHJlZnJlc2goYm9vbCByZWxvYWQpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBzdGF0aWMg
dm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBzdGF0aWMgVmVjdG9y
PFBsdWdpbkluZm8qPiogcGx1Z2luczsKLSAgICAgICAgc3RhdGljIFZlY3RvcjxNaW1lQ2xhc3NJ
bmZvKj4qIG1pbWVzOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIGludCBtX3BsdWdJ
bkNhY2hlUmVmQ291bnQ7Ci0gICAgfTsKLQotCi0gICAgY2xhc3MgUGx1Z2lucyA6IHB1YmxpYyBQ
bHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbnMoRXhlY1N0YXRlKiBleGVj
KSA6IFBsdWdpbkJhc2UoZXhlYykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwot
ICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87
Ci0gICAgICAgIGVudW0geyBMZW5ndGggfTsKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMg
SlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFBy
b3BlcnR5U2xvdCYpOwotICAgIH07Ci0KLSAgICBKU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZy
ZXNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwotCi0gICAgY2xhc3MgTWlt
ZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgTWltZVR5
cGVzKEV4ZWNTdGF0ZSogZXhlYykgOiBQbHVnaW5CYXNlKGV4ZWMpIHsgfTsKLSAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhl
Y1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7IExlbmd0aCB9OwotICAgIHByaXZh
dGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAg
c3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgfTsKLQotICAgIGNsYXNzIFBs
dWdpbiA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbihF
eGVjU3RhdGUqIGV4ZWMsIFBsdWdpbkluZm8qIGluZm8pIDogUGx1Z2luQmFzZShleGVjKSwgbV9p
bmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNW
YWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBl
bnVtIHsgTmFtZSwgRmlsZW5hbWUsIERlc2NyaXB0aW9uLCBMZW5ndGggfTsKLSAgICBwcml2YXRl
OgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIHN0
YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotCi0gICAgICAgIFBsdWdpbkluZm8qIG1f
aW5mbzsKLSAgICB9OwotCi0gICAgY2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgUGx1Z2luQmFzZSB7
Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZShFeGVjU3RhdGUqIGV4ZWMsIE1pbWVDbGFz
c0luZm8qIGluZm8pIDogUGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0
eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3Rh
dGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgVHlwZSwgU3VmZml4ZXMs
IERlc2NyaXB0aW9uLCBFbmFibGVkUGx1Z2luIH07Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgTWlt
ZUNsYXNzSW5mbyogbV9pbmZvOwotICAgIH07Ci0KLX0KLQotI2luY2x1ZGUgImtqc19uYXZpZ2F0
b3IubHV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY29uc3QgQ2xhc3NJbmZvIFBsdWdp
bnM6OmluZm8gPSB7ICJQbHVnaW5BcnJheSIsIDAsICZQbHVnaW5zVGFibGUgfTsKLWNvbnN0IENs
YXNzSW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlwZUFycmF5IiwgMCwgJk1pbWVUeXBl
c1RhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gUGx1Z2luOjppbmZvID0geyAiUGx1Z2luIiwgMCwg
JlBsdWdpblRhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gTWltZVR5cGU6OmluZm8gPSB7ICJNaW1l
VHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlIH07Ci0KLVZlY3RvcjxQbHVnaW5JbmZvKj4qIFBsdWdp
bkJhc2U6OnBsdWdpbnMgPSAwOwotVmVjdG9yPE1pbWVDbGFzc0luZm8qPiogUGx1Z2luQmFzZTo6
bWltZXMgPSAwOwotaW50IFBsdWdpbkJhc2U6Om1fcGx1Z0luQ2FjaGVSZWZDb3VudCA9IDA7Ci0K
LWNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7ICJOYXZpZ2F0b3IiLCAwLCAmTmF2
aWdhdG9yVGFibGUgfTsKLS8qCi1AYmVnaW4gTmF2aWdhdG9yVGFibGUgMTMKLSAgYXBwQ29kZU5h
bWUgICBOYXZpZ2F0b3I6OkFwcENvZGVOYW1lICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxS
ZWFkT25seQotICBhcHBOYW1lICAgICAgIE5hdmlnYXRvcjo6QXBwTmFtZSAgICAgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcFZlcnNpb24gICAgTmF2aWdhdG9yOjpB
cHBWZXJzaW9uICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbGFuZ3Vh
Z2UgICAgICBOYXZpZ2F0b3I6Okxhbmd1YWdlICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0
ZXxSZWFkT25seQotICB1c2VyQWdlbnQgICAgIE5hdmlnYXRvcjo6VXNlckFnZW50ICAgICAgICAg
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHBsYXRmb3JtICAgICAgTmF2aWdhdG9y
OjpQbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGx1
Z2lucyAgICAgICBOYXZpZ2F0b3I6Ol9QbHVnaW5zICAgICAgICAgICAgICAgICAgICAgRG9udERl
bGV0ZXxSZWFkT25seQotICBtaW1lVHlwZXMgICAgIE5hdmlnYXRvcjo6X01pbWVUeXBlcyAgICAg
ICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHByb2R1Y3QgICAgICAgTmF2aWdh
dG9yOjpQcm9kdWN0ICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAg
cHJvZHVjdFN1YiAgICBOYXZpZ2F0b3I6OlByb2R1Y3RTdWIgICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZXxSZWFkT25seQotICB2ZW5kb3IgICAgICAgIE5hdmlnYXRvcjo6VmVuZG9yICAgICAg
ICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHZlbmRvclN1YiAgICAgTmF2
aWdhdG9yOjpWZW5kb3JTdWIgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkK
LSAgY29va2llRW5hYmxlZCBOYXZpZ2F0b3I6OkNvb2tpZUVuYWJsZWQgICAgICAgICAgICAgICAg
RG9udERlbGV0ZXxSZWFkT25seQotICBqYXZhRW5hYmxlZCAgIG5hdmlnYXRvclByb3RvRnVuY0ph
dmFFbmFibGVkICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBlbmQKLSovCi0KLU5hdmlnYXRvcjo6
TmF2aWdhdG9yKEpTT2JqZWN0KiBwcm90b3R5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IERPTU9i
amVjdChwcm90b3R5cGUpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotfQotCi1ib29sIE5hdmln
YXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gIHJldHVybiBnZXRTdGF0
aWNQcm9wZXJ0eVNsb3Q8TmF2aWdhdG9yLCBKU09iamVjdD4oZXhlYywgJk5hdmlnYXRvclRhYmxl
LCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1zdGF0aWMgYm9vbCBuZWVkc1lvdVR1
YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopOwotCi0jaWYgIVBMQVRGT1JNKFdJTikKLQotc3Rh
dGljIGlubGluZSBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1lKikKLXsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBib29sIG5lZWRzWW91VHVi
ZVF1aXJrKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1lKQotewotICAgIC8vIFRoaXMgcXVp
cmsgd29ya3MgYXJvdW5kIGEgbWlzdGFrZW4gY2hlY2sgaW4gYW4gYWQgYXQgeW91dHViZS5jb20u
Ci0gICAgLy8gVGhlcmUncyBhIGZ1bmN0aW9uIGNhbGxlZCBpc1NhZmFyaSB0aGF0IHJldHVybnMg
ZmFsc2UgaWYgdGhlIGZ1bmN0aW9uCi0gICAgLy8gY2FsbGVkIGlzV2luZG93cyByZXR1cm5zIHRy
dWU7IHRodXMgdGhlIHNpdGUgbWFsZnVuY3Rpb25zIHdpdGggV2luZG93cyBTYWZhcmkuCi0KLSAg
ICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rpb24ncyBuYW1lIGlzICJpc1dpbmRv
d3MiLgotICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbiA9IGV4ZWMtPmZ1bmN0aW9uKCk7Ci0gICAg
aWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN0YXRpYyBjb25zdCBJ
ZGVudGlmaWVyJiBpc1dpbmRvd3NGdW5jdGlvbk5hbWUgPSAqbmV3IElkZW50aWZpZXIoImlzV2lu
ZG93cyIpOwotICAgIGlmIChmdW5jdGlvbi0+ZnVuY3Rpb25OYW1lKCkgIT0gaXNXaW5kb3dzRnVu
Y3Rpb25OYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEbyB0aGUgcXVpcmsg
b25seSBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGFuICJpc1NhZmFyaSIgZnVuY3Rpb24u
Ci0gICAgLy8gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBub3QgaXRzZWxmIG5hbWVkIC0tIGl0
IGlzIHN0b3JlZCBpbiB0aGUgaXNTYWZhcmkKLSAgICAvLyBwcm9wZXJ0eSwgdGhvdWdoLCBzbyB0
aGF0J3MgaG93IHdlIHJlY29nbml6ZSBpdC4KLSAgICBFeGVjU3RhdGUqIGNhbGxpbmdFeGVjID0g
ZXhlYy0+Y2FsbGluZ0V4ZWNTdGF0ZSgpOwotICAgIGlmICghY2FsbGluZ0V4ZWMpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBGdW5jdGlvbkltcCogY2FsbGluZ0Z1bmN0aW9uID0gY2FsbGlu
Z0V4ZWMtPmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFjYWxsaW5nRnVuY3Rpb24pCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGNhbGxpbmdFeGVjLT50aGlz
VmFsdWUoKTsKLSAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciYgaXNTYWZhcmlGdW5jdGlvbk5hbWUgPSAqbmV3IElk
ZW50aWZpZXIoImlzU2FmYXJpIik7Ci0gICAgSlNWYWx1ZSogaXNTYWZhcmlGdW5jdGlvbiA9IHRo
aXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9uTmFtZSk7Ci0gICAgaWYgKGlzU2Fm
YXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsgCi0gICAgLy8gRklY
TUU6IFRoZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMg
Y2hlY2sgYWxvbmcgd2l0aCB0aGUKLSAgICAvLyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhpcyBm
aWxlIHdoZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdzIHNhZmUuCi0gICAgaWYgKCFkb2N1
bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkg
b24gdGhlIGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCi0gICAg
Y29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOwotICAgIGlmICh1cmwuaG9zdCgpICE9
ICJ5b3V0dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3LnlvdXR1YmUuY29tIikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh1cmwucGF0aCgpICE9ICIvIikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gQXMgd2l0aCBvdGhlciBzaXRlLXNwZWNpZmljIHF1aXJrcywg
YWxsb3cgd2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhpcyBvZmYuCi0gICAgLy8gSW4gdGhl
b3J5LCB0aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gY2hlY2sgaWYgdGhlaXIgZml4
ZXMgYXJlIGVmZmVjdGl2ZS4KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGlu
Z3MoKTsgCi0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKLQotSlNWYWx1ZSogTmF2aWdh
dG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAot
ewotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgQXBwQ29kZU5hbWU6Ci0gICAgcmV0dXJuIGpz
U3RyaW5nKCJNb3ppbGxhIik7Ci0gIGNhc2UgQXBwTmFtZToKLSAgICByZXR1cm4ganNTdHJpbmco
Ik5ldHNjYXBlIik7Ci0gIGNhc2UgQXBwVmVyc2lvbjogewotICAgIGlmIChuZWVkc1lvdVR1YmVR
dWlyayhleGVjLCBtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKLSAgICAv
LyBWZXJzaW9uIGlzIGV2ZXJ5dGhpbmcgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhl
ICJNb3ppbGxhLyIgcHJlZml4LgotICAgIGNvbnN0IFN0cmluZyB1c2VyQWdlbnQgPSBtX2ZyYW1l
LT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKHVzZXJBZ2VudC5z
dWJzdHJpbmcodXNlckFnZW50LmZpbmQoJy8nKSArIDEpKTsKLSAgfQotICBjYXNlIFByb2R1Y3Q6
Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QpOwotICBjYXNl
IFByb2R1Y3RTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1BST0RV
Q1RfU1VCKTsKLSAgY2FzZSBWZW5kb3I6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFW
SUdBVE9SX1ZFTkRPUik7Ci0gIGNhc2UgVmVuZG9yU3ViOgotICAgIHJldHVybiBqc1N0cmluZyhX
RUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCKTsKLSAgY2FzZSBMYW5ndWFnZToKLSAgICByZXR1
cm4ganNTdHJpbmcoZGVmYXVsdExhbmd1YWdlKCkpOwotICBjYXNlIFVzZXJBZ2VudDoKLSAgICBy
ZXR1cm4ganNTdHJpbmcobV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1
bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpKTsKLSAgY2FzZSBQ
bGF0Zm9ybToKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0p
OwotICBjYXNlIF9QbHVnaW5zOgotICAgIHJldHVybiBuZXcgUGx1Z2lucyhleGVjKTsKLSAgY2Fz
ZSBfTWltZVR5cGVzOgotICAgIHJldHVybiBuZXcgTWltZVR5cGVzKGV4ZWMpOwotICBjYXNlIENv
b2tpZUVuYWJsZWQ6Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihjb29raWVzRW5hYmxlZChtX2ZyYW1l
LT5kb2N1bWVudCgpKSk7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi12
b2lkIFBsdWdpbkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAo
IXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBWZWN0b3I8UGx1Z2luSW5mbyo+Owot
ICAgICAgICBtaW1lcyA9IG5ldyBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OwotICAgICAgICAKLSAg
ICAgICAgLy8gcmVhZCBjb25maWd1cmF0aW9uCi0gICAgICAgIFBsdWdpbkluZm9TdG9yZSBjOwot
ICAgICAgICB1bnNpZ25lZCBwbHVnaW5Db3VudCA9IGMucGx1Z2luQ291bnQoKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBsdWdpbkNvdW50OyBuKyspIHsKLSAgICAgICAgICAg
IFBsdWdpbkluZm8qIHBsdWdpbiA9IGMuY3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgo
bik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbikgCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBsdWdpbnMtPmFwcGVuZChwbHVnaW4pOwotICAg
ICAgICAgICAgaWYgKHBsdWdpbi0+bWltZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+
OjppdGVyYXRvciBlbmQgPSBwbHVnaW4tPm1pbWVzLmVuZCgpOwotICAgICAgICAgICAgZm9yIChW
ZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIgPSBwbHVnaW4tPm1pbWVzLmJlZ2lu
KCk7IGl0ciAhPSBlbmQ7IGl0cisrKQotICAgICAgICAgICAgICAgIG1pbWVzLT5hcHBlbmQoKml0
cik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBsdWdpbkJhc2U6OlBsdWdpbkJhc2UoRXhlY1N0
YXRlKiBleGVjKQotICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
b2JqZWN0UHJvdG90eXBlKCkpCi17Ci0gICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKTsK
LSAgICBtX3BsdWdJbkNhY2hlUmVmQ291bnQrKzsKLX0KLQotUGx1Z2luQmFzZTo6flBsdWdpbkJh
c2UoKQotewotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudC0tOwotICAgIGlmICghbV9wbHVnSW5D
YWNoZVJlZkNvdW50KSB7Ci0gICAgICAgIGlmIChwbHVnaW5zKSB7Ci0gICAgICAgICAgICBkZWxl
dGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAgICAgICAgZGVsZXRlIHBsdWdpbnM7Ci0gICAg
ICAgICAgICBwbHVnaW5zID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAobWltZXMpIHsKLSAg
ICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbWltZXMpOwotICAgICAgICAgICAgZGVsZXRlIG1p
bWVzOwotICAgICAgICAgICAgbWltZXMgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IFBsdWdpbkJhc2U6OnJlZnJlc2goYm9vbCByZWxvYWQpCi17Ci0gICAgaWYgKHBsdWdpbnMpIHsK
LSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpwbHVnaW5zKTsKLSAgICAgICAgZGVsZXRlIHBsdWdp
bnM7Ci0gICAgICAgIHBsdWdpbnMgPSAwOwotICAgIH0KLSAgICBpZiAobWltZXMpIHsKLSAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAgIGRlbGV0ZSBtaW1lczsKLSAgICAg
ICAgbWltZXMgPSAwOwotICAgIH0KLSAgICAKLSAgICByZWZyZXNoUGx1Z2lucyhyZWxvYWQpOwot
ICAgIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci19Ci0KLQotLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LS8qCi1AYmVnaW4gUGx1Z2luc1RhYmxlIDIKLSAgbGVuZ3RoICAgICAgICBQbHVnaW5zOjpMZW5n
dGggICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHJlZnJlc2gg
ICAgICAgcGx1Z2luc0Z1bmN0aW9uUmVmcmVzaCAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxG
dW5jdGlvbiAwCi1AZW5kCi0qLwotCi1KU1ZhbHVlKiBQbHVnaW5zOjpnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBBU1NFUlQodG9rZW4gPT0g
TGVuZ3RoKTsKLSAgcmV0dXJuIGpzTnVtYmVyKHBsdWdpbnMtPnNpemUoKSk7Ci19Ci0KLUpTVmFs
dWUqIFBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gbmV3IFBsdWdpbihleGVjLCBwbHVnaW5zLT5hdChz
bG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luczo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgQXRvbWljU3RyaW5n
IGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0b3I8UGx1Z2luSW5m
byo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW5zLT5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxQbHVn
aW5JbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0
cisrKSB7Ci0gICAgICAgIFBsdWdpbkluZm8qIHBsID0gKml0cjsKLSAgICAgICAgaWYgKHBsLT5u
YW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGx1Z2lu
KGV4ZWMsIHBsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wg
UGx1Z2luczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFz
aEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVnaW5zVGFibGUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlv
bikKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljRnVuY3Rp
b25HZXR0ZXIpOwotICAgICAgZWxzZQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMs
IGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxQbHVnaW5zPik7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBwbHVnaW5zWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAg
ICAgIGlmIChvayAmJiBpIDwgcGx1Z2lucy0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICBzbG90LnNl
dEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1Z2luW25hbWVdCi0gICAgICAgIEF0b21p
Y1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgIFZlY3Rv
cjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVuZCgpOwotICAgICAgICBm
b3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJlZ2luKCk7
IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT5uYW1lID09IGF0
b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMs
IG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3Bl
cnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyoKLUBiZWdpbiBNaW1lVHlwZXNUYWJsZSAxCi0gIGxlbmd0aCAgICAgICAgTWltZVR5cGVzOjpM
ZW5ndGggICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotQGVuZAotKi8KLQotSlNWYWx1ZSogTWlt
ZVR5cGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAotewotICBBU1NFUlQodG9rZW4gPT0gTGVuZ3RoKTsKLSAgcmV0dXJuIGpzTnVtYmVyKG1pbWVz
LT5zaXplKCkpOwotfQotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gbmV3IE1p
bWVUeXBlKGV4ZWMsIG1pbWVzLT5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogTWlt
ZVR5cGVzOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2Jq
ZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYg
c2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlO
YW1lOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IG1pbWVzLT5l
bmQoKTsKLSAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1p
bWVzLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZv
KiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0pOwotICAgIH0KLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBNaW1lVHlwZXM6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSgmTWltZVR5cGVzVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5
KSB7Ci0gICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1ZUdl
dHRlcjxNaW1lVHlwZXM+KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIG1pbWVUeXBlc1sjXQotICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBp
bnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8
IG1pbWVzLT5zaXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tSW5kZXgodGhpcywg
aSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBtaW1lVHlwZXNbbmFtZV0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1By
b3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8q
Pjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBp
dHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5h
bWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotQGJl
Z2luIFBsdWdpblRhYmxlIDQKLSAgbmFtZSAgICAgICAgICBQbHVnaW46Ok5hbWUgICAgICAgICAg
ICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGZpbGVuYW1lICAgICAgUGx1Z2luOjpGaWxlbmFtZSAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBkZXNjcmlwdGlvbiAgIFBsdWdpbjo6RGVzY3Jp
cHRpb24gICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbGVuZ3RoICAgICAgICBQbHVnaW46Okxl
bmd0aCAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlKiBQ
bHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTmFtZToKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKG1faW5mby0+bmFtZSk7Ci0gICAgY2FzZSBGaWxlbmFtZToKLSAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKG1faW5mby0+ZmlsZSk7Ci0gICAgY2FzZSBEZXNjcmlwdGlvbjoKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZGVzYyk7Ci0gICAgY2FzZSBMZW5ndGg6IAotICAg
ICAgICByZXR1cm4ganNOdW1iZXIobV9pbmZvLT5taW1lcy5zaXplKCkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotfQotCi1KU1ZhbHVlKiBQbHVnaW46OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOwotICAgIHJldHVybiBuZXcgTWltZVR5cGUo
ZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1lcy5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNW
YWx1ZSogUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdp
bmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4q
PihzbG90LnNsb3RCYXNlKCkpOwotICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5k
ID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHRoaXNPYmotPm1faW5mby0+bWltZXMuYmVnaW4oKTsg
aXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgTWltZUNsYXNzSW5mbyogbSA9ICgqaXRyKTsK
LSAgICAgICAgaWYgKG0tPnR5cGUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci19Ci0KLQotYm9vbCBQbHVnaW46OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmUGx1
Z2luVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIHNsb3Qu
c2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBsdWdpbj4pOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBwbHVnaW5bI10K
LSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUu
dG9VSW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkgPCBtX2luZm8tPm1pbWVzLnNpemUo
KSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBpLCBpbmRleEdldHRl
cik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHBs
dWdpblsibmFtZSJdCi0gICAgICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBw
cm9wZXJ0eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGVu
ZCA9IG1faW5mby0+bWltZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPjo6aXRlcmF0b3IgaXRyID0gbV9pbmZvLT5taW1lcy5iZWdpbigpOyBpdHIgIT0gZW5kOyBp
dHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5h
bWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzLCBuYW1lR2V0dGVyKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgot
QGJlZ2luIE1pbWVUeXBlVGFibGUgNAotICB0eXBlICAgICAgICAgIE1pbWVUeXBlOjpUeXBlICAg
ICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3VmZml4ZXMgICAgICBNaW1lVHlwZTo6U3Vm
Zml4ZXMgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRlc2NyaXB0aW9uICAgTWltZVR5cGU6
OkRlc2NyaXB0aW9uICAgRG9udERlbGV0ZXxSZWFkT25seQotICBlbmFibGVkUGx1Z2luIE1pbWVU
eXBlOjpFbmFibGVkUGx1Z2luIERvbnREZWxldGV8UmVhZE9ubHkKLUBlbmQKLSovCi0KLUpTVmFs
dWUqIE1pbWVUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFR5cGU6Ci0gICAgICAg
IHJldHVybiBqc1N0cmluZyhtX2luZm8tPnR5cGUpOwotICAgIGNhc2UgU3VmZml4ZXM6Ci0gICAg
ICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnN1ZmZpeGVzKTsKLSAgICBjYXNlIERlc2NyaXB0
aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5kZXNjKTsKLSAgICBjYXNlIEVu
YWJsZWRQbHVnaW46IHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gV2luZG93OjpyZXRyaWV2ZUFj
dGl2ZShleGVjKS0+aW1wbCgpLT5mcmFtZSgpOwotICAgICAgICBBU1NFUlQoZnJhbWUpOwotICAg
ICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKLSAgICAgICAgaWYg
KHNldHRpbmdzICYmIHNldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQotICAgICAgICAgICAg
cmV0dXJuIG5ldyBQbHVnaW4oZXhlYywgbV9pbmZvLT5wbHVnaW4pOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1ib29sIE1pbWVUeXBlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gZ2V0U3RhdGljVmFs
dWVTbG90PE1pbWVUeXBlLCBQbHVnaW5CYXNlPihleGVjLCAmTWltZVR5cGVUYWJsZSwgdGhpcywg
cHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotSlNWYWx1ZSogcGx1Z2luc0Z1bmN0aW9uUmVmcmVz
aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBQ
bHVnaW5CYXNlOjpyZWZyZXNoKGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKSk7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIG5hdmlnYXRvclByb3RvRnVuY0phdmFFbmFi
bGVkKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQotewot
ICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk5hdmlnYXRvcjo6aW5mbykpCi0gICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgTmF2aWdhdG9yKiBuYXYgPSBz
dGF0aWNfY2FzdDxOYXZpZ2F0b3IqPih0aGlzT2JqKTsKLSAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBuYXYtPmZyYW1lKCkgPyBuYXYtPmZyYW1lKCktPnNldHRpbmdzKCkgOiAwOwotICAgIHJldHVy
biBqc0Jvb2xlYW4oc2V0dGluZ3MgJiYgc2V0dGluZ3MtPmlzSmF2YUVuYWJsZWQoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZp
Z2F0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlMTZmN2VhLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2lmbmRlZiBranNfbmF2aWdhdG9yX2gKLSNk
ZWZpbmUga2pzX25hdmlnYXRvcl9oCi0KLSNpbmNsdWRlICJranNfYmluZGluZy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGcmFtZTsKLQotICAgIGNsYXNzIE5hdmlnYXRv
ciA6IHB1YmxpYyBET01PYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgTmF2aWdhdG9yKEtK
Uzo6SlNPYmplY3QqIHByb3RvdHlwZSwgRnJhbWUqKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEtKUzo6RXhlY1N0YXRlKiwgY29uc3QgS0pTOjpJZGVudGlmaWVy
JiwgS0pTOjpQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgS0pTOjpKU1ZhbHVlKiBnZXRWYWx1ZVBy
b3BlcnR5KEtKUzo6RXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCBjb25zdCBLSlM6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87
IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IEtKUzo6Q2xhc3NJbmZvIGluZm87Ci0KLSAgICAgICAg
ZW51bSB7IEFwcENvZGVOYW1lLCBBcHBOYW1lLCBBcHBWZXJzaW9uLCBMYW5ndWFnZSwgVXNlckFn
ZW50LCBQbGF0Zm9ybSwKLSAgICAgICAgICAgICAgIF9QbHVnaW5zLCBfTWltZVR5cGVzLCBQcm9k
dWN0LCBQcm9kdWN0U3ViLCBWZW5kb3IsIFZlbmRvclN1YiwgQ29va2llRW5hYmxlZCB9OwotCi0g
ICAgICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgIH07Ci0KLSAgICBLSlM6OkpTVmFs
dWUqIG5hdmlnYXRvclByb3RvRnVuY0phdmFFbmFibGVkKEtKUzo6RXhlY1N0YXRlKiwgS0pTOjpK
U09iamVjdCosIGNvbnN0IEtKUzo6TGlzdCYpOwotCi19IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCmluZGV4IDQyNTM0NmEuLjc2NjU0ZmEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfd2luZG93LmNwcApAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQYXVzZWRUaW1lb3V0cy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCkBAIC01OSw3ICs1OCw2IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJranNfY3NzLmgiCiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgotI2luY2x1ZGUgImtqc19u
YXZpZ2F0b3IuaCIKICNpbmNsdWRlICJranNfcHJveHkuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlz
SW5saW5lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE2NCw4ICsxNjIsNiBA
QCBjb25zdCBDbGFzc0luZm8gV2luZG93OjppbmZvID0geyAiV2luZG93IiwgMCwgJldpbmRvd1Rh
YmxlIH07CiAgIGNyeXB0byAgICAgICAgICAgICAgICBXaW5kb3c6OkNyeXB0byAgICAgICAgICAg
ICAgRG9udERlbGV0ZXxSZWFkT25seQogICBldmVudCAgICAgICAgICAgICAgICAgV2luZG93OjpF
dmVudF8gICAgICAgICAgICAgIERvbnREZWxldGUKICAgbG9jYXRpb24gICAgICAgICAgICAgIFdp
bmRvdzo6TG9jYXRpb25fICAgICAgICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAg
ICAgICBXaW5kb3c6Ok5hdmlnYXRvcl8gICAgICAgICAgRG9udERlbGV0ZQotICBjbGllbnRJbmZv
cm1hdGlvbiAgICAgV2luZG93OjpDbGllbnRJbmZvcm1hdGlvbiAgIERvbnREZWxldGUKICMgLS0g
RXZlbnQgTGlzdGVuZXJzIC0tCiAgIG9uYWJvcnQgICAgICAgICAgICAgICBXaW5kb3c6Ok9uYWJv
cnQgICAgICAgICAgICAgRG9udERlbGV0ZQogICBvbmJsdXIgICAgICAgICAgICAgICAgV2luZG93
OjpPbmJsdXIgICAgICAgICAgICAgIERvbnREZWxldGUKQEAgLTQ4MCwxOCArNDc2LDYgQEAgSlNW
YWx1ZSAqV2luZG93OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAogICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZC0+bV9ldnQpOwogICAgIGNhc2UgTG9j
YXRpb25fOgogICAgICAgcmV0dXJuIGxvY2F0aW9uKCk7Ci0gICAgY2FzZSBOYXZpZ2F0b3JfOgot
ICAgIGNhc2UgQ2xpZW50SW5mb3JtYXRpb246IHsKLSAgICAgIGlmICghYWxsb3dzQWNjZXNzRnJv
bShleGVjKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAvLyBTdG9yZSB0
aGUgbmF2aWdhdG9yIGluIHRoZSBvYmplY3Qgc28gd2UgZ2V0IHRoZSBzYW1lIG9uZSBlYWNoIHRp
bWUuCi0gICAgICBOYXZpZ2F0b3IqIG4gPSBuZXcgTmF2aWdhdG9yKGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCksIGltcGwoKS0+ZnJhbWUoKSk7Ci0gICAgICAv
LyBGSVhNRTogdGhpcyB3aWxsIG1ha2UgdGhlICJuYXZpZ2F0b3IiIG9iamVjdCBhY2Nlc3NpYmxl
IGZyb20gd2luZG93cyB0aGF0IGZhaWwKLSAgICAgIC8vIHRoZSBzZWN1cml0eSBjaGVjayB0aGUg
Zmlyc3QgdGltZSwgYnV0IG5vdCBzdWJzZXF1ZW50IHRpbWVzLCBzZWVtcyB3ZWlyZC4KLSAgICAg
IGNvbnN0X2Nhc3Q8V2luZG93ICo+KHRoaXMpLT5wdXREaXJlY3QoIm5hdmlnYXRvciIsIG4sIERv
bnREZWxldGUpOwotICAgICAgY29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgi
Y2xpZW50SW5mb3JtYXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAgIHJldHVybiBuOwotICAg
IH0KICAgICBjYXNlIEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYnJpZGdl
L3dpbi9GcmFtZVdpbi5jcHAgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCmluZGV4
IDY1OTlhODguLjY2NjY0ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdp
bi5jcHAKKysrIGIvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2luLmNwcApAQCAtNDQsNyArNDQs
NiBAQAogI2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiUGx1
Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiUmVndWxh
ckV4cHJlc3Npb24uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IDRjODA4ZDEuLjEzYjgxNWEgMTAwNzU1Ci0t
LSBhL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIvV2ViQ29yZS9kb20vQ2xpcGJvYXJk
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9y
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0RP
TUltcGxlbWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcApp
bmRleCBkYjI3N2Q1Li4zZTFkNGY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9ET01JbXBsZW1l
bnRhdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCkBAIC0z
OCw4ICszOCw4IEBACiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAj
aW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIK
ICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiVGV4dERvY3VtZW50LmgiCkBAIC0zNjYsMTYgKzM2NiwyMCBAQCBQYXNzUmVmUHRy
PERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQoY29uc3QgU3RyaW5n
JiB0eXBlLCBGcmFtZQogICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3VtZW50KHRo
aXMsIGZyYW1lKTsKICNlbmRpZgogCisgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSA9IDA7Cisg
ICAgaWYgKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBsdWdpbkRhdGEgPSBmcmFt
ZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCk7CisKICAgICAvLyBQREYgaXMgb25lIGltYWdlIHR5cGUg
Zm9yIHdoaWNoIGEgcGx1Z2luIGNhbiBvdmVycmlkZSBidWlsdC1pbiBzdXBwb3J0LgogICAgIC8v
IFdlIGRvIG5vdCB3YW50IFF1aWNrVGltZSB0byB0YWtlIG92ZXIgYWxsIGltYWdlIHR5cGVzLCBv
YnZpb3VzbHkuCi0gICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0g
InRleHQvcGRmIikgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKHR5cGUpKQor
ICAgIGlmICgodHlwZSA9PSAiYXBwbGljYXRpb24vcGRmIiB8fCB0eXBlID09ICJ0ZXh0L3BkZiIp
ICYmIHBsdWdpbkRhdGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkKICAg
ICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgaWYgKElt
YWdlOjpzdXBwb3J0c1R5cGUodHlwZSkpCiAgICAgICAgIHJldHVybiBuZXcgSW1hZ2VEb2N1bWVu
dCh0aGlzLCBmcmFtZSk7CiAgICAgLy8gRXZlcnl0aGluZyBlbHNlIGV4Y2VwdCB0ZXh0L3BsYWlu
IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBsdWdpbnMuIEluIHBhcnRpY3VsYXIsIEFkb2JlIFNWRyBW
aWV3ZXIgc2hvdWxkIGJlIHVzZWQgZm9yIFNWRywgaWYgaW5zdGFsbGVkLgogICAgIC8vIERpc2Fs
bG93aW5nIHBsdWctaW5zIHRvIHVzZSB0ZXh0L3BsYWluIHByZXZlbnRzIHBsdWctaW5zIGZyb20g
aGlqYWNraW5nIGEgZnVuZGFtZW50YWwgdHlwZSB0aGF0IHRoZSBicm93c2VyIGlzIGV4cGVjdGVk
IHRvIGhhbmRsZSwKICAgICAvLyBhbmQgYWxzbyBzZXJ2ZXMgYXMgYW4gb3B0aW1pemF0aW9uIHRv
IHByZXZlbnQgbG9hZGluZyB0aGUgcGx1Zy1pbiBkYXRhYmFzZSBpbiB0aGUgY29tbW9uIGNhc2Uu
Ci0gICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9y
dHNNSU1FVHlwZSh0eXBlKSkgCisgICAgaWYgKHR5cGUgIT0gInRleHQvcGxhaW4iICYmIHBsdWdp
bkRhdGEgJiYgcGx1Z2luRGF0YS0+c3VwcG9ydHNNaW1lVHlwZSh0eXBlKSkgCiAgICAgICAgIHJl
dHVybiBuZXcgUGx1Z2luRG9jdW1lbnQodGhpcywgZnJhbWUpOwogICAgIGlmIChpc1RleHRNSU1F
VHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RG9jdW1lbnQodGhpcywgZnJhbWUp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDAyMzc2YmEuLjI1NTE5YzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAKICNpbmNsdWRlICJNYWluUmVzb3VyY2VMb2Fk
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCi0jaW5jbHVk
ZSAiUGx1Z2luSW5mb1N0b3JlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKQEAgLTE1OTMsNyArMTU5Myw5IEBAIGJvb2wgRnJhbWVMb2FkZXI6OnNo
b3VsZFVzZVBsdWdpbihjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wKICAgICAvLyBBbGxvdyBvdGhlciBwbHVnLWlucyB0byB3aW4gb3ZlciBRdWlja1RpbWUgYmVj
YXVzZSBpZiB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGEgcGx1Zy1pbiB0aGF0CiAgICAgLy8gY2Fu
IGhhbmRsZSBUSUZGICh3aGljaCBRdWlja1RpbWUgY2FuIGFsc28gaGFuZGxlKSB0aGV5IHByb2Jh
Ymx5IGludGVuZGVkIHRvIG92ZXJyaWRlIFFULgogICAgIGlmICgobWltZVR5cGUgPT0gImltYWdl
L3RpZmYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS90aWYiIHx8IG1pbWVUeXBlID09ICJpbWFnZS94
LXRpZmYiKSkgewotICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZSA9IFBsdWdpbkluZm9TdG9yZTo6
cGx1Z2luTmFtZUZvck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgU3RyaW5nIHBsdWdpbk5h
bWU7CisgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgICAgICBwbHVnaW5OYW1l
ID0gbV9mcmFtZS0+cGFnZSgpLT5wbHVnaW5EYXRhKCktPnBsdWdpbk5hbWVGb3JNaW1lVHlwZSht
aW1lVHlwZSk7CiAgICAgICAgIGlmICghcGx1Z2luTmFtZS5pc0VtcHR5KCkgJiYgIXBsdWdpbk5h
bWUuY29udGFpbnMoIlF1aWNrVGltZSIsIGZhbHNlKSkgCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDIyZjc0ODkuLmVkYjVmYjYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
SGlzdG9yeS5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIk5hdmlnYXRv
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC0xNTQsNiArMTU1LDEwIEBAIHZvaWQgRE9NV2lu
ZG93OjpjbGVhcigpCiAgICAgaWYgKG1fY29uc29sZSkKICAgICAgICAgbV9jb25zb2xlLT5kaXNj
b25uZWN0RnJhbWUoKTsKICAgICBtX2NvbnNvbGUgPSAwOworCisgICAgaWYgKG1fbmF2aWdhdG9y
KQorICAgICAgICBtX25hdmlnYXRvci0+ZGlzY29ubmVjdEZyYW1lKCk7CisgICAgbV9uYXZpZ2F0
b3IgPSAwOwogfQogCiBTY3JlZW4qIERPTVdpbmRvdzo6c2NyZWVuKCkgY29uc3QKQEAgLTIxOSw2
ICsyMjQsMTMgQEAgQ29uc29sZSogRE9NV2luZG93Ojpjb25zb2xlKCkgY29uc3QKICAgICByZXR1
cm4gbV9jb25zb2xlLmdldCgpOwogfQogCitOYXZpZ2F0b3IqIERPTVdpbmRvdzo6bmF2aWdhdG9y
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmF2aWdhdG9yKQorICAgICAgICBtX25hdmlnYXRvciA9
IE5hdmlnYXRvcjo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX25hdmlnYXRvci5nZXQo
KTsKK30KKwogI2lmIEVOQUJMRShDUk9TU19ET0NVTUVOVF9NRVNTQUdJTkcpCiB2b2lkIERPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiB1cmksIERPTVdpbmRvdyogc291cmNlKSBjb25zdAogewpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5oCmluZGV4IGFkYjQ3MzEuLjgxOGZmMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAorKysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZsb2F0UmVjdDsKICAgICBjbGFzcyBGcmFt
ZTsKICAgICBjbGFzcyBIaXN0b3J5OworICAgIGNsYXNzIE5hdmlnYXRvcjsKICAgICBjbGFzcyBT
Y3JlZW47CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwpAQCAtNjksNiArNzAsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEJhckluZm8qIHNjcm9sbGJhcnMoKSBjb25z
dDsKICAgICAgICAgQmFySW5mbyogc3RhdHVzYmFyKCkgY29uc3Q7CiAgICAgICAgIEJhckluZm8q
IHRvb2xiYXIoKSBjb25zdDsKKyAgICAgICAgTmF2aWdhdG9yKiBuYXZpZ2F0b3IoKSBjb25zdDsK
KyAgICAgICAgTmF2aWdhdG9yKiBjbGllbnRJbmZvcm1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG5h
dmlnYXRvcigpOyB9CiAKICAgICAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKTsKIApA
QCAtMTcwLDYgKzE3Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8QmFySW5mbz4gbV9zdGF0dXNiYXI7CiAgICAgICAgIG11dGFibGUgUmVmUHRyPEJhcklu
Zm8+IG1fdG9vbGJhcjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q29uc29sZT4gbV9jb25zb2xl
OworICAgICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0b3I+IG1fbmF2aWdhdG9yOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaWRsIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKaW5kZXggNjU1ZDZhYi4uOTNm
YTkyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKKysrIGIvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTQ0LDYgKzQ0LDggQEAgbW9kdWxlIHdpbmRvdyB7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gc2Nyb2xsYmFyczsKICAgICAg
ICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzdGF0dXNiYXI7CiAgICAgICAgIGF0
dHJpYnV0ZSBbUmVwbGFjZWFibGVdIEJhckluZm8gdG9vbGJhcjsKKyAgICAgICAgYXR0cmlidXRl
IFtSZXBsYWNlYWJsZV0gTmF2aWdhdG9yIG5hdmlnYXRvcjsKKyAgICAgICAgYXR0cmlidXRlIFtS
ZXBsYWNlYWJsZV0gTmF2aWdhdG9yIGNsaWVudEluZm9ybWF0aW9uOwogCiAgICAgICAgIERPTVNl
bGVjdGlvbiBnZXRTZWxlY3Rpb24oKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggOGVl
YzZlMC4uM2EzZGM5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01MSw3ICs1MSw2IEBA
CiAjaW5jbHVkZSAiTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUg
IlJlbmRlckZpbGVVcGxvYWRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNp
bmNsdWRlICJSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggMjU1MmVkNC4uZWFh
MzE5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFt
ZXMuaCIKKyNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCAyNGM5
OTAzLi5jYTcwNzczIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9XZWJD
b3JlL3BhZ2UvRnJhbWUuaApAQCAtOTksNiArOTksNyBAQCBjbGFzcyBLSlNQcm94eTsKIGNsYXNz
IEtVUkw7CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKK2NsYXNzIFBsdWdpbkRhdGE7CiBjbGFz
cyBSYW5nZTsKIGNsYXNzIFJlZ3VsYXJFeHByZXNzaW9uOwogY2xhc3MgUmVuZGVyUGFydDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9wYWdlL05hdmln
YXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxYjU4MQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0wLDAgKzEsMTcz
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGlt
bWlAa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgorCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorCisjaWZu
ZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNCisjaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFU
Rk9STShQUEMpCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNQUEMiCisj
ZWxpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFg4NikKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk0gIk1hY0ludGVsIgorI2VsaWYgUExBVEZPUk0oV0lOX09TKQorI2RlZmlu
ZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSAiV2luMzIiCisjZWxzZQorI2RlZmluZSBXRUJD
T1JFX05BVklHQVRPUl9QTEFURk9STSAiIgorI2VuZGlmCisjZW5kaWYgLy8gaWZuZGVmIFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VAorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUICJHZWNrbyIKKyNlbmRpZiAvLyBp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVAorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdB
VE9SX1BST0RVQ1RfU1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCICIy
MDAzMDEwNyIKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIK
KworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKyNkZWZpbmUgV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SICJBcHBsZSBDb21wdXRlciwgSW5jLiIKKyNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfVkVORE9SCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9S
X1NVQgorI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCICIiCisjZW5kaWYgLy8g
aWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK05hdmlnYXRvcjo6TmF2aWdhdG9yKEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUo
ZnJhbWUpCit7Cit9CisKK05hdmlnYXRvcjo6fk5hdmlnYXRvcigpCit7CisgICAgZGlzY29ubmVj
dEZyYW1lKCk7Cit9CisKK3ZvaWQgTmF2aWdhdG9yOjpkaXNjb25uZWN0RnJhbWUoKQoreworICAg
IGlmIChtX3BsdWdpbnMpIHsKKyAgICAgICAgbV9wbHVnaW5zLT5kaXNjb25uZWN0RnJhbWUoKTsK
KyAgICAgICAgbV9wbHVnaW5zID0gMDsKKyAgICB9CisgICAgaWYgKG1fbWltZVR5cGVzKSB7Cisg
ICAgICAgIG1fbWltZVR5cGVzLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgbV9taW1lVHlw
ZXMgPSAwOworICAgIH0KKyAgICBtX2ZyYW1lID0gMDsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6
YXBwQ29kZU5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTW96aWxsYSI7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OmFwcE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiTmV0c2NhcGUiOwor
fQorCitTdHJpbmcgTmF2aWdhdG9yOjphcHBWZXJzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAvLyBWZXJzaW9uIGlzIGV2ZXJ5
dGhpbmcgaW4gdGhlIHVzZXIgYWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxhLyIgcHJlZml4
LgorICAgIGNvbnN0IFN0cmluZyAmdXNlckFnZW50ID0gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJB
Z2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBL
VVJMKCkpOworICAgIHJldHVybiB1c2VyQWdlbnQuc3Vic3RyaW5nKHVzZXJBZ2VudC5maW5kKCcv
JykgKyAxKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6bGFuZ3VhZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBkZWZhdWx0TGFuZ3VhZ2UoKTsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dXNlckFn
ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+bG9hZGVyKCktPnVzZXJBZ2VudChtX2ZyYW1lLT5kb2N1
bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkgOiBLVVJMKCkpOworfQorCitTdHJp
bmcgTmF2aWdhdG9yOjpwbGF0Zm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFW
SUdBVE9SX1BMQVRGT1JNOworfQorCitQbHVnaW5BcnJheSogTmF2aWdhdG9yOjpwbHVnaW5zKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2lucykKKyAgICAgICAgbV9wbHVnaW5zID0gUGx1Z2lu
QXJyYXk6OmNyZWF0ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9wbHVnaW5zLmdldCgpOworfQor
CitNaW1lVHlwZUFycmF5KiBOYXZpZ2F0b3I6Om1pbWVUeXBlcygpIGNvbnN0Cit7CisgICAgaWYg
KCFtX21pbWVUeXBlcykKKyAgICAgICAgbV9taW1lVHlwZXMgPSBNaW1lVHlwZUFycmF5OjpjcmVh
dGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbWltZVR5cGVzLmdldCgpOworfQorCitTdHJpbmcg
TmF2aWdhdG9yOjpwcm9kdWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FU
T1JfUFJPRFVDVDsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6cHJvZHVjdFN1YigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCOworfQorCitTdHJpbmcg
TmF2aWdhdG9yOjp2ZW5kb3IoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRP
Ul9WRU5ET1I7Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OnZlbmRvclN1YigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUI7Cit9CisKK2Jvb2wgTmF2aWdh
dG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29va2llc0VuYWJsZWQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKK2Jvb2wgTmF2aWdhdG9yOjpqYXZhRW5hYmxlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgIHJl
dHVybiBtX2ZyYW1lLT5zZXR0aW5ncygpLT5pc0phdmFFbmFibGVkKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaCBiL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kMzIwN2YxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCkBA
IC0wLDAgKzEsNjcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIE5hdmlnYXRvcl9oCisjZGVmaW5lIE5hdmlnYXRvcl9oCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBGcmFt
ZTsKKyAgICBjbGFzcyBNaW1lVHlwZUFycmF5OworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisgICAg
Y2xhc3MgUGx1Z2luQXJyYXk7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgTmF2aWdh
dG9yIDogcHVibGljIFJlZkNvdW50ZWQ8TmF2aWdhdG9yPiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxOYXZpZ2F0b3I+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBOYXZpZ2F0b3IoZnJhbWUpKTsgfQorICAgICAgICB+TmF2aWdhdG9y
KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgRnJhbWUqIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorCisgICAgICAgIFN0cmluZyBhcHBDb2Rl
TmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgYXBwTmFtZSgpIGNvbnN0OworICAgICAgICBT
dHJpbmcgYXBwVmVyc2lvbigpIGNvbnN0OworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25z
dDsKKyAgICAgICAgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcGxh
dGZvcm0oKSBjb25zdDsKKyAgICAgICAgUGx1Z2luQXJyYXkqIHBsdWdpbnMoKSBjb25zdDsKKyAg
ICAgICAgTWltZVR5cGVBcnJheSogbWltZVR5cGVzKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBw
cm9kdWN0KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwcm9kdWN0U3ViKCkgY29uc3Q7CisgICAg
ICAgIFN0cmluZyB2ZW5kb3IoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHZlbmRvclN1YigpIGNv
bnN0OworICAgICAgICBib29sIGNvb2tpZUVuYWJsZWQoKSBjb25zdDsKKyAgICAgICAgYm9vbCBq
YXZhRW5hYmxlZCgpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgTmF2aWdhdG9yKEZy
YW1lKik7CisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxQ
bHVnaW5BcnJheT4gbV9wbHVnaW5zOworICAgICAgICBtdXRhYmxlIFJlZlB0cjxNaW1lVHlwZUFy
cmF5PiBtX21pbWVUeXBlczsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5pZGwgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTczYTAyCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisg
ICAgaW50ZXJmYWNlIE5hdmlnYXRvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgYXBwQ29kZU5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
YXBwTmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIERPTVN0
cmluZyBhcHBWZXJzaW9uOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGxh
bmd1YWdlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHVzZXJBZ2VudDsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwbGF0Zm9ybTsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbkFycmF5IHBsdWdpbnM7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBNaW1lVHlwZUFycmF5IG1pbWVUeXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIERPTVN0cmluZyBwcm9kdWN0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHByb2R1Y3RTdWI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
dmVuZG9yOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlbmRvclN1YjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGJvb2xlYW4gY29va2llRW5hYmxlZDsKKyAgICAg
ICAgYm9vbGVhbiBqYXZhRW5hYmxlZCgpOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBmNjBkMDVjLi4y
ODgzMjlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGll
bnQuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEcmFnQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dy
ZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKQEAgLTIwOCw2ICsyMTEsMzggQEAgdm9pZCBQYWdlOjpzZXROZWVk
c1JlYXBwbHlTdHlsZXMoKQogICAgICAgICAgICAgZnJhbWUtPnNldE5lZWRzUmVhcHBseVN0eWxl
cygpOwogfQogCit2b2lkIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQoreworICAg
IGlmICghYWxsUGFnZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFBsdWdpbkRhdGE6OnJlZnJl
c2goKTsKKworICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzTmVlZGluZ1JlbG9hZDsK
KworICAgIEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICgqaXQpLT5tX3BsdWdpbkRhdGEgPSAwOworCisg
ICAgICAgIGlmIChyZWxvYWQpIHsKKyAgICAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gKCpp
dCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+bG9hZGVyKCktPmNvbnRhaW5zUGx1
Z2lucygpKQorICAgICAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChm
cmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGZyYW1lc05lZWRpbmdSZWxvYWQuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGZyYW1lc05lZWRpbmdSZWxvYWRbaV0tPmxvYWRlcigpLT5yZWxvYWQoKTsKK30KKworUGx1
Z2luRGF0YSogUGFnZTo6cGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BsdWdpbkRh
dGEpCisgICAgICAgIG1fcGx1Z2luRGF0YSA9IG5ldyBQbHVnaW5EYXRhKHRoaXMpOworICAgIHJl
dHVybiBtX3BsdWdpbkRhdGEuZ2V0KCk7Cit9CisKIHN0YXRpYyBGcmFtZSogaW5jcmVtZW50RnJh
bWUoRnJhbWUqIGN1cnIsIGJvb2wgZm9yd2FyZCwgYm9vbCB3cmFwRmxhZykKIHsKICAgICByZXR1
cm4gZm9yd2FyZApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKaW5kZXggYjY4NWUzZi4uMTU4ZmQ5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdl
L1BhZ2UuaAorKysgYi9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnNwZWN0b3JDbGllbnQ7CiAgICAgY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKICAgICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFBsdWdpbkRhdGE7
CiAgICAgY2xhc3MgUHJvZ3Jlc3NUcmFja2VyOwogICAgIGNsYXNzIFNlbGVjdGlvbjsKICAgICBj
bGFzcyBTZWxlY3Rpb25Db250cm9sbGVyOwpAQCAtNzAsNiArNzEsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFBhZ2UoQ2hyb21lQ2xpZW50KiwgQ29udGV4dE1lbnVDbGllbnQqLCBF
ZGl0b3JDbGllbnQqLCBEcmFnQ2xpZW50KiwgSW5zcGVjdG9yQ2xpZW50Kik7CiAgICAgICAgIH5Q
YWdlKCk7CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9pZCByZWZyZXNoUGx1Z2lucyhib29s
IHJlbG9hZCk7CisgICAgICAgIFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEoKSBjb25zdDsKKwogICAg
ICAgICBFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9y
Q2xpZW50OyB9CiAKICAgICAgICAgdm9pZCBzZXRNYWluRnJhbWUoUGFzc1JlZlB0cjxGcmFtZT4p
OwpAQCAtMTQ2LDYgKzE1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRy
PEZyYW1lPiBtX21haW5GcmFtZTsKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZm9jdXNlZE5vZGU7
CiAKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOworCiAg
ICAgICAgIEVkaXRvckNsaWVudCogbV9lZGl0b3JDbGllbnQ7CiAKICAgICAgICAgaW50IG1fZnJh
bWVDb3VudDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaCBiL1dlYkNvcmUvcGFn
ZS9QbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU1MzE4NC4uMDAwMDAw
MAotLS0gYS9XZWJDb3JlL3BhZ2UvUGx1Z2luLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCww
IEBACi0vLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBQbHVnaW5faAotI2Rl
ZmluZSBQbHVnaW5faAotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0gICAgY2xhc3MgV2lkZ2V0OwotCi0gICAgY2xhc3MgUGx1Z2luIDogcHVi
bGljIFJlZkNvdW50ZWQ8UGx1Z2luPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQbHVnaW4+IGNyZWF0ZShXaWRnZXQqIHZpZXcpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQbHVnaW4odmlldykpOyB9Ci0gICAgICAgIFdpZGdldCogdmlldygpIGNvbnN0IHsgcmV0dXJu
IG1fdmlldzsgfQotICAgICAgICAKLSAgICBwcml2YXRlOgotICAgICAgICBQbHVnaW4oV2lkZ2V0
KiB2aWV3KSA6IG1fdmlldyh2aWV3KSB7IH0KLSAgICAgICAgV2lkZ2V0KiBtX3ZpZXc7Ci0gICAg
fTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsdWdpbl9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tIGIvV2ViQ29yZS9wYWdlL21h
Yy9GcmFtZU1hYy5tbQppbmRleCBkNGZkYzgxLi40ZGUxYzBmIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0K
QEAgLTY4LDcgKzY4LDYgQEAKICNpbXBvcnQgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2lt
cG9ydCAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVudC5o
IgotI2ltcG9ydCAiUGx1Z2luLmgiCiAjaW1wb3J0ICJSZWd1bGFyRXhwcmVzc2lvbi5oIgogI2lt
cG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RJdGVtLmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbSBiL1dlYkNvcmUvcGFn
ZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCmluZGV4IDA4NzIxYzQuLmFjZGU2MzYgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCisrKyBiL1dlYkNv
cmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCkBAIC02Myw3ICs2Myw3IEBACiAjaW1w
b3J0ICJQYWdlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbXBvcnQgIlBs
YXRmb3JtU2NyZWVuLmgiCi0jaW1wb3J0ICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbXBvcnQgIlBs
dWdpbkRhdGEuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJQYXJ0
LmgiCiAjaW1wb3J0ICJSZW5kZXJUcmVlQXNUZXh0LmgiCkBAIC0xMjA3LDcgKzEyMDcsNyBAQCBz
dGF0aWMgSFRNTEZvcm1FbGVtZW50ICpmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1l
bnQgKmVsZW1lbnQpCiAgICAgCiAgICAgaWYgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpp
c1RleHRNSU1FVHlwZShtaW1lVHlwZSkgfHwKICAgICAgICAgSW1hZ2U6OnN1cHBvcnRzVHlwZSht
aW1lVHlwZSkgfHwKLSAgICAgICAgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKG1p
bWVUeXBlKSkKKyAgICAgICAgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnBs
dWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpKQogICAgICAgICByZXR1cm4g
Tk87CiAgICAgCiAgICAgcmV0dXJuIFlFUzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmggYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9y
eS5oCmluZGV4IDRjZjIxZTMuLjdkNTUxNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMv
V2ViQ29yZVZpZXdGYWN0b3J5LmgKKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0Zh
Y3RvcnkuaApAQCAtMzUsOSArMzUsNyBAQAogQHByb3RvY29sIFdlYkNvcmVWaWV3RmFjdG9yeQog
CiAtIChOU0FycmF5ICopcGx1Z2luc0luZm87IC8vIGFycmF5IG9mIGlkIDxXZWJDb3JlUGx1Z2lu
SW5mbz4KLS0gKHZvaWQpcmVmcmVzaFBsdWdpbnM6KEJPT0wpcmVsb2FkUGFnZXM7Ci0tIChOU1N0
cmluZyAqKXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKLS0gKEJP
T0wpcGx1Z2luU3VwcG9ydHNNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZTsKKy0gKHZvaWQp
cmVmcmVzaFBsdWdpbnM7CiAKIC0gKE5TU3RyaW5nICopaW5wdXRFbGVtZW50QWx0VGV4dDsKIC0g
KE5TU3RyaW5nICopcmVzZXRCdXR0b25EZWZhdWx0TGFiZWw7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvcXQvRnJhbWVRdC5jcHAgYi9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAKaW5kZXgg
N2FlMWRkOS4uMWYwMzI1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcApAQCAtNDgsNyArNDgsNiBAQAogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiUGx1Z2luLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcApp
bmRleCBmNDhiMWFiLi4wODE0YzZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2Fn
ZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC04MCw1ICs4MSw5IEBAIGZsb2F0IHVzZXJJ
ZGxlVGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDAuMDsgfQogU3RyaW5nIEtVUkw6
OmZpbGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5n
KCk7IH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0
aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzc2ZWFlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
UGx1Z2luSW5mb1N0b3JlLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9y
dCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdG
YWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbk5hbWVGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci19
Ci0KLVBsdWdpbkluZm8gKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdp
bkF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgUGx1Z2luSW5mbyAqcGx1Z2luSW5mbyA9
IG5ldyBQbHVnaW5JbmZvOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LQotICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4gcGx1Z2luID0gW1tbV2ViQ29yZVZpZXdGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAg
ICAKLSAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3BsdWdpbiBuYW1lXTsKLSAgICBwbHVnaW5JbmZv
LT5maWxlID0gW3BsdWdpbiBmaWxlbmFtZV07Ci0gICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVn
aW4gcGx1Z2luRGVzY3JpcHRpb25dOwotCi0gICAgTlNFbnVtZXJhdG9yICpNSU1FVHlwZUVudW1l
cmF0b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKE5TU3RyaW5n
ICpNSU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgewotICAgICAgICBNaW1l
Q2xhc3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIHBsdWdpbkluZm8t
Pm1pbWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5s
b3dlcigpOwotICAgICAgICBtaW1lLT5zdWZmaXhlcyA9IFtbcGx1Z2luIGV4dGVuc2lvbnNGb3JN
SU1FVHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIG1p
bWUtPmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6TUlNRV07Ci0gICAgICAg
IG1pbWUtPnBsdWdpbiA9IHBsdWdpbkluZm87Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwbHVn
aW5JbmZvOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAo
cGx1Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNFbXB0eSgpKQotICAgICAgICBkZWxl
dGVBbGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwotICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291
bnQoKSBjb25zdAotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1
cm4gW1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBjb3Vu
dF07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0
dXJuIFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpblN1cHBvcnRzTUlN
RVR5cGU6bWltZVR5cGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAgIAotICAg
IAotICAgIHJldHVybiBOTzsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9w
ZW5QYWdlcykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW1tXZWJD
b3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnM6cmVsb2FkT3BlblBh
Z2VzXTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi19Ci0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAppbmRleCA2YjNlMjQzLi43YzhlYjE4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCkBAIC0yOCwx
MSArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4
MDQwNDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jZW5kaWYKLQogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKQEAgLTc5LDEyICs3NCw2IEBA
IFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBT
dHJpbmcgJmV4dCkKICAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKICAgICAgICAgKytl
OwogICAgIH0KLSAgICAvLyAjIyMgRklYTUU6IFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0
MDQwMAotICAgIFFTdHJpbmcgdHlwZSA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPm1pbWVU
eXBlRm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIHR5cGU7Ci0jZW5kaWYKIAogICAgIHJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIjsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgYi9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjE3MGUyMDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVj
aCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWltZVR5cGU6
Ok1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlPigwKQorICAgICwgbV9wbHVnaW5EYXRhKHBs
dWdpbkRhdGEpCisgICAgLCBtX2luZGV4KGluZGV4KQoreworfQorCitNaW1lVHlwZTo6fk1pbWVU
eXBlKCkKK3sKK30KKworU3RyaW5nIE1pbWVUeXBlOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT50eXBlOworfQorCitTdHJpbmcgTWlt
ZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1l
cygpW21faW5kZXhdLT5zdWZmaXhlczsKK30KKworU3RyaW5nIE1pbWVUeXBlOjpkZXNjcmlwdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+
ZGVzYzsKK30KKworUGFzc1JlZlB0cjxQbHVnaW4+IE1pbWVUeXBlOjplbmFibGVkUGx1Z2luKCkg
Y29uc3QKK3sKKyAgICBjb25zdCBQYWdlKiBwID0gbV9wbHVnaW5EYXRhLT5wYWdlKCk7CisgICAg
aWYgKCFwIHx8ICFwLT5zZXR0aW5ncygpLT5hcmVQbHVnaW5zRW5hYmxlZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9w
bHVnaW5EYXRhLT5taW1lcygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdp
bnMgPSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChwbHVnaW5zW2ldID09IG1p
bWVzW21faW5kZXhdLT5wbHVnaW4pCisgICAgICAgICAgICByZXR1cm4gUGx1Z2luOjpjcmVhdGUo
bV9wbHVnaW5EYXRhLmdldCgpLCBpKTsKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJD
b3JlL3BsdWdpbnMvTWltZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hMTFmY2FjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgTWltZVR5cGVfaAorI2RlZmluZSBNaW1lVHlwZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAg
Y2xhc3MgTWltZVR5cGUgOiBwdWJsaWMgUmVmQ291bnRlZDxNaW1lVHlwZT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWltZVR5cGU+IGNyZWF0ZShQYXNzUmVmUHRy
PFBsdWdpbkRhdGE+IHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJl
ZihuZXcgTWltZVR5cGUocGx1Z2luRGF0YSwgaW5kZXgpKTsgfQorICAgICAgICB+TWltZVR5cGUo
KTsKKworICAgICAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgc3VmZml4
ZXMoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAg
IFBhc3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBNaW1lVHlwZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+LCB1bnNpZ25lZCBpbmRl
eCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M3MzcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBNaW1lVHlwZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZm
aXhlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbiBlbmFibGVkUGx1Z2luOworICAgIH07
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBiL1dl
YkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iOWY4MzU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01p
bWVUeXBlQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpCisg
ICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlQXJyYXk+KDApCisgICAgLCBtX2ZyYW1lKGZyYW1lKQor
eworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgpCit7Cit9CisKK3Vuc2lnbmVk
IGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBQbHVnaW5EYXRhKiBk
YXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIGRhdGEtPm1pbWVzKCkuc2l6ZSgpOworfQorCitNaW1lVHlwZSogTWltZVR5
cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0g
Z2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Y29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAg
IGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBNaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGluZGV4KS5nZXQoKTsKK30KKworYm9vbCBNaW1lVHlw
ZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0
eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEgKmRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7
CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8TWlt
ZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0tPnR5cGUg
PT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUoZGF0
YSwgaSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdpbkRhdGEqIE1pbWVUeXBlQXJy
YXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXApCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5EYXRhKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFy
cmF5LmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY0YTRkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
dWdpbnMvTWltZVR5cGVBcnJheS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1pbWVUeXBlQXJyYXlfaAorI2Rl
ZmluZSBNaW1lVHlwZUFycmF5X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBLSlMgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNs
YXNzIEZyYW1lOworICAgIGNsYXNzIE1pbWVUeXBlOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisK
KyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTTWltZVR5cGVBcnJheS5jcHAgZG9lc24ndCBpbmNs
dWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNWYWx1ZSogdG9KUyhLSlM6OkV4
ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBNaW1lVHlwZUFycmF5IDogcHVibGlj
IFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8TWltZVR5cGVBcnJheT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IE1pbWVUeXBlQXJyYXkoZnJhbWUpKTsgfQorICAgICAgICB+TWltZVR5cGVB
cnJheSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsg
fQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAgICAgIE1pbWVU
eXBlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5h
bWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBNaW1lVHlwZSog
bmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgTWltZVR5cGVBcnJheShGcmFtZSopOworICAgICAgICBQbHVnaW5EYXRhKiBn
ZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgfTsK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5p
ZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDA5MmIwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbApAQCAtMCwwICsxLDI2IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRl
cmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0dGVyXSBNaW1lVHlwZUFycmF5IHsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwIGIvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMDU0
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uY3BwCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bs
dWdpbjo6UGx1Z2luKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KQorICAg
IDogUmVmQ291bnRlZDxQbHVnaW4+KDApCisgICAgLCBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkK
KyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK1BsdWdpbjo6flBsdWdpbigpCit7Cit9CisK
K1N0cmluZyBQbHVnaW46Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEt
PnBsdWdpbnMoKVttX2luZGV4XS0+bmFtZTsKK30KKworU3RyaW5nIFBsdWdpbjo6ZmlsZW5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+
ZmlsZTsKK30KKworU3RyaW5nIFBsdWdpbjo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+ZGVzYzsKK30KKwordW5zaWdu
ZWQgbG9uZyBQbHVnaW46Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0
YS0+cGx1Z2lucygpW21faW5kZXhdLT5taW1lcy5zaXplKCk7Cit9CisKK01pbWVUeXBlKiBQbHVn
aW46Oml0ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8q
PiYgcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBw
bHVnaW5zW21faW5kZXhdLT5taW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
TWltZUNsYXNzSW5mbyogbWltZSA9IHBsdWdpbnNbbV9pbmRleF0tPm1pbWVzW2luZGV4XTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9wbHVnaW5EYXRhLT5t
aW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKG1pbWVzW2ldID09IG1pbWUpCisgICAgICAgICAgICByZXR1cm4gTWltZVR5
cGU6OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpLmdldCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIFBsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVz
ID0gbV9wbHVnaW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHByb3BlcnR5
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
TWltZVR5cGUqIFBsdWdpbjo6bmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1
Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisg
ICAgICAgICAgICByZXR1cm4gTWltZVR5cGU6OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkp
LmdldCgpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MWY4MQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaApAQCAtMCwwICsxLDY2IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBQbHVnaW5f
aAorI2RlZmluZSBQbHVnaW5faAorCisjaW5jbHVkZSAiTWltZVR5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEtK
UyB7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTVmFsdWU7Cit9OworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3MgUGx1
Z2luOworICAgIGNsYXNzIFN0cmluZzsKKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNQbHVn
aW4uY3BwIGRvZXNuJ3QgaW5jbHVkZSBKU01pbWVUeXBlLmggZm9yIHRvSlMKKyAgICBLSlM6OkpT
VmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBNaW1lVHlwZSopOworCisgICAgY2xhc3MgUGx1
Z2luRGF0YTsKKworICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpbj4g
eworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luPiBjcmVhdGUo
UGx1Z2luRGF0YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQbHVnaW4ocGx1Z2luRGF0YSwgaW5kZXgpKTsgfQorICAgICAgICB+UGx1Z2luKCk7CisK
KyAgICAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZpbGVuYW1lKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OworCisgICAgICAgIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisKKyAgICAgICAgTWltZVR5cGUqIGl0ZW0odW5z
aWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9t
aWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1pbWVUeXBlKiBuYW1lR2V0dGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IFBsdWdpbihQbHVnaW5EYXRhKiwgdW5zaWduZWQgaW5kZXgpOworICAgICAgICBSZWZQdHI8UGx1
Z2luRGF0YT4gbV9wbHVnaW5EYXRhOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmlkbCBi
L1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ1NjVlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
LmlkbApAQCAtMCwwICsxLDI5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRl
Y2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0
ZXIsIEhhc0luZGV4R2V0dGVyXSBQbHVnaW4geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZmls
ZW5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgZGVzY3JpcHRpb247
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICB9
OworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yNTEyM2JiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmNwcApAQCAtMCwwICsxLDk4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBU
cm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGx1Z2luQXJyYXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0
cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitQbHVnaW5BcnJheTo6UGx1Z2luQXJyYXkoRnJhbWUqIGZyYW1lKQorICAgIDogUmVmQ291
bnRlZDxQbHVnaW5BcnJheT4oMCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7Cit9CisKK1BsdWdp
bkFycmF5Ojp+UGx1Z2luQXJyYXkoKQoreworfQorCit1bnNpZ25lZCBsb25nIFBsdWdpbkFycmF5
OjpsZW5ndGgoKSBjb25zdAoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGF0YS0+
cGx1Z2lucygpLnNpemUoKTsKK30KKworUGx1Z2luKiBQbHVnaW5BcnJheTo6aXRlbSh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAg
IGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbklu
Zm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAoaW5kZXggPj0gcGx1Z2lu
cy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShk
YXRhLCBpbmRleCkuZ2V0KCk7Cit9CisKK2Jvb2wgUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9y
TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRh
KiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdp
bnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkK
KyAgICAgICAgaWYgKHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbHVnaW4qIFBsdWdpbkFy
cmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAg
IFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0g
ZGF0YS0+cGx1Z2lucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNp
emUoKTsgKytpKQorICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9wZXJ0eU5hbWUp
CisgICAgICAgICAgICByZXR1cm4gUGx1Z2luOjpjcmVhdGUoZGF0YSwgaSkuZ2V0KCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luQXJyYXk6OnJlZnJlc2goYm9vbCByZWxvYWQpCit7
CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkKTsKK30KKworUGx1Z2luRGF0YSogUGx1
Z2luQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAo
IXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5EYXRhKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVn
aW5BcnJheS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ODZjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5BcnJheS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkFycmF5X2gKKyNkZWZp
bmUgUGx1Z2luQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3RhdGU7Cit9OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xhc3Mg
RnJhbWU7CisgICAgY2xhc3MgUGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisKKyAgICAv
LyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luQXJyYXkuY3BwIGRvZXNuJ3QgaW5jbHVkZSBKU1Bs
dWdpbi5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRlKiwg
UGx1Z2luKik7CisKKyAgICBjbGFzcyBQbHVnaW5BcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPFBs
dWdpbkFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVn
aW5BcnJheT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdp
bkFycmF5KGZyYW1lKSk7IH0KKyAgICAgICAgflBsdWdpbkFycmF5KCk7CisKKyAgICAgICAgdm9p
ZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CisKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgUGx1Z2luKiBpdGVtKHVuc2lnbmVkIGluZGV4
KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBQbHVnaW4qIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luQXJyYXkoRnJhbWUqKTsKKyAgICAgICAgUGx1
Z2luRGF0YSogZ2V0UGx1Z2luRGF0YSgpIGNvbnN0OworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1l
OworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZDY1MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAg
aW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRleEdldHRlcl0gUGx1Z2luQXJyYXkgewor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAg
IHZvaWQgcmVmcmVzaChpbiBib29sZWFuIHJlbG9hZCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGVjOGQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2Vu
dGluQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChz
Y2hpbW1pQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
bHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YTo6UGx1Z2lu
RGF0YShjb25zdCBQYWdlKiBwYWdlKQorICAgIDogUmVmQ291bnRlZDxQbHVnaW5EYXRhPigwKQor
ICAgICwgbV9wYWdlKHBhZ2UpCit7CisgICAgaW5pdFBsdWdpbnMoKTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3BsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
UGx1Z2luSW5mbyogcGx1Z2luID0gbV9wbHVnaW5zW2ldOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgcGx1Z2luLT5taW1lcy5zaXplKCk7ICsraikKKyAgICAgICAgICAgIG1fbWlt
ZXMuYXBwZW5kKHBsdWdpbi0+bWltZXNbal0pOworICAgIH0KK30KKworUGx1Z2luRGF0YTo6flBs
dWdpbkRhdGEoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BsdWdpbnMpOworICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX21pbWVzKTsKK30KKworYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50
eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50eXBlID09IG1p
bWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG1fbWltZXNbaV0tPnBsdWdpbi0+bmFtZTsKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzlhYWUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkRhdGFfaAorI2RlZmlu
ZSBQbHVnaW5EYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIHN0cnVjdCBQYWdlOworICAgIHN0cnVjdCBQbHVnaW5JbmZvOworCisg
ICAgc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAg
U3RyaW5nIGRlc2M7CisgICAgICAgIFN0cmluZyBzdWZmaXhlczsKKyAgICAgICAgUGx1Z2luSW5m
byogcGx1Z2luOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAgICAgIFN0
cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZmlsZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7Cisg
ICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWltZXM7CisgICAgfTsKKworICAgIC8vIEZJ
WE1FOiBtZXJnZSB3aXRoIFBsdWdpbkRhdGFiYXNlIGluIHRoZSBmdXR1cmUKKyAgICBjbGFzcyBQ
bHVnaW5EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luRGF0YT4geworICAgIHB1YmxpYzoK
KyAgICAgICAgUGx1Z2luRGF0YShjb25zdCBQYWdlKik7CisgICAgICAgIH5QbHVnaW5EYXRhKCk7
CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0UGFnZSgpIHsgbV9wYWdlID0gMDsgfQorICAgICAg
ICBjb25zdCBQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisKKyAgICAgICAg
Y29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1
Z2luczsgfQorICAgICAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcygpIGNv
bnN0IHsgcmV0dXJuIG1fbWltZXM7IH0KKworICAgICAgICBib29sIHN1cHBvcnRzTWltZVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwbHVnaW5OYW1l
Rm9yTWltZVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3Q7CisKKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVmcmVzaCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbml0UGx1
Z2lucygpOworCisgICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj4gbV9wbHVnaW5zOworICAgICAg
ICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+IG1fbWltZXM7CisgICAgICAgIGNvbnN0IFBhZ2UqIG1f
cGFnZTsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5z
L21hYy9QbHVnaW5EYXRhTWFjLm1tIGIvV2ViQ29yZS9wbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFj
Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYjkzMTYKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW0KQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUGx1Z2luRGF0YS5oIgorCisj
aW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQg
IldlYkNvcmVWaWV3RmFjdG9yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGx1
Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKKworICAgIE5TQXJyYXkqIHBsdWdpbnMgPSBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRG
YWN0b3J5XSBwbHVnaW5zSW5mb107CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBb
cGx1Z2lucyBjb3VudF07ICsraSkgeworICAgICAgICBQbHVnaW5JbmZvKiBwbHVnaW5JbmZvID0g
bmV3IFBsdWdpbkluZm87CisKKyAgICAgICAgaWQgPFdlYkNvcmVQbHVnaW5JbmZvPiBwbHVnaW4g
PSBbcGx1Z2lucyBvYmplY3RBdEluZGV4OmldOworICAgIAorICAgICAgICBwbHVnaW5JbmZvLT5u
YW1lID0gW3BsdWdpbiBuYW1lXTsKKyAgICAgICAgcGx1Z2luSW5mby0+ZmlsZSA9IFtwbHVnaW4g
ZmlsZW5hbWVdOworICAgICAgICBwbHVnaW5JbmZvLT5kZXNjID0gW3BsdWdpbiBwbHVnaW5EZXNj
cmlwdGlvbl07CisKKyAgICAgICAgTlNFbnVtZXJhdG9yKiBNSU1FVHlwZUVudW1lcmF0b3IgPSBb
cGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07CisgICAgICAgIHdoaWxlIChOU1N0cmluZyogTUlN
RSA9IFtNSU1FVHlwZUVudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAgICAgIE1pbWVD
bGFzc0luZm8qIG1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIHBsdWdpbklu
Zm8tPm1pbWVzLmFwcGVuZChtaW1lKTsKKyAgICAgICAgICAgIG1pbWUtPnR5cGUgPSBTdHJpbmco
TUlNRSkubG93ZXIoKTsKKyAgICAgICAgICAgIG1pbWUtPnN1ZmZpeGVzID0gW1twbHVnaW4gZXh0
ZW5zaW9uc0Zvck1JTUVUeXBlOk1JTUVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIiwiXTsK
KyAgICAgICAgICAgIG1pbWUtPmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6
TUlNRV07CisgICAgICAgICAgICBtaW1lLT5wbHVnaW4gPSBwbHVnaW5JbmZvOworICAgICAgICB9
CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChwbHVnaW5JbmZvKTsKKyAgICB9CisgICAgCisg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybjsKK30KKwordm9pZCBQ
bHVnaW5EYXRhOjpyZWZyZXNoKCkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CisgICAgW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnNd
OworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvcXQv
UGx1Z2luRGF0YVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE2
ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5j
cHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNo
IEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
IDxxd2VicGFnZS5oPgorI2luY2x1ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgUVdl
YlBhZ2UqIHdlYlBhZ2UgPSBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRRdCo+KG1fcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpKS0+bV93ZWJQYWdlOworICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0
b3J5ID0gd2ViUGFnZS0+cGx1Z2luRmFjdG9yeSgpOworICAgIGlmICghZmFjdG9yeSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gcGx1Z2lu
cyA9IGZhY3RvcnktPnBsdWdpbnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdWdpbnMu
Y291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4m
IHBsdWdpbiA9IHBsdWdpbnMuYXQoaSk7CisKKyAgICAgICAgUGx1Z2luSW5mbyogaW5mbyA9IG5l
dyBQbHVnaW5JbmZvOworICAgICAgICBpbmZvLT5uYW1lID0gcGx1Z2luLm5hbWU7CisgICAgICAg
IGluZm8tPmRlc2MgPSBwbHVnaW4uZGVzY3JpcHRpb247CisKKyAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBwbHVnaW4ubWltZVR5cGVzLmNvdW50KCk7ICsraikgeworICAgICAgICAgICAgY29u
c3QgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBlJiBtaW1lVHlwZSA9IHBsdWdpbi5taW1lVHlw
ZXMuYXQoaik7CisKKyAgICAgICAgICAgIE1pbWVDbGFzc0luZm8qIG1pbWVJbmZvID0gbmV3IE1p
bWVDbGFzc0luZm87CisgICAgICAgICAgICBtaW1lSW5mby0+dHlwZSA9IG1pbWVUeXBlLm5hbWU7
CisgICAgICAgICAgICBtaW1lSW5mby0+ZGVzYyA9IG1pbWVUeXBlLmRlc2NyaXB0aW9uOworICAg
ICAgICAgICAgbWltZUluZm8tPnN1ZmZpeGVzID0gbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuam9p
bigiOyAiKTsKKworICAgICAgICAgICAgaW5mby0+bWltZXMuYXBwZW5kKG1pbWVJbmZvKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2
b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIC8vIG5vdGhpbmcgdG8gZG8KK30KKwor
fTsKZGlmZiAtLWdpdCBhL1dlYktpdC5wcmkgYi9XZWJLaXQucHJpCmluZGV4IDU1ZGU5YjMuLmQx
MjQyM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcmkKKysrIGIvV2ViS2l0LnByaQpAQCAtOTcsNyAr
OTcsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3JlbmRlcmlu
ZyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2hpc3RvcnkgXAogICAgICQkQkFTRV9ESVIvV2Vi
Q29yZS94bWwgXAotICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sCisgICAgJCRCQVNFX0RJUi9X
ZWJDb3JlL2h0bWwgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbHVnaW5zCiAKIAogbWFjeCB7
CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1t
IGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQppbmRleCBjNTI0
YjRiLi40MWYzODM3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZp
ZXdGYWN0b3J5Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3Rv
cnkubW0KQEAgLTcxLDIyICs3MSw5IEBACiAgICAgcmV0dXJuIFtbV2ViUGx1Z2luRGF0YWJhc2Ug
c2hhcmVkRGF0YWJhc2VdIHBsdWdpbnNdOwogfQogCi0tIChOU1N0cmluZyAqKXBsdWdpbk5hbWVG
b3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAgIHJldHVybiBbW1tXZWJQbHVn
aW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdIG5h
bWVdOwotfQotCi0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09MKXJlbG9hZFBhZ2VzCistICh2
b2lkKXJlZnJlc2hQbHVnaW5zCiB7CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRh
YmFzZV0gcmVmcmVzaF07Ci0gICAgaWYgKHJlbG9hZFBhZ2VzKSB7Ci0gICAgICAgIFtXZWJWaWV3
IF9tYWtlQWxsV2ViVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9yZWxvYWRGb3JQbHVn
aW5DaGFuZ2VzKV07Ci0gICAgfQotfQotCi0tIChCT09MKXBsdWdpblN1cHBvcnRzTUlNRVR5cGU6
KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tXZWJQbHVnaW5EYXRhYmFzZSBz
aGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdICE9IG5pbDsKIH0KIAog
LSAoV2ViQ29yZUZyYW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopdgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCmluZGV4IDI1YzYyNDYuLjcwZDQ3OTcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTM1NCwxNiArMzU0LDYgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2Vi
RnJhbWUpCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmxvYWRlcigpLT5udW1QZW5kaW5nT3JMb2Fk
aW5nUmVxdWVzdHMocmVjdXJzZSk7CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdpbkNoYW5n
ZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpk
b2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAg
ICAgICBpZiAoKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkpCi0gICAgICAgICAg
ICBba2l0KGZyYW1lKSByZWxvYWRdOwotICAgIH0KLX0KLQogLSAodm9pZClfYXR0YWNoU2NyaXB0
RGVidWdnZXIKIHsKICAgICBpZiAoIV9wcml2YXRlLT5zY3JpcHREZWJ1Z2dlciAmJiBjb3JlKHNl
bGYpLT5zY3JpcHRQcm94eSgpLT5oYXZlR2xvYmFsT2JqZWN0KCkpCmRpZmYgLS1naXQgYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lSW50ZXJuYWwuaAppbmRleCA4OWI1YjFkLi40MjdiYTlmIDEwMDY0NAotLS0gYS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE1Myw4ICsxNTMsNiBAQCBzdHJ1Y3QgV2ViQ29yZUhp
c3RvcnlJdGVtOwogCiAtIChpbnQpX251bVBlbmRpbmdPckxvYWRpbmdSZXF1ZXN0czooQk9PTCly
ZWN1cnNlOwogCi0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzOwotCiAtICh2b2lkKV9h
dHRhY2hTY3JpcHREZWJ1Z2dlcjsKIC0gKHZvaWQpX2RldGFjaFNjcmlwdERlYnVnZ2VyOwogCmRp
ZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCmluZGV4IDhhNzljZWMuLjU2NmE5YWQgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCkBAIC0xMjgyLDExICsxMjgyLDYgQEAgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGkKICAgICBb
TlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKIH0KIAotLSAodm9pZClfcmVsb2FkRm9y
UGx1Z2luQ2hhbmdlcwotewotICAgIFtbc2VsZiBtYWluRnJhbWVdIF9yZWxvYWRGb3JQbHVnaW5D
aGFuZ2VzXTsKLX0KLQogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKV9jYWNoZWRSZXNwb25zZUZv
clVSTDooTlNVUkwgKilVUkwKIHsKICAgICBOU011dGFibGVVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0g
W1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxdOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAgYi9XZWJLaXQvcXQvQXBp
L3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAppbmRleCBmZDBjNjk0Li42MzEyMWYyIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAorKysgYi9XZWJLaXQv
cXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1
ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCiAjaW5j
bHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVn
aW5jb25uZWN0b3IuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1ZGUgInFjb29raWVq
YXIuaCIKICNpbmNsdWRlIDxxZGVidWcuaD4KQEAgLTM2MSw3ICszNjAsNyBAQCB2b2lkIFFXZWJO
ZXR3b3JrSm9iOjpzZXRFcnJvclN0cmluZyhjb25zdCBRU3RyaW5nJiBlcnJvclN0cmluZykKICov
CiBib29sIFFXZWJOZXR3b3JrSm9iOjpjYW5jZWxsZWQoKSBjb25zdAogewotICAgIHJldHVybiAh
ZC0+cmVzb3VyY2VIYW5kbGUgJiYgIWQtPmNvbm5lY3RvcjsKKyAgICByZXR1cm4gIWQtPnJlc291
cmNlSGFuZGxlOwogfQogCiAvKiEKQEAgLTQ1MCw3ICs0NDksNiBAQCBib29sIFFXZWJOZXR3b3Jr
TWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlICpoYW5kbGUsIFFXZWJOZXR3b3JrSW50ZXJmYWNl
ICppbnRlcgogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2IgPSBqb2I7CiAgICAgam9i
LT5kLT5yZXNvdXJjZUhhbmRsZSA9IGhhbmRsZTsKICAgICBqb2ItPmQtPmludGVyZmFjZSA9IGlu
dGVyZmFjZTsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAKICAgICBqb2ItPmQtPnJlcXVl
c3QuaW5pdChoYW5kbGUtPnJlcXVlc3QoKSk7CiAKQEAgLTQ3OSw3ICs0NzcsNiBAQCB2b2lkIFFX
ZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlICpoYW5kbGUpCiAgICAgICAg
IHJldHVybjsKICAgICBERUJVRygpIDw8ICJRV2ViTmV0d29ya01hbmFnZXI6OmNhbmNlbDoiIDw8
ICBqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygpOwogICAgIGpvYi0+ZC0+cmVz
b3VyY2VIYW5kbGUgPSAwOwotICAgIGpvYi0+ZC0+Y29ubmVjdG9yID0gMDsKICAgICBqb2ItPmQt
PmludGVyZmFjZS0+Y2FuY2VsSm9iKGpvYik7CiAgICAgaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5t
X2pvYiA9IDA7CiB9CkBAIC00OTYsNyArNDkzLDcgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6
OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IgKmpvYikKICAgICAgICAgY2xpZW50ID0gam9iLT5kLT5y
ZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29ubmVjdG9yKSB7CisgICAgfSBl
bHNlIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTcxLDggKzU2OCw2IEBAIHZvaWQg
UVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJOZXR3b3JrSm9iICpqb2IpCiAKICAgICBp
ZiAoY2xpZW50KQogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShqb2ItPmQtPnJl
c291cmNlSGFuZGxlLCByZXNwb25zZSk7Ci0gICAgaWYgKGpvYi0+ZC0+Y29ubmVjdG9yKQotICAg
ICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5zdGFydGVkKGpvYik7CiAKIH0KIApAQCAtNTg3
LDcgKzU4Miw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpkYXRhKFFXZWJOZXR3b3JrSm9i
ICpqb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiAgICAgICAgIGNsaWVudCA9IGpvYi0+ZC0+
cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3RvcikgeworICAgIH0g
ZWxzZSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU5Nyw4ICs1OTIsNiBAQCB2b2lk
IFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pvYiAqam9iLCBjb25zdCBRQnl0
ZUFycmF5ICZkYXRhKQogICAgIERFQlVHKCkgPDwgInJlY2VpdmVkRGF0YSIgPDwgam9iLT5kLT5y
ZXF1ZXN0LnVybC5wYXRoKCk7CiAgICAgaWYgKGNsaWVudCkKICAgICAgICAgY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCBkYXRhLmNvbnN0RGF0YSgpLCBkYXRh
Lmxlbmd0aCgpLCBkYXRhLmxlbmd0aCgpIC8qRml4TWUqLyk7Ci0gICAgaWYgKGpvYi0+ZC0+Y29u
bmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5kYXRhKGpvYiwgZGF0YSk7
CiAKIH0KIApAQCAtNjE3LDcgKzYxMCw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5p
c2hlZChRV2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAgICAgICBjbGllbnQg
PSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5kLT5jb25uZWN0b3Ip
IHsKKyAgICB9IGVsc2UgewogICAgICAgICBqb2ItPmRlcmVmKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC02NDUsOSArNjM4LDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OmZpbmlz
aGVkKFFXZWJOZXR3b3JrSm9iICpqb2IsIGludCBlcnJvckNvZGUpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoam9iLT5kLT5jb25uZWN0b3IpCi0gICAgICAgIGVtaXQgam9iLT5kLT5jb25u
ZWN0b3ItPmZpbmlzaGVkKGpvYiwgZXJyb3JDb2RlKTsKLQogICAgIERFQlVHKCkgPDwgInJlY2Vp
dmVkRmluaXNoZWQgZG9uZSIgPDwgam9iLT5kLT5yZXF1ZXN0LnVybDsKIAogICAgIGpvYi0+ZGVy
ZWYoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5o
IGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmgKaW5kZXggYzcxMmFlNC4u
OWI2ZjRkMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9w
LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmgKQEAgLTU3LDcg
KzU3LDYgQEAgcHVibGljOgogICAgICAgICAsIHJlc291cmNlSGFuZGxlKDApCiAgICAgICAgICwg
cmVkaXJlY3RlZChmYWxzZSkKICAgICAgICAgLCBpbnRlcmZhY2UoMCkKLSAgICAgICAgLCBjb25u
ZWN0b3IoMCkKICAgICAgICAgLCBqb2JTdGF0dXMoUVdlYk5ldHdvcmtKb2I6OkpvYkNyZWF0ZWQp
CiAgICAgICAgIHt9CiAgICAgaW50IHJlZjsKQEAgLTY5LDcgKzY4LDYgQEAgcHVibGljOgogICAg
IGJvb2wgcmVkaXJlY3RlZDsKIAogICAgIFFXZWJOZXR3b3JrSW50ZXJmYWNlICppbnRlcmZhY2U7
Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yOwogICAgIFFXZWJOZXR3
b3JrSm9iOjpKb2JTdGF0dXMgam9iU3RhdHVzOwogICAgIFFTdHJpbmcgZXJyb3JTdHJpbmc7CiB9
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmNwcCBiL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGIyNGQ2MDQuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2lu
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8K
LSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNpbmNsdWRlIDxxd2Vib2JqZWN0cGx1
Z2luY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8cWNvcmVhcHBsaWNhdGlvbi5oPgotI2luY2x1ZGUg
PHFmaWxlaW5mby5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLSNpZm5kZWYgUVRf
Tk9fTElCUkFSWQotUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhRV2ViRmFjdG9yeUxvYWRlciwg
bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoUVdlYk9iamVjdFBsdWdpbkZhY3Rv
cnlJbnRlcmZhY2VfaWlkLCBRQ29yZUFwcGxpY2F0aW9uOjpsaWJyYXJ5UGF0aHMoKSwgUUxhdGlu
MVN0cmluZygiL3dlYnBsdWdpbnMiKSkpCi0jZW5kaWYKLQotCi1RV2ViRmFjdG9yeUxvYWRlcjo6
UVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLCBjb25zdCBRU3RyaW5nTGlzdCAmcGF0
aHMsIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCwgUXQ6OkNhc2VTZW5zaXRpdml0eSkKLSAgICA6IFFG
YWN0b3J5TG9hZGVyKGlpZCwgcGF0aHMsIHN1ZmZpeCkKLXsKLSAgICBRU3RyaW5nTGlzdCBwbHVn
aW5zID0ga2V5cygpOwotICAgIGZvcmVhY2goUVN0cmluZyBrLCBwbHVnaW5zKSB7Ci0gICAgICAg
IFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmplY3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2lu
ICo+KGluc3RhbmNlKGspKTsKLSAgICAgICAgaWYgKCFwbHVnaW4pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5hbWUgPSBrOwotICAgICAg
ICBpbmZvLmRlc2NyaXB0aW9uID0gcGx1Z2luLT5kZXNjcmlwdGlvbkZvcktleShrKTsKLSAgICAg
ICAgUVN0cmluZ0xpc3QgbWltZXR5cGVzID0gcGx1Z2luLT5taW1ldHlwZXNGb3JLZXkoayk7Ci0g
ICAgICAgIGZvcmVhY2goUVN0cmluZyBtLCBtaW1ldHlwZXMpIHsKLSAgICAgICAgICAgIE1pbWVJ
bmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBtOwotICAgICAgICAgICAgbWltZS5l
eHRlbnNpb25zID0gcGx1Z2luLT5leHRlbnNpb25zRm9yTWltZXR5cGUobSk7Ci0gICAgICAgICAg
ICBpbmZvLm1pbWVzIDw8IG1pbWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wbHVnaW5JbmZvLmFw
cGVuZChpbmZvKTsKLSAgICB9Ci19Ci0KLVFXZWJGYWN0b3J5TG9hZGVyICpRV2ViRmFjdG9yeUxv
YWRlcjo6c2VsZigpCi17Ci0gICAgcmV0dXJuIGxvYWRlcigpOwotfQotCi0KLVFTdHJpbmcgUVdl
YkZhY3RvcnlMb2FkZXI6OmRlc2NyaXB0aW9uRm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNv
bnN0Ci17Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAg
ICAgICAgaWYgKGluZm8ubmFtZSA9PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4gaW5mby5kZXNj
cmlwdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotUVN0cmluZ0xpc3Qg
UVdlYkZhY3RvcnlMb2FkZXI6Om1pbWV0eXBlc0Zvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBj
b25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0g
ICAgICAgIGlmIChpbmZvLm5hbWUgPT0ga2V5KSB7Ci0gICAgICAgICAgICBRU3RyaW5nTGlzdCBt
aW1ldHlwZXM7Ci0gICAgICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwgaW5mby5t
aW1lcykKLSAgICAgICAgICAgICAgICBtaW1ldHlwZXMuYXBwZW5kKG0udHlwZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbWltZXR5cGVzOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBRU3Ry
aW5nTGlzdCgpOwotfQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9hZGVyOjptaW1lVHlwZUZvckV4
dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24pCi17Ci0gICAgZm9yZWFjaChjb25zdCBJ
bmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUlu
Zm8gJm0sIGluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmIChtLmV4dGVuc2lvbnMuY29udGFp
bnMoZXh0ZW5zaW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbS50eXBlOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLQotUVN0cmluZ0xpc3QgUVdlYkZh
Y3RvcnlMb2FkZXI6OmV4dGVuc2lvbnMoKSBjb25zdAotewotICAgIFFTdHJpbmdMaXN0IGV4dGVu
c2lvbnM7Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAg
ICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpCi0gICAgICAgICAg
ICBleHRlbnNpb25zIDw8IG0uZXh0ZW5zaW9uczsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmdM
aXN0KCk7Ci0KLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6bmFtZUZvck1pbWV0eXBl
KGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5m
byAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZv
ICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgaWYgKG0udHlwZSA9PSBtaW1lVHlwZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gaW5mby5uYW1lOwotICAgIH0KLSAgICByZXR1cm4gUVN0cmlu
ZygpOwotfQotCi1RT2JqZWN0ICpRV2ViRmFjdG9yeUxvYWRlcjo6Y3JlYXRlKFFXZWJGcmFtZSAq
ZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVy
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmX21p
bWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n
TGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKQotewotICAgIFFTdHJpbmcgbWltZVR5
cGUgPSBfbWltZVR5cGU7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICBR
RmlsZUluZm8gZmkodXJsLnBhdGgoKSk7Ci0gICAgICAgIG1pbWVUeXBlID0gbWltZVR5cGVGb3JF
eHRlbnNpb24oZmkuc3VmZml4KCkpOwotICAgIH0KLSAgICBRU3RyaW5nIG5hbWUgPSBuYW1lRm9y
TWltZXR5cGUobWltZVR5cGUpOwotICAgIFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmpl
Y3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKG5hbWUpKTsKLSAgICBpZiAoIXBs
dWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAq
Y29ubmVjdG9yID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoZnJhbWUpOwotICAgIHJl
dHVybiBwbHVnaW4tPmNyZWF0ZShjb25uZWN0b3IsIHVybCwgbWltZVR5cGUsIGFyZ3VtZW50TmFt
ZXMsIGFyZ3VtZW50VmFsdWVzKTsKLX0KLQotCi0KLS8qISBcY2xhc3MgUVdlYk9iamVjdFBsdWdp
bgotCi0gIFRoaXMgY2xhc3MgaXMgYSBwbHVnaW4gZm9yIHRoZSBIVE1MIG9iamVjdCB0YWcuIEl0
IGNhbiBiZSB1c2VkIHRvIGVtYmVkIGFyYml0cmFyeSBjb250ZW50IGluIGEgd2ViIHBhZ2UuCi0q
LwotCi0KLVFXZWJPYmplY3RQbHVnaW46OlFXZWJPYmplY3RQbHVnaW4oUU9iamVjdCAqcGFyZW50
KQotICAgIDogUU9iamVjdChwYXJlbnQpCi17Ci19Ci0KLVFXZWJPYmplY3RQbHVnaW46On5RV2Vi
T2JqZWN0UGx1Z2luKCkKLXsKLX0KLQotLyohCi0gIFxmbiBRU3RyaW5nTGlzdCBRV2ViT2JqZWN0
UGx1Z2luOjprZXlzKCkgY29uc3QKLQotICBUaGUga2V5cyBzaG91bGQgYmUgdW5pcXVlIG5hbWVz
LgotKi8KLQotLyohCi0gIEEgZGVzY3JpcHRpb24gZm9yIFxhIGtleS4KLSovCi1RU3RyaW5nIFFX
ZWJPYmplY3RQbHVnaW46OmRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29u
c3QKLXsKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0vKiEKLSAgcmV0dXJucyB0aGUgbWlt
ZXR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgXGEga2V5LgotKi8KLVFTdHJpbmdMaXN0IFFX
ZWJPYmplY3RQbHVnaW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLQotLyohCi0gIFxmbiBRU3RyaW5n
TGlzdCBRV2ViT2JqZWN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoKSBjb25zdAotCi0g
IFNob3VsZCByZXR1cm4gYSBsaXN0IG9mIGV4dGVuc2lvbnMgdGhhdCBhcmUgcmVjb2duaXNlZCB0
byBtYXRjaCB0aGUgXGEgbWltZVR5cGUuCi0qLwotUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdp
bjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAot
ewotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0vKiEKLSAgXGZuIFFPYmplY3QgKlFX
ZWJPYmplY3RQbHVnaW46OmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0
b3IsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgUVN0cmluZyAmbWltZVR5cGUsIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudE5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMp
IGNvbnN0Ci0KLSAgQ3JlYXRlcyBhIFFPYmplY3Qgd2l0aCBcYSBjb25uZWN0b3IgdG8gaGFuZGxl
IFxhIG1pbWVUeXBlLiBcYSBhcmd1bWVudE5hbWVzIGFuZCBcYSBhcmd1bWVudFZhbHVlcyBhcmUg
YSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHBhc3NlZCBkaXJlY3RseQotICBmcm9tIHRoZSAmbHQ7
cGFyYW0mZ3Q7IGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgSFRNTCBvYmplY3QgdGFnLgotKi8K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaCBi
L1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAzYzdjYWY3Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBs
dWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSov
Ci0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fSAotI2RlZmluZSBRV0VCT0JKRUNUUExVR0lOX0gK
LQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdENvcmUvcXBsdWdpbi5o
PgotI2luY2x1ZGUgPFF0Q29yZS9xZmFjdG9yeWludGVyZmFjZS5oPgotCi0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0KLWNsYXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I7Ci1jbGFzcyBR
VXJsOwotCi1zdHJ1Y3QgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRl
cmZhY2UgOiBwdWJsaWMgUUZhY3RvcnlJbnRlcmZhY2UKLXsKLSAgICB2aXJ0dWFsIFFPYmplY3Qg
KmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0b3IsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOwot
fTsKLQotI2RlZmluZSBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZV9paWQgImNvbS50
cm9sbHRlY2guUXQuUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2UiCi1RX0RFQ0xBUkVf
SU5URVJGQUNFKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlLCBRV2ViT2JqZWN0UGx1
Z2luRmFjdG9yeUludGVyZmFjZV9paWQpCi0KLWNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJPYmpl
Y3RQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5
SW50ZXJmYWNlCi17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX0lOVEVSRkFDRVMoUVdlYk9iamVjdFBs
dWdpbkZhY3RvcnlJbnRlcmZhY2U6UUZhY3RvcnlJbnRlcmZhY2UpCi1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgUVdlYk9iamVjdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQgPSAwKTsKLSAgICB2aXJ0dWFs
IH5RV2ViT2JqZWN0UGx1Z2luKCk7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGtleXMoKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JLZXkoY29uc3Qg
UVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zv
cktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3Qg
ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25u
ZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZh
bHVlcykgY29uc3QgPSAwOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVj
dHBsdWdpbl9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyMDI2MWYuLjAwMDAw
MDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTl9QX0gKLSNkZWZpbmUg
UVdFQk9CSkVDVFBMVUdJTl9QX0gKLQotI2luY2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+Ci0jaW5j
bHVkZSAicXdlYm9iamVjdHBsdWdpbi5oIgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0K
LS8qCi0gIEZJWE1FOiBUaGlzIGlzIGNvcGllZCBmcm9tIHFmYWN0b3J5bG9hZGVyX3AuaC4KLSAg
UmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWRlIHFmYWN0b3J5bG9hZGVyIHB1YmxpYyBpbiBRdAotKi8K
LWNsYXNzIFFGYWN0b3J5TG9hZGVyUHJpdmF0ZTsKLQotY2xhc3MgUV9DT1JFX0VYUE9SVCBRRmFj
dG9yeUxvYWRlciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1RfRkFLRQotICAgIFFf
REVDTEFSRV9QUklWQVRFKFFGYWN0b3J5TG9hZGVyKQotCi1wdWJsaWM6Ci0gICAgUUZhY3RvcnlM
b2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdM
aXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAgICAgICAgICAgY29uc3QgUVN0
cmluZyAmc3VmZml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vu
c2l0aXZpdHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0gICAgflFGYWN0b3J5TG9hZGVyKCk7Ci0K
LSAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7Ci0gICAgUU9iamVjdCAqaW5zdGFuY2UoY29u
c3QgUVN0cmluZyAma2V5KSBjb25zdDsKLQotfTsKLQotY2xhc3MgUVdlYkZyYW1lOwotCi1jbGFz
cyBRV2ViRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRRmFjdG9yeUxvYWRlcgotewotICAgIFFfT0JK
RUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmc3VmZml4ID0gUVN0cmlu
ZygpLAotICAgICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vuc2l0aXZpdHkgPSBRdDo6Q2Fz
ZVNlbnNpdGl2ZSk7Ci0KLSAgICBzdGF0aWMgUVdlYkZhY3RvcnlMb2FkZXIgKnNlbGYoKTsKLQot
ICAgIFFTdHJpbmdMaXN0IG5hbWVzKCkgY29uc3QgeyByZXR1cm4ga2V5cygpOyB9Ci0gICAgUVN0
cmluZ0xpc3QgZXh0ZW5zaW9ucygpIGNvbnN0OwotICAgIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JO
YW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgUVN0cmluZ0xpc3QgbWltZXR5cGVz
Rm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJpbmcgbmFtZUZvck1p
bWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAgICBpbmxpbmUgYm9vbCBz
dXBwb3J0c01pbWVUeXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdCB7Ci0gICAgICAg
IHJldHVybiAhbmFtZUZvck1pbWV0eXBlKG1pbWVUeXBlKS5pc0VtcHR5KCk7Ci0gICAgfQotCi0g
ICAgUVN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24p
OwotCi0gICAgUU9iamVjdCAqY3JlYXRlKFFXZWJGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
ZyAmbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1
bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1l
bnRWYWx1ZXMpOwotCi0gICAgc3RydWN0IE1pbWVJbmZvIHsKLSAgICAgICAgUVN0cmluZyB0eXBl
OwotICAgICAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zOwotICAgIH07Ci0gICAgc3RydWN0IElu
Zm8gewotICAgICAgICBRU3RyaW5nIG5hbWU7Ci0gICAgICAgIFFTdHJpbmcgZGVzY3JpcHRpb247
Ci0gICAgICAgIFFMaXN0PE1pbWVJbmZvPiBtaW1lczsKLSAgICB9OwotICAgIFFMaXN0PEluZm8+
IG1fcGx1Z2luSW5mbzsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBmNTNjMTY0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNv
bm5lY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICBDb3B5cmln
aHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAKLSAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAgCi0qLwotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCIKLSNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZS5o
IgotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJxd2ViZnJh
bWUuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotCi1zdHJ1Y3QgUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvclByaXZhdGUKLXsKLSAgICBRV2ViRnJhbWUgKmZyYW1lOwotfTsKLQotUVdlYk9iamVj
dFBsdWdpbkNvbm5lY3Rvcjo6UVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvcihRV2ViRnJhbWUgKmZy
YW1lKQotewotICAgIGQgPSBuZXcgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGU7Ci0g
ICAgZC0+ZnJhbWUgPSBmcmFtZTsKLX0KLQotUVdlYkZyYW1lICpRV2ViT2JqZWN0UGx1Z2luQ29u
bmVjdG9yOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmZyYW1lOwotfQotCi1RV2lk
Z2V0ICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpwbHVnaW5QYXJlbnRXaWRnZXQoKSBjb25z
dAotewotICAgIHJldHVybiBkLT5mcmFtZS0+cGFnZSgpLT52aWV3KCk7Ci19Ci0KLVFXZWJOZXR3
b3JrSm9iICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpyZXF1ZXN0VXJsKGNvbnN0IFFXZWJO
ZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgVGFyZ2V0IHRhcmdldCkKLXsKLSAgICBpZiAodGFyZ2V0
ICE9IFBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRV2ViTmV0d29ya0pvYiAqam9i
ID0gbmV3IFFXZWJOZXR3b3JrSm9iOwotICAgIFFXZWJOZXR3b3JrSm9iUHJpdmF0ZSAqcCA9IGpv
Yi0+ZDsKLSAgICBwLT5pbnRlcmZhY2UgPSBkLT5mcmFtZS0+cGFnZSgpLT5uZXR3b3JrSW50ZXJm
YWNlKCk7Ci0gICAgcC0+Y29ubmVjdG9yID0gdGhpczsKLQotICAgIHAtPnJlcXVlc3QgPSAqcmVx
dWVzdC5kOwotCi0gICAgZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29ya0ludGVyZmFjZSgpLT5hZGRK
b2Ioam9iKTsKLSAgICByZXR1cm4gam9iOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luY29ubmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYy
MjUxYTMuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVj
dG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICBDb3B5cmlnaHQgKEMp
IDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQot
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotKi8K
LSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTkNPTk5FQ1RPUl9ICi0jZGVmaW5lIFFXRUJPQkpFQ1RQ
TFVHSU5DT05ORUNUT1JfSAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotI2luY2x1ZGUg
PFF0Q29yZS9xb2JqZWN0Lmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLQotI2luY2x1
ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCi0KLWNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIFFX
ZWJQYWdlOwotY2xhc3MgUVdpZGdldDsKLWNsYXNzIFFVcmw7Ci1jbGFzcyBRV2ViT2JqZWN0UGx1
Z2luQ29ubmVjdG9yUHJpdmF0ZTsKLWNsYXNzIFFXZWJGYWN0b3J5TG9hZGVyOwotY2xhc3MgUVdl
Yk5ldHdvcmtNYW5hZ2VyOwotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViT2JqZWN0UGx1Z2lu
Q29ubmVjdG9yIDogcHVibGljIFFPYmplY3QKLXsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAg
IFFXZWJGcmFtZSAqZnJhbWUoKSBjb25zdDsKLSAgICBRV2lkZ2V0ICpwbHVnaW5QYXJlbnRXaWRn
ZXQoKSBjb25zdDsKLQotICAgIGVudW0gVGFyZ2V0IHsKLSAgICAgICAgUGx1Z2luLAotICAgICAg
ICBOZXcsCi0gICAgICAgIFNlbGYsCi0gICAgICAgIFBhcmVudCwKLSAgICAgICAgVG9wCi0gICAg
fTsKLSAgICBRV2ViTmV0d29ya0pvYiAqcmVxdWVzdFVybChjb25zdCBRV2ViTmV0d29ya1JlcXVl
c3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQgPSBQbHVnaW4pOwotCi1zaWduYWxzOgotICAgIHZv
aWQgc3RhcnRlZChRV2ViTmV0d29ya0pvYiopOwotICAgIHZvaWQgZGF0YShRV2ViTmV0d29ya0pv
YiosIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpOwotICAgIHZvaWQgZmluaXNoZWQoUVdlYk5ldHdv
cmtKb2IqLCBpbnQgZXJyb3JDb2RlKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUVdl
YkZhY3RvcnlMb2FkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJOZXR3b3JrTWFuYWdlcjsKLSAg
ICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKFFXZWJGcmFtZSAqZnJhbWUpOwotCi0gICAgUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUgKmQ7Ci19OwotCi0jZW5kaWYKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCmluZGV4IDZlNWU5ODQuLjQxMjFhNDEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0x
MjgsNiArMTI4LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZ2Ug
KnFxKQogICAgIG5ldHdvcmtJbnRlcmZhY2UgPSAwOwogI2Vsc2UKICAgICBuZXR3b3JrTWFuYWdl
ciA9IDA7CisgICAgcGx1Z2luRmFjdG9yeSA9IDA7CiAjZW5kaWYKICAgICBpbnNpZGVPcGVuQ2Fs
bCA9IGZhbHNlOwogCkBAIC0xNDA2LDYgKzE0MDcsMTYgQEAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
ICpRV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdAogICAgIHJldHVybiBkLT5u
ZXR3b3JrTWFuYWdlcjsKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0UGx1Z2luRmFjdG9yeShRV2Vi
UGx1Z2luRmFjdG9yeSAqZmFjdG9yeSkKK3sKKyAgICBkLT5wbHVnaW5GYWN0b3J5ID0gZmFjdG9y
eTsKK30KKworUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdlOjpwbHVnaW5GYWN0b3J5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZC0+cGx1Z2luRmFjdG9yeTsKK30KKwogI2VuZGlmCiAKIC8qIQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5oCmluZGV4IGU3NmY5MzUuLjg1NTdjMzEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAgLTQyLDYgKzQyLDcg
QEAgY2xhc3MgUVdlYkhpc3Rvcnk7CiBjbGFzcyBRV2ViUGFnZVByaXZhdGU7CiBjbGFzcyBRV2Vi
RnJhbWVEYXRhOwogY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7CitjbGFzcyBRV2ViUGx1Z2lu
RmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENocm9tZUNsaWVudFF0
OwpAQCAtMTcxLDYgKzE3Miw5IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgdm9pZCBzZXROZXR3b3Jr
QWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpOwogICAgIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdDsKKworICAgIHZv
aWQgc2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9yeSk7CisgICAgUVdl
YlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3RvcnkoKSBjb25zdDsKICNlbmRpZgogCiAgICAgcXVp
bnQ2NCB0b3RhbEJ5dGVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmluZGV4IDgwYjFlMjkuLjY0ZWRk
MzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0xNTQsNiArMTU0LDEwIEBAIHB1YmxpYzoKICAgICBRV2Vi
U2V0dGluZ3MgKnNldHRpbmdzOwogCiAgICAgUUFjdGlvbiAqYWN0aW9uc1tRV2ViUGFnZTo6V2Vi
QWN0aW9uQ291bnRdOworCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAorICAgIFFXZWJQbHVn
aW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5OworI2VuZGlmCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2VicGx1Z2luZmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2I1ZDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3Rv
cnkuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJx
d2VicGx1Z2luZmFjdG9yeS5oIgorCitRV2ViUGx1Z2luRmFjdG9yeTo6UVdlYlBsdWdpbkZhY3Rv
cnkoUU9iamVjdCAqcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCit7Cit9CisKK1FXZWJQ
bHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkoKQoreworfQorCit2b2lkIFFXZWJQbHVn
aW5GYWN0b3J5OjpyZWZyZXNoUGx1Z2lucygpCit7Cit9CisKK2Jvb2wgUVdlYlBsdWdpbkZhY3Rv
cnk6OmV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24g
Km9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQpCit7Cit9CisKK2Jvb2wgUVdlYlBsdWdp
bkZhY3Rvcnk6OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0Cit7
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTMwNWY1YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBs
dWdpbmZhY3RvcnkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICBDb3B5cmlnaHQgKEMpIDIwMDcg
VHJvbGx0ZWNoIEFTQQorCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKyNpZm5k
ZWYgUVdFQlBMVUdJTkZBQ1RPUllfSAorI2RlZmluZSBRV0VCUExVR0lORkFDVE9SWV9ICisKKyNp
bmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgor
I2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nbGlzdC5oPgorCitjbGFzcyBRVXJsOworY2xhc3MgUVdl
YlBsdWdpbkZhY3RvcnlQcml2YXRlOworY2xhc3MgUVN0cmluZzsKKworY2xhc3MgUVdFQktJVF9F
WFBPUlQgUVdlYlBsdWdpbkZhY3RvcnkgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgc3RydWN0IE1pbWVUeXBlIHsKKyAgICAgICAgUVN0cmluZyBuYW1lOwor
ICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBRU3RyaW5nTGlzdCBmaWxlRXh0
ZW5zaW9uczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpbiB7CisgICAgICAgIFFTdHJpbmcg
bmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgUUxpc3Q8TWltZVR5
cGU+IG1pbWVUeXBlczsKKyAgICB9OworCisgICAgZXhwbGljaXQgUVdlYlBsdWdpbkZhY3Rvcnko
UU9iamVjdCAqcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVdlYlBsdWdpbkZhY3RvcnkoKTsK
KworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOworCisgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVh
dGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVVybCAmdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOworCisgICAgZW51bSBFeHRl
bnNpb24geworICAgIH07CisgICAgY2xhc3MgRXh0ZW5zaW9uT3B0aW9uCisgICAge307CisgICAg
Y2xhc3MgRXh0ZW5zaW9uUmV0dXJuCisgICAge307CisgICAgdmlydHVhbCBib29sIGV4dGVuc2lv
bihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24gKm9wdGlvbiA9IDAs
IEV4dGVuc2lvblJldHVybiAqb3V0cHV0ID0gMCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0OworCitwcml2YXRlOgorICAgIFFX
ZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZSAqZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIGIvV2ViS2l0L3F0
L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4IGVkOTFiODYuLmRk
YTBjZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKQEAgLTUwLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2ViZnJhbWVfcC5o
IgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicXdlYnBsdWdp
bmZhY3RvcnkuaCIKIAogI2luY2x1ZGUgPHFmaWxlaW5mby5oPgogCkBAIC02MCw3ICs2Miw2IEBA
CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KICNlbHNlCiAjaW5jbHVkZSAicXdlYm5ldHdvcmtp
bnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5oIgogI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlCkBAIC05MDcsMTEgKzkwOCw4IEBAIE9iamVjdENvbnRlbnRUeXBl
IEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
KG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRJbWFnZTsKIAotICAgIC8v
ICMjIyBGSVhNRSBRdCA0LjQKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICBpZiAoUVdl
YkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpCi0gICAg
ICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0jZW5kaWYKKyAgICBpZiAo
bV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0
c01pbWVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRPdGhlclBs
dWdpbjsKIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlN
RVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOwpAQCAt
OTcyLDExICs5NzAsMTEgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0OjpjcmVhdGVQbHVn
aW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnMKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vICMjIyBGSVhNRTogcXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIG9iamVjdCA9IFFXZWJGYWN0b3J5TG9hZGVyOjpz
ZWxmKCktPmNyZWF0ZShtX3dlYkZyYW1lLCBxdXJsLCBtaW1lVHlwZSwgcGFyYW1zLCB2YWx1ZXMp
OwotI2VuZGlmCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgUVdlYlBsdWdpbkZhY3Rvcnkq
IGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3RvcnkoKTsKKyAgICAgICAg
aWYgKGZhY3RvcnkpCisgICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWltZVR5
cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICB9CiAKICAgICBpZiAob2JqZWN0KSB7CiAg
ICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0ICo+KG9iamVjdCk7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJl
ZS5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAK
aW5kZXggNWRmOGEzOC4uMmU0OTcwYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
RHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJqc29iamVjdHMuaCIKKyNpbmNsdWRlICJ0ZXN0
cGx1Z2luLmgiCiAKICNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFGaWxlPgpAQCAtODcsNiAr
ODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdlKFFXaWRnZXQgKnBhcmVudCwgRHVtcFJlbmRlclRyZWUg
KmRydCkKICAgICBzZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpMaW5rc0lu
Y2x1ZGVkSW5Gb2N1c0NoYWluLCBmYWxzZSk7CiAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwoZ2Vv
bWV0cnlDaGFuZ2VSZXF1ZXN0KGNvbnN0IFFSZWN0ICYpKSwKICAgICAgICAgICAgIHRoaXMsIFNM
T1Qoc2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFSZWN0ICYgKSkpOworCisgICAgc2V0UGx1Z2luRmFj
dG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiB9CiAKIFFXZWJQYWdlICpXZWJQYWdlOjpjcmVh
dGVXaW5kb3coKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFp
bi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCBkZDRj
MGU5Li43MzhiZTdmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9t
YWluLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAt
MjgsNyArMjgsNiBAQAogICovCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1
ZGUgInRlc3RwbHVnaW4uaCIKIAogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+CiAjaW5jbHVkZSA8
cWFwcGxpY2F0aW9uLmg+CkBAIC00OSwxMCArNDgsNiBAQAogI2luY2x1ZGUgPGV4ZWNpbmZvLmg+
CiAjZW5kaWYKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotUV9JTVBPUlRfUExVR0lOKHRl
c3RwbHVnaW4pCi0jZW5kaWYKLQogdm9pZCBtZXNzYWdlSGFuZGxlcihRdE1zZ1R5cGUgdHlwZSwg
Y29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgICBpZiAodHlwZSA9PSBRdENyaXRpY2FsTXNnKSB7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNw
cCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCmluZGV4IDI3
NTU4YzkuLmYzZTAzOTkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L3Rlc3RwbHVnaW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3Rw
bHVnaW4uY3BwCkBAIC0yNywxMCArMjcsOCBAQAogICovCiAjaW5jbHVkZSAidGVzdHBsdWdpbi5o
IgogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KIFRlc3RQbHVnaW46OlRlc3RQbHVnaW4o
UU9iamVjdCAqcGFyZW50KQotICAgIDogUVdlYk9iamVjdFBsdWdpbihwYXJlbnQpCisgICAgOiBR
V2ViUGx1Z2luRmFjdG9yeShwYXJlbnQpCiB7CiB9CiAKQEAgLTM4LDM0ICszNiwzMiBAQCBUZXN0
UGx1Z2luOjp+VGVzdFBsdWdpbigpCiB7CiB9CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVnaW46Omtl
eXMoKSBjb25zdAorUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4gVGVzdFBsdWdpbjo6
cGx1Z2lucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRpbjFTdHJpbmco
InRlc3RwbHVnaW4iKSk7Ci19CisgICAgUVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiBwbHVnaW47
CiAKLVFTdHJpbmcgVGVzdFBsdWdpbjo6ZGVzY3JpcHRpb25Gb3JLZXkoY29uc3QgUVN0cmluZyAm
KSBjb25zdAotewotICAgIHJldHVybiBRTGF0aW4xU3RyaW5nKCJ0ZXN0ZGVzY3JpcHRpb24iKTsK
LX0KKyAgICBwbHVnaW4ubmFtZSA9ICJ0ZXN0cGx1Z2luIjsKKyAgICBwbHVnaW4uZGVzY3JpcHRp
b24gPSAidGVzdGRlc2NyaXB0aW9uIjsKKyAgICBNaW1lVHlwZSBtaW1lVHlwZTsKKyAgICBtaW1l
VHlwZS5uYW1lID0gInRlc3R0eXBlIjsKKyAgICBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5hcHBl
bmQoInRlc3RzdWZmaXhlcyIpOworICAgIHBsdWdpbi5taW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBl
KTsKIAotUVN0cmluZ0xpc3QgVGVzdFBsdWdpbjo6bWltZXR5cGVzRm9yS2V5KGNvbnN0IFFTdHJp
bmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGluMVN0cmluZygidGVz
dHR5cGUiKSk7Ci19CisgICAgcGx1Z2luLm5hbWUgPSAidGVzdHBsdWdpbjIiOworICAgIHBsdWdp
bi5kZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24yIjsKKyAgICBtaW1lVHlwZS5uYW1lID0g
InRlc3R0eXBlMiI7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3Vm
Zml4ZXMyIik7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3VmZml4
ZXMzIik7CisgICAgcGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOwogCi1RU3RyaW5n
TGlzdCBUZXN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3QgUVN0cmluZyAmKSBj
b25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3RyaW5nKCJ0ZXN0c3VmZml4
ZXMiKSk7CisgICAgcmV0dXJuIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+KCkgPDwg
cGx1Z2luOwogfQogCi1RT2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUoUVdlYk9iamVjdFBsdWdp
bkNvbm5lY3RvciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmKSBjb25zdAorUU9iamVjdCAqVGVzdFBsdWdp
bjo6Y3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFVcmwgJnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLVFfRVhQT1JUX1BMVUdJTjIodGVzdHBsdWdpbiwgVGVzdFBsdWdpbikKLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5o
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oCmluZGV4IGUzMDUw
NjkuLmVjZmQ5NzcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rl
c3RwbHVnaW4uaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2lu
LmgKQEAgLTI1LDI4ICsyNSwyMSBAQAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotI2Rl
ZmluZSBRVF9TVEFUSUNQTFVHSU4KLSNpbmNsdWRlIDxxd2Vib2JqZWN0cGx1Z2luLmg+CisjaW5j
bHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KIAogCi1jbGFzcyBUZXN0UGx1Z2luIDogcHVibGlj
IFFXZWJPYmplY3RQbHVnaW4KK2NsYXNzIFRlc3RQbHVnaW4gOiBwdWJsaWMgUVdlYlBsdWdpbkZh
Y3RvcnkKIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBUZXN0UGx1Z2luKFFPYmplY3QgKnBhcmVu
dCA9IDApOwogICAgIHZpcnR1YWwgflRlc3RQbHVnaW4oKTsKIAotICAgIHZpcnR1YWwgUVN0cmlu
Z0xpc3Qga2V5cygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JLZXkoY29uc3QgUVN0
cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zvcktl
eShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0cmluZ0xpc3QgZXh0
ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0
b3IsCisgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykg
Y29uc3Q7CisKIH07CiAKLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19433</attachid>
            <date>2008-02-28 04:31:46 -0800</date>
            <delta_ts>2008-03-07 08:02:35 -0800</delta_ts>
            <desc>patch including support for Windows</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>177191</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFz
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdp
bnMtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2
aW91c2x5IHJlY2VpdmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlw
ZXMgYWZ0ZXIgY2FsbGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMg
YW5kIHRoZXJlIGlzIG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjRmZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEs
MzggQEAKKzxodG1sPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgcGx1
Z2lucyA9IG5ldyBBcnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLnBsdWdpbnMu
bGVuZ3RoOyArK2kpIHsKKyAgICBwbHVnaW5zLnB1c2gobmF2aWdhdG9yLnBsdWdpbnNbaV0pOwor
fQorCit2YXIgbWltZVR5cGVzID0gbmV3IEFycmF5OworZm9yICh2YXIgaSA9IDA7IGkgPCBuYXZp
Z2F0b3IubWltZVR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgbWltZVR5cGVzLnB1c2gobmF2aWdh
dG9yLm1pbWVUeXBlc1tpXSk7Cit9CisKK25hdmlnYXRvci5wbHVnaW5zLnJlZnJlc2goKTsKKwor
dmFyIG91dHB1dCA9ICI8cHJlPiI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5n
dGg7ICsraSkgeworICAgIG91dHB1dCArPSBwbHVnaW5zW2ldLm5hbWU7CisgICAgb3V0cHV0ICs9
ICJcbiI7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgKytpKSB7
CisgICAgb3V0cHV0ICs9IG1pbWVUeXBlc1tpXS50eXBlOworICAgIG91dHB1dCArPSAiXG4iOwor
fQorCitvdXRwdXQgKz0gIjwvcHJlPiI7CisKKy8vZG9jdW1lbnQud3JpdGVsbihvdXRwdXQpOwor
ZG9jdW1lbnQud3JpdGVsbigiVGVzdHMgYWNjZXNzIHRvIHByZXZpb3VzbHkgcmVjZWl2ZWQgYXJy
YXlzIGZyb20gbmF2aWdhdG9yLnBsdWdpbnMgYW5kIG1pbWV0eXBlcyBhZnRlciBjYWxsaW5nIHBs
dWdpbnMucmVmcmVzaCgpLiBJZiB0aGlzIHRleHQgYXBwZWFycyBhbmQgdGhlcmUgaXMgbm8gY3Jh
c2gsIHRoZW4gdGhlIHRlc3Qgc3VjY2VlZGVkLiIpOworCis8L3NjcmlwdD4KKzxib2R5PgorPC9i
b2R5PjwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA1OGZjNTc5Li4yOThlZTI5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCkBAIC0zMyw2ICszMyw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvZG9t
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwgXAogICAgICQoV2ViQ29yZSkvcGFnZSBcCisgICAgJChX
ZWJDb3JlKS9wbHVnaW5zIFwKICAgICAkKFdlYkNvcmUpL3N0b3JhZ2UgXAogICAgICQoV2ViQ29y
ZSkveG1sIFwKICAgICAkKFdlYkNvcmUpL3N2ZwpAQCAtNDIxLDE1ICs0MjIsMjAgQEAgYWxsIDog
XAogICAgIEpTTWVkaWFFcnJvci5oIFwKICAgICBKU01lZGlhTGlzdC5oIFwKICAgICBKU01lc3Nh
Z2VFdmVudC5oIFwKKyAgICBKU01pbWVUeXBlLmggXAorICAgIEpTTWltZVR5cGVBcnJheS5oIFwK
ICAgICBKU01vdXNlRXZlbnQuaCBcCiAgICAgSlNNdXRhdGlvbkV2ZW50LmggXAogICAgIEpTTmFt
ZWROb2RlTWFwLmggXAorICAgIEpTTmF2aWdhdG9yLmggXAogICAgIEpTTm9kZS5oIFwKICAgICBK
U05vZGVGaWx0ZXIuaCBcCiAgICAgSlNOb2RlSXRlcmF0b3IuaCBcCiAgICAgSlNOb2RlTGlzdC5o
IFwKICAgICBKU05vdGF0aW9uLmggXAogICAgIEpTT3ZlcmZsb3dFdmVudC5oIFwKKyAgICBKU1Bs
dWdpbi5oIFwKKyAgICBKU1BsdWdpbkFycmF5LmggXAogICAgIEpTUHJvY2Vzc2luZ0luc3RydWN0
aW9uLmggXAogICAgIEpTUHJvZ3Jlc3NFdmVudC5oIFwKICAgICBKU1JhbmdlLmggXApAQCAtNjAw
LDcgKzYwNiw2IEBAIGFsbCA6IFwKICAgICBYUGF0aEdyYW1tYXIuY3BwIFwKICAgICBranNfY3Nz
Lmx1dC5oIFwKICAgICBranNfZXZlbnRzLmx1dC5oIFwKLSAgICBranNfbmF2aWdhdG9yLmx1dC5o
IFwKICAgICBranNfd2luZG93Lmx1dC5oIFwKICAgICB0b2tlbml6ZXIuY3BwIFwKICAgICBXZWJD
b3JlLmV4cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBmMWM3OTBjLi4xZDdiYTJjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTU0LDcgKzU0
LDYgQEAgd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNYU0xUUHJvY2Vzc29yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19jc3MubHV0
LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5sdXQuaCBcCi0JV2ViQ29yZS9i
aW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50
QmFzZVRhYmxlLmNwcAogCkBAIC0xNzEsMTUgKzE3MCwyMCBAQCB3ZWJjb3JlX2J1aWx0X3NvdXJj
ZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL0pTSW1hZ2VEYXRhLmggXAogCURlcml2ZWRTb3VyY2Vz
L0pTS2V5Ym9hcmRFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9KU01lZGlhTGlzdC5oIFwKKwlE
ZXJpdmVkU291cmNlcy9KU01pbWVUeXBlLmggXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5cGVB
cnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU01vdXNlRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJj
ZXMvSlNNdXRhdGlvbkV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL0pTTmFtZWROb2RlTWFwLmgg
XAorCURlcml2ZWRTb3VyY2VzL0pTTmF2aWdhdG9yLmggXAogCURlcml2ZWRTb3VyY2VzL0pTTm9k
ZS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVGaWx0ZXIuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
SlNOb2RlSXRlcmF0b3IuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlTGlzdC5oIFwKIAlEZXJp
dmVkU291cmNlcy9KU05vdGF0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL0pTT3ZlcmZsb3dFdmVu
dC5oIFwKKwlEZXJpdmVkU291cmNlcy9KU1BsdWdpbi5oIFwKKwlEZXJpdmVkU291cmNlcy9KU1Bs
dWdpbkFycmF5LmggXAogCURlcml2ZWRTb3VyY2VzL0pTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgg
XAogCURlcml2ZWRTb3VyY2VzL0pTUHJvZ3Jlc3NFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9K
U1JhbmdlLmggXApAQCAtMjk2LDE1ICszMDAsMjAgQEAgd2ViY29yZV9idWlsdF9zb3VyY2VzICs9
IFwKIAlEZXJpdmVkU291cmNlcy9KU0ltYWdlRGF0YS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pT
S2V5Ym9hcmRFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTWVkaWFMaXN0LmNwcCBcCisJ
RGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZS5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5
cGVBcnJheS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTW91c2VFdmVudC5jcHAgXAogCURlcml2
ZWRTb3VyY2VzL0pTTXV0YXRpb25FdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pTTmFtZWRO
b2RlTWFwLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNOYXZpZ2F0b3IuY3BwIFwKIAlEZXJpdmVk
U291cmNlcy9KU05vZGUuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05vZGVGaWx0ZXIuY3BwIFwK
IAlEZXJpdmVkU291cmNlcy9KU05vZGVJdGVyYXRvci5jcHAgXAogCURlcml2ZWRTb3VyY2VzL0pT
Tm9kZUxpc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU05vdGF0aW9uLmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvSlNPdmVyZmxvd0V2ZW50LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW4u
Y3BwIFwKKwlEZXJpdmVkU291cmNlcy9KU1BsdWdpbkFycmF5LmNwcCBcCiAJRGVyaXZlZFNvdXJj
ZXMvSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2dy
ZXNzRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU1JhbmdlLmNwcCBcCkBAIC00NDEsNyAr
NDUwLDEyIEBAIElETF9CSU5ESU5HUyArPSAgXAogCVdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
aWRsIFwKIAlXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBcCiAJV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuaWRsIFwKKwlXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBcCiAJV2ViQ29yZS9wYWdlL1Nj
cmVlbi5pZGwgXAorCVdlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwgXAorCVdlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmlkbCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwgXAor
CVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwgXAogCVdlYkNvcmUveG1sL0RPTVBhcnNl
ci5pZGwgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAJV2Vi
Q29yZS94bWwvWE1MU2VyaWFsaXplci5pZGwKQEAgLTQ4MiwxMyArNDk2LDE3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxPcHRpb25FbGVtZW50Q29u
c3RydWN0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxTZWxlY3RFbGVtZW50
Q3VzdG9tLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20u
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0aW9uLmNwcCAgXAorCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwICBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9t
LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNQbHVnaW5DdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldEN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBcCkBAIC00
OTksNyArNTE3LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19kb20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0JV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfbmF2aWdhdG9yLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfcHJveHkuY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL1BhdXNlZFRpbWVvdXRzLmNwcCBcCkBAIC03ODgsNiArODA1LDcgQEAgd2ViY29yZV9zb3Vy
Y2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAgXAogCVdlYkNvcmUvcGFnZS9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcCBcCiAJV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvU2NyZWVuLmNwcCBcCiAJV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcCBcCkBAIC04NDgsNiArODY2LDExIEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9UaW1lci5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vdGV4dC9V
bmljb2RlUmFuZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgXAorCVdlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHAgXAorCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGFiYXNlLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkluZm9TdG9yZS5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9QbHVnaW5TdHJlYW0uY3BwIFwKQEAg
LTIwMzMsNyArMjA1Niw4IEBAIHZwYXRoICUuaWRsID0gXAogICAgICQoV2ViQ29yZSkvcGFnZSBc
CiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCi0gICAgJChX
ZWJDb3JlKS94bWwKKyAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS9wbHVnaW5z
CiAKIERlcml2ZWRTb3VyY2VzL0pTJS5oOiBEZXJpdmVkU291cmNlcy9KUyUuY3BwOwogCkBAIC0y
MDU0LDYgKzIwNzgsNSBAQCBDTEVBTkZJTEVTICs9IFwKIAlKU1hTTFRQcm9jZXNzb3IubHV0Lmgg
XAogCWtqc19jc3MubHV0LmggXAogCWtqc19ldmVudHMubHV0LmggXAotCWtqc19uYXZpZ2F0b3Iu
bHV0LmggXAogCWtqc193aW5kb3cubHV0LmgKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMDRiZWUyNS4uOTBhN2M4OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0y
NTAsNyArMjUwLDYgQEAgTFVUX0ZJTEVTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9j
ZXNzb3IuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9ranNfY3NzLmNwcCBcCiAgICAgYmluZGluZ3Mv
anMva2pzX2V2ZW50cy5jcHAgXAotICAgIGJpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAogCiBMVVRfVEFCTEVfRklMRVMgKz0gXApA
QCAtMzgxLDYgKzM4MCwxMSBAQCBJRExfQklORElOR1MgKz0gXAogICAgIHBhZ2UvRE9NV2luZG93
LmlkbCBcCiAgICAgcGFnZS9IaXN0b3J5LmlkbCBcCiAgICAgcGFnZS9TY3JlZW4uaWRsIFwKKyAg
ICBwYWdlL05hdmlnYXRvci5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luLmlkbCBcCisgICAgcGx1
Z2lucy9NaW1lVHlwZS5pZGwgXAorICAgIHBsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIFwKKyAgICBw
bHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsIFwKICAgICB4bWwvRE9NUGFyc2VyLmlkbCBcCiAgICAg
eG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCBcCiAgICAgeG1sL1hNTFNlcmlhbGl6ZXIu
aWRsCkBAIC00MjEsNiArNDI1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNM
b2NhdGlvbi5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBc
CiAgICAgYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5jcHAgIFwKKyAgICBiaW5k
aW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAgIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIFwKQEAgLTQzMSwxMiArNDM2
LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU1hTTFRQcm9jZXNzb3IuY3BwIFwKKyAgICBiaW5kaW5ncy9qcy9KU1BsdWdpbkN1c3Rv
bS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIFwKKyAgICBi
aW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9r
anNfYmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19jc3MuY3BwIFwKICAgICBiaW5k
aW5ncy9qcy9ranNfZG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAog
ICAgIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGluZ3MvanMva2pzX25hdmln
YXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAogICAgIGJpbmRpbmdz
L2pzL2tqc193aW5kb3cuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9QYXVzZWRUaW1lb3V0cy5jcHAg
XApAQCAtNzE2LDYgKzcyMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9ET01TZWxlY3Rpb24uY3BwIFwKICAgICBwYWdlL0RP
TVdpbmRvdy5jcHAgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmNwcCBcCiAgICAgcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAgXAogICAgIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwIFwKQEAgLTcyOSw2ICs3MzcsMTEgQEAgU09VUkNFUyArPSBcCiAgICAg
cGFnZS9TY3JlZW4uY3BwIFwKICAgICBwYWdlL1NldHRpbmdzLmNwcCBcCiAgICAgcGFnZS9XaW5k
b3dGZWF0dXJlcy5jcHAgXAorICAgIHBsdWdpbnMvUGx1Z2luRGF0YS5jcHAgXAorICAgIHBsdWdp
bnMvUGx1Z2luQXJyYXkuY3BwIFwKKyAgICBwbHVnaW5zL1BsdWdpbi5jcHAgXAorICAgIHBsdWdp
bnMvTWltZVR5cGUuY3BwIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmNwcCBc
CiAgICAgcGxhdGZvcm0vdGV4dC9CYXNlNjQuY3BwIFwKQEAgLTg5Miw2ICs5MDUsNyBAQCBxdC1w
b3J0IHsKICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmggXAogICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0Fw
aS9xd2ViaGlzdG9yeWludGVyZmFjZS5oIFwKKyAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3
ZWJwbHVnaW5mYWN0b3J5LmggXAogICAgICQkUFdELy4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmggXAogICAgICQkUFdEL3BsYXRmb3JtL25ldHdvcmsvcXQv
UU5ldHdvcmtSZXBseUhhbmRsZXIuaAogCkBAIC05NTQsNiArOTY4LDcgQEAgcXQtcG9ydCB7CiAg
ICAgcGxhdGZvcm0vdGV4dC9xdC9UZXh0Q29kZWNRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1do
ZWVsRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1dpZGdldFF0LmNwcCBcCisgICAgcGx1
Z2lucy9xdC9QbHVnaW5EYXRhUXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50UXQuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9EcmFnQ2xpZW50UXQuY3BwIFwKQEAgLTk2Nyw2ICs5ODIsNyBAQCBxdC1wb3J0IHsKICAgICAu
Li9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcCBcCiAgICAgLi4vV2ViS2l0L3F0L0FwaS9x
d2Vic2V0dGluZ3MuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJm
YWNlLmNwcCBcCisgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKIAog
ICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcAogICAgIGVs
c2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRpbWVXaW4uY3BwCkBAIC05NzYsMTUg
Kzk5MiwxMCBAQCBxdC1wb3J0IHsKICAgICAgICAgSEVBREVSUyArPSBcCiAgICAgICAgICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmggXAogICAgICAgICAg
ICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmggXAotICAg
ICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmggXAotICAg
ICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBcCi0g
ICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0
b3IuaCBcCiAgICAgICAgICAgICAkJFBXRC8uLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuaAog
CiAgICAgICAgIFNPVVJDRVMgKz0gXAogICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
bmV0d29ya2ludGVyZmFjZS5jcHAgXAotICAgICAgICAgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luLmNwcCBcCi0gICAgICAgICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmpl
Y3RwbHVnaW5jb25uZWN0b3IuY3BwIFwKICAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcWNv
b2tpZWphci5jcHAKIAogICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCA0ZGZlMjgyLi5iY2FiYjY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTExNzcsNiArMTE3NywyMiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxvYmpcV2ViQ29yZVxEZXJpdmVk
U291cmNlc1xKU01pbWVUeXBlLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERlcml2ZWRT
b3VyY2VzXEpTTWltZVR5cGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERlcml2ZWRTb3Vy
Y2VzXEpTTWltZVR5cGVBcnJheS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxvYmpcV2ViQ29yZVxEZXJpdmVk
U291cmNlc1xKU01pbWVUeXBlQXJyYXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNNb3VzZUV2ZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC0xMjAxLDYgKzEyMTcsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVpbGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNv
dXJjZXNcSlNOYXZpZ2F0b3IuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVpbGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNv
dXJjZXNcSlNOYXZpZ2F0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNOb2RlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMjQ5LDYg
KzEyNzMsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cLi5cV2ViS2l0QnVpbGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNQbHVn
aW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5cV2ViS2l0QnVpbGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNQbHVnaW4u
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTUGx1Z2luQXJyYXku
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cV2ViS2l0QnVpbGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNQbHVnaW5BcnJh
eS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
JChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1By
b2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMjc3NSwx
NSArMjgxNSwxOSBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXFBhZ2UuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcTmF2
aWdhdG9yLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBhZ2VcUGFnZS5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcTmF2aWdh
dG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwYWdlXFBhZ2UuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQbHVnaW4uaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
YWdlXFBhZ2UuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTQwODksMTEg
KzQxMzMsMTEgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQotCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUmVzb3VyY2VFcnJvckJhc2UuaCINCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xSZXNvdXJjZUVycm9yQmFzZS5jcHAi
DQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cbmV0d29ya1xSZXNvdXJjZUVycm9yQmFzZS5jcHAiDQorCQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcUmVzb3VyY2VFcnJvckJhc2UuaCINCiAJCQkJCT4N
CiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KQEAgLTQxMzIsMTUgKzQxNzYsMTUgQEAKIAkJCQkJ
TmFtZT0iY2YiDQogCQkJCQk+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIg0KKwkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNGLmNwcCIN
CiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KLQkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxBdXRoZW50aWNhdGlvbkNGLmNwcCINCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcQXV0aGVudGljYXRpb25DRi5oIg0K
IAkJCQkJCT4NCiAJCQkJCTwvRmlsZT4NCiAJCQkJCTxGaWxlDQotCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGNmXEF1dGhlbnRpY2F0aW9uQ0YuaCINCisJCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY2ZcQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uu
aCINCiAJCQkJCQk+DQogCQkJCQk8L0ZpbGU+DQogCQkJCQk8RmlsZQ0KQEAgLTc3NjQsNiArNzgw
OCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cYmluZGluZ3NcanNcSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5n
c1xqc1xKU05hbWVkTm9kZU1hcEN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBA
IC03Nzc2LDYgKzc4MjQsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTTmF2aWdhdG9yQ3VzdG9tLmNwcCIN
CisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xKU05vZGVDdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpA
QCAtNzgwMCw2ICs3ODUyLDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0K
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1BsdWdpbkFycmF5Q3VzdG9tLmNw
cCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xKU1BsdWdpbkN1c3RvbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmls
ZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTUUxS
ZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTc5
MTYsMTQgKzc5NzYsNiBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNca2pzX25hdmlnYXRvci5jcHAiDQotCQkJCQk+
DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNca2pzX25hdmlnYXRvci5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxl
DQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXGtqc19wcm94eS5jcHAiDQogCQkJ
CQk+DQogCQkJCTwvRmlsZT4NCkBAIC03OTYxLDYgKzgwMTMsMjIgQEAKIAkJCU5hbWU9InBsdWdp
bnMiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xNaW1l
VHlwZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbHVnaW5zXE1pbWVUeXBlLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXE1pbWVUeXBlQXJyYXkuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2lu
c1xNaW1lVHlwZUFycmF5LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXG5wYXBpLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4N
CkBAIC03OTY5LDYgKzgwMzcsMzAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW4uaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
dWdpbnNcUGx1Z2luQXJyYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5BcnJheS5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5E
YXRhLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtODAxNiw2ICs4MTA4LDEwIEBACiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQ
bHVnaW5EYXRhV2luLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggOTJjMWZlMy4uMDJmNzBlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTUwNiw3ICs1MDYsNiBAQAogCQk2NUM5N0FGMzA4RUE5MDg4
MDBBQ0QyNzMgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi87IH07CiAJ
CTY1Q0JGRUY5MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1
IC8qIEZyYW1lVmlldy5jcHAgKi87IH07CiAJCTY1Q0JGRUZBMDk3NEY2MDcwMDFEQUMyNSAvKiBG
cmFtZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1Q0JGRUY4MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2NUQxQzFDQTA5OTMyQjIyMDAwQ0Iz
MjQgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggKi87IH07CiAJCTY1REYz
MURBMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0
ci5jcHAgKi87IH07CiAJCTY1REYzMURCMDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMUQ5MDlEMUMx
MjMwMDBCRTMyNSAvKiBKU0F0dHIuaCAqLzsgfTsKIAkJNjVERjMxRjMwOUQxQ0M2MDAwMEJFMzI1
IC8qIEpTQ2hhcmFjdGVyRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NURGMzFERjA5RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRh
LmNwcCAqLzsgfTsKQEAgLTE1OTAsOCArMTU4OSw2IEBACiAJCTkzQjcwRDZBMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfZXZlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovOyB9
OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENEYwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19odG1sLmNwcCAqLzsgfTsKIAkJOTNCNzBENkMwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19odG1sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCAqLzsgfTsKLQkJOTNCNzBE
NkQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19uYXZpZ2F0b3IuY3BwICovOyB9OwotCQk5M0I3MEQ2RTA5RUIwQzdDMDA5RDg0NjggLyog
a2pzX25hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNCNzBENTIwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuaCAqLzsgfTsK
IAkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0
NjggLyoga2pzX3Byb3h5LmNwcCAqLzsgfTsKIAkJOTNCNzBENzAwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19wcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzQjcwRDc1MDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfd2luZG93LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQjcwRDU5MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfd2luZG93LmNwcCAq
LzsgfTsKQEAgLTIwMDIsNyArMTk5OSw2IEBACiAJCUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAv
KiBOYW1lZE5vZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4MTg3MjE4MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODE4NzIyNDA5NzdE
M0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MTg3MjE5MDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9k
ZUxpc3QuY3BwICovOyB9OwogCQlBODE4NzIyNTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2Rl
TGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
ODE4NzIxQTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi87IH07Ci0JCUE4
MjM5OEE4MDlCM0FDRjUwMEI2MDY0MSAvKiBQbHVnSW5JbmZvU3RvcmVNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODIzOThBNzA5QjNBQ0Y1MDBC
NjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tICovOyB9OwogCQlBODIzOUUwMDA5QjNDRjhB
MDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODIzOURGRTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgKi87
IH07CiAJCUE4MjM5RTAxMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODIzOURGRjA5QjNDRjhBMDBCNjA2
NDEgLyogTG9nZ2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE4MjZFOEFFMEExQThGMjMwMENEMUJCNiAvKiBKU0hUTUxPcHRpb25FbGVtZW50
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE4MjZFOEFDMEExQThGMjMwMENEMUJCNiAvKiBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3Ry
dWN0b3IuaCAqLzsgfTsKQEAgLTI1MzMsNiArMjUyOSwzMyBAQAogCQlBOEY0NkI4MTBDQjIwQTlE
MDAzQTk2NzAgLyogRE9NU1ZHU3RyaW5nTGlzdC5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVENzlBRDIwQUNBMTdFQjAwRjAy
RkM1IC8qIERPTVNWR1N0cmluZ0xpc3QuaCAqLzsgfTsKIAkJQThGNEZCOTQwQzE2OUU3QjAwMkFG
RUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RjRGQjkzMEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBw
b3J0LmggKi87IH07CiAJCUE4RjRGQjk2MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
RjRGQjk1MEMxNjlFODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCAqLzsgfTsKKwkJ
QTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUxMEQ3NDVFMDUwMDY0NDJFOSAv
KiBNaW1lVHlwZS5jcHAgKi87IH07CisJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1l
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlD
NkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBlLmggKi87IH07CisJCUE5QzZFNEU3MEQ3
NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEU1MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1l
VHlwZUFycmF5LmNwcCAqLzsgfTsKKwkJQTlDNkU0RTgwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE5QzZFNEU2MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggKi87IH07CisJCUE5
QzZFNEVCMEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU0RTkwRDc0NUUyQjAwNjQ0MkU5IC8qIFBs
dWdpbi5jcHAgKi87IH07CisJCUE5QzZFNEVDMEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEVBMEQ3
NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uaCAqLzsgfTsKKwkJQTlDNkU0RUYwRDc0NUUzODAwNjQ0
MkU5IC8qIFBsdWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5QzZFNEVEMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5jcHAg
Ki87IH07CisJCUE5QzZFNEYwMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU0RUUwRDc0NUUz
ODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmggKi87IH07CisJCUE5QzZFNEYzMEQ3NDVFNDgwMDY0
NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE5QzZFNEYxMEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCAq
LzsgfTsKKwkJQTlDNkU0RjQwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEYyMEQ3NDVFNDgw
MDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggKi87IH07CisJCUE5QzZFNEY2MEQ3NDVFNjEwMDY0NDJF
OSAvKiBQbHVnaW5EYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlDNkU0RjUwRDc0NUU2MTAwNjQ0MkU5IC8qIFBsdWdpbkRhdGFNYWMubW0g
Ki87IH07CisJCUE5QzZFNUE1MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlDNkU1QTMwRDc0NjQ1
ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgKi87IH07CisJCUE5QzZFNUE2MEQ3NDY0NTgwMDY0
NDJFOSAvKiBOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNUE0MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaCAqLzsgfTsK
KwkJQTlDNkU2NDcwRDc0NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0NjBE
NzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJQTlD
NkU2NDkwRDc0NjVEODAwNjQ0MkU5IC8qIEpTTmF2aWdhdG9yQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNjQ4MEQ3NDY1RDgwMDY0
NDJFOSAvKiBKU05hdmlnYXRvckN1c3RvbS5jcHAgKi87IH07CisJCUE5QzZFNjRDMEQ3NDY1RTcw
MDY0NDJFOSAvKiBKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNjRBMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1Bs
dWdpbkFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJQTlDNkU2NEQwRDc0NjVFNzAwNjQ0MkU5IC8q
IEpTUGx1Z2luQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNjRCMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAg
Ki87IH07CisJCUE5RDI0N0Y3MEQ3NTdFMzQwMEZERjk1OSAvKiBKU05hdmlnYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDdGNTBENzU3
RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuY3BwICovOyB9OworCQlBOUQyNDdGODBENzU3RTM0
MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE5RDI0N0Y2MEQ3NTdFMzMwMEZERjk1OSAvKiBKU05hdmlnYXRvci5o
ICovOyB9OworCQlBOUQyNDdGRTBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ3RkEwRDc1N0U2
OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCAqLzsgfTsKKwkJQTlEMjQ3RkYwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOUQyNDdGQjBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW4uaCAqLzsgfTsKKwkJ
QTlEMjQ4MDAwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ3RkMwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovOyB9OworCQlBOUQyNDgwMTBENzU3RTY5MDBGREY5
NTkgLyogSlNQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ3RkQwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuaCAq
LzsgfTsKKwkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4MDIwRDc1N0U3
RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuY3BwICovOyB9OworCQlBOUQyNDgwNzBENzU3RTdEMDBG
REY5NTkgLyogSlNNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ4MDMwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuaCAqLzsg
fTsKKwkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDgwNDBENzU3
RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZUFycmF5LmNwcCAqLzsgfTsKKwkJQTlEMjQ4MDkwRDc1
N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWlt
ZVR5cGVBcnJheS5oICovOyB9OwogCQlBQTA5NzJDQzBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5s
aW5lVGV4dEJveC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTA5NzJDQTBCNjk0N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi87
IH07CiAJCUFBMDk3MkNEMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzJDQjBCNjk0
N0E4MDBBNzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5oICovOyB9OwogCQlBQTIxRUNDQTBBQkYw
RkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0ODAgLyog
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAgKi87IH07CkBAIC00Nzk1LDcgKzQ4MTgsNiBAQAogCQk2
NUM5N0FGMjA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB0YWJXaWR0aCA9IDQ7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVDQkZFRjcwOTc0RjYw
NzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRnJhbWVWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVD
QkZFRjgwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRnJhbWVWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTY1RDFDMUM5MDk5MzJCMjIwMDBDQjMyNCAvKiBQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NURGMzFEODA5RDFDMTIyMDAwQkUzMjUgLyogSlNBdHRyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0F0dHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NURGMzFEOTA5RDFDMTIzMDAwQkUzMjUgLyogSlNBdHRyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0F0dHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjVERjMxREYwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDaGFyYWN0ZXJEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4MjksOCArNTg1MSw2IEBACiAJCTkzQjcwRDRF
MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBranNfZXZlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
QjcwRDRGMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfaHRtbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0ga2pzX2h0bWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19odG1sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkzQjcwRDUxMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBranNfbmF2aWdhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTNCNzBENTIwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19uYXZpZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19u
YXZpZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENTMwOUVCMEM3
QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0ga2pzX3Byb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNC
NzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0ga2pzX3Byb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTkzQjcwRDU5MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfd2luZG93LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBranNfd2luZG93LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYwNjksNyArNjA4OSw2IEBACiAJCUE4MTg3MjE4MDk3N0QzQzAwMDU4
MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5hbWVkTm9kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODE4NzIxOTA5
NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOYW1lTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODE4NzIxQTA5NzdEM0MwMDA1ODI2RDkgLyogQ2hpbGROb2RlTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hpbGROb2RlTGlzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4MjM5OEE3MDlCM0FDRjUwMEI2MDY0MSAvKiBQ
bHVnSW5JbmZvU3RvcmVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUGx1Z0luSW5mb1N0b3JlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODIzOURGRTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4MjM5REZGMDlCM0NGOEEwMEI2MDY0MSAvKiBMb2dnaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE4MjZFOEFDMEExQThGMjMwMENEMUJCNiAvKiBKU0hUTUxPcHRpb25FbGVtZW50
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9w
dGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NjQ3Myw2ICs2NDkyLDM4IEBACiAJCUE4RUE4MDA2MEExOTUxNkUwMEE4RUY1RiAvKiBNZWRpYUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEY0RkI5MzBDMTY5RTdCMDAyQUZFRDUgLyogU1ZH
UmVuZGVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZW5k
ZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RjRGQjk1MEMxNjlF
ODUwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1JlbmRlclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1pbWVUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RTIwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNaW1lVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5
cGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWltZVR5
cGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEU2MEQ3NDVF
MTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNaW1lVHlwZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5
QzZFNEU5MEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE5QzZFNEVBMEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBOUM2RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RUUwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5BcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRGMTBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1
Z2luRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGx1Z2lu
RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEYyMEQ3NDVFNDgw
MDY0NDJFOSAvKiBQbHVnaW5EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbHVnaW5EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEY1MEQ3
NDVFNjEwMDY0NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IFBsdWdpbkRhdGFNYWMubW07IHBhdGggPSBtYWMvUGx1Z2luRGF0
YU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU1QTMwRDc0NjQ1ODAw
NjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTmF2aWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU1
QTQwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5
QzZFNjQ2MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWltZVR5cGVBcnJheUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjQ4MEQ3NDY1RDgwMDY0NDJF
OSAvKiBKU05hdmlnYXRvckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNOYXZpZ2F0b3JDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOUM2RTY0QTBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQbHVnaW5BcnJheUN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjRCMEQ3NDY1RTcwMDY0
NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNQbHVnaW5DdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBOUM2RTY1RDBENzQ2Njk0MDA2NDQyRTkgLyogTmF2aWdhdG9yLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gTmF2aWdhdG9yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QTlDNkU2NUUwRDc0NjZGMjAwNjQ0MkU5IC8qIE1pbWVUeXBlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gTWltZVR5cGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2
RTY1RjBENzQ2NzAwMDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IE1pbWVUeXBlQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBOUM2RTY2MDBENzQ2NzBDMDA2NDQyRTkgLyogUGx1Z2luLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUGx1Z2luLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2
NjEwRDc0NjcxRTAwNjQ0MkU5IC8qIFBsdWdpbkFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUGx1Z2luQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUQy
NDdGNTBENzU3RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTlEMjQ3RjYwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05hdmlnYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBOUQyNDdGQTBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW4u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5IC8q
IEpTUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1BsdWdpbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUQyNDdGQzBENzU3RTY5MDBGREY5NTkg
LyogSlNQbHVnaW5BcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNQbHVnaW5BcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0
N0ZEMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1BsdWdpbkFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE5RDI0ODAyMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01pbWVUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ4MDMwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWltZVR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpT
TWltZVR5cGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNNaW1lVHlwZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ4
MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNNaW1lVHlwZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUFBMDk3MkNBMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdJbmxpbmVUZXh0Qm94
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTcyQ0IwQjY5NDdBODAwQTcw
NUU5IC8qIFNWR0lubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR0lubGluZVRleHRCb3guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEw
OTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA2Nyw2ICs4MTE4LDcgQEAKIAkJCQlCQzk4
NTQ0MzBDRDNEOUQwMDAwNjlCQzEgLyogV2luZG93ICovLAogCQkJCUE4M0I3OTIyMENDQjAwRjAw
MDBCMDgyNSAvKiBYTUwgKi8sCiAJCQkJQTgzQjc5MEMwQ0NBRkY4MzAwMEIwODI1IC8qIFhQYXRo
ICovLAorCQkJCUE5RDI0N0Y5MEQ3NTdFNDEwMEZERjk1OSAvKiBQbHVnaW5zICovLAogCQkJKTsK
IAkJCW5hbWUgPSAiRGVyaXZlZCBTb3VyY2VzIjsKIAkJCXBhdGggPSBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlOwpAQCAtODIxNSw2ICs4MjY3LDIxIEBACiAJCTVEQ0Y4MzY5MEQ1OTE1NzgwMDk1M0JD
NiAvKiBwbHVnaW5zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQlBOUM2RTY2MTBENzQ2NzFFMDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuaWRsICovLAorCQkJ
CUE5QzZFNjYwMEQ3NDY3MEMwMDY0NDJFOSAvKiBQbHVnaW4uaWRsICovLAorCQkJCUE5QzZFNjVG
MEQ3NDY3MDAwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmlkbCAqLywKKwkJCQlBOUM2RTY1RTBE
NzQ2NkYyMDA2NDQyRTkgLyogTWltZVR5cGUuaWRsICovLAorCQkJCUE5QzZFNEY1MEQ3NDVFNjEw
MDY0NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tICovLAorCQkJCUE5QzZFNEYxMEQ3NDVFNDgwMDY0
NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCAqLywKKwkJCQlBOUM2RTRGMjBENzQ1RTQ4MDA2NDQyRTkg
LyogUGx1Z2luRGF0YS5oICovLAorCQkJCUE5QzZFNEVEMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVn
aW5BcnJheS5jcHAgKi8sCisJCQkJQTlDNkU0RUUwRDc0NUUzODAwNjQ0MkU5IC8qIFBsdWdpbkFy
cmF5LmggKi8sCisJCQkJQTlDNkU0RTkwRDc0NUUyQjAwNjQ0MkU5IC8qIFBsdWdpbi5jcHAgKi8s
CisJCQkJQTlDNkU0RUEwRDc0NUUyQjAwNjQ0MkU5IC8qIFBsdWdpbi5oICovLAorCQkJCUE5QzZF
NEU1MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmNwcCAqLywKKwkJCQlBOUM2RTRF
NjBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5oICovLAorCQkJCUE5QzZFNEUxMEQ3
NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgKi8sCisJCQkJQTlDNkU0RTIwRDc0NUUwNTAw
NjQ0MkU5IC8qIE1pbWVUeXBlLmggKi8sCiAJCQkJNURDRjgzNkMwRDU5MTU5ODAwOTUzQkM2IC8q
IFBsdWdpbkluZm9TdG9yZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBwbHVnaW5zOwpAQCAtODM0
NSw3ICs4NDEyLDYgQEAKIAkJCQlCQzk0RDEwNzBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1T
Y3JlZW5NYWMubW0gKi8sCiAJCQkJQkMzRkNBQTgwQUMzREI1ODAwQkE1NEFEIC8qIFBsYXRmb3Jt
U2Nyb2xsQmFyLmggKi8sCiAJCQkJQkM3QjJBRjkwNDUwODI0MTAwQTgwMDBGIC8qIFBsYXRmb3Jt
U2Nyb2xsQmFyTWFjLm1tICovLAotCQkJCUE4MjM5OEE3MDlCM0FDRjUwMEI2MDY0MSAvKiBQbHVn
SW5JbmZvU3RvcmVNYWMubW0gKi8sCiAJCQkJMDY2OEUxOEUwQUREOTY0MDAwNDEyOEUwIC8qIFBv
cHVwTWVudU1hYy5tbSAqLywKIAkJCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xs
QmFyLmNwcCAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01h
Yy5tbSAqLywKQEAgLTgzODIsNiArODQ0OCw5IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5
NiAvKiBwYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQlBOUM2RTY1RDBENzQ2Njk0MDA2NDQyRTkgLyogTmF2aWdhdG9yLmlkbCAqLywKKwkJCQlBOUM2
RTVBMzBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmNwcCAqLywKKwkJCQlBOUM2RTVBNDBE
NzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmggKi8sCiAJCQkJMDY2OTNGNDUwQkZCQzkxNjAw
MjE2MDcyIC8qIGluc3BlY3RvciAqLywKIAkJCQk5M0MwOUE4MjBCMDY0RjA1MDA1QUJENEQgLyog
bWFjICovLAogCQkJCTg1MzhGMDAwMEFENzE3NzAwMDZBODFEMSAvKiBBYnN0cmFjdFZpZXcuaWRs
ICovLApAQCAtODQzMiw3ICs4NTAxLDYgQEAKIAkJCQk5MzVDNDc2MjA5QUM0Q0U2MDBBNkFBQjQg
LyogTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oICovLAogCQkJCTY1RkVBODY4MDk4MzNB
REUwMEJFRDRBQiAvKiBQYWdlLmNwcCAqLywKIAkJCQk2NUEyMTQ2NzA5N0EzMjkxMDBCOTA1MEEg
LyogUGFnZS5oICovLAotCQkJCTY1RDFDMUM5MDk5MzJCMjIwMDBDQjMyNCAvKiBQbHVnaW4uaCAq
LywKIAkJCQlCQ0VDMDFCQTBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmNwcCAqLywKIAkJCQlC
Q0VDMDFCQjBDMjc0REFDMDA5RjRFQzkgLyogU2NyZWVuLmggKi8sCiAJCQkJQkNFQzAxQkMwQzI3
NERBQzAwOUY0RUM5IC8qIFNjcmVlbi5pZGwgKi8sCkBAIC0xMDYxNyw2ICsxMDY4NSwyMSBAQAog
CQkJbmFtZSA9IFhNTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUE5RDI0
N0Y5MEQ3NTdFNDEwMEZERjk1OSAvKiBQbHVnaW5zICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUQyNDgwMjBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1l
VHlwZS5jcHAgKi8sCisJCQkJQTlEMjQ4MDMwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUu
aCAqLywKKwkJCQlBOUQyNDgwNDBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZUFycmF5LmNw
cCAqLywKKwkJCQlBOUQyNDgwNTBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZUFycmF5Lmgg
Ki8sCisJCQkJQTlEMjQ3RkEwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCAqLywKKwkJ
CQlBOUQyNDdGQjBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW4uaCAqLywKKwkJCQlBOUQyNDdG
QzBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5jcHAgKi8sCisJCQkJQTlEMjQ3RkQw
RDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuaCAqLywKKwkJCSk7CisJCQluYW1lID0g
UGx1Z2luczsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUIyMjI3N0NBMEQw
MEJGMUUwMDcxQjc4MiAvKiBzdmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtMTE0ODEsOCArMTE1NjQsNiBAQAogCQkJCTkzQjcwRDRFMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfZXZlbnRzLmggKi8sCiAJCQkJOTNCNzBENEYwOUVCMEM3QzAwOUQ4NDY4IC8q
IGtqc19odG1sLmNwcCAqLywKIAkJCQk5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0
bWwuaCAqLywKLQkJCQk5M0I3MEQ1MTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5j
cHAgKi8sCi0JCQkJOTNCNzBENTIwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuaCAq
LywKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmNwcCAqLywKIAkJ
CQk5M0I3MEQ1NDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmggKi8sCiAJCQkJOTNCNzBE
NTkwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc193aW5kb3cuY3BwICovLApAQCAtMTE1MzksNiArMTE2
MjAsMTAgQEAKIAkJQkM0RURFRjcwQzA4RjQxNDAwN0VERDQ5IC8qIEN1c3RvbSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlDNkU2NEEwRDc0NjVFNzAw
NjQ0MkU5IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwICovLAorCQkJCUE5QzZFNjRCMEQ3NDY1
RTcwMDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgKi8sCisJCQkJQTlDNkU2NDgwRDc0NjVE
ODAwNjQ0MkU5IC8qIEpTTmF2aWdhdG9yQ3VzdG9tLmNwcCAqLywKKwkJCQlBOUM2RTY0NjBENzQ2
NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLywKIAkJCQlBNzY2RjM1
MjBENkJERTM1MDBBQkREQjMgLyogSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcCAqLywKIAkJ
CQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKIAkJCQkx
QTlFRjQ1NjBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwICovLApAQCAtMTE1OTYsNiArMTE2ODEsOCBAQAogCQlCQzk4NTQ0MzBDRDNEOUQwMDAw
NjlCQzEgLyogV2luZG93ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQlBOUQyNDdGNTBENzU3RTMzMDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuY3BwICovLAor
CQkJCUE5RDI0N0Y2MEQ3NTdFMzMwMEZERjk1OSAvKiBKU05hdmlnYXRvci5oICovLAogCQkJCUJD
NUE4NkIzMEMzMzY3RTgwMEVFQTY0OSAvKiBKU0RPTVNlbGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM1
QTg2QjQwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmggKi8sCiAJCQkJMTQwM0JB
MEIwOUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmNwcCAqLywKQEAgLTEzNzQ2LDcgKzEz
ODMzLDYgQEAKIAkJCQlCQzNGQ0FBOTBBQzNEQjU4MDBCQTU0QUQgLyogUGxhdGZvcm1TY3JvbGxC
YXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJCMEQwMDZDMUQwMEVGNkYyNiAvKiBQbGF0
Zm9ybVN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0
IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjVEMUMxQ0EwOTkz
MkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNjk0QzgwQTNC
MTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkIx
RjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0MDA0MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVh
ZGVycyAqLywKQEAgLTE0MTgxLDcgKzE0MjY3LDYgQEAKIAkJCQk5M0I3MEQ2QTA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2V2ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgxRjMwOUQxNTA4
RDAwMEU2MUQ3IC8qIGtqc19ldmVudHMubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I3MEQ2
QzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzQjcw
RDZFMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2NTY1ODFGNTA5RDE1MDhEMDAwRTYxRDcgLyoga2pzX25hdmlnYXRvci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzQjcwRDc2MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfd2luZG93Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTE0MjQ3LDYgKzE0MzMyLDE3IEBACiAJCQkJQTc3OTc5MUEwRDZC
OUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3OTc5Mjcw
RDZCOUU2NDAwMzg1MUI5IC8qIEpTQ2FudmFzUGl4ZWxBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc3OTc5MjkwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBOUM2RTRFNDBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE5QzZFNEU4MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOUM2RTRFQzBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBOUM2RTRGMDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEY0MEQ3NDVFNDgwMDY0NDJFOSAvKiBQbHVnaW5E
YXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUM2RTVBNjBENzQ2NDU4MDA2NDQyRTkgLyogTmF2
aWdhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUQyNDdGODBENzU3RTM0MDBGREY5NTkgLyog
SlNOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RDI0N0ZGMEQ3NTdFNjkwMEZERjk1
OSAvKiBKU1BsdWdpbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlEMjQ4MDEwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RDI0ODA3MEQ3NTdF
N0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBOUQyNDgwOTBE
NzU3RTdEMDBGREY5NTkgLyogSlNNaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1
MzYzLDcgKzE1NDU5LDYgQEAKIAkJCQk5MzVDNDc3MTA5QUM0RDczMDBBNkFBQjQgLyogUGxhdGZv
cm1Nb3VzZUV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxMDgwQzI3NEY4ODAw
NkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlB
REMwODI0NUU1OTAwMUU5QUJDIC8qIFBsYXRmb3JtU2Nyb2xsQmFyTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQTgyMzk4QTgwOUIzQUNGNTAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzY5NEM3MEEzQjE2NzYwMDNGNTA0OSAvKiBQbHVnaW5E
b2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkIxRjcxNjBEMDBDQUE4MDA0QUVBNjQg
LyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA2NjhFMTkw
MEFERDk2NDAwMDQxMjhFMCAvKiBQb3B1cE1lbnVNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTE1
NzkxLDcgKzE1ODg2LDYgQEAKIAkJCQk5M0I3MEQ2NzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2Rv
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0I3MEQ2OTA5RUIwQzdDMDA5RDg0NjggLyoga2pz
X2V2ZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0Njgg
Lyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNCNzBENkQwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBENkYwOUVC
MEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0I3MEQ3
NTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3dpbmRvdy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
Q0IxNkMyQzA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
MTU4NDIsNiArMTU5MzYsMjIgQEAKIAkJCQlBNzc5NzkyNjBENkI5RTY0MDAzODUxQjkgLyogSlND
YW52YXNQaXhlbEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Nzk3OTI4MEQ2QjlFNjQw
MDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzY2RjM1MzBE
NkJERTM1MDBBQkREQjMgLyogSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBOUM2RTRFNzBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTRFQjBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2lu
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEVGMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVn
aW5BcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTRGMzBENzQ1RTQ4MDA2NDQyRTkg
LyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTRGNjBENzQ1RTYxMDA2
NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNUE1MEQ3
NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU2
NDcwRDc0NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBOUM2RTY0OTBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU2NEMwRDc0NjVFNzAwNjQ0MkU5IC8qIEpTUGx1
Z2luQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU2NEQwRDc0NjVFNzAw
NjQ0MkU5IC8qIEpTUGx1Z2luQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5RDI0N0Y3
MEQ3NTdFMzQwMEZERjk1OSAvKiBKU05hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
OUQyNDdGRTBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTlEMjQ4MDAwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQTlEMjQ4MDYwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQTlEMjQ4MDgwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVB
cnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlw
ZUFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEz
ODgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJy
YXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01pbWVUeXBlQXJyYXkuaCIKKworI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXkuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCitib29sIEpTTWltZVR5cGVBcnJheTo6
Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIE1pbWVUeXBlQXJyYXkqIG1pbWVUeXBlQXJy
YXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gbWltZVR5
cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUq
IEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
cmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNNaW1lVHlwZUFycmF5KiB0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xvdC5zbG90QmFzZSgpKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIocHJvcGVydHlOYW1lKSk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MGYyMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3BwCkBAIC0wLDAgKzEsMTE1IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQor
ICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50aW5Aa2RlLm9y
ZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNjaGltbWlAa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
OCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNOYXZpZ2F0b3IuaCIKKworI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEtKUzsKKworc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUq
KTsKKworI2lmICFQTEFURk9STShXSU4pCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBuZWVkc1lvdVR1
YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisj
ZWxzZQorCitzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqIGV4ZWMsIEZy
YW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUaGlzIHF1aXJrIHdvcmtzIGFyb3VuZCBhIG1pc3Rha2Vu
IGNoZWNrIGluIGFuIGFkIGF0IHlvdXR1YmUuY29tLgorICAgIC8vIFRoZXJlJ3MgYSBmdW5jdGlv
biBjYWxsZWQgaXNTYWZhcmkgdGhhdCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmdW5jdGlvbgorICAg
IC8vIGNhbGxlZCBpc1dpbmRvd3MgcmV0dXJucyB0cnVlOyB0aHVzIHRoZSBzaXRlIG1hbGZ1bmN0
aW9ucyB3aXRoIFdpbmRvd3MgU2FmYXJpLgorCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgaWYg
dGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyAiaXNXaW5kb3dzIi4KKyAgICBGdW5jdGlvbkltcCogZnVu
Y3Rpb24gPSBleGVjLT5mdW5jdGlvbigpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciYgaXNXaW5kb3dzRnVuY3Rp
b25OYW1lID0gKm5ldyBJZGVudGlmaWVyKCJpc1dpbmRvd3MiKTsKKyAgICBpZiAoZnVuY3Rpb24t
PmZ1bmN0aW9uTmFtZSgpICE9IGlzV2luZG93c0Z1bmN0aW9uTmFtZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgaWYgdGhlIGZ1bmN0aW9uIGlzIGNh
bGxlZCBieSBhbiAiaXNTYWZhcmkiIGZ1bmN0aW9uLgorICAgIC8vIEhvd2V2ZXIsIHRoYXQgZnVu
Y3Rpb24gaXMgbm90IGl0c2VsZiBuYW1lZCAtLSBpdCBpcyBzdG9yZWQgaW4gdGhlIGlzU2FmYXJp
CisgICAgLy8gcHJvcGVydHksIHRob3VnaCwgc28gdGhhdCdzIGhvdyB3ZSByZWNvZ25pemUgaXQu
CisgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhlYyA9IGV4ZWMtPmNhbGxpbmdFeGVjU3RhdGUoKTsK
KyAgICBpZiAoIWNhbGxpbmdFeGVjKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRnVuY3Rp
b25JbXAqIGNhbGxpbmdGdW5jdGlvbiA9IGNhbGxpbmdFeGVjLT5mdW5jdGlvbigpOworICAgIGlm
ICghY2FsbGluZ0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSlNPYmplY3Qq
IHRoaXNPYmplY3QgPSBjYWxsaW5nRXhlYy0+dGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzT2Jq
ZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIm
IGlzU2FmYXJpRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlmaWVyKCJpc1NhZmFyaSIpOworICAg
IEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24gPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoaXNTYWZh
cmlGdW5jdGlvbk5hbWUpOworICAgIGlmIChpc1NhZmFyaUZ1bmN0aW9uICE9IGNhbGxpbmdGdW5j
dGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7CisgICAgLy8gRklYTUU6IFRoZSBkb2N1bWVudCBpcyBuZXZlciBu
dWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hlY2sgYWxvbmcgd2l0aCB0aGUKKyAgICAv
LyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxlIHdoZW4gd2UgYXJlIGFic29sdXRlbHkg
c3VyZSBpdCdzIHNhZmUuCisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgb24gdGhlIGZyb250IHBhZ2Ugb2YgdGhlIGds
b2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCisgICAgY29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnQt
PnVybCgpOworICAgIGlmICh1cmwuaG9zdCgpICE9ICJ5b3V0dWJlLmNvbSIgJiYgdXJsLmhvc3Qo
KSAhPSAid3d3LnlvdXR1YmUuY29tIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh1
cmwucGF0aCgpICE9ICIvIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQXMgd2l0
aCBvdGhlciBzaXRlLXNwZWNpZmljIHF1aXJrcywgYWxsb3cgd2Vic2l0ZSBkZXZlbG9wZXJzIHRv
IHR1cm4gdGhpcyBvZmYuCisgICAgLy8gSW4gdGhlb3J5LCB0aGlzIGFsbG93cyB3ZWJzaXRlIGRl
dmVsb3BlcnMgdG8gY2hlY2sgaWYgdGhlaXIgZml4ZXMgYXJlIGVmZmVjdGl2ZS4KKyAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lm
aWNRdWlya3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKKyNlbmRpZgorCitKU1ZhbHVlKiBKU05hdmlnYXRvcjo6YXBwVmVyc2lvbihFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0Cit7CisgICAgTmF2aWdhdG9yKiBpbXAgPSBzdGF0aWNfY2FzdDxOYXZpZ2F0
b3IqPihpbXBsKCkpOworICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIpOworCisgICAgaWYgKG5lZWRzWW91
VHViZVF1aXJrKGV4ZWMsIGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIiKTsKKyAg
ICByZXR1cm4ganNTdHJpbmcoaW1wLT5hcHBWZXJzaW9uKCkpOworfQorCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kN2FlNGQzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQbHVnaW5BcnJheS5oIgor
CisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2luQXJyYXkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCitib29sIEpTUGx1
Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW5BcnJheSogcGx1
Z2luQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
cGx1Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1Zh
bHVlKiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1BsdWdpbkFycmF5KiB0aGlzT2JqID0gc3RhdGlj
X2Nhc3Q8SlNQbHVnaW5BcnJheSo+KHNsb3Quc2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMo
ZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU3MDc5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApAQCAtMCwwICsxLDQwIEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQbHVnaW4uaCIKKworI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jvb2wgSlNQbHVnaW46OmNhbkdldEl0
ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW4qIHBsdWdpbiwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW4tPmNhbkdldEl0ZW1zRm9yTmFtZShw
cm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNQbHVnaW4qIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHByb3BlcnR5TmFtZSkp
OworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3Iu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmU5ZmJiZC4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19uYXZpZ2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIwICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRpbkBrZGUub3Jn
KQotICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2NoaW1taUBrZGUu
b3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAia2pzX25hdmlnYXRvci5o
IgotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCi0j
aW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiTGFuZ3VhZ2UuaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJranNfd2luZG93LmgiCi0jaW5jbHVkZSA8a2pzL29i
amVjdF9vYmplY3QuaD4KLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STQotI2lm
IFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oUFBDKQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRP
Ul9QTEFURk9STSAiTWFjUFBDIgotI2VsaWYgUExBVEZPUk0oTUFDKSAmJiBQTEFURk9STShYODYp
Ci0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJNYWNJbnRlbCIKLSNlbGlmIFBM
QVRGT1JNKFdJTl9PUykKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIldpbjMy
IgotI2Vsc2UKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIiIKLSNlbmRpZgot
I2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STQotCi0jaWZuZGVmIFdF
QkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VCAiR2Vja28iCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QKLQot
I2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgotI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9QUk9EVUNUX1NVQiAiMjAwMzAxMDciCi0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVf
TkFWSUdBVE9SX1BST0RVQ1RfU1VCCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9S
Ci0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUiAiQXBwbGUgQ29tcHV0ZXIsIEluYy4i
Ci0jZW5kaWYgLy8gaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgotCi0jaWZuZGVmIFdF
QkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfVkVO
RE9SX1NVQiAiIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VC
Ci0KLXVzaW5nIG5hbWVzcGFjZSBLSlM7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgUGx1Z2luQmFzZSA6IHB1YmxpYyBET01PYmpl
Y3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luQmFzZShFeGVjU3RhdGUqKTsKLSAgICAg
ICAgdmlydHVhbCB+UGx1Z2luQmFzZSgpOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIHZvaWQg
cmVmcmVzaChib29sIHJlbG9hZCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8
UGx1Z2luSW5mbyo+KiBwbHVnaW5zOwotICAgICAgICBzdGF0aWMgVmVjdG9yPE1pbWVDbGFzc0lu
Zm8qPiogbWltZXM7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgaW50IG1fcGx1Z0lu
Q2FjaGVSZWZDb3VudDsKLSAgICB9OwotCi0KLSAgICBjbGFzcyBQbHVnaW5zIDogcHVibGljIFBs
dWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2lucyhFeGVjU3RhdGUqIGV4ZWMp
IDogUGx1Z2luQmFzZShleGVjKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgICAgIEpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0
IHsgcmV0dXJuICZpbmZvOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsK
LSAgICAgICAgZW51bSB7IExlbmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBK
U1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJv
cGVydHlTbG90Jik7Ci0gICAgfTsKLQotICAgIEpTVmFsdWUqIHBsdWdpbnNGdW5jdGlvblJlZnJl
c2goRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci0KLSAgICBjbGFzcyBNaW1l
VHlwZXMgOiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlw
ZXMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykgeyB9OwotICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTGVuZ3RoIH07Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIGluZGV4R2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgICAgICBz
dGF0aWMgSlNWYWx1ZSogbmFtZUdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB9OwotCi0gICAgY2xhc3MgUGx1
Z2luIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUGx1Z2luKEV4
ZWNTdGF0ZSogZXhlYywgUGx1Z2luSW5mbyogaW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2lu
Zm8oaW5mbykgeyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1Zh
bHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQotICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVu
dW0geyBOYW1lLCBGaWxlbmFtZSwgRGVzY3JpcHRpb24sIExlbmd0aCB9OwotICAgIHByaXZhdGU6
Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgc3Rh
dGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0KLSAgICAgICAgUGx1Z2luSW5mbyogbV9p
bmZvOwotICAgIH07Ci0KLSAgICBjbGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBQbHVnaW5CYXNlIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIE1pbWVUeXBlKEV4ZWNTdGF0ZSogZXhlYywgTWltZUNsYXNz
SW5mbyogaW5mbykgOiBQbHVnaW5CYXNlKGV4ZWMpLCBtX2luZm8oaW5mbykgeyB9Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0
aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVudW0geyBUeXBlLCBTdWZmaXhlcywg
RGVzY3JpcHRpb24sIEVuYWJsZWRQbHVnaW4gfTsKLSAgICBwcml2YXRlOgotICAgICAgICBNaW1l
Q2xhc3NJbmZvKiBtX2luZm87Ci0gICAgfTsKLQotfQotCi0jaW5jbHVkZSAia2pzX25hdmlnYXRv
ci5sdXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jb25zdCBDbGFzc0luZm8gUGx1Z2lu
czo6aW5mbyA9IHsgIlBsdWdpbkFycmF5IiwgMCwgJlBsdWdpbnNUYWJsZSB9OwotY29uc3QgQ2xh
c3NJbmZvIE1pbWVUeXBlczo6aW5mbyA9IHsgIk1pbWVUeXBlQXJyYXkiLCAwLCAmTWltZVR5cGVz
VGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBQbHVnaW46OmluZm8gPSB7ICJQbHVnaW4iLCAwLCAm
UGx1Z2luVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBNaW1lVHlwZTo6aW5mbyA9IHsgIk1pbWVU
eXBlIiwgMCwgJk1pbWVUeXBlVGFibGUgfTsKLQotVmVjdG9yPFBsdWdpbkluZm8qPiogUGx1Z2lu
QmFzZTo6cGx1Z2lucyA9IDA7Ci1WZWN0b3I8TWltZUNsYXNzSW5mbyo+KiBQbHVnaW5CYXNlOjpt
aW1lcyA9IDA7Ci1pbnQgUGx1Z2luQmFzZTo6bV9wbHVnSW5DYWNoZVJlZkNvdW50ID0gMDsKLQot
Y29uc3QgQ2xhc3NJbmZvIE5hdmlnYXRvcjo6aW5mbyA9IHsgIk5hdmlnYXRvciIsIDAsICZOYXZp
Z2F0b3JUYWJsZSB9OwotLyoKLUBiZWdpbiBOYXZpZ2F0b3JUYWJsZSAxMwotICBhcHBDb2RlTmFt
ZSAgIE5hdmlnYXRvcjo6QXBwQ29kZU5hbWUgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJl
YWRPbmx5Ci0gIGFwcE5hbWUgICAgICAgTmF2aWdhdG9yOjpBcHBOYW1lICAgICAgICAgICAgICAg
ICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgYXBwVmVyc2lvbiAgICBOYXZpZ2F0b3I6OkFw
cFZlcnNpb24gICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBsYW5ndWFn
ZSAgICAgIE5hdmlnYXRvcjo6TGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
fFJlYWRPbmx5Ci0gIHVzZXJBZ2VudCAgICAgTmF2aWdhdG9yOjpVc2VyQWdlbnQgICAgICAgICAg
ICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcGxhdGZvcm0gICAgICBOYXZpZ2F0b3I6
OlBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBwbHVn
aW5zICAgICAgIE5hdmlnYXRvcjo6X1BsdWdpbnMgICAgICAgICAgICAgICAgICAgICBEb250RGVs
ZXRlfFJlYWRPbmx5Ci0gIG1pbWVUeXBlcyAgICAgTmF2aWdhdG9yOjpfTWltZVR5cGVzICAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcHJvZHVjdCAgICAgICBOYXZpZ2F0
b3I6OlByb2R1Y3QgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBw
cm9kdWN0U3ViICAgIE5hdmlnYXRvcjo6UHJvZHVjdFN1YiAgICAgICAgICAgICAgICAgICBEb250
RGVsZXRlfFJlYWRPbmx5Ci0gIHZlbmRvciAgICAgICAgTmF2aWdhdG9yOjpWZW5kb3IgICAgICAg
ICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgdmVuZG9yU3ViICAgICBOYXZp
Z2F0b3I6OlZlbmRvclN1YiAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBjb29raWVFbmFibGVkIE5hdmlnYXRvcjo6Q29va2llRW5hYmxlZCAgICAgICAgICAgICAgICBE
b250RGVsZXRlfFJlYWRPbmx5Ci0gIGphdmFFbmFibGVkICAgbmF2aWdhdG9yUHJvdG9GdW5jSmF2
YUVuYWJsZWQgIERvbnREZWxldGV8RnVuY3Rpb24gMAotQGVuZAotKi8KLQotTmF2aWdhdG9yOjpO
YXZpZ2F0b3IoSlNPYmplY3QqIHByb3RvdHlwZSwgRnJhbWUqIGZyYW1lKQotICAgIDogRE9NT2Jq
ZWN0KHByb3RvdHlwZSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi17Ci19Ci0KLWJvb2wgTmF2aWdh
dG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgcmV0dXJuIGdldFN0YXRp
Y1Byb3BlcnR5U2xvdDxOYXZpZ2F0b3IsIEpTT2JqZWN0PihleGVjLCAmTmF2aWdhdG9yVGFibGUs
IHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLXN0YXRpYyBib29sIG5lZWRzWW91VHVi
ZVF1aXJrKEV4ZWNTdGF0ZSosIEZyYW1lKik7Ci0KLSNpZiAhUExBVEZPUk0oV0lOKQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgbmVlZHNZb3VUdWJlUXVpcmsoRXhlY1N0YXRlKiwgRnJhbWUqKQotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJl
UXVpcmsoRXhlY1N0YXRlKiBleGVjLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgLy8gVGhpcyBxdWly
ayB3b3JrcyBhcm91bmQgYSBtaXN0YWtlbiBjaGVjayBpbiBhbiBhZCBhdCB5b3V0dWJlLmNvbS4K
LSAgICAvLyBUaGVyZSdzIGEgZnVuY3Rpb24gY2FsbGVkIGlzU2FmYXJpIHRoYXQgcmV0dXJucyBm
YWxzZSBpZiB0aGUgZnVuY3Rpb24KLSAgICAvLyBjYWxsZWQgaXNXaW5kb3dzIHJldHVybnMgdHJ1
ZTsgdGh1cyB0aGUgc2l0ZSBtYWxmdW5jdGlvbnMgd2l0aCBXaW5kb3dzIFNhZmFyaS4KLQotICAg
IC8vIERvIHRoZSBxdWlyayBvbmx5IGlmIHRoZSBmdW5jdGlvbidzIG5hbWUgaXMgImlzV2luZG93
cyIuCi0gICAgRnVuY3Rpb25JbXAqIGZ1bmN0aW9uID0gZXhlYy0+ZnVuY3Rpb24oKTsKLSAgICBp
ZiAoIWZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0IElk
ZW50aWZpZXImIGlzV2luZG93c0Z1bmN0aW9uTmFtZSA9ICpuZXcgSWRlbnRpZmllcigiaXNXaW5k
b3dzIik7Ci0gICAgaWYgKGZ1bmN0aW9uLT5mdW5jdGlvbk5hbWUoKSAhPSBpc1dpbmRvd3NGdW5j
dGlvbk5hbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvIHRoZSBxdWlyayBv
bmx5IGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYW4gImlzU2FmYXJpIiBmdW5jdGlvbi4K
LSAgICAvLyBIb3dldmVyLCB0aGF0IGZ1bmN0aW9uIGlzIG5vdCBpdHNlbGYgbmFtZWQgLS0gaXQg
aXMgc3RvcmVkIGluIHRoZSBpc1NhZmFyaQotICAgIC8vIHByb3BlcnR5LCB0aG91Z2gsIHNvIHRo
YXQncyBob3cgd2UgcmVjb2duaXplIGl0LgotICAgIEV4ZWNTdGF0ZSogY2FsbGluZ0V4ZWMgPSBl
eGVjLT5jYWxsaW5nRXhlY1N0YXRlKCk7Ci0gICAgaWYgKCFjYWxsaW5nRXhlYykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIEZ1bmN0aW9uSW1wKiBjYWxsaW5nRnVuY3Rpb24gPSBjYWxsaW5n
RXhlYy0+ZnVuY3Rpb24oKTsKLSAgICBpZiAoIWNhbGxpbmdGdW5jdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gY2FsbGluZ0V4ZWMtPnRoaXNW
YWx1ZSgpOwotICAgIGlmICghdGhpc09iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdCBJZGVudGlmaWVyJiBpc1NhZmFyaUZ1bmN0aW9uTmFtZSA9ICpuZXcgSWRl
bnRpZmllcigiaXNTYWZhcmkiKTsKLSAgICBKU1ZhbHVlKiBpc1NhZmFyaUZ1bmN0aW9uID0gdGhp
c09iamVjdC0+Z2V0RGlyZWN0KGlzU2FmYXJpRnVuY3Rpb25OYW1lKTsKLSAgICBpZiAoaXNTYWZh
cmlGdW5jdGlvbiAhPSBjYWxsaW5nRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOyAKLSAgICAvLyBGSVhN
RTogVGhlIGRvY3VtZW50IGlzIG5ldmVyIG51bGwsIHNvIHdlIHNob3VsZCByZW1vdmUgdGhpcyBj
aGVjayBhbG9uZyB3aXRoIHRoZQotICAgIC8vIG90aGVyIHNpbWlsYXIgb25lcyBpbiB0aGlzIGZp
bGUgd2hlbiB3ZSBhcmUgYWJzb2x1dGVseSBzdXJlIGl0J3Mgc2FmZS4KLSAgICBpZiAoIWRvY3Vt
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBv
biB0aGUgZnJvbnQgcGFnZSBvZiB0aGUgZ2xvYmFsIHZlcnNpb24gb2YgWW91VHViZS4KLSAgICBj
b25zdCBLVVJMJiB1cmwgPSBkb2N1bWVudC0+dXJsKCk7Ci0gICAgaWYgKHVybC5ob3N0KCkgIT0g
InlvdXR1YmUuY29tIiAmJiB1cmwuaG9zdCgpICE9ICJ3d3cueW91dHViZS5jb20iKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHVybC5wYXRoKCkgIT0gIi8iKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBBcyB3aXRoIG90aGVyIHNpdGUtc3BlY2lmaWMgcXVpcmtzLCBh
bGxvdyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gdHVybiB0aGlzIG9mZi4KLSAgICAvLyBJbiB0aGVv
cnksIHRoaXMgYWxsb3dzIHdlYnNpdGUgZGV2ZWxvcGVycyB0byBjaGVjayBpZiB0aGVpciBmaXhl
cyBhcmUgZWZmZWN0aXZlLgotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5n
cygpOyAKLSAgICBpZiAoIXNldHRpbmdzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFzZXR0aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNlbmRpZgotCi1KU1ZhbHVlKiBOYXZpZ2F0
b3I6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17
Ci0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBBcHBDb2RlTmFtZToKLSAgICByZXR1cm4ganNT
dHJpbmcoIk1vemlsbGEiKTsKLSAgY2FzZSBBcHBOYW1lOgotICAgIHJldHVybiBqc1N0cmluZygi
TmV0c2NhcGUiKTsKLSAgY2FzZSBBcHBWZXJzaW9uOiB7Ci0gICAgaWYgKG5lZWRzWW91VHViZVF1
aXJrKGV4ZWMsIG1fZnJhbWUpKQotICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIpOwotICAgIC8v
IFZlcnNpb24gaXMgZXZlcnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUg
Ik1vemlsbGEvIiBwcmVmaXguCi0gICAgY29uc3QgU3RyaW5nIHVzZXJBZ2VudCA9IG1fZnJhbWUt
PmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpIDogS1VSTCgpKTsKLSAgICByZXR1cm4ganNTdHJpbmcodXNlckFnZW50LnN1
YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSkpOwotICB9Ci0gIGNhc2UgUHJvZHVjdDoK
LSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVCk7Ci0gIGNhc2Ug
UHJvZHVjdFN1YjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVD
VF9TVUIpOwotICBjYXNlIFZlbmRvcjoKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09SRV9OQVZJ
R0FUT1JfVkVORE9SKTsKLSAgY2FzZSBWZW5kb3JTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdF
QkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIpOwotICBjYXNlIExhbmd1YWdlOgotICAgIHJldHVy
biBqc1N0cmluZyhkZWZhdWx0TGFuZ3VhZ2UoKSk7Ci0gIGNhc2UgVXNlckFnZW50OgotICAgIHJl
dHVybiBqc1N0cmluZyhtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSkpOwotICBjYXNlIFBs
YXRmb3JtOgotICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05BVklHQVRPUl9QTEFURk9STSk7
Ci0gIGNhc2UgX1BsdWdpbnM6Ci0gICAgcmV0dXJuIG5ldyBQbHVnaW5zKGV4ZWMpOwotICBjYXNl
IF9NaW1lVHlwZXM6Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZXMoZXhlYyk7Ci0gIGNhc2UgQ29v
a2llRW5hYmxlZDoKLSAgICByZXR1cm4ganNCb29sZWFuKGNvb2tpZXNFbmFibGVkKG1fZnJhbWUt
PmRvY3VtZW50KCkpKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZv
aWQgUGx1Z2luQmFzZTo6Y2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKQotewotICAgIGlmICgh
cGx1Z2lucykgewotICAgICAgICBwbHVnaW5zID0gbmV3IFZlY3RvcjxQbHVnaW5JbmZvKj47Ci0g
ICAgICAgIG1pbWVzID0gbmV3IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj47Ci0gICAgICAgIAotICAg
ICAgICAvLyByZWFkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgUGx1Z2luSW5mb1N0b3JlIGM7Ci0g
ICAgICAgIHVuc2lnbmVkIHBsdWdpbkNvdW50ID0gYy5wbHVnaW5Db3VudCgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcGx1Z2luQ291bnQ7IG4rKykgewotICAgICAgICAgICAg
UGx1Z2luSW5mbyogcGx1Z2luID0gYy5jcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleChu
KTsKLSAgICAgICAgICAgIGlmICghcGx1Z2luKSAKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgcGx1Z2lucy0+YXBwZW5kKHBsdWdpbik7Ci0gICAg
ICAgICAgICBpZiAocGx1Z2luLT5taW1lcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46
Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbi0+bWltZXMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbi0+bWltZXMuYmVnaW4o
KTsgaXRyICE9IGVuZDsgaXRyKyspCi0gICAgICAgICAgICAgICAgbWltZXMtPmFwcGVuZCgqaXRy
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotUGx1Z2luQmFzZTo6UGx1Z2luQmFzZShFeGVjU3Rh
dGUqIGV4ZWMpCi0gICAgOiBET01PYmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5v
YmplY3RQcm90b3R5cGUoKSkKLXsKLSAgICBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwot
ICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudCsrOwotfQotCi1QbHVnaW5CYXNlOjp+UGx1Z2luQmFz
ZSgpCi17Ci0gICAgbV9wbHVnSW5DYWNoZVJlZkNvdW50LS07Ci0gICAgaWYgKCFtX3BsdWdJbkNh
Y2hlUmVmQ291bnQpIHsKLSAgICAgICAgaWYgKHBsdWdpbnMpIHsKLSAgICAgICAgICAgIGRlbGV0
ZUFsbFZhbHVlcygqcGx1Z2lucyk7Ci0gICAgICAgICAgICBkZWxldGUgcGx1Z2luczsKLSAgICAg
ICAgICAgIHBsdWdpbnMgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtaW1lcykgewotICAg
ICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAgICAgICBkZWxldGUgbWlt
ZXM7Ci0gICAgICAgICAgICBtaW1lcyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
UGx1Z2luQmFzZTo6cmVmcmVzaChib29sIHJlbG9hZCkKLXsKLSAgICBpZiAocGx1Z2lucykgewot
ICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAgICBkZWxldGUgcGx1Z2lu
czsKLSAgICAgICAgcGx1Z2lucyA9IDA7Ci0gICAgfQotICAgIGlmIChtaW1lcykgewotICAgICAg
ICBkZWxldGVBbGxWYWx1ZXMoKm1pbWVzKTsKLSAgICAgICAgZGVsZXRlIG1pbWVzOwotICAgICAg
ICBtaW1lcyA9IDA7Ci0gICAgfQotICAgIAotICAgIHJlZnJlc2hQbHVnaW5zKHJlbG9hZCk7Ci0g
ICAgY2FjaGVQbHVnaW5EYXRhSWZOZWNlc3NhcnkoKTsKLX0KLQotCi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQot
LyoKLUBiZWdpbiBQbHVnaW5zVGFibGUgMgotICBsZW5ndGggICAgICAgIFBsdWdpbnM6Okxlbmd0
aCAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgcmVmcmVzaCAg
ICAgICBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1
bmN0aW9uIDAKLUBlbmQKLSovCi0KLUpTVmFsdWUqIFBsdWdpbnM6OmdldFZhbHVlUHJvcGVydHko
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBM
ZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIocGx1Z2lucy0+c2l6ZSgpKTsKLX0KLQotSlNWYWx1
ZSogUGx1Z2luczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2lu
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIHBsdWdpbnMtPmF0KHNs
b3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBQbHVnaW5zOjpuYW1lR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcg
YXRvbWljUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZlY3RvcjxQbHVnaW5JbmZv
Kj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdpbnMtPmVuZCgpOwotICAgIGZvciAoVmVjdG9yPFBsdWdp
bkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsgaXRyICE9IGVuZDsgaXRy
KyspIHsKLSAgICAgICAgUGx1Z2luSW5mbyogcGwgPSAqaXRyOwotICAgICAgICBpZiAocGwtPm5h
bWUgPT0gYXRvbWljUHJvcGVydHlOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW4o
ZXhlYywgcGwpOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBQ
bHVnaW5zOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkoJlBsdWdpbnNUYWJsZSwgcHJvcGVydHlO
YW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9u
KQotICAgICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNGdW5jdGlv
bkdldHRlcik7Ci0gICAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywg
ZW50cnksIHN0YXRpY1ZhbHVlR2V0dGVyPFBsdWdpbnM+KTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpbnNbI10KLSAgICAgICAgYm9vbCBvazsKLSAg
ICAgICAgdW5zaWduZWQgaW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKLSAgICAg
ICAgaWYgKG9rICYmIGkgPCBwbHVnaW5zLT5zaXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBwbHVnaW5bbmFtZV0KLSAgICAgICAgQXRvbWlj
U3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9y
PFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgZW5kID0gcGx1Z2lucy0+ZW5kKCk7Ci0gICAgICAgIGZv
ciAoVmVjdG9yPFBsdWdpbkluZm8qPjo6aXRlcmF0b3IgaXRyID0gcGx1Z2lucy0+YmVnaW4oKTsg
aXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgICAgIGlmICgoKml0ciktPm5hbWUgPT0gYXRv
bWljUHJvcGVydHlOYW1lKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywg
bmFtZUdldHRlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gUGx1Z2luQmFzZTo6Z2V0T3duUHJvcGVy
dHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0v
KgotQGJlZ2luIE1pbWVUeXBlc1RhYmxlIDEKLSAgbGVuZ3RoICAgICAgICBNaW1lVHlwZXM6Okxl
bmd0aCAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1AZW5kCi0qLwotCi1KU1ZhbHVlKiBNaW1l
VHlwZXM6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Ci17Ci0gIEFTU0VSVCh0b2tlbiA9PSBMZW5ndGgpOwotICByZXR1cm4ganNOdW1iZXIobWltZXMt
PnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIE1pbWVUeXBlczo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBuZXcgTWlt
ZVR5cGUoZXhlYywgbWltZXMtPmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1ZhbHVlKiBNaW1l
VHlwZXM6Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2luYWxPYmpl
Y3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBz
bG90KQotewotICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5h
bWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVu
ZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWlt
ZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgIE1pbWVDbGFzc0luZm8q
IG0gPSAoKml0cik7Ci0gICAgICAgIGlmIChtLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgbSk7Ci0gICAgfQotICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIE1pbWVUeXBlczo6Z2V0T3duUHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KCZNaW1lVHlwZXNUYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkp
IHsKLSAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1ZhbHVlR2V0
dGVyPE1pbWVUeXBlcz4pOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gbWltZVR5cGVzWyNdCi0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBpID0gcHJvcGVydHlOYW1lLnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwg
bWltZXMtPnNpemUoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRleCh0aGlzLCBp
LCBpbmRleEdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIG1pbWVUeXBlc1tuYW1lXQotICAgICAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgICAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+
OjppdGVyYXRvciBlbmQgPSBtaW1lcy0+ZW5kKCk7Ci0gICAgICAgIGZvciAoVmVjdG9yPE1pbWVD
bGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbWltZXMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0
cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFt
ZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVn
aW4gUGx1Z2luVGFibGUgNAotICBuYW1lICAgICAgICAgIFBsdWdpbjo6TmFtZSAgICAgICAgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKLSAgZmlsZW5hbWUgICAgICBQbHVnaW46OkZpbGVuYW1lICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRlc2NyaXB0aW9uICAgUGx1Z2luOjpEZXNjcmlw
dGlvbiAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBsZW5ndGggICAgICAgIFBsdWdpbjo6TGVu
Z3RoICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLUBlbmQKLSovCi0KLUpTVmFsdWUqIFBs
dWdpbjo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBOYW1lOgotICAgICAgICByZXR1cm4g
anNTdHJpbmcobV9pbmZvLT5uYW1lKTsKLSAgICBjYXNlIEZpbGVuYW1lOgotICAgICAgICByZXR1
cm4ganNTdHJpbmcobV9pbmZvLT5maWxlKTsKLSAgICBjYXNlIERlc2NyaXB0aW9uOgotICAgICAg
ICByZXR1cm4ganNTdHJpbmcobV9pbmZvLT5kZXNjKTsKLSAgICBjYXNlIExlbmd0aDogCi0gICAg
ICAgIHJldHVybiBqc051bWJlcihtX2luZm8tPm1pbWVzLnNpemUoKSk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUKDApOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbjo6aW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogb3JpZ2luYWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIFBsdWdpbiogdGhpc09iaiA9IHN0YXRpY19j
YXN0PFBsdWdpbio+KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgcmV0dXJuIG5ldyBNaW1lVHlwZShl
eGVjLCB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmF0KHNsb3QuaW5kZXgoKSkpOwotfQotCi1KU1Zh
bHVlKiBQbHVnaW46Om5hbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb3JpZ2lu
YWxPYmplY3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90KQotewotICAgIFBsdWdpbiogdGhpc09iaiA9IHN0YXRpY19jYXN0PFBsdWdpbio+
KHNsb3Quc2xvdEJhc2UoKSk7Ci0gICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZTsKLSAgICBWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQg
PSB0aGlzT2JqLT5tX2luZm8tPm1pbWVzLmVuZCgpOwotICAgIGZvciAoVmVjdG9yPE1pbWVDbGFz
c0luZm8qPjo6aXRlcmF0b3IgaXRyID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5iZWdpbigpOyBp
dHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtID0gKCppdHIpOwot
ICAgICAgICBpZiAobS0+dHlwZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG0pOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQotCi1ib29sIFBsdWdpbjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQbHVn
aW5UYWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoZW50cnkpIHsKLSAgICAgICAgc2xvdC5z
ZXRTdGF0aWNFbnRyeSh0aGlzLCBlbnRyeSwgc3RhdGljVmFsdWVHZXR0ZXI8UGx1Z2luPik7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHBsdWdpblsjXQot
ICAgICAgICBib29sIG9rOwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50
b1VJbnQzMigmb2spOwotICAgICAgICBpZiAob2sgJiYgaSA8IG1faW5mby0+bWltZXMuc2l6ZSgp
KSB7Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVy
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1
Z2luWyJuYW1lIl0KLSAgICAgICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHBy
b3BlcnR5TmFtZTsKLSAgICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5k
ID0gbV9pbmZvLT5taW1lcy5lbmQoKTsKLSAgICAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5m
byo+OjppdGVyYXRvciBpdHIgPSBtX2luZm8tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0
cisrKSB7Ci0gICAgICAgICAgICBpZiAoKCppdHIpLT50eXBlID09IGF0b21pY1Byb3BlcnR5TmFt
ZSkgewotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIFBsdWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi1A
YmVnaW4gTWltZVR5cGVUYWJsZSA0Ci0gIHR5cGUgICAgICAgICAgTWltZVR5cGU6OlR5cGUgICAg
ICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBzdWZmaXhlcyAgICAgIE1pbWVUeXBlOjpTdWZm
aXhlcyAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgZGVzY3JpcHRpb24gICBNaW1lVHlwZTo6
RGVzY3JpcHRpb24gICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGVuYWJsZWRQbHVnaW4gTWltZVR5
cGU6OkVuYWJsZWRQbHVnaW4gRG9udERlbGV0ZXxSZWFkT25seQotQGVuZAotKi8KLQotSlNWYWx1
ZSogTWltZVR5cGU6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVHlwZToKLSAgICAgICAg
cmV0dXJuIGpzU3RyaW5nKG1faW5mby0+dHlwZSk7Ci0gICAgY2FzZSBTdWZmaXhlczoKLSAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+c3VmZml4ZXMpOwotICAgIGNhc2UgRGVzY3JpcHRp
b246Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPmRlc2MpOwotICAgIGNhc2UgRW5h
YmxlZFBsdWdpbjogewotICAgICAgICBGcmFtZSogZnJhbWUgPSBXaW5kb3c6OnJldHJpZXZlQWN0
aXZlKGV4ZWMpLT5pbXBsKCktPmZyYW1lKCk7Ci0gICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAg
ICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAo
c2V0dGluZ3MgJiYgc2V0dGluZ3MtPmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbmV3IFBsdWdpbihleGVjLCBtX2luZm8tPnBsdWdpbik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWltZVR5cGU6Omdl
dE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1
ZVNsb3Q8TWltZVR5cGUsIFBsdWdpbkJhc2U+KGV4ZWMsICZNaW1lVHlwZVRhYmxlLCB0aGlzLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1KU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIFBs
dWdpbkJhc2U6OnJlZnJlc2goYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJs
ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCi17Ci0g
ICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTmF2aWdhdG9yOjppbmZvKSkKLSAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICBOYXZpZ2F0b3IqIG5hdiA9IHN0
YXRpY19jYXN0PE5hdmlnYXRvcio+KHRoaXNPYmopOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG5hdi0+ZnJhbWUoKSA/IG5hdi0+ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJu
IGpzQm9vbGVhbihzZXR0aW5ncyAmJiBzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmln
YXRvci5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUxNmY3ZWEuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ranNfbmF2aWdhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICog
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaWZuZGVmIGtqc19uYXZpZ2F0b3JfaAotI2Rl
ZmluZSBranNfbmF2aWdhdG9yX2gKLQotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEZyYW1lOwotCi0gICAgY2xhc3MgTmF2aWdhdG9y
IDogcHVibGljIERPTU9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBOYXZpZ2F0b3IoS0pT
OjpKU09iamVjdCogcHJvdG90eXBlLCBGcmFtZSopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoS0pTOjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXIm
LCBLSlM6OlByb3BlcnR5U2xvdCYpOwotICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJv
cGVydHkoS0pTOjpFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IGNvbnN0IEtKUzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQotICAgICAgICBzdGF0aWMgY29uc3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgICAgICBl
bnVtIHsgQXBwQ29kZU5hbWUsIEFwcE5hbWUsIEFwcFZlcnNpb24sIExhbmd1YWdlLCBVc2VyQWdl
bnQsIFBsYXRmb3JtLAotICAgICAgICAgICAgICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1
Y3QsIFByb2R1Y3RTdWIsIFZlbmRvciwgVmVuZG9yU3ViLCBDb29raWVFbmFibGVkIH07Ci0KLSAg
ICAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0gICAgfTsKLQotICAgIEtKUzo6SlNWYWx1
ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpT
T2JqZWN0KiwgY29uc3QgS0pTOjpMaXN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMva2pzX3dpbmRvdy5jcHAKaW5kZXggYTNmYWRiMC4uMTI2YmQ4OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc193aW5kb3cuY3BwCkBAIC01MCw3ICs1MCw2IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhdXNlZFRpbWVvdXRzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3Jl
ZW4uaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKQEAgLTU5LDcgKzU4LDYgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1
ZGUgImtqc19jc3MuaCIKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCi0jaW5jbHVkZSAia2pzX25h
dmlnYXRvci5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJ
bmxpbmUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTY0LDggKzE2Miw2IEBA
IGNvbnN0IENsYXNzSW5mbyBXaW5kb3c6OmluZm8gPSB7ICJXaW5kb3ciLCAwLCAmV2luZG93VGFi
bGUgfTsKICAgY3J5cHRvICAgICAgICAgICAgICAgIFdpbmRvdzo6Q3J5cHRvICAgICAgICAgICAg
ICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGV2ZW50ICAgICAgICAgICAgICAgICBXaW5kb3c6OkV2
ZW50XyAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBsb2NhdGlvbiAgICAgICAgICAgICAgV2lu
ZG93OjpMb2NhdGlvbl8gICAgICAgICAgIERvbnREZWxldGUKLSAgbmF2aWdhdG9yICAgICAgICAg
ICAgIFdpbmRvdzo6TmF2aWdhdG9yXyAgICAgICAgICBEb250RGVsZXRlCi0gIGNsaWVudEluZm9y
bWF0aW9uICAgICBXaW5kb3c6OkNsaWVudEluZm9ybWF0aW9uICAgRG9udERlbGV0ZQogIyAtLSBF
dmVudCBMaXN0ZW5lcnMgLS0KICAgb25hYm9ydCAgICAgICAgICAgICAgIFdpbmRvdzo6T25hYm9y
dCAgICAgICAgICAgICBEb250RGVsZXRlCiAgIG9uYmx1ciAgICAgICAgICAgICAgICBXaW5kb3c6
Ok9uYmx1ciAgICAgICAgICAgICAgRG9udERlbGV0ZQpAQCAtNDgwLDE4ICs0NzYsNiBAQCBKU1Zh
bHVlICpXaW5kb3c6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiAgICAgICByZXR1cm4gdG9KUyhleGVjLCBkLT5tX2V2dCk7CiAgICAgY2FzZSBMb2Nh
dGlvbl86CiAgICAgICByZXR1cm4gbG9jYXRpb24oKTsKLSAgICBjYXNlIE5hdmlnYXRvcl86Ci0g
ICAgY2FzZSBDbGllbnRJbmZvcm1hdGlvbjogewotICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIC8vIFN0b3JlIHRo
ZSBuYXZpZ2F0b3IgaW4gdGhlIG9iamVjdCBzbyB3ZSBnZXQgdGhlIHNhbWUgb25lIGVhY2ggdGlt
ZS4KLSAgICAgIE5hdmlnYXRvciogbiA9IG5ldyBOYXZpZ2F0b3IoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSwgaW1wbCgpLT5mcmFtZSgpKTsKLSAgICAgIC8v
IEZJWE1FOiB0aGlzIHdpbGwgbWFrZSB0aGUgIm5hdmlnYXRvciIgb2JqZWN0IGFjY2Vzc2libGUg
ZnJvbSB3aW5kb3dzIHRoYXQgZmFpbAotICAgICAgLy8gdGhlIHNlY3VyaXR5IGNoZWNrIHRoZSBm
aXJzdCB0aW1lLCBidXQgbm90IHN1YnNlcXVlbnQgdGltZXMsIHNlZW1zIHdlaXJkLgotICAgICAg
Y29uc3RfY2FzdDxXaW5kb3cgKj4odGhpcyktPnB1dERpcmVjdCgibmF2aWdhdG9yIiwgbiwgRG9u
dERlbGV0ZSk7Ci0gICAgICBjb25zdF9jYXN0PFdpbmRvdyAqPih0aGlzKS0+cHV0RGlyZWN0KCJj
bGllbnRJbmZvcm1hdGlvbiIsIG4sIERvbnREZWxldGUpOwotICAgICAgcmV0dXJuIG47Ci0gICAg
fQogICAgIGNhc2UgSW1hZ2U6CiAgICAgICBpZiAoIWFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9icmlkZ2Uv
d2luL0ZyYW1lV2luLmNwcCBiL1dlYkNvcmUvYnJpZGdlL3dpbi9GcmFtZVdpbi5jcHAKaW5kZXgg
NjU5OWE4OC4uNjY2NjRlMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9icmlkZ2Uvd2luL0ZyYW1lV2lu
LmNwcAorKysgYi9XZWJDb3JlL2JyaWRnZS93aW4vRnJhbWVXaW4uY3BwCkBAIC00NCw3ICs0NCw2
IEBACiAjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJQbHVn
aW5EYXRhYmFzZS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKICNpbmNsdWRlICJSZWd1bGFy
RXhwcmVzc2lvbi5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcCBiL1dl
YkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKaW5kZXggNGM4MDhkMS4uMTNiODE1YSAxMDA3NTUKLS0t
IGEvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAorKysgYi9XZWJDb3JlL2RvbS9DbGlwYm9hcmQu
Y3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3Jl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwIGIvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCmlu
ZGV4IGRiMjc3ZDUuLjNlMWQ0ZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKQEAgLTM4
LDggKzM4LDggQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNp
bmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgog
I2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJUZXh0RG9jdW1lbnQuaCIKQEAgLTM2NiwxNiArMzY2LDIwIEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcm
IHR5cGUsIEZyYW1lCiAgICAgICAgIHJldHVybiBuZXcgRlRQRGlyZWN0b3J5RG9jdW1lbnQodGhp
cywgZnJhbWUpOwogI2VuZGlmCiAKKyAgICBQbHVnaW5EYXRhKiBwbHVnaW5EYXRhID0gMDsKKyAg
ICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGx1Z2luRGF0YSA9IGZyYW1l
LT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKwogICAgIC8vIFBERiBpcyBvbmUgaW1hZ2UgdHlwZSBm
b3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0LWluIHN1cHBvcnQuCiAgICAgLy8g
V2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3ZlciBhbGwgaW1hZ2UgdHlwZXMsIG9i
dmlvdXNseS4KLSAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgdHlwZSA9PSAi
dGV4dC9wZGYiKSAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUodHlwZSkpCisg
ICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8IHR5cGUgPT0gInRleHQvcGRmIikg
JiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c01pbWVUeXBlKHR5cGUpKQogICAg
ICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICBpZiAoSW1h
Z2U6OnN1cHBvcnRzVHlwZSh0eXBlKSkKICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZURvY3VtZW50
KHRoaXMsIGZyYW1lKTsKICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgZXhjZXB0IHRleHQvcGxhaW4g
Y2FuIGJlIG92ZXJyaWRkZW4gYnkgcGx1Z2lucy4gSW4gcGFydGljdWxhciwgQWRvYmUgU1ZHIFZp
ZXdlciBzaG91bGQgYmUgdXNlZCBmb3IgU1ZHLCBpZiBpbnN0YWxsZWQuCiAgICAgLy8gRGlzYWxs
b3dpbmcgcGx1Zy1pbnMgdG8gdXNlIHRleHQvcGxhaW4gcHJldmVudHMgcGx1Zy1pbnMgZnJvbSBo
aWphY2tpbmcgYSBmdW5kYW1lbnRhbCB0eXBlIHRoYXQgdGhlIGJyb3dzZXIgaXMgZXhwZWN0ZWQg
dG8gaGFuZGxlLAogICAgIC8vIGFuZCBhbHNvIHNlcnZlcyBhcyBhbiBvcHRpbWl6YXRpb24gdG8g
cHJldmVudCBsb2FkaW5nIHRoZSBwbHVnLWluIGRhdGFiYXNlIGluIHRoZSBjb21tb24gY2FzZS4K
LSAgICBpZiAodHlwZSAhPSAidGV4dC9wbGFpbiIgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBwb3J0
c01JTUVUeXBlKHR5cGUpKSAKKyAgICBpZiAodHlwZSAhPSAidGV4dC9wbGFpbiIgJiYgcGx1Z2lu
RGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c01pbWVUeXBlKHR5cGUpKSAKICAgICAgICAgcmV0
dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7CiAgICAgaWYgKGlzVGV4dE1JTUVU
eXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IFRleHREb2N1bWVudCh0aGlzLCBmcmFtZSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMDIzNzZiYS4uMjU1MTljOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcApAQCAtNjYsNyArNjYsNyBAQAogI2luY2x1ZGUgIk1haW5SZXNvdXJjZUxvYWRl
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKLSNpbmNsdWRl
ICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgpAQCAtMTU5Myw3ICsxNTkzLDkgQEAgYm9vbCBGcmFtZUxvYWRlcjo6c2hv
dWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9v
bAogICAgIC8vIEFsbG93IG90aGVyIHBsdWctaW5zIHRvIHdpbiBvdmVyIFF1aWNrVGltZSBiZWNh
dXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBwbHVnLWluIHRoYXQKICAgICAvLyBjYW4g
aGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGltZSBjYW4gYWxzbyBoYW5kbGUpIHRoZXkgcHJvYmFi
bHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCiAgICAgaWYgKChtaW1lVHlwZSA9PSAiaW1hZ2Uv
dGlmZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3RpZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3gt
dGlmZiIpKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gUGx1Z2luSW5mb1N0b3JlOjpw
bHVnaW5OYW1lRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICBTdHJpbmcgcGx1Z2luTmFt
ZTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBsdWdpbk5hbWUg
PSBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+cGx1Z2luTmFtZUZvck1pbWVUeXBlKG1p
bWVUeXBlKTsKICAgICAgICAgaWYgKCFwbHVnaW5OYW1lLmlzRW1wdHkoKSAmJiAhcGx1Z2luTmFt
ZS5jb250YWlucygiUXVpY2tUaW1lIiwgZmFsc2UpKSAKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMjJmNzQ4OS4uZWRiNWZiNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
aXN0b3J5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiTmF2aWdhdG9y
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE1NCw2ICsxNTUsMTAgQEAgdm9pZCBET01XaW5k
b3c6OmNsZWFyKCkKICAgICBpZiAobV9jb25zb2xlKQogICAgICAgICBtX2NvbnNvbGUtPmRpc2Nv
bm5lY3RGcmFtZSgpOwogICAgIG1fY29uc29sZSA9IDA7CisKKyAgICBpZiAobV9uYXZpZ2F0b3Ip
CisgICAgICAgIG1fbmF2aWdhdG9yLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICBtX25hdmlnYXRv
ciA9IDA7CiB9CiAKIFNjcmVlbiogRE9NV2luZG93OjpzY3JlZW4oKSBjb25zdApAQCAtMjE5LDYg
KzIyNCwxMyBAQCBDb25zb2xlKiBET01XaW5kb3c6OmNvbnNvbGUoKSBjb25zdAogICAgIHJldHVy
biBtX2NvbnNvbGUuZ2V0KCk7CiB9CiAKK05hdmlnYXRvciogRE9NV2luZG93OjpuYXZpZ2F0b3Io
KSBjb25zdAoreworICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAgIG1fbmF2aWdhdG9yID0g
TmF2aWdhdG9yOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbmF2aWdhdG9yLmdldCgp
OworfQorCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykKIHZvaWQgRE9NV2lu
ZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZG9t
YWluLCBjb25zdCBTdHJpbmcmIHVyaSwgRE9NV2luZG93KiBzb3VyY2UpIGNvbnN0CiB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmgKaW5kZXggYWRiNDczMS4uODE4ZmYxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDQsNiArNDQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAgIGNsYXNzIEZyYW1l
OwogICAgIGNsYXNzIEhpc3Rvcnk7CisgICAgY2xhc3MgTmF2aWdhdG9yOwogICAgIGNsYXNzIFNj
cmVlbjsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC02OSw2ICs3MCw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogc2Nyb2xsYmFycygpIGNvbnN0
OwogICAgICAgICBCYXJJbmZvKiBzdGF0dXNiYXIoKSBjb25zdDsKICAgICAgICAgQmFySW5mbyog
dG9vbGJhcigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0Owor
ICAgICAgICBOYXZpZ2F0b3IqIGNsaWVudEluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF2
aWdhdG9yKCk7IH0KIAogICAgICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpOwogCkBA
IC0xNzAsNiArMTczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxCYXJJbmZvPiBtX3N0YXR1c2JhcjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8QmFySW5m
bz4gbV90b29sYmFyOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxDb25zb2xlPiBtX2NvbnNvbGU7
CisgICAgICAgIG11dGFibGUgUmVmUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0b3I7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCA2NTVkNmFiLi45M2Zh
OTI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAorKysgYi9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNDQsNiArNDQsOCBAQCBtb2R1bGUgd2luZG93IHsKICAg
ICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzY3JvbGxiYXJzOwogICAgICAg
ICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBCYXJJbmZvIHN0YXR1c2JhcjsKICAgICAgICAgYXR0
cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyB0b29sYmFyOworICAgICAgICBhdHRyaWJ1dGUg
W1JlcGxhY2VhYmxlXSBOYXZpZ2F0b3IgbmF2aWdhdG9yOworICAgICAgICBhdHRyaWJ1dGUgW1Jl
cGxhY2VhYmxlXSBOYXZpZ2F0b3IgY2xpZW50SW5mb3JtYXRpb247CiAKICAgICAgICAgRE9NU2Vs
ZWN0aW9uIGdldFNlbGVjdGlvbigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA4ZWVj
NmUwLi4zYTNkYzk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUxLDcgKzUxLDYgQEAK
ICNpbmNsdWRlICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAyNTUyZWQ0Li5lYWEz
MTk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxl
bWVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1l
cy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDI0Yzk5
MDMuLmNhNzA3NzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCkBAIC05OSw2ICs5OSw3IEBAIGNsYXNzIEtKU1Byb3h5OwogY2xhc3Mg
S1VSTDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGx1Z2luRGF0YTsKIGNsYXNz
IFJhbmdlOwogY2xhc3MgUmVndWxhckV4cHJlc3Npb247CiBjbGFzcyBSZW5kZXJQYXJ0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvTmF2aWdh
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFiNTgxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTAsMCArMSwxNzMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRpbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2NoaW1t
aUBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiTmF2aWdhdG9yLmgiCisKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXku
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5Lmgi
CisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpZm5k
ZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KKyNpZiBQTEFURk9STShNQUMpICYmIFBMQVRG
T1JNKFBQQykKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIKKyNl
bGlmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2KQorI2RlZmluZSBXRUJDT1JFX05BVklH
QVRPUl9QTEFURk9STSAiTWFjSW50ZWwiCisjZWxpZiBQTEFURk9STShXSU5fT1MpCisjZGVmaW5l
IFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKKyNlbHNlCisjZGVmaW5lIFdFQkNP
UkVfTkFWSUdBVE9SX1BMQVRGT1JNICIiCisjZW5kaWYKKyNlbmRpZiAvLyBpZm5kZWYgV0VCQ09S
RV9OQVZJR0FUT1JfUExBVEZPUk0KKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNU
CisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgorI2VuZGlmIC8vIGlm
bmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJR0FU
T1JfUFJPRFVDVF9TVUIKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIw
MDMwMTA3IgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgor
CisjaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgorI2RlZmluZSBXRUJDT1JFX05BVklH
QVRPUl9WRU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMuIgorI2VuZGlmIC8vIGlmbmRlZiBXRUJD
T1JFX05BVklHQVRPUl9WRU5ET1IKKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1Jf
U1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKKyNlbmRpZiAvLyBp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworTmF2aWdhdG9yOjpOYXZpZ2F0b3IoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShm
cmFtZSkKK3sKK30KKworTmF2aWdhdG9yOjp+TmF2aWdhdG9yKCkKK3sKKyAgICBkaXNjb25uZWN0
RnJhbWUoKTsKK30KKwordm9pZCBOYXZpZ2F0b3I6OmRpc2Nvbm5lY3RGcmFtZSgpCit7CisgICAg
aWYgKG1fcGx1Z2lucykgeworICAgICAgICBtX3BsdWdpbnMtPmRpc2Nvbm5lY3RGcmFtZSgpOwor
ICAgICAgICBtX3BsdWdpbnMgPSAwOworICAgIH0KKyAgICBpZiAobV9taW1lVHlwZXMpIHsKKyAg
ICAgICAgbV9taW1lVHlwZXMtPmRpc2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBtX21pbWVUeXBl
cyA9IDA7CisgICAgfQorICAgIG1fZnJhbWUgPSAwOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjph
cHBDb2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3RyaW5n
IE5hdmlnYXRvcjo6YXBwTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJOZXRzY2FwZSI7Cit9
CisKK1N0cmluZyBOYXZpZ2F0b3I6OmFwcFZlcnNpb24oKSBjb25zdAoreworICAgIGlmICghbV9m
cmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIFZlcnNpb24gaXMgZXZlcnl0
aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVmaXgu
CisgICAgY29uc3QgU3RyaW5nICZ1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFn
ZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtV
UkwoKSk7CisgICAgcmV0dXJuIHVzZXJBZ2VudC5zdWJzdHJpbmcodXNlckFnZW50LmZpbmQoJy8n
KSArIDEpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpsYW5ndWFnZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRlZmF1bHRMYW5ndWFnZSgpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjp1c2VyQWdl
bnQoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnBsYXRmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJ
R0FUT1JfUExBVEZPUk07Cit9CisKK1BsdWdpbkFycmF5KiBOYXZpZ2F0b3I6OnBsdWdpbnMoKSBj
b25zdAoreworICAgIGlmICghbV9wbHVnaW5zKQorICAgICAgICBtX3BsdWdpbnMgPSBQbHVnaW5B
cnJheTo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX3BsdWdpbnMuZ2V0KCk7Cit9CisK
K01pbWVUeXBlQXJyYXkqIE5hdmlnYXRvcjo6bWltZVR5cGVzKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fbWltZVR5cGVzKQorICAgICAgICBtX21pbWVUeXBlcyA9IE1pbWVUeXBlQXJyYXk6OmNyZWF0
ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMuZ2V0KCk7Cit9CisKK1N0cmluZyBO
YXZpZ2F0b3I6OnByb2R1Y3QoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklHQVRP
Ul9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUI7Cit9CisKK1N0cmluZyBO
YXZpZ2F0b3I6OnZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdBVE9S
X1ZFTkRPUjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQjsKK30KKworYm9vbCBOYXZpZ2F0
b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRW5hYmxlZCht
X2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgcmV0
dXJuIG1fZnJhbWUtPnNldHRpbmdzKCktPmlzSmF2YUVuYWJsZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oIGIvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQzMjA3ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgTmF2aWdhdG9yX2gKKyNkZWZpbmUgTmF2aWdhdG9yX2gKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEZyYW1l
OworICAgIGNsYXNzIE1pbWVUeXBlQXJyYXk7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKyAgICBj
bGFzcyBQbHVnaW5BcnJheTsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBjbGFzcyBOYXZpZ2F0
b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxOYXZpZ2F0b3I+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE5hdmlnYXRvcj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IE5hdmlnYXRvcihmcmFtZSkpOyB9CisgICAgICAgIH5OYXZpZ2F0b3Io
KTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBGcmFtZSogZnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKKyAgICAgICAgU3RyaW5nIGFwcENvZGVO
YW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBhcHBOYW1lKCkgY29uc3Q7CisgICAgICAgIFN0
cmluZyBhcHBWZXJzaW9uKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSgpIGNvbnN0
OworICAgICAgICBTdHJpbmcgdXNlckFnZW50KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwbGF0
Zm9ybSgpIGNvbnN0OworICAgICAgICBQbHVnaW5BcnJheSogcGx1Z2lucygpIGNvbnN0OworICAg
ICAgICBNaW1lVHlwZUFycmF5KiBtaW1lVHlwZXMoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBy
b2R1Y3QoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHByb2R1Y3RTdWIoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIHZlbmRvcigpIGNvbnN0OworICAgICAgICBTdHJpbmcgdmVuZG9yU3ViKCkgY29u
c3Q7CisgICAgICAgIGJvb2wgY29va2llRW5hYmxlZCgpIGNvbnN0OworICAgICAgICBib29sIGph
dmFFbmFibGVkKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgorICAgICAgICBOYXZpZ2F0b3IoRnJh
bWUqKTsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIG11dGFibGUgUmVmUHRyPFBs
dWdpbkFycmF5PiBtX3BsdWdpbnM7CisgICAgICAgIG11dGFibGUgUmVmUHRyPE1pbWVUeXBlQXJy
YXk+IG1fbWltZVR5cGVzOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvTmF2aWdhdG9yLmlkbCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNzNhMDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbApAQCAtMCwwICsxLDM5IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAg
ICBpbnRlcmZhY2UgTmF2aWdhdG9yIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0
cmluZyBhcHBDb2RlTmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBh
cHBOYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gRE9NU3Ry
aW5nIGFwcFZlcnNpb247CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbGFu
Z3VhZ2U7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdXNlckFnZW50Owor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBsYXRmb3JtOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgUGx1Z2luQXJyYXkgcGx1Z2luczsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIE1pbWVUeXBlQXJyYXkgbWltZVR5cGVzOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHByb2R1Y3Q7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgcHJvZHVjdFN1YjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2
ZW5kb3I7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVuZG9yU3ViOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBjb29raWVFbmFibGVkOworICAgICAg
ICBib29sZWFuIGphdmFFbmFibGVkKCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGY2MGQwNWMuLjI4
ODMyOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkVkaXRv
ckNsaWVudC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRyYWdDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxl
ci5oIgpAQCAtMzUsNiArMzYsOCBAQAogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOYXZpZ2F0b3IuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUHJvZ3Jl
c3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0
aW9uQ29udHJvbGxlci5oIgpAQCAtMjA4LDYgKzIxMSwzOCBAQCB2b2lkIFBhZ2U6OnNldE5lZWRz
UmVhcHBseVN0eWxlcygpCiAgICAgICAgICAgICBmcmFtZS0+c2V0TmVlZHNSZWFwcGx5U3R5bGVz
KCk7CiB9CiAKK3ZvaWQgUGFnZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCByZWxvYWQpCit7CisgICAg
aWYgKCFhbGxQYWdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUGx1Z2luRGF0YTo6cmVmcmVz
aCgpOworCisgICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4gPiBmcmFtZXNOZWVkaW5nUmVsb2FkOwor
CisgICAgSGFzaFNldDxQYWdlKj46Oml0ZXJhdG9yIGVuZCA9IGFsbFBhZ2VzLT5lbmQoKTsKKyAg
ICBmb3IgKEhhc2hTZXQ8UGFnZSo+OjppdGVyYXRvciBpdCA9IGFsbFBhZ2VzLT5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgKCppdCktPm1fcGx1Z2luRGF0YSA9IDA7CisKKyAg
ICAgICAgaWYgKHJlbG9hZCkgeworICAgICAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAoKml0
KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4
dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lLT5sb2FkZXIoKS0+Y29udGFpbnNQbHVn
aW5zKCkpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lc05lZWRpbmdSZWxvYWQuYXBwZW5kKGZy
YW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9hZC5zaXplKCk7ICsraSkKKyAgICAg
ICAgZnJhbWVzTmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCktPnJlbG9hZCgpOworfQorCitQbHVn
aW5EYXRhKiBQYWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGx1Z2luRGF0
YSkKKyAgICAgICAgbV9wbHVnaW5EYXRhID0gbmV3IFBsdWdpbkRhdGEodGhpcyk7CisgICAgcmV0
dXJuIG1fcGx1Z2luRGF0YS5nZXQoKTsKK30KKwogc3RhdGljIEZyYW1lKiBpbmNyZW1lbnRGcmFt
ZShGcmFtZSogY3VyciwgYm9vbCBmb3J3YXJkLCBib29sIHdyYXBGbGFnKQogewogICAgIHJldHVy
biBmb3J3YXJkCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdl
L1BhZ2UuaAppbmRleCBiNjg1ZTNmLi4xNThmZDkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3BlY3RvckNsaWVudDsKICAgICBjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsK
ICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xhc3MgU2VsZWN0aW9uOwogICAgIGNs
YXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CkBAIC03MCw2ICs3MSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgUGFnZShDaHJvbWVDbGllbnQqLCBDb250ZXh0TWVudUNsaWVudCosIEVk
aXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNwZWN0b3JDbGllbnQqKTsKICAgICAgICAgflBh
Z2UoKTsKICAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wg
cmVsb2FkKTsKKyAgICAgICAgUGx1Z2luRGF0YSogcGx1Z2luRGF0YSgpIGNvbnN0OworCiAgICAg
ICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9lZGl0b3JD
bGllbnQ7IH0KIAogICAgICAgICB2b2lkIHNldE1haW5GcmFtZShQYXNzUmVmUHRyPEZyYW1lPik7
CkBAIC0xNDYsNiArMTUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8
RnJhbWU+IG1fbWFpbkZyYW1lOwogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9mb2N1c2VkTm9kZTsK
IAorICAgICAgICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisKICAg
ICAgICAgRWRpdG9yQ2xpZW50KiBtX2VkaXRvckNsaWVudDsKIAogICAgICAgICBpbnQgbV9mcmFt
ZUNvdW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BsdWdpbi5oIGIvV2ViQ29yZS9wYWdl
L1BsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTUzMTg0Li4wMDAwMDAw
Ci0tLSBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAg
QEAKLS8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFBsdWdpbl9oCi0jZGVm
aW5lIFBsdWdpbl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBXaWRnZXQ7Ci0KLSAgICBjbGFzcyBQbHVnaW4gOiBwdWJs
aWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBsdWdpbj4gY3JlYXRlKFdpZGdldCogdmlldykgeyByZXR1cm4gYWRvcHRSZWYobmV3
IFBsdWdpbih2aWV3KSk7IH0KLSAgICAgICAgV2lkZ2V0KiB2aWV3KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFBsdWdpbihXaWRnZXQq
IHZpZXcpIDogbV92aWV3KHZpZXcpIHsgfQotICAgICAgICBXaWRnZXQqIG1fdmlldzsKLSAgICB9
OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUGx1Z2luX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gYi9XZWJDb3JlL3BhZ2UvbWFj
L0ZyYW1lTWFjLm1tCmluZGV4IGQ0ZmRjODEuLjRkZTFjMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQpA
QCAtNjgsNyArNjgsNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVNjcm9sbEJhci5oIgogI2ltcG9ydCAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
Ci0jaW1wb3J0ICJQbHVnaW4uaCIKICNpbXBvcnQgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW1w
b3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEl0ZW0uaCIKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tIGIvV2ViQ29yZS9wYWdl
L21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KaW5kZXggMDg3MjFjNC4uYWNkZTYzNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KKysrIGIvV2ViQ29y
ZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KQEAgLTYzLDcgKzYzLDcgQEAKICNpbXBv
cnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2ltcG9ydCAiUGxh
dGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9TdG9yZS5oIgorI2ltcG9ydCAiUGx1
Z2luRGF0YS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlclBhcnQu
aCIKICNpbXBvcnQgIlJlbmRlclRyZWVBc1RleHQuaCIKQEAgLTEyMDcsNyArMTIwNyw3IEBAIHN0
YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVu
dCAqZWxlbWVudCkKICAgICAKICAgICBpZiAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246Omlz
VGV4dE1JTUVUeXBlKG1pbWVUeXBlKSB8fAogICAgICAgICBJbWFnZTo6c3VwcG9ydHNUeXBlKG1p
bWVUeXBlKSB8fAotICAgICAgICBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUobWlt
ZVR5cGUpKQorICAgICAgICAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+cGx1
Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlKSkpCiAgICAgICAgIHJldHVybiBO
TzsKICAgICAKICAgICByZXR1cm4gWUVTOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlVmlld0ZhY3RvcnkuaCBiL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZVZpZXdGYWN0b3J5
LmgKaW5kZXggNGNmMjFlMy4uN2Q1NTE1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9X
ZWJDb3JlVmlld0ZhY3RvcnkuaAorKysgYi9XZWJDb3JlL3BhZ2UvbWFjL1dlYkNvcmVWaWV3RmFj
dG9yeS5oCkBAIC0zNSw5ICszNSw3IEBACiBAcHJvdG9jb2wgV2ViQ29yZVZpZXdGYWN0b3J5CiAK
IC0gKE5TQXJyYXkgKilwbHVnaW5zSW5mbzsgLy8gYXJyYXkgb2YgaWQgPFdlYkNvcmVQbHVnaW5J
bmZvPgotLSAodm9pZClyZWZyZXNoUGx1Z2luczooQk9PTClyZWxvYWRQYWdlczsKLS0gKE5TU3Ry
aW5nICopcGx1Z2luTmFtZUZvck1JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlOwotLSAoQk9P
TClwbHVnaW5TdXBwb3J0c01JTUVUeXBlOihOU1N0cmluZyAqKU1JTUVUeXBlOworLSAodm9pZCly
ZWZyZXNoUGx1Z2luczsKIAogLSAoTlNTdHJpbmcgKilpbnB1dEVsZW1lbnRBbHRUZXh0OwogLSAo
TlNTdHJpbmcgKilyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAppbmRleCA3
YWUxZGQ5Li4xZjAzMjU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCkBAIC00OCw3ICs0OCw2IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJQbHVnaW4uaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCmlu
ZGV4IGY0OGIxYWIuLjA4MTRjNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Rl
bXBvcmFyeUxpbmtTdHVicy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YWJhc2UuaCIKICNpbmNsdWRlICJQbHVnaW5QYWNrYWdl
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTgwLDUgKzgxLDkgQEAgZmxvYXQgdXNlcklk
bGVUaW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMC4wOyB9CiBTdHJpbmcgS1VSTDo6
ZmlsZVN5c3RlbVBhdGgoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmco
KTsgfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRo
Q29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQorCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Cit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnSW5JbmZvU3RvcmVNYWMu
bW0gYi9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnSW5JbmZvU3RvcmVNYWMubW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NzZlYWUuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJQ
bHVnaW5JbmZvU3RvcmUuaCIKLQotI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCi0jaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJXZWJDb3JlVmlld0ZhY3RvcnkuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1TdHJpbmcgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gW1tXZWJDb3JlVmlld0Zh
Y3Rvcnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luTmFtZUZvck1JTUVUeXBlOm1pbWVUeXBlXTsKLX0K
LQotUGx1Z2luSW5mbyAqUGx1Z2luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2lu
QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBQbHVnaW5JbmZvICpwbHVnaW5JbmZvID0g
bmV3IFBsdWdpbkluZm87Ci0gICAgCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
Ci0gICAgaWQgPFdlYkNvcmVQbHVnaW5JbmZvPiBwbHVnaW4gPSBbW1tXZWJDb3JlVmlld0ZhY3Rv
cnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luc0luZm9dIG9iamVjdEF0SW5kZXg6aW5kZXhdOwotICAg
IAotICAgIHBsdWdpbkluZm8tPm5hbWUgPSBbcGx1Z2luIG5hbWVdOwotICAgIHBsdWdpbkluZm8t
PmZpbGUgPSBbcGx1Z2luIGZpbGVuYW1lXTsKLSAgICBwbHVnaW5JbmZvLT5kZXNjID0gW3BsdWdp
biBwbHVnaW5EZXNjcmlwdGlvbl07Ci0KLSAgICBOU0VudW1lcmF0b3IgKk1JTUVUeXBlRW51bWVy
YXRvciA9IFtwbHVnaW4gTUlNRVR5cGVFbnVtZXJhdG9yXTsKLSAgICB3aGlsZSAoTlNTdHJpbmcg
Kk1JTUUgPSBbTUlNRVR5cGVFbnVtZXJhdG9yIG5leHRPYmplY3RdKSB7Ci0gICAgICAgIE1pbWVD
bGFzc0luZm8gKm1pbWUgPSBuZXcgTWltZUNsYXNzSW5mbzsKLSAgICAgICAgcGx1Z2luSW5mby0+
bWltZXMuYXBwZW5kKG1pbWUpOwotICAgICAgICBtaW1lLT50eXBlID0gU3RyaW5nKE1JTUUpLmxv
d2VyKCk7Ci0gICAgICAgIG1pbWUtPnN1ZmZpeGVzID0gW1twbHVnaW4gZXh0ZW5zaW9uc0Zvck1J
TUVUeXBlOk1JTUVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIiwiXTsKLSAgICAgICAgbWlt
ZS0+ZGVzYyA9IFtwbHVnaW4gZGVzY3JpcHRpb25Gb3JNSU1FVHlwZTpNSU1FXTsKLSAgICAgICAg
bWltZS0+cGx1Z2luID0gcGx1Z2luSW5mbzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHBsdWdp
bkluZm87Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIGlmIChw
bHVnaW5JbmZvICYmICFwbHVnaW5JbmZvLT5taW1lcy5pc0VtcHR5KCkpCi0gICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhwbHVnaW5JbmZvLT5taW1lcyk7Ci0gICAgZGVsZXRlIHBsdWdpbkluZm87Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgUGx1Z2luSW5mb1N0b3JlOjpwbHVnaW5Db3Vu
dCgpIGNvbnN0Ci17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVy
biBbW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luc0luZm9dIGNvdW50
XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIAotICAgIHJldHVybiAwOwot
fQotCi1ib29sIFBsdWdpbkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1
cm4gW1tXZWJDb3JlVmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcGx1Z2luU3VwcG9ydHNNSU1F
VHlwZTptaW1lVHlwZV07Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsgICAgCi0gICAg
Ci0gICAgcmV0dXJuIE5POwotfQotCi12b2lkIHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkT3Bl
blBhZ2VzKQotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICBbW1dlYkNv
cmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZWZyZXNoUGx1Z2luczpyZWxvYWRPcGVuUGFn
ZXNdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0KLX0KLQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCmluZGV4IDZiM2UyNDMuLjdjOGViMTgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKQEAgLTI4LDEx
ICsyOCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgw
NDA0MDAKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBFeHRlbnNpb25NYXAgewpAQCAtNzksMTIgKzc0LDYgQEAg
U3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyAmZXh0KQogICAgICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOwogICAgICAgICArK2U7
CiAgICAgfQotICAgIC8vICMjIyBGSVhNRTogUXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0gICAgUVN0cmluZyB0eXBlID0gUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+bWltZVR5
cGVGb3JFeHRlbnNpb24oZXh0KTsKLSAgICBpZiAoIXR5cGUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gdHlwZTsKLSNlbmRpZgogCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0iOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTcwZTIwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5j
cHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNo
IEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk1pbWVUeXBlLmgiCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitNaW1lVHlwZTo6
TWltZVR5cGUoUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICA6IFJlZkNvdW50ZWQ8TWltZVR5cGU+KDApCisgICAgLCBtX3BsdWdpbkRhdGEocGx1
Z2luRGF0YSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7Cit9CisKK01pbWVUeXBlOjp+TWltZVR5
cGUoKQoreworfQorCitTdHJpbmcgTWltZVR5cGU6OnR5cGUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BsdWdpbkRhdGEtPm1pbWVzKClbbV9pbmRleF0tPnR5cGU7Cit9CisKK1N0cmluZyBNaW1l
VHlwZTo6c3VmZml4ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPm1pbWVz
KClbbV9pbmRleF0tPnN1ZmZpeGVzOworfQorCitTdHJpbmcgTWltZVR5cGU6OmRlc2NyaXB0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5k
ZXNjOworfQorCitQYXNzUmVmUHRyPFBsdWdpbj4gTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBj
b25zdAoreworICAgIGNvbnN0IFBhZ2UqIHAgPSBtX3BsdWdpbkRhdGEtPnBhZ2UoKTsKKyAgICBp
ZiAoIXAgfHwgIXAtPnNldHRpbmdzKCktPmFyZVBsdWdpbnNFbmFibGVkKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBtX3Bs
dWdpbkRhdGEtPm1pbWVzKCk7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lu
cyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKHBsdWdpbnNbaV0gPT0gbWlt
ZXNbbV9pbmRleF0tPnBsdWdpbikKKyAgICAgICAgICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZSht
X3BsdWdpbkRhdGEuZ2V0KCksIGkpOworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaCBiL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmExMWZjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApA
QCAtMCwwICsxLDUyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBNaW1lVHlwZV9oCisjZGVmaW5lIE1pbWVUeXBlX2gKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICBj
bGFzcyBNaW1lVHlwZSA6IHB1YmxpYyBSZWZDb3VudGVkPE1pbWVUeXBlPiB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNaW1lVHlwZT4gY3JlYXRlKFBhc3NSZWZQdHI8
UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNaW1lVHlwZShwbHVnaW5EYXRhLCBpbmRleCkpOyB9CisgICAgICAgIH5NaW1lVHlwZSgp
OworCisgICAgICAgIFN0cmluZyB0eXBlKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBzdWZmaXhl
cygpIGNvbnN0OworICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKyAgICAgICAg
UGFzc1JlZlB0cjxQbHVnaW4+IGVuYWJsZWRQbHVnaW4oKSBjb25zdDsKKworICAgIHByaXZhdGU6
CisgICAgICAgIE1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4sIHVuc2lnbmVkIGluZGV4
KTsKKyAgICAgICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1fcGx1Z2luRGF0YTsKKyAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbHVnaW5zL01pbWVUeXBlLmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjYzczNwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5pZGwKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgewor
CisgICAgaW50ZXJmYWNlIE1pbWVUeXBlIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyB0eXBlOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN1ZmZp
eGVzOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0aW9uOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgUGx1Z2luIGVuYWJsZWRQbHVnaW47CisgICAgfTsK
KworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwIGIvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmI5ZjgzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWlt
ZVR5cGVBcnJheS5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggVHJvbGx0ZWNoIEFTQQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJyYXkuaCIKKworI2luY2x1ZGUgIkF0
b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitNaW1lVHlwZUFycmF5OjpNaW1lVHlwZUFycmF5KEZyYW1lKiBmcmFtZSkKKyAg
ICA6IFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4oMCkKKyAgICAsIG1fZnJhbWUoZnJhbWUpCit7
Cit9CisKK01pbWVUeXBlQXJyYXk6On5NaW1lVHlwZUFycmF5KCkKK3sKK30KKwordW5zaWduZWQg
bG9uZyBNaW1lVHlwZUFycmF5OjpsZW5ndGgoKSBjb25zdAoreworICAgIFBsdWdpbkRhdGEqIGRh
dGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZGF0YS0+bWltZXMoKS5zaXplKCk7Cit9CisKK01pbWVUeXBlKiBNaW1lVHlw
ZUFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBn
ZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBj
b25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7CisgICAg
aWYgKGluZGV4ID49IG1pbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IE1pbWVUeXBlOjpjcmVhdGUoZGF0YSwgaW5kZXgpLmdldCgpOworfQorCitib29sIE1pbWVUeXBl
QXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBQbHVnaW5EYXRhICpkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICgh
ZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8q
PiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
aW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHByb3BlcnR5
TmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
TWltZVR5cGUqIE1pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsK
KyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1l
Q2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9
PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gTWltZVR5cGU6OmNyZWF0ZShkYXRh
LCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUGx1Z2luRGF0YSogTWltZVR5cGVBcnJh
eTo6Z2V0UGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBQYWdlKiBwID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHAtPnBsdWdpbkRhdGEoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJy
YXkuaCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjRhNGQwMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1
Z2lucy9NaW1lVHlwZUFycmF5LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWltZVR5cGVBcnJheV9oCisjZGVm
aW5lIE1pbWVUeXBlQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEtKUyB7CisgICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTVmFsdWU7Cit9Owor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7CisgICAgY2xh
c3MgRnJhbWU7CisgICAgY2xhc3MgTWltZVR5cGU7CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKwor
ICAgIC8vIEZJWE1FOiBHZW5lcmF0ZWQgSlNNaW1lVHlwZUFycmF5LmNwcCBkb2Vzbid0IGluY2x1
ZGUgSlNNaW1lVHlwZS5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhl
Y1N0YXRlKiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNzIE1pbWVUeXBlQXJyYXkgOiBwdWJsaWMg
UmVmQ291bnRlZDxNaW1lVHlwZUFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNaW1lVHlwZUFycmF5PiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgTWltZVR5cGVBcnJheShmcmFtZSkpOyB9CisgICAgICAgIH5NaW1lVHlwZUFy
cmF5KCk7CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9
CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgTWltZVR5
cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFt
ZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1pbWVUeXBlKiBu
YW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICBwcml2YXRl
OgorICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKik7CisgICAgICAgIFBsdWdpbkRhdGEqIGdl
dFBsdWdpbkRhdGEoKSBjb25zdDsKKworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICB9Owor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5Lmlk
bCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40MDkyYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVn
aW5zL01pbWVUeXBlQXJyYXkuaWRsCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVy
ZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIE1pbWVUeXBlQXJyYXkgeworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgfTsKKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAgYi9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAwNTQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBsdWdpbi5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1
Z2luOjpQbHVnaW4oUGx1Z2luRGF0YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpCisgICAg
OiBSZWZDb3VudGVkPFBsdWdpbj4oMCkKKyAgICAsIG1fcGx1Z2luRGF0YShwbHVnaW5EYXRhKQor
ICAgICwgbV9pbmRleChpbmRleCkKK3sKK30KKworUGx1Z2luOjp+UGx1Z2luKCkKK3sKK30KKwor
U3RyaW5nIFBsdWdpbjo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+
cGx1Z2lucygpW21faW5kZXhdLT5uYW1lOworfQorCitTdHJpbmcgUGx1Z2luOjpmaWxlbmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpW21faW5kZXhdLT5m
aWxlOworfQorCitTdHJpbmcgUGx1Z2luOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpW21faW5kZXhdLT5kZXNjOworfQorCit1bnNpZ25l
ZCBsb25nIFBsdWdpbjo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRh
LT5wbHVnaW5zKClbbV9pbmRleF0tPm1pbWVzLnNpemUoKTsKK30KKworTWltZVR5cGUqIFBsdWdp
bjo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+
JiBwbHVnaW5zID0gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKCk7CisgICAgaWYgKGluZGV4ID49IHBs
dWdpbnNbbV9pbmRleF0tPm1pbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBN
aW1lQ2xhc3NJbmZvKiBtaW1lID0gcGx1Z2luc1ttX2luZGV4XS0+bWltZXNbaW5kZXhdOworCisg
ICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1p
bWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAobWltZXNbaV0gPT0gbWltZSkKKyAgICAgICAgICAgIHJldHVybiBNaW1lVHlw
ZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgaSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgUGx1Z2luOjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCit7CisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMg
PSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1p
bWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0tPnR5cGUgPT0gcHJvcGVydHlO
YW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitN
aW1lVHlwZSogUGx1Z2luOjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gbV9wbHVn
aW5EYXRhLT5taW1lcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgaWYgKG1pbWVzW2ldLT50eXBlID09IHByb3BlcnR5TmFtZSkKKyAg
ICAgICAgICAgIHJldHVybiBNaW1lVHlwZTo6Y3JlYXRlKG1fcGx1Z2luRGF0YS5nZXQoKSwgaSku
Z2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTYxZjgxCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbl9o
CisjZGVmaW5lIFBsdWdpbl9oCisKKyNpbmNsdWRlICJNaW1lVHlwZS5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgS0pT
IHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgSlNWYWx1ZTsKK307CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBQbHVn
aW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBKU1BsdWdp
bi5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNW
YWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBQbHVn
aW5EYXRhOworCisgICAgY2xhc3MgUGx1Z2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luPiB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW4+IGNyZWF0ZShQ
bHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFBsdWdpbihwbHVnaW5EYXRhLCBpbmRleCkpOyB9CisgICAgICAgIH5QbHVnaW4oKTsKKwor
ICAgICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZmlsZW5hbWUoKSBj
b25zdDsKKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKworICAgICAgICBNaW1lVHlwZSogaXRlbSh1bnNp
Z25lZCBpbmRleCk7CisgICAgICAgIGJvb2wgY2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgTWltZVR5cGUqIG5hbWVHZXR0ZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UGx1Z2luKFBsdWdpbkRhdGEqLCB1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIFJlZlB0cjxQbHVn
aW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIGIv
V2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDU2NWU0OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4u
aWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVj
aCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCittb2R1bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRl
ciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdpbiB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBE
T01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxl
bmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAgYi9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjI1MTIzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
QXJyYXkuY3BwCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkFycmF5OjpQbHVnaW5BcnJheShGcmFtZSogZnJhbWUpCisgICAgOiBSZWZDb3Vu
dGVkPFBsdWdpbkFycmF5PigwKQorICAgICwgbV9mcmFtZShmcmFtZSkKK3sKK30KKworUGx1Z2lu
QXJyYXk6On5QbHVnaW5BcnJheSgpCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUGx1Z2luQXJyYXk6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEo
KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRhLT5w
bHVnaW5zKCkuc2l6ZSgpOworfQorCitQbHVnaW4qIFBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVk
IGluZGV4KQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAg
aWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5m
byo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBwbHVnaW5z
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFBsdWdpbjo6Y3JlYXRlKGRh
dGEsIGluZGV4KS5nZXQoKTsKK30KKworYm9vbCBQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEq
IGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lu
cygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1BsdWdpbiogUGx1Z2luQXJy
YXk6Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAg
UGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBk
YXRhLT5wbHVnaW5zKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChwbHVnaW5zW2ldLT5uYW1lID09IHByb3BlcnR5TmFtZSkK
KyAgICAgICAgICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShkYXRhLCBpKS5nZXQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBQbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZCkKK3sK
KyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhyZWxvYWQpOworfQorCitQbHVnaW5EYXRhKiBQbHVn
aW5BcnJheTo6Z2V0UGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBQYWdlKiBwID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHAtPnBsdWdpbkRhdGEoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zMDU4NmNkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkFycmF5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luQXJyYXlfaAorI2RlZmlu
ZSBQbHVnaW5BcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
S0pTIHsKKyAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKK307CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBG
cmFtZTsKKyAgICBjbGFzcyBQbHVnaW47CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKworICAgIC8v
IEZJWE1FOiBHZW5lcmF0ZWQgSlNQbHVnaW5BcnJheS5jcHAgZG9lc24ndCBpbmNsdWRlIEpTUGx1
Z2luLmggZm9yIHRvSlMKKyAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBQ
bHVnaW4qKTsKKworICAgIGNsYXNzIFBsdWdpbkFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1
Z2luQXJyYXk+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdp
bkFycmF5PiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2lu
QXJyYXkoZnJhbWUpKTsgfQorICAgICAgICB+UGx1Z2luQXJyYXkoKTsKKworICAgICAgICB2b2lk
IGRpc2Nvbm5lY3RGcmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KKworICAgICAgICB1bnNpZ25lZCBs
b25nIGxlbmd0aCgpIGNvbnN0OworICAgICAgICBQbHVnaW4qIGl0ZW0odW5zaWduZWQgaW5kZXgp
OworICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIFBsdWdpbiogbmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJp
bmcmIHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAgdm9pZCByZWZyZXNoKGJvb2wgcmVsb2FkKTsK
KyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW5BcnJheShGcmFtZSopOworICAgICAgICBQbHVn
aW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7
CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
QXJyYXkuaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNkNjUyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbApAQCAtMCwwICsxLDI3IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBp
bnRlcmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0dGVyXSBQbHVnaW5BcnJheSB7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAg
dm9pZCByZWZyZXNoKGluIGJvb2xlYW4gcmVsb2FkKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2lu
RGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwZWM4ZAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcApAQCAtMCwwICsx
LDY0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYW5pZWwgTW9sa2VudGluIChtb2xrZW50
aW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKHNj
aGltbWlAa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICAgIENvcHlyaWdodCAoQykg
MjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5EYXRhOjpQbHVnaW5E
YXRhKGNvbnN0IFBhZ2UqIHBhZ2UpCisgICAgOiBSZWZDb3VudGVkPFBsdWdpbkRhdGE+KDApCisg
ICAgLCBtX3BhZ2UocGFnZSkKK3sKKyAgICBpbml0UGx1Z2lucygpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fcGx1Z2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBQ
bHVnaW5JbmZvKiBwbHVnaW4gPSBtX3BsdWdpbnNbaV07CisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBwbHVnaW4tPm1pbWVzLnNpemUoKTsgKytqKQorICAgICAgICAgICAgbV9taW1l
cy5hcHBlbmQocGx1Z2luLT5taW1lc1tqXSk7CisgICAgfQorfQorCitQbHVnaW5EYXRhOjp+UGx1
Z2luRGF0YSgpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fcGx1Z2lucyk7CisgICAgZGVsZXRl
QWxsVmFsdWVzKG1fbWltZXMpOworfQorCitib29sIFBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9taW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fbWltZXNbaV0tPnR5
cGUgPT0gbWltZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1N0cmluZyBQbHVnaW5EYXRhOjpwbHVnaW5OYW1lRm9yTWltZVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9taW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1fbWltZXNbaV0tPnR5cGUgPT0gbWlt
ZVR5cGUpCisgICAgICAgICAgICByZXR1cm4gbV9taW1lc1tpXS0+cGx1Z2luLT5uYW1lOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGEuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3OWFhZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5EYXRhLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luRGF0YV9oCisjZGVmaW5l
IFBsdWdpbkRhdGFfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgc3RydWN0IFBhZ2U7CisgICAgc3RydWN0IFBsdWdpbkluZm87CisKKyAg
ICBzdHJ1Y3QgTWltZUNsYXNzSW5mbyB7CisgICAgICAgIFN0cmluZyB0eXBlOworICAgICAgICBT
dHJpbmcgZGVzYzsKKyAgICAgICAgU3RyaW5nIHN1ZmZpeGVzOworICAgICAgICBQbHVnaW5JbmZv
KiBwbHVnaW47CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW5JbmZvIHsKKyAgICAgICAgU3Ry
aW5nIG5hbWU7CisgICAgICAgIFN0cmluZyBmaWxlOworICAgICAgICBTdHJpbmcgZGVzYzsKKyAg
ICAgICAgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiBtaW1lczsKKyAgICB9OworCisgICAgLy8gRklY
TUU6IG1lcmdlIHdpdGggUGx1Z2luRGF0YWJhc2UgaW4gdGhlIGZ1dHVyZQorICAgIGNsYXNzIFBs
dWdpbkRhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW5EYXRhPiB7CisgICAgcHVibGljOgor
ICAgICAgICBQbHVnaW5EYXRhKGNvbnN0IFBhZ2UqKTsKKyAgICAgICAgflBsdWdpbkRhdGEoKTsK
KworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RQYWdlKCkgeyBtX3BhZ2UgPSAwOyB9CisgICAgICAg
IGNvbnN0IFBhZ2UqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2U7IH0KKworICAgICAgICBj
b25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zKCkgY29uc3QgeyByZXR1cm4gbV9wbHVn
aW5zOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzKCkgY29u
c3QgeyByZXR1cm4gbV9taW1lczsgfQorCisgICAgICAgIGJvb2wgc3VwcG9ydHNNaW1lVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBsdWdpbk5hbWVG
b3JNaW1lVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBjb25zdDsKKworICAgICAgICBzdGF0
aWMgdm9pZCByZWZyZXNoKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRQbHVn
aW5zKCk7CisKKyAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPiBtX3BsdWdpbnM7CisgICAgICAg
IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbV9taW1lczsKKyAgICAgICAgY29uc3QgUGFnZSogbV9w
YWdlOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
bWFjL1BsdWdpbkRhdGFNYWMubW0gYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViOTMxNgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luRGF0YU1hYy5tbQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbHVnaW5EYXRhLmgiCisKKyNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAi
V2ViQ29yZVZpZXdGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVn
aW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworCisgICAgTlNBcnJheSogcGx1Z2lucyA9IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIHBsdWdpbnNJbmZvXTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IFtw
bHVnaW5zIGNvdW50XTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIHBsdWdpbkluZm8gPSBu
ZXcgUGx1Z2luSW5mbzsKKworICAgICAgICBpZCA8V2ViQ29yZVBsdWdpbkluZm8+IHBsdWdpbiA9
IFtwbHVnaW5zIG9iamVjdEF0SW5kZXg6aV07CisgICAgCisgICAgICAgIHBsdWdpbkluZm8tPm5h
bWUgPSBbcGx1Z2luIG5hbWVdOworICAgICAgICBwbHVnaW5JbmZvLT5maWxlID0gW3BsdWdpbiBm
aWxlbmFtZV07CisgICAgICAgIHBsdWdpbkluZm8tPmRlc2MgPSBbcGx1Z2luIHBsdWdpbkRlc2Ny
aXB0aW9uXTsKKworICAgICAgICBOU0VudW1lcmF0b3IqIE1JTUVUeXBlRW51bWVyYXRvciA9IFtw
bHVnaW4gTUlNRVR5cGVFbnVtZXJhdG9yXTsKKyAgICAgICAgd2hpbGUgKE5TU3RyaW5nKiBNSU1F
ID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICAgICAgcGx1Z2luSW5m
by0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhN
SU1FKS5sb3dlcigpOworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgPSBbW3BsdWdpbiBleHRl
bnNpb25zRm9yTUlNRVR5cGU6TUlNRV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLCJdOwor
ICAgICAgICAgICAgbWltZS0+ZGVzYyA9IFtwbHVnaW4gZGVzY3JpcHRpb25Gb3JNSU1FVHlwZTpN
SU1FXTsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IHBsdWdpbkluZm87CisgICAgICAgIH0K
KworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKHBsdWdpbkluZm8pOworICAgIH0KKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuOworfQorCit2b2lkIFBs
dWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZWZyZXNoUGx1Z2luc107
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworfQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5EYXRhUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTZk
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNw
cApAQCAtMCwwICsxLDY1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2gg
QVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKwor
I2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
PHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBRV2Vi
UGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4obV9wYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CisgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3Rv
cnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7CisgICAgaWYgKCFmYWN0b3J5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBwbHVnaW5z
ID0gZmFjdG9yeS0+cGx1Z2lucygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5j
b3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiYg
cGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKworICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3
IFBsdWdpbkluZm87CisgICAgICAgIGluZm8tPm5hbWUgPSBwbHVnaW4ubmFtZTsKKyAgICAgICAg
aW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlwdGlvbjsKKworICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHBsdWdpbi5taW1lVHlwZXMuY291bnQoKTsgKytqKSB7CisgICAgICAgICAgICBjb25z
dCBRV2ViUGx1Z2luRmFjdG9yeTo6TWltZVR5cGUmIG1pbWVUeXBlID0gcGx1Z2luLm1pbWVUeXBl
cy5hdChqKTsKKworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZUluZm8gPSBuZXcgTWlt
ZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsK
KyAgICAgICAgICAgIG1pbWVJbmZvLT5kZXNjID0gbWltZVR5cGUuZGVzY3JpcHRpb247CisgICAg
ICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMgPSBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5qb2lu
KCI7ICIpOworCisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZUluZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3Zv
aWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgLy8gbm90aGluZyB0byBkbworfQorCit9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhV2luLmNwcCBiL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzNmM2YzYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luRGF0YVdpbi5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbklu
Zm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2Fn
ZSA9IHBsdWdpbnNbaV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsK
KyAgICAgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8t
PmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rl
c2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3Jp
cHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0g
bmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7
CisKKyAgICAgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1l
LT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisK
KyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisg
ICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAg
fQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNl
ICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJl
c2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1dlYktpdC5wcmkgYi9XZWJLaXQucHJpCmluZGV4
IDU1ZGU5YjMuLmQxMjQyM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcmkKKysrIGIvV2ViS2l0LnBy
aQpAQCAtOTcsNyArOTcsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJD
b3JlL3JlbmRlcmluZyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2hpc3RvcnkgXAogICAgICQk
QkFTRV9ESVIvV2ViQ29yZS94bWwgXAotICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sCisgICAg
JCRCQVNFX0RJUi9XZWJDb3JlL2h0bWwgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbHVnaW5z
CiAKIAogbWFjeCB7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZp
ZXdGYWN0b3J5Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5t
bQppbmRleCBjNTI0YjRiLi40MWYzODM3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViVmlld0ZhY3RvcnkubW0KQEAgLTcxLDIyICs3MSw5IEBACiAgICAgcmV0dXJuIFtbV2ViUGx1
Z2luRGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHBsdWdpbnNdOwogfQogCi0tIChOU1N0cmluZyAq
KXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAgIHJldHVy
biBbW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6
TUlNRVR5cGVdIG5hbWVdOwotfQotCi0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09MKXJlbG9h
ZFBhZ2VzCistICh2b2lkKXJlZnJlc2hQbHVnaW5zCiB7CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFz
ZSBzaGFyZWREYXRhYmFzZV0gcmVmcmVzaF07Ci0gICAgaWYgKHJlbG9hZFBhZ2VzKSB7Ci0gICAg
ICAgIFtXZWJWaWV3IF9tYWtlQWxsV2ViVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9y
ZWxvYWRGb3JQbHVnaW5DaGFuZ2VzKV07Ci0gICAgfQotfQotCi0tIChCT09MKXBsdWdpblN1cHBv
cnRzTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tXZWJQbHVn
aW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdICE9
IG5pbDsKIH0KIAogLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3
ICopdgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDI1YzYyNDYuLjcwZDQ3OTcgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KQEAgLTM1NCwxNiArMzU0LDYgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhX
ZWJGcmFtZSAqd2ViRnJhbWUpCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmxvYWRlcigpLT5udW1Q
ZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMocmVjdXJzZSk7CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZv
clBsdWdpbkNoYW5nZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxXZWJEb2N1
bWVudFZpZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVu
dFZpZXddOwotICAgICAgICBpZiAoKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRN
TFZpZXcgY2xhc3NdXSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkp
Ci0gICAgICAgICAgICBba2l0KGZyYW1lKSByZWxvYWRdOwotICAgIH0KLX0KLQogLSAodm9pZClf
YXR0YWNoU2NyaXB0RGVidWdnZXIKIHsKICAgICBpZiAoIV9wcml2YXRlLT5zY3JpcHREZWJ1Z2dl
ciAmJiBjb3JlKHNlbGYpLT5zY3JpcHRQcm94eSgpLT5oYXZlR2xvYmFsT2JqZWN0KCkpCmRpZmYg
LS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA4OWI1YjFkLi40MjdiYTlmIDEwMDY0
NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE1Myw4ICsxNTMsNiBAQCBzdHJ1
Y3QgV2ViQ29yZUhpc3RvcnlJdGVtOwogCiAtIChpbnQpX251bVBlbmRpbmdPckxvYWRpbmdSZXF1
ZXN0czooQk9PTClyZWN1cnNlOwogCi0tICh2b2lkKV9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzOwot
CiAtICh2b2lkKV9hdHRhY2hTY3JpcHREZWJ1Z2dlcjsKIC0gKHZvaWQpX2RldGFjaFNjcmlwdERl
YnVnZ2VyOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDhhNzljZWMuLjU2NmE5YWQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1dlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3Lm1tCkBAIC0xMjgyLDExICsxMjgyLDYgQEAgV2ViRnJhbWVMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGkKICAgICBbTlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKIH0KIAotLSAodm9p
ZClfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlcwotewotICAgIFtbc2VsZiBtYWluRnJhbWVdIF9yZWxv
YWRGb3JQbHVnaW5DaGFuZ2VzXTsKLX0KLQogLSAoTlNDYWNoZWRVUkxSZXNwb25zZSAqKV9jYWNo
ZWRSZXNwb25zZUZvclVSTDooTlNVUkwgKilVUkwKIHsKICAgICBOU011dGFibGVVUkxSZXF1ZXN0
ICpyZXF1ZXN0ID0gW1tOU011dGFibGVVUkxSZXF1ZXN0IGFsbG9jXSBpbml0V2l0aFVSTDpVUkxd
OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAppbmRleCBmZDBjNjk0Li42MzEy
MWYyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAor
KysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcApAQCAtMjYsNyArMjYs
NiBAQAogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJm
YWNlLmgiCiAjaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3
ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCIKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1
ZGUgInFjb29raWVqYXIuaCIKICNpbmNsdWRlIDxxZGVidWcuaD4KQEAgLTM2MSw3ICszNjAsNyBA
QCB2b2lkIFFXZWJOZXR3b3JrSm9iOjpzZXRFcnJvclN0cmluZyhjb25zdCBRU3RyaW5nJiBlcnJv
clN0cmluZykKICovCiBib29sIFFXZWJOZXR3b3JrSm9iOjpjYW5jZWxsZWQoKSBjb25zdAogewot
ICAgIHJldHVybiAhZC0+cmVzb3VyY2VIYW5kbGUgJiYgIWQtPmNvbm5lY3RvcjsKKyAgICByZXR1
cm4gIWQtPnJlc291cmNlSGFuZGxlOwogfQogCiAvKiEKQEAgLTQ1MCw3ICs0NDksNiBAQCBib29s
IFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkKFJlc291cmNlSGFuZGxlICpoYW5kbGUsIFFXZWJOZXR3
b3JrSW50ZXJmYWNlICppbnRlcgogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2IgPSBq
b2I7CiAgICAgam9iLT5kLT5yZXNvdXJjZUhhbmRsZSA9IGhhbmRsZTsKICAgICBqb2ItPmQtPmlu
dGVyZmFjZSA9IGludGVyZmFjZTsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAKICAgICBq
b2ItPmQtPnJlcXVlc3QuaW5pdChoYW5kbGUtPnJlcXVlc3QoKSk7CiAKQEAgLTQ3OSw3ICs0Nzcs
NiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFuZGxlICpoYW5k
bGUpCiAgICAgICAgIHJldHVybjsKICAgICBERUJVRygpIDw8ICJRV2ViTmV0d29ya01hbmFnZXI6
OmNhbmNlbDoiIDw8ICBqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygpOwogICAg
IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUgPSAwOwotICAgIGpvYi0+ZC0+Y29ubmVjdG9yID0gMDsK
ICAgICBqb2ItPmQtPmludGVyZmFjZS0+Y2FuY2VsSm9iKGpvYik7CiAgICAgaGFuZGxlLT5nZXRJ
bnRlcm5hbCgpLT5tX2pvYiA9IDA7CiB9CkBAIC00OTYsNyArNDkzLDcgQEAgdm9pZCBRV2ViTmV0
d29ya01hbmFnZXI6OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IgKmpvYikKICAgICAgICAgY2xpZW50
ID0gam9iLT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29ubmVjdG9y
KSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTcxLDggKzU2
OCw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJOZXR3b3JrSm9iICpq
b2IpCiAKICAgICBpZiAoY2xpZW50KQogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25z
ZShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCByZXNwb25zZSk7Ci0gICAgaWYgKGpvYi0+ZC0+Y29u
bmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5zdGFydGVkKGpvYik7CiAK
IH0KIApAQCAtNTg3LDcgKzU4Miw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpkYXRhKFFX
ZWJOZXR3b3JrSm9iICpqb2IsIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiAgICAgICAgIGNsaWVu
dCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVu
dCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3Rv
cikgeworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU5Nyw4ICs1
OTIsNiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pvYiAqam9i
LCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhKQogICAgIERFQlVHKCkgPDwgInJlY2VpdmVkRGF0YSIg
PDwgam9iLT5kLT5yZXF1ZXN0LnVybC5wYXRoKCk7CiAgICAgaWYgKGNsaWVudCkKICAgICAgICAg
Y2xpZW50LT5kaWRSZWNlaXZlRGF0YShqb2ItPmQtPnJlc291cmNlSGFuZGxlLCBkYXRhLmNvbnN0
RGF0YSgpLCBkYXRhLmxlbmd0aCgpLCBkYXRhLmxlbmd0aCgpIC8qRml4TWUqLyk7Ci0gICAgaWYg
KGpvYi0+ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5kYXRh
KGpvYiwgZGF0YSk7CiAKIH0KIApAQCAtNjE3LDcgKzYxMCw3IEBAIHZvaWQgUVdlYk5ldHdvcmtN
YW5hZ2VyOjpmaW5pc2hlZChRV2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAg
ICAgICBjbGllbnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAg
aWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5k
LT5jb25uZWN0b3IpIHsKKyAgICB9IGVsc2UgewogICAgICAgICBqb2ItPmRlcmVmKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC02NDUsOSArNjM4LDYgQEAgdm9pZCBRV2ViTmV0d29ya01h
bmFnZXI6OmZpbmlzaGVkKFFXZWJOZXR3b3JrSm9iICpqb2IsIGludCBlcnJvckNvZGUpCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoam9iLT5kLT5jb25uZWN0b3IpCi0gICAgICAgIGVtaXQg
am9iLT5kLT5jb25uZWN0b3ItPmZpbmlzaGVkKGpvYiwgZXJyb3JDb2RlKTsKLQogICAgIERFQlVH
KCkgPDwgInJlY2VpdmVkRmluaXNoZWQgZG9uZSIgPDwgam9iLT5kLT5yZXF1ZXN0LnVybDsKIAog
ICAgIGpvYi0+ZGVyZWYoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtp
bnRlcmZhY2VfcC5oIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmgKaW5k
ZXggYzcxMmFlNC4uOWI2ZjRkMCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29y
a2ludGVyZmFjZV9wLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9w
LmgKQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgICAgICAsIHJlc291cmNlSGFuZGxlKDAp
CiAgICAgICAgICwgcmVkaXJlY3RlZChmYWxzZSkKICAgICAgICAgLCBpbnRlcmZhY2UoMCkKLSAg
ICAgICAgLCBjb25uZWN0b3IoMCkKICAgICAgICAgLCBqb2JTdGF0dXMoUVdlYk5ldHdvcmtKb2I6
OkpvYkNyZWF0ZWQpCiAgICAgICAgIHt9CiAgICAgaW50IHJlZjsKQEAgLTY5LDcgKzY4LDYgQEAg
cHVibGljOgogICAgIGJvb2wgcmVkaXJlY3RlZDsKIAogICAgIFFXZWJOZXR3b3JrSW50ZXJmYWNl
ICppbnRlcmZhY2U7Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yOwog
ICAgIFFXZWJOZXR3b3JrSm9iOjpKb2JTdGF0dXMgam9iU3RhdHVzOwogICAgIFFTdHJpbmcgZXJy
b3JTdHJpbmc7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2lu
LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIyNGQ2MDQuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vi
b2JqZWN0cGx1Z2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotICBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotKi8KLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKLSNpbmNsdWRlIDxx
d2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmg+Ci0jaW5jbHVkZSA8cWNvcmVhcHBsaWNhdGlvbi5o
PgotI2luY2x1ZGUgPHFmaWxlaW5mby5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0K
LSNpZm5kZWYgUVRfTk9fTElCUkFSWQotUV9HTE9CQUxfU1RBVElDX1dJVEhfQVJHUyhRV2ViRmFj
dG9yeUxvYWRlciwgbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoUVdlYk9iamVj
dFBsdWdpbkZhY3RvcnlJbnRlcmZhY2VfaWlkLCBRQ29yZUFwcGxpY2F0aW9uOjpsaWJyYXJ5UGF0
aHMoKSwgUUxhdGluMVN0cmluZygiL3dlYnBsdWdpbnMiKSkpCi0jZW5kaWYKLQotCi1RV2ViRmFj
dG9yeUxvYWRlcjo6UVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLCBjb25zdCBRU3Ry
aW5nTGlzdCAmcGF0aHMsIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCwgUXQ6OkNhc2VTZW5zaXRpdml0
eSkKLSAgICA6IFFGYWN0b3J5TG9hZGVyKGlpZCwgcGF0aHMsIHN1ZmZpeCkKLXsKLSAgICBRU3Ry
aW5nTGlzdCBwbHVnaW5zID0ga2V5cygpOwotICAgIGZvcmVhY2goUVN0cmluZyBrLCBwbHVnaW5z
KSB7Ci0gICAgICAgIFFXZWJPYmplY3RQbHVnaW4gKnBsdWdpbiA9IHFvYmplY3RfY2FzdDxRV2Vi
T2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKGspKTsKLSAgICAgICAgaWYgKCFwbHVnaW4pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSW5mbyBpbmZvOwotICAgICAgICBpbmZvLm5hbWUg
PSBrOwotICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gcGx1Z2luLT5kZXNjcmlwdGlvbkZvcktl
eShrKTsKLSAgICAgICAgUVN0cmluZ0xpc3QgbWltZXR5cGVzID0gcGx1Z2luLT5taW1ldHlwZXNG
b3JLZXkoayk7Ci0gICAgICAgIGZvcmVhY2goUVN0cmluZyBtLCBtaW1ldHlwZXMpIHsKLSAgICAg
ICAgICAgIE1pbWVJbmZvIG1pbWU7Ci0gICAgICAgICAgICBtaW1lLnR5cGUgPSBtOwotICAgICAg
ICAgICAgbWltZS5leHRlbnNpb25zID0gcGx1Z2luLT5leHRlbnNpb25zRm9yTWltZXR5cGUobSk7
Ci0gICAgICAgICAgICBpbmZvLm1pbWVzIDw8IG1pbWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9w
bHVnaW5JbmZvLmFwcGVuZChpbmZvKTsKLSAgICB9Ci19Ci0KLVFXZWJGYWN0b3J5TG9hZGVyICpR
V2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpCi17Ci0gICAgcmV0dXJuIGxvYWRlcigpOwotfQotCi0K
LVFTdHJpbmcgUVdlYkZhY3RvcnlMb2FkZXI6OmRlc2NyaXB0aW9uRm9yTmFtZShjb25zdCBRU3Ry
aW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdp
bkluZm8pIHsKLSAgICAgICAgaWYgKGluZm8ubmFtZSA9PSBrZXkpCi0gICAgICAgICAgICByZXR1
cm4gaW5mby5kZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQot
UVN0cmluZ0xpc3QgUVdlYkZhY3RvcnlMb2FkZXI6Om1pbWV0eXBlc0Zvck5hbWUoY29uc3QgUVN0
cmluZyAma2V5KSBjb25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVn
aW5JbmZvKSB7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUgPT0ga2V5KSB7Ci0gICAgICAgICAgICBR
U3RyaW5nTGlzdCBtaW1ldHlwZXM7Ci0gICAgICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5m
byAmbSwgaW5mby5taW1lcykKLSAgICAgICAgICAgICAgICBtaW1ldHlwZXMuYXBwZW5kKG0udHlw
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbWltZXR5cGVzOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9hZGVyOjpt
aW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBRU3RyaW5nICZleHRlbnNpb24pCi17Ci0gICAgZm9y
ZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdpbkluZm8pIHsKLSAgICAgICAgZm9yZWFjaCAo
Y29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpIHsKLSAgICAgICAgICAgIGlmIChtLmV4dGVu
c2lvbnMuY29udGFpbnMoZXh0ZW5zaW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbS50eXBl
OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLQotUVN0cmlu
Z0xpc3QgUVdlYkZhY3RvcnlMb2FkZXI6OmV4dGVuc2lvbnMoKSBjb25zdAotewotICAgIFFTdHJp
bmdMaXN0IGV4dGVuc2lvbnM7Ci0gICAgZm9yZWFjaChjb25zdCBJbmZvICZpbmZvLCBtX3BsdWdp
bkluZm8pIHsKLSAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMp
Ci0gICAgICAgICAgICBleHRlbnNpb25zIDw8IG0uZXh0ZW5zaW9uczsKLSAgICB9Ci0gICAgcmV0
dXJuIFFTdHJpbmdMaXN0KCk7Ci0KLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6bmFt
ZUZvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdAotewotICAgIGZvcmVh
Y2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNv
bnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgaWYgKG0udHlwZSA9PSBt
aW1lVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5uYW1lOwotICAgIH0KLSAgICBy
ZXR1cm4gUVN0cmluZygpOwotfQotCi1RT2JqZWN0ICpRV2ViRmFjdG9yeUxvYWRlcjo6Y3JlYXRl
KFFXZWJGcmFtZSAqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UVN0cmluZyAmX21pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKQotewotICAgIFFT
dHJpbmcgbWltZVR5cGUgPSBfbWltZVR5cGU7Ci0gICAgaWYgKG1pbWVUeXBlLmlzRW1wdHkoKSkg
ewotICAgICAgICBRRmlsZUluZm8gZmkodXJsLnBhdGgoKSk7Ci0gICAgICAgIG1pbWVUeXBlID0g
bWltZVR5cGVGb3JFeHRlbnNpb24oZmkuc3VmZml4KCkpOwotICAgIH0KLSAgICBRU3RyaW5nIG5h
bWUgPSBuYW1lRm9yTWltZXR5cGUobWltZVR5cGUpOwotICAgIFFXZWJPYmplY3RQbHVnaW4gKnBs
dWdpbiA9IHFvYmplY3RfY2FzdDxRV2ViT2JqZWN0UGx1Z2luICo+KGluc3RhbmNlKG5hbWUpKTsK
LSAgICBpZiAoIXBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUVdlYk9iamVjdFBsdWdp
bkNvbm5lY3RvciAqY29ubmVjdG9yID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoZnJh
bWUpOwotICAgIHJldHVybiBwbHVnaW4tPmNyZWF0ZShjb25uZWN0b3IsIHVybCwgbWltZVR5cGUs
IGFyZ3VtZW50TmFtZXMsIGFyZ3VtZW50VmFsdWVzKTsKLX0KLQotCi0KLS8qISBcY2xhc3MgUVdl
Yk9iamVjdFBsdWdpbgotCi0gIFRoaXMgY2xhc3MgaXMgYSBwbHVnaW4gZm9yIHRoZSBIVE1MIG9i
amVjdCB0YWcuIEl0IGNhbiBiZSB1c2VkIHRvIGVtYmVkIGFyYml0cmFyeSBjb250ZW50IGluIGEg
d2ViIHBhZ2UuCi0qLwotCi0KLVFXZWJPYmplY3RQbHVnaW46OlFXZWJPYmplY3RQbHVnaW4oUU9i
amVjdCAqcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi17Ci19Ci0KLVFXZWJPYmplY3RQ
bHVnaW46On5RV2ViT2JqZWN0UGx1Z2luKCkKLXsKLX0KLQotLyohCi0gIFxmbiBRU3RyaW5nTGlz
dCBRV2ViT2JqZWN0UGx1Z2luOjprZXlzKCkgY29uc3QKLQotICBUaGUga2V5cyBzaG91bGQgYmUg
dW5pcXVlIG5hbWVzLgotKi8KLQotLyohCi0gIEEgZGVzY3JpcHRpb24gZm9yIFxhIGtleS4KLSov
Ci1RU3RyaW5nIFFXZWJPYmplY3RQbHVnaW46OmRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJp
bmcgJmtleSkgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0vKiEKLSAgcmV0
dXJucyB0aGUgbWltZXR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQgYnkgXGEga2V5LgotKi8KLVFT
dHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5n
ICZrZXkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KCk7Ci19Ci0KLQotLyohCi0g
IFxmbiBRU3RyaW5nTGlzdCBRV2ViT2JqZWN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUo
KSBjb25zdAotCi0gIFNob3VsZCByZXR1cm4gYSBsaXN0IG9mIGV4dGVuc2lvbnMgdGhhdCBhcmUg
cmVjb2duaXNlZCB0byBtYXRjaCB0aGUgXGEgbWltZVR5cGUuCi0qLwotUVN0cmluZ0xpc3QgUVdl
Yk9iamVjdFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVU
eXBlKSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0vKiEKLSAgXGZu
IFFPYmplY3QgKlFXZWJPYmplY3RQbHVnaW46OmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVj
dG9yICpjb25uZWN0b3IsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgUVN0cmluZyAmbWltZVR5cGUs
IGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLCBjb25zdCBRU3RyaW5nTGlzdCAmYXJn
dW1lbnRWYWx1ZXMpIGNvbnN0Ci0KLSAgQ3JlYXRlcyBhIFFPYmplY3Qgd2l0aCBcYSBjb25uZWN0
b3IgdG8gaGFuZGxlIFxhIG1pbWVUeXBlLiBcYSBhcmd1bWVudE5hbWVzIGFuZCBcYSBhcmd1bWVu
dFZhbHVlcyBhcmUgYSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzIHBhc3NlZCBkaXJlY3RseQotICBm
cm9tIHRoZSAmbHQ7cGFyYW0mZ3Q7IGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgSFRNTCBvYmpl
Y3QgdGFnLgotKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmpl
Y3RwbHVnaW4uaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzYzdjYWY3Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkv
cXdlYm9iamVjdHBsdWdpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAg
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSovCi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fSAotI2RlZmluZSBRV0VCT0JK
RUNUUExVR0lOX0gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdENv
cmUvcXBsdWdpbi5oPgotI2luY2x1ZGUgPFF0Q29yZS9xZmFjdG9yeWludGVyZmFjZS5oPgotCi0j
aWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLWNsYXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0
b3I7Ci1jbGFzcyBRVXJsOwotCi1zdHJ1Y3QgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdp
bkZhY3RvcnlJbnRlcmZhY2UgOiBwdWJsaWMgUUZhY3RvcnlJbnRlcmZhY2UKLXsKLSAgICB2aXJ0
dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yICpjb25uZWN0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykg
Y29uc3QgPSAwOwotfTsKLQotI2RlZmluZSBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFj
ZV9paWQgImNvbS50cm9sbHRlY2guUXQuUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2Ui
Ci1RX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlLCBR
V2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZV9paWQpCi0KLWNsYXNzIFFXRUJLSVRfRVhQ
T1JUIFFXZWJPYmplY3RQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJPYmplY3RQ
bHVnaW5GYWN0b3J5SW50ZXJmYWNlCi17Ci0gICAgUV9PQkpFQ1QKLSAgICBRX0lOVEVSRkFDRVMo
UVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2U6UUZhY3RvcnlJbnRlcmZhY2UpCi1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgUVdlYk9iamVjdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQgPSAwKTsK
LSAgICB2aXJ0dWFsIH5RV2ViT2JqZWN0UGx1Z2luKCk7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmdM
aXN0IGtleXMoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25G
b3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0
IG1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwg
UVN0cmluZ0xpc3QgZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBl
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29u
bmVjdG9yICpjb25uZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVy
bCAmdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVU
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1
bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0
ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaCBiL1dlYktpdC9xdC9B
cGkvcXdlYm9iamVjdHBsdWdpbl9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUy
MDI2MWYuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luX3AuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTl9Q
X0gKLSNkZWZpbmUgUVdFQk9CSkVDVFBMVUdJTl9QX0gKLQotI2luY2x1ZGUgPFF0Q29yZS9xZ2xv
YmFsLmg+Ci0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbi5oIgotCi0jaWYgUVRfVkVSU0lPTiA8
IDB4MDQwNDAwCi0KLS8qCi0gIEZJWE1FOiBUaGlzIGlzIGNvcGllZCBmcm9tIHFmYWN0b3J5bG9h
ZGVyX3AuaC4KLSAgUmVtb3ZlIHRoaXMgb25jZSB3ZSBtYWRlIHFmYWN0b3J5bG9hZGVyIHB1Ymxp
YyBpbiBRdAotKi8KLWNsYXNzIFFGYWN0b3J5TG9hZGVyUHJpdmF0ZTsKLQotY2xhc3MgUV9DT1JF
X0VYUE9SVCBRRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1Rf
RkFLRQotICAgIFFfREVDTEFSRV9QUklWQVRFKFFGYWN0b3J5TG9hZGVyKQotCi1wdWJsaWM6Ci0g
ICAgUUZhY3RvcnlMb2FkZXIoY29uc3QgY2hhciAqaWlkLAotICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFTdHJpbmdMaXN0ICZwYXRocyA9IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAgICAgICAg
ICAgY29uc3QgUVN0cmluZyAmc3VmZml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAgICAgICAg
IFF0OjpDYXNlU2Vuc2l0aXZpdHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0gICAgflFGYWN0b3J5
TG9hZGVyKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7Ci0gICAgUU9iamVjdCAq
aW5zdGFuY2UoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLQotfTsKLQotY2xhc3MgUVdlYkZy
YW1lOwotCi1jbGFzcyBRV2ViRmFjdG9yeUxvYWRlciA6IHB1YmxpYyBRRmFjdG9yeUxvYWRlcgot
ewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUVdlYkZhY3RvcnlMb2FkZXIoY29uc3QgY2hh
ciAqaWlkLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZwYXRocyA9
IFFTdHJpbmdMaXN0KCksCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmc3Vm
Zml4ID0gUVN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgIFF0OjpDYXNlU2Vuc2l0aXZp
dHkgPSBRdDo6Q2FzZVNlbnNpdGl2ZSk7Ci0KLSAgICBzdGF0aWMgUVdlYkZhY3RvcnlMb2FkZXIg
KnNlbGYoKTsKLQotICAgIFFTdHJpbmdMaXN0IG5hbWVzKCkgY29uc3QgeyByZXR1cm4ga2V5cygp
OyB9Ci0gICAgUVN0cmluZ0xpc3QgZXh0ZW5zaW9ucygpIGNvbnN0OwotICAgIFFTdHJpbmcgZGVz
Y3JpcHRpb25Gb3JOYW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgUVN0cmluZ0xp
c3QgbWltZXR5cGVzRm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJp
bmcgbmFtZUZvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25zdDsKLSAgICBp
bmxpbmUgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBjb25z
dCB7Ci0gICAgICAgIHJldHVybiAhbmFtZUZvck1pbWV0eXBlKG1pbWVUeXBlKS5pc0VtcHR5KCk7
Ci0gICAgfQotCi0gICAgUVN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBRU3RyaW5n
ICZleHRlbnNpb24pOwotCi0gICAgUU9iamVjdCAqY3JlYXRlKFFXZWJGcmFtZSAqZnJhbWUsCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZyAmbWltZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJp
bmdMaXN0ICZhcmd1bWVudE5hbWVzLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5n
TGlzdCAmYXJndW1lbnRWYWx1ZXMpOwotCi0gICAgc3RydWN0IE1pbWVJbmZvIHsKLSAgICAgICAg
UVN0cmluZyB0eXBlOwotICAgICAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zOwotICAgIH07Ci0g
ICAgc3RydWN0IEluZm8gewotICAgICAgICBRU3RyaW5nIG5hbWU7Ci0gICAgICAgIFFTdHJpbmcg
ZGVzY3JpcHRpb247Ci0gICAgICAgIFFMaXN0PE1pbWVJbmZvPiBtaW1lczsKLSAgICB9OwotICAg
IFFMaXN0PEluZm8+IG1fcGx1Z2luSW5mbzsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5jcHAgYi9XZWJL
aXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBmNTNjMTY0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9i
amVjdHBsdWdpbmNvbm5lY3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0v
KgotICBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotICAKLSAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICAKLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICAKLSAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAgCi0qLwotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5jb25u
ZWN0b3IuaCIKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlICJxd2VibmV0d29y
a2ludGVyZmFjZS5oIgotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNs
dWRlICJxd2ViZnJhbWUuaCIKLSNpbmNsdWRlICJxd2VicGFnZS5oIgotCi1zdHJ1Y3QgUVdlYk9i
amVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUKLXsKLSAgICBRV2ViRnJhbWUgKmZyYW1lOwotfTsK
LQotUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6UVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvcihR
V2ViRnJhbWUgKmZyYW1lKQotewotICAgIGQgPSBuZXcgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rv
clByaXZhdGU7Ci0gICAgZC0+ZnJhbWUgPSBmcmFtZTsKLX0KLQotUVdlYkZyYW1lICpRV2ViT2Jq
ZWN0UGx1Z2luQ29ubmVjdG9yOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmZyYW1l
OwotfQotCi1RV2lkZ2V0ICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpwbHVnaW5QYXJlbnRX
aWRnZXQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5mcmFtZS0+cGFnZSgpLT52aWV3KCk7Ci19
Ci0KLVFXZWJOZXR3b3JrSm9iICpRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOjpyZXF1ZXN0VXJs
KGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgVGFyZ2V0IHRhcmdldCkKLXsKLSAg
ICBpZiAodGFyZ2V0ICE9IFBsdWdpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRV2ViTmV0
d29ya0pvYiAqam9iID0gbmV3IFFXZWJOZXR3b3JrSm9iOwotICAgIFFXZWJOZXR3b3JrSm9iUHJp
dmF0ZSAqcCA9IGpvYi0+ZDsKLSAgICBwLT5pbnRlcmZhY2UgPSBkLT5mcmFtZS0+cGFnZSgpLT5u
ZXR3b3JrSW50ZXJmYWNlKCk7Ci0gICAgcC0+Y29ubmVjdG9yID0gdGhpczsKLQotICAgIHAtPnJl
cXVlc3QgPSAqcmVxdWVzdC5kOwotCi0gICAgZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29ya0ludGVy
ZmFjZSgpLT5hZGRKb2Ioam9iKTsKLSAgICByZXR1cm4gam9iOwotfQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oIGIvV2ViS2l0
L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDYyMjUxYTMuLjAwMDAwMDAKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0
cGx1Z2luY29ubmVjdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICBD
b3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQotCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotKi8KLSNpZm5kZWYgUVdFQk9CSkVDVFBMVUdJTkNPTk5FQ1RPUl9ICi0jZGVmaW5l
IFFXRUJPQkpFQ1RQTFVHSU5DT05ORUNUT1JfSAotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5o
IgotI2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+Ci0KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0
MDAKLQotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlLmgiCi0KLWNsYXNzIFFXZWJGcmFt
ZTsKLWNsYXNzIFFXZWJQYWdlOwotY2xhc3MgUVdpZGdldDsKLWNsYXNzIFFVcmw7Ci1jbGFzcyBR
V2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yUHJpdmF0ZTsKLWNsYXNzIFFXZWJGYWN0b3J5TG9hZGVy
OwotY2xhc3MgUVdlYk5ldHdvcmtNYW5hZ2VyOwotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2Vi
T2JqZWN0UGx1Z2luQ29ubmVjdG9yIDogcHVibGljIFFPYmplY3QKLXsKLSAgICBRX09CSkVDVAot
cHVibGljOgotICAgIFFXZWJGcmFtZSAqZnJhbWUoKSBjb25zdDsKLSAgICBRV2lkZ2V0ICpwbHVn
aW5QYXJlbnRXaWRnZXQoKSBjb25zdDsKLQotICAgIGVudW0gVGFyZ2V0IHsKLSAgICAgICAgUGx1
Z2luLAotICAgICAgICBOZXcsCi0gICAgICAgIFNlbGYsCi0gICAgICAgIFBhcmVudCwKLSAgICAg
ICAgVG9wCi0gICAgfTsKLSAgICBRV2ViTmV0d29ya0pvYiAqcmVxdWVzdFVybChjb25zdCBRV2Vi
TmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQgPSBQbHVnaW4pOwotCi1zaWdu
YWxzOgotICAgIHZvaWQgc3RhcnRlZChRV2ViTmV0d29ya0pvYiopOwotICAgIHZvaWQgZGF0YShR
V2ViTmV0d29ya0pvYiosIGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpOwotICAgIHZvaWQgZmluaXNo
ZWQoUVdlYk5ldHdvcmtKb2IqLCBpbnQgZXJyb3JDb2RlKTsKLQotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgUVdlYkZhY3RvcnlMb2FkZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJOZXR3b3Jr
TWFuYWdlcjsKLSAgICBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKFFXZWJGcmFtZSAqZnJhbWUp
OwotCi0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGUgKmQ7Ci19OwotCi0jZW5k
aWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IDZlNWU5ODQuLjQxMjFhNDEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwCkBAIC0xMjgsNiArMTI4LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZh
dGUoUVdlYlBhZ2UgKnFxKQogICAgIG5ldHdvcmtJbnRlcmZhY2UgPSAwOwogI2Vsc2UKICAgICBu
ZXR3b3JrTWFuYWdlciA9IDA7CisgICAgcGx1Z2luRmFjdG9yeSA9IDA7CiAjZW5kaWYKICAgICBp
bnNpZGVPcGVuQ2FsbCA9IGZhbHNlOwogCkBAIC0xNDA2LDYgKzE0MDcsMTYgQEAgUU5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyICpRV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25zdAogICAg
IHJldHVybiBkLT5uZXR3b3JrTWFuYWdlcjsKIH0KIAordm9pZCBRV2ViUGFnZTo6c2V0UGx1Z2lu
RmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9yeSkKK3sKKyAgICBkLT5wbHVnaW5GYWN0
b3J5ID0gZmFjdG9yeTsKK30KKworUVdlYlBsdWdpbkZhY3RvcnkgKlFXZWJQYWdlOjpwbHVnaW5G
YWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZC0+cGx1Z2luRmFjdG9yeTsKK30KKwogI2Vu
ZGlmCiAKIC8qIQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5oCmluZGV4IGU3NmY5MzUuLjg1NTdjMzEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKQEAg
LTQyLDYgKzQyLDcgQEAgY2xhc3MgUVdlYkhpc3Rvcnk7CiBjbGFzcyBRV2ViUGFnZVByaXZhdGU7
CiBjbGFzcyBRV2ViRnJhbWVEYXRhOwogY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7CitjbGFz
cyBRV2ViUGx1Z2luRmFjdG9yeTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENo
cm9tZUNsaWVudFF0OwpAQCAtMTcxLDYgKzE3Miw5IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgdm9p
ZCBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIp
OwogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIoKSBjb25z
dDsKKworICAgIHZvaWQgc2V0UGx1Z2luRmFjdG9yeShRV2ViUGx1Z2luRmFjdG9yeSAqZmFjdG9y
eSk7CisgICAgUVdlYlBsdWdpbkZhY3RvcnkgKnBsdWdpbkZhY3RvcnkoKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgcXVpbnQ2NCB0b3RhbEJ5dGVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCmluZGV4IDgw
YjFlMjkuLjY0ZWRkMzIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCisr
KyBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2VfcC5oCkBAIC0xNTQsNiArMTU0LDEwIEBAIHB1Ymxp
YzoKICAgICBRV2ViU2V0dGluZ3MgKnNldHRpbmdzOwogCiAgICAgUUFjdGlvbiAqYWN0aW9uc1tR
V2ViUGFnZTo6V2ViQWN0aW9uQ291bnRdOworCisjaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAor
ICAgIFFXZWJQbHVnaW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5OworI2VuZGlmCiB9OwogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIGIvV2Vi
S2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2I1ZDQ1NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC9BcGkvcXdl
YnBsdWdpbmZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJxd2VicGx1Z2luZmFjdG9yeS5oIgorCitRV2ViUGx1Z2luRmFjdG9yeTo6UVdl
YlBsdWdpbkZhY3RvcnkoUU9iamVjdCAqcGFyZW50KQorICAgIDogUU9iamVjdChwYXJlbnQpCit7
Cit9CisKK1FXZWJQbHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkoKQoreworfQorCit2
b2lkIFFXZWJQbHVnaW5GYWN0b3J5OjpyZWZyZXNoUGx1Z2lucygpCit7Cit9CisKK2Jvb2wgUVdl
YlBsdWdpbkZhY3Rvcnk6OmV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRl
bnNpb25PcHRpb24gKm9wdGlvbiwgRXh0ZW5zaW9uUmV0dXJuICpvdXRwdXQpCit7Cit9CisKK2Jv
b2wgUVdlYlBsdWdpbkZhY3Rvcnk6OnN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNp
b24pIGNvbnN0Cit7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0
b3J5LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwNWY1YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaApAQCAtMCwwICsxLDcyIEBACisvKgorICBDb3B5cmln
aHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KworKi8KKyNpZm5kZWYgUVdFQlBMVUdJTkZBQ1RPUllfSAorI2RlZmluZSBRV0VCUExVR0lORkFD
VE9SWV9ICisKKyNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCisKKyNpbmNsdWRlIDxRdENvcmUv
cW9iamVjdC5oPgorI2luY2x1ZGUgPFF0Q29yZS9xc3RyaW5nbGlzdC5oPgorCitjbGFzcyBRVXJs
OworY2xhc3MgUVdlYlBsdWdpbkZhY3RvcnlQcml2YXRlOworY2xhc3MgUVN0cmluZzsKKworY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVdlYlBsdWdpbkZhY3RvcnkgOiBwdWJsaWMgUU9iamVjdAorewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgc3RydWN0IE1pbWVUeXBlIHsKKyAgICAgICAgUVN0
cmluZyBuYW1lOworICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBRU3RyaW5n
TGlzdCBmaWxlRXh0ZW5zaW9uczsKKyAgICB9OworCisgICAgc3RydWN0IFBsdWdpbiB7CisgICAg
ICAgIFFTdHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAg
UUxpc3Q8TWltZVR5cGU+IG1pbWVUeXBlczsKKyAgICB9OworCisgICAgZXhwbGljaXQgUVdlYlBs
dWdpbkZhY3RvcnkoUU9iamVjdCAqcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVdlYlBsdWdp
bkZhY3RvcnkoKTsKKworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOworCisgICAgdmlydHVhbCBR
T2JqZWN0ICpjcmVhdGUoY29uc3QgUVN0cmluZyAmbWltZVR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUVVybCAmdXJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykgY29uc3QgPSAwOworCisg
ICAgZW51bSBFeHRlbnNpb24geworICAgIH07CisgICAgY2xhc3MgRXh0ZW5zaW9uT3B0aW9uCisg
ICAge307CisgICAgY2xhc3MgRXh0ZW5zaW9uUmV0dXJuCisgICAge307CisgICAgdmlydHVhbCBi
b29sIGV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uLCBjb25zdCBFeHRlbnNpb25PcHRpb24g
Km9wdGlvbiA9IDAsIEV4dGVuc2lvblJldHVybiAqb3V0cHV0ID0gMCk7CisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0OworCitwcml2
YXRlOgorICAgIFFXZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZSAqZDsKK307CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3Bw
IGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCmluZGV4
IGVkOTFiODYuLmRkYTBjZWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmNwcAorKysgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0u
aCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJx
d2ViZnJhbWVfcC5oIgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5aW50ZXJmYWNlLmgiCisjaW5jbHVk
ZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKIAogI2luY2x1ZGUgPHFmaWxlaW5mby5oPgogCkBAIC02
MCw3ICs2Miw2IEBACiAjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KICNlbHNlCiAjaW5jbHVkZSAi
cXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW5fcC5o
IgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC05MDcsMTEgKzkwOCw4IEBAIE9iamVj
dENvbnRlbnRUeXBlIEZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRJbWFn
ZTsKIAotICAgIC8vICMjIyBGSVhNRSBRdCA0LjQKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAK
LSAgICBpZiAoUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1l
VHlwZSkpCi0gICAgICAgIHJldHVybiBPYmplY3RDb250ZW50TmV0c2NhcGVQbHVnaW47Ci0jZW5k
aWYKKyAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0
YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBlKSkKKyAgICAgICAgcmV0dXJuIE9iamVjdENv
bnRlbnRPdGhlclBsdWdpbjsKIAogICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpKQogICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVu
dEZyYW1lOwpAQCAtOTcyLDExICs5NzAsMTEgQEAgV2lkZ2V0KiBGcmFtZUxvYWRlckNsaWVudFF0
OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50U2l6ZSYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnMKICAg
ICAgICAgfQogICAgIH0KIAotICAgIC8vICMjIyBGSVhNRTogcXQgNC40Ci0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIG9iamVjdCA9IFFXZWJGYWN0
b3J5TG9hZGVyOjpzZWxmKCktPmNyZWF0ZShtX3dlYkZyYW1lLCBxdXJsLCBtaW1lVHlwZSwgcGFy
YW1zLCB2YWx1ZXMpOwotI2VuZGlmCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgUVdlYlBs
dWdpbkZhY3RvcnkqIGZhY3RvcnkgPSBtX3dlYkZyYW1lLT5wYWdlKCktPnBsdWdpbkZhY3Rvcnko
KTsKKyAgICAgICAgaWYgKGZhY3RvcnkpCisgICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5j
cmVhdGUobWltZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKKyAgICB9CiAKICAgICBpZiAo
b2JqZWN0KSB7CiAgICAgICAgIFFXaWRnZXQgKndpZGdldCA9IHFvYmplY3RfY2FzdDxRV2lkZ2V0
ICo+KG9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZS5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZS5jcHAKaW5kZXggNWRmOGEzOC4uMmU0OTcwYSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKICNpbmNsdWRlICJqc29iamVjdHMuaCIKKyNp
bmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKICNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFGaWxl
PgpAQCAtODcsNiArODgsOCBAQCBXZWJQYWdlOjpXZWJQYWdlKFFXaWRnZXQgKnBhcmVudCwgRHVt
cFJlbmRlclRyZWUgKmRydCkKICAgICBzZXR0aW5ncygpLT5zZXRBdHRyaWJ1dGUoUVdlYlNldHRp
bmdzOjpMaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluLCBmYWxzZSk7CiAgICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwoZ2VvbWV0cnlDaGFuZ2VSZXF1ZXN0KGNvbnN0IFFSZWN0ICYpKSwKICAgICAgICAg
ICAgIHRoaXMsIFNMT1Qoc2V0Vmlld0dlb21ldHJ5KGNvbnN0IFFSZWN0ICYgKSkpOworCisgICAg
c2V0UGx1Z2luRmFjdG9yeShuZXcgVGVzdFBsdWdpbih0aGlzKSk7CiB9CiAKIFFXZWJQYWdlICpX
ZWJQYWdlOjpjcmVhdGVXaW5kb3coKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvbWFpbi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNw
cAppbmRleCBkZDRjMGU5Li43MzhiZTdmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9tYWluLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9t
YWluLmNwcApAQCAtMjgsNyArMjgsNiBAQAogICovCiAKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJl
ZS5oIgotI2luY2x1ZGUgInRlc3RwbHVnaW4uaCIKIAogI2luY2x1ZGUgPHFzdHJpbmdsaXN0Lmg+
CiAjaW5jbHVkZSA8cWFwcGxpY2F0aW9uLmg+CkBAIC00OSwxMCArNDgsNiBAQAogI2luY2x1ZGUg
PGV4ZWNpbmZvLmg+CiAjZW5kaWYKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotUV9JTVBP
UlRfUExVR0lOKHRlc3RwbHVnaW4pCi0jZW5kaWYKLQogdm9pZCBtZXNzYWdlSGFuZGxlcihRdE1z
Z1R5cGUgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgICBpZiAodHlwZSA9PSBRdENy
aXRpY2FsTXNnKSB7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90
ZXN0cGx1Z2luLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4u
Y3BwCmluZGV4IDI3NTU4YzkuLmYzZTAzOTkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L3Rlc3RwbHVnaW4uY3BwCkBAIC0yNywxMCArMjcsOCBAQAogICovCiAjaW5jbHVkZSAi
dGVzdHBsdWdpbi5oIgogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KIFRlc3RQbHVnaW46
OlRlc3RQbHVnaW4oUU9iamVjdCAqcGFyZW50KQotICAgIDogUVdlYk9iamVjdFBsdWdpbihwYXJl
bnQpCisgICAgOiBRV2ViUGx1Z2luRmFjdG9yeShwYXJlbnQpCiB7CiB9CiAKQEAgLTM4LDM0ICsz
NiwzMiBAQCBUZXN0UGx1Z2luOjp+VGVzdFBsdWdpbigpCiB7CiB9CiAKLVFTdHJpbmdMaXN0IFRl
c3RQbHVnaW46OmtleXMoKSBjb25zdAorUUxpc3Q8UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbj4g
VGVzdFBsdWdpbjo6cGx1Z2lucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFM
YXRpbjFTdHJpbmcoInRlc3RwbHVnaW4iKSk7Ci19CisgICAgUVdlYlBsdWdpbkZhY3Rvcnk6OlBs
dWdpbiBwbHVnaW47CiAKLVFTdHJpbmcgVGVzdFBsdWdpbjo6ZGVzY3JpcHRpb25Gb3JLZXkoY29u
c3QgUVN0cmluZyAmKSBjb25zdAotewotICAgIHJldHVybiBRTGF0aW4xU3RyaW5nKCJ0ZXN0ZGVz
Y3JpcHRpb24iKTsKLX0KKyAgICBwbHVnaW4ubmFtZSA9ICJ0ZXN0cGx1Z2luIjsKKyAgICBwbHVn
aW4uZGVzY3JpcHRpb24gPSAidGVzdGRlc2NyaXB0aW9uIjsKKyAgICBNaW1lVHlwZSBtaW1lVHlw
ZTsKKyAgICBtaW1lVHlwZS5uYW1lID0gInRlc3R0eXBlIjsKKyAgICBtaW1lVHlwZS5maWxlRXh0
ZW5zaW9ucy5hcHBlbmQoInRlc3RzdWZmaXhlcyIpOworICAgIHBsdWdpbi5taW1lVHlwZXMuYXBw
ZW5kKG1pbWVUeXBlKTsKIAotUVN0cmluZ0xpc3QgVGVzdFBsdWdpbjo6bWltZXR5cGVzRm9yS2V5
KGNvbnN0IFFTdHJpbmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGlu
MVN0cmluZygidGVzdHR5cGUiKSk7Ci19CisgICAgcGx1Z2luLm5hbWUgPSAidGVzdHBsdWdpbjIi
OworICAgIHBsdWdpbi5kZXNjcmlwdGlvbiA9ICJ0ZXN0ZGVzY3JpcHRpb24yIjsKKyAgICBtaW1l
VHlwZS5uYW1lID0gInRlc3R0eXBlMiI7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBw
ZW5kKCJ0ZXN0c3VmZml4ZXMyIik7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5k
KCJ0ZXN0c3VmZml4ZXMzIik7CisgICAgcGx1Z2luLm1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUp
OwogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2luOjpleHRlbnNpb25zRm9yTWltZXR5cGUoY29uc3Qg
UVN0cmluZyAmKSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3RyaW5n
KCJ0ZXN0c3VmZml4ZXMiKSk7CisgICAgcmV0dXJuIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQ
bHVnaW4+KCkgPDwgcGx1Z2luOwogfQogCi1RT2JqZWN0ICpUZXN0UGx1Z2luOjpjcmVhdGUoUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFFVcmwgJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmKSBjb25zdAorUU9iamVj
dCAqVGVzdFBsdWdpbjo6Y3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIDA7CiB9CiAKLVFfRVhQT1JUX1BMVUdJTjIodGVzdHBsdWdpbiwgVGVzdFBs
dWdpbikKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
dGVzdHBsdWdpbi5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5o
CmluZGV4IGUzMDUwNjkuLmVjZmQ5NzcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9x
dC90ZXN0cGx1Z2luLmgKQEAgLTI1LDI4ICsyNSwyMSBAQAogICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCiAg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotI2lmIFFUX1ZFUlNJT04gPCAw
eDA0MDQwMAotI2RlZmluZSBRVF9TVEFUSUNQTFVHSU4KLSNpbmNsdWRlIDxxd2Vib2JqZWN0cGx1
Z2luLmg+CisjaW5jbHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KIAogCi1jbGFzcyBUZXN0UGx1
Z2luIDogcHVibGljIFFXZWJPYmplY3RQbHVnaW4KK2NsYXNzIFRlc3RQbHVnaW4gOiBwdWJsaWMg
UVdlYlBsdWdpbkZhY3RvcnkKIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBUZXN0UGx1Z2luKFFP
YmplY3QgKnBhcmVudCA9IDApOwogICAgIHZpcnR1YWwgflRlc3RQbHVnaW4oKTsKIAotICAgIHZp
cnR1YWwgUVN0cmluZ0xpc3Qga2V5cygpIGNvbnN0OworICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2lu
PiBwbHVnaW5zKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIFFTdHJpbmcgZGVzY3JpcHRpb25Gb3JL
ZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IG1p
bWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIHZpcnR1YWwgUVN0
cmluZ0xpc3QgZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlKSBj
b25zdDsKLSAgICB2aXJ0dWFsIFFPYmplY3QgKmNyZWF0ZShRV2ViT2JqZWN0UGx1Z2luQ29ubmVj
dG9yICpjb25uZWN0b3IsCisgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoY29uc3QgUVN0cmlu
ZyAmbWltZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVVybCAmdXJs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudE5h
bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1
bWVudFZhbHVlcykgY29uc3Q7CisKIH07CiAKLSNlbmRpZgo=
</data>
<flag name="review"
          id="8501"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19583</attachid>
            <date>2008-03-07 07:55:55 -0800</date>
            <delta_ts>2008-03-07 08:11:35 -0800</delta_ts>
            <desc>difference to the previous patch</desc>
            <filename>patch_delta.txt</filename>
            <type>text/plain</type>
            <size>16545</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3OGViZjE0Li5hYTE2ZmQy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBwbHVnaW5z
IHN1YmRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogV2ViS2l0LnBy
aToKKwogMjAwOC0wMy0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGY0NGM5ZC4uMDAwZTFhZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNt
YW5uQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0Y2FzZSBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4MTUKKworICAgICAgICAqIGZhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMt
Y3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL25hdmlnYXRvci1w
bHVnaW5zLWNyYXNoLmh0bWw6IEFkZGVkLgorCiAyMDA4LTAzLTA2ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNmODEwYS4uNTNl
Yzc5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSwxNjAgQEAKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21h
bm5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgxNQorCisg
ICAgICAgIFBvcnRlZCB0aGUgbWFudWFsbHkgd3JpdHRlbiBKUyBiaW5kaW5ncyBvZiB3aW5kb3cu
bmF2aWdhdG9yLAorICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMgYW5kIHdpbmRvdy5u
YXZpZ2F0b3IubWltZVR5cGVzIHRvCisgICAgICAgIGF1dG8tZ2VuZXJhdGVkIGJpbmRpbmdzLgor
CisgICAgICAgIE1vdmVkIHRoZSBnbG9iYWxseSBjYWNoZWQgcGx1Z2luIGFuZCBtaW1ldHlwZSBp
bmZvcm1hdGlvbiB0byBhCisgICAgICAgIHBlciBXZWJDb3JlOjpQYWdlIHNoYXJlZCBQbHVnaW5E
YXRhIHN0cnVjdHVyZS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3cubmF2aWdhdG9yLnBs
dWdpbnMucmVmcmVzaCgpIGluIGEKKyAgICAgICAgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5Lgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU01pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpuZWVkc1lv
dVR1YmVRdWlyayk6CisgICAgICAgIChXZWJDb3JlOjpKU05hdmlnYXRvcjo6YXBwVmVyc2lvbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGx1Z2lu
OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmg6IFJlbW92ZWQu
CisgICAgICAgICogZG9tL0NsaXBib2FyZC5jcHA6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVE
b2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4pOgorICAgICAgICAqIHBhZ2UvRE9N
V2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpuYXZpZ2F0b3IpOgorICAgICAgICAqIHBhZ2UvRE9NV2lu
ZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAqIHBh
Z2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpOYXZpZ2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2
aWdhdG9yOjp+TmF2aWdhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6ZGlzY29u
bmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBwQ29kZU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjphcHBOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdmlnYXRvcjo6YXBwVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6Omxh
bmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6dXNlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TmF2
aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWltZVR5cGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cHJvZHVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpOYXZpZ2F0b3I6OnByb2R1Y3RTdWIpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9y
Ojp2ZW5kb3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjp2ZW5kb3JTdWIpOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRvcjo6amF2YUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjpmcmFtZSk6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cGx1Z2luRGF0YSk6
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9QbHVnaW4uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBjYW5Q
cm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlVmlld0Zh
Y3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL3F0L0ZyYW1lUXQuY3BwOgorICAgICAgICAqIHBhZ2Uv
d2luL0ZyYW1lV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lv
bik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGU6Ok1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlOjp+
TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWltZVR5cGU6OnN1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBl
OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNaW1lVHlwZTo6ZW5hYmxlZFBsdWdp
bik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvTWltZVR5cGUuaWRsOiBB
ZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Ok1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGVBcnJheTo6fk1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
TWltZVR5cGVBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6
Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0YSk6CisgICAgICAgICog
cGx1Z2lucy9NaW1lVHlwZUFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5
cGVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6OmRpc2Nv
bm5lY3RGcmFtZSk6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbDogQWRkZWQu
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbjo6UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6flBsdWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
OjpmaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsdWdpbnMvUGx1Z2luLmlkbDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6OlBs
dWdpbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5Ojp+UGx1Z2luQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5BcnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6
Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpuYW1l
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpyZWZyZXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpnZXRQbHVnaW5EYXRhKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpbkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6ZGlzY29ubmVjdEZyYW1l
KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbDogQWRkZWQuCisgICAgICAgICog
cGx1Z2lucy9QbHVnaW5EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
YXRhOjpQbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6On5QbHVnaW5E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBlKToKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6ZGlzY29u
bmVjdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGE6Om1pbWVzKToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFjLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gpOgorICAgICAgICAqIHBsdWdpbnMvcXQv
UGx1Z2luRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisKKzIwMDgtMDMtMDcgIFNpbW9uIEhh
dXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBGaXggdGhlIFF0IGJ1aWxk
LgogCiAgICAgICAgICogV2ViQ29yZS5wcm86CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IDczMWI1ODEuLjJm
OGFlYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgU3RyaW5nIE5hdmlnYXRv
cjo6YXBwVmVyc2lvbigpIGNvbnN0CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50
IHN0cmluZyBwYXN0IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KLSAgICBjb25zdCBTdHJpbmcgJnVz
ZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQo
KSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9j
dW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKICAgICByZXR1
cm4gdXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7CiB9CiAKQEAg
LTE2Nyw3ICsxNjcsNyBAQCBib29sIE5hdmlnYXRvcjo6amF2YUVuYWJsZWQoKSBjb25zdAogewog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gbV9mcmFt
ZS0+c2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCgpOworICAgIHJldHVybiBtX2ZyYW1lLT5zZXR0
aW5ncygpLT5pc0phdmFFbmFibGVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCA5ZDJjM2Y4Li43ZjEwNTk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yNDAsMTQgKzI0MCwxNCBAQCB2b2lkIFBh
Z2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmcmFtZXNOZWVkaW5nUmVsb2FkLnNpemUoKTsg
KytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9hZC5zaXpl
KCk7ICsraSkKICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCktPnJlbG9h
ZCgpOwogfQogCiBQbHVnaW5EYXRhKiBQYWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fcGx1Z2luRGF0YSkKLSAgICAgICAgbV9wbHVnaW5EYXRhID0gbmV3IFBsdWdpbkRhdGEo
dGhpcyk7CisgICAgICAgIG1fcGx1Z2luRGF0YSA9IFBsdWdpbkRhdGE6OmNyZWF0ZSh0aGlzKTsK
ICAgICByZXR1cm4gbV9wbHVnaW5EYXRhLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsdWdpbnMvTWltZVR5cGUuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcAppbmRl
eCAxNzBlMjA4Li44MTk1YTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKQEAgLTI4LDggKzI4LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWltZVR5cGU6Ok1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1
Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpCi0gICAgOiBSZWZDb3VudGVkPE1p
bWVUeXBlPigwKQotICAgICwgbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCisgICAgOiBtX3BsdWdp
bkRhdGEocGx1Z2luRGF0YSkKICAgICAsIG1faW5kZXgoaW5kZXgpCiB7CiB9CkBAIC0zOCwxNyAr
MzcsMTcgQEAgTWltZVR5cGU6On5NaW1lVHlwZSgpCiB7CiB9CiAKLVN0cmluZyBNaW1lVHlwZTo6
dHlwZSgpIGNvbnN0Citjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjp0eXBlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT50eXBlOwogfQogCi1TdHJp
bmcgTWltZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKK2NvbnN0IFN0cmluZyAmTWltZVR5cGU6OnN1
ZmZpeGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5k
ZXhdLT5zdWZmaXhlczsKIH0KIAotU3RyaW5nIE1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0
Citjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+ZGVzYzsKIH0KQEAgLTU5LDExICs1
OCwxMiBAQCBQYXNzUmVmUHRyPFBsdWdpbj4gTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25z
dAogICAgIGlmICghcCB8fCAhcC0+c2V0dGluZ3MoKS0+YXJlUGx1Z2luc0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1l
cyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBjb25zdCBQbHVnaW5JbmZvICppbmZvID0g
bV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5wbHVnaW47CiAgICAgY29uc3QgVmVjdG9y
PFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkKLSAgICAgICAg
aWYgKHBsdWdpbnNbaV0gPT0gbWltZXNbbV9pbmRleF0tPnBsdWdpbikKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBsdWdpbnNb
aV0gPT0gaW5mbykKICAgICAgICAgICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRh
dGEuZ2V0KCksIGkpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaAppbmRl
eCBhMTFmY2FjLi4xZTA2N2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
aAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApAQCAtMzYsOSArMzYsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1pbWVUeXBlPiBjcmVh
dGUoUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1pbWVUeXBlKHBsdWdpbkRhdGEsIGluZGV4KSk7IH0KICAgICAg
ICAgfk1pbWVUeXBlKCk7CiAKLSAgICAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICAgICAg
U3RyaW5nIHN1ZmZpeGVzKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OworICAgICAgICBjb25zdCBTdHJpbmcgJnR5cGUoKSBjb25zdDsKKyAgICAgICAgY29uc3Qg
U3RyaW5nICZzdWZmaXhlcygpIGNvbnN0OworICAgICAgICBjb25zdCBTdHJpbmcgJmRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgICAgIFBhc3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlQXJyYXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCmluZGV4IGI5
ZjgzNTkuLjNiMWU0OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAKQEAgLTI4LDggKzI4
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJh
eShGcmFtZSogZnJhbWUpCi0gICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlQXJyYXk+KDApCi0gICAg
LCBtX2ZyYW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNw
cAppbmRleCBmYzAwNTQ5Li5jYTc3NWQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1
Z2luLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcApAQCAtMjYsOCArMjYsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbHVnaW46OlBsdWdpbihQbHVnaW5EYXRhKiBwbHVn
aW5EYXRhLCB1bnNpZ25lZCBpbmRleCkKLSAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luPigwKQotICAg
ICwgbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0
YSkKICAgICAsIG1faW5kZXgoaW5kZXgpCiB7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luQXJyYXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcAppbmRl
eCAyNTEyM2JiLi4zNmJjZTkwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJy
YXkuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAKQEAgLTI4LDggKzI4
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGx1Z2luQXJyYXk6OlBsdWdpbkFycmF5KEZy
YW1lKiBmcmFtZSkKLSAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luQXJyYXk+KDApCi0gICAgLCBtX2Zy
YW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEu
Y3BwCmluZGV4IGI2MGVjOGQuLmQyYzFlZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW5EYXRhLmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKQEAgLTI3
LDggKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGx1Z2luRGF0YTo6UGx1Z2luRGF0
YShjb25zdCBQYWdlKiBwYWdlKQotICAgIDogUmVmQ291bnRlZDxQbHVnaW5EYXRhPigwKQotICAg
ICwgbV9wYWdlKHBhZ2UpCisgICAgOiBtX3BhZ2UocGFnZSkKIHsKICAgICBpbml0UGx1Z2lucygp
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGEuaAppbmRleCA2Nzc5YWFlLi40MGU4MzRjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5E
YXRhLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEZJWE1F
OiBtZXJnZSB3aXRoIFBsdWdpbkRhdGFiYXNlIGluIHRoZSBmdXR1cmUKICAgICBjbGFzcyBQbHVn
aW5EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luRGF0YT4gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUGx1Z2luRGF0YShjb25zdCBQYWdlKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsdWdpbkRhdGE+IGNyZWF0ZShjb25zdCBQYWdlKiBwYWdlKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgUGx1Z2luRGF0YShwYWdlKSk7IH0KICAgICAgICAgflBsdWdpbkRhdGEoKTsKIAogICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RQYWdlKCkgeyBtX3BhZ2UgPSAwOyB9CkBAIC02MSw2ICs2MSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHZvaWQgcmVmcmVzaCgpOwogCiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luRGF0YShjb25zdCBQYWdlKik7CiAgICAgICAgIHZv
aWQgaW5pdFBsdWdpbnMoKTsKIAogICAgICAgICBWZWN0b3I8UGx1Z2luSW5mbyo+IG1fcGx1Z2lu
czsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKaW5kZXggYTFkOWRiZS4uNTNhMmQxNCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOC0wMy0w
NyAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgV2ViVmlld0ZhY3Rv
cnkncyByZWZyZXNoUGx1Z2lucyBtZXRob2QgdG8gb25seSByZWZyZXNoIHRoZQorICAgICAgICBw
bHVnaW5zIGFuZCBub3QgcmVsb2FkIHRoZSBmcmFtZXMgYW55bW9yZSBzaW5jZSB0aGF0J3Mgbm93
IGRvbmUgaW4gYQorICAgICAgICBwbGF0Zm9ybSBpbmRlcGVuZGVudCBtYW5uZXIgYnkgV2ViQ29y
ZTo6UGFnZS4KKworICAgICAgICBBbHNvIHJlbW92ZWQgdGhlIG5vdyB1bnVzZWQgcGx1Z2luTmFt
ZUZvck1JTUVUeXBlIGFuZAorICAgICAgICBwbHVnaW5TdXBwb3J0c01JTUVUeXBlIG1ldGhvZHMu
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWVJbnRlcm5h
bC5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKwogMjAwOC0wMy0wNiAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IGY3Nzc3NDEuLjM2Yjg5YTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDA4LTAzLTA3ICBTaW1vbiBI
YXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZWQgdGhlIFFXZWJPYmplY3RQbHVnaW4gaW50
ZXJmYWNlcyB3aXRoIFFXZWJQbHVnaW5GYWN0b3J5LgorCisgICAgICAgICogQXBpL3F3ZWJuZXR3
b3JraW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkKToKKyAg
ICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFFXZWJOZXR3b3Jr
TWFuYWdlcjo6c3RhcnRlZCk6CisgICAgICAgIChRV2ViTmV0d29ya01hbmFnZXI6OmRhdGEpOgor
ICAgICAgICAoUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5pc2hlZCk6CisgICAgICAgICogQXBpL3F3
ZWJuZXR3b3JraW50ZXJmYWNlX3AuaDoKKyAgICAgICAgKFFXZWJOZXR3b3JrSm9iUHJpdmF0ZTo6
UVdlYk5ldHdvcmtKb2JQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3ZWJvYmplY3RwbHVnaW4uaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbl9wLmg6IFJlbW92ZWQuCisgICAgICAgICog
QXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFw
aS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKToK
KyAgICAgICAgKFFXZWJQYWdlOjpzZXRQbHVnaW5GYWN0b3J5KToKKyAgICAgICAgKFFXZWJQYWdl
OjpwbHVnaW5GYWN0b3J5KToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBB
cGkvcXdlYnBhZ2VfcC5oOgorICAgICAgICAqIEFwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHA6IEFk
ZGVkLgorICAgICAgICAoUVdlYlBsdWdpbkZhY3Rvcnk6OlFXZWJQbHVnaW5GYWN0b3J5KToKKyAg
ICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkpOgorICAgICAgICAo
UVdlYlBsdWdpbkZhY3Rvcnk6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFFXZWJQbHVnaW5G
YWN0b3J5OjpleHRlbnNpb24pOgorICAgICAgICAqIEFwaS9xd2VicGx1Z2luZmFjdG9yeS5oOiBB
ZGRlZC4KKyAgICAgICAgKE1pbWVUeXBlOjopOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRRdDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDo6Y3JlYXRlUGx1Z2luKToKKworMjAwOC0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxo
YXVzbWFubkB3ZWJraXQub3JnPgorCiAgICAgICAgIEZpeCB0aGUgUXQgYnVpbGQuCiAKICAgICAg
ICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCBjZjU5NjY0Li42NmVjYjIwIDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQb3J0ZWQgdGhlIG5ldHNjYXBlIHRlc3QgcGx1Z2luIHRvIFFXZWJQbHVnaW5GYWN0b3J5Lgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvbWFpbi5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHA6
CisgICAgICAgIChUZXN0UGx1Z2luOjpwbHVnaW5zKToKKyAgICAgICAgKFRlc3RQbHVnaW46OmNy
ZWF0ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oOgorCiAyMDA4
LTAzLTA2ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19584</attachid>
            <date>2008-03-07 08:02:35 -0800</date>
            <delta_ts>2008-03-07 08:16:06 -0800</delta_ts>
            <desc>updated patch rebased against trunk and including the latest suggestions</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>186702</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3OGViZjE0Li5hYTE2ZmQy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBwbHVnaW5z
IHN1YmRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogV2ViS2l0LnBy
aToKKwogMjAwOC0wMy0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGY0NGM5ZC4uMDAwZTFhZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNt
YW5uQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0Y2FzZSBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4MTUKKworICAgICAgICAqIGZhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMt
Y3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL25hdmlnYXRvci1w
bHVnaW5zLWNyYXNoLmh0bWw6IEFkZGVkLgorCiAyMDA4LTAzLTA2ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2ZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2aW91c2x5IHJlY2Vp
dmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlwZXMgYWZ0ZXIgY2Fs
bGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMgYW5kIHRoZXJlIGlz
IG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jNjRmZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzxodG1s
PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgcGx1Z2lucyA9IG5ldyBB
cnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kp
IHsKKyAgICBwbHVnaW5zLnB1c2gobmF2aWdhdG9yLnBsdWdpbnNbaV0pOworfQorCit2YXIgbWlt
ZVR5cGVzID0gbmV3IEFycmF5OworZm9yICh2YXIgaSA9IDA7IGkgPCBuYXZpZ2F0b3IubWltZVR5
cGVzLmxlbmd0aDsgKytpKSB7CisgICAgbWltZVR5cGVzLnB1c2gobmF2aWdhdG9yLm1pbWVUeXBl
c1tpXSk7Cit9CisKK25hdmlnYXRvci5wbHVnaW5zLnJlZnJlc2goKTsKKwordmFyIG91dHB1dCA9
ICI8cHJlPiI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7ICsraSkgewor
ICAgIG91dHB1dCArPSBwbHVnaW5zW2ldLm5hbWU7CisgICAgb3V0cHV0ICs9ICJcbiI7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgb3V0cHV0
ICs9IG1pbWVUeXBlc1tpXS50eXBlOworICAgIG91dHB1dCArPSAiXG4iOworfQorCitvdXRwdXQg
Kz0gIjwvcHJlPiI7CisKKy8vZG9jdW1lbnQud3JpdGVsbihvdXRwdXQpOworZG9jdW1lbnQud3Jp
dGVsbigiVGVzdHMgYWNjZXNzIHRvIHByZXZpb3VzbHkgcmVjZWl2ZWQgYXJyYXlzIGZyb20gbmF2
aWdhdG9yLnBsdWdpbnMgYW5kIG1pbWV0eXBlcyBhZnRlciBjYWxsaW5nIHBsdWdpbnMucmVmcmVz
aCgpLiBJZiB0aGlzIHRleHQgYXBwZWFycyBhbmQgdGhlcmUgaXMgbm8gY3Jhc2gsIHRoZW4gdGhl
IHRlc3Qgc3VjY2VlZGVkLiIpOworCis8L3NjcmlwdD4KKzxib2R5PgorPC9ib2R5PjwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzNmODEwYS4uNTNlYzc5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNjAgQEAKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNt
YW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjgxNQorCisgICAgICAgIFBvcnRlZCB0aGUgbWFudWFsbHkgd3JpdHRlbiBKUyBiaW5kaW5n
cyBvZiB3aW5kb3cubmF2aWdhdG9yLAorICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMg
YW5kIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzIHRvCisgICAgICAgIGF1dG8tZ2VuZXJhdGVk
IGJpbmRpbmdzLgorCisgICAgICAgIE1vdmVkIHRoZSBnbG9iYWxseSBjYWNoZWQgcGx1Z2luIGFu
ZCBtaW1ldHlwZSBpbmZvcm1hdGlvbiB0byBhCisgICAgICAgIHBlciBXZWJDb3JlOjpQYWdlIHNo
YXJlZCBQbHVnaW5EYXRhIHN0cnVjdHVyZS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3cu
bmF2aWdhdG9yLnBsdWdpbnMucmVmcmVzaCgpIGluIGEKKyAgICAgICAgcGxhdGZvcm0taW5kZXBl
bmRlbnQgd2F5LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpKU01pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpuZWVkc1lvdVR1YmVRdWlyayk6CisgICAgICAgIChXZWJDb3JlOjpKU05hdmlnYXRvcjo6
YXBwVmVyc2lvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNG
b3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTUGx1Z2luOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2
aWdhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0NsaXBib2FyZC5jcHA6CisgICAgICAgICogZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0
aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4pOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xl
YXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpuYXZpZ2F0b3IpOgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAg
ICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpOYXZpZ2F0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjp+TmF2aWdhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRvcjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBw
Q29kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjphcHBOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBwVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0b3I6Omxhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6dXNlckFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRv
cjo6bWltZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cHJvZHVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6OnByb2R1Y3RTdWIpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjp2ZW5kb3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjp2ZW5k
b3JTdWIpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6amF2YUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2Uv
TmF2aWdhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpmcmFtZSk6CisgICAgICAgICogcGFnZS9O
YXZpZ2F0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
cGx1Z2luRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9QbHVn
aW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAg
KiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFt
ZUJyaWRnZSBjYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlVmlld0ZhY3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL3F0L0ZyYW1lUXQuY3BwOgorICAg
ICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0
b3JlTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0
cnlRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlw
ZUZvckV4dGVuc2lvbik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6Ok1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1pbWVUeXBlOjp+TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnN1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1pbWVUeXBlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNaW1lVHlwZTo6
ZW5hYmxlZFBsdWdpbik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvTWlt
ZVR5cGUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Ok1pbWVUeXBlQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6fk1pbWVUeXBlQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Y2Fu
R2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0YSk6
CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBl
QXJyYXk6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmlkbDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbjo6UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6
flBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luOjpmaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmRlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmNhbkdldEl0
ZW1zRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
OjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luLmlkbDogQWRkZWQuCisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5BcnJheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQXJyYXk6OlBsdWdpbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5Ojp+
UGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpyZWZy
ZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpnZXRQbHVnaW5EYXRhKToKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6ZGlz
Y29ubmVjdEZyYW1lKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbDogQWRkZWQu
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGE6On5QbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRz
TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1p
bWVUeXBlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YTo6ZGlzY29ubmVjdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpwbHVnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGE6Om1pbWVzKToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5E
YXRhTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVn
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gpOgorICAgICAgICAq
IHBsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0
YVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisKKzIwMDgtMDMt
MDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBGaXgg
dGhlIFF0IGJ1aWxkLgogCiAgICAgICAgICogV2ViQ29yZS5wcm86CmRpZmYgLS1naXQgYS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5k
ZXggMGZmYmZmYi4uYzE1NzQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzMsNiArMzMsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3JlKS9odG1sIFwKICAg
ICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJD
b3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3JlKS9zdmcK
QEAgLTQyMywxNSArNDI0LDIwIEBAIGFsbCA6IFwKICAgICBKU01lZGlhRXJyb3IuaCBcCiAgICAg
SlNNZWRpYUxpc3QuaCBcCiAgICAgSlNNZXNzYWdlRXZlbnQuaCBcCisgICAgSlNNaW1lVHlwZS5o
IFwKKyAgICBKU01pbWVUeXBlQXJyYXkuaCBcCiAgICAgSlNNb3VzZUV2ZW50LmggXAogICAgIEpT
TXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9kZU1hcC5oIFwKKyAgICBKU05hdmlnYXRv
ci5oIFwKICAgICBKU05vZGUuaCBcCiAgICAgSlNOb2RlRmlsdGVyLmggXAogICAgIEpTTm9kZUl0
ZXJhdG9yLmggXAogICAgIEpTTm9kZUxpc3QuaCBcCiAgICAgSlNOb3RhdGlvbi5oIFwKICAgICBK
U092ZXJmbG93RXZlbnQuaCBcCisgICAgSlNQbHVnaW4uaCBcCisgICAgSlNQbHVnaW5BcnJheS5o
IFwKICAgICBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKICAgICBKU1Byb2dyZXNzRXZlbnQu
aCBcCiAgICAgSlNSR0JDb2xvci5sdXQuaCBcCkBAIC02MDEsNyArNjA3LDYgQEAgYWxsIDogXAog
ICAgIFhMaW5rTmFtZXMuY3BwIFwKICAgICBYTUxOYW1lcy5jcHAgXAogICAgIFhQYXRoR3JhbW1h
ci5jcHAgXAotICAgIGtqc19uYXZpZ2F0b3IubHV0LmggXAogICAgIHRva2VuaXplci5jcHAgXAog
ICAgIFdlYkNvcmUuZXhwIFwKICMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE1OTRkNTcuLjc2OGViM2IgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtNTQsNyArNTQsNyBAQCB3ZWJjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3QubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Lmx1dC5oIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IubHV0LmggXAorPj4+
Pj4+PiBGaXggY29tcGlsYXRpb24gd2l0aCBhdXRvbWFrZS46V2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZVRhYmxlLmNwcAog
CiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXApAQCAtMTcxLDE1ICsxNzEsMjAgQEAgd2ViY29y
ZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9KU0ltYWdlRGF0YS5oIFwKIAlE
ZXJpdmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNZWRp
YUxpc3QuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZS5oIFwKKwlEZXJpdmVkU291cmNl
cy9KU01pbWVUeXBlQXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNb3VzZUV2ZW50LmggXAog
CURlcml2ZWRTb3VyY2VzL0pTTXV0YXRpb25FdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05h
bWVkTm9kZU1hcC5oIFwKKwlEZXJpdmVkU291cmNlcy9KU05hdmlnYXRvci5oIFwKIAlEZXJpdmVk
U291cmNlcy9KU05vZGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlRmlsdGVyLmggXAogCURl
cml2ZWRTb3VyY2VzL0pTTm9kZUl0ZXJhdG9yLmggXAogCURlcml2ZWRTb3VyY2VzL0pTTm9kZUxp
c3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb3RhdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9K
U092ZXJmbG93RXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW4uaCBcCisJRGVyaXZl
ZFNvdXJjZXMvSlNQbHVnaW5BcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2dyZXNzRXZlbnQuaCBcCiAJRGVy
aXZlZFNvdXJjZXMvSlNSYW5nZS5oIFwKQEAgLTI5NywxNSArMzAyLDIwIEBAIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvSlNJbWFnZURhdGEuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU01lZGlh
TGlzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5cGUuY3BwIFwKKwlEZXJpdmVkU291
cmNlcy9KU01pbWVUeXBlQXJyYXkuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU01vdXNlRXZlbnQu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU011dGF0aW9uRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291
cmNlcy9KU05hbWVkTm9kZU1hcC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTmF2aWdhdG9yLmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2Rl
RmlsdGVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlSXRlcmF0b3IuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9KU05vZGVMaXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb3RhdGlvbi5j
cHAgXAogCURlcml2ZWRTb3VyY2VzL0pTT3ZlcmZsb3dFdmVudC5jcHAgXAorCURlcml2ZWRTb3Vy
Y2VzL0pTUGx1Z2luLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW5BcnJheS5jcHAgXAog
CURlcml2ZWRTb3VyY2VzL0pTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBcCiAJRGVyaXZlZFNv
dXJjZXMvSlNQcm9ncmVzc0V2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNSYW5nZS5jcHAg
XApAQCAtNDQzLDcgKzQ1MywxMiBAQCBJRExfQklORElOR1MgKz0gIFwKIAlXZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgXAogCVdlYkNv
cmUvcGFnZS9IaXN0b3J5LmlkbCBcCisJV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgXAogCVdl
YkNvcmUvcGFnZS9TY3JlZW4uaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsIFwK
KwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAorCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW4uaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIFwKIAlXZWJDb3Jl
L3htbC9ET01QYXJzZXIuaWRsIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlv
bi5pZGwgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuaWRsCkBAIC00ODcsMTQgKzUwMiwx
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxP
cHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlw
ZUFycmF5Q3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5j
cHAgIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20u
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXApAQCAtNTAzLDcg
KzUyMiw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
YmluZGluZy5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuY3BwIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19uYXZpZ2F0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvUGF1c2VkVGltZW91dHMuY3BwIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXApAQCAtODAyLDYgKzgyMCw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwIFwKIAlXZWJDb3JlL3BhZ2Uv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmNwcCBcCisJV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgXAogCVdlYkNv
cmUvcGFnZS9QYWdlLmNwcCBcCiAJV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgXAogCVdlYkNv
cmUvcGFnZS9TY3JlZW4uY3BwIFwKQEAgLTg2Myw2ICs4ODIsMTEgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJ
V2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
QXJyYXkuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkFycmF5LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3Bw
IFwKQEAgLTIwNDksNyArMjA3Myw4IEBAIHZwYXRoICUuaWRsID0gXAogICAgICQoV2ViQ29yZSkv
cGFnZSBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCi0g
ICAgJChXZWJDb3JlKS94bWwKKyAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS9w
bHVnaW5zCiAKIERlcml2ZWRTb3VyY2VzL0pTJS5oOiBEZXJpdmVkU291cmNlcy9KUyUuY3BwOwog
CkBAIC0yMDY5LDYgKzIwOTQsNSBAQCBDTEVBTkZJTEVTICs9IFwKIAlKU0RPTVdpbmRvd0Jhc2Uu
bHV0LmggXAogCUpTUkdCQ29sb3IubHV0LmggXAogCUpTWE1MSHR0cFJlcXVlc3QubHV0LmggXAot
CUpTWFNMVFByb2Nlc3Nvci5sdXQuaCBcCi0Ja2pzX25hdmlnYXRvci5sdXQuaAorCUpTWFNMVFBy
b2Nlc3Nvci5sdXQuaAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCAzN2MyNzI5Li44NTAwNTMwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTI1Myw4ICsyNTMsNyBA
QCBMVVRfRklMRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdC5jcHAgXAotICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAotICAgIGJp
bmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yLmNwcAogCiBMVVRfVEFCTEVfRklMRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTElu
cHV0RWxlbWVudEJhc2UuY3BwCkBAIC0zODUsNiArMzg0LDExIEBAIElETF9CSU5ESU5HUyArPSBc
CiAgICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKICAgICBwYWdlL0hpc3RvcnkuaWRsIFwKICAgICBw
YWdlL1NjcmVlbi5pZGwgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmlkbCBcCisgICAgcGx1Z2lucy9Q
bHVnaW4uaWRsIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlLmlkbCBcCisgICAgcGx1Z2lucy9QbHVn
aW5BcnJheS5pZGwgXAorICAgIHBsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAogICAgIHhtbC9E
T01QYXJzZXIuaWRsIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRsIFwKICAg
ICB4bWwvWE1MU2VyaWFsaXplci5pZGwKQEAgLTQyOCw2ICs0MzIsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOYW1l
ZE5vZGVNYXBDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0
aW9uLmNwcCAgXAorICAgIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCAgXAogICAg
IGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5j
cHAgXApAQCAtNDM5LDEwICs0NDQsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgYmluZGluZ3MvanMv
SlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dC5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAorICAgIGJpbmRp
bmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNQbHVnaW5BcnJh
eUN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pz
X2V2ZW50cy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL1BhdXNlZFRpbWVvdXRzLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcCBcCkBAIC03MzIsNiArNzM5LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0RPTVNlbGVjdGlv
bi5jcHAgXAogICAgIHBhZ2UvRE9NV2luZG93LmNwcCBcCisgICAgcGFnZS9OYXZpZ2F0b3IuY3Bw
IFwKICAgICBwYWdlL0RyYWdDb250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIFwKICAgICBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgXApAQCAtNzQ2LDYgKzc1NCwxMSBA
QCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL1NjcmVlbi5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3Mu
Y3BwIFwKICAgICBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5E
YXRhLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAgXAorICAgIHBsdWdpbnMvUGx1
Z2luLmNwcCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZS5jcHAgXAorICAgIHBsdWdpbnMvTWltZVR5
cGVBcnJheS5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXApAQCAt
OTEwLDYgKzkyMyw3IEBAIHF0LXBvcnQgewogICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5oIFwKICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmggXAorICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCiAgICAgJCRQV0QvLi4vV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0Qv
cGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCiAKQEAgLTk3NSw2ICs5
ODksNyBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS90ZXh0L3F0L1RleHRDb2RlY1F0LmNwcCBc
CiAgICAgcGxhdGZvcm0vcXQvV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2lk
Z2V0UXQuY3BwIFwKKyAgICBwbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgXAogICAgIC4uL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgXApAQCAtOTg4LDYgKzEwMDMs
NyBAQCBxdC1wb3J0IHsKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQv
QXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmNwcCBcCisgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
cGx1Z2luZmFjdG9yeS5jcHAKIAogICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvU3lz
dGVtVGltZVF0LmNwcAogICAgIGVsc2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRp
bWVXaW4uY3BwCkBAIC05OTcsMTUgKzEwMTMsMTAgQEAgcXQtcG9ydCB7CiAgICAgICAgIEhFQURF
UlMgKz0gXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2lu
dGVyZmFjZS5oIFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdv
cmtpbnRlcmZhY2VfcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbi5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbl9wLmggXAotICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9x
d2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmggXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0
L3F0L0FwaS9xY29va2llamFyLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAg
IC4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIFwKLSAgICAgICAgICAg
IC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgXAotICAgICAgICAgICAgLi4v
V2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcCBcCiAgICAgICAgICAg
ICAuLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuY3BwCiAKICAgICAgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYzk2ZmUyYS4uYWNhODZiMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMTg5LDYgKzExODksMjIgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVp
bGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNNaW1lVHlwZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWls
ZFxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU01pbWVUeXBlLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxv
YmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU01pbWVUeXBlQXJyYXkuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVp
bGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNNaW1lVHlwZUFycmF5LmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1
dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTW91c2VFdmVudC5jcHAi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTIxMyw2ICsxMjI5LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxk
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTTmF2aWdhdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxk
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTTmF2aWdhdG9yLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilc
b2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTm9kZS5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpAQCAtMTI2MSw2ICsxMjg1LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3Jl
XERlcml2ZWRTb3VyY2VzXEpTUGx1Z2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERl
cml2ZWRTb3VyY2VzXEpTUGx1Z2luLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxvYmpcV2ViQ29yZVxEZXJpdmVk
U291cmNlc1xKU1BsdWdpbkFycmF5LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERlcml2
ZWRTb3VyY2VzXEpTUGx1Z2luQXJyYXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KQEAgLTI3ODMsMTEgKzI4MjMsMTUgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlLmNwcCINCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwYWdlXE5hdmlnYXRvci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2UuaCINCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXE5hdmlnYXRvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTc3NzIsNiArNzgxNiwxMCBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNN
aW1lVHlwZUFycmF5Q3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU05hbWVkTm9kZU1hcEN1c3Rv
bS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBAIC03Nzg0LDYgKzc4MzIsMTAgQEAKIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJp
bmRpbmdzXGpzXEpTTmF2aWdhdG9yQ3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU05vZGVDdXN0
b20uY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtNzgxNiw2ICs3ODY4LDE0IEBACiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxi
aW5kaW5nc1xqc1xKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1BsdWdp
bkN1c3RvbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNw
cCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTc5MTYsMTQgKzc5NzYsNiBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNca2pzX25hdmlnYXRvci5jcHAiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZp
bGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNca2pzX25hdmlnYXRvci5oIg0K
LQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGJpbmRpbmdzXGpzXGtqc19wcm94eS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBAIC03
OTUzLDYgKzgwMDUsMjIgQEAKIAkJCU5hbWU9InBsdWdpbnMiDQogCQkJPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xNaW1lVHlwZS5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXE1pbWVUeXBl
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbHVnaW5zXE1pbWVUeXBlQXJyYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xNaW1lVHlwZUFycmF5LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XG5wYXBpLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03OTYxLDYgKzgwMjksMzAgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luQXJyYXkuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW5BcnJheS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0
YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAt
ODAxMiw2ICs4MTA0LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5EYXRhV2luLmNwcCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVn
aW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjQ5MjAzZi4uMzRm
OTkyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU1
OSw3ICs1NTksNiBAQAogCQk2NUM5N0FGMzA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUM5N0FGMjA4RUE5
MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi87IH07CiAJCTY1Q0JGRUY5MDk3NEY2MDcwMDFEQUMy
NSAvKiBGcmFtZVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgKi87IH07
CiAJCTY1Q0JGRUZBMDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Q0JGRUY4MDk3NEY2MDcwMDFEQUMy
NSAvKiBGcmFtZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk2NUQxQzFDQTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUQxQzFDOTA5OTMyQjIyMDAw
Q0IzMjQgLyogUGx1Z2luLmggKi87IH07CiAJCTY1REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBK
U0F0dHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgKi87IH07CiAJCTY1REYzMURC
MDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMUQ5MDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCAq
LzsgfTsKIAkJNjVERjMxRjMwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzFERjA5
RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRhLmNwcCAqLzsgfTsKQEAgLTE2MzksOCAr
MTYzOCw2IEBACiAJCTkzQjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0RTA5RUIw
QzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovOyB9OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNCNzBENEYwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmNwcCAqLzsg
fTsKIAkJOTNCNzBENkMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0
NjggLyoga2pzX2h0bWwuaCAqLzsgfTsKLQkJOTNCNzBENkQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtq
c19uYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwICovOyB9
OwotCQk5M0I3MEQ2RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTIwOUVCMEM3QzAw
OUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuaCAqLzsgfTsKIAkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19wcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmNwcCAqLzsg
fTsKIAkJOTNCNzBENzAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTQwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19wcm94eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzQjc3QTM4MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3N0Ez
NzBBREQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDQzLDcgKzIwNDAsNiBAQAogCQlB
ODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkg
LyogTmFtZWROb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5
NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxk
Tm9kZUxpc3QuY3BwICovOyB9OwotCQlBODIzOThBODA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0lu
SW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTgyMzk4QTcwOUIzQUNGNTAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZU1hYy5tbSAq
LzsgfTsKIAkJQTgyMzlFMDAwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkUwOUIzQ0Y4QTAw
QjYwNjQxIC8qIExvZ2dpbmcuY3BwICovOyB9OwogCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEg
LyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgyMzlERkYwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODI2RThBRTBBMUE4RjIzMDBDRDFC
QjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyog
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi87IH07CkBAIC0yNTc0LDYgKzI1NzAs
MzMgQEAKIAkJQThGNDZCODEwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR1N0cmluZ0xpc3QuaCBp
biBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1RDc5QUQyMEFDQTE3RUIwMEYwMkZDNSAvKiBET01TVkdTdHJpbmdMaXN0LmggKi87IH07
CiAJCUE4RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5MzBDMTY5RTdC
MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9OwogCQlBOEY0RkI5NjBDMTY5RTg1
MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAgKi87IH07CisJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovOyB9OworCQlBOUM2RTRF
NDBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlw
ZS5oICovOyB9OworCQlBOUM2RTRFNzBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRF
NTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi87IH07CisJCUE5QzZFNEU4
MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFNjBENzQ1RTE4MDA2NDQyRTkgLyogTWlt
ZVR5cGVBcnJheS5oICovOyB9OworCQlBOUM2RTRFQjBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2lu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZF
NEU5MEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICovOyB9OworCQlBOUM2RTRFQzBENzQ1
RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOUM2RTRFQTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggKi87IH07
CisJCUE5QzZFNEVGMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFRDBENzQ1RTM4MDA2
NDQyRTkgLyogUGx1Z2luQXJyYXkuY3BwICovOyB9OworCQlBOUM2RTRGMDBENzQ1RTM4MDA2NDQy
RTkgLyogUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNEVFMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovOyB9
OworCQlBOUM2RTRGMzBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRGMTBENzQ1RTQ4MDA2
NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgKi87IH07CisJCUE5QzZFNEY0MEQ3NDVFNDgwMDY0NDJF
OSAvKiBQbHVnaW5EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOUM2RTRGMjBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovOyB9Owor
CQlBOUM2RTRGNjBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEY1MEQ3NDVFNjEwMDY0
NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tICovOyB9OworCQlBOUM2RTVBNTBENzQ2NDU4MDA2NDQy
RTkgLyogTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNUEzMEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovOyB9
OworCQlBOUM2RTVBNjBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTVBNDBENzQ2NDU4MDA2NDQy
RTkgLyogTmF2aWdhdG9yLmggKi87IH07CisJCUE5QzZFNjQ3MEQ3NDY1Q0EwMDY0NDJFOSAvKiBK
U01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTlDNkU2NDYwRDc0NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJh
eUN1c3RvbS5jcHAgKi87IH07CisJCUE5QzZFNjQ5MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmln
YXRvckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOUM2RTY0ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICov
OyB9OworCQlBOUM2RTY0QzBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0
QTBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgKi87IH07CisJCUE5
QzZFNjREMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0QjBENzQ2NUU3MDA2NDQy
RTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICovOyB9OworCQlBOUQyNDdGNzBENzU3RTM0MDBGREY5
NTkgLyogSlNOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCAq
LzsgfTsKKwkJQTlEMjQ3RjgwRDc1N0UzNDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDdGNjBENzU3RTMz
MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCAqLzsgfTsKKwkJQTlEMjQ3RkUwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5RDI0N0ZBMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi87IH07
CisJCUE5RDI0N0ZGMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5
IC8qIEpTUGx1Z2luLmggKi87IH07CisJCUE5RDI0ODAwMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1Bs
dWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE5RDI0N0ZDMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmNwcCAqLzsgfTsK
KwkJQTlEMjQ4MDEwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0N0ZEMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi87IH07CisJCUE5RDI0ODA2MEQ3NTdFN0QwMEZERjk1
OSAvKiBKU01pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5RDI0ODAyMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCAqLzsg
fTsKKwkJQTlEMjQ4MDcwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODAzMEQ3NTdFN0QwMEZE
Rjk1OSAvKiBKU01pbWVUeXBlLmggKi87IH07CisJCUE5RDI0ODA4MEQ3NTdFN0QwMEZERjk1OSAv
KiBKU01pbWVUeXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5j
cHAgKi87IH07CisJCUE5RDI0ODA5MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODA1
MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuaCAqLzsgfTsKIAkJQUEwOTcyQ0Mw
QjY5NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTcyQ0EwQjY5NDdBODAwQTcwNUU5IC8q
IFNWR0lubGluZVRleHRCb3guY3BwICovOyB9OwogCQlBQTA5NzJDRDBCNjk0N0E4MDBBNzA1RTkg
LyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUEwOTcyQ0IwQjY5NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3gu
aCAqLzsgfTsKIAkJQUEyMUVDQ0EwQUJGMEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEw
OTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovOyB9OwpA
QCAtNDg5Myw3ICs0OTE2LDYgQEAKIAkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZp
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
b25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9
IDA7IH07CiAJCTY1Q0JGRUY3MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Q0JGRUY4MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1
Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdHRyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMxRDkwOUQxQzEyMzAwMEJFMzI1IC8q
IEpTQXR0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdHRyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1REYzMURGMDlEMUNDNjAwMDBCRTMyNSAvKiBK
U0NoYXJhY3RlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ2hhcmFjdGVyRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTIz
LDggKzU5NDUsNiBAQAogCQk5M0I3MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2pzX2V2ZW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0RjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0
bWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtqc19odG1sLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4
IC8qIGtqc19odG1sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBranNfaHRt
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I3MEQ1MTA5RUIwQzdDMDA5RDg0
NjggLyoga2pzX25hdmlnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0ga2pzX25hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
QjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBranNfbmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtqc19wcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19wcm94eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3N0EzNzBBREQ3OTI1MDBFQTRCODEgLyogRnJh
bWVMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZUxv
YWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTYxLDcgKzYxODEs
NiBAQAogCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYW1lZE5vZGVNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTkwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZU5vZGVMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMUEwOTc3RDNDMDAwNTgy
NkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
ODIzOThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdJbkluZm9TdG9yZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8q
IExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODIzOURGRjA5QjNDRjhBMDBC
NjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9n
Z2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODI2RThBQzBBMUE4RjIzMDBD
RDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NjUsNiArNjU4NCwzOCBAQAogCQlBOEVBODAw
NjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThG
NEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9y
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBw
b3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RTEwRDc0NUUwNTAw
NjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNaW1lVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEUy
MEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0
RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBOUM2RTRFNjBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGVBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFOTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1
Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFQTBENzQ1RTJCMDA2NDQyRTkg
LyogUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RUQwRDc0NUUzODAwNjQ0MkU5IC8q
IFBsdWdpbkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
bHVnaW5BcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEVFMEQ3
NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGx1Z2luQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlD
NkU0RjEwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOUM2RTRGMjBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBOUM2RTRGNTBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbHVnaW5EYXRh
TWFjLm1tOyBwYXRoID0gbWFjL1BsdWdpbkRhdGFNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE5QzZFNUEzMEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNUE0MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNN
aW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOUM2RTY0ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdhdG9yQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NEEwRDc0NjVFNzAwNjQ0MkU5
IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOUM2RTY0QjBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NUQwRDc0NjY5NDAwNjQ0MkU5IC8q
IE5hdmlnYXRvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvci5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjVFMEQ3NDY2RjIwMDY0NDJFOSAvKiBN
aW1lVHlwZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1pbWVUeXBlLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NUYwRDc0NjcwMDAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNaW1lVHlwZUFycmF5LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NjAwRDc0NjcwQzAwNjQ0MkU5IC8q
IFBsdWdpbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjYxMEQ3NDY3MUUwMDY0NDJFOSAvKiBQbHVnaW5B
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpbkFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2
aWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmln
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0N0Y2MEQ3NTdFMzMw
MEZERjk1OSAvKiBKU05hdmlnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNOYXZpZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RkEw
RDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1BsdWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE5RDI0N0ZCMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTlEMjQ3RkMwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luQXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBOUQyNDdGRDBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVn
aW5BcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW5BcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUQyNDgwMjBENzU3RTdEMDBGREY5
NTkgLyogSlNNaW1lVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNNaW1lVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODAz
MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU01pbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5
RDI0ODA0MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODA1MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVU
eXBlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWltZVR5cGVB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTA5NzJDQTBCNjk0N0E4MDBB
NzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBMDk3MkNCMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbmxpbmVUZXh0Qm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTgxNjUsNiArODIxNiw3IEBACiAJCQkJQkM5ODU0NDMwQ0QzRDlEMDAwMDY5QkMxIC8qIFdpbmRv
dyAqLywKIAkJCQlBODNCNzkyMjBDQ0IwMEYwMDAwQjA4MjUgLyogWE1MICovLAogCQkJCUE4M0I3
OTBDMENDQUZGODMwMDBCMDgyNSAvKiBYUGF0aCAqLywKKwkJCQlBOUQyNDdGOTBENzU3RTQxMDBG
REY5NTkgLyogUGx1Z2lucyAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7
CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZTsKQEAgLTgzOTYsNiArODQ0OCwyMSBA
QAogCQk1RENGODM2OTBENTkxNTc4MDA5NTNCQzYgLyogcGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlDNkU2NjEwRDc0NjcxRTAwNjQ0MkU5
IC8qIFBsdWdpbkFycmF5LmlkbCAqLywKKwkJCQlBOUM2RTY2MDBENzQ2NzBDMDA2NDQyRTkgLyog
UGx1Z2luLmlkbCAqLywKKwkJCQlBOUM2RTY1RjBENzQ2NzAwMDA2NDQyRTkgLyogTWltZVR5cGVB
cnJheS5pZGwgKi8sCisJCQkJQTlDNkU2NUUwRDc0NjZGMjAwNjQ0MkU5IC8qIE1pbWVUeXBlLmlk
bCAqLywKKwkJCQlBOUM2RTRGNTBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSAq
LywKKwkJCQlBOUM2RTRGMTBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgKi8sCisJ
CQkJQTlDNkU0RjIwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCAqLywKKwkJCQlBOUM2
RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuY3BwICovLAorCQkJCUE5QzZFNEVF
MEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovLAorCQkJCUE5QzZFNEU5MEQ3NDVF
MkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICovLAorCQkJCUE5QzZFNEVBMEQ3NDVFMkIwMDY0NDJF
OSAvKiBQbHVnaW4uaCAqLywKKwkJCQlBOUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5
cGVBcnJheS5jcHAgKi8sCisJCQkJQTlDNkU0RTYwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBl
QXJyYXkuaCAqLywKKwkJCQlBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3Bw
ICovLAorCQkJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oICovLAogCQkJ
CTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gcGx1Z2luczsKQEAgLTg1MjEsNyArODU4OCw2IEBACiAJCQkJQkM5NEQxMDcw
QzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJCUJDM0ZDQUE4
MEFDM0RCNTgwMEJBNTRBRCAvKiBQbGF0Zm9ybVNjcm9sbEJhci5oICovLAogCQkJCUJDN0IyQUY5
MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSAqLywKLQkJCQlBODIz
OThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tICovLAogCQkJCTA2
NjhFMThFMEFERDk2NDAwMDQxMjhFMCAvKiBQb3B1cE1lbnVNYWMubW0gKi8sCiAJCQkJMUNFMjRG
OTYwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAqLywKIAkJCQlCQ0FBOTBD
MjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsQmFyLmNwcCAqLywKQEAgLTg1NTcsNiArODYyMyw5
IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUM2RTY1RDBENzQ2Njk0MDA2NDQyRTkg
LyogTmF2aWdhdG9yLmlkbCAqLywKKwkJCQlBOUM2RTVBMzBENzQ2NDU4MDA2NDQyRTkgLyogTmF2
aWdhdG9yLmNwcCAqLywKKwkJCQlBOUM2RTVBNDBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9y
LmggKi8sCiAJCQkJMDY2OTNGNDUwQkZCQzkxNjAwMjE2MDcyIC8qIGluc3BlY3RvciAqLywKIAkJ
CQk5M0MwOUE4MjBCMDY0RjA1MDA1QUJENEQgLyogbWFjICovLAogCQkJCTg1MzhGMDAwMEFENzE3
NzAwMDZBODFEMSAvKiBBYnN0cmFjdFZpZXcuaWRsICovLApAQCAtMTA3NzcsNiArMTA4NDYsMjEg
QEAKIAkJCW5hbWUgPSBYTUw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlB
OUQyNDdGOTBENzU3RTQxMDBGREY5NTkgLyogUGx1Z2lucyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlEMjQ4MDIwRDc1N0U3RDAwRkRGOTU5IC8qIEpT
TWltZVR5cGUuY3BwICovLAorCQkJCUE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVU
eXBlLmggKi8sCisJCQkJQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJh
eS5jcHAgKi8sCisJCQkJQTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJh
eS5oICovLAorCQkJCUE5RDI0N0ZBMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi8s
CisJCQkJQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggKi8sCisJCQkJQTlE
MjQ3RkMwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovLAorCQkJCUE5RDI0
N0ZEMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi8sCisJCQkpOworCQkJbmFt
ZSA9IFBsdWdpbnM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMjIyNzdD
QTBEMDBCRjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKQEAgLTExNjQzLDggKzExNzI3LDYgQEAKIAkJCQk5M0I3MEQ0RTA5RUIwQzdD
MDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovLAogCQkJCTkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2
OCAvKiBranNfaHRtbC5jcHAgKi8sCiAJCQkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtq
c19odG1sLmggKi8sCi0JCQkJOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0
b3IuY3BwICovLAotCQkJCTkzQjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9y
LmggKi8sCiAJCQkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgKi8s
CiAJCQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oICovLAogCQkJCUJD
QTM3ODE0MEQxNUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5jcHAgKi8sCkBAIC0xMTcw
MCw2ICsxMTc4MiwxMSBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUM2RTY0QTBE
NzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgKi8sCisJCQkJQTlDNkU2
NEIwRDc0NjVFNzAwNjQ0MkU5IC8qIEpTUGx1Z2luQ3VzdG9tLmNwcCAqLywKKwkJCQlBOUM2RTY0
ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICovLAorCQkJCUE5QzZF
NjQ2MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwICovLAorCQkJ
CUE3NjZGMzUyMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3Bw
ICovLAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICov
LAogCQkJCUE3NjZGMzUyMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0
b20uY3BwICovLAogCQkJCTFBOUVGNDU2MEExQjk1N0QwMDMzMkI2MyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8sCkBAIC0xMTc2Miw2ICsxMTg0OSw4IEBACiAJCQkJ
QkMxMjRFRkUwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpTQmFySW5mby5oICovLAogCQkJCUJDOTg1NDNC
MENEM0Q5OEIwMDA2OUJDMSAvKiBKU0NvbnNvbGUuY3BwICovLAogCQkJCUJDOTg1NDNDMENEM0Q5
OEIwMDA2OUJDMSAvKiBKU0NvbnNvbGUuaCAqLywKKwkJCQlBOUQyNDdGNTBENzU3RTMzMDBGREY5
NTkgLyogSlNOYXZpZ2F0b3IuY3BwICovLAorCQkJCUE5RDI0N0Y2MEQ3NTdFMzMwMEZERjk1OSAv
KiBKU05hdmlnYXRvci5oICovLAogCQkJCUJDNUE4NkIzMEMzMzY3RTgwMEVFQTY0OSAvKiBKU0RP
TVNlbGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM1QTg2QjQwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9N
U2VsZWN0aW9uLmggKi8sCiAJCQkJMTQwM0JBMEIwOUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2lu
ZG93LmNwcCAqLywKQEAgLTEzOTA3LDcgKzEzOTk2LDYgQEAKIAkJCQlCQzNGQ0FBOTBBQzNEQjU4
MDBCQTU0QUQgLyogUGxhdGZvcm1TY3JvbGxCYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNE
QTJCMEQwMDZDMUQwMEVGNkYyNiAvKiBQbGF0Zm9ybVN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNjVEMUMxQ0EwOTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFDNjk0QzgwQTNCMTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkIxRjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0MDA0
MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKQEAgLTE0MzM1LDcgKzE0NDIzLDYg
QEAKIAkJCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2JpbmRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzQjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0I3MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCBp
biBIZWFkZXJzICovLAotCQkJCTkzQjcwRDZFMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODFGNTA5RDE1MDhEMDAwRTYxRDcgLyoga2pz
X25hdmlnYXRvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfcHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzJEMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBsb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ0MzQsNiArMTQ1MjEsMTcg
QEAKIAkJCQkxQTU2OUQyMzBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9vYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjkzMjc0MEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdp
bmRvd0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJFOSAv
KiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RTgwRDc0NUUxODAwNjQ0MkU5
IC8qIE1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEVDMEQ3NDVFMkIw
MDY0NDJFOSAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEYwMEQ3NDVFMzgw
MDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RjQwRDc0
NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNUE2
MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RDI0
N0Y4MEQ3NTdFMzQwMEZERjk1OSAvKiBKU05hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTlEMjQ3RkYwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOUQyNDgwMTBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTlEMjQ4MDcwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE5RDI0ODA5MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTU1NDksNyArMTU2NDcsNiBAQAogCQkJCTkzNUM0NzcxMDlB
QzRENzMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQzk0RDEwODBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1TY3JlZW5NYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5M0YxOUFEQzA4MjQ1RTU5MDAxRTlBQkMgLyogUGxhdGZvcm1TY3Jv
bGxCYXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBODIzOThBODA5QjNBQ0Y1MDBCNjA2NDEg
LyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDNjk0QzcwQTNC
MTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
QjFGNzE2MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDY2OEUxOTAwQUREOTY0MDAwNDEyOEUwIC8qIFBvcHVwTWVudU1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMTU5NzIsNyArMTYwNjksNiBAQAogCQkJCTkzQjcwRDYzMDlF
QjBDN0MwMDlEODQ2OCAvKiBranNfYmluZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0I3
MEQ2OTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTNCNzBENkQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyQzA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjA1NSw2ICsxNjE1MSwyMiBAQAogCQkJCTFBNTY5RDIy
MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX29iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNjkzMjczMEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdpbmRvd0Jhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEVCMEQ3NDVFMkIwMDY0NDJF
OSAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RUYwRDc0NUUzODAwNjQ0
MkU5IC8qIFBsdWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEYzMEQ3NDVF
NDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEY2
MEQ3NDVFNjEwMDY0NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTlDNkU1QTUwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBOUM2RTY0NzBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNjQ5MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmln
YXRvckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTY0QzBENzQ2NUU3MDA2NDQy
RTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTY0
RDBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTlEMjQ3RjcwRDc1N0UzNDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE5RDI0N0ZFMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBOUQyNDgwMDBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyog
SlNNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCmluZGV4IDBiMzAxZjkuLmE3ODI5MmUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlICJXaW5k
b3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2pzX2V2
ZW50cy5oIgotI2luY2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJranNfcHJveHku
aCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KQEAgLTE2MSw4ICsxNjAsNiBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNl
OjppbmZvID0geyAiV2luZG93IiwgMCwgJkpTRE9NV2luZG93QmFzZVRhYmxlIH07CiAgIGNyeXB0
byAgICAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkNyeXB0byAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGV2ZW50ICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpKU0RPTVdpbmRvd0Jhc2U6OkV2ZW50XyAgICAgICAgICAgICBEb250RGVsZXRlCiAgIGxvY2F0
aW9uICAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkxvY2F0aW9uXyAgICAg
ICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6Ok5hdmlnYXRvcl8gICAgICAgICBEb250RGVsZXRlCi0gIGNsaWVudEluZm9ybWF0
aW9uICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkNsaWVudEluZm9ybWF0aW9uICBEb250
RGVsZXRlCiAjIC0tIEV2ZW50IExpc3RlbmVycyAtLQogICBvbmFib3J0ICAgICAgICAgICAgICAg
V2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbmFib3J0ICAgICAgICAgICAgRG9udERlbGV0ZQog
ICBvbmJsdXIgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbmJsdXIg
ICAgICAgICAgICAgRG9udERlbGV0ZQpAQCAtNDUzLDE4ICs0NTAsNiBAQCBKU1ZhbHVlICpKU0RP
TVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiAgICAgICByZXR1cm4gdG9KUyhleGVjLCBkLT5tX2V2dCk7CiAgICAgY2FzZSBMb2Nh
dGlvbl86CiAgICAgICByZXR1cm4gbG9jYXRpb24oKTsKLSAgICBjYXNlIE5hdmlnYXRvcl86Ci0g
ICAgY2FzZSBDbGllbnRJbmZvcm1hdGlvbjogewotICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIC8vIFN0b3JlIHRo
ZSBuYXZpZ2F0b3IgaW4gdGhlIG9iamVjdCBzbyB3ZSBnZXQgdGhlIHNhbWUgb25lIGVhY2ggdGlt
ZS4KLSAgICAgIE5hdmlnYXRvciogbiA9IG5ldyBOYXZpZ2F0b3IoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSwgaW1wbCgpLT5mcmFtZSgpKTsKLSAgICAgIC8v
IEZJWE1FOiB0aGlzIHdpbGwgbWFrZSB0aGUgIm5hdmlnYXRvciIgb2JqZWN0IGFjY2Vzc2libGUg
ZnJvbSB3aW5kb3dzIHRoYXQgZmFpbAotICAgICAgLy8gdGhlIHNlY3VyaXR5IGNoZWNrIHRoZSBm
aXJzdCB0aW1lLCBidXQgbm90IHN1YnNlcXVlbnQgdGltZXMsIHNlZW1zIHdlaXJkLgotICAgICAg
Y29uc3RfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzKS0+cHV0RGlyZWN0KCJuYXZpZ2F0b3Ii
LCBuLCBEb250RGVsZXRlKTsKLSAgICAgIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhp
cyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3JtYXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAg
IHJldHVybiBuOwotICAgIH0KICAgICBjYXNlIEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nl
c3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZGEzODgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01pbWVUeXBlQXJy
YXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJy
YXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCiti
b29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIE1pbWVU
eXBlQXJyYXkqIG1pbWVUeXBlQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
K3sKKyAgICByZXR1cm4gbWltZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5
TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNNaW1lVHlwZUFy
cmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xvdC5zbG90QmFz
ZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIo
cHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MGYyMAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2Vu
dGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNj
aGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNOYXZpZ2F0b3Iu
aCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVp
cmsoRXhlY1N0YXRlKiwgRnJhbWUqKTsKKworI2lmICFQTEFURk9STShXSU4pCisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWly
ayhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUaGlzIHF1aXJrIHdv
cmtzIGFyb3VuZCBhIG1pc3Rha2VuIGNoZWNrIGluIGFuIGFkIGF0IHlvdXR1YmUuY29tLgorICAg
IC8vIFRoZXJlJ3MgYSBmdW5jdGlvbiBjYWxsZWQgaXNTYWZhcmkgdGhhdCByZXR1cm5zIGZhbHNl
IGlmIHRoZSBmdW5jdGlvbgorICAgIC8vIGNhbGxlZCBpc1dpbmRvd3MgcmV0dXJucyB0cnVlOyB0
aHVzIHRoZSBzaXRlIG1hbGZ1bmN0aW9ucyB3aXRoIFdpbmRvd3MgU2FmYXJpLgorCisgICAgLy8g
RG8gdGhlIHF1aXJrIG9ubHkgaWYgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyAiaXNXaW5kb3dzIi4K
KyAgICBGdW5jdGlvbkltcCogZnVuY3Rpb24gPSBleGVjLT5mdW5jdGlvbigpOworICAgIGlmICgh
ZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgSWRlbnRp
ZmllciYgaXNXaW5kb3dzRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlmaWVyKCJpc1dpbmRvd3Mi
KTsKKyAgICBpZiAoZnVuY3Rpb24tPmZ1bmN0aW9uTmFtZSgpICE9IGlzV2luZG93c0Z1bmN0aW9u
TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkg
aWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhbiAiaXNTYWZhcmkiIGZ1bmN0aW9uLgorICAg
IC8vIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgbm90IGl0c2VsZiBuYW1lZCAtLSBpdCBpcyBz
dG9yZWQgaW4gdGhlIGlzU2FmYXJpCisgICAgLy8gcHJvcGVydHksIHRob3VnaCwgc28gdGhhdCdz
IGhvdyB3ZSByZWNvZ25pemUgaXQuCisgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhlYyA9IGV4ZWMt
PmNhbGxpbmdFeGVjU3RhdGUoKTsKKyAgICBpZiAoIWNhbGxpbmdFeGVjKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgRnVuY3Rpb25JbXAqIGNhbGxpbmdGdW5jdGlvbiA9IGNhbGxpbmdFeGVj
LT5mdW5jdGlvbigpOworICAgIGlmICghY2FsbGluZ0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjYWxsaW5nRXhlYy0+dGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0IElkZW50aWZpZXImIGlzU2FmYXJpRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlm
aWVyKCJpc1NhZmFyaSIpOworICAgIEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24gPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3QoaXNTYWZhcmlGdW5jdGlvbk5hbWUpOworICAgIGlmIChpc1NhZmFyaUZ1
bmN0aW9uICE9IGNhbGxpbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgLy8gRklYTUU6IFRo
ZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hlY2sg
YWxvbmcgd2l0aCB0aGUKKyAgICAvLyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxlIHdo
ZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdzIHNhZmUuCisgICAgaWYgKCFkb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgb24gdGhl
IGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCisgICAgY29uc3Qg
S1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICh1cmwuaG9zdCgpICE9ICJ5b3V0
dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3LnlvdXR1YmUuY29tIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICh1cmwucGF0aCgpICE9ICIvIikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gQXMgd2l0aCBvdGhlciBzaXRlLXNwZWNpZmljIHF1aXJrcywgYWxsb3cg
d2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhpcyBvZmYuCisgICAgLy8gSW4gdGhlb3J5LCB0
aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gY2hlY2sgaWYgdGhlaXIgZml4ZXMgYXJl
IGVmZmVjdGl2ZS4KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsK
KyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzZXR0
aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitKU1ZhbHVlKiBKU05hdmlnYXRvcjo6
YXBwVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgTmF2aWdhdG9yKiBpbXAg
PSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3IqPihpbXBsKCkpOworICAgIEZyYW1lKiBmcmFtZSA9IGlt
cC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIp
OworCisgICAgaWYgKG5lZWRzWW91VHViZVF1aXJrKGV4ZWMsIGZyYW1lKSkKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoaW1wLT5hcHBWZXJzaW9uKCkp
OworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FlNGQzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApAQCAtMCww
ICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUGx1Z2luQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgS0pTOworCitib29sIEpTUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3Rh
dGUqLCBQbHVnaW5BcnJheSogcGx1Z2luQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9w
ZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1BsdWdpbkFy
cmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJheSo+KHNsb3Quc2xvdEJhc2Uo
KSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHBy
b3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGx1Z2luQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDc5ZDkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdp
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jv
b2wgSlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW4qIHBsdWdp
biwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW4t
PmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdp
bjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbio+KHNsb3Qu
c2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1l
R2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxYTg3Mi4uMDAwMDAwMAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50
aW4gKG1vbGtlbnRpbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2No
aW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAia2pzX25hdmlnYXRvci5oIgotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJMYW5ndWFnZS5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJTZXR0aW5n
cy5oIgotI2luY2x1ZGUgPGtqcy9vYmplY3Rfb2JqZWN0Lmg+Ci0KLSNpZm5kZWYgV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk0KLSNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFBQQykKLSNk
ZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIKLSNlbGlmIFBMQVRGT1JN
KE1BQykgJiYgUExBVEZPUk0oWDg2KQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9S
TSAiTWFjSW50ZWwiCi0jZWxpZiBQTEFURk9STShXSU5fT1MpCi0jZGVmaW5lIFdFQkNPUkVfTkFW
SUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKLSNlbHNlCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9S
X1BMQVRGT1JNICIiCi0jZW5kaWYKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1Jf
UExBVEZPUk0KLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0jZGVmaW5lIFdF
QkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9QUk9EVUNUCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9T
VUIKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3IgotI2Vu
ZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgotCi0jaWZuZGVmIFdF
QkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1Ig
IkFwcGxlIENvbXB1dGVyLCBJbmMuIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRP
Ul9WRU5ET1IKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0jZGVmaW5l
IFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09S
RV9OQVZJR0FUT1JfVkVORE9SX1NVQgotCi11c2luZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBsdWdp
bkJhc2UgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkJh
c2UoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbkJhc2UoKTsKLSAgICAgICAg
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2goYm9vbCByZWxvYWQpOwotCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBzdGF0aWMgVmVjdG9yPFBsdWdpbkluZm8qPiogcGx1Z2luczsKLSAgICAgICAgc3Rh
dGljIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4qIG1pbWVzOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RhdGljIGludCBtX3BsdWdJbkNhY2hlUmVmQ291bnQ7Ci0gICAgfTsKLQotCi0gICAgY2xh
c3MgUGx1Z2lucyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBs
dWdpbnMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykgeyB9Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVudW0geyBMZW5ndGggfTsKLSAgICBwcml2
YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIH07Ci0KLSAgICBKU1ZhbHVl
KiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlz
dCYpOwotCi0gICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1
YmxpYzoKLSAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSogZXhlYykgOiBQbHVnaW5CYXNlKGV4
ZWMpIHsgfTsKLSAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUq
IGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7
IExlbmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0g
ICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMsIFBsdWdpbkluZm8qIGluZm8pIDog
UGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTmFtZSwgRmlsZW5hbWUsIERlc2NyaXB0aW9uLCBM
ZW5ndGggfTsKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotCi0g
ICAgICAgIFBsdWdpbkluZm8qIG1faW5mbzsKLSAgICB9OwotCi0gICAgY2xhc3MgTWltZVR5cGUg
OiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZShFeGVj
U3RhdGUqIGV4ZWMsIE1pbWVDbGFzc0luZm8qIGluZm8pIDogUGx1Z2luQmFzZShleGVjKSwgbV9p
bmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNW
YWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBl
bnVtIHsgVHlwZSwgU3VmZml4ZXMsIERlc2NyaXB0aW9uLCBFbmFibGVkUGx1Z2luIH07Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWltZUNsYXNzSW5mbyogbV9pbmZvOwotICAgIH07Ci0KLX0KLQot
I2luY2x1ZGUgImtqc19uYXZpZ2F0b3IubHV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y29uc3QgQ2xhc3NJbmZvIFBsdWdpbnM6OmluZm8gPSB7ICJQbHVnaW5BcnJheSIsIDAsICZQbHVn
aW5zVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlw
ZUFycmF5IiwgMCwgJk1pbWVUeXBlc1RhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gUGx1Z2luOjpp
bmZvID0geyAiUGx1Z2luIiwgMCwgJlBsdWdpblRhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gTWlt
ZVR5cGU6OmluZm8gPSB7ICJNaW1lVHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlIH07Ci0KLVZlY3Rv
cjxQbHVnaW5JbmZvKj4qIFBsdWdpbkJhc2U6OnBsdWdpbnMgPSAwOwotVmVjdG9yPE1pbWVDbGFz
c0luZm8qPiogUGx1Z2luQmFzZTo6bWltZXMgPSAwOwotaW50IFBsdWdpbkJhc2U6Om1fcGx1Z0lu
Q2FjaGVSZWZDb3VudCA9IDA7Ci0KLWNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7
ICJOYXZpZ2F0b3IiLCAwLCAmTmF2aWdhdG9yVGFibGUgfTsKLS8qCi1AYmVnaW4gTmF2aWdhdG9y
VGFibGUgMTMKLSAgYXBwQ29kZU5hbWUgICBOYXZpZ2F0b3I6OkFwcENvZGVOYW1lICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBhcHBOYW1lICAgICAgIE5hdmlnYXRvcjo6
QXBwTmFtZSAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcFZl
cnNpb24gICAgTmF2aWdhdG9yOjpBcHBWZXJzaW9uICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgbGFuZ3VhZ2UgICAgICBOYXZpZ2F0b3I6Okxhbmd1YWdlICAgICAgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB1c2VyQWdlbnQgICAgIE5hdmlnYXRv
cjo6VXNlckFnZW50ICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHBs
YXRmb3JtICAgICAgTmF2aWdhdG9yOjpQbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgcGx1Z2lucyAgICAgICBOYXZpZ2F0b3I6Ol9QbHVnaW5zICAgICAg
ICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBtaW1lVHlwZXMgICAgIE5hdmln
YXRvcjo6X01pbWVUeXBlcyAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IHByb2R1Y3QgICAgICAgTmF2aWdhdG9yOjpQcm9kdWN0ICAgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgcHJvZHVjdFN1YiAgICBOYXZpZ2F0b3I6OlByb2R1Y3RTdWIg
ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB2ZW5kb3IgICAgICAgIE5h
dmlnYXRvcjo6VmVuZG9yICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIHZlbmRvclN1YiAgICAgTmF2aWdhdG9yOjpWZW5kb3JTdWIgICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKLSAgY29va2llRW5hYmxlZCBOYXZpZ2F0b3I6OkNvb2tpZUVu
YWJsZWQgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBqYXZhRW5hYmxlZCAg
IG5hdmlnYXRvclByb3RvRnVuY0phdmFFbmFibGVkICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBl
bmQKLSovCi0KLU5hdmlnYXRvcjo6TmF2aWdhdG9yKEpTT2JqZWN0KiBwcm90b3R5cGUsIEZyYW1l
KiBmcmFtZSkKLSAgICA6IERPTU9iamVjdChwcm90b3R5cGUpCi0gICAgLCBtX2ZyYW1lKGZyYW1l
KQotewotfQotCi1ib29sIE5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8TmF2aWdhdG9yLCBKU09iamVjdD4o
ZXhlYywgJk5hdmlnYXRvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1z
dGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopOwotCi0jaWYg
IVBMQVRGT1JNKFdJTikKLQotc3RhdGljIGlubGluZSBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4
ZWNTdGF0ZSosIEZyYW1lKikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbHNlCi0KLXN0
YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1l
KQotewotICAgIC8vIFRoaXMgcXVpcmsgd29ya3MgYXJvdW5kIGEgbWlzdGFrZW4gY2hlY2sgaW4g
YW4gYWQgYXQgeW91dHViZS5jb20uCi0gICAgLy8gVGhlcmUncyBhIGZ1bmN0aW9uIGNhbGxlZCBp
c1NhZmFyaSB0aGF0IHJldHVybnMgZmFsc2UgaWYgdGhlIGZ1bmN0aW9uCi0gICAgLy8gY2FsbGVk
IGlzV2luZG93cyByZXR1cm5zIHRydWU7IHRodXMgdGhlIHNpdGUgbWFsZnVuY3Rpb25zIHdpdGgg
V2luZG93cyBTYWZhcmkuCi0KLSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rp
b24ncyBuYW1lIGlzICJpc1dpbmRvd3MiLgotICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbiA9IGV4
ZWMtPmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyJiBpc1dpbmRvd3NGdW5jdGlvbk5hbWUgPSAq
bmV3IElkZW50aWZpZXIoImlzV2luZG93cyIpOwotICAgIGlmIChmdW5jdGlvbi0+ZnVuY3Rpb25O
YW1lKCkgIT0gaXNXaW5kb3dzRnVuY3Rpb25OYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGFu
ICJpc1NhZmFyaSIgZnVuY3Rpb24uCi0gICAgLy8gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBu
b3QgaXRzZWxmIG5hbWVkIC0tIGl0IGlzIHN0b3JlZCBpbiB0aGUgaXNTYWZhcmkKLSAgICAvLyBw
cm9wZXJ0eSwgdGhvdWdoLCBzbyB0aGF0J3MgaG93IHdlIHJlY29nbml6ZSBpdC4KLSAgICBFeGVj
U3RhdGUqIGNhbGxpbmdFeGVjID0gZXhlYy0+Y2FsbGluZ0V4ZWNTdGF0ZSgpOwotICAgIGlmICgh
Y2FsbGluZ0V4ZWMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGdW5jdGlvbkltcCogY2Fs
bGluZ0Z1bmN0aW9uID0gY2FsbGluZ0V4ZWMtPmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFjYWxsaW5n
RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGNhbGxpbmdFeGVjLT50aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciYgaXNTYWZhcmlG
dW5jdGlvbk5hbWUgPSAqbmV3IElkZW50aWZpZXIoImlzU2FmYXJpIik7Ci0gICAgSlNWYWx1ZSog
aXNTYWZhcmlGdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9u
TmFtZSk7Ci0gICAgaWYgKGlzU2FmYXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsgCi0gICAgLy8gRklYTUU6IFRoZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hlY2sgYWxvbmcgd2l0aCB0aGUKLSAgICAvLyBvdGhlciBz
aW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxlIHdoZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdz
IHNhZmUuCi0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gRG8gdGhlIHF1aXJrIG9ubHkgb24gdGhlIGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJz
aW9uIG9mIFlvdVR1YmUuCi0gICAgY29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOwot
ICAgIGlmICh1cmwuaG9zdCgpICE9ICJ5b3V0dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3
LnlvdXR1YmUuY29tIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh1cmwucGF0aCgp
ICE9ICIvIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQXMgd2l0aCBvdGhlciBz
aXRlLXNwZWNpZmljIHF1aXJrcywgYWxsb3cgd2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhp
cyBvZmYuCi0gICAgLy8gSW4gdGhlb3J5LCB0aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMg
dG8gY2hlY2sgaWYgdGhlaXIgZml4ZXMgYXJlIGVmZmVjdGl2ZS4KLSAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsgCi0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5k
aWYKLQotSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAotewotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgQXBwQ29k
ZU5hbWU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCJNb3ppbGxhIik7Ci0gIGNhc2UgQXBwTmFtZToK
LSAgICByZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7Ci0gIGNhc2UgQXBwVmVyc2lvbjogewot
ICAgIGlmIChuZWVkc1lvdVR1YmVRdWlyayhleGVjLCBtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCIiKTsKLSAgICAvLyBWZXJzaW9uIGlzIGV2ZXJ5dGhpbmcgaW4gdGhlIHVzZXIg
YWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxhLyIgcHJlZml4LgotICAgIGNvbnN0IFN0cmlu
ZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKHVzZXJBZ2VudC5zdWJzdHJpbmcodXNlckFnZW50LmZpbmQoJy8nKSArIDEpKTsK
LSAgfQotICBjYXNlIFByb2R1Y3Q6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdB
VE9SX1BST0RVQ1QpOwotICBjYXNlIFByb2R1Y3RTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdF
QkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCKTsKLSAgY2FzZSBWZW5kb3I6Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUik7Ci0gIGNhc2UgVmVuZG9yU3ViOgot
ICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCKTsKLSAgY2Fz
ZSBMYW5ndWFnZToKLSAgICByZXR1cm4ganNTdHJpbmcoZGVmYXVsdExhbmd1YWdlKCkpOwotICBj
YXNlIFVzZXJBZ2VudDoKLSAgICByZXR1cm4ganNTdHJpbmcobV9mcmFtZS0+bG9hZGVyKCktPnVz
ZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkg
OiBLVVJMKCkpKTsKLSAgY2FzZSBQbGF0Zm9ybToKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09S
RV9OQVZJR0FUT1JfUExBVEZPUk0pOwotICBjYXNlIF9QbHVnaW5zOgotICAgIHJldHVybiBuZXcg
UGx1Z2lucyhleGVjKTsKLSAgY2FzZSBfTWltZVR5cGVzOgotICAgIHJldHVybiBuZXcgTWltZVR5
cGVzKGV4ZWMpOwotICBjYXNlIENvb2tpZUVuYWJsZWQ6Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihj
b29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19
Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi12b2lkIFBsdWdpbkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVj
ZXNzYXJ5KCkKLXsKLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBW
ZWN0b3I8UGx1Z2luSW5mbyo+OwotICAgICAgICBtaW1lcyA9IG5ldyBWZWN0b3I8TWltZUNsYXNz
SW5mbyo+OwotICAgICAgICAKLSAgICAgICAgLy8gcmVhZCBjb25maWd1cmF0aW9uCi0gICAgICAg
IFBsdWdpbkluZm9TdG9yZSBjOwotICAgICAgICB1bnNpZ25lZCBwbHVnaW5Db3VudCA9IGMucGx1
Z2luQ291bnQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBsdWdpbkNvdW50
OyBuKyspIHsKLSAgICAgICAgICAgIFBsdWdpbkluZm8qIHBsdWdpbiA9IGMuY3JlYXRlUGx1Z2lu
SW5mb0ZvclBsdWdpbkF0SW5kZXgobik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbikgCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBsdWdpbnMt
PmFwcGVuZChwbHVnaW4pOwotICAgICAgICAgICAgaWYgKHBsdWdpbi0+bWltZXMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBW
ZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW4tPm1pbWVzLmVuZCgp
OwotICAgICAgICAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIg
PSBwbHVnaW4tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKQotICAgICAgICAgICAg
ICAgIG1pbWVzLT5hcHBlbmQoKml0cik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBsdWdpbkJh
c2U6OlBsdWdpbkJhc2UoRXhlY1N0YXRlKiBleGVjKQotICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCi17Ci0gICAgY2FjaGVQbHVn
aW5EYXRhSWZOZWNlc3NhcnkoKTsKLSAgICBtX3BsdWdJbkNhY2hlUmVmQ291bnQrKzsKLX0KLQot
UGx1Z2luQmFzZTo6flBsdWdpbkJhc2UoKQotewotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudC0t
OwotICAgIGlmICghbV9wbHVnSW5DYWNoZVJlZkNvdW50KSB7Ci0gICAgICAgIGlmIChwbHVnaW5z
KSB7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAgICAgICAg
ZGVsZXRlIHBsdWdpbnM7Ci0gICAgICAgICAgICBwbHVnaW5zID0gMDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobWltZXMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbWltZXMpOwot
ICAgICAgICAgICAgZGVsZXRlIG1pbWVzOwotICAgICAgICAgICAgbWltZXMgPSAwOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbkJhc2U6OnJlZnJlc2goYm9vbCByZWxvYWQpCi17
Ci0gICAgaWYgKHBsdWdpbnMpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpwbHVnaW5zKTsK
LSAgICAgICAgZGVsZXRlIHBsdWdpbnM7Ci0gICAgICAgIHBsdWdpbnMgPSAwOwotICAgIH0KLSAg
ICBpZiAobWltZXMpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAg
IGRlbGV0ZSBtaW1lczsKLSAgICAgICAgbWltZXMgPSAwOwotICAgIH0KLSAgICAKLSAgICByZWZy
ZXNoUGx1Z2lucyhyZWxvYWQpOwotICAgIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci19
Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luc1RhYmxlIDIKLSAgbGVuZ3Ro
ICAgICAgICBQbHVnaW5zOjpMZW5ndGggICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
fFJlYWRPbmx5Ci0gIHJlZnJlc2ggICAgICAgcGx1Z2luc0Z1bmN0aW9uUmVmcmVzaCAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotCi1KU1ZhbHVlKiBQbHVn
aW5zOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAot
ewotICBBU1NFUlQodG9rZW4gPT0gTGVuZ3RoKTsKLSAgcmV0dXJuIGpzTnVtYmVyKHBsdWdpbnMt
PnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gbmV3IFBsdWdp
bihleGVjLCBwbHVnaW5zLT5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2lu
czo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
LSAgICBWZWN0b3I8UGx1Z2luSW5mbyo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW5zLT5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJl
Z2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgIFBsdWdpbkluZm8qIHBsID0gKml0
cjsKLSAgICAgICAgaWYgKHBsLT5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIHBsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KLWJvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQ
bHVnaW5zVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBpZiAo
ZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlz
LCBlbnRyeSwgc3RhdGljRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgZWxzZQotICAgICAgICBzbG90
LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxQbHVnaW5zPik7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBwbHVnaW5zWyNd
Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1l
LnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwgcGx1Z2lucy0+c2l6ZSgpKSB7
Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1Z2lu
W25hbWVdCi0gICAgICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0
eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdp
bnMtPmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGl0
ciA9IHBsdWdpbnMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBp
ZiAoKCppdHIpLT5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBs
dWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwot
fQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBNaW1lVHlwZXNUYWJsZSAxCi0gIGxlbmd0
aCAgICAgICAgTWltZVR5cGVzOjpMZW5ndGggICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotQGVu
ZAotKi8KLQotSlNWYWx1ZSogTWltZVR5cGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBBU1NFUlQodG9rZW4gPT0gTGVuZ3RoKTsKLSAg
cmV0dXJuIGpzTnVtYmVyKG1pbWVzLT5zaXplKCkpOwotfQotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
LXsKLSAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG1pbWVzLT5hdChzbG90LmluZGV4KCkp
KTsKLX0KLQotSlNWYWx1ZSogTWltZVR5cGVzOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0
ZXJhdG9yIGVuZCA9IG1pbWVzLT5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewot
ICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9
PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4
ZWMsIG0pOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBNaW1l
VHlwZXM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hF
bnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTWltZVR5cGVzVGFibGUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMs
IGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxNaW1lVHlwZXM+KTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIG1pbWVUeXBlc1sjXQotICAgICAgICBib29sIG9r
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwot
ICAgICAgICBpZiAob2sgJiYgaSA8IG1pbWVzLT5zaXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW1lVHlwZXNbbmFtZV0KLSAgICAgICAg
QXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAg
VmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAg
ICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5i
ZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlw
ZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotCi0vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi0vKgotQGJlZ2luIFBsdWdpblRhYmxlIDQKLSAgbmFtZSAgICAgICAgICBQ
bHVnaW46Ok5hbWUgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGZpbGVuYW1lICAg
ICAgUGx1Z2luOjpGaWxlbmFtZSAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBkZXNjcmlw
dGlvbiAgIFBsdWdpbjo6RGVzY3JpcHRpb24gICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbGVu
Z3RoICAgICAgICBQbHVnaW46Okxlbmd0aCAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1A
ZW5kCi0qLwotCi1KU1ZhbHVlKiBQbHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
TmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+bmFtZSk7Ci0gICAgY2FzZSBG
aWxlbmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZmlsZSk7Ci0gICAgY2Fz
ZSBEZXNjcmlwdGlvbjoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZGVzYyk7Ci0g
ICAgY2FzZSBMZW5ndGg6IAotICAgICAgICByZXR1cm4ganNOdW1iZXIobV9pbmZvLT5taW1lcy5z
aXplKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBQbHVnaW46OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVn
aW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOwotICAg
IHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1lcy5hdChzbG90
LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVnaW4qIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOwotICAgIEF0b21pY1N0cmlu
ZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFz
c0luZm8qPjo6aXRlcmF0b3IgZW5kID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5lbmQoKTsKLSAg
ICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHRoaXNPYmotPm1f
aW5mby0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgTWltZUNs
YXNzSW5mbyogbSA9ICgqaXRyKTsKLSAgICAgICAgaWYgKG0tPnR5cGUgPT0gYXRvbWljUHJvcGVy
dHlOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBtKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLQotYm9vbCBQbHVnaW46OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSgmUGx1Z2luVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVu
dHJ5KSB7Ci0gICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1Zh
bHVlR2V0dGVyPFBsdWdpbj4pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBwbHVnaW5bI10KLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQg
aW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkg
PCBtX2luZm8tPm1pbWVzLnNpemUoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIHBsdWdpblsibmFtZSJdCi0gICAgICAgIEF0b21pY1N0cmluZyBh
dG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IG1faW5mby0+bWltZXMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbV9pbmZvLT5taW1lcy5i
ZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlw
ZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlVGFibGUgNAotICB0eXBlICAgICAg
ICAgIE1pbWVUeXBlOjpUeXBlICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3VmZml4
ZXMgICAgICBNaW1lVHlwZTo6U3VmZml4ZXMgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRl
c2NyaXB0aW9uICAgTWltZVR5cGU6OkRlc2NyaXB0aW9uICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBlbmFibGVkUGx1Z2luIE1pbWVUeXBlOjpFbmFibGVkUGx1Z2luIERvbnREZWxldGV8UmVhZE9u
bHkKLUBlbmQKLSovCi0KLUpTVmFsdWUqIE1pbWVUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFR5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnR5cGUpOwotICAg
IGNhc2UgU3VmZml4ZXM6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnN1ZmZpeGVz
KTsKLSAgICBjYXNlIERlc2NyaXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZv
LT5kZXNjKTsKLSAgICBjYXNlIEVuYWJsZWRQbHVnaW46IHsKLSAgICAgICAgRnJhbWUqIGZyYW1l
ID0gdG9KU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7Ci0gICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVj
LCBtX2luZm8tPnBsdWdpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWltZVR5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TWltZVR5cGUsIFBsdWdp
bkJhc2U+KGV4ZWMsICZNaW1lVHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwot
fQotCi1KU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIFBsdWdpbkJhc2U6OnJlZnJlc2goYXJn
c1swXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmTmF2aWdhdG9yOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKLSAgICBOYXZpZ2F0b3IqIG5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+
KHRoaXNPYmopOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+
ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUx
NmY3ZWEuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaWZuZGVmIGtqc19uYXZpZ2F0b3JfaAotI2RlZmluZSBranNfbmF2aWdhdG9yX2gK
LQotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAg
IGNsYXNzIEZyYW1lOwotCi0gICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVjdCB7
Ci0gICAgcHVibGljOgotICAgICAgICBOYXZpZ2F0b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBl
LCBGcmFtZSopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYp
OwotICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUq
LCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29u
c3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFw
cE5hbWUsIEFwcFZlcnNpb24sIExhbmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAg
ICAgICAgICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRv
ciwgVmVuZG9yU3ViLCBDb29raWVFbmFibGVkIH07Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUq
IG1fZnJhbWU7Ci0gICAgfTsKLQotICAgIEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5j
SmF2YUVuYWJsZWQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpM
aXN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmNwcCBiL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKaW5kZXggYmVjNmQ4
My4uN2JmOTIyYyAxMDA3NTUKLS0tIGEvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwIGIvV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCmluZGV4IGRiMjc3ZDUuLjNlMWQ0ZjQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9ET01JbXBs
ZW1lbnRhdGlvbi5jcHAKQEAgLTM4LDggKzM4LDggQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgotI2luY2x1ZGUg
IlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RG9jdW1lbnQuaCIKQEAgLTM2NiwxNiAr
MzY2LDIwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVE
b2N1bWVudChjb25zdCBTdHJpbmcmIHR5cGUsIEZyYW1lCiAgICAgICAgIHJldHVybiBuZXcgRlRQ
RGlyZWN0b3J5RG9jdW1lbnQodGhpcywgZnJhbWUpOwogI2VuZGlmCiAKKyAgICBQbHVnaW5EYXRh
KiBwbHVnaW5EYXRhID0gMDsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKwogICAgIC8vIFBE
RiBpcyBvbmUgaW1hZ2UgdHlwZSBmb3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0
LWluIHN1cHBvcnQuCiAgICAgLy8gV2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3Zl
ciBhbGwgaW1hZ2UgdHlwZXMsIG9idmlvdXNseS4KLSAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0
aW9uL3BkZiIgfHwgdHlwZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUodHlwZSkpCisgICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8
IHR5cGUgPT0gInRleHQvcGRmIikgJiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0
c01pbWVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMs
IGZyYW1lKTsKICAgICBpZiAoSW1hZ2U6OnN1cHBvcnRzVHlwZSh0eXBlKSkKICAgICAgICAgcmV0
dXJuIG5ldyBJbWFnZURvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICAvLyBFdmVyeXRoaW5nIGVs
c2UgZXhjZXB0IHRleHQvcGxhaW4gY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGx1Z2lucy4gSW4gcGFy
dGljdWxhciwgQWRvYmUgU1ZHIFZpZXdlciBzaG91bGQgYmUgdXNlZCBmb3IgU1ZHLCBpZiBpbnN0
YWxsZWQuCiAgICAgLy8gRGlzYWxsb3dpbmcgcGx1Zy1pbnMgdG8gdXNlIHRleHQvcGxhaW4gcHJl
dmVudHMgcGx1Zy1pbnMgZnJvbSBoaWphY2tpbmcgYSBmdW5kYW1lbnRhbCB0eXBlIHRoYXQgdGhl
IGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlLAogICAgIC8vIGFuZCBhbHNvIHNlcnZlcyBh
cyBhbiBvcHRpbWl6YXRpb24gdG8gcHJldmVudCBsb2FkaW5nIHRoZSBwbHVnLWluIGRhdGFiYXNl
IGluIHRoZSBjb21tb24gY2FzZS4KLSAgICBpZiAodHlwZSAhPSAidGV4dC9wbGFpbiIgJiYgUGx1
Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKHR5cGUpKSAKKyAgICBpZiAodHlwZSAhPSAi
dGV4dC9wbGFpbiIgJiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c01pbWVUeXBl
KHR5cGUpKSAKICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7
CiAgICAgaWYgKGlzVGV4dE1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IFRleHRE
b2N1bWVudCh0aGlzLCBmcmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggOTMxZjcwNS4u
ODg2Yzk1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBi
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNjcsNyArNjcsNyBAQAogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgog
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtMTU5NSw3ICsxNTk1LDkgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbAogICAgIC8vIEFsbG93IG90aGVyIHBsdWctaW5zIHRvIHdpbiBvdmVyIFF1
aWNrVGltZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBwbHVnLWluIHRoYXQK
ICAgICAvLyBjYW4gaGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGltZSBjYW4gYWxzbyBoYW5kbGUp
IHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCiAgICAgaWYgKChtaW1lVHlw
ZSA9PSAiaW1hZ2UvdGlmZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3RpZiIgfHwgbWltZVR5cGUg
PT0gImltYWdlL3gtdGlmZiIpKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gUGx1Z2lu
SW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICBTdHJp
bmcgcGx1Z2luTmFtZTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAg
IHBsdWdpbk5hbWUgPSBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+cGx1Z2luTmFtZUZv
ck1pbWVUeXBlKG1pbWVUeXBlKTsKICAgICAgICAgaWYgKCFwbHVnaW5OYW1lLmlzRW1wdHkoKSAm
JiAhcGx1Z2luTmFtZS5jb250YWlucygiUXVpY2tUaW1lIiwgZmFsc2UpKSAKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMjJmNzQ4OS4uZWRiNWZiNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE1NCw2ICsxNTUsMTAgQEAg
dm9pZCBET01XaW5kb3c6OmNsZWFyKCkKICAgICBpZiAobV9jb25zb2xlKQogICAgICAgICBtX2Nv
bnNvbGUtPmRpc2Nvbm5lY3RGcmFtZSgpOwogICAgIG1fY29uc29sZSA9IDA7CisKKyAgICBpZiAo
bV9uYXZpZ2F0b3IpCisgICAgICAgIG1fbmF2aWdhdG9yLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAg
ICBtX25hdmlnYXRvciA9IDA7CiB9CiAKIFNjcmVlbiogRE9NV2luZG93OjpzY3JlZW4oKSBjb25z
dApAQCAtMjE5LDYgKzIyNCwxMyBAQCBDb25zb2xlKiBET01XaW5kb3c6OmNvbnNvbGUoKSBjb25z
dAogICAgIHJldHVybiBtX2NvbnNvbGUuZ2V0KCk7CiB9CiAKK05hdmlnYXRvciogRE9NV2luZG93
OjpuYXZpZ2F0b3IoKSBjb25zdAoreworICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAgIG1f
bmF2aWdhdG9yID0gTmF2aWdhdG9yOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbmF2
aWdhdG9yLmdldCgpOworfQorCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykK
IHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHVyaSwgRE9NV2luZG93KiBzb3VyY2UpIGNv
bnN0CiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgKaW5kZXggYWRiNDczMS4uODE4ZmYxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDQs
NiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAg
IGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3Rvcnk7CisgICAgY2xhc3MgTmF2aWdhdG9yOwog
ICAgIGNsYXNzIFNjcmVlbjsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC02
OSw2ICs3MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogc2Nyb2xs
YmFycygpIGNvbnN0OwogICAgICAgICBCYXJJbmZvKiBzdGF0dXNiYXIoKSBjb25zdDsKICAgICAg
ICAgQmFySW5mbyogdG9vbGJhcigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRv
cigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIGNsaWVudEluZm9ybWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbmF2aWdhdG9yKCk7IH0KIAogICAgICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVj
dGlvbigpOwogCkBAIC0xNzAsNiArMTczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxCYXJJbmZvPiBtX3N0YXR1c2JhcjsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8QmFySW5mbz4gbV90b29sYmFyOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxDb25zb2xl
PiBtX2NvbnNvbGU7CisgICAgICAgIG11dGFibGUgUmVmUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0
b3I7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBl
ZjliYjliLi5jYjZiNDM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAor
KysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNDQsNiArNDQsOCBAQCBtb2R1bGUg
d2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzY3JvbGxi
YXJzOwogICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBCYXJJbmZvIHN0YXR1c2JhcjsK
ICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyB0b29sYmFyOworICAgICAg
ICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBOYXZpZ2F0b3IgbmF2aWdhdG9yOworICAgICAgICBh
dHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBOYXZpZ2F0b3IgY2xpZW50SW5mb3JtYXRpb247CiAKICAg
ICAgICAgRE9NU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAppbmRleCA4ZWVjNmUwLi4zYTNkYzk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUx
LDcgKzUxLDYgQEAKICNpbmNsdWRlICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bWFnZS5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBl
Nzc5NThlLi5jNDMyYTI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVO
YW1lcy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGUw
MDdjMzcuLmQxYjIyOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCkBAIC05OSw2ICs5OSw3IEBAIGNsYXNzIEtKU1Byb3h5OwogY2xh
c3MgS1VSTDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGx1Z2luRGF0YTsKIGNs
YXNzIFJhbmdlOwogY2xhc3MgUmVndWxhckV4cHJlc3Npb247CiBjbGFzcyBSZW5kZXJQYXJ0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhhZWE0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTAsMCArMSwx
NzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRp
bkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2No
aW1taUBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTmF2aWdhdG9yLmgiCisKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJy
YXkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KKyNpZiBQTEFURk9STShNQUMpICYmIFBM
QVRGT1JNKFBQQykKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIK
KyNlbGlmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2KQorI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9QTEFURk9STSAiTWFjSW50ZWwiCisjZWxpZiBQTEFURk9STShXSU5fT1MpCisjZGVm
aW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKKyNlbHNlCisjZGVmaW5lIFdF
QkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICIiCisjZW5kaWYKKyNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk0KKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9E
VUNUCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgorI2VuZGlmIC8v
IGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJ
R0FUT1JfUFJPRFVDVF9TVUIKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIg
IjIwMDMwMTA3IgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NV
QgorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgorI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9WRU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMuIgorI2VuZGlmIC8vIGlmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5E
T1JfU1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKKyNlbmRpZiAv
LyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTmF2aWdhdG9yOjpOYXZpZ2F0b3IoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFt
ZShmcmFtZSkKK3sKK30KKworTmF2aWdhdG9yOjp+TmF2aWdhdG9yKCkKK3sKKyAgICBkaXNjb25u
ZWN0RnJhbWUoKTsKK30KKwordm9pZCBOYXZpZ2F0b3I6OmRpc2Nvbm5lY3RGcmFtZSgpCit7Cisg
ICAgaWYgKG1fcGx1Z2lucykgeworICAgICAgICBtX3BsdWdpbnMtPmRpc2Nvbm5lY3RGcmFtZSgp
OworICAgICAgICBtX3BsdWdpbnMgPSAwOworICAgIH0KKyAgICBpZiAobV9taW1lVHlwZXMpIHsK
KyAgICAgICAgbV9taW1lVHlwZXMtPmRpc2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBtX21pbWVU
eXBlcyA9IDA7CisgICAgfQorICAgIG1fZnJhbWUgPSAwOworfQorCitTdHJpbmcgTmF2aWdhdG9y
OjphcHBDb2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3Ry
aW5nIE5hdmlnYXRvcjo6YXBwTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJOZXRzY2FwZSI7
Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OmFwcFZlcnNpb24oKSBjb25zdAoreworICAgIGlmICgh
bV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIFZlcnNpb24gaXMgZXZl
cnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVm
aXguCisgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNl
ckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6
IEtVUkwoKSk7CisgICAgcmV0dXJuIHVzZXJBZ2VudC5zdWJzdHJpbmcodXNlckFnZW50LmZpbmQo
Jy8nKSArIDEpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpsYW5ndWFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZSgpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjp1c2Vy
QWdlbnQoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRv
Y3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Cit9CisKK1N0
cmluZyBOYXZpZ2F0b3I6OnBsYXRmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk07Cit9CisKK1BsdWdpbkFycmF5KiBOYXZpZ2F0b3I6OnBsdWdpbnMo
KSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW5zKQorICAgICAgICBtX3BsdWdpbnMgPSBQbHVn
aW5BcnJheTo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX3BsdWdpbnMuZ2V0KCk7Cit9
CisKK01pbWVUeXBlQXJyYXkqIE5hdmlnYXRvcjo6bWltZVR5cGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbWltZVR5cGVzKQorICAgICAgICBtX21pbWVUeXBlcyA9IE1pbWVUeXBlQXJyYXk6OmNy
ZWF0ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMuZ2V0KCk7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklH
QVRPUl9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUI7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdB
VE9SX1ZFTkRPUjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQjsKK30KKworYm9vbCBOYXZp
Z2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRW5hYmxl
ZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVk
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbV9mcmFtZS0+c2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgg
Yi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDMyMDdmMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2gg
QVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JfaAorI2RlZmluZSBOYXZpZ2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
RnJhbWU7CisgICAgY2xhc3MgTWltZVR5cGVBcnJheTsKKyAgICBjbGFzcyBQbHVnaW5EYXRhOwor
ICAgIGNsYXNzIFBsdWdpbkFycmF5OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNzIE5h
dmlnYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPE5hdmlnYXRvcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmF2aWdhdG9yPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTmF2aWdhdG9yKGZyYW1lKSk7IH0KKyAgICAgICAgfk5hdmln
YXRvcigpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisgICAgICAgIEZyYW1l
KiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKworICAgICAgICBTdHJpbmcgYXBw
Q29kZU5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGFwcE5hbWUoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGFwcFZlcnNpb24oKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyB1c2VyQWdlbnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IHBsYXRmb3JtKCkgY29uc3Q7CisgICAgICAgIFBsdWdpbkFycmF5KiBwbHVnaW5zKCkgY29uc3Q7
CisgICAgICAgIE1pbWVUeXBlQXJyYXkqIG1pbWVUeXBlcygpIGNvbnN0OworICAgICAgICBTdHJp
bmcgcHJvZHVjdCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcHJvZHVjdFN1YigpIGNvbnN0Owor
ICAgICAgICBTdHJpbmcgdmVuZG9yKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyB2ZW5kb3JTdWIo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBjb29raWVFbmFibGVkKCkgY29uc3Q7CisgICAgICAgIGJv
b2wgamF2YUVuYWJsZWQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIE5hdmlnYXRv
cihGcmFtZSopOworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8UGx1Z2luQXJyYXk+IG1fcGx1Z2luczsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8TWltZVR5
cGVBcnJheT4gbV9taW1lVHlwZXM7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3M2EwMgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBOYXZpZ2F0b3IgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGFwcENvZGVOYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGFwcE5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBE
T01TdHJpbmcgYXBwVmVyc2lvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBsYW5ndWFnZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB1c2VyQWdl
bnQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhdGZvcm07CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQbHVnaW5BcnJheSBwbHVnaW5zOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgTWltZVR5cGVBcnJheSBtaW1lVHlwZXM7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgcHJvZHVjdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBwcm9kdWN0U3ViOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHZlbmRvcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZW5kb3JT
dWI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvb2tpZUVuYWJsZWQ7Cisg
ICAgICAgIGJvb2xlYW4gamF2YUVuYWJsZWQoKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMjk0ZTM0
OS4uN2YxMDU5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRHJhZ0Nv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCkBAIC0zNSw3ICszNiw5IEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGEuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0yMTYsNiAr
MjE5LDM4IEBAIHZvaWQgUGFnZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKICAgICAgICAgICAg
IGZyYW1lLT5zZXROZWVkc1JlYXBwbHlTdHlsZXMoKTsKIH0KIAordm9pZCBQYWdlOjpyZWZyZXNo
UGx1Z2lucyhib29sIHJlbG9hZCkKK3sKKyAgICBpZiAoIWFsbFBhZ2VzKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbHVnaW5EYXRhOjpyZWZyZXNoKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEZy
YW1lPiA+IGZyYW1lc05lZWRpbmdSZWxvYWQ7CisKKyAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAo
Kml0KS0+bV9wbHVnaW5EYXRhID0gMDsKKworICAgICAgICBpZiAocmVsb2FkKSB7CisgICAgICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXNOZWVkaW5nUmVs
b2FkLnNpemUoKTsgKytpKQorICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkW2ldLT5sb2FkZXIo
KS0+cmVsb2FkKCk7Cit9CisKK1BsdWdpbkRhdGEqIFBhZ2U6OnBsdWdpbkRhdGEoKSBjb25zdAor
eworICAgIGlmICghbV9wbHVnaW5EYXRhKQorICAgICAgICBtX3BsdWdpbkRhdGEgPSBQbHVnaW5E
YXRhOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS5nZXQoKTsKK30KKwog
c3RhdGljIEZyYW1lKiBpbmNyZW1lbnRGcmFtZShGcmFtZSogY3VyciwgYm9vbCBmb3J3YXJkLCBi
b29sIHdyYXBGbGFnKQogewogICAgIHJldHVybiBmb3J3YXJkCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBmZDVkY2U1Li4wY2RjYjU0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdl
LmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlR3JvdXA7Cisg
ICAgY2xhc3MgUGx1Z2luRGF0YTsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xh
c3MgU2VsZWN0aW9uOwogICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CkBAIC03Miw2ICs3
Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZShDaHJvbWVDbGllbnQqLCBD
b250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNwZWN0b3JD
bGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKICAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lk
IHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKTsKKyAgICAgICAgUGx1Z2luRGF0YSogcGx1Z2lu
RGF0YSgpIGNvbnN0OworCiAgICAgICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lZGl0b3JDbGllbnQ7IH0KIAogICAgICAgICB2b2lkIHNldE1haW5GcmFt
ZShQYXNzUmVmUHRyPEZyYW1lPik7CkBAIC0xNjUsNiArMTY5LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fbWFpbkZyYW1lOwogICAgICAgICBSZWZQdHI8
Tm9kZT4gbV9mb2N1c2VkTm9kZTsKIAorICAgICAgICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5EYXRh
PiBtX3BsdWdpbkRhdGE7CisKICAgICAgICAgRWRpdG9yQ2xpZW50KiBtX2VkaXRvckNsaWVudDsK
IAogICAgICAgICBpbnQgbV9mcmFtZUNvdW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bs
dWdpbi5oIGIvV2ViQ29yZS9wYWdlL1BsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZTUzMTg0Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaAorKysgL2Rl
di9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0
OiA0IC0qLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFBsdWdpbl9oCi0jZGVmaW5lIFBsdWdpbl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBXaWRnZXQ7Ci0KLSAg
ICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFdpZGdldCogdmlldykg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbih2aWV3KSk7IH0KLSAgICAgICAgV2lkZ2V0KiB2
aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFBsdWdpbihXaWRnZXQqIHZpZXcpIDogbV92aWV3KHZpZXcpIHsgfQotICAgICAgICBX
aWRnZXQqIG1fdmlldzsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUGx1Z2luX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMu
bW0gYi9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCmluZGV4IGY5N2ZlYTEuLjFmNmVhMzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQpAQCAtNjksNyArNjksNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcm9sbEJhci5oIgogI2ltcG9ydCAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJQbHVnaW4uaCIKICNpbXBvcnQgIlJlZ3Vs
YXJFeHByZXNzaW9uLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVy
TGlzdEl0ZW0uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KaW5kZXggNDUz
YjJlYi4uZGExMjQ5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KQEAg
LTY0LDcgKzY0LDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9T
dG9yZS5oIgorI2ltcG9ydCAiUGx1Z2luRGF0YS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIK
ICNpbXBvcnQgIlJlbmRlclBhcnQuaCIKICNpbXBvcnQgIlJlbmRlclRyZWVBc1RleHQuaCIKQEAg
LTExNTIsNyArMTE1Miw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJv
bURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAKICAgICBpZiAoV2ViQ29yZTo6
RE9NSW1wbGVtZW50YXRpb246OmlzVGV4dE1JTUVUeXBlKG1pbWVUeXBlKSB8fAogICAgICAgICBJ
bWFnZTo6c3VwcG9ydHNUeXBlKG1pbWVUeXBlKSB8fAotICAgICAgICBQbHVnaW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUobWltZVR5cGUpKQorICAgICAgICAobV9mcmFtZS0+cGFnZSgpICYm
IG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBl
KSkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKICAgICByZXR1cm4gWUVTOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaCBiL1dlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZVZpZXdGYWN0b3J5LmgKaW5kZXggNGNmMjFlMy4uN2Q1NTE1MCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9yeS5oCkBAIC0zNSw5ICszNSw3IEBACiBAcHJvdG9jb2wg
V2ViQ29yZVZpZXdGYWN0b3J5CiAKIC0gKE5TQXJyYXkgKilwbHVnaW5zSW5mbzsgLy8gYXJyYXkg
b2YgaWQgPFdlYkNvcmVQbHVnaW5JbmZvPgotLSAodm9pZClyZWZyZXNoUGx1Z2luczooQk9PTCly
ZWxvYWRQYWdlczsKLS0gKE5TU3RyaW5nICopcGx1Z2luTmFtZUZvck1JTUVUeXBlOihOU1N0cmlu
ZyAqKU1JTUVUeXBlOwotLSAoQk9PTClwbHVnaW5TdXBwb3J0c01JTUVUeXBlOihOU1N0cmluZyAq
KU1JTUVUeXBlOworLSAodm9pZClyZWZyZXNoUGx1Z2luczsKIAogLSAoTlNTdHJpbmcgKilpbnB1
dEVsZW1lbnRBbHRUZXh0OwogLSAoTlNTdHJpbmcgKilyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dlYkNvcmUvcGFnZS9x
dC9GcmFtZVF0LmNwcAppbmRleCA5MTRlZWRkLi4wNmVmZGU1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCkBA
IC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJQbHVn
aW4uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVXaW4uY3BwIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKaW5kZXggMTFh
ZmRkZS4uY2I1ZTUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNp
bmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNz
aW9uLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRl
eCBmNTZiZjZmLi4wOWI1YzRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Nyw1ICs3OCw5IEBAIGZsb2F0IHVzZXJJZGxl
VGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDAuMDsgfQogU3RyaW5nIEtVUkw6OmZp
bGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7
IH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENv
bnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1t
IGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNzc2ZWFlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1
Z2luSW5mb1N0b3JlLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAi
TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbk5hbWVGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci19Ci0K
LVBsdWdpbkluZm8gKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgUGx1Z2luSW5mbyAqcGx1Z2luSW5mbyA9IG5l
dyBQbHVnaW5JbmZvOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4gcGx1Z2luID0gW1tbV2ViQ29yZVZpZXdGYWN0b3J5
IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAK
LSAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3BsdWdpbiBuYW1lXTsKLSAgICBwbHVnaW5JbmZvLT5m
aWxlID0gW3BsdWdpbiBmaWxlbmFtZV07Ci0gICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVnaW4g
cGx1Z2luRGVzY3JpcHRpb25dOwotCi0gICAgTlNFbnVtZXJhdG9yICpNSU1FVHlwZUVudW1lcmF0
b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKE5TU3RyaW5nICpN
SU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgewotICAgICAgICBNaW1lQ2xh
c3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIHBsdWdpbkluZm8tPm1p
bWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5sb3dl
cigpOwotICAgICAgICBtaW1lLT5zdWZmaXhlcyA9IFtbcGx1Z2luIGV4dGVuc2lvbnNGb3JNSU1F
VHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIG1pbWUt
PmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6TUlNRV07Ci0gICAgICAgIG1p
bWUtPnBsdWdpbiA9IHBsdWdpbkluZm87Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwbHVnaW5J
bmZvOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAocGx1
Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNFbXB0eSgpKQotICAgICAgICBkZWxldGVB
bGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwotICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQo
KSBjb25zdAotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4g
W1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBjb3VudF07
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpblN1cHBvcnRzTUlNRVR5
cGU6bWltZVR5cGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAgIAotICAgIAot
ICAgIHJldHVybiBOTzsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5Q
YWdlcykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW1tXZWJDb3Jl
Vmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnM6cmVsb2FkT3BlblBhZ2Vz
XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi19Ci0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAppbmRleCA2YjNlMjQzLi43YzhlYjE4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCkBAIC0yOCwxMSAr
MjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKQEAgLTc5LDEyICs3NCw2IEBAIFN0
cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcgJmV4dCkKICAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKICAgICAgICAgKytlOwog
ICAgIH0KLSAgICAvLyAjIyMgRklYTUU6IFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQw
MAotICAgIFFTdHJpbmcgdHlwZSA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPm1pbWVUeXBl
Rm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHR5cGU7Ci0jZW5kaWYKIAogICAgIHJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IjsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjgxOTVhODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuY3Bw
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBB
U0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNaW1lVHlwZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWltZVR5cGU6Ok1p
bWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgp
CisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7
Cit9CisKK01pbWVUeXBlOjp+TWltZVR5cGUoKQoreworfQorCitjb25zdCBTdHJpbmcgJk1pbWVU
eXBlOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21f
aW5kZXhdLT50eXBlOworfQorCitjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjpzdWZmaXhlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+c3VmZml4
ZXM7Cit9CisKK2NvbnN0IFN0cmluZyAmTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5kZXNjOworfQorCitQ
YXNzUmVmUHRyPFBsdWdpbj4gTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAoreworICAg
IGNvbnN0IFBhZ2UqIHAgPSBtX3BsdWdpbkRhdGEtPnBhZ2UoKTsKKyAgICBpZiAoIXAgfHwgIXAt
PnNldHRpbmdzKCktPmFyZVBsdWdpbnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgY29uc3QgUGx1Z2luSW5mbyAqaW5mbyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4
XS0+cGx1Z2luOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBtX3Bs
dWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBsdWdpbnNbaV0gPT0gaW5mbykKKyAgICAgICAg
ICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA2N2RhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWltZVR5cGVf
aAorI2RlZmluZSBNaW1lVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaW5j
bHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBQ
bHVnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgTWltZVR5cGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxNaW1lVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWltZVR5cGU+IGNyZWF0ZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+IHBsdWdpbkRhdGEs
IHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWltZVR5cGUocGx1Z2luRGF0
YSwgaW5kZXgpKTsgfQorICAgICAgICB+TWltZVR5cGUoKTsKKworICAgICAgICBjb25zdCBTdHJp
bmcgJnR5cGUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgU3RyaW5nICZzdWZmaXhlcygpIGNvbnN0
OworICAgICAgICBjb25zdCBTdHJpbmcgJmRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAgIFBh
c3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBNaW1lVHlwZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+LCB1bnNpZ25lZCBpbmRleCk7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9NaW1lVHlwZS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M3MzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKwor
ICAgIGludGVyZmFjZSBNaW1lVHlwZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZmaXhl
czsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbiBlbmFibGVkUGx1Z2luOworICAgIH07CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zYjFlNDllCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpCisgICAg
OiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgp
Cit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3sK
KyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRhdGEtPm1pbWVzKCkuc2l6ZSgpOworfQor
CitNaW1lVHlwZSogTWltZVR5cGVBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQ
bHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBk
YXRhLT5taW1lcygpOworICAgIGlmIChpbmRleCA+PSBtaW1lcy5zaXplKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBNaW1lVHlwZTo6Y3JlYXRlKGRhdGEsIGluZGV4KS5nZXQoKTsK
K30KKworYm9vbCBNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSAqZGF0YSA9IGdldFBsdWdp
bkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGNvbnN0IFZl
Y3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tp
XS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK01pbWVUeXBlKiBNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEgKmRhdGEg
PSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBp
ZiAobWltZXNbaV0tPnR5cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIE1p
bWVUeXBlOjpjcmVhdGUoZGF0YSwgaSkuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1BsdWdp
bkRhdGEqIE1pbWVUeXBlQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICgh
bV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2Uo
KTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5E
YXRhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9NaW1lVHlwZUFycmF5LmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YTRkMDMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIE1p
bWVUeXBlQXJyYXlfaAorI2RlZmluZSBNaW1lVHlwZUFycmF5X2gKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBj
bGFzcyBKU1ZhbHVlOworfTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgQXRv
bWljU3RyaW5nOworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIE1pbWVUeXBlOworICAgIGNs
YXNzIFBsdWdpbkRhdGE7CisKKyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTTWltZVR5cGVBcnJh
eS5jcHAgZG9lc24ndCBpbmNsdWRlIEpTTWltZVR5cGUuaCBmb3IgdG9KUworICAgIEtKUzo6SlNW
YWx1ZSogdG9KUyhLSlM6OkV4ZWNTdGF0ZSosIE1pbWVUeXBlKik7CisKKyAgICBjbGFzcyBNaW1l
VHlwZUFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8TWltZVR5cGVBcnJheT4geworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWltZVR5cGVBcnJheT4gY3JlYXRlKEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1pbWVUeXBlQXJyYXkoZnJhbWUpKTsgfQor
ICAgICAgICB+TWltZVR5cGVBcnJheSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1l
KCkgeyBtX2ZyYW1lID0gMDsgfQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29u
c3Q7CisgICAgICAgIE1pbWVUeXBlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9v
bCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBNaW1lVHlwZSogbmFtZUdldHRlcihjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgTWltZVR5cGVBcnJheShGcmFtZSopOworICAg
ICAgICBQbHVnaW5EYXRhKiBnZXRQbHVnaW5EYXRhKCkgY29uc3Q7CisKKyAgICAgICAgRnJhbWUq
IG1fZnJhbWU7CisgICAgfTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvTWltZVR5cGVBcnJheS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MmIwOAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbApAQCAtMCwwICsxLDI2IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIHdp
bmRvdyB7CisKKyAgICBpbnRlcmZhY2UgW0hhc05hbWVHZXR0ZXIsIEhhc0luZGV4R2V0dGVyXSBN
aW1lVHlwZUFycmF5IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
bGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4u
Y3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2E3NzVkMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9Q
bHVnaW4uY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRy
b2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BsdWdpbjo6UGx1Z2luKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIHVu
c2lnbmVkIGluZGV4KQorICAgIDogbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCisgICAgLCBtX2lu
ZGV4KGluZGV4KQoreworfQorCitQbHVnaW46On5QbHVnaW4oKQoreworfQorCitTdHJpbmcgUGx1
Z2luOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClb
bV9pbmRleF0tPm5hbWU7Cit9CisKK1N0cmluZyBQbHVnaW46OmZpbGVuYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPmZpbGU7Cit9CisK
K1N0cmluZyBQbHVnaW46OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVn
aW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0tPmRlc2M7Cit9CisKK3Vuc2lnbmVkIGxvbmcgUGx1
Z2luOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMo
KVttX2luZGV4XS0+bWltZXMuc2l6ZSgpOworfQorCitNaW1lVHlwZSogUGx1Z2luOjppdGVtKHVu
c2lnbmVkIGluZGV4KQoreworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMg
PSBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAoaW5kZXggPj0gcGx1Z2luc1ttX2lu
ZGV4XS0+bWltZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE1pbWVDbGFzc0lu
Zm8qIG1pbWUgPSBwbHVnaW5zW21faW5kZXhdLT5taW1lc1tpbmRleF07CisKKyAgICBjb25zdCBW
ZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlm
IChtaW1lc1tpXSA9PSBtaW1lKQorICAgICAgICAgICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUo
bV9wbHVnaW5EYXRhLmdldCgpLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBQ
bHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2lu
RGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK01pbWVUeXBlKiBQ
bHVnaW46Om5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1p
bWVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQor
ICAgICAgICBpZiAobWltZXNbaV0tPnR5cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAg
cmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBpKS5nZXQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpbi5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjFmODEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luX2gKKyNkZWZpbmUg
UGx1Z2luX2gKKworI2luY2x1ZGUgIk1pbWVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIGNs
YXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfTsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBj
bGFzcyBTdHJpbmc7CisKKyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luLmNwcCBkb2Vz
bid0IGluY2x1ZGUgSlNNaW1lVHlwZS5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pT
KEtKUzo6RXhlY1N0YXRlKiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisK
KyAgICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFBsdWdpbkRhdGEq
IHBsdWdpbkRhdGEsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2lu
KHBsdWdpbkRhdGEsIGluZGV4KSk7IH0KKyAgICAgICAgflBsdWdpbigpOworCisgICAgICAgIFN0
cmluZyBuYW1lKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSgpIGNvbnN0OworICAg
ICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKKworICAgICAgICB1bnNpZ25lZCBsb25n
IGxlbmd0aCgpIGNvbnN0OworCisgICAgICAgIE1pbWVUeXBlKiBpdGVtKHVuc2lnbmVkIGluZGV4
KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBNaW1lVHlwZSogbmFtZUdldHRlcihjb25zdCBBdG9taWNT
dHJpbmcmIHByb3BlcnR5TmFtZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBQbHVnaW4oUGx1
Z2luRGF0YSosIHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgUmVmUHRyPFBsdWdpbkRhdGE+IG1f
cGx1Z2luRGF0YTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwgYi9XZWJDb3JlL3Bs
dWdpbnMvUGx1Z2luLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTY1
ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKQEAgLTAs
MCArMSwyOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
K21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRl
eEdldHRlcl0gUGx1Z2luIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBu
YW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGZpbGVuYW1lOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgfTsKKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcCBiL1dlYkNvcmUvcGx1Z2lu
cy9QbHVnaW5BcnJheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZi
Y2U5MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAK
QEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbkFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
QXJyYXk6OlBsdWdpbkFycmF5KEZyYW1lKiBmcmFtZSkKKyAgICA6IG1fZnJhbWUoZnJhbWUpCit7
Cit9CisKK1BsdWdpbkFycmF5Ojp+UGx1Z2luQXJyYXkoKQoreworfQorCit1bnNpZ25lZCBsb25n
IFBsdWdpbkFycmF5OjpsZW5ndGgoKSBjb25zdAoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBn
ZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gZGF0YS0+cGx1Z2lucygpLnNpemUoKTsKK30KKworUGx1Z2luKiBQbHVnaW5BcnJheTo6
aXRlbSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2lu
RGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVj
dG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IGRhdGEtPnBsdWdpbnMoKTsKKyAgICBpZiAoaW5k
ZXggPj0gcGx1Z2lucy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQbHVn
aW46OmNyZWF0ZShkYXRhLCBpbmRleCkuZ2V0KCk7Cit9CisKK2Jvb2wgUGx1Z2luQXJyYXk6OmNh
bkdldEl0ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAg
ICBQbHVnaW5EYXRhKiBkYXRhID0gZ2V0UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgY29uc3QgVmVjdG9yPFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9
IGRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGx1Z2lucy5z
aXplKCk7ICsraSkKKyAgICAgICAgaWYgKHBsdWdpbnNbaV0tPm5hbWUgPT0gcHJvcGVydHlOYW1l
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitQbHVn
aW4qIFBsdWdpbkFycmF5OjpuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYg
KCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+
JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwbHVnaW5zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAocGx1Z2luc1tpXS0+bmFtZSA9PSBw
cm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gUGx1Z2luOjpjcmVhdGUoZGF0YSwgaSku
Z2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGx1Z2luQXJyYXk6OnJlZnJlc2goYm9v
bCByZWxvYWQpCit7CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMocmVsb2FkKTsKK30KKworUGx1
Z2luRGF0YSogUGx1Z2luQXJyYXk6OmdldFBsdWdpbkRhdGEoKSBjb25zdAoreworICAgIGlmICgh
bV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUGFnZSogcCA9IG1fZnJhbWUtPnBhZ2Uo
KTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBwLT5wbHVnaW5E
YXRhKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5BcnJheS5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1ODZjZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkFy
cmF5X2gKKyNkZWZpbmUgUGx1Z2luQXJyYXlfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEtKUyB7CisgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3Rh
dGU7Cit9OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7
CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgUGx1Z2luOworICAgIGNsYXNzIFBsdWdpbkRh
dGE7CisKKyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luQXJyYXkuY3BwIGRvZXNuJ3Qg
aW5jbHVkZSBKU1BsdWdpbi5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6
RXhlY1N0YXRlKiwgUGx1Z2luKik7CisKKyAgICBjbGFzcyBQbHVnaW5BcnJheSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBsdWdpbkFycmF5PiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQbHVnaW5BcnJheT4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsdWdpbkFycmF5KGZyYW1lKSk7IH0KKyAgICAgICAgflBsdWdpbkFycmF5KCk7CisK
KyAgICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CisKKyAgICAg
ICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgUGx1Z2luKiBpdGVtKHVu
c2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9vbCBjYW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAgICAgICBQbHVnaW4qIG5hbWVHZXR0ZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIHZvaWQgcmVmcmVzaChi
b29sIHJlbG9hZCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luQXJyYXkoRnJhbWUqKTsK
KyAgICAgICAgUGx1Z2luRGF0YSogZ2V0UGx1Z2luRGF0YSgpIGNvbnN0OworCisgICAgICAgIEZy
YW1lKiBtX2ZyYW1lOworICAgIH07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljZDY1MgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKQEAgLTAsMCArMSwyNyBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5k
b3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1lR2V0dGVyLCBIYXNJbmRleEdldHRlcl0gUGx1
Z2luQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5n
dGg7CisgICAgICAgIHZvaWQgcmVmcmVzaChpbiBib29sZWFuIHJlbG9hZCk7CisgICAgfTsKKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIGIvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQyYzFlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5j
cHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGFuaWVsIE1vbGtl
bnRpbiAobW9sa2VudGluQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZWZhbiBT
Y2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2lu
RGF0YTo6UGx1Z2luRGF0YShjb25zdCBQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7
CisgICAgaW5pdFBsdWdpbnMoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Bs
dWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUGx1Z2luSW5mbyogcGx1Z2luID0g
bV9wbHVnaW5zW2ldOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcGx1Z2luLT5t
aW1lcy5zaXplKCk7ICsraikKKyAgICAgICAgICAgIG1fbWltZXMuYXBwZW5kKHBsdWdpbi0+bWlt
ZXNbal0pOworICAgIH0KK30KKworUGx1Z2luRGF0YTo6flBsdWdpbkRhdGEoKQoreworICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX3BsdWdpbnMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX21pbWVzKTsK
K30KKworYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWltZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50eXBlID09IG1pbWVUeXBlKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUGx1
Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNv
bnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgIGlmIChtX21pbWVzW2ldLT50eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAg
cmV0dXJuIG1fbWltZXNbaV0tPnBsdWdpbi0+bmFtZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmggYi9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjQwZTgzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5o
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBB
U0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFBsdWdpbkRhdGFfaAorI2RlZmluZSBQbHVnaW5EYXRhX2gKKworI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIHN0cnVj
dCBQYWdlOworICAgIHN0cnVjdCBQbHVnaW5JbmZvOworCisgICAgc3RydWN0IE1pbWVDbGFzc0lu
Zm8geworICAgICAgICBTdHJpbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAg
IFN0cmluZyBzdWZmaXhlczsKKyAgICAgICAgUGx1Z2luSW5mbyogcGx1Z2luOworICAgIH07CisK
KyAgICBzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBT
dHJpbmcgZmlsZTsKKyAgICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj4gbWltZXM7CisgICAgfTsKKworICAgIC8vIEZJWE1FOiBtZXJnZSB3aXRoIFBsdWdp
bkRhdGFiYXNlIGluIHRoZSBmdXR1cmUKKyAgICBjbGFzcyBQbHVnaW5EYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8UGx1Z2luRGF0YT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGx1Z2luRGF0YT4gY3JlYXRlKGNvbnN0IFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQbHVnaW5EYXRhKHBhZ2UpKTsgfQorICAgICAgICB+UGx1Z2luRGF0YSgpOworCisg
ICAgICAgIHZvaWQgZGlzY29ubmVjdFBhZ2UoKSB7IG1fcGFnZSA9IDA7IH0KKyAgICAgICAgY29u
c3QgUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZTsgfQorCisgICAgICAgIGNvbnN0
IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnM7
IH0KKyAgICAgICAgY29uc3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMoKSBjb25zdCB7
IHJldHVybiBtX21pbWVzOyB9CisKKyAgICAgICAgYm9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAgICAgICBTdHJpbmcgcGx1Z2luTmFtZUZvck1p
bWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworCisgICAgICAgIHN0YXRpYyB2
b2lkIHJlZnJlc2goKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpbkRhdGEoY29uc3Qg
UGFnZSopOworICAgICAgICB2b2lkIGluaXRQbHVnaW5zKCk7CisKKyAgICAgICAgVmVjdG9yPFBs
dWdpbkluZm8qPiBtX3BsdWdpbnM7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbV9t
aW1lczsKKyAgICAgICAgY29uc3QgUGFnZSogbV9wYWdlOworICAgIH07CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW0gYi9XZWJD
b3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZWViOTMxNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9t
YWMvUGx1Z2luRGF0YU1hYy5tbQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJQbHVnaW5EYXRhLmgiCisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgTlNBcnJheSogcGx1Z2lucyA9
IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXTsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IFtwbHVnaW5zIGNvdW50XTsgKytpKSB7CisgICAg
ICAgIFBsdWdpbkluZm8qIHBsdWdpbkluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKworICAgICAgICBp
ZCA8V2ViQ29yZVBsdWdpbkluZm8+IHBsdWdpbiA9IFtwbHVnaW5zIG9iamVjdEF0SW5kZXg6aV07
CisgICAgCisgICAgICAgIHBsdWdpbkluZm8tPm5hbWUgPSBbcGx1Z2luIG5hbWVdOworICAgICAg
ICBwbHVnaW5JbmZvLT5maWxlID0gW3BsdWdpbiBmaWxlbmFtZV07CisgICAgICAgIHBsdWdpbklu
Zm8tPmRlc2MgPSBbcGx1Z2luIHBsdWdpbkRlc2NyaXB0aW9uXTsKKworICAgICAgICBOU0VudW1l
cmF0b3IqIE1JTUVUeXBlRW51bWVyYXRvciA9IFtwbHVnaW4gTUlNRVR5cGVFbnVtZXJhdG9yXTsK
KyAgICAgICAgd2hpbGUgKE5TU3RyaW5nKiBNSU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0
T2JqZWN0XSkgeworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xh
c3NJbmZvOworICAgICAgICAgICAgcGx1Z2luSW5mby0+bWltZXMuYXBwZW5kKG1pbWUpOworICAg
ICAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5sb3dlcigpOworICAgICAgICAgICAg
bWltZS0+c3VmZml4ZXMgPSBbW3BsdWdpbiBleHRlbnNpb25zRm9yTUlNRVR5cGU6TUlNRV0gY29t
cG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLCJdOworICAgICAgICAgICAgbWltZS0+ZGVzYyA9IFtw
bHVnaW4gZGVzY3JpcHRpb25Gb3JNSU1FVHlwZTpNSU1FXTsKKyAgICAgICAgICAgIG1pbWUtPnBs
dWdpbiA9IHBsdWdpbkluZm87CisgICAgICAgIH0KKworICAgICAgICBtX3BsdWdpbnMuYXBwZW5k
KHBsdWdpbkluZm8pOworICAgIH0KKyAgICAKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworCisgICAgcmV0dXJuOworfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyAgICBbW1dlYkNvcmVWaWV3RmFjdG9yeSBz
aGFyZWRGYWN0b3J5XSByZWZyZXNoUGx1Z2luc107CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKK30KKworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0
YVF0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9QbHVnaW5EYXRhUXQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTZkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0Lmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdl
YnBsdWdpbmZhY3RvcnkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRh
dGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBRV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0
PENocm9tZUNsaWVudFF0Kj4obV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7
CisgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3RvcnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5
KCk7CisgICAgaWYgKCFmYWN0b3J5KQorICAgICAgICByZXR1cm47CisKKyAgICBRTGlzdDxRV2Vi
UGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBwbHVnaW5zID0gZmFjdG9yeS0+cGx1Z2lucygpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgUVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiYgcGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKwor
ICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3IFBsdWdpbkluZm87CisgICAgICAgIGluZm8t
Pm5hbWUgPSBwbHVnaW4ubmFtZTsKKyAgICAgICAgaW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlw
dGlvbjsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBsdWdpbi5taW1lVHlwZXMuY291
bnQoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBRV2ViUGx1Z2luRmFjdG9yeTo6TWltZVR5
cGUmIG1pbWVUeXBlID0gcGx1Z2luLm1pbWVUeXBlcy5hdChqKTsKKworICAgICAgICAgICAgTWlt
ZUNsYXNzSW5mbyogbWltZUluZm8gPSBuZXcgTWltZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIG1p
bWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsKKyAgICAgICAgICAgIG1pbWVJbmZvLT5kZXNj
ID0gbWltZVR5cGUuZGVzY3JpcHRpb247CisgICAgICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMg
PSBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5qb2luKCI7ICIpOworCisgICAgICAgICAgICBpbmZv
LT5taW1lcy5hcHBlbmQobWltZUluZm8pOworICAgICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5z
LmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3ZvaWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7
CisgICAgLy8gbm90aGluZyB0byBkbworfQorCit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVn
aW5zL3dpbi9QbHVnaW5EYXRhV2luLmNwcCBiL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0
YVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmM2YzYQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHAKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQor
ICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisK
KyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgorI2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkK
K3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1
Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+
cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsK
KyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2FnZSA9IHBsdWdpbnNbaV07CisKKyAgICAgICAg
aW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsKKyAgICAgICAgaW5mby0+ZmlsZSA9IHBhY2th
Z2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8tPmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlv
bigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rlc2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3Jp
cHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3JpcHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rl
c2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVu
ZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0gbmV3IE1pbWVDbGFzc0luZm87CisgICAgICAg
ICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7CisKKyAgICAgICAgICAgIG1pbWUtPnR5cGUg
PSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1lLT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisKKyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXpl
KCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICAg
ICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4
ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAgfQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJl
ZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNlICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJlc2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBh
L1dlYktpdC5wcmkgYi9XZWJLaXQucHJpCmluZGV4IDU1ZGU5YjMuLmQxMjQyM2IgMTAwNjQ0Ci0t
LSBhL1dlYktpdC5wcmkKKysrIGIvV2ViS2l0LnByaQpAQCAtOTcsNyArOTcsOCBAQCBJTkNMVURF
UEFUSCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3JlbmRlcmluZyBcCiAgICAgJCRCQVNF
X0RJUi9XZWJDb3JlL2hpc3RvcnkgXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS94bWwgXAotICAg
ICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sCisgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2h0bWwgXAor
ICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbHVnaW5zCiAKIAogbWFjeCB7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGExZDlkYmUu
LjUzYTJkMTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5u
ICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIFdlYlZpZXdGYWN0b3J5J3MgcmVmcmVzaFBsdWdp
bnMgbWV0aG9kIHRvIG9ubHkgcmVmcmVzaCB0aGUKKyAgICAgICAgcGx1Z2lucyBhbmQgbm90IHJl
bG9hZCB0aGUgZnJhbWVzIGFueW1vcmUgc2luY2UgdGhhdCdzIG5vdyBkb25lIGluIGEKKyAgICAg
ICAgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWFubmVyIGJ5IFdlYkNvcmU6OlBhZ2UuCisKKyAgICAg
ICAgQWxzbyByZW1vdmVkIHRoZSBub3cgdW51c2VkIHBsdWdpbk5hbWVGb3JNSU1FVHlwZSBhbmQK
KyAgICAgICAgcGx1Z2luU3VwcG9ydHNNSU1FVHlwZSBtZXRob2RzLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW06CisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisKIDIwMDgtMDMtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1pdHouCmRpZmYgLS1naXQgYS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQppbmRleCBjNTI0YjRiLi40MWYzODM3IDEwMDY0NAot
LS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0b3J5Lm1tCisrKyBiL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW0KQEAgLTcxLDIyICs3MSw5
IEBACiAgICAgcmV0dXJuIFtbV2ViUGx1Z2luRGF0YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHBsdWdp
bnNdOwogfQogCi0tIChOU1N0cmluZyAqKXBsdWdpbk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcg
KilNSU1FVHlwZQotewotICAgIHJldHVybiBbW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRh
YmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdIG5hbWVdOwotfQotCi0tICh2b2lkKXJl
ZnJlc2hQbHVnaW5zOihCT09MKXJlbG9hZFBhZ2VzCistICh2b2lkKXJlZnJlc2hQbHVnaW5zCiB7
CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcmVmcmVzaF07Ci0gICAg
aWYgKHJlbG9hZFBhZ2VzKSB7Ci0gICAgICAgIFtXZWJWaWV3IF9tYWtlQWxsV2ViVmlld3NQZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9yZWxvYWRGb3JQbHVnaW5DaGFuZ2VzKV07Ci0gICAgfQot
fQotCi0tIChCT09MKXBsdWdpblN1cHBvcnRzTUlNRVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUK
LXsKLSAgICByZXR1cm4gW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2lu
Rm9yTUlNRVR5cGU6TUlNRVR5cGVdICE9IG5pbDsKIH0KIAogLSAoV2ViQ29yZUZyYW1lQnJpZGdl
ICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopdgpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDg3
NDczZjQuLjM0ODI2NTIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTM2MSwxNiArMzYxLDYg
QEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAgICAgcmV0dXJuIGNv
cmUoc2VsZiktPmxvYWRlcigpLT5udW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHMocmVjdXJzZSk7
CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdpbkNoYW5nZXMKLXsKLSAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsK
LSAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChm
cmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgICAgICBpZiAoKFtkb2N1bWVudFZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSAmJiBjb3JlRnJhbWUtPmxvYWRl
cigpLT5jb250YWluc1BsdWdpbnMoKSkpCi0gICAgICAgICAgICBba2l0KGZyYW1lKSByZWxvYWRd
OwotICAgIH0KLX0KLQogLSAodm9pZClfYXR0YWNoU2NyaXB0RGVidWdnZXIKIHsKICAgICBpZiAo
X3ByaXZhdGUtPnNjcmlwdERlYnVnZ2VyKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFs
LmgKaW5kZXggZDY4MjgyNS4uOWIwMzU0YyAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRl
cm5hbC5oCkBAIC0xNDksOCArMTQ5LDYgQEAgc3RydWN0IFdlYkNvcmVIaXN0b3J5SXRlbTsKIAog
LSAoaW50KV9udW1QZW5kaW5nT3JMb2FkaW5nUmVxdWVzdHM6KEJPT0wpcmVjdXJzZTsKIAotLSAo
dm9pZClfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlczsKLQogLSAodm9pZClfYXR0YWNoU2NyaXB0RGVi
dWdnZXI7CiAtICh2b2lkKV9kZXRhY2hTY3JpcHREZWJ1Z2dlcjsKIApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQppbmRleCA3YmI1ZDNkLi5iNzE3NDlmIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTI4MSwx
MSArMTI4MSw2IEBAIFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2Vi
Vmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpCiAgICAgW05TQXBwIHNldFdpbmRv
d3NOZWVkVXBkYXRlOllFU107CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdpbkNoYW5nZXMK
LXsKLSAgICBbW3NlbGYgbWFpbkZyYW1lXSBfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlc107Ci19Ci0K
IC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilfY2FjaGVkUmVzcG9uc2VGb3JVUkw6KE5TVVJMICop
VVJMCiB7CiAgICAgTlNNdXRhYmxlVVJMUmVxdWVzdCAqcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJM
UmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJMXTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9B
cGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2lu
dGVyZmFjZS5jcHAKaW5kZXggZmQwYzY5NC4uNjMxMjFmMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0
d29ya2ludGVyZmFjZS5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUu
aCIKICNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3
b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgi
CiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNsdWRlICJxY29va2llamFyLmgiCiAjaW5jbHVk
ZSA8cWRlYnVnLmg+CkBAIC0zNjEsNyArMzYwLDcgQEAgdm9pZCBRV2ViTmV0d29ya0pvYjo6c2V0
RXJyb3JTdHJpbmcoY29uc3QgUVN0cmluZyYgZXJyb3JTdHJpbmcpCiAqLwogYm9vbCBRV2ViTmV0
d29ya0pvYjo6Y2FuY2VsbGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWQtPnJlc291cmNlSGFu
ZGxlICYmICFkLT5jb25uZWN0b3I7CisgICAgcmV0dXJuICFkLT5yZXNvdXJjZUhhbmRsZTsKIH0K
IAogLyohCkBAIC00NTAsNyArNDQ5LDYgQEAgYm9vbCBRV2ViTmV0d29ya01hbmFnZXI6OmFkZChS
ZXNvdXJjZUhhbmRsZSAqaGFuZGxlLCBRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50ZXIKICAgICBo
YW5kbGUtPmdldEludGVybmFsKCktPm1fam9iID0gam9iOwogICAgIGpvYi0+ZC0+cmVzb3VyY2VI
YW5kbGUgPSBoYW5kbGU7CiAgICAgam9iLT5kLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0gICAg
am9iLT5kLT5jb25uZWN0b3IgPSAwOwogCiAgICAgam9iLT5kLT5yZXF1ZXN0LmluaXQoaGFuZGxl
LT5yZXF1ZXN0KCkpOwogCkBAIC00NzksNyArNDc3LDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFn
ZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSAqaGFuZGxlKQogICAgICAgICByZXR1cm47CiAgICAg
REVCVUcoKSA8PCAiUVdlYk5ldHdvcmtNYW5hZ2VyOjpjYW5jZWw6IiA8PCAgam9iLT5kLT5yZXF1
ZXN0Lmh0dHBIZWFkZXIudG9TdHJpbmcoKTsKICAgICBqb2ItPmQtPnJlc291cmNlSGFuZGxlID0g
MDsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7CiAgICAgam9iLT5kLT5pbnRlcmZhY2UtPmNh
bmNlbEpvYihqb2IpOwogICAgIGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2IgPSAwOwogfQpA
QCAtNDk2LDcgKzQ5Myw3IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJO
ZXR3b3JrSm9iICpqb2IpCiAgICAgICAgIGNsaWVudCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUt
PmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVudCkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3RvcikgeworICAgIH0gZWxzZSB7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTU3MSw4ICs1NjgsNiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFu
YWdlcjo6c3RhcnRlZChRV2ViTmV0d29ya0pvYiAqam9iKQogCiAgICAgaWYgKGNsaWVudCkKICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSwg
cmVzcG9uc2UpOwotICAgIGlmIChqb2ItPmQtPmNvbm5lY3RvcikKLSAgICAgICAgZW1pdCBqb2It
PmQtPmNvbm5lY3Rvci0+c3RhcnRlZChqb2IpOwogCiB9CiAKQEAgLTU4Nyw3ICs1ODIsNyBAQCB2
b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShRV2ViTmV0d29ya0pvYiAqam9iLCBjb25zdCBR
Qnl0ZUFycmF5ICZkYXRhKQogICAgICAgICBjbGllbnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxl
LT5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgfSBlbHNlIGlmICgham9iLT5kLT5jb25uZWN0b3IpIHsKKyAgICB9IGVsc2UgewogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC01OTcsOCArNTkyLDYgQEAgdm9pZCBRV2ViTmV0d29ya01h
bmFnZXI6OmRhdGEoUVdlYk5ldHdvcmtKb2IgKmpvYiwgY29uc3QgUUJ5dGVBcnJheSAmZGF0YSkK
ICAgICBERUJVRygpIDw8ICJyZWNlaXZlZERhdGEiIDw8IGpvYi0+ZC0+cmVxdWVzdC51cmwucGF0
aCgpOwogICAgIGlmIChjbGllbnQpCiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoam9i
LT5kLT5yZXNvdXJjZUhhbmRsZSwgZGF0YS5jb25zdERhdGEoKSwgZGF0YS5sZW5ndGgoKSwgZGF0
YS5sZW5ndGgoKSAvKkZpeE1lKi8pOwotICAgIGlmIChqb2ItPmQtPmNvbm5lY3RvcikKLSAgICAg
ICAgZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+ZGF0YShqb2IsIGRhdGEpOwogCiB9CiAKQEAgLTYx
Nyw3ICs2MTAsNyBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZmluaXNoZWQoUVdlYk5ldHdv
cmtKb2IgKmpvYiwgaW50IGVycm9yQ29kZSkKICAgICAgICAgY2xpZW50ID0gam9iLT5kLT5yZXNv
dXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAgIGlmICghY2xpZW50KQogICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+ZC0+Y29ubmVjdG9yKSB7CisgICAgfSBlbHNl
IHsKICAgICAgICAgam9iLT5kZXJlZigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjQ1
LDkgKzYzOCw2IEBAIHZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5pc2hlZChRV2ViTmV0d29y
a0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGpv
Yi0+ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0IGpvYi0+ZC0+Y29ubmVjdG9yLT5maW5pc2hl
ZChqb2IsIGVycm9yQ29kZSk7Ci0KICAgICBERUJVRygpIDw8ICJyZWNlaXZlZEZpbmlzaGVkIGRv
bmUiIDw8IGpvYi0+ZC0+cmVxdWVzdC51cmw7CiAKICAgICBqb2ItPmRlcmVmKCk7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCBiL1dlYktpdC9xdC9B
cGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCmluZGV4IGM3MTJhZTQuLjliNmY0ZDAgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCisrKyBiL1dlYktp
dC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgLCByZXNvdXJjZUhhbmRsZSgwKQogICAgICAgICAsIHJlZGlyZWN0ZWQoZmFs
c2UpCiAgICAgICAgICwgaW50ZXJmYWNlKDApCi0gICAgICAgICwgY29ubmVjdG9yKDApCiAgICAg
ICAgICwgam9iU3RhdHVzKFFXZWJOZXR3b3JrSm9iOjpKb2JDcmVhdGVkKQogICAgICAgICB7fQog
ICAgIGludCByZWY7CkBAIC02OSw3ICs2OCw2IEBAIHB1YmxpYzoKICAgICBib29sIHJlZGlyZWN0
ZWQ7CiAKICAgICBRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50ZXJmYWNlOwotICAgIFFXZWJPYmpl
Y3RQbHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvcjsKICAgICBRV2ViTmV0d29ya0pvYjo6Sm9iU3Rh
dHVzIGpvYlN0YXR1czsKICAgICBRU3RyaW5nIGVycm9yU3RyaW5nOwogfTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJv
YmplY3RwbHVnaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjRkNjA0Li4w
MDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVj
aCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0jaW5jbHVkZSAicXdl
Ym9iamVjdHBsdWdpbl9wLmgiCi0jaW5jbHVkZSA8cXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5o
PgotI2luY2x1ZGUgPHFjb3JlYXBwbGljYXRpb24uaD4KLSNpbmNsdWRlIDxxZmlsZWluZm8uaD4K
LQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCi0jaWZuZGVmIFFUX05PX0xJQlJBUlkKLVFf
R0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoUVdlYkZhY3RvcnlMb2FkZXIsIGxvYWRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlX2lp
ZCwgUUNvcmVBcHBsaWNhdGlvbjo6bGlicmFyeVBhdGhzKCksIFFMYXRpbjFTdHJpbmcoIi93ZWJw
bHVnaW5zIikpKQotI2VuZGlmCi0KLQotUVdlYkZhY3RvcnlMb2FkZXI6OlFXZWJGYWN0b3J5TG9h
ZGVyKGNvbnN0IGNoYXIgKmlpZCwgY29uc3QgUVN0cmluZ0xpc3QgJnBhdGhzLCBjb25zdCBRU3Ry
aW5nICZzdWZmaXgsIFF0OjpDYXNlU2Vuc2l0aXZpdHkpCi0gICAgOiBRRmFjdG9yeUxvYWRlcihp
aWQsIHBhdGhzLCBzdWZmaXgpCi17Ci0gICAgUVN0cmluZ0xpc3QgcGx1Z2lucyA9IGtleXMoKTsK
LSAgICBmb3JlYWNoKFFTdHJpbmcgaywgcGx1Z2lucykgewotICAgICAgICBRV2ViT2JqZWN0UGx1
Z2luICpwbHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVdlYk9iamVjdFBsdWdpbiAqPihpbnN0YW5jZShr
KSk7Ci0gICAgICAgIGlmICghcGx1Z2luKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IEluZm8gaW5mbzsKLSAgICAgICAgaW5mby5uYW1lID0gazsKLSAgICAgICAgaW5mby5kZXNjcmlw
dGlvbiA9IHBsdWdpbi0+ZGVzY3JpcHRpb25Gb3JLZXkoayk7Ci0gICAgICAgIFFTdHJpbmdMaXN0
IG1pbWV0eXBlcyA9IHBsdWdpbi0+bWltZXR5cGVzRm9yS2V5KGspOwotICAgICAgICBmb3JlYWNo
KFFTdHJpbmcgbSwgbWltZXR5cGVzKSB7Ci0gICAgICAgICAgICBNaW1lSW5mbyBtaW1lOwotICAg
ICAgICAgICAgbWltZS50eXBlID0gbTsKLSAgICAgICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBs
dWdpbi0+ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKG0pOwotICAgICAgICAgICAgaW5mby5taW1lcyA8
PCBtaW1lOwotICAgICAgICB9Ci0gICAgICAgIG1fcGx1Z2luSW5mby5hcHBlbmQoaW5mbyk7Ci0g
ICAgfQotfQotCi1RV2ViRmFjdG9yeUxvYWRlciAqUVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKQot
ewotICAgIHJldHVybiBsb2FkZXIoKTsKLX0KLQotCi1RU3RyaW5nIFFXZWJGYWN0b3J5TG9hZGVy
OjpkZXNjcmlwdGlvbkZvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdAotewotICAgIGZv
cmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGlmIChpbmZv
Lm5hbWUgPT0ga2V5KQotICAgICAgICAgICAgcmV0dXJuIGluZm8uZGVzY3JpcHRpb247Ci0gICAg
fQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0KLVFTdHJpbmdMaXN0IFFXZWJGYWN0b3J5TG9h
ZGVyOjptaW1ldHlwZXNGb3JOYW1lKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3QKLXsKLSAgICBm
b3JlYWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1Z2luSW5mbykgewotICAgICAgICBpZiAoaW5m
by5uYW1lID09IGtleSkgewotICAgICAgICAgICAgUVN0cmluZ0xpc3QgbWltZXR5cGVzOwotICAg
ICAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUluZm8gJm0sIGluZm8ubWltZXMpCi0gICAgICAg
ICAgICAgICAgbWltZXR5cGVzLmFwcGVuZChtLnR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIG1p
bWV0eXBlczsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLX0K
LQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3Qg
UVN0cmluZyAmZXh0ZW5zaW9uKQotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9w
bHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1p
bWVzKSB7Ci0gICAgICAgICAgICBpZiAobS5leHRlbnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG0udHlwZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gUVN0cmluZygpOwotfQotCi0KLVFTdHJpbmdMaXN0IFFXZWJGYWN0b3J5TG9hZGVyOjpl
eHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBRU3RyaW5nTGlzdCBleHRlbnNpb25zOwotICAgIGZv
cmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2gg
KGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKQotICAgICAgICAgICAgZXh0ZW5zaW9ucyA8
PCBtLmV4dGVuc2lvbnM7Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotCi19Ci0K
LVFTdHJpbmcgUVdlYkZhY3RvcnlMb2FkZXI6Om5hbWVGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5n
ICZtaW1lVHlwZSkgY29uc3QKLXsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1
Z2luSW5mbykgewotICAgICAgICBmb3JlYWNoIChjb25zdCBNaW1lSW5mbyAmbSwgaW5mby5taW1l
cykKLSAgICAgICAgICAgIGlmIChtLnR5cGUgPT0gbWltZVR5cGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGluZm8ubmFtZTsKLSAgICB9Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotUU9i
amVjdCAqUVdlYkZhY3RvcnlMb2FkZXI6OmNyZWF0ZShRV2ViRnJhbWUgKmZyYW1lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJl9taW1lVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50
TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdM
aXN0ICZhcmd1bWVudFZhbHVlcykKLXsKLSAgICBRU3RyaW5nIG1pbWVUeXBlID0gX21pbWVUeXBl
OwotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgUUZpbGVJbmZvIGZpKHVy
bC5wYXRoKCkpOwotICAgICAgICBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGZpLnN1
ZmZpeCgpKTsKLSAgICB9Ci0gICAgUVN0cmluZyBuYW1lID0gbmFtZUZvck1pbWV0eXBlKG1pbWVU
eXBlKTsKLSAgICBRV2ViT2JqZWN0UGx1Z2luICpwbHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVdlYk9i
amVjdFBsdWdpbiAqPihpbnN0YW5jZShuYW1lKSk7Ci0gICAgaWYgKCFwbHVnaW4pCi0gICAgICAg
IHJldHVybiAwOwotICAgIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvciA9IG5l
dyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKGZyYW1lKTsKLSAgICByZXR1cm4gcGx1Z2luLT5j
cmVhdGUoY29ubmVjdG9yLCB1cmwsIG1pbWVUeXBlLCBhcmd1bWVudE5hbWVzLCBhcmd1bWVudFZh
bHVlcyk7Ci19Ci0KLQotCi0vKiEgXGNsYXNzIFFXZWJPYmplY3RQbHVnaW4KLQotICBUaGlzIGNs
YXNzIGlzIGEgcGx1Z2luIGZvciB0aGUgSFRNTCBvYmplY3QgdGFnLiBJdCBjYW4gYmUgdXNlZCB0
byBlbWJlZCBhcmJpdHJhcnkgY29udGVudCBpbiBhIHdlYiBwYWdlLgotKi8KLQotCi1RV2ViT2Jq
ZWN0UGx1Z2luOjpRV2ViT2JqZWN0UGx1Z2luKFFPYmplY3QgKnBhcmVudCkKLSAgICA6IFFPYmpl
Y3QocGFyZW50KQotewotfQotCi1RV2ViT2JqZWN0UGx1Z2luOjp+UVdlYk9iamVjdFBsdWdpbigp
Ci17Ci19Ci0KLS8qIQotICBcZm4gUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdpbjo6a2V5cygp
IGNvbnN0Ci0KLSAgVGhlIGtleXMgc2hvdWxkIGJlIHVuaXF1ZSBuYW1lcy4KLSovCi0KLS8qIQot
ICBBIGRlc2NyaXB0aW9uIGZvciBcYSBrZXkuCi0qLwotUVN0cmluZyBRV2ViT2JqZWN0UGx1Z2lu
OjpkZXNjcmlwdGlvbkZvcktleShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIFFTdHJpbmcoKTsKLX0KLQotLyohCi0gIHJldHVybnMgdGhlIG1pbWV0eXBlcyB0aGF0IGNh
biBiZSBoYW5kbGVkIGJ5IFxhIGtleS4KLSovCi1RU3RyaW5nTGlzdCBRV2ViT2JqZWN0UGx1Z2lu
OjptaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdAotewotICAgIHJldHVy
biBRU3RyaW5nTGlzdCgpOwotfQotCi0KLS8qIQotICBcZm4gUVN0cmluZ0xpc3QgUVdlYk9iamVj
dFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKCkgY29uc3QKLQotICBTaG91bGQgcmV0dXJu
IGEgbGlzdCBvZiBleHRlbnNpb25zIHRoYXQgYXJlIHJlY29nbmlzZWQgdG8gbWF0Y2ggdGhlIFxh
IG1pbWVUeXBlLgotKi8KLVFTdHJpbmdMaXN0IFFXZWJPYmplY3RQbHVnaW46OmV4dGVuc2lvbnNG
b3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
UVN0cmluZ0xpc3QoKTsKLX0KLQotLyohCi0gIFxmbiBRT2JqZWN0ICpRV2ViT2JqZWN0UGx1Z2lu
OjpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLCBjb25zdCBRVXJs
ICZ1cmwsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLCBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1l
bnROYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdAotCi0gIENy
ZWF0ZXMgYSBRT2JqZWN0IHdpdGggXGEgY29ubmVjdG9yIHRvIGhhbmRsZSBcYSBtaW1lVHlwZS4g
XGEgYXJndW1lbnROYW1lcyBhbmQgXGEgYXJndW1lbnRWYWx1ZXMgYXJlIGEgc2V0IG9mIGtleS12
YWx1ZSBwYWlycyBwYXNzZWQgZGlyZWN0bHkKLSAgZnJvbSB0aGUgJmx0O3BhcmFtJmd0OyBlbGVt
ZW50cyBjb250YWluZWQgaW4gdGhlIEhUTUwgb2JqZWN0IHRhZy4KLSovCi0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luLmggYi9XZWJLaXQvcXQvQXBp
L3F3ZWJvYmplY3RwbHVnaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3Y2Fm
Ny4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaAorKysgL2Rl
di9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRl
Y2ggQVNBCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0qLwotI2lmbmRlZiBRV0VC
T0JKRUNUUExVR0lOX0gKLSNkZWZpbmUgUVdFQk9CSkVDVFBMVUdJTl9ICi0KLSNpbmNsdWRlICJx
d2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXRDb3JlL3FwbHVnaW4uaD4KLSNpbmNsdWRlIDxR
dENvcmUvcWZhY3RvcnlpbnRlcmZhY2UuaD4KLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAot
Ci1jbGFzcyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yOwotY2xhc3MgUVVybDsKLQotc3RydWN0
IFFXRUJLSVRfRVhQT1JUIFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlIDogcHVibGlj
IFFGYWN0b3J5SW50ZXJmYWNlCi17Ci0gICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdlYk9i
amVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry
aW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0gMDsKLX07Ci0KLSNkZWZpbmUg
UVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2VfaWlkICJjb20udHJvbGx0ZWNoLlF0LlFX
ZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlIgotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2Vi
T2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZSwgUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRl
cmZhY2VfaWlkKQotCi1jbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViT2JqZWN0UGx1Z2luIDogcHVi
bGljIFFPYmplY3QsIHB1YmxpYyBRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZQotewot
ICAgIFFfT0JKRUNUCi0gICAgUV9JTlRFUkZBQ0VTKFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50
ZXJmYWNlOlFGYWN0b3J5SW50ZXJmYWNlKQotcHVibGljOgotICAgIGV4cGxpY2l0IFFXZWJPYmpl
Y3RQbHVnaW4oUU9iamVjdCAqcGFyZW50ID0gMCk7Ci0gICAgdmlydHVhbCB+UVdlYk9iamVjdFBs
dWdpbigpOwotCi0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3QgPSAwOwotCi0g
ICAgdmlydHVhbCBRU3RyaW5nIGRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBtaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0
cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGV4dGVuc2lvbnNGb3JN
aW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRT2Jq
ZWN0ICpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0g
MDsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbl9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5fcC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjAyNjFmLi4wMDAwMDAwCi0tLSBhL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCww
IEBACi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5fUF9ICi0jZGVmaW5lIFFXRUJPQkpFQ1RQTFVH
SU5fUF9ICi0KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgotI2luY2x1ZGUgInF3ZWJvYmpl
Y3RwbHVnaW4uaCIKLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCi0vKgotICBGSVhNRTog
VGhpcyBpcyBjb3BpZWQgZnJvbSBxZmFjdG9yeWxvYWRlcl9wLmguCi0gIFJlbW92ZSB0aGlzIG9u
Y2Ugd2UgbWFkZSBxZmFjdG9yeWxvYWRlciBwdWJsaWMgaW4gUXQKLSovCi1jbGFzcyBRRmFjdG9y
eUxvYWRlclByaXZhdGU7Ci0KLWNsYXNzIFFfQ09SRV9FWFBPUlQgUUZhY3RvcnlMb2FkZXIgOiBw
dWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNUX0ZBS0UKLSAgICBRX0RFQ0xBUkVfUFJJVkFU
RShRRmFjdG9yeUxvYWRlcikKLQotcHVibGljOgotICAgIFFGYWN0b3J5TG9hZGVyKGNvbnN0IGNo
YXIgKmlpZCwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGF0aHMgPSBR
U3RyaW5nTGlzdCgpLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCA9
IFFTdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICBRdDo6Q2FzZVNlbnNpdGl2aXR5ID0gUXQ6
OkNhc2VTZW5zaXRpdmUpOwotICAgIH5RRmFjdG9yeUxvYWRlcigpOwotCi0gICAgUVN0cmluZ0xp
c3Qga2V5cygpIGNvbnN0OwotICAgIFFPYmplY3QgKmluc3RhbmNlKGNvbnN0IFFTdHJpbmcgJmtl
eSkgY29uc3Q7Ci0KLX07Ci0KLWNsYXNzIFFXZWJGcmFtZTsKLQotY2xhc3MgUVdlYkZhY3RvcnlM
b2FkZXIgOiBwdWJsaWMgUUZhY3RvcnlMb2FkZXIKLXsKLSAgICBRX09CSkVDVAotcHVibGljOgot
ICAgIFFXZWJGYWN0b3J5TG9hZGVyKGNvbnN0IGNoYXIgKmlpZCwKLSAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGF0aHMgPSBRU3RyaW5nTGlzdCgpLAotICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCA9IFFTdHJpbmcoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICBRdDo6Q2FzZVNlbnNpdGl2aXR5ID0gUXQ6OkNhc2VTZW5zaXRpdmUpOwot
Ci0gICAgc3RhdGljIFFXZWJGYWN0b3J5TG9hZGVyICpzZWxmKCk7Ci0KLSAgICBRU3RyaW5nTGlz
dCBuYW1lcygpIGNvbnN0IHsgcmV0dXJuIGtleXMoKTsgfQotICAgIFFTdHJpbmdMaXN0IGV4dGVu
c2lvbnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGRlc2NyaXB0aW9uRm9yTmFtZShjb25zdCBRU3Ry
aW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJpbmdMaXN0IG1pbWV0eXBlc0Zvck5hbWUoY29uc3Qg
UVN0cmluZyAma2V5KSBjb25zdDsKLSAgICBRU3RyaW5nIG5hbWVGb3JNaW1ldHlwZShjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAgaW5saW5lIGJvb2wgc3VwcG9ydHNNaW1lVHlw
ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QgewotICAgICAgICByZXR1cm4gIW5hbWVG
b3JNaW1ldHlwZShtaW1lVHlwZSkuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIFFTdHJpbmcgbWlt
ZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgUVN0cmluZyAmZXh0ZW5zaW9uKTsKLQotICAgIFFPYmpl
Y3QgKmNyZWF0ZShRV2ViRnJhbWUgKmZyYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBR
VXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKTsKLQot
ICAgIHN0cnVjdCBNaW1lSW5mbyB7Ci0gICAgICAgIFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0
cmluZ0xpc3QgZXh0ZW5zaW9uczsKLSAgICB9OwotICAgIHN0cnVjdCBJbmZvIHsKLSAgICAgICAg
UVN0cmluZyBuYW1lOwotICAgICAgICBRU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBRTGlz
dDxNaW1lSW5mbz4gbWltZXM7Ci0gICAgfTsKLSAgICBRTGlzdDxJbmZvPiBtX3BsdWdpbkluZm87
Ci19OwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJv
YmplY3RwbHVnaW5jb25uZWN0b3IuY3BwIGIvV2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2lu
Y29ubmVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUzYzE2NC4uMDAw
MDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3IFRy
b2xsdGVjaCBBU0EKLSAgCi0gIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgCi0gIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gIAotKi8K
LSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgiCi0jaWYgUVRfVkVSU0lPTiA8
IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJx
d2VibmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5jbHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVk
ZSAicXdlYnBhZ2UuaCIKLQotc3RydWN0IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRl
Ci17Ci0gICAgUVdlYkZyYW1lICpmcmFtZTsKLX07Ci0KLVFXZWJPYmplY3RQbHVnaW5Db25uZWN0
b3I6OlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IoUVdlYkZyYW1lICpmcmFtZSkKLXsKLSAgICBk
ID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRlOwotICAgIGQtPmZyYW1lID0g
ZnJhbWU7Ci19Ci0KLVFXZWJGcmFtZSAqUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6ZnJhbWUo
KSBjb25zdAotewotICAgIHJldHVybiBkLT5mcmFtZTsKLX0KLQotUVdpZGdldCAqUVdlYk9iamVj
dFBsdWdpbkNvbm5lY3Rvcjo6cGx1Z2luUGFyZW50V2lkZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZC0+ZnJhbWUtPnBhZ2UoKS0+dmlldygpOwotfQotCi1RV2ViTmV0d29ya0pvYiAqUVdlYk9i
amVjdFBsdWdpbkNvbm5lY3Rvcjo6cmVxdWVzdFVybChjb25zdCBRV2ViTmV0d29ya1JlcXVlc3Qg
JnJlcXVlc3QsIFRhcmdldCB0YXJnZXQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBQbHVnaW4pCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgUVdlYk5ldHdvcmtKb2IgKmpvYiA9IG5ldyBRV2ViTmV0
d29ya0pvYjsKLSAgICBRV2ViTmV0d29ya0pvYlByaXZhdGUgKnAgPSBqb2ItPmQ7Ci0gICAgcC0+
aW50ZXJmYWNlID0gZC0+ZnJhbWUtPnBhZ2UoKS0+bmV0d29ya0ludGVyZmFjZSgpOwotICAgIHAt
PmNvbm5lY3RvciA9IHRoaXM7Ci0KLSAgICBwLT5yZXF1ZXN0ID0gKnJlcXVlc3QuZDsKLQotICAg
IGQtPmZyYW1lLT5wYWdlKCktPm5ldHdvcmtJbnRlcmZhY2UoKS0+YWRkSm9iKGpvYik7Ci0gICAg
cmV0dXJuIGpvYjsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJv
YmplY3RwbHVnaW5jb25uZWN0b3IuaCBiL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNv
bm5lY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjI1MWEzLi4wMDAwMDAw
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVj
aCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSovCi0jaWZuZGVmIFFXRUJP
QkpFQ1RQTFVHSU5DT05ORUNUT1JfSAotI2RlZmluZSBRV0VCT0JKRUNUUExVR0lOQ09OTkVDVE9S
X0gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdENvcmUvcW9iamVj
dC5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0KLSNpbmNsdWRlICJxd2VibmV0d29y
a2ludGVyZmFjZS5oIgotCi1jbGFzcyBRV2ViRnJhbWU7Ci1jbGFzcyBRV2ViUGFnZTsKLWNsYXNz
IFFXaWRnZXQ7Ci1jbGFzcyBRVXJsOwotY2xhc3MgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclBy
aXZhdGU7Ci1jbGFzcyBRV2ViRmFjdG9yeUxvYWRlcjsKLWNsYXNzIFFXZWJOZXR3b3JrTWFuYWdl
cjsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciA6IHB1
YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBRV2ViRnJhbWUgKmZy
YW1lKCkgY29uc3Q7Ci0gICAgUVdpZGdldCAqcGx1Z2luUGFyZW50V2lkZ2V0KCkgY29uc3Q7Ci0K
LSAgICBlbnVtIFRhcmdldCB7Ci0gICAgICAgIFBsdWdpbiwKLSAgICAgICAgTmV3LAotICAgICAg
ICBTZWxmLAotICAgICAgICBQYXJlbnQsCi0gICAgICAgIFRvcAotICAgIH07Ci0gICAgUVdlYk5l
dHdvcmtKb2IgKnJlcXVlc3RVcmwoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBU
YXJnZXQgdGFyZ2V0ID0gUGx1Z2luKTsKLQotc2lnbmFsczoKLSAgICB2b2lkIHN0YXJ0ZWQoUVdl
Yk5ldHdvcmtKb2IqKTsKLSAgICB2b2lkIGRhdGEoUVdlYk5ldHdvcmtKb2IqLCBjb25zdCBRQnl0
ZUFycmF5ICZkYXRhKTsKLSAgICB2b2lkIGZpbmlzaGVkKFFXZWJOZXR3b3JrSm9iKiwgaW50IGVy
cm9yQ29kZSk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJGYWN0b3J5TG9hZGVy
OwotICAgIGZyaWVuZCBjbGFzcyBRV2ViTmV0d29ya01hbmFnZXI7Ci0gICAgUVdlYk9iamVjdFBs
dWdpbkNvbm5lY3RvcihRV2ViRnJhbWUgKmZyYW1lKTsKLQotICAgIFFXZWJPYmplY3RQbHVnaW5D
b25uZWN0b3JQcml2YXRlICpkOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApp
bmRleCA2ZTVlOTg0Li40MTIxYTQxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMTI4LDYgKzEyOCw3IEBA
IFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKFFXZWJQYWdlICpxcSkKICAgICBuZXR3
b3JrSW50ZXJmYWNlID0gMDsKICNlbHNlCiAgICAgbmV0d29ya01hbmFnZXIgPSAwOworICAgIHBs
dWdpbkZhY3RvcnkgPSAwOwogI2VuZGlmCiAgICAgaW5zaWRlT3BlbkNhbGwgPSBmYWxzZTsKIApA
QCAtMTQwNiw2ICsxNDA3LDE2IEBAIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqUVdlYlBhZ2U6Om5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKICAgICByZXR1cm4gZC0+bmV0d29ya01hbmFnZXI7
CiB9CiAKK3ZvaWQgUVdlYlBhZ2U6OnNldFBsdWdpbkZhY3RvcnkoUVdlYlBsdWdpbkZhY3Rvcnkg
KmZhY3RvcnkpCit7CisgICAgZC0+cGx1Z2luRmFjdG9yeSA9IGZhY3Rvcnk7Cit9CisKK1FXZWJQ
bHVnaW5GYWN0b3J5ICpRV2ViUGFnZTo6cGx1Z2luRmFjdG9yeSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGQtPnBsdWdpbkZhY3Rvcnk7Cit9CisKICNlbmRpZgogCiAvKiEKZGlmZiAtLWdpdCBhL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCBl
NzZmOTM1Li44NTU3YzMxIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysr
IGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIFFXZWJI
aXN0b3J5OwogY2xhc3MgUVdlYlBhZ2VQcml2YXRlOwogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNs
YXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlOworY2xhc3MgUVdlYlBsdWdpbkZhY3Rvcnk7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRRdDsKQEAgLTE3MSw2ICsx
NzIsOSBAQCBwdWJsaWM6CiAjZWxzZQogICAgIHZvaWQgc2V0TmV0d29ya0FjY2Vzc01hbmFnZXIo
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2VyKTsKICAgICBRTmV0d29ya0FjY2Vzc01hbmFn
ZXIgKm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBsdWdpbkZh
Y3RvcnkoUVdlYlBsdWdpbkZhY3RvcnkgKmZhY3RvcnkpOworICAgIFFXZWJQbHVnaW5GYWN0b3J5
ICpwbHVnaW5GYWN0b3J5KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHF1aW50NjQgdG90YWxCeXRl
cygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZV9wLmggYi9XZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAppbmRleCA4MGIxZTI5Li42NGVkZDMyIDEwMDY0NAotLS0g
YS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdl
X3AuaApAQCAtMTU0LDYgKzE1NCwxMCBAQCBwdWJsaWM6CiAgICAgUVdlYlNldHRpbmdzICpzZXR0
aW5nczsKIAogICAgIFFBY3Rpb24gKmFjdGlvbnNbUVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50XTsK
KworI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKKyAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1
Z2luRmFjdG9yeTsKKyNlbmRpZgogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
QXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3Rv
cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNWQ0NTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcApAQCAtMCww
ICsxLDIzIEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3Rv
cnkuaCIKKworUVdlYlBsdWdpbkZhY3Rvcnk6OlFXZWJQbHVnaW5GYWN0b3J5KFFPYmplY3QgKnBh
cmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQoreworfQorCitRV2ViUGx1Z2luRmFjdG9yeTo6
flFXZWJQbHVnaW5GYWN0b3J5KCkKK3sKK30KKwordm9pZCBRV2ViUGx1Z2luRmFjdG9yeTo6cmVm
cmVzaFBsdWdpbnMoKQoreworfQorCitib29sIFFXZWJQbHVnaW5GYWN0b3J5OjpleHRlbnNpb24o
RXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9uICpvcHRpb24sIEV4dGVu
c2lvblJldHVybiAqb3V0cHV0KQoreworfQorCitib29sIFFXZWJQbHVnaW5GYWN0b3J5OjpzdXBw
b3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworfQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oIGIvV2ViS2l0L3F0L0FwaS9xd2Vi
cGx1Z2luZmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDVm
NWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgK
QEAgLTAsMCArMSw3MiBAQAorLyoKKyAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EK
KworICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyovCisjaWZuZGVmIFFXRUJQTFVHSU5G
QUNUT1JZX0gKKyNkZWZpbmUgUVdFQlBMVUdJTkZBQ1RPUllfSAorCisjaW5jbHVkZSAicXdlYmtp
dGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3JlL3FvYmplY3QuaD4KKyNpbmNsdWRlIDxRdENv
cmUvcXN0cmluZ2xpc3QuaD4KKworY2xhc3MgUVVybDsKK2NsYXNzIFFXZWJQbHVnaW5GYWN0b3J5
UHJpdmF0ZTsKK2NsYXNzIFFTdHJpbmc7CisKK2NsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJQbHVn
aW5GYWN0b3J5IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAg
IHN0cnVjdCBNaW1lVHlwZSB7CisgICAgICAgIFFTdHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmlu
ZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgUVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CisgICAg
fTsKKworICAgIHN0cnVjdCBQbHVnaW4geworICAgICAgICBRU3RyaW5nIG5hbWU7CisgICAgICAg
IFFTdHJpbmcgZGVzY3JpcHRpb247CisgICAgICAgIFFMaXN0PE1pbWVUeXBlPiBtaW1lVHlwZXM7
CisgICAgfTsKKworICAgIGV4cGxpY2l0IFFXZWJQbHVnaW5GYWN0b3J5KFFPYmplY3QgKnBhcmVu
dCA9IDApOworICAgIHZpcnR1YWwgflFXZWJQbHVnaW5GYWN0b3J5KCk7CisKKyAgICB2aXJ0dWFs
IFFMaXN0PFBsdWdpbj4gcGx1Z2lucygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVm
cmVzaFBsdWdpbnMoKTsKKworICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKGNvbnN0IFFTdHJp
bmcgJm1pbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVy
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1l
bnROYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAm
YXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0gMDsKKworICAgIGVudW0gRXh0ZW5zaW9uIHsKKyAgICB9
OworICAgIGNsYXNzIEV4dGVuc2lvbk9wdGlvbgorICAgIHt9OworICAgIGNsYXNzIEV4dGVuc2lv
blJldHVybgorICAgIHt9OworICAgIHZpcnR1YWwgYm9vbCBleHRlbnNpb24oRXh0ZW5zaW9uIGV4
dGVuc2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9uICpvcHRpb24gPSAwLCBFeHRlbnNpb25SZXR1
cm4gKm91dHB1dCA9IDApOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRl
bnNpb24gZXh0ZW5zaW9uKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBRV2ViUGx1Z2luRmFjdG9y
eVByaXZhdGUgKmQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VM
b2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGY3Nzc3NDEuLjM2Yjg5YTAgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSw1
ICsxLDQxIEBACiAyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5v
cmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVw
bGFjZWQgdGhlIFFXZWJPYmplY3RQbHVnaW4gaW50ZXJmYWNlcyB3aXRoIFFXZWJQbHVnaW5GYWN0
b3J5LgorCisgICAgICAgICogQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcDoKKyAgICAgICAg
KFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkKToKKyAgICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6
Y2FuY2VsKToKKyAgICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6c3RhcnRlZCk6CisgICAgICAg
IChRV2ViTmV0d29ya01hbmFnZXI6OmRhdGEpOgorICAgICAgICAoUVdlYk5ldHdvcmtNYW5hZ2Vy
OjpmaW5pc2hlZCk6CisgICAgICAgICogQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaDoKKyAg
ICAgICAgKFFXZWJOZXR3b3JrSm9iUHJpdmF0ZTo6UVdlYk5ldHdvcmtKb2JQcml2YXRlKToKKyAg
ICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogQXBp
L3F3ZWJvYmplY3RwbHVnaW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBs
dWdpbl9wLmg6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0
b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQ
YWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKFFXZWJQYWdlOjpzZXRQbHVn
aW5GYWN0b3J5KToKKyAgICAgICAgKFFXZWJQYWdlOjpwbHVnaW5GYWN0b3J5KToKKyAgICAgICAg
KiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2VfcC5oOgorICAgICAgICAq
IEFwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAoUVdlYlBsdWdpbkZh
Y3Rvcnk6OlFXZWJQbHVnaW5GYWN0b3J5KToKKyAgICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5Ojp+
UVdlYlBsdWdpbkZhY3RvcnkpOgorICAgICAgICAoUVdlYlBsdWdpbkZhY3Rvcnk6OnJlZnJlc2hQ
bHVnaW5zKToKKyAgICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5OjpleHRlbnNpb24pOgorICAgICAg
ICAqIEFwaS9xd2VicGx1Z2luZmFjdG9yeS5oOiBBZGRlZC4KKyAgICAgICAgKE1pbWVUeXBlOjop
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6b2JqZWN0Q29udGVudFR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKToKKwor
MjAwOC0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgorCiAgICAg
ICAgIEZpeCB0aGUgUXQgYnVpbGQuCiAKICAgICAgICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAppbmRl
eCBlZDkxYjg2Li5kZGEwY2VlIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tl
ci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAicXdlYmZyYW1lLmgiCiAjaW5jbHVkZSAi
cXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJxd2ViaGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1
ZGUgInF3ZWJwbHVnaW5mYWN0b3J5LmgiCiAKICNpbmNsdWRlIDxxZmlsZWluZm8uaD4KIApAQCAt
NjAsNyArNjIsNiBAQAogI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+CiAjZWxzZQogI2luY2x1ZGUg
InF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3Au
aCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtOTA3LDExICs5MDgsOCBAQCBPYmpl
Y3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudFF0OjpvYmplY3RDb250ZW50VHlwZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0CiAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50SW1h
Z2U7CiAKLSAgICAvLyAjIyMgRklYTUUgUXQgNC40Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAw
Ci0gICAgaWYgKFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPnN1cHBvcnRzTWltZVR5cGUobWlt
ZVR5cGUpKQotICAgICAgICByZXR1cm4gT2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOwotI2Vu
ZGlmCisgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRh
dGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlwZSkpCisgICAgICAgIHJldHVybiBPYmplY3RD
b250ZW50T3RoZXJQbHVnaW47CiAKICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkKICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRl
bnRGcmFtZTsKQEAgLTk3MiwxMSArOTcwLDExIEBAIFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICAvLyAjIyMgRklYTUU6IHF0IDQuNAotI2lmIFFUX1ZFUlNJ
T04gPCAweDA0MDQwMAotICAgIGlmICghb2JqZWN0KQotICAgICAgICBvYmplY3QgPSBRV2ViRmFj
dG9yeUxvYWRlcjo6c2VsZigpLT5jcmVhdGUobV93ZWJGcmFtZSwgcXVybCwgbWltZVR5cGUsIHBh
cmFtcywgdmFsdWVzKTsKLSNlbmRpZgorICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIFFXZWJQ
bHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wbHVnaW5GYWN0b3J5
KCk7CisgICAgICAgIGlmIChmYWN0b3J5KQorICAgICAgICAgICAgb2JqZWN0ID0gZmFjdG9yeS0+
Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMsIHZhbHVlcyk7CisgICAgfQogCiAgICAgaWYg
KG9iamVjdCkgewogICAgICAgICBRV2lkZ2V0ICp3aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdl
dCAqPihvYmplY3QpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNmNTk2NjQuLjY2ZWNiMjAgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAwOC0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnRlZCB0
aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gdG8gUVdlYlBsdWdpbkZhY3RvcnkuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNw
cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNwcDoKKyAgICAgICAg
KFRlc3RQbHVnaW46OnBsdWdpbnMpOgorICAgICAgICAoVGVzdFBsdWdpbjo6Y3JlYXRlKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmg6CisKIDIwMDgtMDMtMDYgIEFk
ZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRl
clRyZWUuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUu
Y3BwCmluZGV4IDVkZjhhMzguLjJlNDk3MGEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAianNvYmplY3RzLmgiCisjaW5jbHVkZSAi
dGVzdHBsdWdpbi5oIgogCiAjaW5jbHVkZSA8UURpcj4KICNpbmNsdWRlIDxRRmlsZT4KQEAgLTg3
LDYgKzg4LDggQEAgV2ViUGFnZTo6V2ViUGFnZShRV2lkZ2V0ICpwYXJlbnQsIER1bXBSZW5kZXJU
cmVlICpkcnQpCiAgICAgc2V0dGluZ3MoKS0+c2V0QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlu
a3NJbmNsdWRlZEluRm9jdXNDaGFpbiwgZmFsc2UpOwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFM
KGdlb21ldHJ5Q2hhbmdlUmVxdWVzdChjb25zdCBRUmVjdCAmKSksCiAgICAgICAgICAgICB0aGlz
LCBTTE9UKHNldFZpZXdHZW9tZXRyeShjb25zdCBRUmVjdCAmICkpKTsKKworICAgIHNldFBsdWdp
bkZhY3RvcnkobmV3IFRlc3RQbHVnaW4odGhpcykpOwogfQogCiBRV2ViUGFnZSAqV2ViUGFnZTo6
Y3JlYXRlV2luZG93KCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L21haW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXgg
ZGQ0YzBlOS4uNzM4YmU3ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvbWFpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAK
QEAgLTI4LDcgKzI4LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNp
bmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKICNpbmNsdWRlIDxxc3RyaW5nbGlzdC5oPgogI2luY2x1
ZGUgPHFhcHBsaWNhdGlvbi5oPgpAQCAtNDksMTAgKzQ4LDYgQEAKICNpbmNsdWRlIDxleGVjaW5m
by5oPgogI2VuZGlmCiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLVFfSU1QT1JUX1BMVUdJ
Tih0ZXN0cGx1Z2luKQotI2VuZGlmCi0KIHZvaWQgbWVzc2FnZUhhbmRsZXIoUXRNc2dUeXBlIHR5
cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgaWYgKHR5cGUgPT0gUXRDcml0aWNhbE1z
ZykgewpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdp
bi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNwcAppbmRl
eCAyNzU1OGM5Li5mM2UwMzk5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC90ZXN0cGx1Z2luLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90
ZXN0cGx1Z2luLmNwcApAQCAtMjcsMTAgKzI3LDggQEAKICAqLwogI2luY2x1ZGUgInRlc3RwbHVn
aW4uaCIKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCiBUZXN0UGx1Z2luOjpUZXN0UGx1
Z2luKFFPYmplY3QgKnBhcmVudCkKLSAgICA6IFFXZWJPYmplY3RQbHVnaW4ocGFyZW50KQorICAg
IDogUVdlYlBsdWdpbkZhY3RvcnkocGFyZW50KQogewogfQogCkBAIC0zOCwzNCArMzYsMzIgQEAg
VGVzdFBsdWdpbjo6flRlc3RQbHVnaW4oKQogewogfQogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2lu
OjprZXlzKCkgY29uc3QKK1FMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IFRlc3RQbHVn
aW46OnBsdWdpbnMoKSBjb25zdAogewotICAgIHJldHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3Ry
aW5nKCJ0ZXN0cGx1Z2luIikpOwotfQorICAgIFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4gcGx1
Z2luOwogCi1RU3RyaW5nIFRlc3RQbHVnaW46OmRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJp
bmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUUxhdGluMVN0cmluZygidGVzdGRlc2NyaXB0aW9u
Iik7Ci19CisgICAgcGx1Z2luLm5hbWUgPSAidGVzdHBsdWdpbiI7CisgICAgcGx1Z2luLmRlc2Ny
aXB0aW9uID0gInRlc3RkZXNjcmlwdGlvbiI7CisgICAgTWltZVR5cGUgbWltZVR5cGU7CisgICAg
bWltZVR5cGUubmFtZSA9ICJ0ZXN0dHlwZSI7CisgICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMu
YXBwZW5kKCJ0ZXN0c3VmZml4ZXMiKTsKKyAgICBwbHVnaW4ubWltZVR5cGVzLmFwcGVuZChtaW1l
VHlwZSk7CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVnaW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBR
U3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmdMaXN0KFFMYXRpbjFTdHJpbmco
InRlc3R0eXBlIikpOwotfQorICAgIHBsdWdpbi5uYW1lID0gInRlc3RwbHVnaW4yIjsKKyAgICBw
bHVnaW4uZGVzY3JpcHRpb24gPSAidGVzdGRlc2NyaXB0aW9uMiI7CisgICAgbWltZVR5cGUubmFt
ZSA9ICJ0ZXN0dHlwZTIiOworICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVz
dHN1ZmZpeGVzMiIpOworICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1
ZmZpeGVzMyIpOworICAgIHBsdWdpbi5taW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBlKTsKIAotUVN0
cmluZ0xpc3QgVGVzdFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcg
JikgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoUUxhdGluMVN0cmluZygidGVzdHN1
ZmZpeGVzIikpOworICAgIHJldHVybiBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPigp
IDw8IHBsdWdpbjsKIH0KIAotUU9iamVjdCAqVGVzdFBsdWdpbjo6Y3JlYXRlKFFXZWJPYmplY3RQ
bHVnaW5Db25uZWN0b3IgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJs
ICYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZyAmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJikgY29uc3QKK1FPYmplY3QgKlRlc3RQ
bHVnaW46OmNyZWF0ZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50VmFsdWVzKSBjb25zdAogewogICAgIHJl
dHVybiAwOwogfQogCi1RX0VYUE9SVF9QTFVHSU4yKHRlc3RwbHVnaW4sIFRlc3RQbHVnaW4pCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVn
aW4uaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaAppbmRleCBl
MzA1MDY5Li5lY2ZkOTc3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9x
dC90ZXN0cGx1Z2luLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBs
dWdpbi5oCkBAIC0yNSwyOCArMjUsMjEgQEAKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwotI2luY2x1ZGUgPHFnbG9iYWwuaD4KLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAK
LSNkZWZpbmUgUVRfU1RBVElDUExVR0lOCi0jaW5jbHVkZSA8cXdlYm9iamVjdHBsdWdpbi5oPgor
I2luY2x1ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+CiAKIAotY2xhc3MgVGVzdFBsdWdpbiA6IHB1
YmxpYyBRV2ViT2JqZWN0UGx1Z2luCitjbGFzcyBUZXN0UGx1Z2luIDogcHVibGljIFFXZWJQbHVn
aW5GYWN0b3J5CiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGVzdFBsdWdpbihRT2JqZWN0ICpw
YXJlbnQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXN0UGx1Z2luKCk7CiAKLSAgICB2aXJ0dWFsIFFT
dHJpbmdMaXN0IGtleXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFMaXN0PFBsdWdpbj4gcGx1Z2lu
cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBRU3RyaW5nIGRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0
IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlzdCBtaW1ldHlwZXNG
b3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0
IGV4dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29u
bmVjdG9yLAorICAgIHZpcnR1YWwgUU9iamVjdCAqY3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1
ZXMpIGNvbnN0OworCiB9OwogCi0jZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19586</attachid>
            <date>2008-03-07 08:11:35 -0800</date>
            <delta_ts>2008-03-07 08:11:35 -0800</delta_ts>
            <desc>diff against previous patch including idl changes that were missing</desc>
            <filename>patch_delta.txt</filename>
            <type>text/plain</type>
            <size>18676</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3OGViZjE0Li5hYTE2ZmQy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBwbHVnaW5z
IHN1YmRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogV2ViS2l0LnBy
aToKKwogMjAwOC0wMy0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGY0NGM5ZC4uMDAwZTFhZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNt
YW5uQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0Y2FzZSBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4MTUKKworICAgICAgICAqIGZhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMt
Y3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL25hdmlnYXRvci1w
bHVnaW5zLWNyYXNoLmh0bWw6IEFkZGVkLgorCiAyMDA4LTAzLTA2ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNmODEwYS4uNTNl
Yzc5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsNSArMSwxNjAgQEAKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21h
bm5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgxNQorCisg
ICAgICAgIFBvcnRlZCB0aGUgbWFudWFsbHkgd3JpdHRlbiBKUyBiaW5kaW5ncyBvZiB3aW5kb3cu
bmF2aWdhdG9yLAorICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMgYW5kIHdpbmRvdy5u
YXZpZ2F0b3IubWltZVR5cGVzIHRvCisgICAgICAgIGF1dG8tZ2VuZXJhdGVkIGJpbmRpbmdzLgor
CisgICAgICAgIE1vdmVkIHRoZSBnbG9iYWxseSBjYWNoZWQgcGx1Z2luIGFuZCBtaW1ldHlwZSBp
bmZvcm1hdGlvbiB0byBhCisgICAgICAgIHBlciBXZWJDb3JlOjpQYWdlIHNoYXJlZCBQbHVnaW5E
YXRhIHN0cnVjdHVyZS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3cubmF2aWdhdG9yLnBs
dWdpbnMucmVmcmVzaCgpIGluIGEKKyAgICAgICAgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5Lgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpKU01pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpuZWVkc1lv
dVR1YmVRdWlyayk6CisgICAgICAgIChXZWJDb3JlOjpKU05hdmlnYXRvcjo6YXBwVmVyc2lvbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGx1Z2lu
OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmg6IFJlbW92ZWQu
CisgICAgICAgICogZG9tL0NsaXBib2FyZC5jcHA6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVE
b2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4pOgorICAgICAgICAqIHBhZ2UvRE9N
V2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xlYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpuYXZpZ2F0b3IpOgorICAgICAgICAqIHBhZ2UvRE9NV2lu
ZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAqIHBh
Z2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpOYXZpZ2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2
aWdhdG9yOjp+TmF2aWdhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6ZGlzY29u
bmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBwQ29kZU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjphcHBOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5hdmlnYXRvcjo6YXBwVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6Omxh
bmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6dXNlckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGxhdGZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TmF2
aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6bWltZVR5cGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cHJvZHVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpOYXZpZ2F0b3I6OnByb2R1Y3RTdWIpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9y
Ojp2ZW5kb3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjp2ZW5kb3JTdWIpOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5hdmlnYXRvcjo6amF2YUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjpmcmFtZSk6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cGx1Z2luRGF0YSk6
CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9QbHVnaW4uaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFtZUJyaWRnZSBjYW5Q
cm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKyAgICAgICAgKiBwYWdlL21hYy9XZWJDb3JlVmlld0Zh
Y3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL3F0L0ZyYW1lUXQuY3BwOgorICAgICAgICAqIHBhZ2Uv
d2luL0ZyYW1lV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lv
bik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGU6Ok1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlOjp+
TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWltZVR5cGU6OnN1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBl
OjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNaW1lVHlwZTo6ZW5hYmxlZFBsdWdp
bik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvTWltZVR5cGUuaWRsOiBB
ZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Ok1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGVBcnJheTo6fk1pbWVUeXBlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
TWltZVR5cGVBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6
Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0YSk6CisgICAgICAgICog
cGx1Z2lucy9NaW1lVHlwZUFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5
cGVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6OmRpc2Nv
bm5lY3RGcmFtZSk6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbDogQWRkZWQu
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlBsdWdpbjo6UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6flBsdWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
OjpmaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmRlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsdWdpbnMvUGx1Z2luLmlkbDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9Q
bHVnaW5BcnJheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6OlBs
dWdpbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5Ojp+UGx1Z2luQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5BcnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6
Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpuYW1l
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpyZWZyZXNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpnZXRQbHVnaW5EYXRhKToKKyAgICAgICAgKiBwbHVn
aW5zL1BsdWdpbkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6ZGlzY29ubmVjdEZyYW1l
KToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbDogQWRkZWQuCisgICAgICAgICog
cGx1Z2lucy9QbHVnaW5EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5E
YXRhOjpQbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6On5QbHVnaW5E
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRzTWltZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBlKToKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6ZGlzY29u
bmVjdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkRhdGE6Om1pbWVzKToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5EYXRhTWFjLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gpOgorICAgICAgICAqIHBsdWdpbnMvcXQv
UGx1Z2luRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpp
bml0UGx1Z2lucyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisKKzIwMDgtMDMtMDcgIFNpbW9uIEhh
dXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBGaXggdGhlIFF0IGJ1aWxk
LgogCiAgICAgICAgICogV2ViQ29yZS5wcm86CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcCBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCmluZGV4IDczMWI1ODEuLjJm
OGFlYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9OYXZpZ2F0b3IuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgU3RyaW5nIE5hdmlnYXRv
cjo6YXBwVmVyc2lvbigpIGNvbnN0CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAgICAgLy8gVmVyc2lvbiBpcyBldmVyeXRoaW5nIGluIHRoZSB1c2VyIGFnZW50
IHN0cmluZyBwYXN0IHRoZSAiTW96aWxsYS8iIHByZWZpeC4KLSAgICBjb25zdCBTdHJpbmcgJnVz
ZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9jdW1lbnQo
KSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKKyAgICBjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCA9IG1fZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQobV9mcmFtZS0+ZG9j
dW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpIDogS1VSTCgpKTsKICAgICByZXR1
cm4gdXNlckFnZW50LnN1YnN0cmluZyh1c2VyQWdlbnQuZmluZCgnLycpICsgMSk7CiB9CiAKQEAg
LTE2Nyw3ICsxNjcsNyBAQCBib29sIE5hdmlnYXRvcjo6amF2YUVuYWJsZWQoKSBjb25zdAogewog
ICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICByZXR1cm4gbV9mcmFt
ZS0+c2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCgpOworICAgIHJldHVybiBtX2ZyYW1lLT5zZXR0
aW5ncygpLT5pc0phdmFFbmFibGVkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCA5ZDJjM2Y4Li43ZjEwNTk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yNDAsMTQgKzI0MCwxNCBAQCB2b2lkIFBh
Z2U6OnJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmcmFtZXNOZWVkaW5nUmVsb2FkLnNpemUoKTsg
KytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9hZC5zaXpl
KCk7ICsraSkKICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCktPnJlbG9h
ZCgpOwogfQogCiBQbHVnaW5EYXRhKiBQYWdlOjpwbHVnaW5EYXRhKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fcGx1Z2luRGF0YSkKLSAgICAgICAgbV9wbHVnaW5EYXRhID0gbmV3IFBsdWdpbkRhdGEo
dGhpcyk7CisgICAgICAgIG1fcGx1Z2luRGF0YSA9IFBsdWdpbkRhdGE6OmNyZWF0ZSh0aGlzKTsK
ICAgICByZXR1cm4gbV9wbHVnaW5EYXRhLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsdWdpbnMvTWltZVR5cGUuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcAppbmRl
eCAxNzBlMjA4Li44MTk1YTgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
Y3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAKQEAgLTI4LDggKzI4LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWltZVR5cGU6Ok1pbWVUeXBlKFBhc3NSZWZQdHI8UGx1
Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgpCi0gICAgOiBSZWZDb3VudGVkPE1p
bWVUeXBlPigwKQotICAgICwgbV9wbHVnaW5EYXRhKHBsdWdpbkRhdGEpCisgICAgOiBtX3BsdWdp
bkRhdGEocGx1Z2luRGF0YSkKICAgICAsIG1faW5kZXgoaW5kZXgpCiB7CiB9CkBAIC0zOCwxNyAr
MzcsMTcgQEAgTWltZVR5cGU6On5NaW1lVHlwZSgpCiB7CiB9CiAKLVN0cmluZyBNaW1lVHlwZTo6
dHlwZSgpIGNvbnN0Citjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjp0eXBlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT50eXBlOwogfQogCi1TdHJp
bmcgTWltZVR5cGU6OnN1ZmZpeGVzKCkgY29uc3QKK2NvbnN0IFN0cmluZyAmTWltZVR5cGU6OnN1
ZmZpeGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5k
ZXhdLT5zdWZmaXhlczsKIH0KIAotU3RyaW5nIE1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0
Citjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+ZGVzYzsKIH0KQEAgLTU5LDExICs1
OCwxMiBAQCBQYXNzUmVmUHRyPFBsdWdpbj4gTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25z
dAogICAgIGlmICghcCB8fCAhcC0+c2V0dGluZ3MoKS0+YXJlUGx1Z2luc0VuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1l
cyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBjb25zdCBQbHVnaW5JbmZvICppbmZvID0g
bV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5wbHVnaW47CiAgICAgY29uc3QgVmVjdG9y
PFBsdWdpbkluZm8qPiYgcGx1Z2lucyA9IG1fcGx1Z2luRGF0YS0+cGx1Z2lucygpOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5zaXplKCk7ICsraSkKLSAgICAgICAg
aWYgKHBsdWdpbnNbaV0gPT0gbWltZXNbbV9pbmRleF0tPnBsdWdpbikKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBsdWdpbnNb
aV0gPT0gaW5mbykKICAgICAgICAgICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRh
dGEuZ2V0KCksIGkpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaAppbmRl
eCBhMTFmY2FjLi4xZTA2N2RhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUu
aAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApAQCAtMzYsOSArMzYsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1pbWVUeXBlPiBjcmVh
dGUoUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBwbHVnaW5EYXRhLCB1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1pbWVUeXBlKHBsdWdpbkRhdGEsIGluZGV4KSk7IH0KICAgICAg
ICAgfk1pbWVUeXBlKCk7CiAKLSAgICAgICAgU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICAgICAg
U3RyaW5nIHN1ZmZpeGVzKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNv
bnN0OworICAgICAgICBjb25zdCBTdHJpbmcgJnR5cGUoKSBjb25zdDsKKyAgICAgICAgY29uc3Qg
U3RyaW5nICZzdWZmaXhlcygpIGNvbnN0OworICAgICAgICBjb25zdCBTdHJpbmcgJmRlc2NyaXB0
aW9uKCkgY29uc3Q7CiAgICAgICAgIFBhc3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlQXJyYXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwCmluZGV4IGI5
ZjgzNTkuLmIxMjBlOWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmNwcAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5jcHAKQEAgLTI4LDggKzI4
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJh
eShGcmFtZSogZnJhbWUpCi0gICAgOiBSZWZDb3VudGVkPE1pbWVUeXBlQXJyYXk+KDApCi0gICAg
LCBtX2ZyYW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKIHsKIH0KIApAQCAtMzcsNyAr
MzYsNyBAQCBNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgpCiB7CiB9CiAKLXVuc2lnbmVk
IGxvbmcgTWltZVR5cGVBcnJheTo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIE1pbWVUeXBlQXJy
YXk6Omxlbmd0aCgpIGNvbnN0CiB7CiAgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRh
dGEoKTsKICAgICBpZiAoIWRhdGEpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5
cGVBcnJheS5oIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaAppbmRleCA2NGE0ZDAz
Li45MGI0OTgxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5oCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2Zy
YW1lID0gMDsgfQogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7CisgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgICAgICBNaW1lVHlwZSogaXRlbSh1bnNp
Z25lZCBpbmRleCk7CiAgICAgICAgIGJvb2wgY2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJvcGVydHlOYW1lKTsKICAgICAgICAgTWltZVR5cGUqIG5hbWVHZXR0ZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbi5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcAppbmRleCBmYzAwNTQ5
Li4zMWVlZDM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcApAQCAtMjYsOCArMjYsNyBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBQbHVnaW46OlBsdWdpbihQbHVnaW5EYXRhKiBwbHVnaW5EYXRhLCB1bnNpZ25l
ZCBpbmRleCkKLSAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luPigwKQotICAgICwgbV9wbHVnaW5EYXRh
KHBsdWdpbkRhdGEpCisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkKICAgICAsIG1faW5k
ZXgoaW5kZXgpCiB7CiB9CkBAIC01MSw3ICs1MCw3IEBAIFN0cmluZyBQbHVnaW46OmRlc2NyaXB0
aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5wbHVnaW5zKClbbV9pbmRleF0t
PmRlc2M7CiB9CiAKLXVuc2lnbmVkIGxvbmcgUGx1Z2luOjpsZW5ndGgoKSBjb25zdAordW5zaWdu
ZWQgUGx1Z2luOjpsZW5ndGgoKSBjb25zdAogewogICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBs
dWdpbnMoKVttX2luZGV4XS0+bWltZXMuc2l6ZSgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpbi5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCmluZGV4IGE5NjFmODEu
LjAxZWEzMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaAorKysgYi9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBTdHJpbmcgZmlsZW5hbWUoKSBjb25zdDsKICAgICAgICAgU3RyaW5nIGRlc2Ny
aXB0aW9uKCkgY29uc3Q7CiAKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsK
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAKICAgICAgICAgTWltZVR5cGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpOwogICAgICAgICBib29sIGNhbkdldEl0ZW1zRm9yTmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvUGx1Z2luQXJyYXkuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmNwcAppbmRl
eCAyNTEyM2JiLi4yM2Q1MWY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJy
YXkuY3BwCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAKQEAgLTI4LDggKzI4
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGx1Z2luQXJyYXk6OlBsdWdpbkFycmF5KEZy
YW1lKiBmcmFtZSkKLSAgICA6IFJlZkNvdW50ZWQ8UGx1Z2luQXJyYXk+KDApCi0gICAgLCBtX2Zy
YW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKIHsKIH0KIApAQCAtMzcsNyArMzYsNyBA
QCBQbHVnaW5BcnJheTo6flBsdWdpbkFycmF5KCkKIHsKIH0KIAotdW5zaWduZWQgbG9uZyBQbHVn
aW5BcnJheTo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFBsdWdpbkFycmF5OjpsZW5ndGgoKSBj
b25zdAogewogICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CiAgICAgaWYg
KCFkYXRhKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmggYi9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaAppbmRleCAzMDU4NmNkLi40MWI4OTVkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luQXJyYXkuaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CiAKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3Q7CiAgICAgICAgIFBsdWdpbiogaXRlbSh1bnNpZ25lZCBpbmRleCk7CiAgICAgICAgIGJv
b2wgY2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsK
ICAgICAgICAgUGx1Z2luKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5EYXRhLmNwcAppbmRleCBiNjBlYzhkLi5kMmMxZWY0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGEuY3BwCkBAIC0yNyw4ICsyNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFBsdWdpbkRhdGE6OlBsdWdpbkRhdGEoY29uc3QgUGFnZSogcGFnZSkKLSAgICA6IFJlZkNvdW50
ZWQ8UGx1Z2luRGF0YT4oMCkKLSAgICAsIG1fcGFnZShwYWdlKQorICAgIDogbV9wYWdlKHBhZ2Up
CiB7CiAgICAgaW5pdFBsdWdpbnMoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbkRhdGEuaCBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5EYXRhLmgKaW5kZXggNjc3OWFhZS4u
NDBlODM0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuaAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAvLyBGSVhNRTogbWVyZ2Ugd2l0aCBQbHVnaW5EYXRhYmFzZSBpbiB0aGUg
ZnV0dXJlCiAgICAgY2xhc3MgUGx1Z2luRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsdWdpbkRh
dGE+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkRhdGEoY29uc3QgUGFnZSopOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbHVnaW5EYXRhPiBjcmVhdGUoY29uc3QgUGFnZSogcGFn
ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbkRhdGEocGFnZSkpOyB9CiAgICAgICAgIH5Q
bHVnaW5EYXRhKCk7CiAKICAgICAgICAgdm9pZCBkaXNjb25uZWN0UGFnZSgpIHsgbV9wYWdlID0g
MDsgfQpAQCAtNjEsNiArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHJlZnJlc2goKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFBsdWdpbkRhdGEoY29u
c3QgUGFnZSopOwogICAgICAgICB2b2lkIGluaXRQbHVnaW5zKCk7CiAKICAgICAgICAgVmVjdG9y
PFBsdWdpbkluZm8qPiBtX3BsdWdpbnM7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGExZDlkYmUuLjUzYTJkMTQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
aW1wbGlmaWVkIFdlYlZpZXdGYWN0b3J5J3MgcmVmcmVzaFBsdWdpbnMgbWV0aG9kIHRvIG9ubHkg
cmVmcmVzaCB0aGUKKyAgICAgICAgcGx1Z2lucyBhbmQgbm90IHJlbG9hZCB0aGUgZnJhbWVzIGFu
eW1vcmUgc2luY2UgdGhhdCdzIG5vdyBkb25lIGluIGEKKyAgICAgICAgcGxhdGZvcm0gaW5kZXBl
bmRlbnQgbWFubmVyIGJ5IFdlYkNvcmU6OlBhZ2UuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIHRo
ZSBub3cgdW51c2VkIHBsdWdpbk5hbWVGb3JNSU1FVHlwZSBhbmQKKyAgICAgICAgcGx1Z2luU3Vw
cG9ydHNNSU1FVHlwZSBtZXRob2RzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmll
d0ZhY3RvcnkubW06CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06
CisKIDIwMDgtMDMtMDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1pdHouCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2Vi
S2l0L3F0L0NoYW5nZUxvZwppbmRleCBmNzc3NzQxLi4zNmI4OWEwIDEwMDY0NAotLS0gYS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0MSBA
QAogMjAwOC0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgogCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2VkIHRo
ZSBRV2ViT2JqZWN0UGx1Z2luIGludGVyZmFjZXMgd2l0aCBRV2ViUGx1Z2luRmFjdG9yeS4KKwor
ICAgICAgICAqIEFwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHA6CisgICAgICAgIChRV2ViTmV0
d29ya01hbmFnZXI6OmFkZCk6CisgICAgICAgIChRV2ViTmV0d29ya01hbmFnZXI6OmNhbmNlbCk6
CisgICAgICAgIChRV2ViTmV0d29ya01hbmFnZXI6OnN0YXJ0ZWQpOgorICAgICAgICAoUVdlYk5l
dHdvcmtNYW5hZ2VyOjpkYXRhKToKKyAgICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6ZmluaXNo
ZWQpOgorICAgICAgICAqIEFwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmg6CisgICAgICAgIChR
V2ViTmV0d29ya0pvYlByaXZhdGU6OlFXZWJOZXR3b3JrSm9iUHJpdmF0ZSk6CisgICAgICAgICog
QXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFwaS9xd2Vib2Jq
ZWN0cGx1Z2luLmg6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3ZWJvYmplY3RwbHVnaW5fcC5o
OiBSZW1vdmVkLgorICAgICAgICAqIEFwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZVByaXZh
dGU6OlFXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgIChRV2ViUGFnZTo6c2V0UGx1Z2luRmFjdG9y
eSk6CisgICAgICAgIChRV2ViUGFnZTo6cGx1Z2luRmFjdG9yeSk6CisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmg6CisgICAgICAgICogQXBpL3F3ZWJwYWdlX3AuaDoKKyAgICAgICAgKiBBcGkvcXdl
YnBsdWdpbmZhY3RvcnkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5OjpR
V2ViUGx1Z2luRmFjdG9yeSk6CisgICAgICAgIChRV2ViUGx1Z2luRmFjdG9yeTo6flFXZWJQbHVn
aW5GYWN0b3J5KToKKyAgICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5OjpyZWZyZXNoUGx1Z2lucyk6
CisgICAgICAgIChRV2ViUGx1Z2luRmFjdG9yeTo6ZXh0ZW5zaW9uKToKKyAgICAgICAgKiBBcGkv
cXdlYnBsdWdpbmZhY3RvcnkuaDogQWRkZWQuCisgICAgICAgIChNaW1lVHlwZTo6KToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6Om9iamVjdENvbnRlbnRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZVBsdWdpbik6CisKKzIwMDgtMDMt
MDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBGaXgg
dGhlIFF0IGJ1aWxkLgogCiAgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggY2Y1
OTY2NC4uNjZlY2IyMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA4LTAzLTA3ICBTaW1vbiBI
YXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUG9ydGVkIHRoZSBuZXRzY2FwZSB0ZXN0IHBsdWdpbiB0
byBRV2ViUGx1Z2luRmFjdG9yeS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0R1bXBS
ZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3F0L3Rlc3RwbHVnaW4uY3BwOgorICAgICAgICAoVGVzdFBsdWdpbjo6cGx1Z2lucyk6Cisg
ICAgICAgIChUZXN0UGx1Z2luOjpjcmVhdGUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0
L3Rlc3RwbHVnaW4uaDoKKwogMjAwOC0wMy0wNiAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19587</attachid>
            <date>2008-03-07 08:16:06 -0800</date>
            <delta_ts>2008-03-07 12:22:26 -0800</delta_ts>
            <desc>updated patch rebased against trunk including the latest suggestion and idl fixes</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>186672</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3OGViZjE0Li5hYTE2ZmQy
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEgQEAK
KzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBwbHVnaW5z
IHN1YmRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZSBwYXRoLgorCisgICAgICAgICogV2ViS2l0LnBy
aToKKwogMjAwOC0wMy0wMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGdtYWlsLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbHAgVG9rZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGY0NGM5ZC4uMDAwZTFhZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhhdXNt
YW5uQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkZWQgYSB0ZXN0Y2FzZSBmb3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY4MTUKKworICAgICAgICAqIGZhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMt
Y3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL25hdmlnYXRvci1w
bHVnaW5zLWNyYXNoLmh0bWw6IEFkZGVkLgorCiAyMDA4LTAzLTA2ICBPbGl2ZXIgSHVudCAgPG9s
aXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0ei4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3OTc2ZQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2gtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1Rlc3RzIGFjY2VzcyB0byBwcmV2aW91c2x5IHJlY2Vp
dmVkIGFycmF5cyBmcm9tIG5hdmlnYXRvci5wbHVnaW5zIGFuZCBtaW1ldHlwZXMgYWZ0ZXIgY2Fs
bGluZyBwbHVnaW5zLnJlZnJlc2goKS4gSWYgdGhpcyB0ZXh0IGFwcGVhcnMgYW5kIHRoZXJlIGlz
IG5vIGNyYXNoLCB0aGVuIHRoZSB0ZXN0IHN1Y2NlZWRlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvanMvbmF2aWdhdG9yLXBsdWdpbnMtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jNjRmZjk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9qcy9uYXZpZ2F0b3ItcGx1Z2lucy1jcmFzaC5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzxodG1s
PgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCit2YXIgcGx1Z2lucyA9IG5ldyBB
cnJheTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kp
IHsKKyAgICBwbHVnaW5zLnB1c2gobmF2aWdhdG9yLnBsdWdpbnNbaV0pOworfQorCit2YXIgbWlt
ZVR5cGVzID0gbmV3IEFycmF5OworZm9yICh2YXIgaSA9IDA7IGkgPCBuYXZpZ2F0b3IubWltZVR5
cGVzLmxlbmd0aDsgKytpKSB7CisgICAgbWltZVR5cGVzLnB1c2gobmF2aWdhdG9yLm1pbWVUeXBl
c1tpXSk7Cit9CisKK25hdmlnYXRvci5wbHVnaW5zLnJlZnJlc2goKTsKKwordmFyIG91dHB1dCA9
ICI8cHJlPiI7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7ICsraSkgewor
ICAgIG91dHB1dCArPSBwbHVnaW5zW2ldLm5hbWU7CisgICAgb3V0cHV0ICs9ICJcbiI7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgbWltZVR5cGVzLmxlbmd0aDsgKytpKSB7CisgICAgb3V0cHV0
ICs9IG1pbWVUeXBlc1tpXS50eXBlOworICAgIG91dHB1dCArPSAiXG4iOworfQorCitvdXRwdXQg
Kz0gIjwvcHJlPiI7CisKKy8vZG9jdW1lbnQud3JpdGVsbihvdXRwdXQpOworZG9jdW1lbnQud3Jp
dGVsbigiVGVzdHMgYWNjZXNzIHRvIHByZXZpb3VzbHkgcmVjZWl2ZWQgYXJyYXlzIGZyb20gbmF2
aWdhdG9yLnBsdWdpbnMgYW5kIG1pbWV0eXBlcyBhZnRlciBjYWxsaW5nIHBsdWdpbnMucmVmcmVz
aCgpLiBJZiB0aGlzIHRleHQgYXBwZWFycyBhbmQgdGhlcmUgaXMgbm8gY3Jhc2gsIHRoZW4gdGhl
IHRlc3Qgc3VjY2VlZGVkLiIpOworCis8L3NjcmlwdD4KKzxib2R5PgorPC9ib2R5PjwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzNmODEwYS4uNTNlYzc5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNjAgQEAKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNt
YW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjgxNQorCisgICAgICAgIFBvcnRlZCB0aGUgbWFudWFsbHkgd3JpdHRlbiBKUyBiaW5kaW5n
cyBvZiB3aW5kb3cubmF2aWdhdG9yLAorICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnMg
YW5kIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzIHRvCisgICAgICAgIGF1dG8tZ2VuZXJhdGVk
IGJpbmRpbmdzLgorCisgICAgICAgIE1vdmVkIHRoZSBnbG9iYWxseSBjYWNoZWQgcGx1Z2luIGFu
ZCBtaW1ldHlwZSBpbmZvcm1hdGlvbiB0byBhCisgICAgICAgIHBlciBXZWJDb3JlOjpQYWdlIHNo
YXJlZCBQbHVnaW5EYXRhIHN0cnVjdHVyZS4KKworICAgICAgICBJbXBsZW1lbnRlZCB3aW5kb3cu
bmF2aWdhdG9yLnBsdWdpbnMucmVmcmVzaCgpIGluIGEKKyAgICAgICAgcGxhdGZvcm0taW5kZXBl
bmRlbnQgd2F5LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Z2V0VmFsdWVQcm9wZXJ0eSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpKU01pbWVUeXBlQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU01pbWVUeXBlQXJyYXk6Om5hbWVHZXR0ZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpuZWVkc1lvdVR1YmVRdWlyayk6CisgICAgICAgIChXZWJDb3JlOjpKU05hdmlnYXRvcjo6
YXBwVmVyc2lvbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNG
b3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGx1Z2luQXJyYXk6Om5hbWVHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpKU1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTUGx1Z2luOjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2
aWdhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9y
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0NsaXBib2FyZC5jcHA6CisgICAgICAgICogZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0
aW9uOjpjcmVhdGVEb2N1bWVudCk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpzaG91bGRVc2VQbHVnaW4pOgorICAgICAg
ICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xl
YXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpuYXZpZ2F0b3IpOgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAg
ICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgor
ICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBwYWdlL05hdmlnYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpOYXZpZ2F0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjp+TmF2aWdhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmln
YXRvcjo6ZGlzY29ubmVjdEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBw
Q29kZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjphcHBOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6YXBwVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpO
YXZpZ2F0b3I6Omxhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6dXNlckFn
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cGxhdGZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6TmF2aWdhdG9yOjpwbHVnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRv
cjo6bWltZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6cHJvZHVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6OnByb2R1Y3RTdWIpOgorICAgICAgICAoV2ViQ29y
ZTo6TmF2aWdhdG9yOjp2ZW5kb3IpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjp2ZW5k
b3JTdWIpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6amF2YUVuYWJsZWQpOgorICAgICAgICAqIHBhZ2Uv
TmF2aWdhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpmcmFtZSk6CisgICAgICAgICogcGFnZS9O
YXZpZ2F0b3IuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVmcmVzaFBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6
cGx1Z2luRGF0YSk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGFnZS9QbHVn
aW4uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKKyAgICAgICAg
KiBwYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW06CisgICAgICAgICgtW1dlYkNvcmVGcmFt
ZUJyaWRnZSBjYW5Qcm92aWRlRG9jdW1lbnRTb3VyY2VdKToKKyAgICAgICAgKiBwYWdlL21hYy9X
ZWJDb3JlVmlld0ZhY3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL3F0L0ZyYW1lUXQuY3BwOgorICAg
ICAgICAqIHBhZ2Uvd2luL0ZyYW1lV2luLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0
b3JlTWFjLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0
cnlRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlw
ZUZvckV4dGVuc2lvbik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6Ok1pbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1pbWVUeXBlOjp+TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGU6OnN1ZmZpeGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1pbWVUeXBlOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNaW1lVHlwZTo6
ZW5hYmxlZFBsdWdpbik6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlOjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvTWlt
ZVR5cGUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbHVnaW5zL01pbWVUeXBlQXJyYXkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Ok1pbWVUeXBlQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6fk1pbWVUeXBlQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Ok1p
bWVUeXBlQXJyYXk6Oml0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Y2Fu
R2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBlQXJyYXk6Om5hbWVH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWltZVR5cGVBcnJheTo6Z2V0UGx1Z2luRGF0YSk6
CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWltZVR5cGVBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1pbWVUeXBl
QXJyYXk6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgICogcGx1Z2lucy9NaW1lVHlwZUFycmF5
LmlkbDogQWRkZWQuCisgICAgICAgICogcGx1Z2lucy9QbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBsdWdpbjo6UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6
flBsdWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luOjpmaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmRlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbjo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbjo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46OmNhbkdldEl0
ZW1zRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW46Om5hbWVHZXR0ZXIpOgorICAg
ICAgICAqIHBsdWdpbnMvUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
OjpjcmVhdGUpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luLmlkbDogQWRkZWQuCisgICAgICAg
ICogcGx1Z2lucy9QbHVnaW5BcnJheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQXJyYXk6OlBsdWdpbkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5Ojp+
UGx1Z2luQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQXJyYXk6Omxlbmd0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdp
bkFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpyZWZy
ZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkFycmF5OjpnZXRQbHVnaW5EYXRhKToKKyAg
ICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UGx1Z2luQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5BcnJheTo6ZGlz
Y29ubmVjdEZyYW1lKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkFycmF5LmlkbDogQWRkZWQu
CisgICAgICAgICogcGx1Z2lucy9QbHVnaW5EYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQbHVnaW5EYXRhOjpQbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRh
dGE6On5QbHVnaW5EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnN1cHBvcnRz
TWltZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1p
bWVUeXBlKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpbkRhdGEuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpQbHVnaW5EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
RGF0YTo6ZGlzY29ubmVjdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cGFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5EYXRhOjpwbHVnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkRhdGE6Om1pbWVzKToKKyAgICAgICAgKiBwbHVnaW5zL21hYy9QbHVnaW5E
YXRhTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OmluaXRQbHVn
aW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGE6OnJlZnJlc2gpOgorICAgICAgICAq
IHBsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5EYXRhOjppbml0UGx1Z2lucyk6CisgICAgICAgICogcGx1Z2lucy93aW4vUGx1Z2luRGF0
YVdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5pdFBsdWdp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6cmVmcmVzaCk6CisKKzIwMDgtMDMt
MDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKwogICAgICAgICBGaXgg
dGhlIFF0IGJ1aWxkLgogCiAgICAgICAgICogV2ViQ29yZS5wcm86CmRpZmYgLS1naXQgYS9XZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5k
ZXggMGZmYmZmYi4uYzE1NzQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCisrKyBiL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMzMsNiArMzMsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL2RvbSBcCiAgICAgJChXZWJDb3JlKS9odG1sIFwKICAg
ICAkKFdlYkNvcmUpL3BhZ2UgXAorICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJD
b3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCiAgICAgJChXZWJDb3JlKS9zdmcK
QEAgLTQyMywxNSArNDI0LDIwIEBAIGFsbCA6IFwKICAgICBKU01lZGlhRXJyb3IuaCBcCiAgICAg
SlNNZWRpYUxpc3QuaCBcCiAgICAgSlNNZXNzYWdlRXZlbnQuaCBcCisgICAgSlNNaW1lVHlwZS5o
IFwKKyAgICBKU01pbWVUeXBlQXJyYXkuaCBcCiAgICAgSlNNb3VzZUV2ZW50LmggXAogICAgIEpT
TXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9kZU1hcC5oIFwKKyAgICBKU05hdmlnYXRv
ci5oIFwKICAgICBKU05vZGUuaCBcCiAgICAgSlNOb2RlRmlsdGVyLmggXAogICAgIEpTTm9kZUl0
ZXJhdG9yLmggXAogICAgIEpTTm9kZUxpc3QuaCBcCiAgICAgSlNOb3RhdGlvbi5oIFwKICAgICBK
U092ZXJmbG93RXZlbnQuaCBcCisgICAgSlNQbHVnaW4uaCBcCisgICAgSlNQbHVnaW5BcnJheS5o
IFwKICAgICBKU1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIFwKICAgICBKU1Byb2dyZXNzRXZlbnQu
aCBcCiAgICAgSlNSR0JDb2xvci5sdXQuaCBcCkBAIC02MDEsNyArNjA3LDYgQEAgYWxsIDogXAog
ICAgIFhMaW5rTmFtZXMuY3BwIFwKICAgICBYTUxOYW1lcy5jcHAgXAogICAgIFhQYXRoR3JhbW1h
ci5jcHAgXAotICAgIGtqc19uYXZpZ2F0b3IubHV0LmggXAogICAgIHRva2VuaXplci5jcHAgXAog
ICAgIFdlYkNvcmUuZXhwIFwKICMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0g
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE1OTRkNTcuLjc2OGViM2IgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpA
QCAtNTQsNyArNTQsNyBAQCB3ZWJjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmx1dC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1M
SHR0cFJlcXVlc3QubHV0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29y
Lmx1dC5oIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IubHV0LmggXAorPj4+
Pj4+PiBGaXggY29tcGlsYXRpb24gd2l0aCBhdXRvbWFrZS46V2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MSW5wdXRFbGVtZW50QmFzZVRhYmxlLmNwcAog
CiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXApAQCAtMTcxLDE1ICsxNzEsMjAgQEAgd2ViY29y
ZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9KU0ltYWdlRGF0YS5oIFwKIAlE
ZXJpdmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNZWRp
YUxpc3QuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNNaW1lVHlwZS5oIFwKKwlEZXJpdmVkU291cmNl
cy9KU01pbWVUeXBlQXJyYXkuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNNb3VzZUV2ZW50LmggXAog
CURlcml2ZWRTb3VyY2VzL0pTTXV0YXRpb25FdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9KU05h
bWVkTm9kZU1hcC5oIFwKKwlEZXJpdmVkU291cmNlcy9KU05hdmlnYXRvci5oIFwKIAlEZXJpdmVk
U291cmNlcy9KU05vZGUuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlRmlsdGVyLmggXAogCURl
cml2ZWRTb3VyY2VzL0pTTm9kZUl0ZXJhdG9yLmggXAogCURlcml2ZWRTb3VyY2VzL0pTTm9kZUxp
c3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb3RhdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9K
U092ZXJmbG93RXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW4uaCBcCisJRGVyaXZl
ZFNvdXJjZXMvSlNQbHVnaW5BcnJheS5oIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9KU1Byb2dyZXNzRXZlbnQuaCBcCiAJRGVy
aXZlZFNvdXJjZXMvSlNSYW5nZS5oIFwKQEAgLTI5NywxNSArMzAyLDIwIEBAIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvSlNJbWFnZURhdGEuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9KU0tleWJvYXJkRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU01lZGlh
TGlzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTWltZVR5cGUuY3BwIFwKKwlEZXJpdmVkU291
cmNlcy9KU01pbWVUeXBlQXJyYXkuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU01vdXNlRXZlbnQu
Y3BwIFwKIAlEZXJpdmVkU291cmNlcy9KU011dGF0aW9uRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291
cmNlcy9KU05hbWVkTm9kZU1hcC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL0pTTmF2aWdhdG9yLmNw
cCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2Rl
RmlsdGVyLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb2RlSXRlcmF0b3IuY3BwIFwKIAlEZXJp
dmVkU291cmNlcy9KU05vZGVMaXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNOb3RhdGlvbi5j
cHAgXAogCURlcml2ZWRTb3VyY2VzL0pTT3ZlcmZsb3dFdmVudC5jcHAgXAorCURlcml2ZWRTb3Vy
Y2VzL0pTUGx1Z2luLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNQbHVnaW5BcnJheS5jcHAgXAog
CURlcml2ZWRTb3VyY2VzL0pTUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcCBcCiAJRGVyaXZlZFNv
dXJjZXMvSlNQcm9ncmVzc0V2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvSlNSYW5nZS5jcHAg
XApAQCAtNDQzLDcgKzQ1MywxMiBAQCBJRExfQklORElOR1MgKz0gIFwKIAlXZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgXAogCVdlYkNv
cmUvcGFnZS9IaXN0b3J5LmlkbCBcCisJV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwgXAogCVdl
YkNvcmUvcGFnZS9TY3JlZW4uaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsIFwK
KwlXZWJDb3JlL3BsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAorCVdlYkNvcmUvcGx1Z2lucy9Q
bHVnaW4uaWRsIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaWRsIFwKIAlXZWJDb3Jl
L3htbC9ET01QYXJzZXIuaWRsIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlv
bi5pZGwgXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuaWRsCkBAIC00ODcsMTQgKzUwMiwx
OCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxP
cHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
U2VsZWN0RWxlbWVudEN1c3RvbS5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlw
ZUFycmF5Q3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hbWVkTm9kZU1hcEN1
c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOYW1lZE5vZGVzQ29sbGVjdGlvbi5j
cHAgIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9k
ZUZpbHRlckN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JD
dXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1
Z2luQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0eWxlU2hlZXRDdXN0b20u
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3R5bGVTaGVldExpc3RDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgXApAQCAtNTAzLDcg
KzUyMiw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNf
YmluZGluZy5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAgXAogCVdl
YkNvcmUvYmluZGluZ3MvanMva2pzX2h0bWwuY3BwIFwKLQlXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c19uYXZpZ2F0b3IuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvUGF1c2VkVGltZW91dHMuY3BwIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXApAQCAtODAyLDYgKzgyMCw3IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwIFwKIAlXZWJDb3JlL3BhZ2Uv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Nb3VzZUV2ZW50V2l0aEhp
dFRlc3RSZXN1bHRzLmNwcCBcCisJV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgXAogCVdlYkNv
cmUvcGFnZS9QYWdlLmNwcCBcCiAJV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgXAogCVdlYkNv
cmUvcGFnZS9TY3JlZW4uY3BwIFwKQEAgLTg2Myw2ICs4ODIsMTEgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL1RpbWVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1VuaWNvZGVSYW5nZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcCBcCisJ
V2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBl
QXJyYXkuY3BwIFwKKwlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luLmNwcCBcCisJV2ViQ29yZS9wbHVn
aW5zL1BsdWdpbkFycmF5LmNwcCBcCisJV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwIFwK
IAlXZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YWJhc2UuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMv
UGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL1BsdWdpblBhY2thZ2UuY3Bw
IFwKQEAgLTIwNDksNyArMjA3Myw4IEBAIHZwYXRoICUuaWRsID0gXAogICAgICQoV2ViQ29yZSkv
cGFnZSBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCi0g
ICAgJChXZWJDb3JlKS94bWwKKyAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS9w
bHVnaW5zCiAKIERlcml2ZWRTb3VyY2VzL0pTJS5oOiBEZXJpdmVkU291cmNlcy9KUyUuY3BwOwog
CkBAIC0yMDY5LDYgKzIwOTQsNSBAQCBDTEVBTkZJTEVTICs9IFwKIAlKU0RPTVdpbmRvd0Jhc2Uu
bHV0LmggXAogCUpTUkdCQ29sb3IubHV0LmggXAogCUpTWE1MSHR0cFJlcXVlc3QubHV0LmggXAot
CUpTWFNMVFByb2Nlc3Nvci5sdXQuaCBcCi0Ja2pzX25hdmlnYXRvci5sdXQuaAorCUpTWFNMVFBy
b2Nlc3Nvci5sdXQuaAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwppbmRleCAzN2MyNzI5Li44NTAwNTMwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTI1Myw4ICsyNTMsNyBA
QCBMVVRfRklMRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTTG9jYXRpb24uY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdC5jcHAgXAotICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAotICAgIGJp
bmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisgICAgYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vz
c29yLmNwcAogCiBMVVRfVEFCTEVfRklMRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTElu
cHV0RWxlbWVudEJhc2UuY3BwCkBAIC0zODUsNiArMzg0LDExIEBAIElETF9CSU5ESU5HUyArPSBc
CiAgICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKICAgICBwYWdlL0hpc3RvcnkuaWRsIFwKICAgICBw
YWdlL1NjcmVlbi5pZGwgXAorICAgIHBhZ2UvTmF2aWdhdG9yLmlkbCBcCisgICAgcGx1Z2lucy9Q
bHVnaW4uaWRsIFwKKyAgICBwbHVnaW5zL01pbWVUeXBlLmlkbCBcCisgICAgcGx1Z2lucy9QbHVn
aW5BcnJheS5pZGwgXAorICAgIHBsdWdpbnMvTWltZVR5cGVBcnJheS5pZGwgXAogICAgIHhtbC9E
T01QYXJzZXIuaWRsIFwKICAgICB4bWwvWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRsIFwKICAg
ICB4bWwvWE1MU2VyaWFsaXplci5pZGwKQEAgLTQyOCw2ICs0MzIsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNOYW1l
ZE5vZGVNYXBDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU05hbWVkTm9kZXNDb2xsZWN0
aW9uLmNwcCAgXAorICAgIGJpbmRpbmdzL2pzL0pTTmF2aWdhdG9yQ3VzdG9tLmNwcCAgXAogICAg
IGJpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5j
cHAgXApAQCAtNDM5LDEwICs0NDQsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgYmluZGluZ3MvanMv
SlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVz
dC5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTWFNMVFByb2Nlc3Nvci5jcHAgXAorICAgIGJpbmRp
bmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNQbHVnaW5BcnJh
eUN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL2tqc19iaW5kaW5nLmNwcCBcCiAgICAgYmluZGluZ3MvanMva2pz
X2V2ZW50cy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcCBcCi0gICAgYmluZGlu
Z3MvanMva2pzX25hdmlnYXRvci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL1BhdXNlZFRpbWVvdXRzLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcCBcCkBAIC03MzIsNiArNzM5LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0RPTVNlbGVjdGlv
bi5jcHAgXAogICAgIHBhZ2UvRE9NV2luZG93LmNwcCBcCisgICAgcGFnZS9OYXZpZ2F0b3IuY3Bw
IFwKICAgICBwYWdlL0RyYWdDb250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIFwKICAgICBwYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgXApAQCAtNzQ2LDYgKzc1NCwxMSBA
QCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL1NjcmVlbi5jcHAgXAogICAgIHBhZ2UvU2V0dGluZ3Mu
Y3BwIFwKICAgICBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5E
YXRhLmNwcCBcCisgICAgcGx1Z2lucy9QbHVnaW5BcnJheS5jcHAgXAorICAgIHBsdWdpbnMvUGx1
Z2luLmNwcCBcCisgICAgcGx1Z2lucy9NaW1lVHlwZS5jcHAgXAorICAgIHBsdWdpbnMvTWltZVR5
cGVBcnJheS5jcHAgXAogICAgIHBsYXRmb3JtL0FyZW5hLmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4
dC9BdG9taWNTdHJpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXApAQCAt
OTEwLDYgKzkyMyw3IEBAIHF0LXBvcnQgewogICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
YnBhZ2UuaCBcCiAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5oIFwKICAgICAk
JFBXRC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmggXAorICAgICQkUFdE
Ly4uL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaCBcCiAgICAgJCRQV0QvLi4vV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaCBcCiAgICAgJCRQV0Qv
cGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oCiAKQEAgLTk3NSw2ICs5
ODksNyBAQCBxdC1wb3J0IHsKICAgICBwbGF0Zm9ybS90ZXh0L3F0L1RleHRDb2RlY1F0LmNwcCBc
CiAgICAgcGxhdGZvcm0vcXQvV2hlZWxFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvV2lk
Z2V0UXQuY3BwIFwKKyAgICBwbHVnaW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAgXAogICAgIC4uL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRRdC5jcHAgXAogICAgIC4uL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudFF0LmNwcCBcCiAgICAgLi4vV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAgXApAQCAtOTg4LDYgKzEwMDMs
NyBAQCBxdC1wb3J0IHsKICAgICAuLi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcCBcCiAg
ICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vic2V0dGluZ3MuY3BwIFwKICAgICAuLi9XZWJLaXQvcXQv
QXBpL3F3ZWJoaXN0b3J5aW50ZXJmYWNlLmNwcCBcCisgICAgLi4vV2ViS2l0L3F0L0FwaS9xd2Vi
cGx1Z2luZmFjdG9yeS5jcHAKIAogICAgIHVuaXg6IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvU3lz
dGVtVGltZVF0LmNwcAogICAgIGVsc2U6IFNPVVJDRVMgKz0gcGxhdGZvcm0vd2luL1N5c3RlbVRp
bWVXaW4uY3BwCkBAIC05OTcsMTUgKzEwMTMsMTAgQEAgcXQtcG9ydCB7CiAgICAgICAgIEhFQURF
UlMgKz0gXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2lu
dGVyZmFjZS5oIFwKICAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdv
cmtpbnRlcmZhY2VfcC5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbi5oIFwKLSAgICAgICAgICAgICQkUFdELy4uL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbl9wLmggXAotICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9x
d2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmggXAogICAgICAgICAgICAgJCRQV0QvLi4vV2ViS2l0
L3F0L0FwaS9xY29va2llamFyLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKICAgICAgICAgICAg
IC4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIFwKLSAgICAgICAgICAg
IC4uL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbi5jcHAgXAotICAgICAgICAgICAgLi4v
V2ViS2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcCBcCiAgICAgICAgICAg
ICAuLi9XZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuY3BwCiAKICAgICAgfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYzk2ZmUyYS4uYWNhODZiMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMTg5LDYgKzExODksMjIgQEAKIAkJCQk+DQog
CQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVp
bGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNNaW1lVHlwZS5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWls
ZFxvYmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU01pbWVUeXBlLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxv
YmpcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU01pbWVUeXBlQXJyYXkuY3BwIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cV2ViS2l0QnVp
bGRcb2JqXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNNaW1lVHlwZUFycmF5LmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1
dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTW91c2VFdmVudC5jcHAi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTIxMyw2ICsxMjI5LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxk
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTTmF2aWdhdG9yLmNwcCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxk
XG9ialxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTTmF2aWdhdG9yLmgiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilc
b2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTm9kZS5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpAQCAtMTI2MSw2ICsxMjg1LDIyIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3Jl
XERlcml2ZWRTb3VyY2VzXEpTUGx1Z2luLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERl
cml2ZWRTb3VyY2VzXEpTUGx1Z2luLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxXZWJLaXRCdWlsZFxvYmpcV2ViQ29yZVxEZXJpdmVk
U291cmNlc1xKU1BsdWdpbkFycmF5LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFdlYktpdEJ1aWxkXG9ialxXZWJDb3JlXERlcml2
ZWRTb3VyY2VzXEpTUGx1Z2luQXJyYXkuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8Rmls
ZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSlNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KQEAgLTI3ODMsMTEgKzI4MjMsMTUgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0K
IAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlLmNwcCINCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxwYWdlXE5hdmlnYXRvci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQog
CQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2UuaCINCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXE5hdmlnYXRvci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlLmNwcCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTc3NzIsNiArNzgxNiwxMCBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNN
aW1lVHlwZUFycmF5Q3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8Rmls
ZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU05hbWVkTm9kZU1hcEN1c3Rv
bS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBAIC03Nzg0LDYgKzc4MzIsMTAgQEAKIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJp
bmRpbmdzXGpzXEpTTmF2aWdhdG9yQ3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0K
KwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU05vZGVDdXN0
b20uY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtNzgxNiw2ICs3ODY4LDE0IEBACiAJ
CQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxi
aW5kaW5nc1xqc1xKU1BsdWdpbkFycmF5Q3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU1BsdWdp
bkN1c3RvbS5jcHAiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNTUUxSZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNw
cCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTc5MTYsMTQgKzc5NzYsNiBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNca2pzX25hdmlnYXRvci5jcHAiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZp
bGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNca2pzX25hdmlnYXRvci5oIg0K
LQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGJpbmRpbmdzXGpzXGtqc19wcm94eS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkBAIC03
OTUzLDYgKzgwMDUsMjIgQEAKIAkJCU5hbWU9InBsdWdpbnMiDQogCQkJPg0KIAkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xNaW1lVHlwZS5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXE1pbWVUeXBl
LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbHVnaW5zXE1pbWVUeXBlQXJyYXkuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xNaW1lVHlwZUFycmF5LmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5z
XG5wYXBpLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03OTYxLDYgKzgwMjksMzAgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW4uY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW4uaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luQXJyYXkuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGx1
Z2luc1xQbHVnaW5BcnJheS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGx1Z2luc1xQbHVnaW5EYXRhLmNwcCINCisJCQkJPg0KKwkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsdWdpbnNcUGx1Z2luRGF0
YS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGx1Z2luc1xQbHVnaW5EYXRhYmFzZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAt
ODAxMiw2ICs4MTA0LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVnaW5zXHdpblxQbHVnaW5EYXRhV2luLmNwcCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbHVn
aW5zXHdpblxQbHVnaW5QYWNrYWdlV2luLmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMjQ5MjAzZi4uMzRm
OTkyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU1
OSw3ICs1NTksNiBAQAogCQk2NUM5N0FGMzA4RUE5MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUM5N0FGMjA4RUE5
MDg4MDBBQ0QyNzMgLyogY29uZmlnLmggKi87IH07CiAJCTY1Q0JGRUY5MDk3NEY2MDcwMDFEQUMy
NSAvKiBGcmFtZVZpZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgKi87IH07
CiAJCTY1Q0JGRUZBMDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Q0JGRUY4MDk3NEY2MDcwMDFEQUMy
NSAvKiBGcmFtZVZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk2NUQxQzFDQTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1Z2luLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUQxQzFDOTA5OTMyQjIyMDAw
Q0IzMjQgLyogUGx1Z2luLmggKi87IH07CiAJCTY1REYzMURBMDlEMUMxMjMwMDBCRTMyNSAvKiBK
U0F0dHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0ci5jcHAgKi87IH07CiAJCTY1REYzMURC
MDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMUQ5MDlEMUMxMjMwMDBCRTMyNSAvKiBKU0F0dHIuaCAq
LzsgfTsKIAkJNjVERjMxRjMwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzFERjA5
RDFDQzYwMDAwQkUzMjUgLyogSlNDaGFyYWN0ZXJEYXRhLmNwcCAqLzsgfTsKQEAgLTE2MzksOCAr
MTYzOCw2IEBACiAJCTkzQjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ0RTA5RUIw
QzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovOyB9OwogCQk5M0I3MEQ2QjA5RUIwQzdDMDA5
RDg0NjggLyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTNCNzBENEYwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmNwcCAqLzsg
fTsKIAkJOTNCNzBENkMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19odG1sLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3MEQ1MDA5RUIwQzdDMDA5RDg0
NjggLyoga2pzX2h0bWwuaCAqLzsgfTsKLQkJOTNCNzBENkQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtq
c19uYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwICovOyB9
OwotCQk5M0I3MEQ2RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX25hdmlnYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTIwOUVCMEM3QzAw
OUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuaCAqLzsgfTsKIAkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19wcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX3Byb3h5LmNwcCAqLzsg
fTsKIAkJOTNCNzBENzAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNCNzBENTQwOUVCMEM3QzAwOUQ4
NDY4IC8qIGtqc19wcm94eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkzQjc3QTM4MEFERDc5MjUwMEVBNEI4MSAvKiBGcmFtZUxvYWRlclR5cGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0I3N0Ez
NzBBREQ3OTI1MDBFQTRCODEgLyogRnJhbWVMb2FkZXJUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDQzLDcgKzIwNDAsNiBAQAogCQlB
ODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkg
LyogTmFtZWROb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTgxODcyMjQwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODE4NzIxOTA5
NzdEM0MwMDA1ODI2RDkgLyogTmFtZU5vZGVMaXN0LmNwcCAqLzsgfTsKIAkJQTgxODcyMjUwOTc3
RDNDMDAwNTgyNkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgxODcyMUEwOTc3RDNDMDAwNTgyNkQ5IC8qIENoaWxk
Tm9kZUxpc3QuY3BwICovOyB9OwotCQlBODIzOThBODA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0lu
SW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTgyMzk4QTcwOUIzQUNGNTAwQjYwNjQxIC8qIFBsdWdJbkluZm9TdG9yZU1hYy5tbSAq
LzsgfTsKIAkJQTgyMzlFMDAwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgyMzlERkUwOUIzQ0Y4QTAw
QjYwNjQxIC8qIExvZ2dpbmcuY3BwICovOyB9OwogCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEg
LyogTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgyMzlERkYwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODI2RThBRTBBMUE4RjIzMDBDRDFC
QjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODI2RThBQzBBMUE4RjIzMDBDRDFCQjYgLyog
SlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi87IH07CkBAIC0yNTc0LDYgKzI1NzAs
MzMgQEAKIAkJQThGNDZCODEwQ0IyMEE5RDAwM0E5NjcwIC8qIERPTVNWR1N0cmluZ0xpc3QuaCBp
biBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1RDc5QUQyMEFDQTE3RUIwMEYwMkZDNSAvKiBET01TVkdTdHJpbmdMaXN0LmggKi87IH07
CiAJCUE4RjRGQjk0MEMxNjlFN0IwMDJBRkVENSAvKiBTVkdSZW5kZXJTdXBwb3J0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5MzBDMTY5RTdC
MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5oICovOyB9OwogCQlBOEY0RkI5NjBDMTY5RTg1
MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVu
ZGVyU3VwcG9ydC5jcHAgKi87IH07CisJCUE5QzZFNEUzMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
OUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3BwICovOyB9OworCQlBOUM2RTRF
NDBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlw
ZS5oICovOyB9OworCQlBOUM2RTRFNzBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRF
NTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5jcHAgKi87IH07CisJCUE5QzZFNEU4
MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1lVHlwZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFNjBENzQ1RTE4MDA2NDQyRTkgLyogTWlt
ZVR5cGVBcnJheS5oICovOyB9OworCQlBOUM2RTRFQjBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2lu
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZF
NEU5MEQ3NDVFMkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICovOyB9OworCQlBOUM2RTRFQzBENzQ1
RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOUM2RTRFQTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1Z2luLmggKi87IH07
CisJCUE5QzZFNEVGMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRFRDBENzQ1RTM4MDA2
NDQyRTkgLyogUGx1Z2luQXJyYXkuY3BwICovOyB9OworCQlBOUM2RTRGMDBENzQ1RTM4MDA2NDQy
RTkgLyogUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNEVFMEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovOyB9
OworCQlBOUM2RTRGMzBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTRGMTBENzQ1RTQ4MDA2
NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgKi87IH07CisJCUE5QzZFNEY0MEQ3NDVFNDgwMDY0NDJF
OSAvKiBQbHVnaW5EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOUM2RTRGMjBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovOyB9Owor
CQlBOUM2RTRGNjBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5QzZFNEY1MEQ3NDVFNjEwMDY0
NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tICovOyB9OworCQlBOUM2RTVBNTBENzQ2NDU4MDA2NDQy
RTkgLyogTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5QzZFNUEzMEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovOyB9
OworCQlBOUM2RTVBNjBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTVBNDBENzQ2NDU4MDA2NDQy
RTkgLyogTmF2aWdhdG9yLmggKi87IH07CisJCUE5QzZFNjQ3MEQ3NDY1Q0EwMDY0NDJFOSAvKiBK
U01pbWVUeXBlQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTlDNkU2NDYwRDc0NjVDQTAwNjQ0MkU5IC8qIEpTTWltZVR5cGVBcnJh
eUN1c3RvbS5jcHAgKi87IH07CisJCUE5QzZFNjQ5MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmln
YXRvckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOUM2RTY0ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICov
OyB9OworCQlBOUM2RTY0QzBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0
QTBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgKi87IH07CisJCUE5
QzZFNjREMEQ3NDY1RTcwMDY0NDJFOSAvKiBKU1BsdWdpbkN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUM2RTY0QjBENzQ2NUU3MDA2NDQy
RTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICovOyB9OworCQlBOUQyNDdGNzBENzU3RTM0MDBGREY5
NTkgLyogSlNOYXZpZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCAq
LzsgfTsKKwkJQTlEMjQ3RjgwRDc1N0UzNDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOUQyNDdGNjBENzU3RTMz
MDBGREY5NTkgLyogSlNOYXZpZ2F0b3IuaCAqLzsgfTsKKwkJQTlEMjQ3RkUwRDc1N0U2OTAwRkRG
OTU5IC8qIEpTUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5RDI0N0ZBMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi87IH07
CisJCUE5RDI0N0ZGMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5
IC8qIEpTUGx1Z2luLmggKi87IH07CisJCUE5RDI0ODAwMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1Bs
dWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE5RDI0N0ZDMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmNwcCAqLzsgfTsK
KwkJQTlEMjQ4MDEwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0N0ZEMEQ3NTdFNjkwMEZE
Rjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi87IH07CisJCUE5RDI0ODA2MEQ3NTdFN0QwMEZERjk1
OSAvKiBKU01pbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE5RDI0ODAyMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmNwcCAqLzsg
fTsKKwkJQTlEMjQ4MDcwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODAzMEQ3NTdFN0QwMEZE
Rjk1OSAvKiBKU01pbWVUeXBlLmggKi87IH07CisJCUE5RDI0ODA4MEQ3NTdFN0QwMEZERjk1OSAv
KiBKU01pbWVUeXBlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJheS5j
cHAgKi87IH07CisJCUE5RDI0ODA5MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE5RDI0ODA1
MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuaCAqLzsgfTsKIAkJQUEwOTcyQ0Mw
QjY5NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEwOTcyQ0EwQjY5NDdBODAwQTcwNUU5IC8q
IFNWR0lubGluZVRleHRCb3guY3BwICovOyB9OwogCQlBQTA5NzJDRDBCNjk0N0E4MDBBNzA1RTkg
LyogU1ZHSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUEwOTcyQ0IwQjY5NDdBODAwQTcwNUU5IC8qIFNWR0lubGluZVRleHRCb3gu
aCAqLzsgfTsKIAkJQUEyMUVDQ0EwQUJGMEZCQTAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEw
OTc4RUQwQUJBQTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuY3BwICovOyB9OwpA
QCAtNDg5Myw3ICs0OTE2LDYgQEAKIAkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZp
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBj
b25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA0OyB1c2VzVGFicyA9
IDA7IH07CiAJCTY1Q0JGRUY3MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lVmlldy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1Q0JGRUY4MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lVmlldy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2NUQxQzFDOTA5OTMyQjIyMDAwQ0IzMjQgLyogUGx1
Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMxRDgwOUQxQzEyMjAwMEJFMzI1IC8qIEpTQXR0
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdHRyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVERjMxRDkwOUQxQzEyMzAwMEJFMzI1IC8q
IEpTQXR0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBdHRyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1REYzMURGMDlEMUNDNjAwMDBCRTMyNSAvKiBK
U0NoYXJhY3RlckRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ2hhcmFjdGVyRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTIz
LDggKzU5NDUsNiBAQAogCQk5M0I3MEQ0RTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0ga2pzX2V2ZW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3MEQ0RjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0
bWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtqc19odG1sLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4
IC8qIGtqc19odG1sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBranNfaHRt
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0I3MEQ1MTA5RUIwQzdDMDA5RDg0
NjggLyoga2pzX25hdmlnYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0ga2pzX25hdmlnYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
QjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBranNfbmF2aWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzQjcwRDUzMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJveHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGtqc19wcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBranNfcHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGtqc19wcm94eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0I3N0EzNzBBREQ3OTI1MDBFQTRCODEgLyogRnJh
bWVMb2FkZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGcmFtZUxv
YWRlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MTYxLDcgKzYxODEs
NiBAQAogCQlBODE4NzIxODA5NzdEM0MwMDA1ODI2RDkgLyogTmFtZWROb2RlTWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYW1lZE5vZGVNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMTkwOTc3RDNDMDAwNTgyNkQ5IC8qIE5hbWVOb2RlTGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZU5vZGVMaXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgxODcyMUEwOTc3RDNDMDAwNTgy
NkQ5IC8qIENoaWxkTm9kZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENoaWxkTm9kZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
ODIzOThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdJbkluZm9TdG9yZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgyMzlERkUwOUIzQ0Y4QTAwQjYwNjQxIC8q
IExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvZ2dp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODIzOURGRjA5QjNDRjhBMDBC
NjA2NDEgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9n
Z2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODI2RThBQzBBMUE4RjIzMDBD
RDFCQjYgLyogSlNIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NjUsNiArNjU4NCwzOCBAQAogCQlBOEVBODAw
NjBBMTk1MTZFMDBBOEVGNUYgLyogTWVkaWFMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThG
NEZCOTMwQzE2OUU3QjAwMkFGRUQ1IC8qIFNWR1JlbmRlclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUmVuZGVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBOEY0RkI5NTBDMTY5RTg1MDAyQUZFRDUgLyogU1ZHUmVuZGVyU3VwcG9y
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdSZW5kZXJTdXBw
b3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RTEwRDc0NUUwNTAw
NjQ0MkU5IC8qIE1pbWVUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNaW1lVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEUy
MEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWltZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0
RTUwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1pbWVUeXBlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBOUM2RTRFNjBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5cGVBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWltZVR5cGVBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFOTBENzQ1RTJCMDA2NDQyRTkgLyogUGx1
Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbHVnaW4uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTRFQTBENzQ1RTJCMDA2NDQyRTkg
LyogUGx1Z2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU0RUQwRDc0NUUzODAwNjQ0MkU5IC8q
IFBsdWdpbkFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
bHVnaW5BcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNEVFMEQ3
NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGx1Z2luQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlD
NkU0RjEwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsdWdpbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlBOUM2RTRGMjBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBOUM2RTRGNTBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBQbHVnaW5EYXRh
TWFjLm1tOyBwYXRoID0gbWFjL1BsdWdpbkRhdGFNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE5QzZFNUEzMEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNUE0MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUM2RTY0NjBENzQ2NUNBMDA2NDQyRTkgLyogSlNN
aW1lVHlwZUFycmF5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBOUM2RTY0ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdhdG9yQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NEEwRDc0NjVFNzAwNjQ0MkU5
IC8qIEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTUGx1Z2luQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBOUM2RTY0QjBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NUQwRDc0NjY5NDAwNjQ0MkU5IC8q
IE5hdmlnYXRvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvci5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjVFMEQ3NDY2RjIwMDY0NDJFOSAvKiBN
aW1lVHlwZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1pbWVUeXBlLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NUYwRDc0NjcwMDAwNjQ0MkU5IC8qIE1pbWVU
eXBlQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNaW1lVHlwZUFycmF5LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlDNkU2NjAwRDc0NjcwQzAwNjQ0MkU5IC8q
IFBsdWdpbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5QzZFNjYxMEQ3NDY3MUUwMDY0NDJFOSAvKiBQbHVnaW5B
cnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBsdWdpbkFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RjUwRDc1N0UzMzAwRkRGOTU5IC8qIEpTTmF2
aWdhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmln
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0N0Y2MEQ3NTdFMzMw
MEZERjk1OSAvKiBKU05hdmlnYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNOYXZpZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTlEMjQ3RkEw
RDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1BsdWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE5RDI0N0ZCMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTlEMjQ3RkMwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUGx1Z2luQXJyYXkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBOUQyNDdGRDBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVn
aW5BcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQbHVnaW5BcnJh
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBOUQyNDgwMjBENzU3RTdEMDBGREY5
NTkgLyogSlNNaW1lVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNNaW1lVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODAz
MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU01pbWVUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5
RDI0ODA0MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWltZVR5cGVBcnJheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUE5RDI0ODA1MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVU
eXBlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWltZVR5cGVB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTA5NzJDQTBCNjk0N0E4MDBB
NzA1RTkgLyogU1ZHSW5saW5lVGV4dEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHSW5saW5lVGV4dEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBMDk3MkNCMEI2OTQ3QTgwMEE3MDVFOSAvKiBTVkdJbmxpbmVUZXh0Qm94LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbmxpbmVUZXh0Qm94Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1ND
dXJzb3JJbWFnZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NDdXJzb3JJbWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTgxNjUsNiArODIxNiw3IEBACiAJCQkJQkM5ODU0NDMwQ0QzRDlEMDAwMDY5QkMxIC8qIFdpbmRv
dyAqLywKIAkJCQlBODNCNzkyMjBDQ0IwMEYwMDAwQjA4MjUgLyogWE1MICovLAogCQkJCUE4M0I3
OTBDMENDQUZGODMwMDBCMDgyNSAvKiBYUGF0aCAqLywKKwkJCQlBOUQyNDdGOTBENzU3RTQxMDBG
REY5NTkgLyogUGx1Z2lucyAqLywKIAkJCSk7CiAJCQluYW1lID0gIkRlcml2ZWQgU291cmNlcyI7
CiAJCQlwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZTsKQEAgLTgzOTYsNiArODQ0OCwyMSBA
QAogCQk1RENGODM2OTBENTkxNTc4MDA5NTNCQzYgLyogcGx1Z2lucyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlDNkU2NjEwRDc0NjcxRTAwNjQ0MkU5
IC8qIFBsdWdpbkFycmF5LmlkbCAqLywKKwkJCQlBOUM2RTY2MDBENzQ2NzBDMDA2NDQyRTkgLyog
UGx1Z2luLmlkbCAqLywKKwkJCQlBOUM2RTY1RjBENzQ2NzAwMDA2NDQyRTkgLyogTWltZVR5cGVB
cnJheS5pZGwgKi8sCisJCQkJQTlDNkU2NUUwRDc0NjZGMjAwNjQ0MkU5IC8qIE1pbWVUeXBlLmlk
bCAqLywKKwkJCQlBOUM2RTRGNTBENzQ1RTYxMDA2NDQyRTkgLyogUGx1Z2luRGF0YU1hYy5tbSAq
LywKKwkJCQlBOUM2RTRGMTBENzQ1RTQ4MDA2NDQyRTkgLyogUGx1Z2luRGF0YS5jcHAgKi8sCisJ
CQkJQTlDNkU0RjIwRDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCAqLywKKwkJCQlBOUM2
RTRFRDBENzQ1RTM4MDA2NDQyRTkgLyogUGx1Z2luQXJyYXkuY3BwICovLAorCQkJCUE5QzZFNEVF
MEQ3NDVFMzgwMDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oICovLAorCQkJCUE5QzZFNEU5MEQ3NDVF
MkIwMDY0NDJFOSAvKiBQbHVnaW4uY3BwICovLAorCQkJCUE5QzZFNEVBMEQ3NDVFMkIwMDY0NDJF
OSAvKiBQbHVnaW4uaCAqLywKKwkJCQlBOUM2RTRFNTBENzQ1RTE4MDA2NDQyRTkgLyogTWltZVR5
cGVBcnJheS5jcHAgKi8sCisJCQkJQTlDNkU0RTYwRDc0NUUxODAwNjQ0MkU5IC8qIE1pbWVUeXBl
QXJyYXkuaCAqLywKKwkJCQlBOUM2RTRFMTBENzQ1RTA1MDA2NDQyRTkgLyogTWltZVR5cGUuY3Bw
ICovLAorCQkJCUE5QzZFNEUyMEQ3NDVFMDUwMDY0NDJFOSAvKiBNaW1lVHlwZS5oICovLAogCQkJ
CTVEQ0Y4MzZDMEQ1OTE1OTgwMDk1M0JDNiAvKiBQbHVnaW5JbmZvU3RvcmUuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gcGx1Z2luczsKQEAgLTg1MjEsNyArODU4OCw2IEBACiAJCQkJQkM5NEQxMDcw
QzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJCUJDM0ZDQUE4
MEFDM0RCNTgwMEJBNTRBRCAvKiBQbGF0Zm9ybVNjcm9sbEJhci5oICovLAogCQkJCUJDN0IyQUY5
MDQ1MDgyNDEwMEE4MDAwRiAvKiBQbGF0Zm9ybVNjcm9sbEJhck1hYy5tbSAqLywKLQkJCQlBODIz
OThBNzA5QjNBQ0Y1MDBCNjA2NDEgLyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tICovLAogCQkJCTA2
NjhFMThFMEFERDk2NDAwMDQxMjhFMCAvKiBQb3B1cE1lbnVNYWMubW0gKi8sCiAJCQkJMUNFMjRG
OTYwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAqLywKIAkJCQlCQ0FBOTBD
MjBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsQmFyLmNwcCAqLywKQEAgLTg1NTcsNiArODYyMyw5
IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUM2RTY1RDBENzQ2Njk0MDA2NDQyRTkg
LyogTmF2aWdhdG9yLmlkbCAqLywKKwkJCQlBOUM2RTVBMzBENzQ2NDU4MDA2NDQyRTkgLyogTmF2
aWdhdG9yLmNwcCAqLywKKwkJCQlBOUM2RTVBNDBENzQ2NDU4MDA2NDQyRTkgLyogTmF2aWdhdG9y
LmggKi8sCiAJCQkJMDY2OTNGNDUwQkZCQzkxNjAwMjE2MDcyIC8qIGluc3BlY3RvciAqLywKIAkJ
CQk5M0MwOUE4MjBCMDY0RjA1MDA1QUJENEQgLyogbWFjICovLAogCQkJCTg1MzhGMDAwMEFENzE3
NzAwMDZBODFEMSAvKiBBYnN0cmFjdFZpZXcuaWRsICovLApAQCAtMTA3NzcsNiArMTA4NDYsMjEg
QEAKIAkJCW5hbWUgPSBYTUw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlB
OUQyNDdGOTBENzU3RTQxMDBGREY5NTkgLyogUGx1Z2lucyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQTlEMjQ4MDIwRDc1N0U3RDAwRkRGOTU5IC8qIEpT
TWltZVR5cGUuY3BwICovLAorCQkJCUE5RDI0ODAzMEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVU
eXBlLmggKi8sCisJCQkJQTlEMjQ4MDQwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJh
eS5jcHAgKi8sCisJCQkJQTlEMjQ4MDUwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGVBcnJh
eS5oICovLAorCQkJCUE5RDI0N0ZBMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgKi8s
CisJCQkJQTlEMjQ3RkIwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggKi8sCisJCQkJQTlE
MjQ3RkMwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luQXJyYXkuY3BwICovLAorCQkJCUE5RDI0
N0ZEMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbkFycmF5LmggKi8sCisJCQkpOworCQkJbmFt
ZSA9IFBsdWdpbnM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCMjIyNzdD
QTBEMDBCRjFFMDA3MUI3ODIgLyogc3ZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKQEAgLTExNjQzLDggKzExNzI3LDYgQEAKIAkJCQk5M0I3MEQ0RTA5RUIwQzdD
MDA5RDg0NjggLyoga2pzX2V2ZW50cy5oICovLAogCQkJCTkzQjcwRDRGMDlFQjBDN0MwMDlEODQ2
OCAvKiBranNfaHRtbC5jcHAgKi8sCiAJCQkJOTNCNzBENTAwOUVCMEM3QzAwOUQ4NDY4IC8qIGtq
c19odG1sLmggKi8sCi0JCQkJOTNCNzBENTEwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0
b3IuY3BwICovLAotCQkJCTkzQjcwRDUyMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdhdG9y
LmggKi8sCiAJCQkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAgKi8s
CiAJCQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5oICovLAogCQkJCUJD
QTM3ODE0MEQxNUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5jcHAgKi8sCkBAIC0xMTcw
MCw2ICsxMTc4MiwxMSBAQAogCQlCQzRFREVGNzBDMDhGNDE0MDA3RURENDkgLyogQ3VzdG9tICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlBOUM2RTY0QTBE
NzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgKi8sCisJCQkJQTlDNkU2
NEIwRDc0NjVFNzAwNjQ0MkU5IC8qIEpTUGx1Z2luQ3VzdG9tLmNwcCAqLywKKwkJCQlBOUM2RTY0
ODBENzQ2NUQ4MDA2NDQyRTkgLyogSlNOYXZpZ2F0b3JDdXN0b20uY3BwICovLAorCQkJCUE5QzZF
NjQ2MEQ3NDY1Q0EwMDY0NDJFOSAvKiBKU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwICovLAorCQkJ
CUE3NjZGMzUyMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3Bw
ICovLAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICov
LAogCQkJCUE3NjZGMzUyMEQ2QkRFMzUwMEFCRERCMyAvKiBKU0NhbnZhc1BpeGVsQXJyYXlDdXN0
b20uY3BwICovLAogCQkJCTFBOUVGNDU2MEExQjk1N0QwMDMzMkI2MyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8sCkBAIC0xMTc2Miw2ICsxMTg0OSw4IEBACiAJCQkJ
QkMxMjRFRkUwQzI2NDQ3QTAwOUUyMzQ5IC8qIEpTQmFySW5mby5oICovLAogCQkJCUJDOTg1NDNC
MENEM0Q5OEIwMDA2OUJDMSAvKiBKU0NvbnNvbGUuY3BwICovLAogCQkJCUJDOTg1NDNDMENEM0Q5
OEIwMDA2OUJDMSAvKiBKU0NvbnNvbGUuaCAqLywKKwkJCQlBOUQyNDdGNTBENzU3RTMzMDBGREY5
NTkgLyogSlNOYXZpZ2F0b3IuY3BwICovLAorCQkJCUE5RDI0N0Y2MEQ3NTdFMzMwMEZERjk1OSAv
KiBKU05hdmlnYXRvci5oICovLAogCQkJCUJDNUE4NkIzMEMzMzY3RTgwMEVFQTY0OSAvKiBKU0RP
TVNlbGVjdGlvbi5jcHAgKi8sCiAJCQkJQkM1QTg2QjQwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9N
U2VsZWN0aW9uLmggKi8sCiAJCQkJMTQwM0JBMEIwOUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2lu
ZG93LmNwcCAqLywKQEAgLTEzOTA3LDcgKzEzOTk2LDYgQEAKIAkJCQlCQzNGQ0FBOTBBQzNEQjU4
MDBCQTU0QUQgLyogUGxhdGZvcm1TY3JvbGxCYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNE
QTJCMEQwMDZDMUQwMEVGNkYyNiAvKiBQbGF0Zm9ybVN0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNjVEMUMxQ0EwOTkzMkIyMjAwMENCMzI0IC8qIFBsdWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUFDNjk0QzgwQTNCMTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkIxRjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjY4RTE4QjBBREQ5NjI0MDA0
MTI4RTAgLyogUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKQEAgLTE0MzM1LDcgKzE0NDIzLDYg
QEAKIAkJCQk5M0I3MEQ2NDA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2JpbmRpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzQjcwRDZBMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfZXZlbnRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0I3MEQ2QzA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuaCBp
biBIZWFkZXJzICovLAotCQkJCTkzQjcwRDZFMDlFQjBDN0MwMDlEODQ2OCAvKiBranNfbmF2aWdh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODFGNTA5RDE1MDhEMDAwRTYxRDcgLyoga2pz
X25hdmlnYXRvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjcwRDcwMDlFQjBDN0MwMDlE
ODQ2OCAvKiBranNfcHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzJEMDk3OUMzQkQw
MDQ2Nzc0MSAvKiBsb2FkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ0MzQsNiArMTQ1MjEsMTcg
QEAKIAkJCQkxQTU2OUQyMzBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9vYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjkzMjc0MEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdp
bmRvd0Jhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEU0MEQ3NDVFMDUwMDY0NDJFOSAv
KiBNaW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RTgwRDc0NUUxODAwNjQ0MkU5
IC8qIE1pbWVUeXBlQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEVDMEQ3NDVFMkIw
MDY0NDJFOSAvKiBQbHVnaW4uaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNEYwMEQ3NDVFMzgw
MDY0NDJFOSAvKiBQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTlDNkU0RjQwRDc0
NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5QzZFNUE2
MEQ3NDY0NTgwMDY0NDJFOSAvKiBOYXZpZ2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUE5RDI0
N0Y4MEQ3NTdFMzQwMEZERjk1OSAvKiBKU05hdmlnYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QTlEMjQ3RkYwRDc1N0U2OTAwRkRGOTU5IC8qIEpTUGx1Z2luLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOUQyNDgwMTBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTlEMjQ4MDcwRDc1N0U3RDAwRkRGOTU5IC8qIEpTTWltZVR5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE5RDI0ODA5MEQ3NTdFN0QwMEZERjk1OSAvKiBKU01pbWVUeXBlQXJyYXku
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTU1NDksNyArMTU2NDcsNiBAQAogCQkJCTkzNUM0NzcxMDlB
QzRENzMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQlCQzk0RDEwODBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1TY3JlZW5NYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5M0YxOUFEQzA4MjQ1RTU5MDAxRTlBQkMgLyogUGxhdGZvcm1TY3Jv
bGxCYXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlBODIzOThBODA5QjNBQ0Y1MDBCNjA2NDEg
LyogUGx1Z0luSW5mb1N0b3JlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFDNjk0QzcwQTNC
MTY3NjAwM0Y1MDQ5IC8qIFBsdWdpbkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
QjFGNzE2MEQwMENBQTgwMDRBRUE2NCAvKiBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDY2OEUxOTAwQUREOTY0MDAwNDEyOEUwIC8qIFBvcHVwTWVudU1hYy5t
bSBpbiBTb3VyY2VzICovLApAQCAtMTU5NzIsNyArMTYwNjksNiBAQAogCQkJCTkzQjcwRDYzMDlF
QjBDN0MwMDlEODQ2OCAvKiBranNfYmluZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0I3
MEQ2OTA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2V2ZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0I3MEQ2QjA5RUIwQzdDMDA5RDg0NjggLyoga2pzX2h0bWwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTNCNzBENkQwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19uYXZpZ2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNCNzBENkYwOUVCMEM3QzAwOUQ4NDY4IC8qIGtqc19wcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyQzA5NzlDM0JEMDA0Njc3NDEgLyogbG9hZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REY3MDk5RTY0OTIwMDU2RTU4MSAvKiBtYXJrdXAu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjA1NSw2ICsxNjE1MSwyMiBAQAogCQkJCTFBNTY5RDIy
MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX29iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNjkzMjczMEQ3RTI5MzkwMEFFNDREMSAvKiBKU0RPTVdpbmRvd0Jhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RTMwRDc0NUUwNTAwNjQ0MkU5IC8qIE1pbWVUeXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEU3MEQ3NDVFMTgwMDY0NDJFOSAvKiBNaW1l
VHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEVCMEQ3NDVFMkIwMDY0NDJF
OSAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTlDNkU0RUYwRDc0NUUzODAwNjQ0
MkU5IC8qIFBsdWdpbkFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEYzMEQ3NDVF
NDgwMDY0NDJFOSAvKiBQbHVnaW5EYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNEY2
MEQ3NDVFNjEwMDY0NDJFOSAvKiBQbHVnaW5EYXRhTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTlDNkU1QTUwRDc0NjQ1ODAwNjQ0MkU5IC8qIE5hdmlnYXRvci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlBOUM2RTY0NzBENzQ2NUNBMDA2NDQyRTkgLyogSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUE5QzZFNjQ5MEQ3NDY1RDgwMDY0NDJFOSAvKiBKU05hdmln
YXRvckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTY0QzBENzQ2NUU3MDA2NDQy
RTkgLyogSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUM2RTY0
RDBENzQ2NUU3MDA2NDQyRTkgLyogSlNQbHVnaW5DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJQTlEMjQ3RjcwRDc1N0UzNDAwRkRGOTU5IC8qIEpTTmF2aWdhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE5RDI0N0ZFMEQ3NTdFNjkwMEZERjk1OSAvKiBKU1BsdWdpbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBOUQyNDgwMDBENzU3RTY5MDBGREY5NTkgLyogSlNQbHVnaW5BcnJheS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUQyNDgwNjBENzU3RTdEMDBGREY5NTkgLyogSlNNaW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOUQyNDgwODBENzU3RTdEMDBGREY5NTkgLyog
SlNNaW1lVHlwZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCmluZGV4IDBiMzAxZjkuLmE3ODI5MmUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTYwLDcgKzYwLDYgQEAKICNpbmNsdWRlICJXaW5k
b3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2pzX2V2
ZW50cy5oIgotI2luY2x1ZGUgImtqc19uYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJranNfcHJveHku
aCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KQEAgLTE2MSw4ICsxNjAsNiBAQCBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dCYXNl
OjppbmZvID0geyAiV2luZG93IiwgMCwgJkpTRE9NV2luZG93QmFzZVRhYmxlIH07CiAgIGNyeXB0
byAgICAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkNyeXB0byAgICAgICAg
ICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGV2ZW50ICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpKU0RPTVdpbmRvd0Jhc2U6OkV2ZW50XyAgICAgICAgICAgICBEb250RGVsZXRlCiAgIGxvY2F0
aW9uICAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkxvY2F0aW9uXyAgICAg
ICAgICBEb250RGVsZXRlCi0gIG5hdmlnYXRvciAgICAgICAgICAgICBXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6Ok5hdmlnYXRvcl8gICAgICAgICBEb250RGVsZXRlCi0gIGNsaWVudEluZm9ybWF0
aW9uICAgICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkNsaWVudEluZm9ybWF0aW9uICBEb250
RGVsZXRlCiAjIC0tIEV2ZW50IExpc3RlbmVycyAtLQogICBvbmFib3J0ICAgICAgICAgICAgICAg
V2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbmFib3J0ICAgICAgICAgICAgRG9udERlbGV0ZQog
ICBvbmJsdXIgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbmJsdXIg
ICAgICAgICAgICAgRG9udERlbGV0ZQpAQCAtNDUzLDE4ICs0NTAsNiBAQCBKU1ZhbHVlICpKU0RP
TVdpbmRvd0Jhc2U6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiAgICAgICByZXR1cm4gdG9KUyhleGVjLCBkLT5tX2V2dCk7CiAgICAgY2FzZSBMb2Nh
dGlvbl86CiAgICAgICByZXR1cm4gbG9jYXRpb24oKTsKLSAgICBjYXNlIE5hdmlnYXRvcl86Ci0g
ICAgY2FzZSBDbGllbnRJbmZvcm1hdGlvbjogewotICAgICAgaWYgKCFhbGxvd3NBY2Nlc3NGcm9t
KGV4ZWMpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgIC8vIFN0b3JlIHRo
ZSBuYXZpZ2F0b3IgaW4gdGhlIG9iamVjdCBzbyB3ZSBnZXQgdGhlIHNhbWUgb25lIGVhY2ggdGlt
ZS4KLSAgICAgIE5hdmlnYXRvciogbiA9IG5ldyBOYXZpZ2F0b3IoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSwgaW1wbCgpLT5mcmFtZSgpKTsKLSAgICAgIC8v
IEZJWE1FOiB0aGlzIHdpbGwgbWFrZSB0aGUgIm5hdmlnYXRvciIgb2JqZWN0IGFjY2Vzc2libGUg
ZnJvbSB3aW5kb3dzIHRoYXQgZmFpbAotICAgICAgLy8gdGhlIHNlY3VyaXR5IGNoZWNrIHRoZSBm
aXJzdCB0aW1lLCBidXQgbm90IHN1YnNlcXVlbnQgdGltZXMsIHNlZW1zIHdlaXJkLgotICAgICAg
Y29uc3RfY2FzdDxKU0RPTVdpbmRvd0Jhc2UqPih0aGlzKS0+cHV0RGlyZWN0KCJuYXZpZ2F0b3Ii
LCBuLCBEb250RGVsZXRlKTsKLSAgICAgIGNvbnN0X2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4odGhp
cyktPnB1dERpcmVjdCgiY2xpZW50SW5mb3JtYXRpb24iLCBuLCBEb250RGVsZXRlKTsKLSAgICAg
IHJldHVybiBuOwotICAgIH0KICAgICBjYXNlIEltYWdlOgogICAgICAgaWYgKCFhbGxvd3NBY2Nl
c3NGcm9tKGV4ZWMpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZGEzODgyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU01pbWVUeXBlQXJy
YXkuaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJy
YXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgS0pTOworCiti
b29sIEpTTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIE1pbWVU
eXBlQXJyYXkqIG1pbWVUeXBlQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
K3sKKyAgICByZXR1cm4gbWltZVR5cGVBcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5
TmFtZSk7Cit9CisKK0pTVmFsdWUqIEpTTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNNaW1lVHlwZUFy
cmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNNaW1lVHlwZUFycmF5Kj4oc2xvdC5zbG90QmFz
ZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVHZXR0ZXIo
cHJvcGVydHlOYW1lKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOYXZpZ2F0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05hdmlnYXRvckN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MGYyMAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOYXZpZ2F0b3JDdXN0b20uY3Bw
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgTW9sa2Vu
dGluIChtb2xrZW50aW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgU3RlZmFuIFNj
aGltYW5za2kgKHNjaGltbWlAa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNOYXZpZ2F0b3Iu
aCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIEtKUzsKKworc3RhdGljIGJvb2wgbmVlZHNZb3VUdWJlUXVp
cmsoRXhlY1N0YXRlKiwgRnJhbWUqKTsKKworI2lmICFQTEFURk9STShXSU4pCisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWly
ayhFeGVjU3RhdGUqIGV4ZWMsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICAvLyBUaGlzIHF1aXJrIHdv
cmtzIGFyb3VuZCBhIG1pc3Rha2VuIGNoZWNrIGluIGFuIGFkIGF0IHlvdXR1YmUuY29tLgorICAg
IC8vIFRoZXJlJ3MgYSBmdW5jdGlvbiBjYWxsZWQgaXNTYWZhcmkgdGhhdCByZXR1cm5zIGZhbHNl
IGlmIHRoZSBmdW5jdGlvbgorICAgIC8vIGNhbGxlZCBpc1dpbmRvd3MgcmV0dXJucyB0cnVlOyB0
aHVzIHRoZSBzaXRlIG1hbGZ1bmN0aW9ucyB3aXRoIFdpbmRvd3MgU2FmYXJpLgorCisgICAgLy8g
RG8gdGhlIHF1aXJrIG9ubHkgaWYgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBpcyAiaXNXaW5kb3dzIi4K
KyAgICBGdW5jdGlvbkltcCogZnVuY3Rpb24gPSBleGVjLT5mdW5jdGlvbigpOworICAgIGlmICgh
ZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgSWRlbnRp
ZmllciYgaXNXaW5kb3dzRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlmaWVyKCJpc1dpbmRvd3Mi
KTsKKyAgICBpZiAoZnVuY3Rpb24tPmZ1bmN0aW9uTmFtZSgpICE9IGlzV2luZG93c0Z1bmN0aW9u
TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkg
aWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhbiAiaXNTYWZhcmkiIGZ1bmN0aW9uLgorICAg
IC8vIEhvd2V2ZXIsIHRoYXQgZnVuY3Rpb24gaXMgbm90IGl0c2VsZiBuYW1lZCAtLSBpdCBpcyBz
dG9yZWQgaW4gdGhlIGlzU2FmYXJpCisgICAgLy8gcHJvcGVydHksIHRob3VnaCwgc28gdGhhdCdz
IGhvdyB3ZSByZWNvZ25pemUgaXQuCisgICAgRXhlY1N0YXRlKiBjYWxsaW5nRXhlYyA9IGV4ZWMt
PmNhbGxpbmdFeGVjU3RhdGUoKTsKKyAgICBpZiAoIWNhbGxpbmdFeGVjKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgRnVuY3Rpb25JbXAqIGNhbGxpbmdGdW5jdGlvbiA9IGNhbGxpbmdFeGVj
LT5mdW5jdGlvbigpOworICAgIGlmICghY2FsbGluZ0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBjYWxsaW5nRXhlYy0+dGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzT2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0IElkZW50aWZpZXImIGlzU2FmYXJpRnVuY3Rpb25OYW1lID0gKm5ldyBJZGVudGlm
aWVyKCJpc1NhZmFyaSIpOworICAgIEpTVmFsdWUqIGlzU2FmYXJpRnVuY3Rpb24gPSB0aGlzT2Jq
ZWN0LT5nZXREaXJlY3QoaXNTYWZhcmlGdW5jdGlvbk5hbWUpOworICAgIGlmIChpc1NhZmFyaUZ1
bmN0aW9uICE9IGNhbGxpbmdGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgLy8gRklYTUU6IFRo
ZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hlY2sg
YWxvbmcgd2l0aCB0aGUKKyAgICAvLyBvdGhlciBzaW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxlIHdo
ZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdzIHNhZmUuCisgICAgaWYgKCFkb2N1bWVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRG8gdGhlIHF1aXJrIG9ubHkgb24gdGhl
IGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJzaW9uIG9mIFlvdVR1YmUuCisgICAgY29uc3Qg
S1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICh1cmwuaG9zdCgpICE9ICJ5b3V0
dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3LnlvdXR1YmUuY29tIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICh1cmwucGF0aCgpICE9ICIvIikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gQXMgd2l0aCBvdGhlciBzaXRlLXNwZWNpZmljIHF1aXJrcywgYWxsb3cg
d2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhpcyBvZmYuCisgICAgLy8gSW4gdGhlb3J5LCB0
aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMgdG8gY2hlY2sgaWYgdGhlaXIgZml4ZXMgYXJl
IGVmZmVjdGl2ZS4KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsK
KyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzZXR0
aW5ncy0+bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNlbmRpZgorCitKU1ZhbHVlKiBKU05hdmlnYXRvcjo6
YXBwVmVyc2lvbihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgTmF2aWdhdG9yKiBpbXAg
PSBzdGF0aWNfY2FzdDxOYXZpZ2F0b3IqPihpbXBsKCkpOworICAgIEZyYW1lKiBmcmFtZSA9IGlt
cC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4ganNTdHJpbmcoIiIp
OworCisgICAgaWYgKG5lZWRzWW91VHViZVF1aXJrKGV4ZWMsIGZyYW1lKSkKKyAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKCIiKTsKKyAgICByZXR1cm4ganNTdHJpbmcoaW1wLT5hcHBWZXJzaW9uKCkp
OworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FlNGQzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcApAQCAtMCww
ICsxLDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSlNQbHVnaW5BcnJheS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUGx1Z2luQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgS0pTOworCitib29sIEpTUGx1Z2luQXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3Rh
dGUqLCBQbHVnaW5BcnJheSogcGx1Z2luQXJyYXksIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gcGx1Z2luQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9w
ZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdpbkFycmF5OjpuYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU1BsdWdpbkFy
cmF5KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNQbHVnaW5BcnJheSo+KHNsb3Quc2xvdEJhc2Uo
KSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1lR2V0dGVyKHBy
b3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UGx1Z2luQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDc5ZDkKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQ3VzdG9tLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SlNQbHVnaW4uaCIKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdp
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBLSlM7CisKK2Jv
b2wgSlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBQbHVnaW4qIHBsdWdp
biwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBwbHVnaW4t
PmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlKiBKU1BsdWdp
bjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgSlNQbHVnaW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU1BsdWdpbio+KHNsb3Qu
c2xvdEJhc2UoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgdGhpc09iai0+aW1wbCgpLT5uYW1l
R2V0dGVyKHByb3BlcnR5TmFtZSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdh
dG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxYTg3Mi4uMDAwMDAwMAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19uYXZpZ2F0b3IuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50
aW4gKG1vbGtlbnRpbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2No
aW1hbnNraSAoc2NoaW1taUBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAia2pzX25hdmlnYXRvci5oIgotCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCi0jaW5j
bHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0j
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKLSNpbmNsdWRlICJMYW5ndWFnZS5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKLSNpbmNsdWRlICJTZXR0aW5n
cy5oIgotI2luY2x1ZGUgPGtqcy9vYmplY3Rfb2JqZWN0Lmg+Ci0KLSNpZm5kZWYgV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk0KLSNpZiBQTEFURk9STShNQUMpICYmIFBMQVRGT1JNKFBQQykKLSNk
ZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIKLSNlbGlmIFBMQVRGT1JN
KE1BQykgJiYgUExBVEZPUk0oWDg2KQotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9QTEFURk9S
TSAiTWFjSW50ZWwiCi0jZWxpZiBQTEFURk9STShXSU5fT1MpCi0jZGVmaW5lIFdFQkNPUkVfTkFW
SUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKLSNlbHNlCi0jZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9S
X1BMQVRGT1JNICIiCi0jZW5kaWYKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1Jf
UExBVEZPUk0KLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCi0jZGVmaW5lIFdF
QkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JF
X05BVklHQVRPUl9QUk9EVUNUCi0KLSNpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9T
VUIKLSNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIgIjIwMDMwMTA3IgotI2Vu
ZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NVQgotCi0jaWZuZGVmIFdF
QkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgotI2RlZmluZSBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1Ig
IkFwcGxlIENvbXB1dGVyLCBJbmMuIgotI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRP
Ul9WRU5ET1IKLQotI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCCi0jZGVmaW5l
IFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKLSNlbmRpZiAvLyBpZm5kZWYgV0VCQ09S
RV9OQVZJR0FUT1JfVkVORE9SX1NVQgotCi11c2luZyBuYW1lc3BhY2UgS0pTOwotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBsdWdp
bkJhc2UgOiBwdWJsaWMgRE9NT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBsdWdpbkJh
c2UoRXhlY1N0YXRlKik7Ci0gICAgICAgIHZpcnR1YWwgflBsdWdpbkJhc2UoKTsKLSAgICAgICAg
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2goYm9vbCByZWxvYWQpOwotCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZVBsdWdpbkRhdGFJZk5lY2Vzc2FyeSgpOwot
ICAgICAgICBzdGF0aWMgVmVjdG9yPFBsdWdpbkluZm8qPiogcGx1Z2luczsKLSAgICAgICAgc3Rh
dGljIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4qIG1pbWVzOwotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgc3RhdGljIGludCBtX3BsdWdJbkNhY2hlUmVmQ291bnQ7Ci0gICAgfTsKLQotCi0gICAgY2xh
c3MgUGx1Z2lucyA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFBs
dWdpbnMoRXhlY1N0YXRlKiBleGVjKSA6IFBsdWdpbkJhc2UoZXhlYykgeyB9Ci0gICAgICAgIHZp
cnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5KEV4
ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgICAgIGVudW0geyBMZW5ndGggfTsKLSAgICBwcml2
YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0gICAgICAg
IHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotICAgIH07Ci0KLSAgICBKU1ZhbHVl
KiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlz
dCYpOwotCi0gICAgY2xhc3MgTWltZVR5cGVzIDogcHVibGljIFBsdWdpbkJhc2UgewotICAgIHB1
YmxpYzoKLSAgICAgICAgTWltZVR5cGVzKEV4ZWNTdGF0ZSogZXhlYykgOiBQbHVnaW5CYXNlKGV4
ZWMpIHsgfTsKLSAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7Ci0gICAgICAgIEpTVmFsdWUq
IGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZv
OyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICAgICAgZW51bSB7
IExlbmd0aCB9OwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBpbmRleEdl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICAgICAgc3RhdGljIEpTVmFsdWUqIG5hbWVHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Ci0g
ICAgfTsKLQotICAgIGNsYXNzIFBsdWdpbiA6IHB1YmxpYyBQbHVnaW5CYXNlIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFBsdWdpbihFeGVjU3RhdGUqIGV4ZWMsIFBsdWdpbkluZm8qIGluZm8pIDog
UGx1Z2luQmFzZShleGVjKSwgbV9pbmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKLSAgICAgICAgSlNWYWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBp
bnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNz
SW5mbyBpbmZvOwotICAgICAgICBlbnVtIHsgTmFtZSwgRmlsZW5hbWUsIERlc2NyaXB0aW9uLCBM
ZW5ndGggfTsKLSAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMgSlNWYWx1ZSogaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jik7Ci0gICAgICAgIHN0YXRpYyBKU1ZhbHVlKiBuYW1lR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwotCi0g
ICAgICAgIFBsdWdpbkluZm8qIG1faW5mbzsKLSAgICB9OwotCi0gICAgY2xhc3MgTWltZVR5cGUg
OiBwdWJsaWMgUGx1Z2luQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBNaW1lVHlwZShFeGVj
U3RhdGUqIGV4ZWMsIE1pbWVDbGFzc0luZm8qIGluZm8pIDogUGx1Z2luQmFzZShleGVjKSwgbV9p
bmZvKGluZm8pIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgSlNW
YWx1ZSogZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4g
JmluZm87IH0KLSAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwotICAgICAgICBl
bnVtIHsgVHlwZSwgU3VmZml4ZXMsIERlc2NyaXB0aW9uLCBFbmFibGVkUGx1Z2luIH07Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgTWltZUNsYXNzSW5mbyogbV9pbmZvOwotICAgIH07Ci0KLX0KLQot
I2luY2x1ZGUgImtqc19uYXZpZ2F0b3IubHV0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y29uc3QgQ2xhc3NJbmZvIFBsdWdpbnM6OmluZm8gPSB7ICJQbHVnaW5BcnJheSIsIDAsICZQbHVn
aW5zVGFibGUgfTsKLWNvbnN0IENsYXNzSW5mbyBNaW1lVHlwZXM6OmluZm8gPSB7ICJNaW1lVHlw
ZUFycmF5IiwgMCwgJk1pbWVUeXBlc1RhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gUGx1Z2luOjpp
bmZvID0geyAiUGx1Z2luIiwgMCwgJlBsdWdpblRhYmxlIH07Ci1jb25zdCBDbGFzc0luZm8gTWlt
ZVR5cGU6OmluZm8gPSB7ICJNaW1lVHlwZSIsIDAsICZNaW1lVHlwZVRhYmxlIH07Ci0KLVZlY3Rv
cjxQbHVnaW5JbmZvKj4qIFBsdWdpbkJhc2U6OnBsdWdpbnMgPSAwOwotVmVjdG9yPE1pbWVDbGFz
c0luZm8qPiogUGx1Z2luQmFzZTo6bWltZXMgPSAwOwotaW50IFBsdWdpbkJhc2U6Om1fcGx1Z0lu
Q2FjaGVSZWZDb3VudCA9IDA7Ci0KLWNvbnN0IENsYXNzSW5mbyBOYXZpZ2F0b3I6OmluZm8gPSB7
ICJOYXZpZ2F0b3IiLCAwLCAmTmF2aWdhdG9yVGFibGUgfTsKLS8qCi1AYmVnaW4gTmF2aWdhdG9y
VGFibGUgMTMKLSAgYXBwQ29kZU5hbWUgICBOYXZpZ2F0b3I6OkFwcENvZGVOYW1lICAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBhcHBOYW1lICAgICAgIE5hdmlnYXRvcjo6
QXBwTmFtZSAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGFwcFZl
cnNpb24gICAgTmF2aWdhdG9yOjpBcHBWZXJzaW9uICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGV8UmVhZE9ubHkKLSAgbGFuZ3VhZ2UgICAgICBOYXZpZ2F0b3I6Okxhbmd1YWdlICAgICAgICAg
ICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB1c2VyQWdlbnQgICAgIE5hdmlnYXRv
cjo6VXNlckFnZW50ICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIHBs
YXRmb3JtICAgICAgTmF2aWdhdG9yOjpQbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgIERvbnRE
ZWxldGV8UmVhZE9ubHkKLSAgcGx1Z2lucyAgICAgICBOYXZpZ2F0b3I6Ol9QbHVnaW5zICAgICAg
ICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBtaW1lVHlwZXMgICAgIE5hdmln
YXRvcjo6X01pbWVUeXBlcyAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0g
IHByb2R1Y3QgICAgICAgTmF2aWdhdG9yOjpQcm9kdWN0ICAgICAgICAgICAgICAgICAgICAgIERv
bnREZWxldGV8UmVhZE9ubHkKLSAgcHJvZHVjdFN1YiAgICBOYXZpZ2F0b3I6OlByb2R1Y3RTdWIg
ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICB2ZW5kb3IgICAgICAgIE5h
dmlnYXRvcjo6VmVuZG9yICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5
Ci0gIHZlbmRvclN1YiAgICAgTmF2aWdhdG9yOjpWZW5kb3JTdWIgICAgICAgICAgICAgICAgICAg
IERvbnREZWxldGV8UmVhZE9ubHkKLSAgY29va2llRW5hYmxlZCBOYXZpZ2F0b3I6OkNvb2tpZUVu
YWJsZWQgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBqYXZhRW5hYmxlZCAg
IG5hdmlnYXRvclByb3RvRnVuY0phdmFFbmFibGVkICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKLUBl
bmQKLSovCi0KLU5hdmlnYXRvcjo6TmF2aWdhdG9yKEpTT2JqZWN0KiBwcm90b3R5cGUsIEZyYW1l
KiBmcmFtZSkKLSAgICA6IERPTU9iamVjdChwcm90b3R5cGUpCi0gICAgLCBtX2ZyYW1lKGZyYW1l
KQotewotfQotCi1ib29sIE5hdmlnYXRvcjo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gIHJldHVybiBnZXRTdGF0aWNQcm9wZXJ0eVNsb3Q8TmF2aWdhdG9yLCBKU09iamVjdD4o
ZXhlYywgJk5hdmlnYXRvclRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwotfQotCi1z
dGF0aWMgYm9vbCBuZWVkc1lvdVR1YmVRdWlyayhFeGVjU3RhdGUqLCBGcmFtZSopOwotCi0jaWYg
IVBMQVRGT1JNKFdJTikKLQotc3RhdGljIGlubGluZSBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4
ZWNTdGF0ZSosIEZyYW1lKikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbHNlCi0KLXN0
YXRpYyBib29sIG5lZWRzWW91VHViZVF1aXJrKEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGZyYW1l
KQotewotICAgIC8vIFRoaXMgcXVpcmsgd29ya3MgYXJvdW5kIGEgbWlzdGFrZW4gY2hlY2sgaW4g
YW4gYWQgYXQgeW91dHViZS5jb20uCi0gICAgLy8gVGhlcmUncyBhIGZ1bmN0aW9uIGNhbGxlZCBp
c1NhZmFyaSB0aGF0IHJldHVybnMgZmFsc2UgaWYgdGhlIGZ1bmN0aW9uCi0gICAgLy8gY2FsbGVk
IGlzV2luZG93cyByZXR1cm5zIHRydWU7IHRodXMgdGhlIHNpdGUgbWFsZnVuY3Rpb25zIHdpdGgg
V2luZG93cyBTYWZhcmkuCi0KLSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rp
b24ncyBuYW1lIGlzICJpc1dpbmRvd3MiLgotICAgIEZ1bmN0aW9uSW1wKiBmdW5jdGlvbiA9IGV4
ZWMtPmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyJiBpc1dpbmRvd3NGdW5jdGlvbk5hbWUgPSAq
bmV3IElkZW50aWZpZXIoImlzV2luZG93cyIpOwotICAgIGlmIChmdW5jdGlvbi0+ZnVuY3Rpb25O
YW1lKCkgIT0gaXNXaW5kb3dzRnVuY3Rpb25OYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBEbyB0aGUgcXVpcmsgb25seSBpZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGFu
ICJpc1NhZmFyaSIgZnVuY3Rpb24uCi0gICAgLy8gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBu
b3QgaXRzZWxmIG5hbWVkIC0tIGl0IGlzIHN0b3JlZCBpbiB0aGUgaXNTYWZhcmkKLSAgICAvLyBw
cm9wZXJ0eSwgdGhvdWdoLCBzbyB0aGF0J3MgaG93IHdlIHJlY29nbml6ZSBpdC4KLSAgICBFeGVj
U3RhdGUqIGNhbGxpbmdFeGVjID0gZXhlYy0+Y2FsbGluZ0V4ZWNTdGF0ZSgpOwotICAgIGlmICgh
Y2FsbGluZ0V4ZWMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBGdW5jdGlvbkltcCogY2Fs
bGluZ0Z1bmN0aW9uID0gY2FsbGluZ0V4ZWMtPmZ1bmN0aW9uKCk7Ci0gICAgaWYgKCFjYWxsaW5n
RnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBKU09iamVjdCogdGhpc09iamVj
dCA9IGNhbGxpbmdFeGVjLT50aGlzVmFsdWUoKTsKLSAgICBpZiAoIXRoaXNPYmplY3QpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciYgaXNTYWZhcmlG
dW5jdGlvbk5hbWUgPSAqbmV3IElkZW50aWZpZXIoImlzU2FmYXJpIik7Ci0gICAgSlNWYWx1ZSog
aXNTYWZhcmlGdW5jdGlvbiA9IHRoaXNPYmplY3QtPmdldERpcmVjdChpc1NhZmFyaUZ1bmN0aW9u
TmFtZSk7Ci0gICAgaWYgKGlzU2FmYXJpRnVuY3Rpb24gIT0gY2FsbGluZ0Z1bmN0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKTsgCi0gICAgLy8gRklYTUU6IFRoZSBkb2N1bWVudCBpcyBuZXZlciBudWxsLCBzbyB3
ZSBzaG91bGQgcmVtb3ZlIHRoaXMgY2hlY2sgYWxvbmcgd2l0aCB0aGUKLSAgICAvLyBvdGhlciBz
aW1pbGFyIG9uZXMgaW4gdGhpcyBmaWxlIHdoZW4gd2UgYXJlIGFic29sdXRlbHkgc3VyZSBpdCdz
IHNhZmUuCi0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gRG8gdGhlIHF1aXJrIG9ubHkgb24gdGhlIGZyb250IHBhZ2Ugb2YgdGhlIGdsb2JhbCB2ZXJz
aW9uIG9mIFlvdVR1YmUuCi0gICAgY29uc3QgS1VSTCYgdXJsID0gZG9jdW1lbnQtPnVybCgpOwot
ICAgIGlmICh1cmwuaG9zdCgpICE9ICJ5b3V0dWJlLmNvbSIgJiYgdXJsLmhvc3QoKSAhPSAid3d3
LnlvdXR1YmUuY29tIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICh1cmwucGF0aCgp
ICE9ICIvIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQXMgd2l0aCBvdGhlciBz
aXRlLXNwZWNpZmljIHF1aXJrcywgYWxsb3cgd2Vic2l0ZSBkZXZlbG9wZXJzIHRvIHR1cm4gdGhp
cyBvZmYuCi0gICAgLy8gSW4gdGhlb3J5LCB0aGlzIGFsbG93cyB3ZWJzaXRlIGRldmVsb3BlcnMg
dG8gY2hlY2sgaWYgdGhlaXIgZml4ZXMgYXJlIGVmZmVjdGl2ZS4KLSAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsgCi0gICAgaWYgKCFzZXR0aW5ncykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghc2V0dGluZ3MtPm5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5k
aWYKLQotSlNWYWx1ZSogTmF2aWdhdG9yOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAotewotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgQXBwQ29k
ZU5hbWU6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKCJNb3ppbGxhIik7Ci0gIGNhc2UgQXBwTmFtZToK
LSAgICByZXR1cm4ganNTdHJpbmcoIk5ldHNjYXBlIik7Ci0gIGNhc2UgQXBwVmVyc2lvbjogewot
ICAgIGlmIChuZWVkc1lvdVR1YmVRdWlyayhleGVjLCBtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKCIiKTsKLSAgICAvLyBWZXJzaW9uIGlzIGV2ZXJ5dGhpbmcgaW4gdGhlIHVzZXIg
YWdlbnQgc3RyaW5nIHBhc3QgdGhlICJNb3ppbGxhLyIgcHJlZml4LgotICAgIGNvbnN0IFN0cmlu
ZyB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRvY3Vt
ZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKHVzZXJBZ2VudC5zdWJzdHJpbmcodXNlckFnZW50LmZpbmQoJy8nKSArIDEpKTsK
LSAgfQotICBjYXNlIFByb2R1Y3Q6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdB
VE9SX1BST0RVQ1QpOwotICBjYXNlIFByb2R1Y3RTdWI6Ci0gICAgcmV0dXJuIGpzU3RyaW5nKFdF
QkNPUkVfTkFWSUdBVE9SX1BST0RVQ1RfU1VCKTsKLSAgY2FzZSBWZW5kb3I6Ci0gICAgcmV0dXJu
IGpzU3RyaW5nKFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUik7Ci0gIGNhc2UgVmVuZG9yU3ViOgot
ICAgIHJldHVybiBqc1N0cmluZyhXRUJDT1JFX05BVklHQVRPUl9WRU5ET1JfU1VCKTsKLSAgY2Fz
ZSBMYW5ndWFnZToKLSAgICByZXR1cm4ganNTdHJpbmcoZGVmYXVsdExhbmd1YWdlKCkpOwotICBj
YXNlIFVzZXJBZ2VudDoKLSAgICByZXR1cm4ganNTdHJpbmcobV9mcmFtZS0+bG9hZGVyKCktPnVz
ZXJBZ2VudChtX2ZyYW1lLT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkg
OiBLVVJMKCkpKTsKLSAgY2FzZSBQbGF0Zm9ybToKLSAgICByZXR1cm4ganNTdHJpbmcoV0VCQ09S
RV9OQVZJR0FUT1JfUExBVEZPUk0pOwotICBjYXNlIF9QbHVnaW5zOgotICAgIHJldHVybiBuZXcg
UGx1Z2lucyhleGVjKTsKLSAgY2FzZSBfTWltZVR5cGVzOgotICAgIHJldHVybiBuZXcgTWltZVR5
cGVzKGV4ZWMpOwotICBjYXNlIENvb2tpZUVuYWJsZWQ6Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihj
b29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKSk7Ci0gIH0KLSAgcmV0dXJuIDA7Ci19
Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwotCi12b2lkIFBsdWdpbkJhc2U6OmNhY2hlUGx1Z2luRGF0YUlmTmVj
ZXNzYXJ5KCkKLXsKLSAgICBpZiAoIXBsdWdpbnMpIHsKLSAgICAgICAgcGx1Z2lucyA9IG5ldyBW
ZWN0b3I8UGx1Z2luSW5mbyo+OwotICAgICAgICBtaW1lcyA9IG5ldyBWZWN0b3I8TWltZUNsYXNz
SW5mbyo+OwotICAgICAgICAKLSAgICAgICAgLy8gcmVhZCBjb25maWd1cmF0aW9uCi0gICAgICAg
IFBsdWdpbkluZm9TdG9yZSBjOwotICAgICAgICB1bnNpZ25lZCBwbHVnaW5Db3VudCA9IGMucGx1
Z2luQ291bnQoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBsdWdpbkNvdW50
OyBuKyspIHsKLSAgICAgICAgICAgIFBsdWdpbkluZm8qIHBsdWdpbiA9IGMuY3JlYXRlUGx1Z2lu
SW5mb0ZvclBsdWdpbkF0SW5kZXgobik7Ci0gICAgICAgICAgICBpZiAoIXBsdWdpbikgCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBsdWdpbnMt
PmFwcGVuZChwbHVnaW4pOwotICAgICAgICAgICAgaWYgKHBsdWdpbi0+bWltZXMuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBW
ZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW4tPm1pbWVzLmVuZCgp
OwotICAgICAgICAgICAgZm9yIChWZWN0b3I8TWltZUNsYXNzSW5mbyo+OjppdGVyYXRvciBpdHIg
PSBwbHVnaW4tPm1pbWVzLmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKQotICAgICAgICAgICAg
ICAgIG1pbWVzLT5hcHBlbmQoKml0cik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBsdWdpbkJh
c2U6OlBsdWdpbkJhc2UoRXhlY1N0YXRlKiBleGVjKQotICAgIDogRE9NT2JqZWN0KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpCi17Ci0gICAgY2FjaGVQbHVn
aW5EYXRhSWZOZWNlc3NhcnkoKTsKLSAgICBtX3BsdWdJbkNhY2hlUmVmQ291bnQrKzsKLX0KLQot
UGx1Z2luQmFzZTo6flBsdWdpbkJhc2UoKQotewotICAgIG1fcGx1Z0luQ2FjaGVSZWZDb3VudC0t
OwotICAgIGlmICghbV9wbHVnSW5DYWNoZVJlZkNvdW50KSB7Ci0gICAgICAgIGlmIChwbHVnaW5z
KSB7Ci0gICAgICAgICAgICBkZWxldGVBbGxWYWx1ZXMoKnBsdWdpbnMpOwotICAgICAgICAgICAg
ZGVsZXRlIHBsdWdpbnM7Ci0gICAgICAgICAgICBwbHVnaW5zID0gMDsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobWltZXMpIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFZhbHVlcygqbWltZXMpOwot
ICAgICAgICAgICAgZGVsZXRlIG1pbWVzOwotICAgICAgICAgICAgbWltZXMgPSAwOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIFBsdWdpbkJhc2U6OnJlZnJlc2goYm9vbCByZWxvYWQpCi17
Ci0gICAgaWYgKHBsdWdpbnMpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCpwbHVnaW5zKTsK
LSAgICAgICAgZGVsZXRlIHBsdWdpbnM7Ci0gICAgICAgIHBsdWdpbnMgPSAwOwotICAgIH0KLSAg
ICBpZiAobWltZXMpIHsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptaW1lcyk7Ci0gICAgICAg
IGRlbGV0ZSBtaW1lczsKLSAgICAgICAgbWltZXMgPSAwOwotICAgIH0KLSAgICAKLSAgICByZWZy
ZXNoUGx1Z2lucyhyZWxvYWQpOwotICAgIGNhY2hlUGx1Z2luRGF0YUlmTmVjZXNzYXJ5KCk7Ci19
Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi0KLS8qCi1AYmVnaW4gUGx1Z2luc1RhYmxlIDIKLSAgbGVuZ3Ro
ICAgICAgICBQbHVnaW5zOjpMZW5ndGggICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRl
fFJlYWRPbmx5Ci0gIHJlZnJlc2ggICAgICAgcGx1Z2luc0Z1bmN0aW9uUmVmcmVzaCAgICAgICAg
ICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCi1AZW5kCi0qLwotCi1KU1ZhbHVlKiBQbHVn
aW5zOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAot
ewotICBBU1NFUlQodG9rZW4gPT0gTGVuZ3RoKTsKLSAgcmV0dXJuIGpzTnVtYmVyKHBsdWdpbnMt
PnNpemUoKSk7Ci19Ci0KLUpTVmFsdWUqIFBsdWdpbnM6OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICByZXR1cm4gbmV3IFBsdWdp
bihleGVjLCBwbHVnaW5zLT5hdChzbG90LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2lu
czo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvcmlnaW5hbE9iamVjdCwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
Ci17Ci0gICAgQXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
LSAgICBWZWN0b3I8UGx1Z2luSW5mbyo+OjppdGVyYXRvciBlbmQgPSBwbHVnaW5zLT5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHBsdWdpbnMtPmJl
Z2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgIFBsdWdpbkluZm8qIHBsID0gKml0
cjsKLSAgICAgICAgaWYgKHBsLT5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgUGx1Z2luKGV4ZWMsIHBsKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KLWJvb2wgUGx1Z2luczo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCi17Ci0gICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KCZQ
bHVnaW5zVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBpZiAo
ZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgICAgc2xvdC5zZXRTdGF0aWNFbnRyeSh0aGlz
LCBlbnRyeSwgc3RhdGljRnVuY3Rpb25HZXR0ZXIpOwotICAgICAgZWxzZQotICAgICAgICBzbG90
LnNldFN0YXRpY0VudHJ5KHRoaXMsIGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxQbHVnaW5zPik7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBwbHVnaW5zWyNd
Ci0gICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpID0gcHJvcGVydHlOYW1l
LnRvVUludDMyKCZvayk7Ci0gICAgICAgIGlmIChvayAmJiBpIDwgcGx1Z2lucy0+c2l6ZSgpKSB7
Ci0gICAgICAgICAgICBzbG90LnNldEN1c3RvbUluZGV4KHRoaXMsIGksIGluZGV4R2V0dGVyKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGx1Z2lu
W25hbWVdCi0gICAgICAgIEF0b21pY1N0cmluZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0
eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGVuZCA9IHBsdWdp
bnMtPmVuZCgpOwotICAgICAgICBmb3IgKFZlY3RvcjxQbHVnaW5JbmZvKj46Oml0ZXJhdG9yIGl0
ciA9IHBsdWdpbnMtPmJlZ2luKCk7IGl0ciAhPSBlbmQ7IGl0cisrKSB7Ci0gICAgICAgICAgICBp
ZiAoKCppdHIpLT5uYW1lID09IGF0b21pY1Byb3BlcnR5TmFtZSkgewotICAgICAgICAgICAgICAg
IHNsb3Quc2V0Q3VzdG9tKHRoaXMsIG5hbWVHZXR0ZXIpOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFBs
dWdpbkJhc2U6OmdldE93blByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwot
fQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLQotLyoKLUBiZWdpbiBNaW1lVHlwZXNUYWJsZSAxCi0gIGxlbmd0
aCAgICAgICAgTWltZVR5cGVzOjpMZW5ndGggICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotQGVu
ZAotKi8KLQotSlNWYWx1ZSogTWltZVR5cGVzOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBBU1NFUlQodG9rZW4gPT0gTGVuZ3RoKTsKLSAg
cmV0dXJuIGpzTnVtYmVyKG1pbWVzLT5zaXplKCkpOwotfQotCi1KU1ZhbHVlKiBNaW1lVHlwZXM6
OmluZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkK
LXsKLSAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4ZWMsIG1pbWVzLT5hdChzbG90LmluZGV4KCkp
KTsKLX0KLQotSlNWYWx1ZSogTWltZVR5cGVzOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBBdG9taWNTdHJpbmcgYXRvbWljUHJv
cGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwotICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0
ZXJhdG9yIGVuZCA9IG1pbWVzLT5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZv
Kj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5iZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewot
ICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtID0gKCppdHIpOwotICAgICAgICBpZiAobS0+dHlwZSA9
PSBhdG9taWNQcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE1pbWVUeXBlKGV4
ZWMsIG0pOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBNaW1l
VHlwZXM6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hF
bnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSgmTWltZVR5cGVzVGFibGUsIHByb3BlcnR5
TmFtZSk7Ci0gICAgaWYgKGVudHJ5KSB7Ci0gICAgICBzbG90LnNldFN0YXRpY0VudHJ5KHRoaXMs
IGVudHJ5LCBzdGF0aWNWYWx1ZUdldHRlcjxNaW1lVHlwZXM+KTsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIG1pbWVUeXBlc1sjXQotICAgICAgICBib29sIG9r
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSA9IHByb3BlcnR5TmFtZS50b1VJbnQzMigmb2spOwot
ICAgICAgICBpZiAob2sgJiYgaSA8IG1pbWVzLT5zaXplKCkpIHsKLSAgICAgICAgICAgIHNsb3Qu
c2V0Q3VzdG9tSW5kZXgodGhpcywgaSwgaW5kZXhHZXR0ZXIpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW1lVHlwZXNbbmFtZV0KLSAgICAgICAg
QXRvbWljU3RyaW5nIGF0b21pY1Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsKLSAgICAgICAg
VmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgZW5kID0gbWltZXMtPmVuZCgpOwotICAg
ICAgICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IG1pbWVzLT5i
ZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlw
ZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotCi0vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi0vKgotQGJlZ2luIFBsdWdpblRhYmxlIDQKLSAgbmFtZSAgICAgICAgICBQ
bHVnaW46Ok5hbWUgICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGZpbGVuYW1lICAg
ICAgUGx1Z2luOjpGaWxlbmFtZSAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQotICBkZXNjcmlw
dGlvbiAgIFBsdWdpbjo6RGVzY3JpcHRpb24gICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgbGVu
Z3RoICAgICAgICBQbHVnaW46Okxlbmd0aCAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci1A
ZW5kCi0qLwotCi1KU1ZhbHVlKiBQbHVnaW46OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
TmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+bmFtZSk7Ci0gICAgY2FzZSBG
aWxlbmFtZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZmlsZSk7Ci0gICAgY2Fz
ZSBEZXNjcmlwdGlvbjoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKG1faW5mby0+ZGVzYyk7Ci0g
ICAgY2FzZSBMZW5ndGg6IAotICAgICAgICByZXR1cm4ganNOdW1iZXIobV9pbmZvLT5taW1lcy5z
aXplKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVCgwKTsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1KU1ZhbHVlKiBQbHVnaW46OmluZGV4R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVn
aW4qIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOwotICAg
IHJldHVybiBuZXcgTWltZVR5cGUoZXhlYywgdGhpc09iai0+bV9pbmZvLT5taW1lcy5hdChzbG90
LmluZGV4KCkpKTsKLX0KLQotSlNWYWx1ZSogUGx1Z2luOjpuYW1lR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIG9yaWdpbmFsT2JqZWN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBQbHVnaW4qIHRoaXNPYmog
PSBzdGF0aWNfY2FzdDxQbHVnaW4qPihzbG90LnNsb3RCYXNlKCkpOwotICAgIEF0b21pY1N0cmlu
ZyBhdG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgVmVjdG9yPE1pbWVDbGFz
c0luZm8qPjo6aXRlcmF0b3IgZW5kID0gdGhpc09iai0+bV9pbmZvLT5taW1lcy5lbmQoKTsKLSAg
ICBmb3IgKFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj46Oml0ZXJhdG9yIGl0ciA9IHRoaXNPYmotPm1f
aW5mby0+bWltZXMuYmVnaW4oKTsgaXRyICE9IGVuZDsgaXRyKyspIHsKLSAgICAgICAgTWltZUNs
YXNzSW5mbyogbSA9ICgqaXRyKTsKLSAgICAgICAgaWYgKG0tPnR5cGUgPT0gYXRvbWljUHJvcGVy
dHlOYW1lKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBNaW1lVHlwZShleGVjLCBtKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLQotYm9vbCBQbHVnaW46OmdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSgmUGx1Z2luVGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKGVu
dHJ5KSB7Ci0gICAgICAgIHNsb3Quc2V0U3RhdGljRW50cnkodGhpcywgZW50cnksIHN0YXRpY1Zh
bHVlR2V0dGVyPFBsdWdpbj4pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBwbHVnaW5bI10KLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgdW5zaWduZWQg
aW50IGkgPSBwcm9wZXJ0eU5hbWUudG9VSW50MzIoJm9rKTsKLSAgICAgICAgaWYgKG9rICYmIGkg
PCBtX2luZm8tPm1pbWVzLnNpemUoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRDdXN0b21JbmRl
eCh0aGlzLCBpLCBpbmRleEdldHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIHBsdWdpblsibmFtZSJdCi0gICAgICAgIEF0b21pY1N0cmluZyBh
dG9taWNQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7Ci0gICAgICAgIFZlY3RvcjxNaW1lQ2xh
c3NJbmZvKj46Oml0ZXJhdG9yIGVuZCA9IG1faW5mby0+bWltZXMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoVmVjdG9yPE1pbWVDbGFzc0luZm8qPjo6aXRlcmF0b3IgaXRyID0gbV9pbmZvLT5taW1lcy5i
ZWdpbigpOyBpdHIgIT0gZW5kOyBpdHIrKykgewotICAgICAgICAgICAgaWYgKCgqaXRyKS0+dHlw
ZSA9PSBhdG9taWNQcm9wZXJ0eU5hbWUpIHsKLSAgICAgICAgICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBuYW1lR2V0dGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBQbHVnaW5CYXNlOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKLX0KLQotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCi0vKgotQGJlZ2luIE1pbWVUeXBlVGFibGUgNAotICB0eXBlICAgICAg
ICAgIE1pbWVUeXBlOjpUeXBlICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKLSAgc3VmZml4
ZXMgICAgICBNaW1lVHlwZTo6U3VmZml4ZXMgICAgICBEb250RGVsZXRlfFJlYWRPbmx5Ci0gIGRl
c2NyaXB0aW9uICAgTWltZVR5cGU6OkRlc2NyaXB0aW9uICAgRG9udERlbGV0ZXxSZWFkT25seQot
ICBlbmFibGVkUGx1Z2luIE1pbWVUeXBlOjpFbmFibGVkUGx1Z2luIERvbnREZWxldGV8UmVhZE9u
bHkKLUBlbmQKLSovCi0KLUpTVmFsdWUqIE1pbWVUeXBlOjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFR5cGU6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnR5cGUpOwotICAg
IGNhc2UgU3VmZml4ZXM6Ci0gICAgICAgIHJldHVybiBqc1N0cmluZyhtX2luZm8tPnN1ZmZpeGVz
KTsKLSAgICBjYXNlIERlc2NyaXB0aW9uOgotICAgICAgICByZXR1cm4ganNTdHJpbmcobV9pbmZv
LT5kZXNjKTsKLSAgICBjYXNlIEVuYWJsZWRQbHVnaW46IHsKLSAgICAgICAgRnJhbWUqIGZyYW1l
ID0gdG9KU0RPTVdpbmRvdyhleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCktPmZy
YW1lKCk7Ci0gICAgICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgICAgICBpZiAoc2V0dGluZ3MgJiYgc2V0dGluZ3Mt
PmFyZVBsdWdpbnNFbmFibGVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFBsdWdpbihleGVj
LCBtX2luZm8tPnBsdWdpbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgTWltZVR5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQotewotICAgIHJldHVybiBnZXRTdGF0aWNWYWx1ZVNsb3Q8TWltZVR5cGUsIFBsdWdp
bkJhc2U+KGV4ZWMsICZNaW1lVHlwZVRhYmxlLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwot
fQotCi1KU1ZhbHVlKiBwbHVnaW5zRnVuY3Rpb25SZWZyZXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIFBsdWdpbkJhc2U6OnJlZnJlc2goYXJn
c1swXS0+dG9Cb29sZWFuKGV4ZWMpKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5jSmF2YUVuYWJsZWQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCi17Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmTmF2aWdhdG9yOjppbmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKLSAgICBOYXZpZ2F0b3IqIG5hdiA9IHN0YXRpY19jYXN0PE5hdmlnYXRvcio+
KHRoaXNPYmopOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IG5hdi0+ZnJhbWUoKSA/IG5hdi0+
ZnJhbWUoKS0+c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihzZXR0aW5ncyAm
JiBzZXR0aW5ncy0+aXNKYXZhRW5hYmxlZCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMva2pzX25hdmlnYXRvci5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9ranNfbmF2aWdhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUx
NmY3ZWEuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfbmF2aWdhdG9yLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqLwotCi0jaWZuZGVmIGtqc19uYXZpZ2F0b3JfaAotI2RlZmluZSBranNfbmF2aWdhdG9yX2gK
LQotI2luY2x1ZGUgImtqc19iaW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAg
IGNsYXNzIEZyYW1lOwotCi0gICAgY2xhc3MgTmF2aWdhdG9yIDogcHVibGljIERPTU9iamVjdCB7
Ci0gICAgcHVibGljOgotICAgICAgICBOYXZpZ2F0b3IoS0pTOjpKU09iamVjdCogcHJvdG90eXBl
LCBGcmFtZSopOwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoS0pT
OjpFeGVjU3RhdGUqLCBjb25zdCBLSlM6OklkZW50aWZpZXImLCBLSlM6OlByb3BlcnR5U2xvdCYp
OwotICAgICAgICBLSlM6OkpTVmFsdWUqIGdldFZhbHVlUHJvcGVydHkoS0pTOjpFeGVjU3RhdGUq
LCBpbnQgdG9rZW4pIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGNvbnN0IEtKUzo6Q2xhc3NJbmZv
KiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQotICAgICAgICBzdGF0aWMgY29u
c3QgS0pTOjpDbGFzc0luZm8gaW5mbzsKLQotICAgICAgICBlbnVtIHsgQXBwQ29kZU5hbWUsIEFw
cE5hbWUsIEFwcFZlcnNpb24sIExhbmd1YWdlLCBVc2VyQWdlbnQsIFBsYXRmb3JtLAotICAgICAg
ICAgICAgICAgX1BsdWdpbnMsIF9NaW1lVHlwZXMsIFByb2R1Y3QsIFByb2R1Y3RTdWIsIFZlbmRv
ciwgVmVuZG9yU3ViLCBDb29raWVFbmFibGVkIH07Ci0KLSAgICAgICAgRnJhbWUqIGZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRnJhbWUq
IG1fZnJhbWU7Ci0gICAgfTsKLQotICAgIEtKUzo6SlNWYWx1ZSogbmF2aWdhdG9yUHJvdG9GdW5j
SmF2YUVuYWJsZWQoS0pTOjpFeGVjU3RhdGUqLCBLSlM6OkpTT2JqZWN0KiwgY29uc3QgS0pTOjpM
aXN0Jik7Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmNwcCBiL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKaW5kZXggYmVjNmQ4
My4uN2JmOTIyYyAxMDA3NTUKLS0tIGEvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAorKysgYi9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwIGIvV2ViQ29yZS9kb20vRE9N
SW1wbGVtZW50YXRpb24uY3BwCmluZGV4IGRiMjc3ZDUuLjNlMWQ0ZjQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9ET01JbXBs
ZW1lbnRhdGlvbi5jcHAKQEAgLTM4LDggKzM4LDggQEAKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIK
ICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgotI2luY2x1ZGUg
IlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0RG9jdW1lbnQuaCIKQEAgLTM2NiwxNiAr
MzY2LDIwIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVE
b2N1bWVudChjb25zdCBTdHJpbmcmIHR5cGUsIEZyYW1lCiAgICAgICAgIHJldHVybiBuZXcgRlRQ
RGlyZWN0b3J5RG9jdW1lbnQodGhpcywgZnJhbWUpOwogI2VuZGlmCiAKKyAgICBQbHVnaW5EYXRh
KiBwbHVnaW5EYXRhID0gMDsKKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgcGx1Z2luRGF0YSA9IGZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKTsKKwogICAgIC8vIFBE
RiBpcyBvbmUgaW1hZ2UgdHlwZSBmb3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0
LWluIHN1cHBvcnQuCiAgICAgLy8gV2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3Zl
ciBhbGwgaW1hZ2UgdHlwZXMsIG9idmlvdXNseS4KLSAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0
aW9uL3BkZiIgfHwgdHlwZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBv
cnRzTUlNRVR5cGUodHlwZSkpCisgICAgaWYgKCh0eXBlID09ICJhcHBsaWNhdGlvbi9wZGYiIHx8
IHR5cGUgPT0gInRleHQvcGRmIikgJiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0
c01pbWVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KHRoaXMs
IGZyYW1lKTsKICAgICBpZiAoSW1hZ2U6OnN1cHBvcnRzVHlwZSh0eXBlKSkKICAgICAgICAgcmV0
dXJuIG5ldyBJbWFnZURvY3VtZW50KHRoaXMsIGZyYW1lKTsKICAgICAvLyBFdmVyeXRoaW5nIGVs
c2UgZXhjZXB0IHRleHQvcGxhaW4gY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGx1Z2lucy4gSW4gcGFy
dGljdWxhciwgQWRvYmUgU1ZHIFZpZXdlciBzaG91bGQgYmUgdXNlZCBmb3IgU1ZHLCBpZiBpbnN0
YWxsZWQuCiAgICAgLy8gRGlzYWxsb3dpbmcgcGx1Zy1pbnMgdG8gdXNlIHRleHQvcGxhaW4gcHJl
dmVudHMgcGx1Zy1pbnMgZnJvbSBoaWphY2tpbmcgYSBmdW5kYW1lbnRhbCB0eXBlIHRoYXQgdGhl
IGJyb3dzZXIgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlLAogICAgIC8vIGFuZCBhbHNvIHNlcnZlcyBh
cyBhbiBvcHRpbWl6YXRpb24gdG8gcHJldmVudCBsb2FkaW5nIHRoZSBwbHVnLWluIGRhdGFiYXNl
IGluIHRoZSBjb21tb24gY2FzZS4KLSAgICBpZiAodHlwZSAhPSAidGV4dC9wbGFpbiIgJiYgUGx1
Z2luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBlKHR5cGUpKSAKKyAgICBpZiAodHlwZSAhPSAi
dGV4dC9wbGFpbiIgJiYgcGx1Z2luRGF0YSAmJiBwbHVnaW5EYXRhLT5zdXBwb3J0c01pbWVUeXBl
KHR5cGUpKSAKICAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0aGlzLCBmcmFtZSk7
CiAgICAgaWYgKGlzVGV4dE1JTUVUeXBlKHR5cGUpKQogICAgICAgICByZXR1cm4gbmV3IFRleHRE
b2N1bWVudCh0aGlzLCBmcmFtZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5jcHAgYi9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggOTMxZjcwNS4u
ODg2Yzk1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBi
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtNjcsNyArNjcsNyBAQAogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKLSNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgog
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtMTU5NSw3ICsxNTk1LDkgQEAgYm9vbCBGcmFt
ZUxvYWRlcjo6c2hvdWxkVXNlUGx1Z2luKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgYm9vbAogICAgIC8vIEFsbG93IG90aGVyIHBsdWctaW5zIHRvIHdpbiBvdmVyIFF1
aWNrVGltZSBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgYSBwbHVnLWluIHRoYXQK
ICAgICAvLyBjYW4gaGFuZGxlIFRJRkYgKHdoaWNoIFF1aWNrVGltZSBjYW4gYWxzbyBoYW5kbGUp
IHRoZXkgcHJvYmFibHkgaW50ZW5kZWQgdG8gb3ZlcnJpZGUgUVQuCiAgICAgaWYgKChtaW1lVHlw
ZSA9PSAiaW1hZ2UvdGlmZiIgfHwgbWltZVR5cGUgPT0gImltYWdlL3RpZiIgfHwgbWltZVR5cGUg
PT0gImltYWdlL3gtdGlmZiIpKSB7Ci0gICAgICAgIFN0cmluZyBwbHVnaW5OYW1lID0gUGx1Z2lu
SW5mb1N0b3JlOjpwbHVnaW5OYW1lRm9yTUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICBTdHJp
bmcgcGx1Z2luTmFtZTsKKyAgICAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAg
IHBsdWdpbk5hbWUgPSBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+cGx1Z2luTmFtZUZv
ck1pbWVUeXBlKG1pbWVUeXBlKTsKICAgICAgICAgaWYgKCFwbHVnaW5OYW1lLmlzRW1wdHkoKSAm
JiAhcGx1Z2luTmFtZS5jb250YWlucygiUXVpY2tUaW1lIiwgZmFsc2UpKSAKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwIGIvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggMjJmNzQ4OS4uZWRiNWZiNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJIaXN0b3J5LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVk
ZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTE1NCw2ICsxNTUsMTAgQEAg
dm9pZCBET01XaW5kb3c6OmNsZWFyKCkKICAgICBpZiAobV9jb25zb2xlKQogICAgICAgICBtX2Nv
bnNvbGUtPmRpc2Nvbm5lY3RGcmFtZSgpOwogICAgIG1fY29uc29sZSA9IDA7CisKKyAgICBpZiAo
bV9uYXZpZ2F0b3IpCisgICAgICAgIG1fbmF2aWdhdG9yLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAg
ICBtX25hdmlnYXRvciA9IDA7CiB9CiAKIFNjcmVlbiogRE9NV2luZG93OjpzY3JlZW4oKSBjb25z
dApAQCAtMjE5LDYgKzIyNCwxMyBAQCBDb25zb2xlKiBET01XaW5kb3c6OmNvbnNvbGUoKSBjb25z
dAogICAgIHJldHVybiBtX2NvbnNvbGUuZ2V0KCk7CiB9CiAKK05hdmlnYXRvciogRE9NV2luZG93
OjpuYXZpZ2F0b3IoKSBjb25zdAoreworICAgIGlmICghbV9uYXZpZ2F0b3IpCisgICAgICAgIG1f
bmF2aWdhdG9yID0gTmF2aWdhdG9yOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbmF2
aWdhdG9yLmdldCgpOworfQorCiAjaWYgRU5BQkxFKENST1NTX0RPQ1VNRU5UX01FU1NBR0lORykK
IHZvaWQgRE9NV2luZG93Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0
IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHVyaSwgRE9NV2luZG93KiBzb3VyY2UpIGNv
bnN0CiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmggYi9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmgKaW5kZXggYWRiNDczMS4uODE4ZmYxNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaApAQCAtNDQs
NiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRmxvYXRSZWN0OwogICAg
IGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEhpc3Rvcnk7CisgICAgY2xhc3MgTmF2aWdhdG9yOwog
ICAgIGNsYXNzIFNjcmVlbjsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC02
OSw2ICs3MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogc2Nyb2xs
YmFycygpIGNvbnN0OwogICAgICAgICBCYXJJbmZvKiBzdGF0dXNiYXIoKSBjb25zdDsKICAgICAg
ICAgQmFySW5mbyogdG9vbGJhcigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIG5hdmlnYXRv
cigpIGNvbnN0OworICAgICAgICBOYXZpZ2F0b3IqIGNsaWVudEluZm9ybWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbmF2aWdhdG9yKCk7IH0KIAogICAgICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVj
dGlvbigpOwogCkBAIC0xNzAsNiArMTczLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxCYXJJbmZvPiBtX3N0YXR1c2JhcjsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8QmFySW5mbz4gbV90b29sYmFyOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxDb25zb2xl
PiBtX2NvbnNvbGU7CisgICAgICAgIG11dGFibGUgUmVmUHRyPE5hdmlnYXRvcj4gbV9uYXZpZ2F0
b3I7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCBl
ZjliYjliLi5jYjZiNDM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAor
KysgYi9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbApAQCAtNDQsNiArNDQsOCBAQCBtb2R1bGUg
d2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyBzY3JvbGxi
YXJzOwogICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBCYXJJbmZvIHN0YXR1c2JhcjsK
ICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0gQmFySW5mbyB0b29sYmFyOworICAgICAg
ICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBOYXZpZ2F0b3IgbmF2aWdhdG9yOworICAgICAgICBh
dHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBOYXZpZ2F0b3IgY2xpZW50SW5mb3JtYXRpb247CiAKICAg
ICAgICAgRE9NU2VsZWN0aW9uIGdldFNlbGVjdGlvbigpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAppbmRleCA4ZWVjNmUwLi4zYTNkYzk3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUx
LDcgKzUxLDYgQEAKICNpbmNsdWRlICJNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGx1Z2luSW5mb1N0b3JlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bWFnZS5oIgogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBl
Nzc5NThlLi5jNDMyYTI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVO
YW1lcy5oIgorI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9uLmgiCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IGUw
MDdjMzcuLmQxYjIyOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5oCisrKyBiL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCkBAIC05OSw2ICs5OSw3IEBAIGNsYXNzIEtKU1Byb3h5OwogY2xh
c3MgS1VSTDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOworY2xhc3MgUGx1Z2luRGF0YTsKIGNs
YXNzIFJhbmdlOwogY2xhc3MgUmVndWxhckV4cHJlc3Npb247CiBjbGFzcyBSZW5kZXJQYXJ0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAgYi9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjhhZWE0Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKQEAgLTAsMCArMSwx
NzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtk
ZS5vcmcpCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBNb2xrZW50aW4gKG1vbGtlbnRp
bkBrZGUub3JnKQorICogIENvcHlyaWdodCAoYykgMjAwMCBTdGVmYW4gU2NoaW1hbnNraSAoc2No
aW1taUBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNB
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTmF2aWdhdG9yLmgiCisKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIk1pbWVUeXBlQXJy
YXkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlBsdWdpbkFycmF5
LmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNp
Zm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0KKyNpZiBQTEFURk9STShNQUMpICYmIFBM
QVRGT1JNKFBQQykKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUExBVEZPUk0gIk1hY1BQQyIK
KyNlbGlmIFBMQVRGT1JNKE1BQykgJiYgUExBVEZPUk0oWDg2KQorI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9QTEFURk9STSAiTWFjSW50ZWwiCisjZWxpZiBQTEFURk9STShXSU5fT1MpCisjZGVm
aW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICJXaW4zMiIKKyNlbHNlCisjZGVmaW5lIFdF
QkNPUkVfTkFWSUdBVE9SX1BMQVRGT1JNICIiCisjZW5kaWYKKyNlbmRpZiAvLyBpZm5kZWYgV0VC
Q09SRV9OQVZJR0FUT1JfUExBVEZPUk0KKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9E
VUNUCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1BST0RVQ1QgIkdlY2tvIgorI2VuZGlmIC8v
IGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUCisKKyNpZm5kZWYgV0VCQ09SRV9OQVZJ
R0FUT1JfUFJPRFVDVF9TVUIKKyNkZWZpbmUgV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUIg
IjIwMDMwMTA3IgorI2VuZGlmIC8vIGlmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9QUk9EVUNUX1NV
QgorCisjaWZuZGVmIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUgorI2RlZmluZSBXRUJDT1JFX05B
VklHQVRPUl9WRU5ET1IgIkFwcGxlIENvbXB1dGVyLCBJbmMuIgorI2VuZGlmIC8vIGlmbmRlZiBX
RUJDT1JFX05BVklHQVRPUl9WRU5ET1IKKworI2lmbmRlZiBXRUJDT1JFX05BVklHQVRPUl9WRU5E
T1JfU1VCCisjZGVmaW5lIFdFQkNPUkVfTkFWSUdBVE9SX1ZFTkRPUl9TVUIgIiIKKyNlbmRpZiAv
LyBpZm5kZWYgV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQgorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTmF2aWdhdG9yOjpOYXZpZ2F0b3IoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFt
ZShmcmFtZSkKK3sKK30KKworTmF2aWdhdG9yOjp+TmF2aWdhdG9yKCkKK3sKKyAgICBkaXNjb25u
ZWN0RnJhbWUoKTsKK30KKwordm9pZCBOYXZpZ2F0b3I6OmRpc2Nvbm5lY3RGcmFtZSgpCit7Cisg
ICAgaWYgKG1fcGx1Z2lucykgeworICAgICAgICBtX3BsdWdpbnMtPmRpc2Nvbm5lY3RGcmFtZSgp
OworICAgICAgICBtX3BsdWdpbnMgPSAwOworICAgIH0KKyAgICBpZiAobV9taW1lVHlwZXMpIHsK
KyAgICAgICAgbV9taW1lVHlwZXMtPmRpc2Nvbm5lY3RGcmFtZSgpOworICAgICAgICBtX21pbWVU
eXBlcyA9IDA7CisgICAgfQorICAgIG1fZnJhbWUgPSAwOworfQorCitTdHJpbmcgTmF2aWdhdG9y
OjphcHBDb2RlTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxhIjsKK30KKworU3Ry
aW5nIE5hdmlnYXRvcjo6YXBwTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJOZXRzY2FwZSI7
Cit9CisKK1N0cmluZyBOYXZpZ2F0b3I6OmFwcFZlcnNpb24oKSBjb25zdAoreworICAgIGlmICgh
bV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIFZlcnNpb24gaXMgZXZl
cnl0aGluZyBpbiB0aGUgdXNlciBhZ2VudCBzdHJpbmcgcGFzdCB0aGUgIk1vemlsbGEvIiBwcmVm
aXguCisgICAgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQgPSBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNl
ckFnZW50KG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6
IEtVUkwoKSk7CisgICAgcmV0dXJuIHVzZXJBZ2VudC5zdWJzdHJpbmcodXNlckFnZW50LmZpbmQo
Jy8nKSArIDEpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpsYW5ndWFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGRlZmF1bHRMYW5ndWFnZSgpOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjp1c2Vy
QWdlbnQoKSBjb25zdAoreworICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBtX2ZyYW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KG1fZnJhbWUtPmRv
Y3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSA6IEtVUkwoKSk7Cit9CisKK1N0
cmluZyBOYXZpZ2F0b3I6OnBsYXRmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gV0VCQ09SRV9O
QVZJR0FUT1JfUExBVEZPUk07Cit9CisKK1BsdWdpbkFycmF5KiBOYXZpZ2F0b3I6OnBsdWdpbnMo
KSBjb25zdAoreworICAgIGlmICghbV9wbHVnaW5zKQorICAgICAgICBtX3BsdWdpbnMgPSBQbHVn
aW5BcnJheTo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX3BsdWdpbnMuZ2V0KCk7Cit9
CisKK01pbWVUeXBlQXJyYXkqIE5hdmlnYXRvcjo6bWltZVR5cGVzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fbWltZVR5cGVzKQorICAgICAgICBtX21pbWVUeXBlcyA9IE1pbWVUeXBlQXJyYXk6OmNy
ZWF0ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gbV9taW1lVHlwZXMuZ2V0KCk7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnByb2R1Y3QoKSBjb25zdAoreworICAgIHJldHVybiBXRUJDT1JFX05BVklH
QVRPUl9QUk9EVUNUOworfQorCitTdHJpbmcgTmF2aWdhdG9yOjpwcm9kdWN0U3ViKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfUFJPRFVDVF9TVUI7Cit9CisKK1N0cmlu
ZyBOYXZpZ2F0b3I6OnZlbmRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdFQkNPUkVfTkFWSUdB
VE9SX1ZFTkRPUjsKK30KKworU3RyaW5nIE5hdmlnYXRvcjo6dmVuZG9yU3ViKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV0VCQ09SRV9OQVZJR0FUT1JfVkVORE9SX1NVQjsKK30KKworYm9vbCBOYXZp
Z2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBjb29raWVzRW5hYmxl
ZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKK30KKworYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVk
KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbV9mcmFtZS0+c2V0dGluZ3MoKS0+aXNKYXZhRW5hYmxlZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgg
Yi9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDMyMDdmMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2gg
QVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2lmbmRlZiBOYXZpZ2F0b3JfaAorI2RlZmluZSBOYXZpZ2F0b3JfaAorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
RnJhbWU7CisgICAgY2xhc3MgTWltZVR5cGVBcnJheTsKKyAgICBjbGFzcyBQbHVnaW5EYXRhOwor
ICAgIGNsYXNzIFBsdWdpbkFycmF5OworICAgIGNsYXNzIFN0cmluZzsKKworICAgIGNsYXNzIE5h
dmlnYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPE5hdmlnYXRvcj4geworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmF2aWdhdG9yPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTmF2aWdhdG9yKGZyYW1lKSk7IH0KKyAgICAgICAgfk5hdmln
YXRvcigpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisgICAgICAgIEZyYW1l
KiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKworICAgICAgICBTdHJpbmcgYXBw
Q29kZU5hbWUoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGFwcE5hbWUoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGFwcFZlcnNpb24oKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyB1c2VyQWdlbnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5n
IHBsYXRmb3JtKCkgY29uc3Q7CisgICAgICAgIFBsdWdpbkFycmF5KiBwbHVnaW5zKCkgY29uc3Q7
CisgICAgICAgIE1pbWVUeXBlQXJyYXkqIG1pbWVUeXBlcygpIGNvbnN0OworICAgICAgICBTdHJp
bmcgcHJvZHVjdCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgcHJvZHVjdFN1YigpIGNvbnN0Owor
ICAgICAgICBTdHJpbmcgdmVuZG9yKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyB2ZW5kb3JTdWIo
KSBjb25zdDsKKyAgICAgICAgYm9vbCBjb29raWVFbmFibGVkKCkgY29uc3Q7CisgICAgICAgIGJv
b2wgamF2YUVuYWJsZWQoKSBjb25zdDsKKworICAgIHByaXZhdGU6CisgICAgICAgIE5hdmlnYXRv
cihGcmFtZSopOworICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8UGx1Z2luQXJyYXk+IG1fcGx1Z2luczsKKyAgICAgICAgbXV0YWJsZSBSZWZQdHI8TWltZVR5
cGVBcnJheT4gbV9taW1lVHlwZXM7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsIGIvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3M2EwMgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsK
KworICAgIGludGVyZmFjZSBOYXZpZ2F0b3IgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGFwcENvZGVOYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIGFwcE5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBE
T01TdHJpbmcgYXBwVmVyc2lvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBsYW5ndWFnZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB1c2VyQWdl
bnQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcGxhdGZvcm07CisgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBQbHVnaW5BcnJheSBwbHVnaW5zOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgTWltZVR5cGVBcnJheSBtaW1lVHlwZXM7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgcHJvZHVjdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyBwcm9kdWN0U3ViOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHZlbmRvcjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZW5kb3JT
dWI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGNvb2tpZUVuYWJsZWQ7Cisg
ICAgICAgIGJvb2xlYW4gamF2YUVuYWJsZWQoKTsKKyAgICB9OworCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggMjk0ZTM0
OS4uN2YxMDU5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRHJhZ0Nv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250
cm9sbGVyLmgiCkBAIC0zNSw3ICszNiw5IEBACiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlBs
dWdpbkRhdGEuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCkBAIC0yMTYsNiAr
MjE5LDM4IEBAIHZvaWQgUGFnZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKICAgICAgICAgICAg
IGZyYW1lLT5zZXROZWVkc1JlYXBwbHlTdHlsZXMoKTsKIH0KIAordm9pZCBQYWdlOjpyZWZyZXNo
UGx1Z2lucyhib29sIHJlbG9hZCkKK3sKKyAgICBpZiAoIWFsbFBhZ2VzKQorICAgICAgICByZXR1
cm47CisKKyAgICBQbHVnaW5EYXRhOjpyZWZyZXNoKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEZy
YW1lPiA+IGZyYW1lc05lZWRpbmdSZWxvYWQ7CisKKyAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOworICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAo
Kml0KS0+bV9wbHVnaW5EYXRhID0gMDsKKworICAgICAgICBpZiAocmVsb2FkKSB7CisgICAgICAg
ICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICgqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkKKyAgICAgICAgICAgICAgICAgICAg
ZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZXNOZWVkaW5nUmVs
b2FkLnNpemUoKTsgKytpKQorICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkW2ldLT5sb2FkZXIo
KS0+cmVsb2FkKCk7Cit9CisKK1BsdWdpbkRhdGEqIFBhZ2U6OnBsdWdpbkRhdGEoKSBjb25zdAor
eworICAgIGlmICghbV9wbHVnaW5EYXRhKQorICAgICAgICBtX3BsdWdpbkRhdGEgPSBQbHVnaW5E
YXRhOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS5nZXQoKTsKK30KKwog
c3RhdGljIEZyYW1lKiBpbmNyZW1lbnRGcmFtZShGcmFtZSogY3VyciwgYm9vbCBmb3J3YXJkLCBi
b29sIHdyYXBGbGFnKQogewogICAgIHJldHVybiBmb3J3YXJkCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oIGIvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCBmZDVkY2U1Li4wY2RjYjU0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QYWdl
LmgKQEAgLTU2LDYgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlR3JvdXA7Cisg
ICAgY2xhc3MgUGx1Z2luRGF0YTsKICAgICBjbGFzcyBQcm9ncmVzc1RyYWNrZXI7CiAgICAgY2xh
c3MgU2VsZWN0aW9uOwogICAgIGNsYXNzIFNlbGVjdGlvbkNvbnRyb2xsZXI7CkBAIC03Miw2ICs3
Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZShDaHJvbWVDbGllbnQqLCBD
b250ZXh0TWVudUNsaWVudCosIEVkaXRvckNsaWVudCosIERyYWdDbGllbnQqLCBJbnNwZWN0b3JD
bGllbnQqKTsKICAgICAgICAgflBhZ2UoKTsKICAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lk
IHJlZnJlc2hQbHVnaW5zKGJvb2wgcmVsb2FkKTsKKyAgICAgICAgUGx1Z2luRGF0YSogcGx1Z2lu
RGF0YSgpIGNvbnN0OworCiAgICAgICAgIEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV9lZGl0b3JDbGllbnQ7IH0KIAogICAgICAgICB2b2lkIHNldE1haW5GcmFt
ZShQYXNzUmVmUHRyPEZyYW1lPik7CkBAIC0xNjUsNiArMTY5LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBSZWZQdHI8RnJhbWU+IG1fbWFpbkZyYW1lOwogICAgICAgICBSZWZQdHI8
Tm9kZT4gbV9mb2N1c2VkTm9kZTsKIAorICAgICAgICBtdXRhYmxlIFJlZlB0cjxQbHVnaW5EYXRh
PiBtX3BsdWdpbkRhdGE7CisKICAgICAgICAgRWRpdG9yQ2xpZW50KiBtX2VkaXRvckNsaWVudDsK
IAogICAgICAgICBpbnQgbV9mcmFtZUNvdW50OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1Bs
dWdpbi5oIGIvV2ViQ29yZS9wYWdlL1BsdWdpbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZTUzMTg0Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGFnZS9QbHVnaW4uaAorKysgL2Rl
di9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0
OiA0IC0qLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aWZuZGVmIFBsdWdpbl9oCi0jZGVmaW5lIFBsdWdpbl9oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBXaWRnZXQ7Ci0KLSAg
ICBjbGFzcyBQbHVnaW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFdpZGdldCogdmlldykg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbih2aWV3KSk7IH0KLSAgICAgICAgV2lkZ2V0KiB2
aWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFBsdWdpbihXaWRnZXQqIHZpZXcpIDogbV92aWV3KHZpZXcpIHsgfQotICAgICAgICBX
aWRnZXQqIG1fdmlldzsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUGx1Z2luX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMu
bW0gYi9XZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFjLm1tCmluZGV4IGY5N2ZlYTEuLjFmNmVhMzQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KKysrIGIvV2ViQ29yZS9w
YWdlL21hYy9GcmFtZU1hYy5tbQpAQCAtNjksNyArNjksNiBAQAogI2ltcG9ydCAiUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcm9sbEJhci5oIgogI2ltcG9ydCAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW1wb3J0ICJQbHVnaW4uaCIKICNpbXBvcnQgIlJlZ3Vs
YXJFeHByZXNzaW9uLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVy
TGlzdEl0ZW0uaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KaW5kZXggNDUz
YjJlYi4uZGExMjQ5MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVC
cmlkZ2UubW0KKysrIGIvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KQEAg
LTY0LDcgKzY0LDcgQEAKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKLSNpbXBvcnQgIlBsdWdpbkluZm9T
dG9yZS5oIgorI2ltcG9ydCAiUGx1Z2luRGF0YS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIK
ICNpbXBvcnQgIlJlbmRlclBhcnQuaCIKICNpbXBvcnQgIlJlbmRlclRyZWVBc1RleHQuaCIKQEAg
LTExNTIsNyArMTE1Miw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQgKmZvcm1FbGVtZW50RnJv
bURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKICAgICAKICAgICBpZiAoV2ViQ29yZTo6
RE9NSW1wbGVtZW50YXRpb246OmlzVGV4dE1JTUVUeXBlKG1pbWVUeXBlKSB8fAogICAgICAgICBJ
bWFnZTo6c3VwcG9ydHNUeXBlKG1pbWVUeXBlKSB8fAotICAgICAgICBQbHVnaW5JbmZvU3RvcmU6
OnN1cHBvcnRzTUlNRVR5cGUobWltZVR5cGUpKQorICAgICAgICAobV9mcmFtZS0+cGFnZSgpICYm
IG1fZnJhbWUtPnBhZ2UoKS0+cGx1Z2luRGF0YSgpLT5zdXBwb3J0c01pbWVUeXBlKG1pbWVUeXBl
KSkpCiAgICAgICAgIHJldHVybiBOTzsKICAgICAKICAgICByZXR1cm4gWUVTOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaCBiL1dlYkNvcmUvcGFnZS9t
YWMvV2ViQ29yZVZpZXdGYWN0b3J5LmgKaW5kZXggNGNmMjFlMy4uN2Q1NTE1MCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL21hYy9XZWJDb3JlVmlld0ZhY3RvcnkuaAorKysgYi9XZWJDb3JlL3Bh
Z2UvbWFjL1dlYkNvcmVWaWV3RmFjdG9yeS5oCkBAIC0zNSw5ICszNSw3IEBACiBAcHJvdG9jb2wg
V2ViQ29yZVZpZXdGYWN0b3J5CiAKIC0gKE5TQXJyYXkgKilwbHVnaW5zSW5mbzsgLy8gYXJyYXkg
b2YgaWQgPFdlYkNvcmVQbHVnaW5JbmZvPgotLSAodm9pZClyZWZyZXNoUGx1Z2luczooQk9PTCly
ZWxvYWRQYWdlczsKLS0gKE5TU3RyaW5nICopcGx1Z2luTmFtZUZvck1JTUVUeXBlOihOU1N0cmlu
ZyAqKU1JTUVUeXBlOwotLSAoQk9PTClwbHVnaW5TdXBwb3J0c01JTUVUeXBlOihOU1N0cmluZyAq
KU1JTUVUeXBlOworLSAodm9pZClyZWZyZXNoUGx1Z2luczsKIAogLSAoTlNTdHJpbmcgKilpbnB1
dEVsZW1lbnRBbHRUZXh0OwogLSAoTlNTdHJpbmcgKilyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcCBiL1dlYkNvcmUvcGFnZS9x
dC9GcmFtZVF0LmNwcAppbmRleCA5MTRlZWRkLi4wNmVmZGU1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvcXQvRnJhbWVRdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQuY3BwCkBA
IC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJQbHVn
aW4uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVXaW4uY3BwIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKaW5kZXggMTFh
ZmRkZS4uY2I1ZTUxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZVdpbi5jcHAKQEAgLTQ1LDcgKzQ1LDYgQEAKICNp
bmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBsdWdpbi5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlldy5oIgogI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNz
aW9uLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAppbmRl
eCBmNTZiZjZmLi4wOWI1YzRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1w
b3JhcnlMaW5rU3R1YnMuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxp
bmtTdHVicy5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5o
IgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Nyw1ICs3OCw5IEBAIGZsb2F0IHVzZXJJZGxl
VGltZSgpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDAuMDsgfQogU3RyaW5nIEtVUkw6OmZp
bGVTeXN0ZW1QYXRoKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7
IH0KIAogUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlV2l0aENv
bnRlbnRzT2ZGaWxlKGNvbnN0IFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KKwordm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQordm9pZCBQbHVnaW5EYXRhOjpyZWZyZXNoKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1t
IGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z0luSW5mb1N0b3JlTWFjLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNzc2ZWFlLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsdWdJbkluZm9TdG9yZU1hYy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUGx1
Z2luSW5mb1N0b3JlLmgiCi0KLSNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgotI2ltcG9ydCAi
TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViQ29yZVZpZXdGYWN0b3J5LmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotU3RyaW5nIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luTmFtZUZvck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIFtbV2ViQ29yZVZpZXdGYWN0
b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbk5hbWVGb3JNSU1FVHlwZTptaW1lVHlwZV07Ci19Ci0K
LVBsdWdpbkluZm8gKlBsdWdpbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgUGx1Z2luSW5mbyAqcGx1Z2luSW5mbyA9IG5l
dyBQbHVnaW5JbmZvOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIGlkIDxXZWJDb3JlUGx1Z2luSW5mbz4gcGx1Z2luID0gW1tbV2ViQ29yZVZpZXdGYWN0b3J5
IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBvYmplY3RBdEluZGV4OmluZGV4XTsKLSAgICAK
LSAgICBwbHVnaW5JbmZvLT5uYW1lID0gW3BsdWdpbiBuYW1lXTsKLSAgICBwbHVnaW5JbmZvLT5m
aWxlID0gW3BsdWdpbiBmaWxlbmFtZV07Ci0gICAgcGx1Z2luSW5mby0+ZGVzYyA9IFtwbHVnaW4g
cGx1Z2luRGVzY3JpcHRpb25dOwotCi0gICAgTlNFbnVtZXJhdG9yICpNSU1FVHlwZUVudW1lcmF0
b3IgPSBbcGx1Z2luIE1JTUVUeXBlRW51bWVyYXRvcl07Ci0gICAgd2hpbGUgKE5TU3RyaW5nICpN
SU1FID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgewotICAgICAgICBNaW1lQ2xh
c3NJbmZvICptaW1lID0gbmV3IE1pbWVDbGFzc0luZm87Ci0gICAgICAgIHBsdWdpbkluZm8tPm1p
bWVzLmFwcGVuZChtaW1lKTsKLSAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhNSU1FKS5sb3dl
cigpOwotICAgICAgICBtaW1lLT5zdWZmaXhlcyA9IFtbcGx1Z2luIGV4dGVuc2lvbnNGb3JNSU1F
VHlwZTpNSU1FXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCIsIl07Ci0gICAgICAgIG1pbWUt
PmRlc2MgPSBbcGx1Z2luIGRlc2NyaXB0aW9uRm9yTUlNRVR5cGU6TUlNRV07Ci0gICAgICAgIG1p
bWUtPnBsdWdpbiA9IHBsdWdpbkluZm87Ci0gICAgfQotICAgIAotICAgIHJldHVybiBwbHVnaW5J
bmZvOwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICBpZiAocGx1
Z2luSW5mbyAmJiAhcGx1Z2luSW5mby0+bWltZXMuaXNFbXB0eSgpKQotICAgICAgICBkZWxldGVB
bGxWYWx1ZXMocGx1Z2luSW5mby0+bWltZXMpOwotICAgIGRlbGV0ZSBwbHVnaW5JbmZvOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFBsdWdpbkluZm9TdG9yZTo6cGx1Z2luQ291bnQo
KSBjb25zdAotewotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4g
W1tbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpbnNJbmZvXSBjb3VudF07
Ci0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKLSAgICByZXR1cm4gMDsKLX0K
LQotYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHBsdWdpblN1cHBvcnRzTUlNRVR5
cGU6bWltZVR5cGVdOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7ICAgIAotICAgIAot
ICAgIHJldHVybiBOTzsKLX0KLQotdm9pZCByZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZE9wZW5Q
YWdlcykKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW1tXZWJDb3Jl
Vmlld0ZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gcmVmcmVzaFBsdWdpbnM6cmVsb2FkT3BlblBhZ2Vz
XTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotfQotCi19Ci0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAppbmRleCA2YjNlMjQzLi43YzhlYjE4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCkBAIC0yOCwxMSAr
MjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBzdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKQEAgLTc5LDEyICs3NCw2IEBAIFN0
cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJp
bmcgJmV4dCkKICAgICAgICAgICAgIHJldHVybiBlLT5taW1lVHlwZTsKICAgICAgICAgKytlOwog
ICAgIH0KLSAgICAvLyAjIyMgRklYTUU6IFF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQw
MAotICAgIFFTdHJpbmcgdHlwZSA9IFFXZWJGYWN0b3J5TG9hZGVyOjpzZWxmKCktPm1pbWVUeXBl
Rm9yRXh0ZW5zaW9uKGV4dCk7Ci0gICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHR5cGU7Ci0jZW5kaWYKIAogICAgIHJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IjsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZS5jcHAgYi9XZWJDb3Jl
L3BsdWdpbnMvTWltZVR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjgxOTVhODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuY3Bw
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBB
U0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNaW1lVHlwZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWltZVR5cGU6Ok1p
bWVUeXBlKFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5kZXgp
CisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCit7
Cit9CisKK01pbWVUeXBlOjp+TWltZVR5cGUoKQoreworfQorCitjb25zdCBTdHJpbmcgJk1pbWVU
eXBlOjp0eXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21f
aW5kZXhdLT50eXBlOworfQorCitjb25zdCBTdHJpbmcgJk1pbWVUeXBlOjpzdWZmaXhlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4XS0+c3VmZml4
ZXM7Cit9CisKK2NvbnN0IFN0cmluZyAmTWltZVR5cGU6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbHVnaW5EYXRhLT5taW1lcygpW21faW5kZXhdLT5kZXNjOworfQorCitQ
YXNzUmVmUHRyPFBsdWdpbj4gTWltZVR5cGU6OmVuYWJsZWRQbHVnaW4oKSBjb25zdAoreworICAg
IGNvbnN0IFBhZ2UqIHAgPSBtX3BsdWdpbkRhdGEtPnBhZ2UoKTsKKyAgICBpZiAoIXAgfHwgIXAt
PnNldHRpbmdzKCktPmFyZVBsdWdpbnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgY29uc3QgUGx1Z2luSW5mbyAqaW5mbyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKVttX2luZGV4
XS0+cGx1Z2luOworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBtX3Bs
dWdpbkRhdGEtPnBsdWdpbnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdWdpbnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHBsdWdpbnNbaV0gPT0gaW5mbykKKyAgICAgICAg
ICAgIHJldHVybiBQbHVnaW46OmNyZWF0ZShtX3BsdWdpbkRhdGEuZ2V0KCksIGkpOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmggYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTA2N2RhCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTWltZVR5cGVf
aAorI2RlZmluZSBNaW1lVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaW5j
bHVkZSAiUGx1Z2luRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBQ
bHVnaW47CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgY2xhc3MgTWltZVR5cGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxNaW1lVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TWltZVR5cGU+IGNyZWF0ZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+IHBsdWdpbkRhdGEs
IHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWltZVR5cGUocGx1Z2luRGF0
YSwgaW5kZXgpKTsgfQorICAgICAgICB+TWltZVR5cGUoKTsKKworICAgICAgICBjb25zdCBTdHJp
bmcgJnR5cGUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgU3RyaW5nICZzdWZmaXhlcygpIGNvbnN0
OworICAgICAgICBjb25zdCBTdHJpbmcgJmRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgICAgIFBh
c3NSZWZQdHI8UGx1Z2luPiBlbmFibGVkUGx1Z2luKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBNaW1lVHlwZShQYXNzUmVmUHRyPFBsdWdpbkRhdGE+LCB1bnNpZ25lZCBpbmRleCk7
CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGx1Z2lucy9NaW1lVHlwZS5pZGwgYi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2M3MzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsdWdpbnMvTWltZVR5cGUuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKwor
ICAgIGludGVyZmFjZSBNaW1lVHlwZSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdHlwZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdWZmaXhl
czsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFBsdWdpbiBlbmFibGVkUGx1Z2luOworICAgIH07CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcCBiL1dlYkNv
cmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iMTIwZTljCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVU
eXBlQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJNaW1lVHlwZUFycmF5LmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworTWltZVR5cGVBcnJheTo6TWltZVR5cGVBcnJheShGcmFtZSogZnJhbWUpCisgICAg
OiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitNaW1lVHlwZUFycmF5Ojp+TWltZVR5cGVBcnJheSgp
Cit7Cit9CisKK3Vuc2lnbmVkIE1pbWVUeXBlQXJyYXk6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAg
UGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRhLT5taW1lcygpLnNpemUoKTsKK30KKworTWlt
ZVR5cGUqIE1pbWVUeXBlQXJyYXk6Oml0ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgUGx1Z2lu
RGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJl
dHVybiAwOworICAgIGNvbnN0IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4mIG1pbWVzID0gZGF0YS0+
bWltZXMoKTsKKyAgICBpZiAoaW5kZXggPj0gbWltZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gTWltZVR5cGU6OmNyZWF0ZShkYXRhLCBpbmRleCkuZ2V0KCk7Cit9CisK
K2Jvb2wgTWltZVR5cGVBcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEgKmRhdGEgPSBnZXRQbHVnaW5EYXRh
KCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8
TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IGRhdGEtPm1pbWVzKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWltZXNbaV0tPnR5
cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitNaW1lVHlwZSogTWltZVR5cGVBcnJheTo6bmFtZUdldHRlcihjb25zdCBB
dG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBQbHVnaW5EYXRhICpkYXRhID0gZ2V0
UGx1Z2luRGF0YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29u
c3QgVmVjdG9yPE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBkYXRhLT5taW1lcygpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtaW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKG1p
bWVzW2ldLT50eXBlID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJldHVybiBNaW1lVHlw
ZTo6Y3JlYXRlKGRhdGEsIGkpLmdldCgpOworICAgIHJldHVybiAwOworfQorCitQbHVnaW5EYXRh
KiBNaW1lVHlwZUFycmF5OjpnZXRQbHVnaW5EYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZnJh
bWUpCisgICAgICAgIHJldHVybiAwOworICAgIFBhZ2UqIHAgPSBtX2ZyYW1lLT5wYWdlKCk7Cisg
ICAgaWYgKCFwKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gcC0+cGx1Z2luRGF0YSgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdp
bnMvTWltZVR5cGVBcnJheS5oIGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGI0OTgxCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2ggQVNBCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBNaW1lVHlw
ZUFycmF5X2gKKyNkZWZpbmUgTWltZVR5cGVBcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3Mg
SlNWYWx1ZTsKK307CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0
cmluZzsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBNaW1lVHlwZTsKKyAgICBjbGFzcyBQ
bHVnaW5EYXRhOworCisgICAgLy8gRklYTUU6IEdlbmVyYXRlZCBKU01pbWVUeXBlQXJyYXkuY3Bw
IGRvZXNuJ3QgaW5jbHVkZSBKU01pbWVUeXBlLmggZm9yIHRvSlMKKyAgICBLSlM6OkpTVmFsdWUq
IHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBNaW1lVHlwZSopOworCisgICAgY2xhc3MgTWltZVR5cGVB
cnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPE1pbWVUeXBlQXJyYXk+IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1pbWVUeXBlQXJyYXk+IGNyZWF0ZShGcmFtZSogZnJh
bWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBNaW1lVHlwZUFycmF5KGZyYW1lKSk7IH0KKyAgICAg
ICAgfk1pbWVUeXBlQXJyYXkoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIHsg
bV9mcmFtZSA9IDA7IH0KKworICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAg
ICAgTWltZVR5cGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOworICAgICAgICBib29sIGNhbkdldEl0
ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSk7CisgICAgICAgIE1p
bWVUeXBlKiBuYW1lR2V0dGVyKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAg
ICBwcml2YXRlOgorICAgICAgICBNaW1lVHlwZUFycmF5KEZyYW1lKik7CisgICAgICAgIFBsdWdp
bkRhdGEqIGdldFBsdWdpbkRhdGEoKSBjb25zdDsKKworICAgICAgICBGcmFtZSogbV9mcmFtZTsK
KyAgICB9OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlw
ZUFycmF5LmlkbCBiL1dlYkNvcmUvcGx1Z2lucy9NaW1lVHlwZUFycmF5LmlkbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDkyYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbHVnaW5zL01pbWVUeXBlQXJyYXkuaWRsCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKwor
ICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIE1pbWVUeXBlQXJy
YXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Cisg
ICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAgYi9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4zMWVlZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5jcHAK
QEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsdWdpbi5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUGx1Z2luRGF0YS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUGx1Z2luOjpQbHVnaW4oUGx1Z2luRGF0YSogcGx1Z2luRGF0YSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgOiBtX3BsdWdpbkRhdGEocGx1Z2luRGF0YSkKKyAgICAsIG1faW5kZXgoaW5kZXgp
Cit7Cit9CisKK1BsdWdpbjo6flBsdWdpbigpCit7Cit9CisKK1N0cmluZyBQbHVnaW46Om5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+
bmFtZTsKK30KKworU3RyaW5nIFBsdWdpbjo6ZmlsZW5hbWUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+ZmlsZTsKK30KKworU3RyaW5nIFBs
dWdpbjo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBs
dWdpbnMoKVttX2luZGV4XS0+ZGVzYzsKK30KKwordW5zaWduZWQgUGx1Z2luOjpsZW5ndGgoKSBj
b25zdAoreworICAgIHJldHVybiBtX3BsdWdpbkRhdGEtPnBsdWdpbnMoKVttX2luZGV4XS0+bWlt
ZXMuc2l6ZSgpOworfQorCitNaW1lVHlwZSogUGx1Z2luOjppdGVtKHVuc2lnbmVkIGluZGV4KQor
eworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBtX3BsdWdpbkRhdGEt
PnBsdWdpbnMoKTsKKyAgICBpZiAoaW5kZXggPj0gcGx1Z2luc1ttX2luZGV4XS0+bWltZXMuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE1pbWVDbGFzc0luZm8qIG1pbWUgPSBwbHVn
aW5zW21faW5kZXhdLT5taW1lc1tpbmRleF07CisKKyAgICBjb25zdCBWZWN0b3I8TWltZUNsYXNz
SW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtaW1lc1tpXSA9PSBt
aW1lKQorICAgICAgICAgICAgcmV0dXJuIE1pbWVUeXBlOjpjcmVhdGUobV9wbHVnaW5EYXRhLmdl
dCgpLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBQbHVnaW46OmNhbkdldEl0
ZW1zRm9yTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb25z
dCBWZWN0b3I8TWltZUNsYXNzSW5mbyo+JiBtaW1lcyA9IG1fcGx1Z2luRGF0YS0+bWltZXMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGlmIChtaW1lc1tpXS0+dHlwZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK01pbWVUeXBlKiBQbHVnaW46Om5hbWVHZXR0
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29uc3QgVmVjdG9y
PE1pbWVDbGFzc0luZm8qPiYgbWltZXMgPSBtX3BsdWdpbkRhdGEtPm1pbWVzKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1pbWVzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobWlt
ZXNbaV0tPnR5cGUgPT0gcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgcmV0dXJuIE1pbWVUeXBl
OjpjcmVhdGUobV9wbHVnaW5EYXRhLmdldCgpLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1Bs
dWdpbi5oIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjAxZWEzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMv
UGx1Z2luLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luX2gKKyNkZWZpbmUgUGx1Z2luX2gKKworI2lu
Y2x1ZGUgIk1pbWVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
KyAgICBjbGFzcyBKU1ZhbHVlOworfTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgQXRvbWljU3RyaW5nOworICAgIGNsYXNzIFBsdWdpbjsKKyAgICBjbGFzcyBTdHJpbmc7CisK
KyAgICAvLyBGSVhNRTogR2VuZXJhdGVkIEpTUGx1Z2luLmNwcCBkb2Vzbid0IGluY2x1ZGUgSlNN
aW1lVHlwZS5oIGZvciB0b0pTCisgICAgS0pTOjpKU1ZhbHVlKiB0b0pTKEtKUzo6RXhlY1N0YXRl
KiwgTWltZVR5cGUqKTsKKworICAgIGNsYXNzIFBsdWdpbkRhdGE7CisKKyAgICBjbGFzcyBQbHVn
aW4gOiBwdWJsaWMgUmVmQ291bnRlZDxQbHVnaW4+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBsdWdpbj4gY3JlYXRlKFBsdWdpbkRhdGEqIHBsdWdpbkRhdGEsIHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luKHBsdWdpbkRhdGEsIGlu
ZGV4KSk7IH0KKyAgICAgICAgflBsdWdpbigpOworCisgICAgICAgIFN0cmluZyBuYW1lKCkgY29u
c3Q7CisgICAgICAgIFN0cmluZyBmaWxlbmFtZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZGVz
Y3JpcHRpb24oKSBjb25zdDsKKworICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKwor
ICAgICAgICBNaW1lVHlwZSogaXRlbSh1bnNpZ25lZCBpbmRleCk7CisgICAgICAgIGJvb2wgY2Fu
R2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgTWltZVR5cGUqIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGx1Z2luKFBsdWdpbkRhdGEqLCB1bnNpZ25lZCBp
bmRleCk7CisgICAgICAgIFJlZlB0cjxQbHVnaW5EYXRhPiBtX3BsdWdpbkRhdGE7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbi5pZGwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NWU0OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW4uaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgd2luZG93IHsKKwor
ICAgIGludGVyZmFjZSBbSGFzTmFtZUdldHRlciwgSGFzSW5kZXhHZXR0ZXJdIFBsdWdpbiB7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBmaWxlbmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOworICAgIH07CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5BcnJheS5jcHAgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZDUxZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5BcnJh
eS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkFycmF5OjpQbHVnaW5BcnJheShG
cmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCitQbHVnaW5BcnJheTo6
flBsdWdpbkFycmF5KCkKK3sKK30KKwordW5zaWduZWQgUGx1Z2luQXJyYXk6Omxlbmd0aCgpIGNv
bnN0Cit7CisgICAgUGx1Z2luRGF0YSogZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBkYXRhLT5wbHVnaW5zKCkuc2l6
ZSgpOworfQorCitQbHVnaW4qIFBsdWdpbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQbHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5z
ID0gZGF0YS0+cGx1Z2lucygpOworICAgIGlmIChpbmRleCA+PSBwbHVnaW5zLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIFBsdWdpbjo6Y3JlYXRlKGRhdGEsIGluZGV4KS5n
ZXQoKTsKK30KKworYm9vbCBQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIFBsdWdpbkRhdGEqIGRhdGEgPSBnZXRQ
bHVnaW5EYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25z
dCBWZWN0b3I8UGx1Z2luSW5mbyo+JiBwbHVnaW5zID0gZGF0YS0+cGx1Z2lucygpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKQorICAgICAgICBpZiAo
cGx1Z2luc1tpXS0+bmFtZSA9PSBwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1BsdWdpbiogUGx1Z2luQXJyYXk6Om5hbWVHZXR0
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgUGx1Z2luRGF0YSog
ZGF0YSA9IGdldFBsdWdpbkRhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAw
OworICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMgPSBkYXRhLT5wbHVnaW5z
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsdWdpbnMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGlmIChwbHVnaW5zW2ldLT5uYW1lID09IHByb3BlcnR5TmFtZSkKKyAgICAgICAgICAg
IHJldHVybiBQbHVnaW46OmNyZWF0ZShkYXRhLCBpKS5nZXQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBQbHVnaW5BcnJheTo6cmVmcmVzaChib29sIHJlbG9hZCkKK3sKKyAgICBQYWdlOjpy
ZWZyZXNoUGx1Z2lucyhyZWxvYWQpOworfQorCitQbHVnaW5EYXRhKiBQbHVnaW5BcnJheTo6Z2V0
UGx1Z2luRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBQYWdlKiBwID0gbV9mcmFtZS0+cGFnZSgpOworICAgIGlmICghcCkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHAtPnBsdWdpbkRhdGEoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmggYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luQXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MWI4OTVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkFycmF5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUGx1Z2luQXJyYXlfaAorI2RlZmluZSBQbHVnaW5BcnJh
eV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgS0pTIHsKKyAgICBj
bGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKK307CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKKyAgICBjbGFzcyBGcmFtZTsKKyAgICBj
bGFzcyBQbHVnaW47CisgICAgY2xhc3MgUGx1Z2luRGF0YTsKKworICAgIC8vIEZJWE1FOiBHZW5l
cmF0ZWQgSlNQbHVnaW5BcnJheS5jcHAgZG9lc24ndCBpbmNsdWRlIEpTUGx1Z2luLmggZm9yIHRv
SlMKKyAgICBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqLCBQbHVnaW4qKTsKKwor
ICAgIGNsYXNzIFBsdWdpbkFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luQXJyYXk+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkFycmF5PiBjcmVh
dGUoRnJhbWUqIGZyYW1lKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luQXJyYXkoZnJhbWUp
KTsgfQorICAgICAgICB+UGx1Z2luQXJyYXkoKTsKKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3RG
cmFtZSgpIHsgbV9mcmFtZSA9IDA7IH0KKworICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKKyAgICAgICAgUGx1Z2luKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICAgICAgYm9vbCBj
YW5HZXRJdGVtc0Zvck5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOworICAg
ICAgICBQbHVnaW4qIG5hbWVHZXR0ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
OworCisgICAgICAgIHZvaWQgcmVmcmVzaChib29sIHJlbG9hZCk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUGx1Z2luQXJyYXkoRnJhbWUqKTsKKyAgICAgICAgUGx1Z2luRGF0YSogZ2V0UGx1Z2lu
RGF0YSgpIGNvbnN0OworCisgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgIH07Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkFycmF5LmlkbCBiL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5BcnJheS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTljZDY1MgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5B
cnJheS5pZGwKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJv
bGx0ZWNoIEFTQQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJmYWNlIFtIYXNOYW1l
R2V0dGVyLCBIYXNJbmRleEdldHRlcl0gUGx1Z2luQXJyYXkgeworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAgIHZvaWQgcmVmcmVzaChpbiBi
b29sZWFuIHJlbG9hZCk7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5z
L1BsdWdpbkRhdGEuY3BwIGIvV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRhdGEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzFlZjQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDAgRGFuaWVsIE1vbGtlbnRpbiAobW9sa2VudGluQGtkZS5vcmcpCisgICAg
Q29weXJpZ2h0IChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIChzY2hpbW1pQGtkZS5vcmcpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFT
QQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luRGF0YTo6UGx1Z2luRGF0YShjb25zdCBQYWdlKiBw
YWdlKQorICAgIDogbV9wYWdlKHBhZ2UpCit7CisgICAgaW5pdFBsdWdpbnMoKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BsdWdpbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgUGx1Z2luSW5mbyogcGx1Z2luID0gbV9wbHVnaW5zW2ldOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgcGx1Z2luLT5taW1lcy5zaXplKCk7ICsraikKKyAgICAgICAgICAg
IG1fbWltZXMuYXBwZW5kKHBsdWdpbi0+bWltZXNbal0pOworICAgIH0KK30KKworUGx1Z2luRGF0
YTo6flBsdWdpbkRhdGEoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3BsdWdpbnMpOworICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX21pbWVzKTsKK30KKworYm9vbCBQbHVnaW5EYXRhOjpzdXBwb3J0
c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVz
W2ldLT50eXBlID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitTdHJpbmcgUGx1Z2luRGF0YTo6cGx1Z2luTmFtZUZvck1pbWVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fbWltZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX21pbWVzW2ldLT50eXBl
ID09IG1pbWVUeXBlKQorICAgICAgICAgICAgcmV0dXJuIG1fbWltZXNbaV0tPnBsdWdpbi0+bmFt
ZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5EYXRhLmggYi9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZTgzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luRGF0YS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFBsdWdpbkRhdGFfaAor
I2RlZmluZSBQbHVnaW5EYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworICAgIHN0cnVjdCBQYWdlOworICAgIHN0cnVjdCBQbHVnaW5JbmZv
OworCisgICAgc3RydWN0IE1pbWVDbGFzc0luZm8geworICAgICAgICBTdHJpbmcgdHlwZTsKKyAg
ICAgICAgU3RyaW5nIGRlc2M7CisgICAgICAgIFN0cmluZyBzdWZmaXhlczsKKyAgICAgICAgUGx1
Z2luSW5mbyogcGx1Z2luOworICAgIH07CisKKyAgICBzdHJ1Y3QgUGx1Z2luSW5mbyB7CisgICAg
ICAgIFN0cmluZyBuYW1lOworICAgICAgICBTdHJpbmcgZmlsZTsKKyAgICAgICAgU3RyaW5nIGRl
c2M7CisgICAgICAgIFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbWltZXM7CisgICAgfTsKKworICAg
IC8vIEZJWE1FOiBtZXJnZSB3aXRoIFBsdWdpbkRhdGFiYXNlIGluIHRoZSBmdXR1cmUKKyAgICBj
bGFzcyBQbHVnaW5EYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2luRGF0YT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luRGF0YT4gY3JlYXRlKGNvbnN0
IFBhZ2UqIHBhZ2UpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5EYXRhKHBhZ2UpKTsgfQor
ICAgICAgICB+UGx1Z2luRGF0YSgpOworCisgICAgICAgIHZvaWQgZGlzY29ubmVjdFBhZ2UoKSB7
IG1fcGFnZSA9IDA7IH0KKyAgICAgICAgY29uc3QgUGFnZSogcGFnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZTsgfQorCisgICAgICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5JbmZvKj4mIHBsdWdpbnMo
KSBjb25zdCB7IHJldHVybiBtX3BsdWdpbnM7IH0KKyAgICAgICAgY29uc3QgVmVjdG9yPE1pbWVD
bGFzc0luZm8qPiYgbWltZXMoKSBjb25zdCB7IHJldHVybiBtX21pbWVzOyB9CisKKyAgICAgICAg
Ym9vbCBzdXBwb3J0c01pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpIGNvbnN0OworICAg
ICAgICBTdHJpbmcgcGx1Z2luTmFtZUZvck1pbWVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
IGNvbnN0OworCisgICAgICAgIHN0YXRpYyB2b2lkIHJlZnJlc2goKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFBsdWdpbkRhdGEoY29uc3QgUGFnZSopOworICAgICAgICB2b2lkIGluaXRQbHVn
aW5zKCk7CisKKyAgICAgICAgVmVjdG9yPFBsdWdpbkluZm8qPiBtX3BsdWdpbnM7CisgICAgICAg
IFZlY3RvcjxNaW1lQ2xhc3NJbmZvKj4gbV9taW1lczsKKyAgICAgICAgY29uc3QgUGFnZSogbV9w
YWdlOworICAgIH07CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsdWdpbnMv
bWFjL1BsdWdpbkRhdGFNYWMubW0gYi9XZWJDb3JlL3BsdWdpbnMvbWFjL1BsdWdpbkRhdGFNYWMu
bW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViOTMxNgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lucy9tYWMvUGx1Z2luRGF0YU1hYy5tbQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRyb2xsdGVjaCBBU0EK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJQbHVnaW5EYXRhLmgiCisKKyNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAi
V2ViQ29yZVZpZXdGYWN0b3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbHVn
aW5EYXRhOjppbml0UGx1Z2lucygpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OworCisgICAgTlNBcnJheSogcGx1Z2lucyA9IFtbV2ViQ29yZVZpZXdGYWN0b3J5IHNoYXJlZEZh
Y3RvcnldIHBsdWdpbnNJbmZvXTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IFtw
bHVnaW5zIGNvdW50XTsgKytpKSB7CisgICAgICAgIFBsdWdpbkluZm8qIHBsdWdpbkluZm8gPSBu
ZXcgUGx1Z2luSW5mbzsKKworICAgICAgICBpZCA8V2ViQ29yZVBsdWdpbkluZm8+IHBsdWdpbiA9
IFtwbHVnaW5zIG9iamVjdEF0SW5kZXg6aV07CisgICAgCisgICAgICAgIHBsdWdpbkluZm8tPm5h
bWUgPSBbcGx1Z2luIG5hbWVdOworICAgICAgICBwbHVnaW5JbmZvLT5maWxlID0gW3BsdWdpbiBm
aWxlbmFtZV07CisgICAgICAgIHBsdWdpbkluZm8tPmRlc2MgPSBbcGx1Z2luIHBsdWdpbkRlc2Ny
aXB0aW9uXTsKKworICAgICAgICBOU0VudW1lcmF0b3IqIE1JTUVUeXBlRW51bWVyYXRvciA9IFtw
bHVnaW4gTUlNRVR5cGVFbnVtZXJhdG9yXTsKKyAgICAgICAgd2hpbGUgKE5TU3RyaW5nKiBNSU1F
ID0gW01JTUVUeXBlRW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICAgICAgTWltZUNs
YXNzSW5mbyogbWltZSA9IG5ldyBNaW1lQ2xhc3NJbmZvOworICAgICAgICAgICAgcGx1Z2luSW5m
by0+bWltZXMuYXBwZW5kKG1pbWUpOworICAgICAgICAgICAgbWltZS0+dHlwZSA9IFN0cmluZyhN
SU1FKS5sb3dlcigpOworICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgPSBbW3BsdWdpbiBleHRl
bnNpb25zRm9yTUlNRVR5cGU6TUlNRV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiLCJdOwor
ICAgICAgICAgICAgbWltZS0+ZGVzYyA9IFtwbHVnaW4gZGVzY3JpcHRpb25Gb3JNSU1FVHlwZTpN
SU1FXTsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IHBsdWdpbkluZm87CisgICAgICAgIH0K
KworICAgICAgICBtX3BsdWdpbnMuYXBwZW5kKHBsdWdpbkluZm8pOworICAgIH0KKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOworCisgICAgcmV0dXJuOworfQorCit2b2lkIFBs
dWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KyAgICBbW1dlYkNvcmVWaWV3RmFjdG9yeSBzaGFyZWRGYWN0b3J5XSByZWZyZXNoUGx1Z2luc107
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKK30KKworfQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNwcCBiL1dlYkNvcmUvcGx1Z2lucy9xdC9Q
bHVnaW5EYXRhUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTZk
YzEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsdWdpbnMvcXQvUGx1Z2luRGF0YVF0LmNw
cApAQCAtMCwwICsxLDY1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOCBUcm9sbHRlY2gg
QVNBCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKwor
I2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
PHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8cXdlYnBsdWdpbmZhY3RvcnkuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBRV2Vi
UGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4obV9wYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CisgICAgUVdlYlBsdWdpbkZhY3RvcnkqIGZhY3Rv
cnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7CisgICAgaWYgKCFmYWN0b3J5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBRTGlzdDxRV2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBwbHVnaW5z
ID0gZmFjdG9yeS0+cGx1Z2lucygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx1Z2lucy5j
b3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiYg
cGx1Z2luID0gcGx1Z2lucy5hdChpKTsKKworICAgICAgICBQbHVnaW5JbmZvKiBpbmZvID0gbmV3
IFBsdWdpbkluZm87CisgICAgICAgIGluZm8tPm5hbWUgPSBwbHVnaW4ubmFtZTsKKyAgICAgICAg
aW5mby0+ZGVzYyA9IHBsdWdpbi5kZXNjcmlwdGlvbjsKKworICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHBsdWdpbi5taW1lVHlwZXMuY291bnQoKTsgKytqKSB7CisgICAgICAgICAgICBjb25z
dCBRV2ViUGx1Z2luRmFjdG9yeTo6TWltZVR5cGUmIG1pbWVUeXBlID0gcGx1Z2luLm1pbWVUeXBl
cy5hdChqKTsKKworICAgICAgICAgICAgTWltZUNsYXNzSW5mbyogbWltZUluZm8gPSBuZXcgTWlt
ZUNsYXNzSW5mbzsKKyAgICAgICAgICAgIG1pbWVJbmZvLT50eXBlID0gbWltZVR5cGUubmFtZTsK
KyAgICAgICAgICAgIG1pbWVJbmZvLT5kZXNjID0gbWltZVR5cGUuZGVzY3JpcHRpb247CisgICAg
ICAgICAgICBtaW1lSW5mby0+c3VmZml4ZXMgPSBtaW1lVHlwZS5maWxlRXh0ZW5zaW9ucy5qb2lu
KCI7ICIpOworCisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZUluZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgbV9wbHVnaW5zLmFwcGVuZChpbmZvKTsKKyAgICB9Cit9CisKK3Zv
aWQgUGx1Z2luRGF0YTo6cmVmcmVzaCgpCit7CisgICAgLy8gbm90aGluZyB0byBkbworfQorCit9
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhV2luLmNwcCBiL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luRGF0YVdpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzNmM2YzYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGx1Z2lu
cy93aW4vUGx1Z2luRGF0YVdpbi5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDggVHJvbGx0ZWNoIEFTQQorICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNpbmNsdWRlICJQbHVnaW5EYXRhYmFzZS5oIgor
I2luY2x1ZGUgIlBsdWdpblBhY2thZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lk
IFBsdWdpbkRhdGE6OmluaXRQbHVnaW5zKCkKK3sKKyAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQ
bHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lucygpOworICAgIGNvbnN0IFZlY3RvcjxQbHVn
aW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFBsdWdpbklu
Zm8qIGluZm8gPSBuZXcgUGx1Z2luSW5mbzsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGFja2Fn
ZSA9IHBsdWdpbnNbaV07CisKKyAgICAgICAgaW5mby0+bmFtZSA9IHBhY2thZ2UtPm5hbWUoKTsK
KyAgICAgICAgaW5mby0+ZmlsZSA9IHBhY2thZ2UtPmZpbGVOYW1lKCk7CisgICAgICAgIGluZm8t
PmRlc2MgPSBwYWNrYWdlLT5kZXNjcmlwdGlvbigpOworCisgICAgICAgIGNvbnN0IE1JTUVUb0Rl
c2NyaXB0aW9uc01hcCYgbWltZVRvRGVzY3JpcHRpb25zID0gcGFja2FnZS0+bWltZVRvRGVzY3Jp
cHRpb25zKCk7CisgICAgICAgIE1JTUVUb0Rlc2NyaXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWltZVRvRGVzY3JpcHRpb25zLmVuZCgpOworICAgICAgICBmb3IgKE1JTUVUb0Rlc2Ny
aXB0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtaW1lVG9EZXNjcmlwdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBNaW1lQ2xhc3NJbmZvKiBtaW1lID0g
bmV3IE1pbWVDbGFzc0luZm87CisgICAgICAgICAgICBpbmZvLT5taW1lcy5hcHBlbmQobWltZSk7
CisKKyAgICAgICAgICAgIG1pbWUtPnR5cGUgPSBpdC0+Zmlyc3Q7CisgICAgICAgICAgICBtaW1l
LT5kZXNjID0gaXQtPnNlY29uZDsKKyAgICAgICAgICAgIG1pbWUtPnBsdWdpbiA9IGluZm87CisK
KyAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGV4dGVuc2lvbnMgPSBwYWNrYWdlLT5taW1lVG9F
eHRlbnNpb25zKCkuZ2V0KG1pbWUtPnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gIiwiOworCisg
ICAgICAgICAgICAgICAgbWltZS0+c3VmZml4ZXMgKz0gZXh0ZW5zaW9uc1tpXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1fcGx1Z2lucy5hcHBlbmQoaW5mbyk7CisgICAg
fQorfQorCit2b2lkIFBsdWdpbkRhdGE6OnJlZnJlc2goKQoreworICAgIFBsdWdpbkRhdGFiYXNl
ICpkYiA9IFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQbHVnaW5zKCk7CisgICAgZGItPnJlZnJl
c2goKTsKK30KKworfTsKZGlmZiAtLWdpdCBhL1dlYktpdC5wcmkgYi9XZWJLaXQucHJpCmluZGV4
IDU1ZGU5YjMuLmQxMjQyM2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC5wcmkKKysrIGIvV2ViS2l0LnBy
aQpAQCAtOTcsNyArOTcsOCBAQCBJTkNMVURFUEFUSCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJD
b3JlL3JlbmRlcmluZyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2hpc3RvcnkgXAogICAgICQk
QkFTRV9ESVIvV2ViQ29yZS94bWwgXAotICAgICQkQkFTRV9ESVIvV2ViQ29yZS9odG1sCisgICAg
JCRCQVNFX0RJUi9XZWJDb3JlL2h0bWwgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbHVnaW5z
CiAKIAogbWFjeCB7CmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IGExZDlkYmUuLjUzYTJkMTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIFdl
YlZpZXdGYWN0b3J5J3MgcmVmcmVzaFBsdWdpbnMgbWV0aG9kIHRvIG9ubHkgcmVmcmVzaCB0aGUK
KyAgICAgICAgcGx1Z2lucyBhbmQgbm90IHJlbG9hZCB0aGUgZnJhbWVzIGFueW1vcmUgc2luY2Ug
dGhhdCdzIG5vdyBkb25lIGluIGEKKyAgICAgICAgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWFubmVy
IGJ5IFdlYkNvcmU6OlBhZ2UuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIHRoZSBub3cgdW51c2Vk
IHBsdWdpbk5hbWVGb3JNSU1FVHlwZSBhbmQKKyAgICAgICAgcGx1Z2luU3VwcG9ydHNNSU1FVHlw
ZSBtZXRob2RzLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlld0ZhY3RvcnkubW06
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZy
YW1lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisKIDIwMDgtMDMt
MDYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1pdHouCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpZXdGYWN0
b3J5Lm1tIGIvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaWV3RmFjdG9yeS5tbQppbmRl
eCBjNTI0YjRiLi40MWYzODM3IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYlZpZXdGYWN0b3J5Lm1tCisrKyBiL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmll
d0ZhY3RvcnkubW0KQEAgLTcxLDIyICs3MSw5IEBACiAgICAgcmV0dXJuIFtbV2ViUGx1Z2luRGF0
YWJhc2Ugc2hhcmVkRGF0YWJhc2VdIHBsdWdpbnNdOwogfQogCi0tIChOU1N0cmluZyAqKXBsdWdp
bk5hbWVGb3JNSU1FVHlwZTooTlNTdHJpbmcgKilNSU1FVHlwZQotewotICAgIHJldHVybiBbW1tX
ZWJQbHVnaW5EYXRhYmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5
cGVdIG5hbWVdOwotfQotCi0tICh2b2lkKXJlZnJlc2hQbHVnaW5zOihCT09MKXJlbG9hZFBhZ2Vz
CistICh2b2lkKXJlZnJlc2hQbHVnaW5zCiB7CiAgICAgW1tXZWJQbHVnaW5EYXRhYmFzZSBzaGFy
ZWREYXRhYmFzZV0gcmVmcmVzaF07Ci0gICAgaWYgKHJlbG9hZFBhZ2VzKSB7Ci0gICAgICAgIFtX
ZWJWaWV3IF9tYWtlQWxsV2ViVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9yZWxvYWRG
b3JQbHVnaW5DaGFuZ2VzKV07Ci0gICAgfQotfQotCi0tIChCT09MKXBsdWdpblN1cHBvcnRzTUlN
RVR5cGU6KE5TU3RyaW5nICopTUlNRVR5cGUKLXsKLSAgICByZXR1cm4gW1tXZWJQbHVnaW5EYXRh
YmFzZSBzaGFyZWREYXRhYmFzZV0gcGx1Z2luRm9yTUlNRVR5cGU6TUlNRVR5cGVdICE9IG5pbDsK
IH0KIAogLSAoV2ViQ29yZUZyYW1lQnJpZGdlICopYnJpZGdlRm9yVmlldzooTlNWaWV3ICopdgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDg3NDczZjQuLjM0ODI2NTIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KQEAgLTM2MSwxNiArMzYxLDYgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFt
ZSAqd2ViRnJhbWUpCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmxvYWRlcigpLT5udW1QZW5kaW5n
T3JMb2FkaW5nUmVxdWVzdHMocmVjdXJzZSk7CiB9CiAKLS0gKHZvaWQpX3JlbG9hZEZvclBsdWdp
bkNoYW5nZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgTlNWaWV3IDxXZWJEb2N1bWVudFZp
ZXc+ICpkb2N1bWVudFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
OwotICAgICAgICBpZiAoKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcg
Y2xhc3NdXSAmJiBjb3JlRnJhbWUtPmxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkpCi0gICAg
ICAgICAgICBba2l0KGZyYW1lKSByZWxvYWRdOwotICAgIH0KLX0KLQogLSAodm9pZClfYXR0YWNo
U2NyaXB0RGVidWdnZXIKIHsKICAgICBpZiAoX3ByaXZhdGUtPnNjcmlwdERlYnVnZ2VyKQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaCBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKaW5kZXggZDY4MjgyNS4uOWIwMzU0YyAxMDA2
NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCkBAIC0xNDksOCArMTQ5LDYgQEAgc3Ry
dWN0IFdlYkNvcmVIaXN0b3J5SXRlbTsKIAogLSAoaW50KV9udW1QZW5kaW5nT3JMb2FkaW5nUmVx
dWVzdHM6KEJPT0wpcmVjdXJzZTsKIAotLSAodm9pZClfcmVsb2FkRm9yUGx1Z2luQ2hhbmdlczsK
LQogLSAodm9pZClfYXR0YWNoU2NyaXB0RGVidWdnZXI7CiAtICh2b2lkKV9kZXRhY2hTY3JpcHRE
ZWJ1Z2dlcjsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCA3YmI1ZDNkLi5iNzE3NDlmIDEwMDY0
NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQpAQCAtMTI4MSwxMSArMTI4MSw2IEBAIFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpCiAgICAgW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU107CiB9CiAKLS0gKHZv
aWQpX3JlbG9hZEZvclBsdWdpbkNoYW5nZXMKLXsKLSAgICBbW3NlbGYgbWFpbkZyYW1lXSBfcmVs
b2FkRm9yUGx1Z2luQ2hhbmdlc107Ci19Ci0KIC0gKE5TQ2FjaGVkVVJMUmVzcG9uc2UgKilfY2Fj
aGVkUmVzcG9uc2VGb3JVUkw6KE5TVVJMICopVVJMCiB7CiAgICAgTlNNdXRhYmxlVVJMUmVxdWVz
dCAqcmVxdWVzdCA9IFtbTlNNdXRhYmxlVVJMUmVxdWVzdCBhbGxvY10gaW5pdFdpdGhVUkw6VVJM
XTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuY3BwIGIv
V2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAKaW5kZXggZmQwYzY5NC4uNjMx
MjFmMiAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAK
KysrIGIvV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5jcHAKQEAgLTI2LDcgKzI2
LDYgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKICNpbmNsdWRlICJxd2VibmV0d29ya2ludGVy
ZmFjZS5oIgogI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNpbmNsdWRlICJx
d2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIKICNpbmNs
dWRlICJxY29va2llamFyLmgiCiAjaW5jbHVkZSA8cWRlYnVnLmg+CkBAIC0zNjEsNyArMzYwLDcg
QEAgdm9pZCBRV2ViTmV0d29ya0pvYjo6c2V0RXJyb3JTdHJpbmcoY29uc3QgUVN0cmluZyYgZXJy
b3JTdHJpbmcpCiAqLwogYm9vbCBRV2ViTmV0d29ya0pvYjo6Y2FuY2VsbGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gIWQtPnJlc291cmNlSGFuZGxlICYmICFkLT5jb25uZWN0b3I7CisgICAgcmV0
dXJuICFkLT5yZXNvdXJjZUhhbmRsZTsKIH0KIAogLyohCkBAIC00NTAsNyArNDQ5LDYgQEAgYm9v
bCBRV2ViTmV0d29ya01hbmFnZXI6OmFkZChSZXNvdXJjZUhhbmRsZSAqaGFuZGxlLCBRV2ViTmV0
d29ya0ludGVyZmFjZSAqaW50ZXIKICAgICBoYW5kbGUtPmdldEludGVybmFsKCktPm1fam9iID0g
am9iOwogICAgIGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUgPSBoYW5kbGU7CiAgICAgam9iLT5kLT5p
bnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0gICAgam9iLT5kLT5jb25uZWN0b3IgPSAwOwogCiAgICAg
am9iLT5kLT5yZXF1ZXN0LmluaXQoaGFuZGxlLT5yZXF1ZXN0KCkpOwogCkBAIC00NzksNyArNDc3
LDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OmNhbmNlbChSZXNvdXJjZUhhbmRsZSAqaGFu
ZGxlKQogICAgICAgICByZXR1cm47CiAgICAgREVCVUcoKSA8PCAiUVdlYk5ldHdvcmtNYW5hZ2Vy
OjpjYW5jZWw6IiA8PCAgam9iLT5kLT5yZXF1ZXN0Lmh0dHBIZWFkZXIudG9TdHJpbmcoKTsKICAg
ICBqb2ItPmQtPnJlc291cmNlSGFuZGxlID0gMDsKLSAgICBqb2ItPmQtPmNvbm5lY3RvciA9IDA7
CiAgICAgam9iLT5kLT5pbnRlcmZhY2UtPmNhbmNlbEpvYihqb2IpOwogICAgIGhhbmRsZS0+Z2V0
SW50ZXJuYWwoKS0+bV9qb2IgPSAwOwogfQpAQCAtNDk2LDcgKzQ5Myw3IEBAIHZvaWQgUVdlYk5l
dHdvcmtNYW5hZ2VyOjpzdGFydGVkKFFXZWJOZXR3b3JrSm9iICpqb2IpCiAgICAgICAgIGNsaWVu
dCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgICAgICBpZiAoIWNsaWVu
dCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKCFqb2ItPmQtPmNvbm5lY3Rv
cikgeworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU3MSw4ICs1
NjgsNiBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6c3RhcnRlZChRV2ViTmV0d29ya0pvYiAq
am9iKQogCiAgICAgaWYgKGNsaWVudCkKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9u
c2Uoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSwgcmVzcG9uc2UpOwotICAgIGlmIChqb2ItPmQtPmNv
bm5lY3RvcikKLSAgICAgICAgZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+c3RhcnRlZChqb2IpOwog
CiB9CiAKQEAgLTU4Nyw3ICs1ODIsNyBAQCB2b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZGF0YShR
V2ViTmV0d29ya0pvYiAqam9iLCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhKQogICAgICAgICBjbGll
bnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICAgICAgaWYgKCFjbGll
bnQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmICgham9iLT5kLT5jb25uZWN0
b3IpIHsKKyAgICB9IGVsc2UgewogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01OTcsOCAr
NTkyLDYgQEAgdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OmRhdGEoUVdlYk5ldHdvcmtKb2IgKmpv
YiwgY29uc3QgUUJ5dGVBcnJheSAmZGF0YSkKICAgICBERUJVRygpIDw8ICJyZWNlaXZlZERhdGEi
IDw8IGpvYi0+ZC0+cmVxdWVzdC51cmwucGF0aCgpOwogICAgIGlmIChjbGllbnQpCiAgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSwgZGF0YS5jb25z
dERhdGEoKSwgZGF0YS5sZW5ndGgoKSwgZGF0YS5sZW5ndGgoKSAvKkZpeE1lKi8pOwotICAgIGlm
IChqb2ItPmQtPmNvbm5lY3RvcikKLSAgICAgICAgZW1pdCBqb2ItPmQtPmNvbm5lY3Rvci0+ZGF0
YShqb2IsIGRhdGEpOwogCiB9CiAKQEAgLTYxNyw3ICs2MTAsNyBAQCB2b2lkIFFXZWJOZXR3b3Jr
TWFuYWdlcjo6ZmluaXNoZWQoUVdlYk5ldHdvcmtKb2IgKmpvYiwgaW50IGVycm9yQ29kZSkKICAg
ICAgICAgY2xpZW50ID0gam9iLT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7CiAgICAgICAg
IGlmICghY2xpZW50KQogICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoIWpvYi0+
ZC0+Y29ubmVjdG9yKSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgam9iLT5kZXJlZigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNjQ1LDkgKzYzOCw2IEBAIHZvaWQgUVdlYk5ldHdvcmtN
YW5hZ2VyOjpmaW5pc2hlZChRV2ViTmV0d29ya0pvYiAqam9iLCBpbnQgZXJyb3JDb2RlKQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGpvYi0+ZC0+Y29ubmVjdG9yKQotICAgICAgICBlbWl0
IGpvYi0+ZC0+Y29ubmVjdG9yLT5maW5pc2hlZChqb2IsIGVycm9yQ29kZSk7Ci0KICAgICBERUJV
RygpIDw8ICJyZWNlaXZlZEZpbmlzaGVkIGRvbmUiIDw8IGpvYi0+ZC0+cmVxdWVzdC51cmw7CiAK
ICAgICBqb2ItPmRlcmVmKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3Jr
aW50ZXJmYWNlX3AuaCBiL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oCmlu
ZGV4IGM3MTJhZTQuLjliNmY0ZDAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdv
cmtpbnRlcmZhY2VfcC5oCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2Vf
cC5oCkBAIC01Nyw3ICs1Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgLCByZXNvdXJjZUhhbmRsZSgw
KQogICAgICAgICAsIHJlZGlyZWN0ZWQoZmFsc2UpCiAgICAgICAgICwgaW50ZXJmYWNlKDApCi0g
ICAgICAgICwgY29ubmVjdG9yKDApCiAgICAgICAgICwgam9iU3RhdHVzKFFXZWJOZXR3b3JrSm9i
OjpKb2JDcmVhdGVkKQogICAgICAgICB7fQogICAgIGludCByZWY7CkBAIC02OSw3ICs2OCw2IEBA
IHB1YmxpYzoKICAgICBib29sIHJlZGlyZWN0ZWQ7CiAKICAgICBRV2ViTmV0d29ya0ludGVyZmFj
ZSAqaW50ZXJmYWNlOwotICAgIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKmNvbm5lY3RvcjsK
ICAgICBRV2ViTmV0d29ya0pvYjo6Sm9iU3RhdHVzIGpvYlN0YXR1czsKICAgICBRU3RyaW5nIGVy
cm9yU3RyaW5nOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdp
bi5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiMjRkNjA0Li4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdl
Ym9iamVjdHBsdWdpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoKLSAg
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSovCi0jaW5jbHVkZSAicXdlYm9iamVjdHBsdWdpbl9wLmgiCi0jaW5jbHVkZSA8
cXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oPgotI2luY2x1ZGUgPHFjb3JlYXBwbGljYXRpb24u
aD4KLSNpbmNsdWRlIDxxZmlsZWluZm8uaD4KLQotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAot
Ci0jaWZuZGVmIFFUX05PX0xJQlJBUlkKLVFfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoUVdlYkZh
Y3RvcnlMb2FkZXIsIGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKFFXZWJPYmpl
Y3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlX2lpZCwgUUNvcmVBcHBsaWNhdGlvbjo6bGlicmFyeVBh
dGhzKCksIFFMYXRpbjFTdHJpbmcoIi93ZWJwbHVnaW5zIikpKQotI2VuZGlmCi0KLQotUVdlYkZh
Y3RvcnlMb2FkZXI6OlFXZWJGYWN0b3J5TG9hZGVyKGNvbnN0IGNoYXIgKmlpZCwgY29uc3QgUVN0
cmluZ0xpc3QgJnBhdGhzLCBjb25zdCBRU3RyaW5nICZzdWZmaXgsIFF0OjpDYXNlU2Vuc2l0aXZp
dHkpCi0gICAgOiBRRmFjdG9yeUxvYWRlcihpaWQsIHBhdGhzLCBzdWZmaXgpCi17Ci0gICAgUVN0
cmluZ0xpc3QgcGx1Z2lucyA9IGtleXMoKTsKLSAgICBmb3JlYWNoKFFTdHJpbmcgaywgcGx1Z2lu
cykgewotICAgICAgICBRV2ViT2JqZWN0UGx1Z2luICpwbHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVdl
Yk9iamVjdFBsdWdpbiAqPihpbnN0YW5jZShrKSk7Ci0gICAgICAgIGlmICghcGx1Z2luKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEluZm8gaW5mbzsKLSAgICAgICAgaW5mby5uYW1l
ID0gazsKLSAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IHBsdWdpbi0+ZGVzY3JpcHRpb25Gb3JL
ZXkoayk7Ci0gICAgICAgIFFTdHJpbmdMaXN0IG1pbWV0eXBlcyA9IHBsdWdpbi0+bWltZXR5cGVz
Rm9yS2V5KGspOwotICAgICAgICBmb3JlYWNoKFFTdHJpbmcgbSwgbWltZXR5cGVzKSB7Ci0gICAg
ICAgICAgICBNaW1lSW5mbyBtaW1lOwotICAgICAgICAgICAgbWltZS50eXBlID0gbTsKLSAgICAg
ICAgICAgIG1pbWUuZXh0ZW5zaW9ucyA9IHBsdWdpbi0+ZXh0ZW5zaW9uc0Zvck1pbWV0eXBlKG0p
OwotICAgICAgICAgICAgaW5mby5taW1lcyA8PCBtaW1lOwotICAgICAgICB9Ci0gICAgICAgIG1f
cGx1Z2luSW5mby5hcHBlbmQoaW5mbyk7Ci0gICAgfQotfQotCi1RV2ViRmFjdG9yeUxvYWRlciAq
UVdlYkZhY3RvcnlMb2FkZXI6OnNlbGYoKQotewotICAgIHJldHVybiBsb2FkZXIoKTsKLX0KLQot
Ci1RU3RyaW5nIFFXZWJGYWN0b3J5TG9hZGVyOjpkZXNjcmlwdGlvbkZvck5hbWUoY29uc3QgUVN0
cmluZyAma2V5KSBjb25zdAotewotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVn
aW5JbmZvKSB7Ci0gICAgICAgIGlmIChpbmZvLm5hbWUgPT0ga2V5KQotICAgICAgICAgICAgcmV0
dXJuIGluZm8uZGVzY3JpcHRpb247Ci0gICAgfQotICAgIHJldHVybiBRU3RyaW5nKCk7Ci19Ci0K
LVFTdHJpbmdMaXN0IFFXZWJGYWN0b3J5TG9hZGVyOjptaW1ldHlwZXNGb3JOYW1lKGNvbnN0IFFT
dHJpbmcgJmtleSkgY29uc3QKLXsKLSAgICBmb3JlYWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1
Z2luSW5mbykgewotICAgICAgICBpZiAoaW5mby5uYW1lID09IGtleSkgewotICAgICAgICAgICAg
UVN0cmluZ0xpc3QgbWltZXR5cGVzOwotICAgICAgICAgICAgZm9yZWFjaCAoY29uc3QgTWltZUlu
Zm8gJm0sIGluZm8ubWltZXMpCi0gICAgICAgICAgICAgICAgbWltZXR5cGVzLmFwcGVuZChtLnR5
cGUpOwotICAgICAgICAgICAgcmV0dXJuIG1pbWV0eXBlczsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLX0KLQotUVN0cmluZyBRV2ViRmFjdG9yeUxvYWRlcjo6
bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgUVN0cmluZyAmZXh0ZW5zaW9uKQotewotICAgIGZv
cmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVnaW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2gg
KGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVzKSB7Ci0gICAgICAgICAgICBpZiAobS5leHRl
bnNpb25zLmNvbnRhaW5zKGV4dGVuc2lvbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG0udHlw
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gUVN0cmluZygpOwotfQotCi0KLVFTdHJp
bmdMaXN0IFFXZWJGYWN0b3J5TG9hZGVyOjpleHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBRU3Ry
aW5nTGlzdCBleHRlbnNpb25zOwotICAgIGZvcmVhY2goY29uc3QgSW5mbyAmaW5mbywgbV9wbHVn
aW5JbmZvKSB7Ci0gICAgICAgIGZvcmVhY2ggKGNvbnN0IE1pbWVJbmZvICZtLCBpbmZvLm1pbWVz
KQotICAgICAgICAgICAgZXh0ZW5zaW9ucyA8PCBtLmV4dGVuc2lvbnM7Ci0gICAgfQotICAgIHJl
dHVybiBRU3RyaW5nTGlzdCgpOwotCi19Ci0KLVFTdHJpbmcgUVdlYkZhY3RvcnlMb2FkZXI6Om5h
bWVGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3QKLXsKLSAgICBmb3Jl
YWNoKGNvbnN0IEluZm8gJmluZm8sIG1fcGx1Z2luSW5mbykgewotICAgICAgICBmb3JlYWNoIChj
b25zdCBNaW1lSW5mbyAmbSwgaW5mby5taW1lcykKLSAgICAgICAgICAgIGlmIChtLnR5cGUgPT0g
bWltZVR5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZm8ubmFtZTsKLSAgICB9Ci0gICAg
cmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotUU9iamVjdCAqUVdlYkZhY3RvcnlMb2FkZXI6OmNyZWF0
ZShRV2ViRnJhbWUgKmZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFFTdHJpbmcgJl9taW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0ICZhcmd1bWVudFZhbHVlcykKLXsKLSAgICBR
U3RyaW5nIG1pbWVUeXBlID0gX21pbWVUeXBlOwotICAgIGlmIChtaW1lVHlwZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgUUZpbGVJbmZvIGZpKHVybC5wYXRoKCkpOwotICAgICAgICBtaW1lVHlwZSA9
IG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGZpLnN1ZmZpeCgpKTsKLSAgICB9Ci0gICAgUVN0cmluZyBu
YW1lID0gbmFtZUZvck1pbWV0eXBlKG1pbWVUeXBlKTsKLSAgICBRV2ViT2JqZWN0UGx1Z2luICpw
bHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVdlYk9iamVjdFBsdWdpbiAqPihpbnN0YW5jZShuYW1lKSk7
Ci0gICAgaWYgKCFwbHVnaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIFFXZWJPYmplY3RQbHVn
aW5Db25uZWN0b3IgKmNvbm5lY3RvciA9IG5ldyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVjdG9yKGZy
YW1lKTsKLSAgICByZXR1cm4gcGx1Z2luLT5jcmVhdGUoY29ubmVjdG9yLCB1cmwsIG1pbWVUeXBl
LCBhcmd1bWVudE5hbWVzLCBhcmd1bWVudFZhbHVlcyk7Ci19Ci0KLQotCi0vKiEgXGNsYXNzIFFX
ZWJPYmplY3RQbHVnaW4KLQotICBUaGlzIGNsYXNzIGlzIGEgcGx1Z2luIGZvciB0aGUgSFRNTCBv
YmplY3QgdGFnLiBJdCBjYW4gYmUgdXNlZCB0byBlbWJlZCBhcmJpdHJhcnkgY29udGVudCBpbiBh
IHdlYiBwYWdlLgotKi8KLQotCi1RV2ViT2JqZWN0UGx1Z2luOjpRV2ViT2JqZWN0UGx1Z2luKFFP
YmplY3QgKnBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotewotfQotCi1RV2ViT2JqZWN0
UGx1Z2luOjp+UVdlYk9iamVjdFBsdWdpbigpCi17Ci19Ci0KLS8qIQotICBcZm4gUVN0cmluZ0xp
c3QgUVdlYk9iamVjdFBsdWdpbjo6a2V5cygpIGNvbnN0Ci0KLSAgVGhlIGtleXMgc2hvdWxkIGJl
IHVuaXF1ZSBuYW1lcy4KLSovCi0KLS8qIQotICBBIGRlc2NyaXB0aW9uIGZvciBcYSBrZXkuCi0q
LwotUVN0cmluZyBRV2ViT2JqZWN0UGx1Z2luOjpkZXNjcmlwdGlvbkZvcktleShjb25zdCBRU3Ry
aW5nICZrZXkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFFTdHJpbmcoKTsKLX0KLQotLyohCi0gIHJl
dHVybnMgdGhlIG1pbWV0eXBlcyB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IFxhIGtleS4KLSovCi1R
U3RyaW5nTGlzdCBRV2ViT2JqZWN0UGx1Z2luOjptaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmlu
ZyAma2V5KSBjb25zdAotewotICAgIHJldHVybiBRU3RyaW5nTGlzdCgpOwotfQotCi0KLS8qIQot
ICBcZm4gUVN0cmluZ0xpc3QgUVdlYk9iamVjdFBsdWdpbjo6ZXh0ZW5zaW9uc0Zvck1pbWV0eXBl
KCkgY29uc3QKLQotICBTaG91bGQgcmV0dXJuIGEgbGlzdCBvZiBleHRlbnNpb25zIHRoYXQgYXJl
IHJlY29nbmlzZWQgdG8gbWF0Y2ggdGhlIFxhIG1pbWVUeXBlLgotKi8KLVFTdHJpbmdMaXN0IFFX
ZWJPYmplY3RQbHVnaW46OmV4dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1l
VHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmluZ0xpc3QoKTsKLX0KLQotLyohCi0gIFxm
biBRT2JqZWN0ICpRV2ViT2JqZWN0UGx1Z2luOjpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5l
Y3RvciAqY29ubmVjdG9yLCBjb25zdCBRVXJsICZ1cmwsIGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBl
LCBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJmFy
Z3VtZW50VmFsdWVzKSBjb25zdAotCi0gIENyZWF0ZXMgYSBRT2JqZWN0IHdpdGggXGEgY29ubmVj
dG9yIHRvIGhhbmRsZSBcYSBtaW1lVHlwZS4gXGEgYXJndW1lbnROYW1lcyBhbmQgXGEgYXJndW1l
bnRWYWx1ZXMgYXJlIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBwYXNzZWQgZGlyZWN0bHkKLSAg
ZnJvbSB0aGUgJmx0O3BhcmFtJmd0OyBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIEhUTUwgb2Jq
ZWN0IHRhZy4KLSovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2Vib2Jq
ZWN0cGx1Z2luLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW4uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggM2M3Y2FmNy4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBp
L3F3ZWJvYmplY3RwbHVnaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0g
IENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotCi0qLwotI2lmbmRlZiBRV0VCT0JKRUNUUExVR0lOX0gKLSNkZWZpbmUgUVdFQk9C
SkVDVFBMVUdJTl9ICi0KLSNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXRD
b3JlL3FwbHVnaW4uaD4KLSNpbmNsdWRlIDxRdENvcmUvcWZhY3RvcnlpbnRlcmZhY2UuaD4KLQot
I2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotCi1jbGFzcyBRV2ViT2JqZWN0UGx1Z2luQ29ubmVj
dG9yOwotY2xhc3MgUVVybDsKLQotc3RydWN0IFFXRUJLSVRfRVhQT1JUIFFXZWJPYmplY3RQbHVn
aW5GYWN0b3J5SW50ZXJmYWNlIDogcHVibGljIFFGYWN0b3J5SW50ZXJmYWNlCi17Ci0gICAgdmly
dHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9y
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMp
IGNvbnN0ID0gMDsKLX07Ci0KLSNkZWZpbmUgUVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZh
Y2VfaWlkICJjb20udHJvbGx0ZWNoLlF0LlFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNl
IgotUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViT2JqZWN0UGx1Z2luRmFjdG9yeUludGVyZmFjZSwg
UVdlYk9iamVjdFBsdWdpbkZhY3RvcnlJbnRlcmZhY2VfaWlkKQotCi1jbGFzcyBRV0VCS0lUX0VY
UE9SVCBRV2ViT2JqZWN0UGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViT2JqZWN0
UGx1Z2luRmFjdG9yeUludGVyZmFjZQotewotICAgIFFfT0JKRUNUCi0gICAgUV9JTlRFUkZBQ0VT
KFFXZWJPYmplY3RQbHVnaW5GYWN0b3J5SW50ZXJmYWNlOlFGYWN0b3J5SW50ZXJmYWNlKQotcHVi
bGljOgotICAgIGV4cGxpY2l0IFFXZWJPYmplY3RQbHVnaW4oUU9iamVjdCAqcGFyZW50ID0gMCk7
Ci0gICAgdmlydHVhbCB+UVdlYk9iamVjdFBsdWdpbigpOwotCi0gICAgdmlydHVhbCBRU3RyaW5n
TGlzdCBrZXlzKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBRU3RyaW5nIGRlc2NyaXB0aW9u
Rm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRU3RyaW5nTGlz
dCBtaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICB2aXJ0dWFs
IFFTdHJpbmdMaXN0IGV4dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlw
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvciAqY29ubmVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFV
cmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZtaW1l
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJn
dW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlz
dCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0gMDsKLX07Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmggYi9XZWJLaXQvcXQv
QXBpL3F3ZWJvYmplY3RwbHVnaW5fcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
MjAyNjFmLi4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbl9wLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5f
UF9ICi0jZGVmaW5lIFFXRUJPQkpFQ1RQTFVHSU5fUF9ICi0KLSNpbmNsdWRlIDxRdENvcmUvcWds
b2JhbC5oPgotI2luY2x1ZGUgInF3ZWJvYmplY3RwbHVnaW4uaCIKLQotI2lmIFFUX1ZFUlNJT04g
PCAweDA0MDQwMAotCi0vKgotICBGSVhNRTogVGhpcyBpcyBjb3BpZWQgZnJvbSBxZmFjdG9yeWxv
YWRlcl9wLmguCi0gIFJlbW92ZSB0aGlzIG9uY2Ugd2UgbWFkZSBxZmFjdG9yeWxvYWRlciBwdWJs
aWMgaW4gUXQKLSovCi1jbGFzcyBRRmFjdG9yeUxvYWRlclByaXZhdGU7Ci0KLWNsYXNzIFFfQ09S
RV9FWFBPUlQgUUZhY3RvcnlMb2FkZXIgOiBwdWJsaWMgUU9iamVjdAotewotICAgIFFfT0JKRUNU
X0ZBS0UKLSAgICBRX0RFQ0xBUkVfUFJJVkFURShRRmFjdG9yeUxvYWRlcikKLQotcHVibGljOgot
ICAgIFFGYWN0b3J5TG9hZGVyKGNvbnN0IGNoYXIgKmlpZCwKLSAgICAgICAgICAgICAgICAgICBj
b25zdCBRU3RyaW5nTGlzdCAmcGF0aHMgPSBRU3RyaW5nTGlzdCgpLAotICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFTdHJpbmcgJnN1ZmZpeCA9IFFTdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAg
ICBRdDo6Q2FzZVNlbnNpdGl2aXR5ID0gUXQ6OkNhc2VTZW5zaXRpdmUpOwotICAgIH5RRmFjdG9y
eUxvYWRlcigpOwotCi0gICAgUVN0cmluZ0xpc3Qga2V5cygpIGNvbnN0OwotICAgIFFPYmplY3Qg
Kmluc3RhbmNlKGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0KLX07Ci0KLWNsYXNzIFFXZWJG
cmFtZTsKLQotY2xhc3MgUVdlYkZhY3RvcnlMb2FkZXIgOiBwdWJsaWMgUUZhY3RvcnlMb2FkZXIK
LXsKLSAgICBRX09CSkVDVAotcHVibGljOgotICAgIFFXZWJGYWN0b3J5TG9hZGVyKGNvbnN0IGNo
YXIgKmlpZCwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmcGF0aHMg
PSBRU3RyaW5nTGlzdCgpLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgJnN1
ZmZpeCA9IFFTdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICBRdDo6Q2FzZVNlbnNpdGl2
aXR5ID0gUXQ6OkNhc2VTZW5zaXRpdmUpOwotCi0gICAgc3RhdGljIFFXZWJGYWN0b3J5TG9hZGVy
ICpzZWxmKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCBuYW1lcygpIGNvbnN0IHsgcmV0dXJuIGtleXMo
KTsgfQotICAgIFFTdHJpbmdMaXN0IGV4dGVuc2lvbnMoKSBjb25zdDsKLSAgICBRU3RyaW5nIGRl
c2NyaXB0aW9uRm9yTmFtZShjb25zdCBRU3RyaW5nICZrZXkpIGNvbnN0OwotICAgIFFTdHJpbmdM
aXN0IG1pbWV0eXBlc0Zvck5hbWUoY29uc3QgUVN0cmluZyAma2V5KSBjb25zdDsKLSAgICBRU3Ry
aW5nIG5hbWVGb3JNaW1ldHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAg
aW5saW5lIGJvb2wgc3VwcG9ydHNNaW1lVHlwZShjb25zdCBRU3RyaW5nICZtaW1lVHlwZSkgY29u
c3QgewotICAgICAgICByZXR1cm4gIW5hbWVGb3JNaW1ldHlwZShtaW1lVHlwZSkuaXNFbXB0eSgp
OwotICAgIH0KLQotICAgIFFTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgUVN0cmlu
ZyAmZXh0ZW5zaW9uKTsKLQotICAgIFFPYmplY3QgKmNyZWF0ZShRV2ViRnJhbWUgKmZyYW1lLAot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry
aW5nTGlzdCAmYXJndW1lbnROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu
Z0xpc3QgJmFyZ3VtZW50VmFsdWVzKTsKLQotICAgIHN0cnVjdCBNaW1lSW5mbyB7Ci0gICAgICAg
IFFTdHJpbmcgdHlwZTsKLSAgICAgICAgUVN0cmluZ0xpc3QgZXh0ZW5zaW9uczsKLSAgICB9Owot
ICAgIHN0cnVjdCBJbmZvIHsKLSAgICAgICAgUVN0cmluZyBuYW1lOwotICAgICAgICBRU3RyaW5n
IGRlc2NyaXB0aW9uOwotICAgICAgICBRTGlzdDxNaW1lSW5mbz4gbWltZXM7Ci0gICAgfTsKLSAg
ICBRTGlzdDxJbmZvPiBtX3BsdWdpbkluZm87Ci19OwotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwIGIvV2Vi
S2l0L3F0L0FwaS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjUzYzE2NC4uMDAwMDAwMAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJv
YmplY3RwbHVnaW5jb25uZWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAot
LyoKLSAgQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLSAgCi0gIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAgCi0gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAgCi0gIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gIAotKi8KLSNpbmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luY29u
bmVjdG9yLmgiCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm5ldHdv
cmtpbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZV9wLmgiCi0jaW5j
bHVkZSAicXdlYmZyYW1lLmgiCi0jaW5jbHVkZSAicXdlYnBhZ2UuaCIKLQotc3RydWN0IFFXZWJP
YmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRlCi17Ci0gICAgUVdlYkZyYW1lICpmcmFtZTsKLX07
Ci0KLVFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I6OlFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3Io
UVdlYkZyYW1lICpmcmFtZSkKLXsKLSAgICBkID0gbmV3IFFXZWJPYmplY3RQbHVnaW5Db25uZWN0
b3JQcml2YXRlOwotICAgIGQtPmZyYW1lID0gZnJhbWU7Ci19Ci0KLVFXZWJGcmFtZSAqUVdlYk9i
amVjdFBsdWdpbkNvbm5lY3Rvcjo6ZnJhbWUoKSBjb25zdAotewotICAgIHJldHVybiBkLT5mcmFt
ZTsKLX0KLQotUVdpZGdldCAqUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6cGx1Z2luUGFyZW50
V2lkZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+ZnJhbWUtPnBhZ2UoKS0+dmlldygpOwot
fQotCi1RV2ViTmV0d29ya0pvYiAqUVdlYk9iamVjdFBsdWdpbkNvbm5lY3Rvcjo6cmVxdWVzdFVy
bChjb25zdCBRV2ViTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFRhcmdldCB0YXJnZXQpCi17Ci0g
ICAgaWYgKHRhcmdldCAhPSBQbHVnaW4pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUVdlYk5l
dHdvcmtKb2IgKmpvYiA9IG5ldyBRV2ViTmV0d29ya0pvYjsKLSAgICBRV2ViTmV0d29ya0pvYlBy
aXZhdGUgKnAgPSBqb2ItPmQ7Ci0gICAgcC0+aW50ZXJmYWNlID0gZC0+ZnJhbWUtPnBhZ2UoKS0+
bmV0d29ya0ludGVyZmFjZSgpOwotICAgIHAtPmNvbm5lY3RvciA9IHRoaXM7Ci0KLSAgICBwLT5y
ZXF1ZXN0ID0gKnJlcXVlc3QuZDsKLQotICAgIGQtPmZyYW1lLT5wYWdlKCktPm5ldHdvcmtJbnRl
cmZhY2UoKS0+YWRkSm9iKGpvYik7Ci0gICAgcmV0dXJuIGpvYjsKLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuaCBiL1dlYktp
dC9xdC9BcGkvcXdlYm9iamVjdHBsdWdpbmNvbm5lY3Rvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2MjI1MWEzLi4wMDAwMDAwCi0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYm9iamVj
dHBsdWdpbmNvbm5lY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAg
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLQotICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSovCi0jaWZuZGVmIFFXRUJPQkpFQ1RQTFVHSU5DT05ORUNUT1JfSAotI2RlZmlu
ZSBRV0VCT0JKRUNUUExVR0lOQ09OTkVDVE9SX0gKLQotI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwu
aCIKLSNpbmNsdWRlIDxRdENvcmUvcW9iamVjdC5oPgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0KLSNpbmNsdWRlICJxd2VibmV0d29ya2ludGVyZmFjZS5oIgotCi1jbGFzcyBRV2ViRnJh
bWU7Ci1jbGFzcyBRV2ViUGFnZTsKLWNsYXNzIFFXaWRnZXQ7Ci1jbGFzcyBRVXJsOwotY2xhc3Mg
UVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvclByaXZhdGU7Ci1jbGFzcyBRV2ViRmFjdG9yeUxvYWRl
cjsKLWNsYXNzIFFXZWJOZXR3b3JrTWFuYWdlcjsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQgUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvciA6IHB1YmxpYyBRT2JqZWN0Ci17Ci0gICAgUV9PQkpFQ1QK
LXB1YmxpYzoKLSAgICBRV2ViRnJhbWUgKmZyYW1lKCkgY29uc3Q7Ci0gICAgUVdpZGdldCAqcGx1
Z2luUGFyZW50V2lkZ2V0KCkgY29uc3Q7Ci0KLSAgICBlbnVtIFRhcmdldCB7Ci0gICAgICAgIFBs
dWdpbiwKLSAgICAgICAgTmV3LAotICAgICAgICBTZWxmLAotICAgICAgICBQYXJlbnQsCi0gICAg
ICAgIFRvcAotICAgIH07Ci0gICAgUVdlYk5ldHdvcmtKb2IgKnJlcXVlc3RVcmwoY29uc3QgUVdl
Yk5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBUYXJnZXQgdGFyZ2V0ID0gUGx1Z2luKTsKLQotc2ln
bmFsczoKLSAgICB2b2lkIHN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IqKTsKLSAgICB2b2lkIGRhdGEo
UVdlYk5ldHdvcmtKb2IqLCBjb25zdCBRQnl0ZUFycmF5ICZkYXRhKTsKLSAgICB2b2lkIGZpbmlz
aGVkKFFXZWJOZXR3b3JrSm9iKiwgaW50IGVycm9yQ29kZSk7Ci0KLXByaXZhdGU6Ci0gICAgZnJp
ZW5kIGNsYXNzIFFXZWJGYWN0b3J5TG9hZGVyOwotICAgIGZyaWVuZCBjbGFzcyBRV2ViTmV0d29y
a01hbmFnZXI7Ci0gICAgUVdlYk9iamVjdFBsdWdpbkNvbm5lY3RvcihRV2ViRnJhbWUgKmZyYW1l
KTsKLQotICAgIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3JQcml2YXRlICpkOwotfTsKLQotI2Vu
ZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCA2ZTVlOTg0Li40MTIxYTQxIDEwMDY0NAot
LS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcApAQCAtMTI4LDYgKzEyOCw3IEBAIFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2
YXRlKFFXZWJQYWdlICpxcSkKICAgICBuZXR3b3JrSW50ZXJmYWNlID0gMDsKICNlbHNlCiAgICAg
bmV0d29ya01hbmFnZXIgPSAwOworICAgIHBsdWdpbkZhY3RvcnkgPSAwOwogI2VuZGlmCiAgICAg
aW5zaWRlT3BlbkNhbGwgPSBmYWxzZTsKIApAQCAtMTQwNiw2ICsxNDA3LDE2IEBAIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29uc3QKICAg
ICByZXR1cm4gZC0+bmV0d29ya01hbmFnZXI7CiB9CiAKK3ZvaWQgUVdlYlBhZ2U6OnNldFBsdWdp
bkZhY3RvcnkoUVdlYlBsdWdpbkZhY3RvcnkgKmZhY3RvcnkpCit7CisgICAgZC0+cGx1Z2luRmFj
dG9yeSA9IGZhY3Rvcnk7Cit9CisKK1FXZWJQbHVnaW5GYWN0b3J5ICpRV2ViUGFnZTo6cGx1Z2lu
RmFjdG9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPnBsdWdpbkZhY3Rvcnk7Cit9CisKICNl
bmRpZgogCiAvKiEKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaCBiL1dlYktp
dC9xdC9BcGkvcXdlYnBhZ2UuaAppbmRleCBlNzZmOTM1Li44NTU3YzMxIDEwMDY0NAotLS0gYS9X
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCkBA
IC00Miw2ICs0Miw3IEBAIGNsYXNzIFFXZWJIaXN0b3J5OwogY2xhc3MgUVdlYlBhZ2VQcml2YXRl
OwogY2xhc3MgUVdlYkZyYW1lRGF0YTsKIGNsYXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlOworY2xh
c3MgUVdlYlBsdWdpbkZhY3Rvcnk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBD
aHJvbWVDbGllbnRRdDsKQEAgLTE3MSw2ICsxNzIsOSBAQCBwdWJsaWM6CiAjZWxzZQogICAgIHZv
aWQgc2V0TmV0d29ya0FjY2Vzc01hbmFnZXIoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2Vy
KTsKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkgY29u
c3Q7CisKKyAgICB2b2lkIHNldFBsdWdpbkZhY3RvcnkoUVdlYlBsdWdpbkZhY3RvcnkgKmZhY3Rv
cnkpOworICAgIFFXZWJQbHVnaW5GYWN0b3J5ICpwbHVnaW5GYWN0b3J5KCkgY29uc3Q7CiAjZW5k
aWYKIAogICAgIHF1aW50NjQgdG90YWxCeXRlcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZV9wLmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAppbmRleCA4
MGIxZTI5Li42NGVkZDMyIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAor
KysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaApAQCAtMTU0LDYgKzE1NCwxMCBAQCBwdWJs
aWM6CiAgICAgUVdlYlNldHRpbmdzICpzZXR0aW5nczsKIAogICAgIFFBY3Rpb24gKmFjdGlvbnNb
UVdlYlBhZ2U6OldlYkFjdGlvbkNvdW50XTsKKworI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAK
KyAgICBRV2ViUGx1Z2luRmFjdG9yeSAqcGx1Z2luRmFjdG9yeTsKKyNlbmRpZgogfTsKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcCBiL1dl
YktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNiNWQ0NTUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJwbHVnaW5mYWN0b3J5LmNwcApAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKKworUVdlYlBsdWdpbkZhY3Rvcnk6OlFX
ZWJQbHVnaW5GYWN0b3J5KFFPYmplY3QgKnBhcmVudCkKKyAgICA6IFFPYmplY3QocGFyZW50KQor
eworfQorCitRV2ViUGx1Z2luRmFjdG9yeTo6flFXZWJQbHVnaW5GYWN0b3J5KCkKK3sKK30KKwor
dm9pZCBRV2ViUGx1Z2luRmFjdG9yeTo6cmVmcmVzaFBsdWdpbnMoKQoreworfQorCitib29sIFFX
ZWJQbHVnaW5GYWN0b3J5OjpleHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3QgRXh0
ZW5zaW9uT3B0aW9uICpvcHRpb24sIEV4dGVuc2lvblJldHVybiAqb3V0cHV0KQoreworfQorCiti
b29sIFFXZWJQbHVnaW5GYWN0b3J5OjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5z
aW9uKSBjb25zdAoreworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFj
dG9yeS5oIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDVmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
cXQvQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAgQ29weXJp
Z2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKworICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisKKyovCisjaWZuZGVmIFFXRUJQTFVHSU5GQUNUT1JZX0gKKyNkZWZpbmUgUVdFQlBMVUdJTkZB
Q1RPUllfSAorCisjaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgorCisjaW5jbHVkZSA8UXRDb3Jl
L3FvYmplY3QuaD4KKyNpbmNsdWRlIDxRdENvcmUvcXN0cmluZ2xpc3QuaD4KKworY2xhc3MgUVVy
bDsKK2NsYXNzIFFXZWJQbHVnaW5GYWN0b3J5UHJpdmF0ZTsKK2NsYXNzIFFTdHJpbmc7CisKK2Ns
YXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJQbHVnaW5GYWN0b3J5IDogcHVibGljIFFPYmplY3QKK3sK
KyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHN0cnVjdCBNaW1lVHlwZSB7CisgICAgICAgIFFT
dHJpbmcgbmFtZTsKKyAgICAgICAgUVN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgUVN0cmlu
Z0xpc3QgZmlsZUV4dGVuc2lvbnM7CisgICAgfTsKKworICAgIHN0cnVjdCBQbHVnaW4geworICAg
ICAgICBRU3RyaW5nIG5hbWU7CisgICAgICAgIFFTdHJpbmcgZGVzY3JpcHRpb247CisgICAgICAg
IFFMaXN0PE1pbWVUeXBlPiBtaW1lVHlwZXM7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFFXZWJQ
bHVnaW5GYWN0b3J5KFFPYmplY3QgKnBhcmVudCA9IDApOworICAgIHZpcnR1YWwgflFXZWJQbHVn
aW5GYWN0b3J5KCk7CisKKyAgICB2aXJ0dWFsIFFMaXN0PFBsdWdpbj4gcGx1Z2lucygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVmcmVzaFBsdWdpbnMoKTsKKworICAgIHZpcnR1YWwg
UU9iamVjdCAqY3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFFVcmwgJnVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnROYW1lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0ID0gMDsKKwor
ICAgIGVudW0gRXh0ZW5zaW9uIHsKKyAgICB9OworICAgIGNsYXNzIEV4dGVuc2lvbk9wdGlvbgor
ICAgIHt9OworICAgIGNsYXNzIEV4dGVuc2lvblJldHVybgorICAgIHt9OworICAgIHZpcnR1YWwg
Ym9vbCBleHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbiwgY29uc3QgRXh0ZW5zaW9uT3B0aW9u
ICpvcHRpb24gPSAwLCBFeHRlbnNpb25SZXR1cm4gKm91dHB1dCA9IDApOworICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBRV2ViUGx1Z2luRmFjdG9yeVByaXZhdGUgKmQ7Cit9OworCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4
IGY3Nzc3NDEuLjM2Yjg5YTAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQxIEBACiAyMDA4LTAzLTA3ICBTaW1vbiBI
YXVzbWFubiAgPGhhdXNtYW5uQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZWQgdGhlIFFXZWJPYmplY3RQbHVnaW4gaW50
ZXJmYWNlcyB3aXRoIFFXZWJQbHVnaW5GYWN0b3J5LgorCisgICAgICAgICogQXBpL3F3ZWJuZXR3
b3JraW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkKToKKyAg
ICAgICAgKFFXZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFFXZWJOZXR3b3Jr
TWFuYWdlcjo6c3RhcnRlZCk6CisgICAgICAgIChRV2ViTmV0d29ya01hbmFnZXI6OmRhdGEpOgor
ICAgICAgICAoUVdlYk5ldHdvcmtNYW5hZ2VyOjpmaW5pc2hlZCk6CisgICAgICAgICogQXBpL3F3
ZWJuZXR3b3JraW50ZXJmYWNlX3AuaDoKKyAgICAgICAgKFFXZWJOZXR3b3JrSm9iUHJpdmF0ZTo6
UVdlYk5ldHdvcmtKb2JQcml2YXRlKToKKyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbi5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3ZWJvYmplY3RwbHVnaW4uaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBBcGkvcXdlYm9iamVjdHBsdWdpbl9wLmg6IFJlbW92ZWQuCisgICAgICAgICog
QXBpL3F3ZWJvYmplY3RwbHVnaW5jb25uZWN0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIEFw
aS9xd2Vib2JqZWN0cGx1Z2luY29ubmVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlUHJpdmF0ZTo6UVdlYlBhZ2VQcml2YXRlKToK
KyAgICAgICAgKFFXZWJQYWdlOjpzZXRQbHVnaW5GYWN0b3J5KToKKyAgICAgICAgKFFXZWJQYWdl
OjpwbHVnaW5GYWN0b3J5KToKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuaDoKKyAgICAgICAgKiBB
cGkvcXdlYnBhZ2VfcC5oOgorICAgICAgICAqIEFwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHA6IEFk
ZGVkLgorICAgICAgICAoUVdlYlBsdWdpbkZhY3Rvcnk6OlFXZWJQbHVnaW5GYWN0b3J5KToKKyAg
ICAgICAgKFFXZWJQbHVnaW5GYWN0b3J5Ojp+UVdlYlBsdWdpbkZhY3RvcnkpOgorICAgICAgICAo
UVdlYlBsdWdpbkZhY3Rvcnk6OnJlZnJlc2hQbHVnaW5zKToKKyAgICAgICAgKFFXZWJQbHVnaW5G
YWN0b3J5OjpleHRlbnNpb24pOgorICAgICAgICAqIEFwaS9xd2VicGx1Z2luZmFjdG9yeS5oOiBB
ZGRlZC4KKyAgICAgICAgKE1pbWVUeXBlOjopOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRRdDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDo6Y3JlYXRlUGx1Z2luKToKKworMjAwOC0wMy0wNyAgU2ltb24gSGF1c21hbm4gIDxo
YXVzbWFubkB3ZWJraXQub3JnPgorCiAgICAgICAgIEZpeCB0aGUgUXQgYnVpbGQuCiAKICAgICAg
ICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmNwcAppbmRleCBlZDkxYjg2Li5kZGEwY2VlIDEwMDY0NAotLS0g
YS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGx1Z2luRGF0YS5o
IgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVk
ZSAicXdlYmZyYW1lLmgiCiAjaW5jbHVkZSAicXdlYmZyYW1lX3AuaCIKICNpbmNsdWRlICJxd2Vi
aGlzdG9yeWludGVyZmFjZS5oIgorI2luY2x1ZGUgInF3ZWJwbHVnaW5mYWN0b3J5LmgiCiAKICNp
bmNsdWRlIDxxZmlsZWluZm8uaD4KIApAQCAtNjAsNyArNjIsNiBAQAogI2luY2x1ZGUgPFFOZXR3
b3JrUmVwbHk+CiAjZWxzZQogI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNp
bmNsdWRlICJxd2Vib2JqZWN0cGx1Z2luX3AuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZQpAQCAtOTA3LDExICs5MDgsOCBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVu
dFF0OjpvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0CiAgICAgaWYgKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkpCiAgICAg
ICAgIHJldHVybiBPYmplY3RDb250ZW50SW1hZ2U7CiAKLSAgICAvLyAjIyMgRklYTUUgUXQgNC40
Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgaWYgKFFXZWJGYWN0b3J5TG9hZGVyOjpz
ZWxmKCktPnN1cHBvcnRzTWltZVR5cGUobWltZVR5cGUpKQotICAgICAgICByZXR1cm4gT2JqZWN0
Q29udGVudE5ldHNjYXBlUGx1Z2luOwotI2VuZGlmCisgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAm
JiBtX2ZyYW1lLT5wYWdlKCktPnBsdWdpbkRhdGEoKS0+c3VwcG9ydHNNaW1lVHlwZShtaW1lVHlw
ZSkpCisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50T3RoZXJQbHVnaW47CiAKICAgICBpZiAo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKSkK
ICAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKQEAgLTk3MiwxMSArOTcwLDExIEBA
IFdpZGdldCogRnJhbWVMb2FkZXJDbGllbnRRdDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUm
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyAjIyMg
RklYTUU6IHF0IDQuNAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIGlmICghb2JqZWN0
KQotICAgICAgICBvYmplY3QgPSBRV2ViRmFjdG9yeUxvYWRlcjo6c2VsZigpLT5jcmVhdGUobV93
ZWJGcmFtZSwgcXVybCwgbWltZVR5cGUsIHBhcmFtcywgdmFsdWVzKTsKLSNlbmRpZgorICAgIGlm
ICghb2JqZWN0KSB7CisgICAgICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0b3J5ID0gbV93ZWJG
cmFtZS0+cGFnZSgpLT5wbHVnaW5GYWN0b3J5KCk7CisgICAgICAgIGlmIChmYWN0b3J5KQorICAg
ICAgICAgICAgb2JqZWN0ID0gZmFjdG9yeS0+Y3JlYXRlKG1pbWVUeXBlLCBxdXJsLCBwYXJhbXMs
IHZhbHVlcyk7CisgICAgfQogCiAgICAgaWYgKG9iamVjdCkgewogICAgICAgICBRV2lkZ2V0ICp3
aWRnZXQgPSBxb2JqZWN0X2Nhc3Q8UVdpZGdldCAqPihvYmplY3QpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNmNTk2NjQu
LjY2ZWNiMjAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOC0wMy0wNyAgU2ltb24gSGF1c21h
bm4gIDxoYXVzbWFubkB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFBvcnRlZCB0aGUgbmV0c2NhcGUgdGVzdCBwbHVnaW4gdG8gUVdl
YlBsdWdpbkZhY3RvcnkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9x
dC90ZXN0cGx1Z2luLmNwcDoKKyAgICAgICAgKFRlc3RQbHVnaW46OnBsdWdpbnMpOgorICAgICAg
ICAoVGVzdFBsdWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC90ZXN0
cGx1Z2luLmg6CisKIDIwMDgtMDMtMDYgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDVkZjhhMzguLjJlNDk3MGEgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLmNw
cAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVk
ZSAianNvYmplY3RzLmgiCisjaW5jbHVkZSAidGVzdHBsdWdpbi5oIgogCiAjaW5jbHVkZSA8UURp
cj4KICNpbmNsdWRlIDxRRmlsZT4KQEAgLTg3LDYgKzg4LDggQEAgV2ViUGFnZTo6V2ViUGFnZShR
V2lkZ2V0ICpwYXJlbnQsIER1bXBSZW5kZXJUcmVlICpkcnQpCiAgICAgc2V0dGluZ3MoKS0+c2V0
QXR0cmlidXRlKFFXZWJTZXR0aW5nczo6TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbiwgZmFsc2Up
OwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGdlb21ldHJ5Q2hhbmdlUmVxdWVzdChjb25zdCBR
UmVjdCAmKSksCiAgICAgICAgICAgICB0aGlzLCBTTE9UKHNldFZpZXdHZW9tZXRyeShjb25zdCBR
UmVjdCAmICkpKTsKKworICAgIHNldFBsdWdpbkZhY3RvcnkobmV3IFRlc3RQbHVnaW4odGhpcykp
OwogfQogCiBRV2ViUGFnZSAqV2ViUGFnZTo6Y3JlYXRlV2luZG93KCkKZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXggZGQ0YzBlOS4uNzM4YmU3ZiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICAqLwogCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJ0ZXN0cGx1Z2luLmgiCiAKICNpbmNs
dWRlIDxxc3RyaW5nbGlzdC5oPgogI2luY2x1ZGUgPHFhcHBsaWNhdGlvbi5oPgpAQCAtNDksMTAg
KzQ4LDYgQEAKICNpbmNsdWRlIDxleGVjaW5mby5oPgogI2VuZGlmCiAKLSNpZiBRVF9WRVJTSU9O
IDwgMHgwNDA0MDAKLVFfSU1QT1JUX1BMVUdJTih0ZXN0cGx1Z2luKQotI2VuZGlmCi0KIHZvaWQg
bWVzc2FnZUhhbmRsZXIoUXRNc2dUeXBlIHR5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAg
ICAgaWYgKHR5cGUgPT0gUXRDcml0aWNhbE1zZykgewpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC90ZXN0cGx1Z2luLmNwcAppbmRleCAyNzU1OGM5Li5mM2UwMzk5IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNwcAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmNwcApAQCAtMjcsMTAgKzI3LDgg
QEAKICAqLwogI2luY2x1ZGUgInRlc3RwbHVnaW4uaCIKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0
MDQwMAotCiBUZXN0UGx1Z2luOjpUZXN0UGx1Z2luKFFPYmplY3QgKnBhcmVudCkKLSAgICA6IFFX
ZWJPYmplY3RQbHVnaW4ocGFyZW50KQorICAgIDogUVdlYlBsdWdpbkZhY3RvcnkocGFyZW50KQog
ewogfQogCkBAIC0zOCwzNCArMzYsMzIgQEAgVGVzdFBsdWdpbjo6flRlc3RQbHVnaW4oKQogewog
fQogCi1RU3RyaW5nTGlzdCBUZXN0UGx1Z2luOjprZXlzKCkgY29uc3QKK1FMaXN0PFFXZWJQbHVn
aW5GYWN0b3J5OjpQbHVnaW4+IFRlc3RQbHVnaW46OnBsdWdpbnMoKSBjb25zdAogewotICAgIHJl
dHVybiBRU3RyaW5nTGlzdChRTGF0aW4xU3RyaW5nKCJ0ZXN0cGx1Z2luIikpOwotfQorICAgIFFX
ZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4gcGx1Z2luOwogCi1RU3RyaW5nIFRlc3RQbHVnaW46OmRl
c2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJpbmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUUxh
dGluMVN0cmluZygidGVzdGRlc2NyaXB0aW9uIik7Ci19CisgICAgcGx1Z2luLm5hbWUgPSAidGVz
dHBsdWdpbiI7CisgICAgcGx1Z2luLmRlc2NyaXB0aW9uID0gInRlc3RkZXNjcmlwdGlvbiI7Cisg
ICAgTWltZVR5cGUgbWltZVR5cGU7CisgICAgbWltZVR5cGUubmFtZSA9ICJ0ZXN0dHlwZSI7Cisg
ICAgbWltZVR5cGUuZmlsZUV4dGVuc2lvbnMuYXBwZW5kKCJ0ZXN0c3VmZml4ZXMiKTsKKyAgICBw
bHVnaW4ubWltZVR5cGVzLmFwcGVuZChtaW1lVHlwZSk7CiAKLVFTdHJpbmdMaXN0IFRlc3RQbHVn
aW46Om1pbWV0eXBlc0ZvcktleShjb25zdCBRU3RyaW5nICYpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFFTdHJpbmdMaXN0KFFMYXRpbjFTdHJpbmcoInRlc3R0eXBlIikpOwotfQorICAgIHBsdWdpbi5u
YW1lID0gInRlc3RwbHVnaW4yIjsKKyAgICBwbHVnaW4uZGVzY3JpcHRpb24gPSAidGVzdGRlc2Ny
aXB0aW9uMiI7CisgICAgbWltZVR5cGUubmFtZSA9ICJ0ZXN0dHlwZTIiOworICAgIG1pbWVUeXBl
LmZpbGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1ZmZpeGVzMiIpOworICAgIG1pbWVUeXBlLmZp
bGVFeHRlbnNpb25zLmFwcGVuZCgidGVzdHN1ZmZpeGVzMyIpOworICAgIHBsdWdpbi5taW1lVHlw
ZXMuYXBwZW5kKG1pbWVUeXBlKTsKIAotUVN0cmluZ0xpc3QgVGVzdFBsdWdpbjo6ZXh0ZW5zaW9u
c0Zvck1pbWV0eXBlKGNvbnN0IFFTdHJpbmcgJikgY29uc3QKLXsKLSAgICByZXR1cm4gUVN0cmlu
Z0xpc3QoUUxhdGluMVN0cmluZygidGVzdHN1ZmZpeGVzIikpOworICAgIHJldHVybiBRTGlzdDxR
V2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPigpIDw8IHBsdWdpbjsKIH0KIAotUU9iamVjdCAqVGVz
dFBsdWdpbjo6Y3JlYXRlKFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3IgKiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgUVN0cmluZyAmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFT
dHJpbmdMaXN0ICYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xp
c3QgJikgY29uc3QKK1FPYmplY3QgKlRlc3RQbHVnaW46OmNyZWF0ZShjb25zdCBRU3RyaW5nICZt
aW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRVXJsICZ1cmwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3VtZW50TmFt
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmluZ0xpc3QgJmFyZ3Vt
ZW50VmFsdWVzKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQogCi1RX0VYUE9SVF9QTFVHSU4y
KHRlc3RwbHVnaW4sIFRlc3RQbHVnaW4pCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L3Rlc3RwbHVnaW4uaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L3Rlc3RwbHVnaW4uaAppbmRleCBlMzA1MDY5Li5lY2ZkOTc3IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC90ZXN0cGx1Z2luLmgKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvdGVzdHBsdWdpbi5oCkBAIC0yNSwyOCArMjUsMjEgQEAKICAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwotI2luY2x1ZGUgPHFnbG9iYWwuaD4K
LSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNkZWZpbmUgUVRfU1RBVElDUExVR0lOCi0jaW5j
bHVkZSA8cXdlYm9iamVjdHBsdWdpbi5oPgorI2luY2x1ZGUgPHF3ZWJwbHVnaW5mYWN0b3J5Lmg+
CiAKIAotY2xhc3MgVGVzdFBsdWdpbiA6IHB1YmxpYyBRV2ViT2JqZWN0UGx1Z2luCitjbGFzcyBU
ZXN0UGx1Z2luIDogcHVibGljIFFXZWJQbHVnaW5GYWN0b3J5CiB7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgVGVzdFBsdWdpbihRT2JqZWN0ICpwYXJlbnQgPSAwKTsKICAgICB2aXJ0dWFsIH5UZXN0
UGx1Z2luKCk7CiAKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGtleXMoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFFMaXN0PFBsdWdpbj4gcGx1Z2lucygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBRU3Ry
aW5nIGRlc2NyaXB0aW9uRm9yS2V5KGNvbnN0IFFTdHJpbmcgJmtleSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBRU3RyaW5nTGlzdCBtaW1ldHlwZXNGb3JLZXkoY29uc3QgUVN0cmluZyAma2V5KSBjb25z
dDsKLSAgICB2aXJ0dWFsIFFTdHJpbmdMaXN0IGV4dGVuc2lvbnNGb3JNaW1ldHlwZShjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGUoUVdl
Yk9iamVjdFBsdWdpbkNvbm5lY3RvciAqY29ubmVjdG9yLAorICAgIHZpcnR1YWwgUU9iamVjdCAq
Y3JlYXRlKGNvbnN0IFFTdHJpbmcgJm1pbWVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFFVcmwgJnVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U3RyaW5nICZtaW1lVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3Ry
aW5nTGlzdCAmYXJndW1lbnROYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU3RyaW5nTGlzdCAmYXJndW1lbnRWYWx1ZXMpIGNvbnN0OworCiB9OwogCi0jZW5kaWYK
</data>
<flag name="review"
          id="8567"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>