<?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>160831</bug_id>
          
          <creation_ts>2016-08-12 16:08:15 -0700</creation_ts>
          <short_desc>Move the plug-in and WebGL blacklist code to WebCore</short_desc>
          <delta_ts>2016-08-16 20:48:23 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hs85.jeong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1219767</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-12 16:08:15 -0700</bug_when>
    <thetext>Move the plug-in and WebGL blacklist code to WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219772</commentid>
    <comment_count>1</comment_count>
      <attachid>285971</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-12 16:13:17 -0700</bug_when>
    <thetext>Created attachment 285971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219781</commentid>
    <comment_count>2</comment_count>
      <attachid>285975</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-12 16:37:23 -0700</bug_when>
    <thetext>Created attachment 285975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219782</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 16:39:47 -0700</bug_when>
    <thetext>Attachment 285975 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/PluginBlacklist.mm:150:  Missing space around : in range-based for statement  [whitespace/colon] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219784</commentid>
    <comment_count>4</comment_count>
      <attachid>285971</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-12 16:44:41 -0700</bug_when>
    <thetext>Comment on attachment 285971
Patch

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

&gt; Source/WebCore/platform/mac/BlacklistUpdater.h:33
&gt; +#include &lt;Foundation/Foundation.h&gt;
&gt; +#include &lt;memory&gt;
&gt; +#include &lt;string&gt;
&gt; +#include &lt;vector&gt;

I&apos;m not sure you need any of these.  Maybe something for dispatch_queue_t.

&gt; Source/WebCore/platform/mac/BlacklistUpdater.h:51
&gt; +private:
&gt; +
&gt; +    static NSDictionary *readBlacklistData();

Extra newline.

&gt; Source/WebCore/platform/mac/BlacklistUpdater.mm:59
&gt; +NSDictionary * BlacklistUpdater::readBlacklistData()

Extra space.

&gt; Source/WebCore/platform/mac/BlacklistUpdater.mm:90
&gt; +        s_pluginBlacklist = 0;

nullptr.

&gt; Source/WebCore/platform/mac/BlacklistUpdater.mm:95
&gt; +        s_webGLBlacklist = 0;

nullptr.

&gt; Source/WebCore/platform/mac/PluginBlacklist.h:66
&gt; +    NSDictionary *m_bundleIDToMinimumSecureVersion;
&gt; +    NSDictionary *m_bundleIDToMinimumCompatibleVersion;
&gt; +    NSDictionary *m_bundleIDToBlockedVersions;
&gt; +    NSSet *m_bundleIDsWithAvailableUpdates;

RetainPtrs?

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:72
&gt; +    CFDictionaryRef systemVersionDictionary = _CFCopySystemVersionDictionary();

RetainPtr?

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:87
&gt; +        for (NSString *bundleID in bundleIDs) {

What is guaranteeing these are all NSStrings?

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:89
&gt; +            assert(versionInfo);

ASSERT?

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:117
&gt; +    return std::unique_ptr&lt;PluginBlacklist&gt;(new PluginBlacklist(bundleIDToMinimumSecureVersion, bundleIDToMinimumCompatibleVersion, bundleIDToBlockedVersions, bundleIDsWithAvailableUpdates));

std::make_unique?

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:74
&gt; +    int major; // Represents the 13 in 13C64.
&gt; +    int minor; // Represents the C in 13C64 (as a number where A == 1, i.e. 3).
&gt; +    int build; // Represents the 64 in 13C64.

= 0; here to avoid need for default constructor.

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:86
&gt; +        return OSBuildInfo();

return { };

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:153
&gt; +    unsigned maskValue;
&gt; +    [scanner scanHexInt:&amp;maskValue];

Please write a function that given a string with hex digits returns an unsigned 32-bit int.

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:171
&gt; +    CFDictionaryRef systemVersionDictionary = _CFCopySystemVersionDictionary();

RetainPtr?

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:215
&gt; +    for (NSDictionary *blockData in blockEntries) {
&gt; +
&gt; +        GLint gpuMask = gpuMaskFromString([blockData objectForKey:@&quot;GPU&quot;]);

Extra newline.

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:242
&gt; +    return std::unique_ptr&lt;WebGLBlacklist&gt;(new WebGLBlacklist(globalCommand));

std::make_unique

&gt; Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h:32
&gt; +#include &lt;WebCore/PluginBlacklist.h&gt;

Why is this change needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219790</commentid>
    <comment_count>5</comment_count>
      <attachid>285975</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-12 16:48:08 -0700</bug_when>
    <thetext>Comment on attachment 285975
Patch

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

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:46
&gt; +        PluginBlacklist* pluginBlacklist = BlacklistUpdater::pluginBlacklist();

auto*?

&gt; Source/WebCore/platform/mac/PluginBlacklist.mm:62
&gt; +        PluginBlacklist* pluginBlacklist = BlacklistUpdater::pluginBlacklist();

auto*

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:113
&gt; +        WebGLBlacklist* webGLBlacklist = BlacklistUpdater::webGLBlacklist();

auto*

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:129
&gt; +        WebGLBlacklist* webGLBlacklist = BlacklistUpdater::webGLBlacklist();

auto*

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:211
&gt; +    BlockCommand globalCommand = BlockCommand::Allow;

auto?

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:217
&gt; +        OSBuildInfo blockedBuildInfo = buildInfoFromOSBuildString(static_cast&lt;NSString*&gt;([blockData objectForKey:@&quot;OSBuild&quot;]));

auto?

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:220
&gt; +        BlockComparison comparison = BlockComparison::Equals;

auto?

&gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:227
&gt; +        BlockCommand command = BlockCommand::Allow;

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219794</commentid>
    <comment_count>6</comment_count>
      <attachid>285980</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-12 16:56:22 -0700</bug_when>
    <thetext>Created attachment 285980
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219796</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-12 16:59:41 -0700</bug_when>
    <thetext>Attachment 285980 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/PluginBlacklist.mm:150:  Missing space around : in range-based for statement  [whitespace/colon] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220043</commentid>
    <comment_count>8</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-15 09:40:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 285975 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=285975&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mac/PluginBlacklist.mm:46
&gt; &gt; +        PluginBlacklist* pluginBlacklist = BlacklistUpdater::pluginBlacklist();
&gt; 
&gt; auto*?
&gt; 
&gt; &gt; Source/WebCore/platform/mac/PluginBlacklist.mm:62
&gt; &gt; +        PluginBlacklist* pluginBlacklist = BlacklistUpdater::pluginBlacklist();
&gt; 
&gt; auto*
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:113
&gt; &gt; +        WebGLBlacklist* webGLBlacklist = BlacklistUpdater::webGLBlacklist();
&gt; 
&gt; auto*
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:129
&gt; &gt; +        WebGLBlacklist* webGLBlacklist = BlacklistUpdater::webGLBlacklist();
&gt; 
&gt; auto*
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:211
&gt; &gt; +    BlockCommand globalCommand = BlockCommand::Allow;
&gt; 
&gt; auto?
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:217
&gt; &gt; +        OSBuildInfo blockedBuildInfo = buildInfoFromOSBuildString(static_cast&lt;NSString*&gt;([blockData objectForKey:@&quot;OSBuild&quot;]));
&gt; 
&gt; auto?
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:220
&gt; &gt; +        BlockComparison comparison = BlockComparison::Equals;
&gt; 
&gt; auto?
&gt; 
&gt; &gt; Source/WebCore/platform/mac/WebGLBlacklist.mm:227
&gt; &gt; +        BlockCommand command = BlockCommand::Allow;
&gt; 
&gt; auto?

I&apos;ll resolve these in an upcoming patch - I wanted to keep the changes between WKSI and Open Source minimal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220047</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-08-15 09:44:48 -0700</bug_when>
    <thetext>Committed r204462: &lt;http://trac.webkit.org/changeset/204462&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1220753</commentid>
    <comment_count>10</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2016-08-16 20:48:23 -0700</bug_when>
    <thetext>CMake build fix
Committed r204548: &lt;http://trac.webkit.org/changeset/204548&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285971</attachid>
            <date>2016-08-12 16:13:17 -0700</date>
            <delta_ts>2016-08-12 16:56:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160831-20160812161138.patch</filename>
            <type>text/plain</type>
            <size>60611</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUzZTVlNzk4MmJjODFi
MWNmMmQxOTgxZGEzODhkYWI1ZWNjNDQ4Zi4uOWUxYjQxMjQ1ODlmZWNkYWY3MjhmNDk4MzAxYzdk
OThhOTViYzA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTA4LTEyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgcGx1
Zy1pbiBhbmQgV2ViR0wgYmxhY2tsaXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpxdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpwbHVnaW5CbGFja2xpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxhY2tsaXN0VXBkYXRlcjo6d2ViR0xCbGFja2xpc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9CbGFja2xpc3RVcGRhdGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlYWRCbGFja2xpc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OmluaXRpYWxpemVRdWV1ZSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGx1Z2luQmxhY2tsaXN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkJsYWNr
bGlzdDo6bG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5CbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFj
a2xpc3Q6On5QbHVnaW5CbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2ts
aXN0OjpzcGxpdE9TVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OmxvYWRQb2xpY3lGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2tsaXN0
Ojppc1VwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OlBsdWdpbkJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkdMQmxhY2tsaXN0
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJHTEJsYWNrbGlzdC5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6T1NCdWlsZEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6T1NCdWlsZEluZm86Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
T1NCdWlsZEluZm86Om9wZXJhdG9yPik6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6
b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6b3BlcmF0b3I8KToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5mb0Zyb21PU0J1aWxkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRCbG9ja1dlYkdMKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRTdWdnZXN0QmxvY2tpbmdXZWJHTCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRjaGVzR1BVKToKKyAgICAgICAgKFdlYkNvcmU6OmdwdU1hc2tGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCdWlsZEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEJsYWNrbGlzdDo6c2hvdWxkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xp
c3Q6OnNob3VsZFN1Z2dlc3RCbG9ja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJsYWNr
bGlzdDo6V2ViR0xCbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6
On5XZWJHTEJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVz
U1BJLmg6IEFkZGVkLgorCiAyMDE2LTA4LTEyICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA0NDA0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IGNjNjA2NWFkZTdmYmNhOTQxZDQ3MmM4MDUzNDUyNzg4YWY1ODU3
ZjcuLmQ4MjdiNGViNTMxZTkwODZlODI3Yjk2OTUzNWNiNDgyMzI3NGMzY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0wOC0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJs
YWNrbGlzdCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDgzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkb3B0IHRoZSBwbHVnLWluIGFuZCBXZWJHTCBibGFja2xpc3QgY29k
ZSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29kZSBmcm9tIFdlYktpdFN5c3Rl
bUludGVyZmFjZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tOgorICAgICAgICAoc2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChzaG91bGRCbG9ja1dlYkdMKToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3ZWJHTFBvbGljeUZvclVSTCk6CisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKToKKwog
MjAxNi0wOC0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
Z3Jlc3Npb24ocjIwNDI2OCk6IE1haWwgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBjb21wb3NlIGFu
IGVtYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmZmYzljYTczZTVmYzc0ZWI2OTUyZGEwNjJhOGFlNjZiYWNj
MjUwOS4uYjhlOWFlMzNhZDU2M2U2MDNhNTg5ZDdkODkxY2Q0Y2JlYWQzMWVmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE2LTA4LTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgcGx1Zy1pbiBhbmQgV2ViR0wgYmxhY2ts
aXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRvcHQgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJsYWNrbGlzdCBjb2RlIGZy
b20gV2ViQ29yZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjb2RlIGZyb20gV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLgorCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbklu
Zm9ybWF0aW9uTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRQbGF0Zm9ybVBsdWdpbk1vZHVs
ZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZv
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1t
OgorICAgICAgICAoV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUpOgorICAgICAgICAo
V0tDb250ZXh0U2hvdWxkQmxvY2tXZWJHTCk6CisgICAgICAgIChXS0NvbnRleHRTaG91bGRTdWdn
ZXN0QmxvY2tXZWJHTCk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpbkluZm9TdG9yZU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKToKKyAgICAg
ICAgKFdlYktpdDo6V0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5VG9QbHVnaW5Nb2R1bGVMb2FkUG9s
aWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKToKKworMjAxNi0wOC0xMiAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIG1lc3NhZ2Ug
bG9hZGluZyBuZXZlciBmaW5pc2hlcyBpbiBNYWlsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4MDYKICAgICAgICAgcmRhcjovL3Byb2JsZW0vMjc2
MjQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA3NzQ3MDA4MzY3ZmU2NTBkYjg2ZGU0ZDA5MThjYTE0NDljOGE5N2M2Li45MGY2
ZGUyN2Y4ZTI5MDNiYjczMGJmZDUzNTVmZDgyNGQwOGYyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIwLDYgKzEwMjAs
MTIgQEAKIAkJMUFGOEUxQzMxMjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGOEUxQzEx
MjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwICovOyB9OwogCQkxQUZFMTE5
OTBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTk3MENCRkZDQzQwMDMw
MTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE5QTBDQkZG
Q0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyog
SlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CisJCTFBRkZDNDUzMUQ1RTgxQzQwMDI2N0E2
NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5t
bSAqLzsgfTsKKwkJMUFGRkM0NTQxRDVFODFDQjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0ZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZGQzQ0
RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRlci5tbSAqLzsgfTsKKwkJMUFGRkM0
NTUxRDVFODFEMDAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkZDNDUwMUQ1RTdFQzcwMDI2N0E2NiAv
KiBQbHVnaW5CbGFja2xpc3QubW0gKi87IH07CisJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAv
KiBDRlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmggKi87
IH07CisJCTFBRkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRkM0NTExRDVFN0VD
NzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUFGRkM0NTkxRDVFODY2MTAwMjY3QTY2IC8qIFBsdWdp
bkJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFCMTI0RDhEMUQzODBC
NzAwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRp
YVNhbXBsZUFWRk9iakMuaCAqLzsgfTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1l
ZGlhU2FtcGxlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMu
bW0gKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcxODFF
RDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNDcsNiArODI1MywxMyBAQAogCQkxQUY4RTFDMTEy
NTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVNlcnZlckNGTmV0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFGRTExOTcwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE5
ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ0RDFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0
VXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbGFja2xpc3RVcGRh
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBRkZDNDRFMUQ1RTdFQzcwMDI2
N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQmxhY2tsaXN0VXBkYXRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5CbGFja2xpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTAxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJs
YWNrbGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdp
bkJsYWNrbGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTExRDVF
N0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ1NjFENUU4M0E3MDAyNjdBNjYgLyogQ0ZVdGls
aXRpZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0ZVdGlsaXRpZXNT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMxRDM4MEI3MDAwRUNE
RkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2FtcGxlQVZGT2JqQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAg
LyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRleHRCb3hTdHlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTUxMiw4ICsxMTUyNSw4IEBACiAJ
CTlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ0RTkxOTFDNDYyQ0ZDMDA1
MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhBOTU5MThCRUZDNzYwMDk4N0U5QSAvKiBDb2xsZWN0aW9uSW5kZXhDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xsZWN0aW9uSW5k
ZXhDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTA5MUQ1QUVC
MDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgcGF0
aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0N1c3RvbUVsZW1lbnRz
UmVnaXN0cnkuaDsgcGF0aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCRTY3MTA5MUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3Rv
bUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1lbnRzUmVn
aXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJGOUE4N0UxNjQ4REQyRjAw
MUM2QjIzIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdGMTY0OEREMkYwMDFDNkIyMyAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUQ2MzgwMEYxQUYxNkUxNjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTZWxmQWxp
Z25tZW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc3MTQsNiArMTc3
MjcsNyBAQAogCQkJCTY1MDg2REE3MTlBQzE3MTkwMDlBRjQ2QiAvKiBDRkxvY2FsZVNQSS5oICov
LAogCQkJCUExMEQ3RkVCMUMyNjc2RDEwMEM2QzExNSAvKiBDRk5ldHdvcmtDb25uZWN0aW9uQ2Fj
aGVTUEkuaCAqLywKIAkJCQlDRTEyNTI1QTFBMUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3b3JrU1BJ
LmggKi8sCisJCQkJMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmgg
Ki8sCiAJCQkJNDQ0OUE0MDQxQTk2NEIwMDAwQjY0QUQ1IC8qIENvcmVNZWRpYVNQSS5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBjZjsKQEAgLTE4MDAwLDYgKzE4MDE0LDggQEAKIAkJNjU4MkExNDgw
OTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMUFGRkM0NEQxRDVFN0VDNzAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0
ZXIuaCAqLywKKwkJCQkxQUZGQzQ0RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRl
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCUE3OTU0NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSAqLywKIAkJ
CQlBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tICovLApAQCAtMTgw
MjUsNiArMTgwNDEsOCBAQAogCQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBs
YXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tICovLAorCQkJCTFBRkZDNDRGMUQ1RTdFQzcw
MDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCAqLywKKwkJCQkxQUZGQzQ1MDFENUU3RUM3MDAy
NjdBNjYgLyogUGx1Z2luQmxhY2tsaXN0Lm1tICovLAogCQkJCTQ2MzQ1OTJCMUFDMjI3MTAwMEVD
QjcxQyAvKiBQb3dlck9ic2VydmVyTWFjLmNwcCAqLywKIAkJCQk0NkRCQjY0RTFBQjhDOTZGMDBE
OUE4MTMgLyogUG93ZXJPYnNlcnZlck1hYy5oICovLAogCQkJCTAwODFGRUZFMTZCMEEyQjYwMDhB
QUE3QSAvKiBQdWJsaWNTdWZmaXhNYWMubW0gKi8sCkBAIC0xODA2NCw2ICsxODA4Miw4IEBACiAJ
CQkJOTNFQjE2OTQwOUY4ODBCMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0g
Ki8sCiAJCQkJQkU4NTVGN0YwNzAxRTgzNTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3LmggKi8sCiAJ
CQkJQkU4NTYwNTEwNzAxRjkxMTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3Lm0gKi8sCisJCQkJMUFG
RkM0NTExRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8sCisJCQkJMUFGRkM0
NTIxRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tICovLAogCQkJCUUxQTMxNjJC
MTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCAqLywKIAkJ
CQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
Lm1tICovLAogCQkJCUNENTg5NkUwMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5oICovLApAQCAtMjI1MzAsOCArMjI1NTAsNiBAQAogCQlCQ0YxQTVCQTA5Nzgz
MjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCTVDNkU2NTNGMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuY3Bw
ICovLAotCQkJCTVDNkU2NTQwMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuaCAqLywKIAkJ
CQk0OUU5MTJBNDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQw
MTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYx
MkQgLyogY2YgKi8sCkBAIC0yMjcwNSw2ICsyMjcyMyw4IEBACiAJCQkJNjU5MzkyMzUwOUFFNDM0
NjAwMkM1MzFGIC8qIFVSTC5jcHAgKi8sCiAJCQkJNjU5MzkyMzYwOUFFNDM0NjAwMkM1MzFGIC8q
IFVSTC5oICovLAogCQkJCUJDQkQyMUFBMEU0MTdBRDQwMEEwNzBGMiAvKiBVUkxIYXNoLmggKi8s
CisJCQkJNUM2RTY1M0YxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5jcHAgKi8sCisJCQkJ
NUM2RTY1NDAxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5oICovLAogCQkJCTg2ODE2MEQx
MTg3NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuY3BwICovLAogCQkJCTg2ODE2MEQyMTg3
NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuaCAqLywKIAkJCQk3MUM5MTYwNzFEMTQ4M0Ez
MDBBQ0E0N0QgLyogVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oICovLApAQCAtMjQ4NTks
NiArMjQ4NzksNyBAQAogCQkJCTA3MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgw
RkJCOUMxRDAwNTEwMjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU5MUQ1RTg2NjEwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkxQzlGMkY5MUFFM0JFQjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzA5LDYg
KzI1MzMwLDcgQEAKIAkJCQlBODE4NUYzOTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1l
bnRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUEzN0FEMDk3QzcxNUYwMDE5RjNEOCAv
KiBET00uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAvKiBD
RlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzOEYwMTkwQUQ3MThEODAwNkE4
MUQxIC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5OTgxMkUwREJF
ODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTM4RjAxQjBBRDcxOEQ4MDA2QTgxRDEgLyogRE9NQWJzdHJhY3RWaWV3SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLApAQCAtMjc0NzYsNiArMjc0OTgsNyBAQAogCQkJCTkzQzM4QzAzMTY0NDcz
REQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUgLyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNEU0MTExODdGODJFMTAwNDU4ODJDIC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDNEE0MTUxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFNDEwMTg3RjgyRTEwMDQ1ODgy
QyAvKiBTY3JvbGxpbmdUcmVlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1ODA2NDE5MzI3
QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTYw
Nyw2ICsyOTYzMCw3IEBACiAJCQkJQTg3MURCMjYwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2NjgxN0ZBMTY2RkU2RDcw
MEZBMDdCNCAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MTM2OUQ3MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBRkZDNDU1MUQ1RTgxRDAwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMwNTE5OTUxQkIw
RjExMDAwRjM3NzJFIC8qIEhUTUxUaW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODcxREMyOTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFRpdGxlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMwNzE2LDYgKzMwNzQwLDcgQEAKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3
QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0M0I3
MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQzMTA1
QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUFGRkM0NTMxRDVFODFDNDAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzM1MDNDQzcxMDE3QTFCMTAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMzkwQ0E1NTBGRkMxNTdCMDA5MjE5NjIgLyogTm90aWZpY2F0
aW9uQ2VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjhDQTY4MTQ3MzMxNTIwMDc0Qzcy
QSAvKiBOb3RpZmljYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE0MDcs
NiArMzE0MzIsNyBAQAogCQkJCUIyMjI3QTQzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNYXJrZXJF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTQ2MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E0QTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
RkZDNDU0MUQ1RTgxQ0IwMDI2N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEQwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R01QYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODMzQzdDQTBBMkNGMDZCMDBE
NTc2NjQgLyogU1ZHTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOGNhOTJkYzRlMjlk
NDVkYmEzZTRjZjBjMmRiMDU5ODEzYzFmYzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApAQCAtMCwwICsxLDYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2lu
Y2x1ZGUgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNs
dWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFBsdWdpbkJsYWNrbGlzdDsKK2NsYXNzIFdlYkdMQmxhY2tsaXN0OworCitjbGFzcyBC
bGFja2xpc3RVcGRhdGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplUXVl
dWUoKTsKKyAgICBzdGF0aWMgdm9pZCByZWxvYWRJZk5lY2Vzc2FyeSgpOworCisgICAgc3RhdGlj
IGRpc3BhdGNoX3F1ZXVlX3QgcXVldWUoKSB7IHJldHVybiBzX3F1ZXVlOyB9CisgICAgc3RhdGlj
IFBsdWdpbkJsYWNrbGlzdCogcGx1Z2luQmxhY2tsaXN0KCkgeyByZXR1cm4gc19wbHVnaW5CbGFj
a2xpc3Q7IH0KKyAgICBzdGF0aWMgV2ViR0xCbGFja2xpc3QqIHdlYkdMQmxhY2tsaXN0KCkgeyBy
ZXR1cm4gc193ZWJHTEJsYWNrbGlzdDsgfTsKKworcHJpdmF0ZToKKworICAgIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKnJlYWRCbGFja2xpc3REYXRhKCk7CisKKyAgICBzdGF0aWMgZGlzcGF0Y2hfcXVl
dWVfdCBzX3F1ZXVlOworICAgIHN0YXRpYyBQbHVnaW5CbGFja2xpc3QqIHNfcGx1Z2luQmxhY2ts
aXN0OworICAgIHN0YXRpYyBXZWJHTEJsYWNrbGlzdCogc193ZWJHTEJsYWNrbGlzdDsKK307CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxh
Y2tsaXN0VXBkYXRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9CbGFja2xpc3RV
cGRhdGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlNzM4YzFjYTI1MzQ1NWI0OGY0M2IxODk4YzE5YzZkMzJl
MjlhMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxh
Y2tsaXN0VXBkYXRlci5tbQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJCbGFja2xpc3RVcGRhdGVyLmgiCisKKyNpZiBQTEFU
Rk9STShNQUMpCisKKyNpbXBvcnQgIlBsdWdpbkJsYWNrbGlzdC5oIgorI2ltcG9ydCAiV2ViR0xC
bGFja2xpc3QuaCIKKyNpbXBvcnQgPHN5cy9zdGF0Lmg+CisjaW1wb3J0IDxzeXMvdGltZS5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisvLyBUaGUgdGltZSBhZnRlciB3aGljaCB3ZSds
bCBjaGVjayB0aGUgYmxhY2tsaXN0IGRhdGEuCitzdGF0aWMgdGltZV90IGJsYWNrbGlzdE5leHRD
aGVja1RpbWU7CisKKy8vIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgd2UnbGwgY2hlY2sg
aWYgdGhlIGJsYWNrbGlzdCBkYXRhIGhhcyBjaGFuZ2VkLgorY29uc3QgdGltZV90IGJsYWNrbGlz
dENoZWNrVGltZUludGVydmFsID0gNjAgKiAxMDsKKworLy8gVGhlIHRpbWUgd2hlbiB3ZSBsYXN0
IHJlLXBhcnNlZCB0aGUgYmxhY2tsaXN0IGZpbGUuCitzdGF0aWMgdGltZV90IGJsYWNrbGlzdFVw
ZGF0ZVRpbWU7CisKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEw
MAorTlNTdHJpbmcgKiBjb25zdCBibGFja2xpc3RQYXRoID0gQCIvU3lzdGVtL0xpYnJhcnkvQ29y
ZVNlcnZpY2VzL1hQcm90ZWN0LmJ1bmRsZS9Db250ZW50cy9SZXNvdXJjZXMvWFByb3RlY3QubWV0
YS5wbGlzdCI7CisjZWxzZQorTlNTdHJpbmcgKiBjb25zdCBibGFja2xpc3RQYXRoID0gQCIvU3lz
dGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL0NvcmVUeXBlcy5idW5kbGUvQ29udGVudHMvUmVzb3Vy
Y2VzL1hQcm90ZWN0Lm1ldGEucGxpc3QiOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZGlzcGF0Y2hfcXVldWVfdCBCbGFja2xpc3RVcGRhdGVyOjpzX3F1ZXVlOworCitQbHVnaW5C
bGFja2xpc3QqIEJsYWNrbGlzdFVwZGF0ZXI6OnNfcGx1Z2luQmxhY2tsaXN0ID0gbnVsbHB0cjsK
K1dlYkdMQmxhY2tsaXN0KiBCbGFja2xpc3RVcGRhdGVyOjpzX3dlYkdMQmxhY2tsaXN0ID0gbnVs
bHB0cjsKKworTlNEaWN0aW9uYXJ5ICogQmxhY2tsaXN0VXBkYXRlcjo6cmVhZEJsYWNrbGlzdERh
dGEoKQoreworICAgIE5TRGF0YSAqZGF0YSA9IFtOU0RhdGEgZGF0YVdpdGhDb250ZW50c09mRmls
ZTpibGFja2xpc3RQYXRoXTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICByZXR1cm4gZHluYW1pY19vYmpjX2Nhc3Q8TlNEaWN0aW9uYXJ5PihbTlNQcm9wZXJ0eUxp
c3RTZXJpYWxpemF0aW9uIHByb3BlcnR5TGlzdFdpdGhEYXRhOmRhdGEgb3B0aW9uczpOU1Byb3Bl
cnR5TGlzdEltbXV0YWJsZSBmb3JtYXQ6bnVsbHB0ciBlcnJvcjpudWxscHRyXSk7Cit9CisKK3Zv
aWQgQmxhY2tsaXN0VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3NhcnkoKQoreworICAgIHN0cnVjdCB0
aW1ldmFsIHRpbWVWYWw7CisgICAgaWYgKCFnZXR0aW1lb2ZkYXkoJnRpbWVWYWwsIE5VTEwpKSB7
CisgICAgICAgIGlmICh0aW1lVmFsLnR2X3NlYyA8IGJsYWNrbGlzdE5leHRDaGVja1RpbWUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYmxhY2tsaXN0TmV4dENoZWNrVGltZSA9
IHRpbWVWYWwudHZfc2VjICsgYmxhY2tsaXN0Q2hlY2tUaW1lSW50ZXJ2YWw7CisKKyAgICBzdHJ1
Y3Qgc3RhdCBzdGF0QnVmOworICAgIGlmIChzdGF0KFtibGFja2xpc3RQYXRoIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbl0sICZzdGF0QnVmKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHN0YXRCdWYuc3RfbXRpbWVzcGVjLnR2X3NlYyA9PSBibGFja2xpc3RVcGRhdGVUaW1lKQor
ICAgICAgICByZXR1cm47CisgICAgTlNEaWN0aW9uYXJ5ICpwcm9wZXJ0eUxpc3QgPSByZWFkQmxh
Y2tsaXN0RGF0YSgpOworICAgIGlmICghcHJvcGVydHlMaXN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoc19wbHVnaW5CbGFja2xpc3QpIHsKKyAgICAgICAgZGVsZXRlIHNfcGx1Z2luQmxh
Y2tsaXN0OworICAgICAgICBzX3BsdWdpbkJsYWNrbGlzdCA9IDA7CisgICAgfQorCisgICAgaWYg
KHNfd2ViR0xCbGFja2xpc3QpIHsKKyAgICAgICAgZGVsZXRlIHNfd2ViR0xCbGFja2xpc3Q7Cisg
ICAgICAgIHNfd2ViR0xCbGFja2xpc3QgPSAwOworICAgIH0KKworICAgIHNfcGx1Z2luQmxhY2ts
aXN0ID0gUGx1Z2luQmxhY2tsaXN0OjpjcmVhdGUocHJvcGVydHlMaXN0KS5yZWxlYXNlKCk7Cisg
ICAgc193ZWJHTEJsYWNrbGlzdCA9IFdlYkdMQmxhY2tsaXN0OjpjcmVhdGUocHJvcGVydHlMaXN0
KS5yZWxlYXNlKCk7CisKKyAgICBibGFja2xpc3RVcGRhdGVUaW1lID0gc3RhdEJ1Zi5zdF9tdGlt
ZXNwZWMudHZfc2VjOworfQorCit2b2lkIEJsYWNrbGlzdFVwZGF0ZXI6OmluaXRpYWxpemVRdWV1
ZSgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2UsIF57CisgICAgICAgIHNfcXVldWUgPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNv
bS5hcHBsZS5XZWJLaXQuQmxhY2tsaXN0IiwgMCk7CisgICAgfSk7Cit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODUzNjVmYjdjODQyYjU0ZGFmZTQ5ODE1MmVlNzRkYTJmYmIwOWRiOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnaW5CbGFja2xpc3QuaApA
QCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBM
QVRGT1JNKE1BQykKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8dmVjdG9yPgorCitPQkpDX0NMQVNTIE5TQXJyYXk7CitPQkpDX0NMQVNTIE5TRGljdGlv
bmFyeTsKK09CSkNfQ0xBU1MgTlNTZXQ7CitPQkpDX0NMQVNTIE5TU3RyaW5nOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsdWdpbkJsYWNrbGlzdCB7CitwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBMb2FkUG9saWN5IHsKKyAgICAgICAgTG9hZE5vcm1hbGx5LAorICAgICAgICBCbG9j
a2VkRm9yU2VjdXJpdHksCisgICAgICAgIEJsb2NrZWRGb3JDb21wYXRpYmlsaXR5LAorICAgIH07
CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTG9hZFBvbGljeSBsb2FkUG9saWN5Rm9yUGx1
Z2luVmVyc2lvbihOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllciwgTlNTdHJpbmcgKmJ1bmRsZVZl
cnNpb25TdHJpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlzUGx1Z2luVXBk
YXRlQXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyKTsKKworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQmxhY2tsaXN0PiBjcmVhdGUoTlNEaWN0aW9uYXJ5ICopOwor
ICAgIH5QbHVnaW5CbGFja2xpc3QoKTsKKworICAgIHN0YXRpYyBOU0FycmF5ICpzcGxpdE9TVmVy
c2lvbihOU1N0cmluZyAqb3NWZXJzaW9uKTsKKworICAgIExvYWRQb2xpY3kgbG9hZFBvbGljeUZv
clBsdWdpbihOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllciwgTlNTdHJpbmcgKmJ1bmRsZVZlcnNp
b25TdHJpbmcpIGNvbnN0OworICAgIGJvb2wgaXNVcGRhdGVBdmFpbGFibGUoTlNTdHJpbmcgKmJ1
bmRsZUlkZW50aWZpZXIpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBsdWdpbkJsYWNrbGlzdChO
U0RpY3Rpb25hcnkgKmJ1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5
ICpidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uLCBOU0RpY3Rpb25hcnkgKmJ1bmRs
ZUlEVG9CbG9ja2VkVmVyc2lvbnMsIE5TU2V0ICpidW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRl
cyk7CisKKyAgICBOU0RpY3Rpb25hcnkgKm1fYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9u
OworICAgIE5TRGljdGlvbmFyeSAqbV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9u
OworICAgIE5TRGljdGlvbmFyeSAqbV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zOworICAgIE5T
U2V0ICptX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzOworfTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbHVnaW5CbGFja2xpc3Qu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0Lm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmViY2M5NGZkYmI0YmY2ZDQ3MzgwNmYzNTQ0MmM4NTRmZDY4YjAzMzUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0Lm1t
CkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlBsdWdpbkJsYWNrbGlzdC5oIgorCisjaWYgUExBVEZPUk0oTUFDKQorCisjaW1w
b3J0ICJCbGFja2xpc3RVcGRhdGVyLmgiCisjaW1wb3J0ICJDRlV0aWxpdGllc1NQSS5oIgorI2lt
cG9ydCA8c3lzL3N0YXQuaD4KKyNpbXBvcnQgPHN5cy90aW1lLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5IFBsdWdpbkJsYWNrbGlzdDo6bG9h
ZFBvbGljeUZvclBsdWdpblZlcnNpb24oTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIsIE5TU3Ry
aW5nICpidW5kbGVWZXJzaW9uU3RyaW5nKQoreworICAgIEJsYWNrbGlzdFVwZGF0ZXI6OmluaXRp
YWxpemVRdWV1ZSgpOworCisgICAgX19ibG9jayBQbHVnaW5CbGFja2xpc3Q6OkxvYWRQb2xpY3kg
bG9hZFBvbGljeSA9IExvYWRQb2xpY3k6OkxvYWROb3JtYWxseTsKKyAgICBkaXNwYXRjaF9zeW5j
KEJsYWNrbGlzdFVwZGF0ZXI6OnF1ZXVlKCksIF57CisgICAgICAgIEJsYWNrbGlzdFVwZGF0ZXI6
OnJlbG9hZElmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgUGx1Z2luQmxhY2tsaXN0KiBwbHVnaW5C
bGFja2xpc3QgPSBCbGFja2xpc3RVcGRhdGVyOjpwbHVnaW5CbGFja2xpc3QoKTsKKyAgICAgICAg
aWYgKHBsdWdpbkJsYWNrbGlzdCkKKyAgICAgICAgICAgIGxvYWRQb2xpY3kgPSBwbHVnaW5CbGFj
a2xpc3QtPmxvYWRQb2xpY3lGb3JQbHVnaW4oYnVuZGxlSWRlbnRpZmllciwgYnVuZGxlVmVyc2lv
blN0cmluZyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gbG9hZFBvbGljeTsKK30KKworYm9vbCBQ
bHVnaW5CbGFja2xpc3Q6OmlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJ
ZGVudGlmaWVyKQoreworICAgIEJsYWNrbGlzdFVwZGF0ZXI6OmluaXRpYWxpemVRdWV1ZSgpOwor
CisgICAgX19ibG9jayBib29sIGlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlID0gZmFsc2U7CisgICAg
ZGlzcGF0Y2hfc3luYyhCbGFja2xpc3RVcGRhdGVyOjpxdWV1ZSgpLCBeeworICAgICAgICBCbGFj
a2xpc3RVcGRhdGVyOjpyZWxvYWRJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIFBsdWdpbkJsYWNr
bGlzdCogcGx1Z2luQmxhY2tsaXN0ID0gQmxhY2tsaXN0VXBkYXRlcjo6cGx1Z2luQmxhY2tsaXN0
KCk7CisgICAgICAgIGlmIChwbHVnaW5CbGFja2xpc3QpCisgICAgICAgICAgICBpc1BsdWdpblVw
ZGF0ZUF2YWlsYWJsZSA9IHBsdWdpbkJsYWNrbGlzdC0+aXNVcGRhdGVBdmFpbGFibGUoYnVuZGxl
SWRlbnRpZmllcik7CisgICAgfSk7CisKKyAgICByZXR1cm4gaXNQbHVnaW5VcGRhdGVBdmFpbGFi
bGU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbHVnaW5CbGFja2xpc3Q+IFBsdWdpbkJsYWNrbGlz
dDo6Y3JlYXRlKE5TRGljdGlvbmFyeSAqcHJvcGVydHlMaXN0KQoreworICAgIENGRGljdGlvbmFy
eVJlZiBzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSA9IF9DRkNvcHlTeXN0ZW1WZXJzaW9uRGljdGlv
bmFyeSgpOworICAgIENGU3RyaW5nUmVmIG9zVmVyc2lvbiA9IHN0YXRpY19jYXN0PENGU3RyaW5n
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSwgX2tDRlN5
c3RlbVZlcnNpb25Qcm9kdWN0VmVyc2lvbktleSkpOworCisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0
aW9uYXJ5ID0gW3Byb3BlcnR5TGlzdCBvYmplY3RGb3JLZXk6QCJQbHVnSW5CbGFja2xpc3QiXTsK
KworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmJ1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lv
biA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKmJ1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gPSBbTlNNdXRhYmxlRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpidW5kbGVJRFRv
QmxvY2tlZFZlcnNpb25zID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeV07CisgICAg
TlNNdXRhYmxlU2V0ICpidW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyA9IFtOU011dGFibGVT
ZXQgc2V0XTsKKyAgICAKKyAgICBmb3IgKE5TU3RyaW5nICpvc1ZlcnNpb25Db21wb25lbnQgaW4g
c3BsaXRPU1ZlcnNpb24oKE5TU3RyaW5nICopb3NWZXJzaW9uKSkgeworICAgICAgICBOU0RpY3Rp
b25hcnkgKmJ1bmRsZUlEcyA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpvc1ZlcnNpb25Db21w
b25lbnRdOworICAgICAgICBpZiAoIWJ1bmRsZUlEcykKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGZvciAoTlNTdHJpbmcgKmJ1bmRsZUlEIGluIGJ1bmRsZUlEcykgeworICAgICAg
ICAgICAgTlNEaWN0aW9uYXJ5ICp2ZXJzaW9uSW5mbyA9IFtidW5kbGVJRHMgb2JqZWN0Rm9yS2V5
OmJ1bmRsZUlEXTsKKyAgICAgICAgICAgIGFzc2VydCh2ZXJzaW9uSW5mbyk7CisKKyAgICAgICAg
ICAgIGlmICghW3ZlcnNpb25JbmZvIGlzS2luZE9mQ2xhc3M6W05TRGljdGlvbmFyeSBjbGFzc11d
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBbYnVuZGxlSURUb01p
bmltdW1TZWN1cmVWZXJzaW9uIHJlbW92ZU9iamVjdEZvcktleTpidW5kbGVJRF07CisgICAgICAg
ICAgICBbYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiByZW1vdmVPYmplY3RGb3JL
ZXk6YnVuZGxlSURdOworICAgICAgICAgICAgW2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMgcmVt
b3ZlT2JqZWN0Rm9yS2V5OmJ1bmRsZUlEXTsKKworICAgICAgICAgICAgaWYgKE5TQXJyYXkgKmJs
b2NrZWRWZXJzaW9ucyA9IFt2ZXJzaW9uSW5mbyBvYmplY3RGb3JLZXk6QCJCbG9ja2VkUGx1Z0lu
QnVuZGxlVmVyc2lvbnMiXSkKKyAgICAgICAgICAgICAgICBbYnVuZGxlSURUb0Jsb2NrZWRWZXJz
aW9ucyBzZXRPYmplY3Q6YmxvY2tlZFZlcnNpb25zIGZvcktleTpidW5kbGVJRF07CisKKyAgICAg
ICAgICAgIGlmIChOU1N0cmluZyAqbWluaW11bVNlY3VyZVZlcnNpb24gPSBbdmVyc2lvbkluZm8g
b2JqZWN0Rm9yS2V5OkAiTWluaW11bVBsdWdJbkJ1bmRsZVZlcnNpb24iXSkKKyAgICAgICAgICAg
ICAgICBbYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uIHNldE9iamVjdDptaW5pbXVtU2Vj
dXJlVmVyc2lvbiBmb3JLZXk6YnVuZGxlSURdOworCisgICAgICAgICAgICBpZiAoTlNTdHJpbmcg
Km1pbmltdW1Db21wYXRpYmxlVmVyc2lvbiA9IFt2ZXJzaW9uSW5mbyBvYmplY3RGb3JLZXk6QCJN
aW5pbXVtQ29tcGF0aWJsZVBsdWdJbkJ1bmRsZVZlcnNpb24iXSkKKyAgICAgICAgICAgICAgICBb
YnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiBzZXRPYmplY3Q6bWluaW11bUNvbXBh
dGlibGVWZXJzaW9uIGZvcktleTpidW5kbGVJRF07CisKKyAgICAgICAgICAgIGlmIChOU051bWJl
ciAqdXBkYXRlQXZhaWxhYmxlID0gW3ZlcnNpb25JbmZvIG9iamVjdEZvcktleTpAIlBsdWdJblVw
ZGF0ZUF2YWlsYWJsZSJdKSB7CisgICAgICAgICAgICAgICAgLy8gQSBtaXNzaW5nIFBsdWdJblVw
ZGF0ZUF2YWlsYWJsZSBrZXkgbWVhbnMgdGhhdCB0aGVyZSBpcyBhIHBsdWctaW4gdXBkYXRlIGF2
YWlsYWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZUF2YWlsYWJsZSB8fCBbdXBkYXRl
QXZhaWxhYmxlIGJvb2xWYWx1ZV0pCisgICAgICAgICAgICAgICAgICAgIFtidW5kbGVJRHNXaXRo
QXZhaWxhYmxlVXBkYXRlcyBhZGRPYmplY3Q6YnVuZGxlSURdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgQ0ZSZWxlYXNlKHN5c3RlbVZlcnNpb25EaWN0aW9uYXJ5KTsK
KworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQmxhY2tsaXN0PihuZXcgUGx1Z2lu
QmxhY2tsaXN0KGJ1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiwgYnVuZGxlSURUb01pbmlt
dW1Db21wYXRpYmxlVmVyc2lvbiwgYnVuZGxlSURUb0Jsb2NrZWRWZXJzaW9ucywgYnVuZGxlSURz
V2l0aEF2YWlsYWJsZVVwZGF0ZXMpKTsKK30KKworUGx1Z2luQmxhY2tsaXN0Ojp+UGx1Z2luQmxh
Y2tsaXN0KCkKK3sKKyAgICBDRlJlbGVhc2UobV9idW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNp
b24pOworICAgIENGUmVsZWFzZShtX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24p
OworICAgIENGUmVsZWFzZShtX2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMpOworICAgIENGUmVs
ZWFzZShtX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzKTsKK30KKworTlNBcnJheSAqUGx1
Z2luQmxhY2tsaXN0OjpzcGxpdE9TVmVyc2lvbihOU1N0cmluZyAqb3NWZXJzaW9uKQoreworICAg
IE5TQXJyYXkgKmNvbXBvbmVudHMgPSBbb3NWZXJzaW9uIGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0
cmluZzpAIi4iXTsKKworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXldOworCisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgW2NvbXBvbmVudHMg
Y291bnRdOyArK2kpIHsKKyAgICAgICAgTlNTdHJpbmcgKnZlcnNpb25TdHJpbmcgPSBbW2NvbXBv
bmVudHMgc3ViYXJyYXlXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgaSArIDEpXSBjb21wb25lbnRz
Sm9pbmVkQnlTdHJpbmc6QCIuIl07CisKKyAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6dmVyc2lv
blN0cmluZ107CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitQbHVnaW5CbGFj
a2xpc3Q6OkxvYWRQb2xpY3kgUGx1Z2luQmxhY2tsaXN0Ojpsb2FkUG9saWN5Rm9yUGx1Z2luKE5T
U3RyaW5nICpidW5kbGVJZGVudGlmaWVyLCBOU1N0cmluZyAqYnVuZGxlVmVyc2lvblN0cmluZykg
Y29uc3QKK3sKKyAgICBpZiAoIWJ1bmRsZUlkZW50aWZpZXIgfHwgIWJ1bmRsZVZlcnNpb25TdHJp
bmcpCisgICAgICAgIHJldHVybiBMb2FkUG9saWN5OjpMb2FkTm9ybWFsbHk7CisKKyAgICAvLyBG
aXJzdCwgY2hlY2sgZm9yIGV4cGxpY2l0bHkgYmxvY2tlZCB2ZXJzaW9ucy4KKyAgICBmb3IgKE5T
U3RyaW5nICpibG9ja2VkVmVyc2lvbiBpbiBbbV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zIG9i
amVjdEZvcktleTpidW5kbGVJZGVudGlmaWVyXSkgeworICAgICAgICBpZiAoW2Jsb2NrZWRWZXJz
aW9uIGlzRXF1YWxUb1N0cmluZzpidW5kbGVWZXJzaW9uU3RyaW5nXSkKKyAgICAgICAgICAgIHJl
dHVybiBMb2FkUG9saWN5OjpCbG9ja2VkRm9yU2VjdXJpdHk7CisgICAgfQorCisgICAgLy8gVGhl
biwgY2hlY2sgaWYgdGhlcmUncyBhIGZvcmNlZCBtaW5pbXVtIHZlcnNpb24gZm9yIHNlY3VyaXR5
IGlzc3Vlcy4KKyAgICBpZiAoTlNTdHJpbmcgKm1pbmltdW1TZWN1cmVWZXJzaW9uID0gW21fYnVu
ZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uIG9iamVjdEZvcktleTpidW5kbGVJZGVudGlmaWVy
XSkgeworICAgICAgICBpZiAoW2J1bmRsZVZlcnNpb25TdHJpbmcgY29tcGFyZTptaW5pbXVtU2Vj
dXJlVmVyc2lvbiBvcHRpb25zOk5TTnVtZXJpY1NlYXJjaF0gPT0gTlNPcmRlcmVkQXNjZW5kaW5n
KQorICAgICAgICAgICAgcmV0dXJuIExvYWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0eTsKKyAg
ICB9CisKKyAgICAvLyBUaGVuLCBjaGVjayBpZiB0aGVyZSdzIGEgZm9yY2VkIG1pbmltdW0gdmVy
c2lvbiBmb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMuCisgICAgaWYgKE5TU3RyaW5nICptaW5pbXVt
Q29tcGF0aWJsZVZlcnNpb24gPSBbbV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9u
IG9iamVjdEZvcktleTpidW5kbGVJZGVudGlmaWVyXSkgeworICAgICAgICBpZiAoW2J1bmRsZVZl
cnNpb25TdHJpbmcgY29tcGFyZTptaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gb3B0aW9uczpOU051
bWVyaWNTZWFyY2hdID09IE5TT3JkZXJlZEFzY2VuZGluZykKKyAgICAgICAgICAgIHJldHVybiBM
b2FkUG9saWN5OjpCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKKyAgICB9CisKKyAgICByZXR1cm4g
TG9hZFBvbGljeTo6TG9hZE5vcm1hbGx5OworfQorCitib29sIFBsdWdpbkJsYWNrbGlzdDo6aXNV
cGRhdGVBdmFpbGFibGUoTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFttX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzIGNvbnRhaW5zT2JqZWN0OmJ1
bmRsZUlkZW50aWZpZXJdOworfQorCitQbHVnaW5CbGFja2xpc3Q6OlBsdWdpbkJsYWNrbGlzdChO
U0RpY3Rpb25hcnkgKmJ1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5
ICpidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uLCBOU0RpY3Rpb25hcnkgKmJ1bmRs
ZUlEVG9CbG9ja2VkVmVyc2lvbnMsIE5TU2V0ICpidW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRl
cykKKyAgICA6IG1fYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uKFtidW5kbGVJRFRvTWlu
aW11bVNlY3VyZVZlcnNpb24gY29weV0pCisgICAgLCBtX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0
aWJsZVZlcnNpb24oW2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gY29weV0pCisg
ICAgLCBtX2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMoW2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lv
bnMgY29weV0pCisgICAgLCBtX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzKFtidW5kbGVJ
RHNXaXRoQXZhaWxhYmxlVXBkYXRlcyBjb3B5XSkKK3sKKyAgICAvLyBUaGlzIGVuc3VyZXMgdGhh
dCB0aGUgZGljdGlvbmFyaWVzIGRvIG5vdCBnZXQgZGVzdHJveWVkIHVuZGVyIE9iamVjdGl2ZS1D
IGdyYWJhZ2UgY29sbGVjdGlvbi4KKyAgICBDRlJldGFpbihtX2J1bmRsZUlEVG9NaW5pbXVtU2Vj
dXJlVmVyc2lvbik7CisgICAgW21fYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uIHJlbGVh
c2VdOworICAgIENGUmV0YWluKG1fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbik7
CisgICAgW21fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiByZWxlYXNlXTsKKyAg
ICBDRlJldGFpbihtX2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMpOworICAgIFttX2J1bmRsZUlE
VG9CbG9ja2VkVmVyc2lvbnMgcmVsZWFzZV07CisgICAgQ0ZSZXRhaW4obV9idW5kbGVJRHNXaXRo
QXZhaWxhYmxlVXBkYXRlcyk7CisgICAgW21fYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMg
cmVsZWFzZV07Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2ViR0xCbGFja2xpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJHTEJsYWNrbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmZjcyYTIwNzYwYzdlYWU2MTZiNTFiMzZl
YTYxODQzZmE1YWE5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViR0xCbGFja2xpc3QuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitPQkpDX0NMQVNTIE5TRGlj
dGlvbmFyeTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJHTEJsYWNrbGlzdCB7
CitwdWJsaWM6CisgICAgZW51bSBCbG9ja0NvbXBhcmlzb24geworICAgICAgICBFcXVhbHMsCisg
ICAgICAgIExlc3NUaGFuLAorICAgICAgICBMZXNzVGhhbkVxdWFscworICAgIH07CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja1dlYkdMKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkU3VnZ2VzdEJsb2NraW5nV2ViR0woKTsKKworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xCbGFja2xpc3Q+IGNyZWF0ZShOU0RpY3Rpb25h
cnkgKnByb3BlcnR5TGlzdCk7CisgICAgfldlYkdMQmxhY2tsaXN0KCk7CisKKyAgICBib29sIHNo
b3VsZEJsb2NrKCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRTdWdnZXN0QmxvY2tpbmcoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEJsb2NrQ29tbWFuZCB7CisgICAgICAgIEFs
bG93LAorICAgICAgICBCbG9jaywKKyAgICAgICAgU3VnZ2VzdEJsb2NraW5nCisgICAgfTsKKwor
ICAgIFdlYkdMQmxhY2tsaXN0KEJsb2NrQ29tbWFuZCk7CisKKyAgICBCbG9ja0NvbW1hbmQgbV9j
b21tYW5kOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9XZWJHTEJsYWNrbGlzdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJHTEJsYWNrbGlzdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMDM0OTg0N2I0NzkwYzhhNDY3YmUyMmZi
YjYyMWQwZWFkZjVjYzNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkdMQmxhY2tsaXN0Lm1tCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYkdMQmxhY2tsaXN0LmgiCisKKyNp
ZiBQTEFURk9STShNQUMpCisKKyNpbXBvcnQgIkJsYWNrbGlzdFVwZGF0ZXIuaCIKKyNpbXBvcnQg
IkNGVXRpbGl0aWVzU1BJLmgiCisjaW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RydWN0IE9TQnVpbGRJbmZvIHsKKyAgICBPU0J1aWxkSW5mbygpCisg
ICAgICAgIDogbWFqb3IoMCkKKyAgICAgICAgLCBtaW5vcigwKQorICAgICAgICAsIGJ1aWxkKDAp
CisgICAgeworICAgIH0KKworICAgIE9TQnVpbGRJbmZvKGludCBtYWpvciwgaW50IG1pbm9yLCBp
bnQgYnVpbGQpCisgICAgICAgIDogbWFqb3IobWFqb3IpCisgICAgICAgICwgbWlub3IobWlub3Ip
CisgICAgICAgICwgYnVpbGQoYnVpbGQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBPU0J1aWxkSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbWFqb3IgPT0gb3RoZXIubWFqb3IgJiYgbWlub3IgPT0gb3RoZXIubWlub3IgJiYgYnVpbGQg
PT0gb3RoZXIuYnVpbGQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgT1NCdWls
ZEluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dGllKG1ham9y
LCBtaW5vciwgYnVpbGQpID4gc3RkOjp0aWUob3RoZXIubWFqb3IsIG90aGVyLm1pbm9yLCBvdGhl
ci5idWlsZCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9TQnVpbGRJbmZv
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnRpZShtYWpvciwgbWlu
b3IsIGJ1aWxkKSA8PSBzdGQ6OnRpZShvdGhlci5tYWpvciwgb3RoZXIubWlub3IsIG90aGVyLmJ1
aWxkKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBPU0J1aWxkSW5mbyYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp0aWUobWFqb3IsIG1pbm9yLCBi
dWlsZCkgPCBzdGQ6OnRpZShvdGhlci5tYWpvciwgb3RoZXIubWlub3IsIG90aGVyLmJ1aWxkKTsK
KyAgICB9CisKKyAgICBpbnQgbWFqb3I7IC8vIFJlcHJlc2VudHMgdGhlIDEzIGluIDEzQzY0Lgor
ICAgIGludCBtaW5vcjsgLy8gUmVwcmVzZW50cyB0aGUgQyBpbiAxM0M2NCAoYXMgYSBudW1iZXIg
d2hlcmUgQSA9PSAxLCBpLmUuIDMpLgorICAgIGludCBidWlsZDsgLy8gUmVwcmVzZW50cyB0aGUg
NjQgaW4gMTNDNjQuCit9OworCitzdGF0aWMgT1NCdWlsZEluZm8gYnVpbGRJbmZvRnJvbU9TQnVp
bGRTdHJpbmcoTlNTdHJpbmcgKmJ1aWxkU3RyaW5nKQoreworICAgIE5TRXJyb3IgKmVycm9yID0g
TlVMTDsKKyAgICBOU1JlZ3VsYXJFeHByZXNzaW9uICpyZWdleCA9IFtOU1JlZ3VsYXJFeHByZXNz
aW9uIHJlZ3VsYXJFeHByZXNzaW9uV2l0aFBhdHRlcm46QCJeKFxcZCspKFtBLVpdKShcXGQrKSIg
b3B0aW9uczowIGVycm9yOiZlcnJvcl07CisgICAgTlNBcnJheSAqbWF0Y2hlcyA9IFtyZWdleCBt
YXRjaGVzSW5TdHJpbmc6YnVpbGRTdHJpbmcgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAs
IFtidWlsZFN0cmluZyBsZW5ndGhdKV07CisgICAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMuY291
bnQgIT0gMSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgTlNMb2coQCJXZWJHTEJsYWNrbGlz
dCBjb3VsZCBub3QgcGFyc2UgT1NCdWlsZCBlbnRyeTogJUAiLCBidWlsZFN0cmluZyk7CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIE9TQnVpbGRJbmZvKCk7CisgICAgfQorCisgICAgTlNUZXh0Q2hl
Y2tpbmdSZXN1bHQgKm1hdGNoUmVzdWx0ID0gW21hdGNoZXMgb2JqZWN0QXRJbmRleDowXTsKKwor
ICAgIGlmIChtYXRjaFJlc3VsdC5udW1iZXJPZlJhbmdlcyAhPSA0KSB7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICBOU0xvZyhAIldlYkdMQmxhY2tsaXN0IGNvdWxkIG5vdCBwYXJzZSBPU0J1aWxk
IGVudHJ5OiAlQCIsIGJ1aWxkU3RyaW5nKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gT1NCdWls
ZEluZm8oKTsKKyAgICB9CisKKyAgICBpbnQgbWFqb3JWZXJzaW9uID0gW1tidWlsZFN0cmluZyBz
dWJzdHJpbmdXaXRoUmFuZ2U6W21hdGNoUmVzdWx0IHJhbmdlQXRJbmRleDoxXV0gaW50VmFsdWVd
OworICAgIGludCBtaW5vclZlcnNpb24gPSBbW2J1aWxkU3RyaW5nIHN1YnN0cmluZ1dpdGhSYW5n
ZTpbbWF0Y2hSZXN1bHQgcmFuZ2VBdEluZGV4OjJdXSBjaGFyYWN0ZXJBdEluZGV4OjBdIC0gJ0En
ICsgMTsKKyAgICBpbnQgYnVpbGRWZXJzaW9uID0gW1tidWlsZFN0cmluZyBzdWJzdHJpbmdXaXRo
UmFuZ2U6W21hdGNoUmVzdWx0IHJhbmdlQXRJbmRleDozXV0gaW50VmFsdWVdOworCisgICAgcmV0
dXJuIE9TQnVpbGRJbmZvKG1ham9yVmVyc2lvbiwgbWlub3JWZXJzaW9uLCBidWlsZFZlcnNpb24p
OworfQorCitib29sIFdlYkdMQmxhY2tsaXN0OjpzaG91bGRCbG9ja1dlYkdMKCkKK3sKKyAgICBC
bGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXplUXVldWUoKTsKKworICAgIF9fYmxvY2sgYm9vbCBz
aG91bGRCbG9jayA9IGZhbHNlOworICAgIGRpc3BhdGNoX3N5bmMoQmxhY2tsaXN0VXBkYXRlcjo6
cXVldWUoKSwgXnsKKyAgICAgICAgQmxhY2tsaXN0VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3Nhcnko
KTsKKworICAgICAgICBXZWJHTEJsYWNrbGlzdCogd2ViR0xCbGFja2xpc3QgPSBCbGFja2xpc3RV
cGRhdGVyOjp3ZWJHTEJsYWNrbGlzdCgpOworICAgICAgICBpZiAod2ViR0xCbGFja2xpc3QpCisg
ICAgICAgICAgICBzaG91bGRCbG9jayA9IHdlYkdMQmxhY2tsaXN0LT5zaG91bGRCbG9jaygpOwor
ICAgIH0pOworCisgICAgcmV0dXJuIHNob3VsZEJsb2NrOworfQorCitib29sIFdlYkdMQmxhY2ts
aXN0OjpzaG91bGRTdWdnZXN0QmxvY2tpbmdXZWJHTCgpCit7CisgICAgQmxhY2tsaXN0VXBkYXRl
cjo6aW5pdGlhbGl6ZVF1ZXVlKCk7CisKKyAgICBfX2Jsb2NrIGJvb2wgc2hvdWxkU3VnZ2VzdEJs
b2NraW5nID0gZmFsc2U7CisgICAgZGlzcGF0Y2hfc3luYyhCbGFja2xpc3RVcGRhdGVyOjpxdWV1
ZSgpLCBeeworICAgICAgICBCbGFja2xpc3RVcGRhdGVyOjpyZWxvYWRJZk5lY2Vzc2FyeSgpOwor
CisgICAgICAgIFdlYkdMQmxhY2tsaXN0KiB3ZWJHTEJsYWNrbGlzdCA9IEJsYWNrbGlzdFVwZGF0
ZXI6OndlYkdMQmxhY2tsaXN0KCk7CisgICAgICAgIGlmICh3ZWJHTEJsYWNrbGlzdCkKKyAgICAg
ICAgICAgIHNob3VsZFN1Z2dlc3RCbG9ja2luZyA9IHdlYkdMQmxhY2tsaXN0LT5zaG91bGRTdWdn
ZXN0QmxvY2tpbmcoKTsKKyAgICB9KTsKKworICAgIHJldHVybiBzaG91bGRTdWdnZXN0QmxvY2tp
bmc7Cit9CisKK3N0YXRpYyBib29sIG1hdGNoZXNHUFUoR0xpbnQgbWFjaGluZUlkLCBHTGludCBy
ZW5kZXJlck1hc2spCit7CisgICAgLy8gSWYgdGhlIGxhc3QgdHdvIGJ5dGVzIG9mIHRoZSByZW5k
ZXJlck1hc2sgYXJlIG5vdCB6ZXJvLCB0aGVuIHdlJ3JlCisgICAgLy8gbG9va2luZyBmb3IgYW4g
ZXhhY3QgR1BVIG1hdGNoLiBPdGhlcndpc2Ugd2UncmUgbWF0Y2hpbmcgYWdhaW5zdAorICAgIC8v
IGEgY2xhc3Mgb2YgR1BVcy4KKworICAgIGlmIChyZW5kZXJlck1hc2sgJiAweEZGKQorICAgICAg
ICByZXR1cm4gbWFjaGluZUlkID09IHJlbmRlcmVyTWFzazsKKworICAgIHJldHVybiAobWFjaGlu
ZUlkICYga0NHTFJlbmRlcmVySURNYXRjaGluZ01hc2spID09IHJlbmRlcmVyTWFzazsKK30KKwor
c3RhdGljIEdMaW50IGdwdU1hc2tGcm9tU3RyaW5nKE5TU3RyaW5nICppbnB1dCkKK3sKKyAgICBO
U1NjYW5uZXIqIHNjYW5uZXIgPSBbTlNTY2FubmVyIHNjYW5uZXJXaXRoU3RyaW5nOmlucHV0XTsK
KyAgICB1bnNpZ25lZCBtYXNrVmFsdWU7CisgICAgW3NjYW5uZXIgc2NhbkhleEludDombWFza1Zh
bHVlXTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KG1hc2tWYWx1ZSAmIChrQ0dMUmVu
ZGVyZXJJRE1hdGNoaW5nTWFzayB8IDB4RkYpKTsKK30KKworc3RhdGljIGJvb2wgbWF0Y2hlc0J1
aWxkSW5mbyhPU0J1aWxkSW5mbyBtYWNoaW5lSW5mbywgT1NCdWlsZEluZm8gYmxvY2tJbmZvLCBX
ZWJHTEJsYWNrbGlzdDo6QmxvY2tDb21wYXJpc29uIGNvbXBhcmlzb24pCit7CisgICAgc3dpdGNo
IChjb21wYXJpc29uKSB7CisgICAgY2FzZSBXZWJHTEJsYWNrbGlzdDo6QmxvY2tDb21wYXJpc29u
OjpFcXVhbHM6CisgICAgICAgIHJldHVybiBtYWNoaW5lSW5mbyA9PSBibG9ja0luZm87CisgICAg
Y2FzZSBXZWJHTEJsYWNrbGlzdDo6QmxvY2tDb21wYXJpc29uOjpMZXNzVGhhbjoKKyAgICAgICAg
cmV0dXJuIG1hY2hpbmVJbmZvIDwgYmxvY2tJbmZvOworICAgIGNhc2UgV2ViR0xCbGFja2xpc3Q6
OkJsb2NrQ29tcGFyaXNvbjo6TGVzc1RoYW5FcXVhbHM6CisgICAgICAgIHJldHVybiBtYWNoaW5l
SW5mbyA8PSBibG9ja0luZm87CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xCbGFj
a2xpc3Q+IFdlYkdMQmxhY2tsaXN0OjpjcmVhdGUoTlNEaWN0aW9uYXJ5ICpwcm9wZXJ0eUxpc3Qp
Cit7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHN5c3RlbVZlcnNpb25EaWN0aW9uYXJ5ID0gX0NGQ29w
eVN5c3RlbVZlcnNpb25EaWN0aW9uYXJ5KCk7CisgICAgQ0ZTdHJpbmdSZWYgb3NCdWlsZCA9IHN0
YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzeXN0ZW1WZXJzaW9u
RGljdGlvbmFyeSwgX2tDRlN5c3RlbVZlcnNpb25CdWlsZFZlcnNpb25LZXkpKTsKKyAgICBPU0J1
aWxkSW5mbyBidWlsZEluZm8gPSBidWlsZEluZm9Gcm9tT1NCdWlsZFN0cmluZygoTlNTdHJpbmcg
Kilvc0J1aWxkKTsKKyAgICBDRlJlbGVhc2Uoc3lzdGVtVmVyc2lvbkRpY3Rpb25hcnkpOworCisg
ICAgaWYgKCFidWlsZEluZm8ubWFqb3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
TlNBcnJheSAqYmxvY2tFbnRyaWVzID0gW3Byb3BlcnR5TGlzdCBvYmplY3RGb3JLZXk6QCJXZWJH
TEJsYWNrbGlzdCJdOworCisgICAgaWYgKCFbYmxvY2tFbnRyaWVzIGlzS2luZE9mQ2xhc3M6W05T
QXJyYXkgY2xhc3NdXSB8fCAhYmxvY2tFbnRyaWVzLmNvdW50KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbMTJdID0geworICAg
ICAgICBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpMzIsCisgICAg
ICAgIGtDR0xQRkFEZXB0aFNpemUsIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkzMiwKKyAgICAg
ICAga0NHTFBGQUFjY2VsZXJhdGVkLAorICAgICAgICBrQ0dMUEZBU3VwZXJzYW1wbGUsCisgICAg
ICAgIGtDR0xQRkFNdWx0aXNhbXBsZSwKKyAgICAgICAga0NHTFBGQVNhbXBsZUJ1ZmZlcnMsIChD
R0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkxLAorICAgICAgICBrQ0dMUEZBU2FtcGxlcywgKENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlKTQsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkw
CisgICAgfTsKKworICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeDsKKyAgICBHTGludCBucGl4Owor
ICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXgsICZucGl4KTsKKyAgICBDR0xD
b250ZXh0T2JqIGN0eDsKKyAgICBDR0xDcmVhdGVDb250ZXh0KHBpeCwgMCwgJmN0eCk7CisgICAg
R0xpbnQgcmVuZGVyZXJJZCA9IDA7CisgICAgQ0dMR2V0UGFyYW1ldGVyKGN0eCwga0NHTENQQ3Vy
cmVudFJlbmRlcmVySUQsICZyZW5kZXJlcklkKTsKKyAgICBHTGludCBzdXBwb3J0c1NlcGFyYXRl
QWRkcmVzc1NwYWNlID0gMDsKKyNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49
IDEwMTAwMAorICAgIENHTEdldFBhcmFtZXRlcihjdHgsIGtDR0xDUFN1cHBvcnRTZXBhcmF0ZUFk
ZHJlc3NTcGFjZSwgJnN1cHBvcnRzU2VwYXJhdGVBZGRyZXNzU3BhY2UpOworI2VuZGlmCisgICAg
Q0dMRGVzdHJveUNvbnRleHQoY3R4KTsKKyAgICBDR0xSZWxlYXNlUGl4ZWxGb3JtYXQocGl4KTsK
KworICAgIHJlbmRlcmVySWQgJj0ga0NHTFJlbmRlcmVySURNYXRjaGluZ01hc2sgfCAweEZGOwor
CisgICAgQmxvY2tDb21tYW5kIGdsb2JhbENvbW1hbmQgPSBCbG9ja0NvbW1hbmQ6OkFsbG93Owor
CisgICAgZm9yIChOU0RpY3Rpb25hcnkgKmJsb2NrRGF0YSBpbiBibG9ja0VudHJpZXMpIHsKKwor
ICAgICAgICBHTGludCBncHVNYXNrID0gZ3B1TWFza0Zyb21TdHJpbmcoW2Jsb2NrRGF0YSBvYmpl
Y3RGb3JLZXk6QCJHUFUiXSk7CisKKyAgICAgICAgT1NCdWlsZEluZm8gYmxvY2tlZEJ1aWxkSW5m
byA9IGJ1aWxkSW5mb0Zyb21PU0J1aWxkU3RyaW5nKHN0YXRpY19jYXN0PE5TU3RyaW5nKj4oW2Js
b2NrRGF0YSBvYmplY3RGb3JLZXk6QCJPU0J1aWxkIl0pKTsKKworICAgICAgICBOU1N0cmluZyAq
Y29tcGFyaXNvblN0cmluZyA9IFtibG9ja0RhdGEgb2JqZWN0Rm9yS2V5OkAiQ29tcGFyaXNvbiJd
OworICAgICAgICBCbG9ja0NvbXBhcmlzb24gY29tcGFyaXNvbiA9IEJsb2NrQ29tcGFyaXNvbjo6
RXF1YWxzOworICAgICAgICBpZiAoW2NvbXBhcmlzb25TdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
TGVzc1RoYW4iXSkKKyAgICAgICAgICAgIGNvbXBhcmlzb24gPSBCbG9ja0NvbXBhcmlzb246Okxl
c3NUaGFuOworICAgICAgICBlbHNlIGlmIChbY29tcGFyaXNvblN0cmluZyBpc0VxdWFsVG9TdHJp
bmc6QCJMZXNzVGhhbkVxdWFscyJdKQorICAgICAgICAgICAgY29tcGFyaXNvbiA9IEJsb2NrQ29t
cGFyaXNvbjo6TGVzc1RoYW5FcXVhbHM7CisKKyAgICAgICAgTlNTdHJpbmcgKmNvbW1hbmRTdHJp
bmcgPSBbYmxvY2tEYXRhIG9iamVjdEZvcktleTpAIkNvbW1hbmQiXTsKKyAgICAgICAgQmxvY2tD
b21tYW5kIGNvbW1hbmQgPSBCbG9ja0NvbW1hbmQ6OkFsbG93OworICAgICAgICBpZiAoW2NvbW1h
bmRTdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAiQmxvY2siXSkKKyAgICAgICAgICAgIGNvbW1hbmQg
PSBCbG9ja0NvbW1hbmQ6OkJsb2NrOworICAgICAgICBlbHNlIGlmIChbY29tbWFuZFN0cmluZyBp
c0VxdWFsVG9TdHJpbmc6QCJTdWdnZXN0QmxvY2tpbmciXSkKKyAgICAgICAgICAgIGNvbW1hbmQg
PSBCbG9ja0NvbW1hbmQ6OlN1Z2dlc3RCbG9ja2luZzsKKworICAgICAgICBpZiAobWF0Y2hlc0dQ
VShyZW5kZXJlcklkLCBncHVNYXNrKSAmJiBtYXRjaGVzQnVpbGRJbmZvKGJ1aWxkSW5mbywgYmxv
Y2tlZEJ1aWxkSW5mbywgY29tcGFyaXNvbikpIHsKKyAgICAgICAgICAgIGdsb2JhbENvbW1hbmQg
PSBjb21tYW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIXN1cHBvcnRzU2VwYXJhdGVBZGRyZXNzU3BhY2UgJiYgZ2xvYmFsQ29tbWFuZCA9PSBCbG9j
a0NvbW1hbmQ6OkFsbG93KQorICAgICAgICBnbG9iYWxDb21tYW5kID0gQmxvY2tDb21tYW5kOjpT
dWdnZXN0QmxvY2tpbmc7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFdlYkdMQmxhY2ts
aXN0PihuZXcgV2ViR0xCbGFja2xpc3QoZ2xvYmFsQ29tbWFuZCkpOworfQorCitib29sIFdlYkdM
QmxhY2tsaXN0OjpzaG91bGRCbG9jaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tbWFuZCA9
PSBCbG9ja0NvbW1hbmQ6OkJsb2NrOworfQorCitib29sIFdlYkdMQmxhY2tsaXN0OjpzaG91bGRT
dWdnZXN0QmxvY2tpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1hbmQgPT0gQmxvY2tD
b21tYW5kOjpTdWdnZXN0QmxvY2tpbmc7Cit9CisKK1dlYkdMQmxhY2tsaXN0OjpXZWJHTEJsYWNr
bGlzdChCbG9ja0NvbW1hbmQgY29tbWFuZCkKKyAgICA6IG1fY29tbWFuZChjb21tYW5kKQorewor
fQorCitXZWJHTEJsYWNrbGlzdDo6fldlYkdMQmxhY2tsaXN0KCkKK3sKK30KKworI2VuZGlmCisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jZi9DRlV0aWxpdGll
c1NQSS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVzU1BJLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzdiYWUwMjkzZmUyYzhkZWQyNGE4NDYyOGFjNjg0ZWI5OTRlZTg5MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NwaS9jZi9DRlV0aWxpdGll
c1NQSS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisKKyNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ0ZQcml2Lmg+CisjZW5kaWYK
KworZXh0ZXJuICJDIiB7CitDRkRpY3Rpb25hcnlSZWYgX0NGQ29weVN5c3RlbVZlcnNpb25EaWN0
aW9uYXJ5KHZvaWQpOworZXh0ZXJuIGNvbnN0IENGU3RyaW5nUmVmIF9rQ0ZTeXN0ZW1WZXJzaW9u
UHJvZHVjdFZlcnNpb25LZXk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IGVjZjJmNTAxNTZhZDJk
ZmUxNWI0ZjRhZDIxZGZjOTdmMDNhZjI2Y2QuLjJlMDdiYzQ3OTQ4OWU5NTEwNWRlYWNmZmFmMzE5
MmUxZDVmYmM2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC0xMDgsNiArMTA4LDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvTlNVUkxEb3dubG9hZFNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1VSTEZp
bGVUeXBlTWFwcGluZ3NTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QbHVnaW5CbGFja2xpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luVmlld0Jh
c2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJvdGVjdGlvblNwYWNlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1Jlc291cmNlRXJyb3IuaD4KQEAgLTExOCw2ICsxMTksNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3VicmVzb3VyY2VMb2FkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
V2ViR0xCbGFja2xpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XaWRnZXQuaD4KICNpbXBvcnQgPFdlYktpdExlZ2FjeS9E
T01FbGVtZW50Lmg+CkBAIC0xODkwLDYgKzE4OTIsMTcgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogCitzdGF0aWMgYm9vbCBzaG91bGRCbG9ja1Bs
dWdpbihXZWJCYXNlUGx1Z2luUGFja2FnZSAqcGx1Z2luUGFja2FnZSkKK3sKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgYXV0byBsb2FkUG9saWN5ID0gUGx1Z2luQmxhY2tsaXN0Ojpsb2FkUG9saWN5
Rm9yUGx1Z2luVmVyc2lvbihwbHVnaW5QYWNrYWdlLmJ1bmRsZUlkZW50aWZpZXIsIHBsdWdpblBh
Y2thZ2UuYnVuZGxlVmVyc2lvbik7CisgICAgcmV0dXJuIGxvYWRQb2xpY3kgPT0gUGx1Z2luQmxh
Y2tsaXN0OjpMb2FkUG9saWN5OjpCbG9ja2VkRm9yU2VjdXJpdHkgfHwgbG9hZFBvbGljeSA9PSBQ
bHVnaW5CbGFja2xpc3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0ocGx1Z2luUGFja2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKIFJlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVQ
bHVnaW4oY29uc3QgSW50U2l6ZSYgc2l6ZSwgSFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFVSTCYgdXJsLAogICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGJv
b2wgbG9hZE1hbnVhbGx5KQogewpAQCAtMTk3Myw3ICsxOTg2LDcgQEAgUmVmUHRyPFdpZGdldD4g
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiBzaXplLCBI
VE1MUGx1Z0kKICAgICBOU1ZpZXcgKnZpZXcgPSBuaWw7CiAKICAgICBpZiAocGx1Z2luUGFja2Fn
ZSkgewotICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1BsdWdpbihbcGx1Z2luUGFja2FnZSBidW5k
bGVJZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVuZGxlVmVyc2lvbl0pKSB7CisgICAgICAg
IGlmIChzaG91bGRCbG9ja1BsdWdpbihwbHVnaW5QYWNrYWdlKSkgewogICAgICAgICAgICAgZXJy
b3JDb2RlID0gV2ViS2l0RXJyb3JCbG9ja2VkUGx1Z0luVmVyc2lvbjsKICAgICAgICAgICAgIGlm
IChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4oZWxlbWVudC0+cmVuZGVyZXIoKSkpCiAgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KCplbGVtZW50LT5yZW5kZXJl
cigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbihSZW5kZXJFbWJlZGRlZE9iamVjdDo6
SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKQEAgLTIwNzgsNyArMjA5MSw3IEBAIFBhc3NSZWZQdHI8
V2lkZ2V0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25z
dCBJbnRTaXplJiBzCiAgICAgaW50IGVycm9yQ29kZSA9IFdlYktpdEVycm9ySmF2YVVuYXZhaWxh
YmxlOwogCiAgICAgaWYgKHBsdWdpblBhY2thZ2UpIHsKLSAgICAgICAgaWYgKFdLU2hvdWxkQmxv
Y2tQbHVnaW4oW3BsdWdpblBhY2thZ2UgYnVuZGxlSWRlbnRpZmllcl0sIFtwbHVnaW5QYWNrYWdl
IGJ1bmRsZVZlcnNpb25dKSkgeworICAgICAgICBpZiAoc2hvdWxkQmxvY2tQbHVnaW4ocGx1Z2lu
UGFja2FnZSkpIHsKICAgICAgICAgICAgIGVycm9yQ29kZSA9IFdlYktpdEVycm9yQmxvY2tlZFBs
dWdJblZlcnNpb247CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KGVs
ZW1lbnQtPnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckVtYmVk
ZGVkT2JqZWN0PigqZWxlbWVudC0+cmVuZGVyZXIoKSkuc2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb24oUmVuZGVyRW1iZWRkZWRPYmplY3Q6Okluc2VjdXJlUGx1Z2luVmVyc2lvbik7CkBAIC0y
MTI2LDE0ICsyMTM5LDIzIEBAIFN0cmluZyBXZWJGcmFtZUxvYWRlckNsaWVudDo6b3ZlcnJpZGVN
ZWRpYVR5cGUoKSBjb25zdAogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQorc3RhdGljIGJvb2wgc2hv
dWxkQmxvY2tXZWJHTCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBXZWJHTEJs
YWNrbGlzdDo6c2hvdWxkQmxvY2tXZWJHTCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZW5kaWYKK30KKwogV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IFdlYkZyYW1lTG9hZGVyQ2xpZW50
Ojp3ZWJHTFBvbGljeUZvclVSTChjb25zdCBTdHJpbmcmKSBjb25zdAogewotICAgIHJldHVybiBX
S1Nob3VsZEJsb2NrV2ViR0woKSA/IFdlYkdMQmxvY2tDcmVhdGlvbiA6IFdlYkdMQWxsb3dDcmVh
dGlvbjsKKyAgICByZXR1cm4gc2hvdWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0aW9u
IDogV2ViR0xBbGxvd0NyZWF0aW9uOwogfQogCiBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChjb25zdCBTdHJpbmcm
KSBjb25zdAogewotICAgIHJldHVybiBXS1Nob3VsZEJsb2NrV2ViR0woKSA/IFdlYkdMQmxvY2tD
cmVhdGlvbiA6IFdlYkdMQWxsb3dDcmVhdGlvbjsKKyAgICByZXR1cm4gc2hvdWxkQmxvY2tXZWJH
TCgpID8gV2ViR0xCbG9ja0NyZWF0aW9uIDogV2ViR0xBbGxvd0NyZWF0aW9uOwogfQogI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1Bs
dWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCmlu
ZGV4IDQzOTM2OTFjYTFmMDAyZjc3MDA3YjI3ODEyMmU4MjcyMDM2Y2Y5ZWQuLjVlYzg0MjQ5NTlj
YmMxOTI4ODZmYTc1YWJmMDNmM2Q4ODViY2IxZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlvbk1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3Jt
YXRpb25NYWMubW0KQEAgLTMyLDcgKzMyLDkgQEAKICNpbXBvcnQgIkFQSVN0cmluZy5oIgogI2lt
cG9ydCAiUGx1Z2luTW9kdWxlSW5mby5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVzLmgiCi0j
aW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGx1Z2lu
QmxhY2tsaXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIApAQCAtNDEsNyArNDMsNyBAQCB2b2lkIGdldFBsYXRmb3JtUGx1Z2luTW9kdWxlSW5m
b3JtYXRpb24oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luLCBBUEk6OkRpYwogICAgIG1h
cC5zZXQocGx1Z2luSW5mb3JtYXRpb25CdW5kbGVJZGVudGlmaWVyS2V5KCksIEFQSTo6U3RyaW5n
OjpjcmVhdGUocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKTsKICAgICBtYXAuc2V0KHBsdWdpbklu
Zm9ybWF0aW9uQnVuZGxlVmVyc2lvbktleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi52
ZXJzaW9uU3RyaW5nKSk7CiAgICAgbWFwLnNldChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZVNob3J0
VmVyc2lvbktleSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbi5zaG9ydFZlcnNpb25TdHJp
bmcpKTsKLSAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFzdExhc3RCbG9ja2Vk
VmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKSwgQVBJOjpCb29sZWFuOjpjcmVhdGUoV0tJc1Bs
dWdpblVwZGF0ZUF2YWlsYWJsZShuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHBsdWdpbi5idW5k
bGVJZGVudGlmaWVyKSkpKTsKKyAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uVXBkYXRlUGFz
dExhc3RCbG9ja2VkVmVyc2lvbklzS25vd25BdmFpbGFibGVLZXkoKSwgQVBJOjpCb29sZWFuOjpj
cmVhdGUoV2ViQ29yZTo6UGx1Z2luQmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZShu
c1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKHBsdWdpbi5idW5kbGVJZGVudGlmaWVyKSkpKTsKICAg
ICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uSGFzU2FuZGJveFByb2ZpbGVLZXkoKSwgQVBJOjpC
b29sZWFuOjpjcmVhdGUocGx1Z2luLmhhc1NhbmRib3hQcm9maWxlKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL1BsdWdpbk1vZHVsZUluZm8uaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL1BsdWdpbk1vZHVsZUluZm8uaAppbmRleCBjYmMx
ODc2MGE1ZDc0NWEyMmQwZTkwZDIzZjk5NWUxZDgyYzc4OWI4Li5lNTM2MGY4ZDQ3YzU2MjY2ZDBj
ODk0NmY0NjZhNDJhNzJhZjYwZDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
UGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZvLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1Bs
dWdpbnMvUGx1Z2luTW9kdWxlSW5mby5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbHVnaW5Nb2R1bGVJbmZvX2gK
LSNkZWZpbmUgUGx1Z2luTW9kdWxlSW5mb19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPFdl
YkNvcmUvUGx1Z2luRGF0YS5oPgogCkBAIC02Myw1ICs2MiwzIEBAIHN0cnVjdCBQbHVnaW5Nb2R1
bGVJbmZvIHsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUGx1Z2lu
TW9kdWxlSW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
bWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0KaW5kZXggYjI1ODYzMjA0NzYyYjJkODE1NTQ5
MmYzMzk2NTkzYjRkNGQ4ZWE5YS4uMjMyNjFiYmEyMGU1OTM5YTg1Njc2MWMzOTE4ZDg5ZDA1Yjg4
ZjI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0Nv
bnRleHRQcml2YXRlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9t
YWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbQpAQCAtMzgsNyArMzgsNyBAQAogI2ltcG9ydCAiV0tT
aGFyZWRBUElDYXN0LmgiCiAjaW1wb3J0ICJXS1N0cmluZ0NGLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzUG9vbC5oIgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1dlYkdMQmxhY2tsaXN0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC00OCw3ICs0OCw3IEBAIGJvb2wgV0tDb250ZXh0SXNQ
bHVnSW5VcGRhdGVBdmFpbGFibGUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVm
IHBsdWdJCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAg
cmV0dXJuIFdLSXNQbHVnaW5VcGRhdGVBdmFpbGFibGUoKE5TU3RyaW5nICopYWRvcHRDRihXS1N0
cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnSW5CdW5kbGVJZGVudGlm
aWVyUmVmKSkuZ2V0KCkpOworICAgIHJldHVybiBXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6Omlz
UGx1Z2luVXBkYXRlQXZhaWxhYmxlKChOU1N0cmluZyAqKWFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZT
dHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGx1Z0luQnVuZGxlSWRlbnRpZmllclJlZikpLmdl
dCgpKTsKICNlbmRpZgogfQogCkBAIC0xNTYsMTAgKzE1NiwxMCBAQCBXS1N0cmluZ1JlZiBXS1Bs
dWdJbkluZm9Jc1NhbmRib3hlZEtleSgpCiAKIGJvb2wgV0tDb250ZXh0U2hvdWxkQmxvY2tXZWJH
TCgpCiB7Ci0gICAgcmV0dXJuIFdLU2hvdWxkQmxvY2tXZWJHTCgpOworICAgIHJldHVybiBXZWJD
b3JlOjpXZWJHTEJsYWNrbGlzdDo6c2hvdWxkQmxvY2tXZWJHTCgpOwogfQogCiBib29sIFdLQ29u
dGV4dFNob3VsZFN1Z2dlc3RCbG9ja1dlYkdMKCkKIHsKLSAgICByZXR1cm4gV0tTaG91bGRTdWdn
ZXN0QmxvY2tpbmdXZWJHTCgpOworICAgIHJldHVybiBXZWJDb3JlOjpXZWJHTEJsYWNrbGlzdDo6
c2hvdWxkU3VnZ2VzdEJsb2NraW5nV2ViR0woKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmgKaW5kZXggMjc5MWM5OGY2ZTkwMGYz
YWU0NGU2ZDM5ZmU4MDQyMjI3MTJkZGIwMC4uMzBhZGMwMDQ5MzJiYzBlYjE2ZTcxMjNlNTdjOWFh
NTg5NzY3YThmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luSW5mb1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luSW5mb1N0b3JlLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKIAogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsdWdpbkJsYWNrbGlzdC5oPgogCiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRh
Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9Q
bHVnaW5JbmZvU3RvcmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9t
YWMvUGx1Z2luSW5mb1N0b3JlTWFjLm1tCmluZGV4IDk2MjI3NjVlOTIyZDJiYzYxMzA1MzRjODVl
Y2I1ZWFlMjUwZTM5NzEuLmExYjA2YmQ5NTg0Y2FjMjk4ZWE0MzlmZjBjZGJhMDM5OTM0NjlmYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5J
bmZvU3RvcmVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvbWFj
L1BsdWdpbkluZm9TdG9yZU1hYy5tbQpAQCAtMzEsNyArMzEsNyBAQAogI2ltcG9ydCAiTG9nZ2lu
Zy5oIgogI2ltcG9ydCAiTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCIKICNpbXBvcnQgIlNhbmRib3hV
dGlsaXRpZXMuaCIKLSNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8
V2ViQ29yZS9QbHVnaW5CbGFja2xpc3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TU3Ry
aW5nRXh0cmFzLmg+CiAjaW1wb3J0IDx3dGYvSGFzaFNldC5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgpAQCAtNzYsNyArNzYsNyBAQCBib29sIFBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2lu
SW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mCiBzdGF0aWMg
Ym9vbCBzaG91bGRCbG9ja1BsdWdpbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCiB7
CiAgICAgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBsb2FkUG9saWN5ID0gUGx1Z2luSW5mb1N0b3Jl
OjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihwbHVnaW4pOwotICAgIHJldHVybiAobG9hZFBv
bGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHkpIHx8IChsb2FkUG9saWN5ID09
IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5KTsKKyAgICByZXR1cm4gbG9hZFBv
bGljeSA9PSBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHkgfHwgbG9hZFBvbGljeSA9PSBQ
bHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKIH0KIAogYm9vbCBQbHVnaW5JbmZv
U3RvcmU6OnNob3VsZFVzZVBsdWdpbihWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4mIGFscmVhZHlM
b2FkZWRQbHVnaW5zLCBjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4pCkBAIC0xMDgsMjcg
KzEwOCwxNiBAQCBib29sIFBsdWdpbkluZm9TdG9yZTo6c2hvdWxkVXNlUGx1Z2luKFZlY3RvcjxQ
bHVnaW5Nb2R1bGVJbmZvPiYgYWxyZWFkeUxvYWRlZFBsdQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1pbmxpbmUgUGx1Z2luTW9kdWxlTG9hZFBvbGljeSBXS1BsdWdJbk1vZHVsZUxvYWRQb2xpY3lU
b1BsdWdpbk1vZHVsZUxvYWRQb2xpY3koV0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5IHdrc2lQb2xp
Y3kpCi17Ci0KLSAgICBzd2l0Y2ggKHdrc2lQb2xpY3kpIHsKLSAgICAgICAgY2FzZSBXS1BsdWdJ
bk1vZHVsZUxvYWRQb2xpY3lMb2FkTm9ybWFsbHk6Ci0gICAgICAgICAgICByZXR1cm4gUGx1Z2lu
TW9kdWxlTG9hZE5vcm1hbGx5OwotICAgICAgICBjYXNlIFdLUGx1Z0luTW9kdWxlTG9hZFBvbGlj
eUxvYWRVbnNhbmRib3hlZDoKLSAgICAgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVMb2FkVW5z
YW5kYm94ZWQ7Ci0gICAgICAgIGNhc2UgV0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5QmxvY2tlZEZv
clNlY3VyaXR5OgotICAgICAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1
cml0eTsKLSAgICAgICAgY2FzZSBXS1BsdWdJbk1vZHVsZUxvYWRQb2xpY3lCbG9ja2VkRm9yQ29t
cGF0aWJpbGl0eToKLSAgICAgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yQ29t
cGF0aWJpbGl0eTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5OwotfQotCiBQbHVnaW5Nb2R1bGVMb2Fk
UG9saWN5IFBsdWdpbkluZm9TdG9yZTo6ZGVmYXVsdExvYWRQb2xpY3lGb3JQbHVnaW4oY29uc3Qg
UGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQogewotICAgIHJldHVybiBXS1BsdWdJbk1vZHVsZUxv
YWRQb2xpY3lUb1BsdWdpbk1vZHVsZUxvYWRQb2xpY3koV0tMb2FkUG9saWN5Rm9yUGx1Z2luVmVy
c2lvbihwbHVnaW4uYnVuZGxlSWRlbnRpZmllciwgcGx1Z2luLnZlcnNpb25TdHJpbmcpKTsKKyAg
ICBzd2l0Y2ggKFBsdWdpbkJsYWNrbGlzdDo6bG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24ocGx1
Z2luLmJ1bmRsZUlkZW50aWZpZXIsIHBsdWdpbi52ZXJzaW9uU3RyaW5nKSkgeworICAgIGNhc2Ug
UGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5OjpMb2FkTm9ybWFsbHk6CisgICAgICAgIHJldHVy
biBQbHVnaW5Nb2R1bGVMb2FkTm9ybWFsbHk7CisgICAgY2FzZSBQbHVnaW5CbGFja2xpc3Q6Okxv
YWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0eToKKyAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVs
ZUJsb2NrZWRGb3JTZWN1cml0eTsKKyAgICBjYXNlIFBsdWdpbkJsYWNrbGlzdDo6TG9hZFBvbGlj
eTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk6CisgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVC
bG9ja2VkRm9yQ29tcGF0aWJpbGl0eTsKKyAgICB9CiB9CiAKIFBsdWdpbk1vZHVsZUluZm8gUGx1
Z2luSW5mb1N0b3JlOjpmaW5kUGx1Z2luV2l0aEJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5n
JiBidW5kbGVJZGVudGlmaWVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285975</attachid>
            <date>2016-08-12 16:37:23 -0700</date>
            <delta_ts>2016-08-12 16:56:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160831-20160812163543.patch</filename>
            <type>text/plain</type>
            <size>60607</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUzZTVlNzk4MmJjODFi
MWNmMmQxOTgxZGEzODhkYWI1ZWNjNDQ4Zi4uOWUxYjQxMjQ1ODlmZWNkYWY3MjhmNDk4MzAxYzdk
OThhOTViYzA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTA4LTEyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgcGx1
Zy1pbiBhbmQgV2ViR0wgYmxhY2tsaXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpxdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpwbHVnaW5CbGFja2xpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxhY2tsaXN0VXBkYXRlcjo6d2ViR0xCbGFja2xpc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9CbGFja2xpc3RVcGRhdGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlYWRCbGFja2xpc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OmluaXRpYWxpemVRdWV1ZSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGx1Z2luQmxhY2tsaXN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkJsYWNr
bGlzdDo6bG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5CbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFj
a2xpc3Q6On5QbHVnaW5CbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2ts
aXN0OjpzcGxpdE9TVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OmxvYWRQb2xpY3lGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2tsaXN0
Ojppc1VwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OlBsdWdpbkJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkdMQmxhY2tsaXN0
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJHTEJsYWNrbGlzdC5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6T1NCdWlsZEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6T1NCdWlsZEluZm86Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
T1NCdWlsZEluZm86Om9wZXJhdG9yPik6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6
b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6b3BlcmF0b3I8KToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5mb0Zyb21PU0J1aWxkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRCbG9ja1dlYkdMKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRTdWdnZXN0QmxvY2tpbmdXZWJHTCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRjaGVzR1BVKToKKyAgICAgICAgKFdlYkNvcmU6OmdwdU1hc2tGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCdWlsZEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEJsYWNrbGlzdDo6c2hvdWxkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xp
c3Q6OnNob3VsZFN1Z2dlc3RCbG9ja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJsYWNr
bGlzdDo6V2ViR0xCbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6
On5XZWJHTEJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVz
U1BJLmg6IEFkZGVkLgorCiAyMDE2LTA4LTEyICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA0NDA0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IGNjNjA2NWFkZTdmYmNhOTQxZDQ3MmM4MDUzNDUyNzg4YWY1ODU3
ZjcuLmQ4MjdiNGViNTMxZTkwODZlODI3Yjk2OTUzNWNiNDgyMzI3NGMzY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0wOC0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJs
YWNrbGlzdCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDgzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkb3B0IHRoZSBwbHVnLWluIGFuZCBXZWJHTCBibGFja2xpc3QgY29k
ZSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29kZSBmcm9tIFdlYktpdFN5c3Rl
bUludGVyZmFjZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tOgorICAgICAgICAoc2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChzaG91bGRCbG9ja1dlYkdMKToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3ZWJHTFBvbGljeUZvclVSTCk6CisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKToKKwog
MjAxNi0wOC0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
Z3Jlc3Npb24ocjIwNDI2OCk6IE1haWwgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBjb21wb3NlIGFu
IGVtYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmZmYzljYTczZTVmYzc0ZWI2OTUyZGEwNjJhOGFlNjZiYWNj
MjUwOS4uYjhlOWFlMzNhZDU2M2U2MDNhNTg5ZDdkODkxY2Q0Y2JlYWQzMWVmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE2LTA4LTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgcGx1Zy1pbiBhbmQgV2ViR0wgYmxhY2ts
aXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRvcHQgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJsYWNrbGlzdCBjb2RlIGZy
b20gV2ViQ29yZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjb2RlIGZyb20gV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLgorCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbklu
Zm9ybWF0aW9uTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRQbGF0Zm9ybVBsdWdpbk1vZHVs
ZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZv
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1t
OgorICAgICAgICAoV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUpOgorICAgICAgICAo
V0tDb250ZXh0U2hvdWxkQmxvY2tXZWJHTCk6CisgICAgICAgIChXS0NvbnRleHRTaG91bGRTdWdn
ZXN0QmxvY2tXZWJHTCk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpbkluZm9TdG9yZU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKToKKyAgICAg
ICAgKFdlYktpdDo6V0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5VG9QbHVnaW5Nb2R1bGVMb2FkUG9s
aWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKToKKworMjAxNi0wOC0xMiAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIG1lc3NhZ2Ug
bG9hZGluZyBuZXZlciBmaW5pc2hlcyBpbiBNYWlsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4MDYKICAgICAgICAgcmRhcjovL3Byb2JsZW0vMjc2
MjQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA3NzQ3MDA4MzY3ZmU2NTBkYjg2ZGU0ZDA5MThjYTE0NDljOGE5N2M2Li45MGY2
ZGUyN2Y4ZTI5MDNiYjczMGJmZDUzNTVmZDgyNGQwOGYyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIwLDYgKzEwMjAs
MTIgQEAKIAkJMUFGOEUxQzMxMjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGOEUxQzEx
MjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwICovOyB9OwogCQkxQUZFMTE5
OTBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTk3MENCRkZDQzQwMDMw
MTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE5QTBDQkZG
Q0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyog
SlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CisJCTFBRkZDNDUzMUQ1RTgxQzQwMDI2N0E2
NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5t
bSAqLzsgfTsKKwkJMUFGRkM0NTQxRDVFODFDQjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0ZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZGQzQ0
RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRlci5tbSAqLzsgfTsKKwkJMUFGRkM0
NTUxRDVFODFEMDAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkZDNDUwMUQ1RTdFQzcwMDI2N0E2NiAv
KiBQbHVnaW5CbGFja2xpc3QubW0gKi87IH07CisJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAv
KiBDRlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmggKi87
IH07CisJCTFBRkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRkM0NTExRDVFN0VD
NzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUFGRkM0NTkxRDVFODY2MTAwMjY3QTY2IC8qIFBsdWdp
bkJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFCMTI0RDhEMUQzODBC
NzAwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRp
YVNhbXBsZUFWRk9iakMuaCAqLzsgfTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1l
ZGlhU2FtcGxlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMu
bW0gKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcxODFF
RDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNDcsNiArODI1MywxMyBAQAogCQkxQUY4RTFDMTEy
NTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVNlcnZlckNGTmV0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFGRTExOTcwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE5
ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ0RDFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0
VXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbGFja2xpc3RVcGRh
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBRkZDNDRFMUQ1RTdFQzcwMDI2
N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQmxhY2tsaXN0VXBkYXRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5CbGFja2xpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTAxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJs
YWNrbGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdp
bkJsYWNrbGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTExRDVF
N0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ1NjFENUU4M0E3MDAyNjdBNjYgLyogQ0ZVdGls
aXRpZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0ZVdGlsaXRpZXNT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMxRDM4MEI3MDAwRUNE
RkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2FtcGxlQVZGT2JqQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAg
LyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRleHRCb3hTdHlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTUxMiw4ICsxMTUyNSw4IEBACiAJ
CTlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ0RTkxOTFDNDYyQ0ZDMDA1
MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhBOTU5MThCRUZDNzYwMDk4N0U5QSAvKiBDb2xsZWN0aW9uSW5kZXhDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xsZWN0aW9uSW5k
ZXhDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTA5MUQ1QUVC
MDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgcGF0
aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0N1c3RvbUVsZW1lbnRz
UmVnaXN0cnkuaDsgcGF0aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCRTY3MTA5MUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3Rv
bUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1lbnRzUmVn
aXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJGOUE4N0UxNjQ4REQyRjAw
MUM2QjIzIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdGMTY0OEREMkYwMDFDNkIyMyAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUQ2MzgwMEYxQUYxNkUxNjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTZWxmQWxp
Z25tZW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc3MTQsNiArMTc3
MjcsNyBAQAogCQkJCTY1MDg2REE3MTlBQzE3MTkwMDlBRjQ2QiAvKiBDRkxvY2FsZVNQSS5oICov
LAogCQkJCUExMEQ3RkVCMUMyNjc2RDEwMEM2QzExNSAvKiBDRk5ldHdvcmtDb25uZWN0aW9uQ2Fj
aGVTUEkuaCAqLywKIAkJCQlDRTEyNTI1QTFBMUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3b3JrU1BJ
LmggKi8sCisJCQkJMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmgg
Ki8sCiAJCQkJNDQ0OUE0MDQxQTk2NEIwMDAwQjY0QUQ1IC8qIENvcmVNZWRpYVNQSS5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBjZjsKQEAgLTE4MDAwLDYgKzE4MDE0LDggQEAKIAkJNjU4MkExNDgw
OTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMUFGRkM0NEQxRDVFN0VDNzAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0
ZXIuaCAqLywKKwkJCQkxQUZGQzQ0RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRl
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCUE3OTU0NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSAqLywKIAkJ
CQlBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tICovLApAQCAtMTgw
MjUsNiArMTgwNDEsOCBAQAogCQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBs
YXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tICovLAorCQkJCTFBRkZDNDRGMUQ1RTdFQzcw
MDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCAqLywKKwkJCQkxQUZGQzQ1MDFENUU3RUM3MDAy
NjdBNjYgLyogUGx1Z2luQmxhY2tsaXN0Lm1tICovLAogCQkJCTQ2MzQ1OTJCMUFDMjI3MTAwMEVD
QjcxQyAvKiBQb3dlck9ic2VydmVyTWFjLmNwcCAqLywKIAkJCQk0NkRCQjY0RTFBQjhDOTZGMDBE
OUE4MTMgLyogUG93ZXJPYnNlcnZlck1hYy5oICovLAogCQkJCTAwODFGRUZFMTZCMEEyQjYwMDhB
QUE3QSAvKiBQdWJsaWNTdWZmaXhNYWMubW0gKi8sCkBAIC0xODA2NCw2ICsxODA4Miw4IEBACiAJ
CQkJOTNFQjE2OTQwOUY4ODBCMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0g
Ki8sCiAJCQkJQkU4NTVGN0YwNzAxRTgzNTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3LmggKi8sCiAJ
CQkJQkU4NTYwNTEwNzAxRjkxMTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3Lm0gKi8sCisJCQkJMUFG
RkM0NTExRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8sCisJCQkJMUFGRkM0
NTIxRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tICovLAogCQkJCUUxQTMxNjJC
MTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCAqLywKIAkJ
CQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
Lm1tICovLAogCQkJCUNENTg5NkUwMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5oICovLApAQCAtMjI1MzAsOCArMjI1NTAsNiBAQAogCQlCQ0YxQTVCQTA5Nzgz
MjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCTVDNkU2NTNGMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuY3Bw
ICovLAotCQkJCTVDNkU2NTQwMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuaCAqLywKIAkJ
CQk0OUU5MTJBNDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQw
MTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYx
MkQgLyogY2YgKi8sCkBAIC0yMjcwNSw2ICsyMjcyMyw4IEBACiAJCQkJNjU5MzkyMzUwOUFFNDM0
NjAwMkM1MzFGIC8qIFVSTC5jcHAgKi8sCiAJCQkJNjU5MzkyMzYwOUFFNDM0NjAwMkM1MzFGIC8q
IFVSTC5oICovLAogCQkJCUJDQkQyMUFBMEU0MTdBRDQwMEEwNzBGMiAvKiBVUkxIYXNoLmggKi8s
CisJCQkJNUM2RTY1M0YxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5jcHAgKi8sCisJCQkJ
NUM2RTY1NDAxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5oICovLAogCQkJCTg2ODE2MEQx
MTg3NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuY3BwICovLAogCQkJCTg2ODE2MEQyMTg3
NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuaCAqLywKIAkJCQk3MUM5MTYwNzFEMTQ4M0Ez
MDBBQ0E0N0QgLyogVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oICovLApAQCAtMjQ4NTks
NiArMjQ4NzksNyBAQAogCQkJCTA3MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgw
RkJCOUMxRDAwNTEwMjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU5MUQ1RTg2NjEwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkxQzlGMkY5MUFFM0JFQjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzA5LDYg
KzI1MzMwLDcgQEAKIAkJCQlBODE4NUYzOTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1l
bnRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUEzN0FEMDk3QzcxNUYwMDE5RjNEOCAv
KiBET00uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAvKiBD
RlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzOEYwMTkwQUQ3MThEODAwNkE4
MUQxIC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5OTgxMkUwREJF
ODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTM4RjAxQjBBRDcxOEQ4MDA2QTgxRDEgLyogRE9NQWJzdHJhY3RWaWV3SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLApAQCAtMjc0NzYsNiArMjc0OTgsNyBAQAogCQkJCTkzQzM4QzAzMTY0NDcz
REQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUgLyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNEU0MTExODdGODJFMTAwNDU4ODJDIC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDNEE0MTUxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFNDEwMTg3RjgyRTEwMDQ1ODgy
QyAvKiBTY3JvbGxpbmdUcmVlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1ODA2NDE5MzI3
QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTYw
Nyw2ICsyOTYzMCw3IEBACiAJCQkJQTg3MURCMjYwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2NjgxN0ZBMTY2RkU2RDcw
MEZBMDdCNCAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MTM2OUQ3MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBRkZDNDU1MUQ1RTgxRDAwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMwNTE5OTUxQkIw
RjExMDAwRjM3NzJFIC8qIEhUTUxUaW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODcxREMyOTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFRpdGxlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMwNzE2LDYgKzMwNzQwLDcgQEAKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3
QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0M0I3
MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQzMTA1
QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUFGRkM0NTMxRDVFODFDNDAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzM1MDNDQzcxMDE3QTFCMTAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMzkwQ0E1NTBGRkMxNTdCMDA5MjE5NjIgLyogTm90aWZpY2F0
aW9uQ2VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjhDQTY4MTQ3MzMxNTIwMDc0Qzcy
QSAvKiBOb3RpZmljYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE0MDcs
NiArMzE0MzIsNyBAQAogCQkJCUIyMjI3QTQzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNYXJrZXJF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTQ2MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E0QTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
RkZDNDU0MUQ1RTgxQ0IwMDI2N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEQwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R01QYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODMzQzdDQTBBMkNGMDZCMDBE
NTc2NjQgLyogU1ZHTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzFmMjYwNGZhMWY4
ZWNkMDZmNDMwMmVhNGE5YzUxM2E1ZDQ4OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2lt
cG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQbHVnaW5CbGFja2xpc3Q7CitjbGFzcyBXZWJHTEJsYWNrbGlzdDsKKworY2xhc3MgQmxhY2ts
aXN0VXBkYXRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1ZXVlKCk7
CisgICAgc3RhdGljIHZvaWQgcmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAgIHN0YXRpYyBkaXNw
YXRjaF9xdWV1ZV90IHF1ZXVlKCkgeyByZXR1cm4gc19xdWV1ZTsgfQorICAgIHN0YXRpYyBQbHVn
aW5CbGFja2xpc3QqIHBsdWdpbkJsYWNrbGlzdCgpIHsgcmV0dXJuIHNfcGx1Z2luQmxhY2tsaXN0
OyB9CisgICAgc3RhdGljIFdlYkdMQmxhY2tsaXN0KiB3ZWJHTEJsYWNrbGlzdCgpIHsgcmV0dXJu
IHNfd2ViR0xCbGFja2xpc3Q7IH07CisKK3ByaXZhdGU6CisKKyAgICBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpyZWFkQmxhY2tsaXN0RGF0YSgpOworCisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3Qg
c19xdWV1ZTsKKyAgICBzdGF0aWMgUGx1Z2luQmxhY2tsaXN0KiBzX3BsdWdpbkJsYWNrbGlzdDsK
KyAgICBzdGF0aWMgV2ViR0xCbGFja2xpc3QqIHNfd2ViR0xCbGFja2xpc3Q7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlz
dFVwZGF0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRl
ci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZTczOGMxY2EyNTM0NTViNDhmNDNiMTg5OGMxOWM2ZDMyZTI5YTMy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlz
dFVwZGF0ZXIubW0KQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiQmxhY2tsaXN0VXBkYXRlci5oIgorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0ICJQbHVnaW5CbGFja2xpc3QuaCIKKyNpbXBvcnQgIldlYkdMQmxhY2ts
aXN0LmgiCisjaW1wb3J0IDxzeXMvc3RhdC5oPgorI2ltcG9ydCA8c3lzL3RpbWUuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworLy8gVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggd2UnbGwgY2hl
Y2sgdGhlIGJsYWNrbGlzdCBkYXRhLgorc3RhdGljIHRpbWVfdCBibGFja2xpc3ROZXh0Q2hlY2tU
aW1lOworCisvLyBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHdlJ2xsIGNoZWNrIGlmIHRo
ZSBibGFja2xpc3QgZGF0YSBoYXMgY2hhbmdlZC4KK2NvbnN0IHRpbWVfdCBibGFja2xpc3RDaGVj
a1RpbWVJbnRlcnZhbCA9IDYwICogMTA7CisKKy8vIFRoZSB0aW1lIHdoZW4gd2UgbGFzdCByZS1w
YXJzZWQgdGhlIGJsYWNrbGlzdCBmaWxlLgorc3RhdGljIHRpbWVfdCBibGFja2xpc3RVcGRhdGVU
aW1lOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKK05T
U3RyaW5nICogY29uc3QgYmxhY2tsaXN0UGF0aCA9IEAiL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2
aWNlcy9YUHJvdGVjdC5idW5kbGUvQ29udGVudHMvUmVzb3VyY2VzL1hQcm90ZWN0Lm1ldGEucGxp
c3QiOworI2Vsc2UKK05TU3RyaW5nICogY29uc3QgYmxhY2tsaXN0UGF0aCA9IEAiL1N5c3RlbS9M
aWJyYXJ5L0NvcmVTZXJ2aWNlcy9Db3JlVHlwZXMuYnVuZGxlL0NvbnRlbnRzL1Jlc291cmNlcy9Y
UHJvdGVjdC5tZXRhLnBsaXN0IjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Rp
c3BhdGNoX3F1ZXVlX3QgQmxhY2tsaXN0VXBkYXRlcjo6c19xdWV1ZTsKKworUGx1Z2luQmxhY2ts
aXN0KiBCbGFja2xpc3RVcGRhdGVyOjpzX3BsdWdpbkJsYWNrbGlzdCA9IG51bGxwdHI7CitXZWJH
TEJsYWNrbGlzdCogQmxhY2tsaXN0VXBkYXRlcjo6c193ZWJHTEJsYWNrbGlzdCA9IG51bGxwdHI7
CisKK05TRGljdGlvbmFyeSAqIEJsYWNrbGlzdFVwZGF0ZXI6OnJlYWRCbGFja2xpc3REYXRhKCkK
K3sKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6Ymxh
Y2tsaXN0UGF0aF07CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIGR5bmFtaWNfb2JqY19jYXN0PE5TRGljdGlvbmFyeT4oW05TUHJvcGVydHlMaXN0U2Vy
aWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRoRGF0YTpkYXRhIG9wdGlvbnM6TlNQcm9wZXJ0eUxp
c3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6bnVsbHB0cl0pOworfQorCit2b2lkIEJs
YWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZh
bCB0aW1lVmFsOworICAgIGlmICghZ2V0dGltZW9mZGF5KCZ0aW1lVmFsLCBOVUxMKSkgeworICAg
ICAgICBpZiAodGltZVZhbC50dl9zZWMgPCBibGFja2xpc3ROZXh0Q2hlY2tUaW1lKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsYWNrbGlzdE5leHRDaGVja1RpbWUgPSB0aW1l
VmFsLnR2X3NlYyArIGJsYWNrbGlzdENoZWNrVGltZUludGVydmFsOworCisgICAgc3RydWN0IHN0
YXQgc3RhdEJ1ZjsKKyAgICBpZiAoc3RhdChbYmxhY2tsaXN0UGF0aCBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb25dLCAmc3RhdEJ1ZikgPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
dGF0QnVmLnN0X210aW1lc3BlYy50dl9zZWMgPT0gYmxhY2tsaXN0VXBkYXRlVGltZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydHlMaXN0ID0gcmVhZEJsYWNrbGlz
dERhdGEoKTsKKyAgICBpZiAoIXByb3BlcnR5TGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHNfcGx1Z2luQmxhY2tsaXN0KSB7CisgICAgICAgIGRlbGV0ZSBzX3BsdWdpbkJsYWNrbGlz
dDsKKyAgICAgICAgc19wbHVnaW5CbGFja2xpc3QgPSAwOworICAgIH0KKworICAgIGlmIChzX3dl
YkdMQmxhY2tsaXN0KSB7CisgICAgICAgIGRlbGV0ZSBzX3dlYkdMQmxhY2tsaXN0OworICAgICAg
ICBzX3dlYkdMQmxhY2tsaXN0ID0gMDsKKyAgICB9CisKKyAgICBzX3BsdWdpbkJsYWNrbGlzdCA9
IFBsdWdpbkJsYWNrbGlzdDo6Y3JlYXRlKHByb3BlcnR5TGlzdCkucmVsZWFzZSgpOworICAgIHNf
d2ViR0xCbGFja2xpc3QgPSBXZWJHTEJsYWNrbGlzdDo6Y3JlYXRlKHByb3BlcnR5TGlzdCkucmVs
ZWFzZSgpOworCisgICAgYmxhY2tsaXN0VXBkYXRlVGltZSA9IHN0YXRCdWYuc3RfbXRpbWVzcGVj
LnR2X3NlYzsKK30KKwordm9pZCBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXplUXVldWUoKQor
eworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKKyAgICBkaXNwYXRjaF9vbmNlKCZv
bmNlLCBeeworICAgICAgICBzX3F1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBw
bGUuV2ViS2l0LkJsYWNrbGlzdCIsIDApOworICAgIH0pOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg1MzY1ZmI3Yzg0MmI1NGRhZmU0OTgxNTJlZTc0ZGEyZmJiMDlkYjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0LmgKQEAgLTAs
MCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShNQUMpCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKworT0JKQ19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7
CitPQkpDX0NMQVNTIE5TU2V0OworT0JKQ19DTEFTUyBOU1N0cmluZzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQbHVnaW5CbGFja2xpc3QgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgTG9hZFBvbGljeSB7CisgICAgICAgIExvYWROb3JtYWxseSwKKyAgICAgICAgQmxvY2tlZEZv
clNlY3VyaXR5LAorICAgICAgICBCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSwKKyAgICB9OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExvYWRQb2xpY3kgbG9hZFBvbGljeUZvclBsdWdpblZl
cnNpb24oTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIsIE5TU3RyaW5nICpidW5kbGVWZXJzaW9u
U3RyaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1BsdWdpblVwZGF0ZUF2
YWlsYWJsZShOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcik7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBsdWdpbkJsYWNrbGlzdD4gY3JlYXRlKE5TRGljdGlvbmFyeSAqKTsKKyAgICB+
UGx1Z2luQmxhY2tsaXN0KCk7CisKKyAgICBzdGF0aWMgTlNBcnJheSAqc3BsaXRPU1ZlcnNpb24o
TlNTdHJpbmcgKm9zVmVyc2lvbik7CisKKyAgICBMb2FkUG9saWN5IGxvYWRQb2xpY3lGb3JQbHVn
aW4oTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIsIE5TU3RyaW5nICpidW5kbGVWZXJzaW9uU3Ry
aW5nKSBjb25zdDsKKyAgICBib29sIGlzVXBkYXRlQXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJ
ZGVudGlmaWVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5CbGFja2xpc3QoTlNEaWN0
aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIE5TRGljdGlvbmFyeSAqYnVu
ZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5ICpidW5kbGVJRFRv
QmxvY2tlZFZlcnNpb25zLCBOU1NldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMpOwor
CisgICAgTlNEaWN0aW9uYXJ5ICptX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbjsKKyAg
ICBOU0RpY3Rpb25hcnkgKm1fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbjsKKyAg
ICBOU0RpY3Rpb25hcnkgKm1fYnVuZGxlSURUb0Jsb2NrZWRWZXJzaW9uczsKKyAgICBOU1NldCAq
bV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlczsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYmNjOTRmZGJiNGJmNmQ0NzM4MDZmMzU0NDJjODU0ZmQ2OGIwMzM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5tbQpAQCAt
MCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQbHVnaW5CbGFja2xpc3QuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAi
QmxhY2tsaXN0VXBkYXRlci5oIgorI2ltcG9ydCAiQ0ZVdGlsaXRpZXNTUEkuaCIKKyNpbXBvcnQg
PHN5cy9zdGF0Lmg+CisjaW1wb3J0IDxzeXMvdGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkJsYWNrbGlzdDo6TG9hZFBvbGljeSBQbHVnaW5CbGFja2xpc3Q6OmxvYWRQb2xp
Y3lGb3JQbHVnaW5WZXJzaW9uKE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyLCBOU1N0cmluZyAq
YnVuZGxlVmVyc2lvblN0cmluZykKK3sKKyAgICBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXpl
UXVldWUoKTsKKworICAgIF9fYmxvY2sgUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5IGxvYWRQ
b2xpY3kgPSBMb2FkUG9saWN5OjpMb2FkTm9ybWFsbHk7CisgICAgZGlzcGF0Y2hfc3luYyhCbGFj
a2xpc3RVcGRhdGVyOjpxdWV1ZSgpLCBeeworICAgICAgICBCbGFja2xpc3RVcGRhdGVyOjpyZWxv
YWRJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIFBsdWdpbkJsYWNrbGlzdCogcGx1Z2luQmxhY2ts
aXN0ID0gQmxhY2tsaXN0VXBkYXRlcjo6cGx1Z2luQmxhY2tsaXN0KCk7CisgICAgICAgIGlmIChw
bHVnaW5CbGFja2xpc3QpCisgICAgICAgICAgICBsb2FkUG9saWN5ID0gcGx1Z2luQmxhY2tsaXN0
LT5sb2FkUG9saWN5Rm9yUGx1Z2luKGJ1bmRsZUlkZW50aWZpZXIsIGJ1bmRsZVZlcnNpb25TdHJp
bmcpOworICAgIH0pOworCisgICAgcmV0dXJuIGxvYWRQb2xpY3k7Cit9CisKK2Jvb2wgUGx1Z2lu
QmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZShOU1N0cmluZyAqYnVuZGxlSWRlbnRp
ZmllcikKK3sKKyAgICBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXplUXVldWUoKTsKKworICAg
IF9fYmxvY2sgYm9vbCBpc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSA9IGZhbHNlOworICAgIGRpc3Bh
dGNoX3N5bmMoQmxhY2tsaXN0VXBkYXRlcjo6cXVldWUoKSwgXnsKKyAgICAgICAgQmxhY2tsaXN0
VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAgICAgICBQbHVnaW5CbGFja2xpc3Qq
IHBsdWdpbkJsYWNrbGlzdCA9IEJsYWNrbGlzdFVwZGF0ZXI6OnBsdWdpbkJsYWNrbGlzdCgpOwor
ICAgICAgICBpZiAocGx1Z2luQmxhY2tsaXN0KQorICAgICAgICAgICAgaXNQbHVnaW5VcGRhdGVB
dmFpbGFibGUgPSBwbHVnaW5CbGFja2xpc3QtPmlzVXBkYXRlQXZhaWxhYmxlKGJ1bmRsZUlkZW50
aWZpZXIpOworICAgIH0pOworCisgICAgcmV0dXJuIGlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQmxhY2tsaXN0PiBQbHVnaW5CbGFja2xpc3Q6OmNy
ZWF0ZShOU0RpY3Rpb25hcnkgKnByb3BlcnR5TGlzdCkKK3sKKyAgICBDRkRpY3Rpb25hcnlSZWYg
c3lzdGVtVmVyc2lvbkRpY3Rpb25hcnkgPSBfQ0ZDb3B5U3lzdGVtVmVyc2lvbkRpY3Rpb25hcnko
KTsKKyAgICBDRlN0cmluZ1JlZiBvc1ZlcnNpb24gPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3lzdGVtVmVyc2lvbkRpY3Rpb25hcnksIF9rQ0ZTeXN0ZW1W
ZXJzaW9uUHJvZHVjdFZlcnNpb25LZXkpKTsKKworICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFy
eSA9IFtwcm9wZXJ0eUxpc3Qgb2JqZWN0Rm9yS2V5OkAiUGx1Z0luQmxhY2tsaXN0Il07CisKKyAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24gPSBb
TlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uID0gW05TTXV0YWJsZURpY3Rpb25h
cnkgZGljdGlvbmFyeV07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYnVuZGxlSURUb0Jsb2Nr
ZWRWZXJzaW9ucyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgIE5TTXV0
YWJsZVNldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMgPSBbTlNNdXRhYmxlU2V0IHNl
dF07CisgICAgCisgICAgZm9yIChOU1N0cmluZyAqb3NWZXJzaW9uQ29tcG9uZW50IGluIHNwbGl0
T1NWZXJzaW9uKChOU1N0cmluZyAqKW9zVmVyc2lvbikpIHsKKyAgICAgICAgTlNEaWN0aW9uYXJ5
ICpidW5kbGVJRHMgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6b3NWZXJzaW9uQ29tcG9uZW50
XTsKKyAgICAgICAgaWYgKCFidW5kbGVJRHMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBmb3IgKE5TU3RyaW5nICpidW5kbGVJRCBpbiBidW5kbGVJRHMpIHsKKyAgICAgICAgICAg
IE5TRGljdGlvbmFyeSAqdmVyc2lvbkluZm8gPSBbYnVuZGxlSURzIG9iamVjdEZvcktleTpidW5k
bGVJRF07CisgICAgICAgICAgICBhc3NlcnQodmVyc2lvbkluZm8pOworCisgICAgICAgICAgICBp
ZiAoIVt2ZXJzaW9uSW5mbyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgW2J1bmRsZUlEVG9NaW5pbXVt
U2VjdXJlVmVyc2lvbiByZW1vdmVPYmplY3RGb3JLZXk6YnVuZGxlSURdOworICAgICAgICAgICAg
W2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gcmVtb3ZlT2JqZWN0Rm9yS2V5OmJ1
bmRsZUlEXTsKKyAgICAgICAgICAgIFtidW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zIHJlbW92ZU9i
amVjdEZvcktleTpidW5kbGVJRF07CisKKyAgICAgICAgICAgIGlmIChOU0FycmF5ICpibG9ja2Vk
VmVyc2lvbnMgPSBbdmVyc2lvbkluZm8gb2JqZWN0Rm9yS2V5OkAiQmxvY2tlZFBsdWdJbkJ1bmRs
ZVZlcnNpb25zIl0pCisgICAgICAgICAgICAgICAgW2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMg
c2V0T2JqZWN0OmJsb2NrZWRWZXJzaW9ucyBmb3JLZXk6YnVuZGxlSURdOworCisgICAgICAgICAg
ICBpZiAoTlNTdHJpbmcgKm1pbmltdW1TZWN1cmVWZXJzaW9uID0gW3ZlcnNpb25JbmZvIG9iamVj
dEZvcktleTpAIk1pbmltdW1QbHVnSW5CdW5kbGVWZXJzaW9uIl0pCisgICAgICAgICAgICAgICAg
W2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiBzZXRPYmplY3Q6bWluaW11bVNlY3VyZVZl
cnNpb24gZm9yS2V5OmJ1bmRsZUlEXTsKKworICAgICAgICAgICAgaWYgKE5TU3RyaW5nICptaW5p
bXVtQ29tcGF0aWJsZVZlcnNpb24gPSBbdmVyc2lvbkluZm8gb2JqZWN0Rm9yS2V5OkAiTWluaW11
bUNvbXBhdGlibGVQbHVnSW5CdW5kbGVWZXJzaW9uIl0pCisgICAgICAgICAgICAgICAgW2J1bmRs
ZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gc2V0T2JqZWN0Om1pbmltdW1Db21wYXRpYmxl
VmVyc2lvbiBmb3JLZXk6YnVuZGxlSURdOworCisgICAgICAgICAgICBpZiAoTlNOdW1iZXIgKnVw
ZGF0ZUF2YWlsYWJsZSA9IFt2ZXJzaW9uSW5mbyBvYmplY3RGb3JLZXk6QCJQbHVnSW5VcGRhdGVB
dmFpbGFibGUiXSkgeworICAgICAgICAgICAgICAgIC8vIEEgbWlzc2luZyBQbHVnSW5VcGRhdGVB
dmFpbGFibGUga2V5IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBwbHVnLWluIHVwZGF0ZSBhdmFpbGFi
bGUuCisgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVBdmFpbGFibGUgfHwgW3VwZGF0ZUF2YWls
YWJsZSBib29sVmFsdWVdKQorICAgICAgICAgICAgICAgICAgICBbYnVuZGxlSURzV2l0aEF2YWls
YWJsZVVwZGF0ZXMgYWRkT2JqZWN0OmJ1bmRsZUlEXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIENGUmVsZWFzZShzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkJsYWNrbGlzdD4obmV3IFBsdWdpbkJsYWNr
bGlzdChidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIGJ1bmRsZUlEVG9NaW5pbXVtQ29t
cGF0aWJsZVZlcnNpb24sIGJ1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMsIGJ1bmRsZUlEc1dpdGhB
dmFpbGFibGVVcGRhdGVzKSk7Cit9CisKK1BsdWdpbkJsYWNrbGlzdDo6flBsdWdpbkJsYWNrbGlz
dCgpCit7CisgICAgQ0ZSZWxlYXNlKG1fYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uKTsK
KyAgICBDRlJlbGVhc2UobV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uKTsKKyAg
ICBDRlJlbGVhc2UobV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKTsKKyAgICBDRlJlbGVhc2Uo
bV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyk7Cit9CisKK05TQXJyYXkgKlBsdWdpbkJs
YWNrbGlzdDo6c3BsaXRPU1ZlcnNpb24oTlNTdHJpbmcgKm9zVmVyc2lvbikKK3sKKyAgICBOU0Fy
cmF5ICpjb21wb25lbnRzID0gW29zVmVyc2lvbiBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6
QCIuIl07CisKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFtjb21wb25lbnRzIGNvdW50
XTsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp2ZXJzaW9uU3RyaW5nID0gW1tjb21wb25lbnRz
IHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIGkgKyAxKV0gY29tcG9uZW50c0pvaW5l
ZEJ5U3RyaW5nOkAiLiJdOworCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OnZlcnNpb25TdHJp
bmddOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworUGx1Z2luQmxhY2tsaXN0
OjpMb2FkUG9saWN5IFBsdWdpbkJsYWNrbGlzdDo6bG9hZFBvbGljeUZvclBsdWdpbihOU1N0cmlu
ZyAqYnVuZGxlSWRlbnRpZmllciwgTlNTdHJpbmcgKmJ1bmRsZVZlcnNpb25TdHJpbmcpIGNvbnN0
Cit7CisgICAgaWYgKCFidW5kbGVJZGVudGlmaWVyIHx8ICFidW5kbGVWZXJzaW9uU3RyaW5nKQor
ICAgICAgICByZXR1cm4gTG9hZFBvbGljeTo6TG9hZE5vcm1hbGx5OworCisgICAgLy8gRmlyc3Qs
IGNoZWNrIGZvciBleHBsaWNpdGx5IGJsb2NrZWQgdmVyc2lvbnMuCisgICAgZm9yIChOU1N0cmlu
ZyAqYmxvY2tlZFZlcnNpb24gaW4gW21fYnVuZGxlSURUb0Jsb2NrZWRWZXJzaW9ucyBvYmplY3RG
b3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsKKyAgICAgICAgaWYgKFtibG9ja2VkVmVyc2lvbiBp
c0VxdWFsVG9TdHJpbmc6YnVuZGxlVmVyc2lvblN0cmluZ10pCisgICAgICAgICAgICByZXR1cm4g
TG9hZFBvbGljeTo6QmxvY2tlZEZvclNlY3VyaXR5OworICAgIH0KKworICAgIC8vIFRoZW4sIGNo
ZWNrIGlmIHRoZXJlJ3MgYSBmb3JjZWQgbWluaW11bSB2ZXJzaW9uIGZvciBzZWN1cml0eSBpc3N1
ZXMuCisgICAgaWYgKE5TU3RyaW5nICptaW5pbXVtU2VjdXJlVmVyc2lvbiA9IFttX2J1bmRsZUlE
VG9NaW5pbXVtU2VjdXJlVmVyc2lvbiBvYmplY3RGb3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsK
KyAgICAgICAgaWYgKFtidW5kbGVWZXJzaW9uU3RyaW5nIGNvbXBhcmU6bWluaW11bVNlY3VyZVZl
cnNpb24gb3B0aW9uczpOU051bWVyaWNTZWFyY2hdID09IE5TT3JkZXJlZEFzY2VuZGluZykKKyAg
ICAgICAgICAgIHJldHVybiBMb2FkUG9saWN5OjpCbG9ja2VkRm9yU2VjdXJpdHk7CisgICAgfQor
CisgICAgLy8gVGhlbiwgY2hlY2sgaWYgdGhlcmUncyBhIGZvcmNlZCBtaW5pbXVtIHZlcnNpb24g
Zm9yIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorICAgIGlmIChOU1N0cmluZyAqbWluaW11bUNvbXBh
dGlibGVWZXJzaW9uID0gW21fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiBvYmpl
Y3RGb3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsKKyAgICAgICAgaWYgKFtidW5kbGVWZXJzaW9u
U3RyaW5nIGNvbXBhcmU6bWluaW11bUNvbXBhdGlibGVWZXJzaW9uIG9wdGlvbnM6TlNOdW1lcmlj
U2VhcmNoXSA9PSBOU09yZGVyZWRBc2NlbmRpbmcpCisgICAgICAgICAgICByZXR1cm4gTG9hZFBv
bGljeTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CisgICAgfQorCisgICAgcmV0dXJuIExvYWRQ
b2xpY3k6OkxvYWROb3JtYWxseTsKK30KKworYm9vbCBQbHVnaW5CbGFja2xpc3Q6OmlzVXBkYXRl
QXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyKSBjb25zdAoreworICAgIHJldHVy
biBbbV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyBjb250YWluc09iamVjdDpidW5kbGVJ
ZGVudGlmaWVyXTsKK30KKworUGx1Z2luQmxhY2tsaXN0OjpQbHVnaW5CbGFja2xpc3QoTlNEaWN0
aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIE5TRGljdGlvbmFyeSAqYnVu
ZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5ICpidW5kbGVJRFRv
QmxvY2tlZFZlcnNpb25zLCBOU1NldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMpCisg
ICAgOiBtX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbihbYnVuZGxlSURUb01pbmltdW1T
ZWN1cmVWZXJzaW9uIGNvcHldKQorICAgICwgbV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVW
ZXJzaW9uKFtidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uIGNvcHldKQorICAgICwg
bV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKFtidW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zIGNv
cHldKQorICAgICwgbV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyhbYnVuZGxlSURzV2l0
aEF2YWlsYWJsZVVwZGF0ZXMgY29weV0pCit7CisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhl
IGRpY3Rpb25hcmllcyBkbyBub3QgZ2V0IGRlc3Ryb3llZCB1bmRlciBPYmplY3RpdmUtQyBncmFi
YWdlIGNvbGxlY3Rpb24uCisgICAgQ0ZSZXRhaW4obV9idW5kbGVJRFRvTWluaW11bVNlY3VyZVZl
cnNpb24pOworICAgIFttX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiByZWxlYXNlXTsK
KyAgICBDRlJldGFpbihtX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24pOworICAg
IFttX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gcmVsZWFzZV07CisgICAgQ0ZS
ZXRhaW4obV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKTsKKyAgICBbbV9idW5kbGVJRFRvQmxv
Y2tlZFZlcnNpb25zIHJlbGVhc2VdOworICAgIENGUmV0YWluKG1fYnVuZGxlSURzV2l0aEF2YWls
YWJsZVVwZGF0ZXMpOworICAgIFttX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzIHJlbGVh
c2VdOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkdMQmxhY2tsaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
R0xCbGFja2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmY3MmEyMDc2MGM3ZWFlNjE2YjUxYjM2ZWE2MTg0
M2ZhNWFhOTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkdMQmxhY2tsaXN0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworT0JKQ19DTEFTUyBOU0RpY3Rpb25h
cnk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0xCbGFja2xpc3QgeworcHVi
bGljOgorICAgIGVudW0gQmxvY2tDb21wYXJpc29uIHsKKyAgICAgICAgRXF1YWxzLAorICAgICAg
ICBMZXNzVGhhbiwKKyAgICAgICAgTGVzc1RoYW5FcXVhbHMKKyAgICB9OworCisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tXZWJHTCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBib29sIHNob3VsZFN1Z2dlc3RCbG9ja2luZ1dlYkdMKCk7CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQmxhY2tsaXN0PiBjcmVhdGUoTlNEaWN0aW9uYXJ5ICpw
cm9wZXJ0eUxpc3QpOworICAgIH5XZWJHTEJsYWNrbGlzdCgpOworCisgICAgYm9vbCBzaG91bGRC
bG9jaygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkU3VnZ2VzdEJsb2NraW5nKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBCbG9ja0NvbW1hbmQgeworICAgICAgICBBbGxvdywK
KyAgICAgICAgQmxvY2ssCisgICAgICAgIFN1Z2dlc3RCbG9ja2luZworICAgIH07CisKKyAgICBX
ZWJHTEJsYWNrbGlzdChCbG9ja0NvbW1hbmQpOworCisgICAgQmxvY2tDb21tYW5kIG1fY29tbWFu
ZDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViR0xCbGFja2xpc3QubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
R0xCbGFja2xpc3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2OGY4MTcxNjBkMmVmOTFmOTViMDc5NmIzYTJh
NmQxY2VjMTUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJHTEJsYWNrbGlzdC5tbQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJHTEJsYWNrbGlzdC5oIgorCisjaWYgUExB
VEZPUk0oTUFDKQorCisjaW1wb3J0ICJCbGFja2xpc3RVcGRhdGVyLmgiCisjaW1wb3J0ICJDRlV0
aWxpdGllc1NQSS5oIgorI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBPU0J1aWxkSW5mbyB7CisgICAgT1NCdWlsZEluZm8oKQorICAgICAg
ICA6IG1ham9yKDApCisgICAgICAgICwgbWlub3IoMCkKKyAgICAgICAgLCBidWlsZCgwKQorICAg
IHsKKyAgICB9CisKKyAgICBPU0J1aWxkSW5mbyhpbnQgbWFqb3IsIGludCBtaW5vciwgaW50IGJ1
aWxkKQorICAgICAgICA6IG1ham9yKG1ham9yKQorICAgICAgICAsIG1pbm9yKG1pbm9yKQorICAg
ICAgICAsIGJ1aWxkKGJ1aWxkKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT1NCdWlsZEluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
am9yID09IG90aGVyLm1ham9yICYmIG1pbm9yID09IG90aGVyLm1pbm9yICYmIGJ1aWxkID09IG90
aGVyLmJ1aWxkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9TQnVpbGRJbmZv
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnRpZShtYWpvciwgbWlu
b3IsIGJ1aWxkKSA+IHN0ZDo6dGllKG90aGVyLm1ham9yLCBvdGhlci5taW5vciwgb3RoZXIuYnVp
bGQpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPU0J1aWxkSW5mbyYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp0aWUobWFqb3IsIG1pbm9yLCBi
dWlsZCkgPD0gc3RkOjp0aWUob3RoZXIubWFqb3IsIG90aGVyLm1pbm9yLCBvdGhlci5idWlsZCk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT1NCdWlsZEluZm8mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dGllKG1ham9yLCBtaW5vciwgYnVpbGQp
IDwgc3RkOjp0aWUob3RoZXIubWFqb3IsIG90aGVyLm1pbm9yLCBvdGhlci5idWlsZCk7CisgICAg
fQorCisgICAgaW50IG1ham9yOyAvLyBSZXByZXNlbnRzIHRoZSAxMyBpbiAxM0M2NC4KKyAgICBp
bnQgbWlub3I7IC8vIFJlcHJlc2VudHMgdGhlIEMgaW4gMTNDNjQgKGFzIGEgbnVtYmVyIHdoZXJl
IEEgPT0gMSwgaS5lLiAzKS4KKyAgICBpbnQgYnVpbGQ7IC8vIFJlcHJlc2VudHMgdGhlIDY0IGlu
IDEzQzY0LgorfTsKKworc3RhdGljIE9TQnVpbGRJbmZvIGJ1aWxkSW5mb0Zyb21PU0J1aWxkU3Ry
aW5nKE5TU3RyaW5nICpidWlsZFN0cmluZykKK3sKKyAgICBOU0Vycm9yICplcnJvciA9IE5VTEw7
CisgICAgTlNSZWd1bGFyRXhwcmVzc2lvbiAqcmVnZXggPSBbTlNSZWd1bGFyRXhwcmVzc2lvbiBy
ZWd1bGFyRXhwcmVzc2lvbldpdGhQYXR0ZXJuOkAiXihcXGQrKShbQS1aXSkoXFxkKykiIG9wdGlv
bnM6MCBlcnJvcjomZXJyb3JdOworICAgIE5TQXJyYXkgKm1hdGNoZXMgPSBbcmVnZXggbWF0Y2hl
c0luU3RyaW5nOmJ1aWxkU3RyaW5nIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbYnVp
bGRTdHJpbmcgbGVuZ3RoXSldOworICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmNvdW50ICE9
IDEpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIE5TTG9nKEAiV2ViR0xCbGFja2xpc3QgY291
bGQgbm90IHBhcnNlIE9TQnVpbGQgZW50cnk6ICVAIiwgYnVpbGRTdHJpbmcpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiBPU0J1aWxkSW5mbygpOworICAgIH0KKworICAgIE5TVGV4dENoZWNraW5n
UmVzdWx0ICptYXRjaFJlc3VsdCA9IFttYXRjaGVzIG9iamVjdEF0SW5kZXg6MF07CisKKyAgICBp
ZiAobWF0Y2hSZXN1bHQubnVtYmVyT2ZSYW5nZXMgIT0gNCkgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgTlNMb2coQCJXZWJHTEJsYWNrbGlzdCBjb3VsZCBub3QgcGFyc2UgT1NCdWlsZCBlbnRy
eTogJUAiLCBidWlsZFN0cmluZyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIE9TQnVpbGRJbmZv
KCk7CisgICAgfQorCisgICAgaW50IG1ham9yVmVyc2lvbiA9IFtbYnVpbGRTdHJpbmcgc3Vic3Ry
aW5nV2l0aFJhbmdlOlttYXRjaFJlc3VsdCByYW5nZUF0SW5kZXg6MV1dIGludFZhbHVlXTsKKyAg
ICBpbnQgbWlub3JWZXJzaW9uID0gW1tidWlsZFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6W21h
dGNoUmVzdWx0IHJhbmdlQXRJbmRleDoyXV0gY2hhcmFjdGVyQXRJbmRleDowXSAtICdBJyArIDE7
CisgICAgaW50IGJ1aWxkVmVyc2lvbiA9IFtbYnVpbGRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdl
OlttYXRjaFJlc3VsdCByYW5nZUF0SW5kZXg6M11dIGludFZhbHVlXTsKKworICAgIHJldHVybiBP
U0J1aWxkSW5mbyhtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbiwgYnVpbGRWZXJzaW9uKTsKK30K
KworYm9vbCBXZWJHTEJsYWNrbGlzdDo6c2hvdWxkQmxvY2tXZWJHTCgpCit7CisgICAgQmxhY2ts
aXN0VXBkYXRlcjo6aW5pdGlhbGl6ZVF1ZXVlKCk7CisKKyAgICBfX2Jsb2NrIGJvb2wgc2hvdWxk
QmxvY2sgPSBmYWxzZTsKKyAgICBkaXNwYXRjaF9zeW5jKEJsYWNrbGlzdFVwZGF0ZXI6OnF1ZXVl
KCksIF57CisgICAgICAgIEJsYWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KCk7CisK
KyAgICAgICAgV2ViR0xCbGFja2xpc3QqIHdlYkdMQmxhY2tsaXN0ID0gQmxhY2tsaXN0VXBkYXRl
cjo6d2ViR0xCbGFja2xpc3QoKTsKKyAgICAgICAgaWYgKHdlYkdMQmxhY2tsaXN0KQorICAgICAg
ICAgICAgc2hvdWxkQmxvY2sgPSB3ZWJHTEJsYWNrbGlzdC0+c2hvdWxkQmxvY2soKTsKKyAgICB9
KTsKKworICAgIHJldHVybiBzaG91bGRCbG9jazsKK30KKworYm9vbCBXZWJHTEJsYWNrbGlzdDo6
c2hvdWxkU3VnZ2VzdEJsb2NraW5nV2ViR0woKQoreworICAgIEJsYWNrbGlzdFVwZGF0ZXI6Omlu
aXRpYWxpemVRdWV1ZSgpOworCisgICAgX19ibG9jayBib29sIHNob3VsZFN1Z2dlc3RCbG9ja2lu
ZyA9IGZhbHNlOworICAgIGRpc3BhdGNoX3N5bmMoQmxhY2tsaXN0VXBkYXRlcjo6cXVldWUoKSwg
XnsKKyAgICAgICAgQmxhY2tsaXN0VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAg
ICAgICBXZWJHTEJsYWNrbGlzdCogd2ViR0xCbGFja2xpc3QgPSBCbGFja2xpc3RVcGRhdGVyOjp3
ZWJHTEJsYWNrbGlzdCgpOworICAgICAgICBpZiAod2ViR0xCbGFja2xpc3QpCisgICAgICAgICAg
ICBzaG91bGRTdWdnZXN0QmxvY2tpbmcgPSB3ZWJHTEJsYWNrbGlzdC0+c2hvdWxkU3VnZ2VzdEJs
b2NraW5nKCk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc2hvdWxkU3VnZ2VzdEJsb2NraW5nOwor
fQorCitzdGF0aWMgYm9vbCBtYXRjaGVzR1BVKEdMaW50IG1hY2hpbmVJZCwgR0xpbnQgcmVuZGVy
ZXJNYXNrKQoreworICAgIC8vIElmIHRoZSBsYXN0IHR3byBieXRlcyBvZiB0aGUgcmVuZGVyZXJN
YXNrIGFyZSBub3QgemVybywgdGhlbiB3ZSdyZQorICAgIC8vIGxvb2tpbmcgZm9yIGFuIGV4YWN0
IEdQVSBtYXRjaC4gT3RoZXJ3aXNlIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QKKyAgICAvLyBhIGNs
YXNzIG9mIEdQVXMuCisKKyAgICBpZiAocmVuZGVyZXJNYXNrICYgMHhGRikKKyAgICAgICAgcmV0
dXJuIG1hY2hpbmVJZCA9PSByZW5kZXJlck1hc2s7CisKKyAgICByZXR1cm4gKG1hY2hpbmVJZCAm
IGtDR0xSZW5kZXJlcklETWF0Y2hpbmdNYXNrKSA9PSByZW5kZXJlck1hc2s7Cit9CisKK3N0YXRp
YyBHTGludCBncHVNYXNrRnJvbVN0cmluZyhOU1N0cmluZyAqaW5wdXQpCit7CisgICAgTlNTY2Fu
bmVyKiBzY2FubmVyID0gW05TU2Nhbm5lciBzY2FubmVyV2l0aFN0cmluZzppbnB1dF07CisgICAg
dW5zaWduZWQgbWFza1ZhbHVlOworICAgIFtzY2FubmVyIHNjYW5IZXhJbnQ6Jm1hc2tWYWx1ZV07
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihtYXNrVmFsdWUgJiAoa0NHTFJlbmRlcmVy
SURNYXRjaGluZ01hc2sgfCAweEZGKSk7Cit9CisKK3N0YXRpYyBib29sIG1hdGNoZXNCdWlsZElu
Zm8oT1NCdWlsZEluZm8gbWFjaGluZUluZm8sIE9TQnVpbGRJbmZvIGJsb2NrSW5mbywgV2ViR0xC
bGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbiBjb21wYXJpc29uKQoreworICAgIHN3aXRjaCAoY29t
cGFyaXNvbikgeworICAgIGNhc2UgV2ViR0xCbGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbjo6RXF1
YWxzOgorICAgICAgICByZXR1cm4gbWFjaGluZUluZm8gPT0gYmxvY2tJbmZvOworICAgIGNhc2Ug
V2ViR0xCbGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbjo6TGVzc1RoYW46CisgICAgICAgIHJldHVy
biBtYWNoaW5lSW5mbyA8IGJsb2NrSW5mbzsKKyAgICBjYXNlIFdlYkdMQmxhY2tsaXN0OjpCbG9j
a0NvbXBhcmlzb246Okxlc3NUaGFuRXF1YWxzOgorICAgICAgICByZXR1cm4gbWFjaGluZUluZm8g
PD0gYmxvY2tJbmZvOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQmxhY2tsaXN0
PiBXZWJHTEJsYWNrbGlzdDo6Y3JlYXRlKE5TRGljdGlvbmFyeSAqcHJvcGVydHlMaXN0KQorewor
ICAgIENGRGljdGlvbmFyeVJlZiBzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSA9IF9DRkNvcHlTeXN0
ZW1WZXJzaW9uRGljdGlvbmFyeSgpOworICAgIENGU3RyaW5nUmVmIG9zQnVpbGQgPSBzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3lzdGVtVmVyc2lvbkRpY3Rp
b25hcnksIF9rQ0ZTeXN0ZW1WZXJzaW9uQnVpbGRWZXJzaW9uS2V5KSk7CisgICAgT1NCdWlsZElu
Zm8gYnVpbGRJbmZvID0gYnVpbGRJbmZvRnJvbU9TQnVpbGRTdHJpbmcoKE5TU3RyaW5nICopb3NC
dWlsZCk7CisgICAgQ0ZSZWxlYXNlKHN5c3RlbVZlcnNpb25EaWN0aW9uYXJ5KTsKKworICAgIGlm
ICghYnVpbGRJbmZvLm1ham9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5TQXJy
YXkgKmJsb2NrRW50cmllcyA9IFtwcm9wZXJ0eUxpc3Qgb2JqZWN0Rm9yS2V5OkAiV2ViR0xCbGFj
a2xpc3QiXTsKKworICAgIGlmICghW2Jsb2NrRW50cmllcyBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0gfHwgIWJsb2NrRW50cmllcy5jb3VudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzWzEyXSA9IHsKKyAgICAgICAg
a0NHTFBGQUNvbG9yU2l6ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKTMyLAorICAgICAgICBr
Q0dMUEZBRGVwdGhTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpMzIsCisgICAgICAgIGtD
R0xQRkFBY2NlbGVyYXRlZCwKKyAgICAgICAga0NHTFBGQVN1cGVyc2FtcGxlLAorICAgICAgICBr
Q0dMUEZBTXVsdGlzYW1wbGUsCisgICAgICAgIGtDR0xQRkFTYW1wbGVCdWZmZXJzLCAoQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUpMSwKKyAgICAgICAga0NHTFBGQVNhbXBsZXMsIChDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZSk0LAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpMAorICAg
IH07CisKKyAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXg7CisgICAgR0xpbnQgbnBpeDsKKyAgICBD
R0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4LCAmbnBpeCk7CisgICAgQ0dMQ29udGV4
dE9iaiBjdHg7CisgICAgQ0dMQ3JlYXRlQ29udGV4dChwaXgsIDAsICZjdHgpOworICAgIEdMaW50
IHJlbmRlcmVySWQgPSAwOworICAgIENHTEdldFBhcmFtZXRlcihjdHgsIGtDR0xDUEN1cnJlbnRS
ZW5kZXJlcklELCAmcmVuZGVyZXJJZCk7CisgICAgR0xpbnQgc3VwcG9ydHNTZXBhcmF0ZUFkZHJl
c3NTcGFjZSA9IDA7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEw
MDAKKyAgICBDR0xHZXRQYXJhbWV0ZXIoY3R4LCBrQ0dMQ1BTdXBwb3J0U2VwYXJhdGVBZGRyZXNz
U3BhY2UsICZzdXBwb3J0c1NlcGFyYXRlQWRkcmVzc1NwYWNlKTsKKyNlbmRpZgorICAgIENHTERl
c3Ryb3lDb250ZXh0KGN0eCk7CisgICAgQ0dMUmVsZWFzZVBpeGVsRm9ybWF0KHBpeCk7CisKKyAg
ICByZW5kZXJlcklkICY9IGtDR0xSZW5kZXJlcklETWF0Y2hpbmdNYXNrIHwgMHhGRjsKKworICAg
IEJsb2NrQ29tbWFuZCBnbG9iYWxDb21tYW5kID0gQmxvY2tDb21tYW5kOjpBbGxvdzsKKworICAg
IGZvciAoTlNEaWN0aW9uYXJ5ICpibG9ja0RhdGEgaW4gYmxvY2tFbnRyaWVzKSB7CisKKyAgICAg
ICAgR0xpbnQgZ3B1TWFzayA9IGdwdU1hc2tGcm9tU3RyaW5nKFtibG9ja0RhdGEgb2JqZWN0Rm9y
S2V5OkAiR1BVIl0pOworCisgICAgICAgIE9TQnVpbGRJbmZvIGJsb2NrZWRCdWlsZEluZm8gPSBi
dWlsZEluZm9Gcm9tT1NCdWlsZFN0cmluZyhzdGF0aWNfY2FzdDxOU1N0cmluZyo+KFtibG9ja0Rh
dGEgb2JqZWN0Rm9yS2V5OkAiT1NCdWlsZCJdKSk7CisKKyAgICAgICAgTlNTdHJpbmcgKmNvbXBh
cmlzb25TdHJpbmcgPSBbYmxvY2tEYXRhIG9iamVjdEZvcktleTpAIkNvbXBhcmlzb24iXTsKKyAg
ICAgICAgQmxvY2tDb21wYXJpc29uIGNvbXBhcmlzb24gPSBCbG9ja0NvbXBhcmlzb246OkVxdWFs
czsKKyAgICAgICAgaWYgKFtjb21wYXJpc29uU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIkxlc3NU
aGFuIl0pCisgICAgICAgICAgICBjb21wYXJpc29uID0gQmxvY2tDb21wYXJpc29uOjpMZXNzVGhh
bjsKKyAgICAgICAgZWxzZSBpZiAoW2NvbXBhcmlzb25TdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
TGVzc1RoYW5FcXVhbHMiXSkKKyAgICAgICAgICAgIGNvbXBhcmlzb24gPSBCbG9ja0NvbXBhcmlz
b246Okxlc3NUaGFuRXF1YWxzOworCisgICAgICAgIE5TU3RyaW5nICpjb21tYW5kU3RyaW5nID0g
W2Jsb2NrRGF0YSBvYmplY3RGb3JLZXk6QCJDb21tYW5kIl07CisgICAgICAgIEJsb2NrQ29tbWFu
ZCBjb21tYW5kID0gQmxvY2tDb21tYW5kOjpBbGxvdzsKKyAgICAgICAgaWYgKFtjb21tYW5kU3Ry
aW5nIGlzRXF1YWxUb1N0cmluZzpAIkJsb2NrIl0pCisgICAgICAgICAgICBjb21tYW5kID0gQmxv
Y2tDb21tYW5kOjpCbG9jazsKKyAgICAgICAgZWxzZSBpZiAoW2NvbW1hbmRTdHJpbmcgaXNFcXVh
bFRvU3RyaW5nOkAiU3VnZ2VzdEJsb2NraW5nIl0pCisgICAgICAgICAgICBjb21tYW5kID0gQmxv
Y2tDb21tYW5kOjpTdWdnZXN0QmxvY2tpbmc7CisKKyAgICAgICAgaWYgKG1hdGNoZXNHUFUocmVu
ZGVyZXJJZCwgZ3B1TWFzaykgJiYgbWF0Y2hlc0J1aWxkSW5mbyhidWlsZEluZm8sIGJsb2NrZWRC
dWlsZEluZm8sIGNvbXBhcmlzb24pKSB7CisgICAgICAgICAgICBnbG9iYWxDb21tYW5kID0gY29t
bWFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFz
dXBwb3J0c1NlcGFyYXRlQWRkcmVzc1NwYWNlICYmIGdsb2JhbENvbW1hbmQgPT0gQmxvY2tDb21t
YW5kOjpBbGxvdykKKyAgICAgICAgZ2xvYmFsQ29tbWFuZCA9IEJsb2NrQ29tbWFuZDo6U3VnZ2Vz
dEJsb2NraW5nOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTEJsYWNrbGlzdD4o
bmV3IFdlYkdMQmxhY2tsaXN0KGdsb2JhbENvbW1hbmQpKTsKK30KKworYm9vbCBXZWJHTEJsYWNr
bGlzdDo6c2hvdWxkQmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1hbmQgPT0gQmxv
Y2tDb21tYW5kOjpCbG9jazsKK30KKworYm9vbCBXZWJHTEJsYWNrbGlzdDo6c2hvdWxkU3VnZ2Vz
dEJsb2NraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tYW5kID09IEJsb2NrQ29tbWFu
ZDo6U3VnZ2VzdEJsb2NraW5nOworfQorCitXZWJHTEJsYWNrbGlzdDo6V2ViR0xCbGFja2xpc3Qo
QmxvY2tDb21tYW5kIGNvbW1hbmQpCisgICAgOiBtX2NvbW1hbmQoY29tbWFuZCkKK3sKK30KKwor
V2ViR0xCbGFja2xpc3Q6On5XZWJHTEJsYWNrbGlzdCgpCit7Cit9CisKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVzU1BJLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY2YvQ0ZVdGlsaXRpZXNTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNTY4NmI0YzIzMjhhYmEzM2JkODczYjQ4NjAwODQzODg1NmFkZGFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVzU1BJLmgK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKworI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlByaXYuaD4KKyNlbmRpZgorCitleHRl
cm4gIkMiIHsKK0NGRGljdGlvbmFyeVJlZiBfQ0ZDb3B5U3lzdGVtVmVyc2lvbkRpY3Rpb25hcnko
dm9pZCk7CitleHRlcm4gY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN5c3RlbVZlcnNpb25Qcm9kdWN0
VmVyc2lvbktleTsKK2V4dGVybiBjb25zdCBDRlN0cmluZ1JlZiBfa0NGU3lzdGVtVmVyc2lvbkJ1
aWxkVmVyc2lvbktleTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggZWNmMmY1MDE1NmFkMmRmZTE1
YjRmNGFkMjFkZmM5N2YwM2FmMjZjZC4uMmUwN2JjNDc5NDg5ZTk1MTA1ZGVhY2ZmYWYzMTkyZTFk
NWZiYzY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTEwOCw2ICsxMDgsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9OU1VSTERvd25sb2FkU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVVJMRmlsZVR5
cGVNYXBwaW5nc1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkJsYWNrbGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5WaWV3QmFzZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgpAQCAtMTE4LDYgKzExOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdWJyZXNvdXJjZUxvYWRlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJH
TEJsYWNrbGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUVs
ZW1lbnQuaD4KQEAgLTE4OTAsNiArMTg5MiwxNyBAQCBwcml2YXRlOgogCiAjZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKK3N0YXRpYyBib29sIHNob3VsZEJsb2NrUGx1Z2lu
KFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlKQoreworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBhdXRvIGxvYWRQb2xpY3kgPSBQbHVnaW5CbGFja2xpc3Q6OmxvYWRQb2xpY3lGb3JQ
bHVnaW5WZXJzaW9uKHBsdWdpblBhY2thZ2UuYnVuZGxlSWRlbnRpZmllciwgcGx1Z2luUGFja2Fn
ZS5idW5kbGVWZXJzaW9uKTsKKyAgICByZXR1cm4gbG9hZFBvbGljeSA9PSBQbHVnaW5CbGFja2xp
c3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0eSB8fCBsb2FkUG9saWN5ID09IFBsdWdp
bkJsYWNrbGlzdDo6TG9hZFBvbGljeTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShwbHVnaW5QYWNrYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwogUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdp
bihjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
VVJMJiB1cmwsCiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBs
b2FkTWFudWFsbHkpCiB7CkBAIC0xOTczLDcgKzE5ODYsNyBAQCBSZWZQdHI8V2lkZ2V0PiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxQ
bHVnSQogICAgIE5TVmlldyAqdmlldyA9IG5pbDsKIAogICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7
Ci0gICAgICAgIGlmIChXS1Nob3VsZEJsb2NrUGx1Z2luKFtwbHVnaW5QYWNrYWdlIGJ1bmRsZUlk
ZW50aWZpZXJdLCBbcGx1Z2luUGFja2FnZSBidW5kbGVWZXJzaW9uXSkpIHsKKyAgICAgICAgaWYg
KHNob3VsZEJsb2NrUGx1Z2luKHBsdWdpblBhY2thZ2UpKSB7CiAgICAgICAgICAgICBlcnJvckNv
ZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQbHVnSW5WZXJzaW9uOwogICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckVtYmVkZGVkT2JqZWN0PihlbGVtZW50LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQtPnJlbmRlcmVyKCkp
LnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNl
Y3VyZVBsdWdpblZlcnNpb24pOwpAQCAtMjA3OCw3ICsyMDkxLDcgQEAgUGFzc1JlZlB0cjxXaWRn
ZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmIHMKICAgICBpbnQgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JKYXZhVW5hdmFpbGFibGU7
CiAKICAgICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1Bs
dWdpbihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVu
ZGxlVmVyc2lvbl0pKSB7CisgICAgICAgIGlmIChzaG91bGRCbG9ja1BsdWdpbihwbHVnaW5QYWNr
YWdlKSkgewogICAgICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JCbG9ja2VkUGx1Z0lu
VmVyc2lvbjsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4oZWxlbWVu
dC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KCplbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKQEAgLTIxMjYs
MTQgKzIxMzksMjMgQEAgU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlh
VHlwZSgpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCitzdGF0aWMgYm9vbCBzaG91bGRC
bG9ja1dlYkdMKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFdlYkdMQmxhY2ts
aXN0OjpzaG91bGRCbG9ja1dlYkdMKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCiBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Ondl
YkdMUG9saWN5Rm9yVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdLU2hv
dWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0aW9uIDogV2ViR0xBbGxvd0NyZWF0aW9u
OworICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkgPyBXZWJHTEJsb2NrQ3JlYXRpb24gOiBX
ZWJHTEFsbG93Q3JlYXRpb247CiB9CiAKIFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFdLU2hvdWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0
aW9uIDogV2ViR0xBbGxvd0NyZWF0aW9uOworICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkg
PyBXZWJHTEJsb2NrQ3JlYXRpb24gOiBXZWJHTEFsbG93Q3JlYXRpb247CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0KaW5kZXgg
NDM5MzY5MWNhMWYwMDJmNzcwMDdiMjc4MTIyZTgyNzIwMzZjZjllZC4uNWVjODQyNDk1OWNiYzE5
Mjg4NmZhNzVhYmYwM2YzZDg4NWJjYjFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlv
bk1hYy5tbQpAQCAtMzIsNyArMzIsOSBAQAogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0
ICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBv
cnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5CbGFj
a2xpc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCkBAIC00MSw3ICs0Myw3IEBAIHZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1h
dGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEFQSTo6RGljCiAgICAgbWFwLnNl
dChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSwgQVBJOjpTdHJpbmc6OmNy
ZWF0ZShwbHVnaW4uYnVuZGxlSWRlbnRpZmllcikpOwogICAgIG1hcC5zZXQocGx1Z2luSW5mb3Jt
YXRpb25CdW5kbGVWZXJzaW9uS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnZlcnNp
b25TdHJpbmcpKTsKICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJz
aW9uS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnNob3J0VmVyc2lvblN0cmluZykp
OwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJz
aW9uSXNLbm93bkF2YWlsYWJsZUtleSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0ZShXS0lzUGx1Z2lu
VXBkYXRlQXZhaWxhYmxlKG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcocGx1Z2luLmJ1bmRsZUlk
ZW50aWZpZXIpKSkpOworICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFz
dEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0
ZShXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6OmlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlKG5zU3Ry
aW5nRnJvbVdlYkNvcmVTdHJpbmcocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKSkpOwogICAgIG1h
cC5zZXQocGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94UHJvZmlsZUtleSgpLCBBUEk6OkJvb2xl
YW46OmNyZWF0ZShwbHVnaW4uaGFzU2FuZGJveFByb2ZpbGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxlSW5mby5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxlSW5mby5oCmluZGV4IGNiYzE4NzYw
YTVkNzQ1YTIyZDBlOTBkMjNmOTk1ZTFkODJjNzg5YjguLmU1MzYwZjhkNDdjNTYyNjZkMGM4OTQ2
ZjQ2NmE0MmE3MmFmNjBkM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL1BsdWdpbk1vZHVsZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9QbHVnaW5Nb2R1bGVJbmZvLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFBsdWdpbk1vZHVsZUluZm9faAotI2Rl
ZmluZSBQbHVnaW5Nb2R1bGVJbmZvX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbHVnaW5EYXRhLmg+CiAKQEAgLTYzLDUgKzYyLDMgQEAgc3RydWN0IFBsdWdpbk1vZHVsZUlu
Zm8gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQbHVnaW5Nb2R1
bGVJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMv
V0tDb250ZXh0UHJpdmF0ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9t
YWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbQppbmRleCBiMjU4NjMyMDQ3NjJiMmQ4MTU1NDkyZjMz
OTY1OTNiNGQ0ZDhlYTlhLi4yMzI2MWJiYTIwZTU5MzlhODU2NzYxYzM5MThkODlkMDViODhmMjc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4
dFByaXZhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL21hYy9X
S0NvbnRleHRQcml2YXRlTWFjLm1tCkBAIC0zOCw3ICszOCw3IEBACiAjaW1wb3J0ICJXS1NoYXJl
ZEFQSUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQ
b29sLmgiCi0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvV2ViR0xCbGFja2xpc3QuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKQEAgLTQ4LDcgKzQ4LDcgQEAgYm9vbCBXS0NvbnRleHRJc1BsdWdJ
blVwZGF0ZUF2YWlsYWJsZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgcGx1
Z0kKICNpZiBQTEFURk9STShJT1MpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1
cm4gV0tJc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSgoTlNTdHJpbmcgKilhZG9wdENGKFdLU3RyaW5n
Q29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBsdWdJbkJ1bmRsZUlkZW50aWZpZXJS
ZWYpKS5nZXQoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OlBsdWdpbkJsYWNrbGlzdDo6aXNQbHVn
aW5VcGRhdGVBdmFpbGFibGUoKE5TU3RyaW5nICopYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmlu
ZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwbHVnSW5CdW5kbGVJZGVudGlmaWVyUmVmKSkuZ2V0KCkp
OwogI2VuZGlmCiB9CiAKQEAgLTE1NiwxMCArMTU2LDEwIEBAIFdLU3RyaW5nUmVmIFdLUGx1Z0lu
SW5mb0lzU2FuZGJveGVkS2V5KCkKIAogYm9vbCBXS0NvbnRleHRTaG91bGRCbG9ja1dlYkdMKCkK
IHsKLSAgICByZXR1cm4gV0tTaG91bGRCbG9ja1dlYkdMKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OldlYkdMQmxhY2tsaXN0OjpzaG91bGRCbG9ja1dlYkdMKCk7CiB9CiAKIGJvb2wgV0tDb250ZXh0
U2hvdWxkU3VnZ2VzdEJsb2NrV2ViR0woKQogewotICAgIHJldHVybiBXS1Nob3VsZFN1Z2dlc3RC
bG9ja2luZ1dlYkdMKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91
bGRTdWdnZXN0QmxvY2tpbmdXZWJHTCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuaAppbmRleCAyNzkxYzk4ZjZlOTAwZjNhZTQ0
ZTZkMzlmZTgwNDIyMjcxMmRkYjAwLi4zMGFkYzAwNDkzMmJjMGViMTZlNzEyM2U1N2M5YWE1ODk3
NjdhOGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5JbmZvU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5JbmZvU3RvcmUuaApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQogCiAjaW5jbHVkZSAiUGx1Z2luTW9kdWxlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGx1Z2luQmxhY2tsaXN0Lmg+CiAKICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRhdGEuaD4K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdp
bkluZm9TdG9yZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9Q
bHVnaW5JbmZvU3RvcmVNYWMubW0KaW5kZXggOTYyMjc2NWU5MjJkMmJjNjEzMDUzNGM4NWVjYjVl
YWUyNTBlMzk3MS4uYTFiMDZiZDk1ODRjYWMyOThlYTQzOWZmMGNkYmEwMzk5MzQ2OWZiZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpbkluZm9T
dG9yZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1
Z2luSW5mb1N0b3JlTWFjLm1tCkBAIC0zMSw3ICszMSw3IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgi
CiAjaW1wb3J0ICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgogI2ltcG9ydCAiU2FuZGJveFV0aWxp
dGllcy5oIgotI2ltcG9ydCAiV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkJsYWNrbGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdF
eHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9IYXNoU2V0Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CkBAIC03Niw3ICs3Niw3IEBAIGJvb2wgUGx1Z2luSW5mb1N0b3JlOjpnZXRQbHVnaW5JbmZv
KGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYKIHN0YXRpYyBib29s
IHNob3VsZEJsb2NrUGx1Z2luKGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKIHsKICAg
ICBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IGxvYWRQb2xpY3kgPSBQbHVnaW5JbmZvU3RvcmU6OmRl
ZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKHBsdWdpbik7Ci0gICAgcmV0dXJuIChsb2FkUG9saWN5
ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eSkgfHwgKGxvYWRQb2xpY3kgPT0gUGx1
Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHkpOworICAgIHJldHVybiBsb2FkUG9saWN5
ID09IFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eSB8fCBsb2FkUG9saWN5ID09IFBsdWdp
bk1vZHVsZUJsb2NrZWRGb3JDb21wYXRpYmlsaXR5OwogfQogCiBib29sIFBsdWdpbkluZm9TdG9y
ZTo6c2hvdWxkVXNlUGx1Z2luKFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiYgYWxyZWFkeUxvYWRl
ZFBsdWdpbnMsIGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKQEAgLTEwOCwyNyArMTA4
LDE2IEBAIGJvb2wgUGx1Z2luSW5mb1N0b3JlOjpzaG91bGRVc2VQbHVnaW4oVmVjdG9yPFBsdWdp
bk1vZHVsZUluZm8+JiBhbHJlYWR5TG9hZGVkUGx1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlu
bGluZSBQbHVnaW5Nb2R1bGVMb2FkUG9saWN5IFdLUGx1Z0luTW9kdWxlTG9hZFBvbGljeVRvUGx1
Z2luTW9kdWxlTG9hZFBvbGljeShXS1BsdWdJbk1vZHVsZUxvYWRQb2xpY3kgd2tzaVBvbGljeSkK
LXsKLQotICAgIHN3aXRjaCAod2tzaVBvbGljeSkgewotICAgICAgICBjYXNlIFdLUGx1Z0luTW9k
dWxlTG9hZFBvbGljeUxvYWROb3JtYWxseToKLSAgICAgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1
bGVMb2FkTm9ybWFsbHk7Ci0gICAgICAgIGNhc2UgV0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5TG9h
ZFVuc2FuZGJveGVkOgotICAgICAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUxvYWRVbnNhbmRi
b3hlZDsKLSAgICAgICAgY2FzZSBXS1BsdWdJbk1vZHVsZUxvYWRQb2xpY3lCbG9ja2VkRm9yU2Vj
dXJpdHk6Ci0gICAgICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5
OwotICAgICAgICBjYXNlIFdLUGx1Z0luTW9kdWxlTG9hZFBvbGljeUJsb2NrZWRGb3JDb21wYXRp
YmlsaXR5OgotICAgICAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2NrZWRGb3JDb21wYXRp
YmlsaXR5OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBQ
bHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHk7Ci19Ci0KIFBsdWdpbk1vZHVsZUxvYWRQb2xp
Y3kgUGx1Z2luSW5mb1N0b3JlOjpkZWZhdWx0TG9hZFBvbGljeUZvclBsdWdpbihjb25zdCBQbHVn
aW5Nb2R1bGVJbmZvJiBwbHVnaW4pCiB7Ci0gICAgcmV0dXJuIFdLUGx1Z0luTW9kdWxlTG9hZFBv
bGljeVRvUGx1Z2luTW9kdWxlTG9hZFBvbGljeShXS0xvYWRQb2xpY3lGb3JQbHVnaW5WZXJzaW9u
KHBsdWdpbi5idW5kbGVJZGVudGlmaWVyLCBwbHVnaW4udmVyc2lvblN0cmluZykpOworICAgIHN3
aXRjaCAoUGx1Z2luQmxhY2tsaXN0Ojpsb2FkUG9saWN5Rm9yUGx1Z2luVmVyc2lvbihwbHVnaW4u
YnVuZGxlSWRlbnRpZmllciwgcGx1Z2luLnZlcnNpb25TdHJpbmcpKSB7CisgICAgY2FzZSBQbHVn
aW5CbGFja2xpc3Q6OkxvYWRQb2xpY3k6OkxvYWROb3JtYWxseToKKyAgICAgICAgcmV0dXJuIFBs
dWdpbk1vZHVsZUxvYWROb3JtYWxseTsKKyAgICBjYXNlIFBsdWdpbkJsYWNrbGlzdDo6TG9hZFBv
bGljeTo6QmxvY2tlZEZvclNlY3VyaXR5OgorICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlQmxv
Y2tlZEZvclNlY3VyaXR5OworICAgIGNhc2UgUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5OjpC
bG9ja2VkRm9yQ29tcGF0aWJpbGl0eToKKyAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVsZUJsb2Nr
ZWRGb3JDb21wYXRpYmlsaXR5OworICAgIH0KIH0KIAogUGx1Z2luTW9kdWxlSW5mbyBQbHVnaW5J
bmZvU3RvcmU6OmZpbmRQbHVnaW5XaXRoQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGJ1
bmRsZUlkZW50aWZpZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285980</attachid>
            <date>2016-08-12 16:56:22 -0700</date>
            <delta_ts>2016-08-13 15:25:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160831-20160812165443.patch</filename>
            <type>text/plain</type>
            <size>60264</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0NDE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzUzZTVlNzk4MmJjODFi
MWNmMmQxOTgxZGEzODhkYWI1ZWNjNDQ4Zi4uOWUxYjQxMjQ1ODlmZWNkYWY3MjhmNDk4MzAxYzdk
OThhOTViYzA2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE2LTA4LTEyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUgcGx1
Zy1pbiBhbmQgV2ViR0wgYmxhY2tsaXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpxdWV1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpCbGFja2xpc3RVcGRhdGVyOjpwbHVnaW5CbGFja2xpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QmxhY2tsaXN0VXBkYXRlcjo6d2ViR0xCbGFja2xpc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9CbGFja2xpc3RVcGRhdGVyLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlYWRCbGFja2xpc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OkJsYWNrbGlzdFVwZGF0ZXI6OmluaXRpYWxpemVRdWV1ZSk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
UGx1Z2luQmxhY2tsaXN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkJsYWNr
bGlzdDo6bG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luQmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5CbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFj
a2xpc3Q6On5QbHVnaW5CbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2ts
aXN0OjpzcGxpdE9TVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OmxvYWRQb2xpY3lGb3JQbHVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQmxhY2tsaXN0
Ojppc1VwZGF0ZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6
OlBsdWdpbkJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkdMQmxhY2tsaXN0
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJHTEJsYWNrbGlzdC5tbTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6T1NCdWlsZEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6T1NCdWlsZEluZm86Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6
T1NCdWlsZEluZm86Om9wZXJhdG9yPik6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6
b3BlcmF0b3I8PSk6CisgICAgICAgIChXZWJDb3JlOjpPU0J1aWxkSW5mbzo6b3BlcmF0b3I8KToK
KyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5mb0Zyb21PU0J1aWxkU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRCbG9ja1dlYkdMKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQmxhY2tsaXN0OjpzaG91bGRTdWdnZXN0QmxvY2tpbmdXZWJHTCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXRjaGVzR1BVKToKKyAgICAgICAgKFdlYkNvcmU6OmdwdU1hc2tGcm9t
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNCdWlsZEluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEJsYWNrbGlzdDo6c2hvdWxkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xp
c3Q6OnNob3VsZFN1Z2dlc3RCbG9ja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJsYWNr
bGlzdDo6V2ViR0xCbGFja2xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCbGFja2xpc3Q6
On5XZWJHTEJsYWNrbGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVz
U1BJLmg6IEFkZGVkLgorCiAyMDE2LTA4LTEyICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA0NDA0Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCmluZGV4IGNjNjA2NWFkZTdmYmNhOTQxZDQ3MmM4MDUzNDUyNzg4YWY1ODU3
ZjcuLmQ4MjdiNGViNTMxZTkwODZlODI3Yjk2OTUzNWNiNDgyMzI3NGMzY2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0wOC0xMiAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJs
YWNrbGlzdCBjb2RlIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MDgzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkb3B0IHRoZSBwbHVnLWluIGFuZCBXZWJHTCBibGFja2xpc3QgY29k
ZSBmcm9tIFdlYkNvcmUgaW5zdGVhZCBvZiB1c2luZyB0aGUgY29kZSBmcm9tIFdlYktpdFN5c3Rl
bUludGVyZmFjZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tOgorICAgICAgICAoc2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldCk6CisgICAgICAgIChzaG91bGRCbG9ja1dlYkdMKToK
KyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp3ZWJHTFBvbGljeUZvclVSTCk6CisgICAg
ICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKToKKwog
MjAxNi0wOC0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
Z3Jlc3Npb24ocjIwNDI2OCk6IE1haWwgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBjb21wb3NlIGFu
IGVtYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggZmZmYzljYTczZTVmYzc0ZWI2OTUyZGEwNjJhOGFlNjZiYWNj
MjUwOS4uYjhlOWFlMzNhZDU2M2U2MDNhNTg5ZDdkODkxY2Q0Y2JlYWQzMWVmZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE2LTA4LTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNj
YUBhcHBsZS5jb20+CiAKKyAgICAgICAgTW92ZSB0aGUgcGx1Zy1pbiBhbmQgV2ViR0wgYmxhY2ts
aXN0IGNvZGUgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwODMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRvcHQgdGhlIHBsdWctaW4gYW5kIFdlYkdMIGJsYWNrbGlzdCBjb2RlIGZy
b20gV2ViQ29yZSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBjb2RlIGZyb20gV2ViS2l0U3lzdGVtSW50
ZXJmYWNlLgorCisgICAgICAgICogU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbklu
Zm9ybWF0aW9uTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpnZXRQbGF0Zm9ybVBsdWdpbk1vZHVs
ZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBTaGFyZWQvUGx1Z2lucy9QbHVnaW5Nb2R1bGVJbmZv
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1t
OgorICAgICAgICAoV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUpOgorICAgICAgICAo
V0tDb250ZXh0U2hvdWxkQmxvY2tXZWJHTCk6CisgICAgICAgIChXS0NvbnRleHRTaG91bGRTdWdn
ZXN0QmxvY2tXZWJHTCk6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpbkluZm9TdG9yZU1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6c2hvdWxkQmxvY2tQbHVnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKToKKyAgICAg
ICAgKFdlYktpdDo6V0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5VG9QbHVnaW5Nb2R1bGVMb2FkUG9s
aWN5KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKToKKworMjAxNi0wOC0xMiAg
QW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCiAgICAgICAgIG1lc3NhZ2Ug
bG9hZGluZyBuZXZlciBmaW5pc2hlcyBpbiBNYWlsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4MDYKICAgICAgICAgcmRhcjovL3Byb2JsZW0vMjc2
MjQwOTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA3NzQ3MDA4MzY3ZmU2NTBkYjg2ZGU0ZDA5MThjYTE0NDljOGE5N2M2Li45MGY2
ZGUyN2Y4ZTI5MDNiYjczMGJmZDUzNTVmZDgyNGQwOGYyNzhiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIwLDYgKzEwMjAs
MTIgQEAKIAkJMUFGOEUxQzMxMjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGOEUxQzEx
MjU2NzNFMDAwMjMwRkY3IC8qIFByb3h5U2VydmVyQ0ZOZXQuY3BwICovOyB9OwogCQkxQUZFMTE5
OTBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkUxMTk3MENCRkZDQzQwMDMw
MTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuY3BwICovOyB9OwogCQkxQUZFMTE5QTBDQkZG
Q0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyog
SlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CisJCTFBRkZDNDUzMUQ1RTgxQzQwMDI2N0E2
NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5t
bSAqLzsgfTsKKwkJMUFGRkM0NTQxRDVFODFDQjAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0ZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZGQzQ0
RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRlci5tbSAqLzsgfTsKKwkJMUFGRkM0
NTUxRDVFODFEMDAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRkZDNDUwMUQ1RTdFQzcwMDI2N0E2NiAv
KiBQbHVnaW5CbGFja2xpc3QubW0gKi87IH07CisJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAv
KiBDRlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmggKi87
IH07CisJCTFBRkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFGRkM0NTExRDVFN0VD
NzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMUFGRkM0NTkxRDVFODY2MTAwMjY3QTY2IC8qIFBsdWdp
bkJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFCMTI0RDhEMUQzODBC
NzAwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRp
YVNhbXBsZUFWRk9iakMuaCAqLzsgfTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1l
ZGlhU2FtcGxlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMu
bW0gKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcxODFF
RDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNDcsNiArODI1MywxMyBAQAogCQkxQUY4RTFDMTEy
NTY3M0UwMDAyMzBGRjcgLyogUHJveHlTZXJ2ZXJDRk5ldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVNlcnZlckNGTmV0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUFGRTExOTcwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUZFMTE5
ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ0RDFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0
VXBkYXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbGFja2xpc3RVcGRh
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBRkZDNDRFMUQ1RTdFQzcwMDI2
N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQmxhY2tsaXN0VXBkYXRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUFGRkM0NEYxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJsYWNrbGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5CbGFja2xpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTAxRDVFN0VDNzAwMjY3QTY2IC8qIFBsdWdpbkJs
YWNrbGlzdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsdWdp
bkJsYWNrbGlzdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFGRkM0NTExRDVF
N0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFBRkZDNDUyMUQ1RTdFQzcwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdMQmxhY2tsaXN0Lm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQUZGQzQ1NjFENUU4M0E3MDAyNjdBNjYgLyogQ0ZVdGls
aXRpZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0ZVdGlsaXRpZXNT
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMxRDM4MEI3MDAwRUNE
RkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2FtcGxlQVZGT2JqQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAg
LyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRleHRCb3hTdHlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTUxMiw4ICsxMTUyNSw4IEBACiAJ
CTlCRDRFOTE4MUM0NjJDRkMwMDUwNjVCQyAvKiBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEN1c3RvbUVsZW1lbnRzUmVnaXN0
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ0RTkxOTFDNDYyQ0ZDMDA1
MDY1QkMgLyogQ3VzdG9tRWxlbWVudHNSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDdXN0b21FbGVtZW50c1JlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTlCRDhBOTU5MThCRUZDNzYwMDk4N0U5QSAvKiBDb2xsZWN0aW9uSW5kZXhDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xsZWN0aW9uSW5k
ZXhDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTlCRTY3MTA5MUQ1QUVC
MDQwMDM0NTUxNCAvKiBKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgcGF0
aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuY3BwIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdp
c3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0N1c3RvbUVsZW1lbnRz
UmVnaXN0cnkuaDsgcGF0aCA9ICJKU0N1c3RvbUVsZW1lbnRzUmVnaXN0cnkuaCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCRTY3MTA5MUQ1QUVCMDQwMDM0NTUxNCAvKiBKU0N1c3Rv
bUVsZW1lbnRzUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNDdXN0b21FbGVtZW50c1JlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOUJFNjcxMEExRDVBRUIwNDAwMzQ1NTE0IC8qIEpTQ3VzdG9tRWxlbWVudHNSZWdpc3Ry
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUVsZW1lbnRzUmVn
aXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJGOUE4N0UxNjQ4REQyRjAw
MUM2QjIzIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRjlBODdGMTY0OEREMkYwMDFDNkIyMyAv
KiBKU0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOUQ2MzgwMEYxQUYxNkUxNjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTZWxmQWxp
Z25tZW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc3MTQsNiArMTc3
MjcsNyBAQAogCQkJCTY1MDg2REE3MTlBQzE3MTkwMDlBRjQ2QiAvKiBDRkxvY2FsZVNQSS5oICov
LAogCQkJCUExMEQ3RkVCMUMyNjc2RDEwMEM2QzExNSAvKiBDRk5ldHdvcmtDb25uZWN0aW9uQ2Fj
aGVTUEkuaCAqLywKIAkJCQlDRTEyNTI1QTFBMUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3b3JrU1BJ
LmggKi8sCisJCQkJMUFGRkM0NTYxRDVFODNBNzAwMjY3QTY2IC8qIENGVXRpbGl0aWVzU1BJLmgg
Ki8sCiAJCQkJNDQ0OUE0MDQxQTk2NEIwMDAwQjY0QUQ1IC8qIENvcmVNZWRpYVNQSS5oICovLAog
CQkJKTsKIAkJCXBhdGggPSBjZjsKQEAgLTE4MDAwLDYgKzE4MDE0LDggQEAKIAkJNjU4MkExNDgw
OTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMUFGRkM0NEQxRDVFN0VDNzAwMjY3QTY2IC8qIEJsYWNrbGlzdFVwZGF0
ZXIuaCAqLywKKwkJCQkxQUZGQzQ0RTFENUU3RUM3MDAyNjdBNjYgLyogQmxhY2tsaXN0VXBkYXRl
ci5tbSAqLywKIAkJCQlGNTg3ODRGMDAyREUzNzU5MDFFQTQxMjIgLyogQ3Vyc29yTWFjLm1tICov
LAogCQkJCUE3OTU0NjNEMEI1QzRDODAwMDdCNDM4RiAvKiBEcmFnRGF0YU1hYy5tbSAqLywKIAkJ
CQlBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tICovLApAQCAtMTgw
MjUsNiArMTgwNDEsOCBAQAogCQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBs
YXRmb3JtU2NyZWVuTWFjLm1tICovLAogCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tICovLAorCQkJCTFBRkZDNDRGMUQ1RTdFQzcw
MDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCAqLywKKwkJCQkxQUZGQzQ1MDFENUU3RUM3MDAy
NjdBNjYgLyogUGx1Z2luQmxhY2tsaXN0Lm1tICovLAogCQkJCTQ2MzQ1OTJCMUFDMjI3MTAwMEVD
QjcxQyAvKiBQb3dlck9ic2VydmVyTWFjLmNwcCAqLywKIAkJCQk0NkRCQjY0RTFBQjhDOTZGMDBE
OUE4MTMgLyogUG93ZXJPYnNlcnZlck1hYy5oICovLAogCQkJCTAwODFGRUZFMTZCMEEyQjYwMDhB
QUE3QSAvKiBQdWJsaWNTdWZmaXhNYWMubW0gKi8sCkBAIC0xODA2NCw2ICsxODA4Miw4IEBACiAJ
CQkJOTNFQjE2OTQwOUY4ODBCMDAwOTFGOEZGIC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2UubW0g
Ki8sCiAJCQkJQkU4NTVGN0YwNzAxRTgzNTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3LmggKi8sCiAJ
CQkJQkU4NTYwNTEwNzAxRjkxMTAwMjM5NzY5IC8qIFdlYkNvcmVWaWV3Lm0gKi8sCisJCQkJMUFG
RkM0NTExRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0LmggKi8sCisJCQkJMUFGRkM0
NTIxRDVFN0VDNzAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tICovLAogCQkJCUUxQTMxNjJC
MTM0QkMzMkQwMDdDOUE0RiAvKiBXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCAqLywKIAkJ
CQlFMUEzMTYyQzEzNEJDMzJEMDA3QzlBNEYgLyogV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
Lm1tICovLAogCQkJCUNENTg5NkUwMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5oICovLApAQCAtMjI1MzAsOCArMjI1NTAsNiBAQAogCQlCQ0YxQTVCQTA5Nzgz
MjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCTVDNkU2NTNGMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuY3Bw
ICovLAotCQkJCTVDNkU2NTQwMUQ1Q0VEQzkwMEY3ODYyRSAvKiBVUkxQYXJzZXIuaCAqLywKIAkJ
CQk0OUU5MTJBNDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2MDQw
MTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYx
MkQgLyogY2YgKi8sCkBAIC0yMjcwNSw2ICsyMjcyMyw4IEBACiAJCQkJNjU5MzkyMzUwOUFFNDM0
NjAwMkM1MzFGIC8qIFVSTC5jcHAgKi8sCiAJCQkJNjU5MzkyMzYwOUFFNDM0NjAwMkM1MzFGIC8q
IFVSTC5oICovLAogCQkJCUJDQkQyMUFBMEU0MTdBRDQwMEEwNzBGMiAvKiBVUkxIYXNoLmggKi8s
CisJCQkJNUM2RTY1M0YxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5jcHAgKi8sCisJCQkJ
NUM2RTY1NDAxRDVDRURDOTAwRjc4NjJFIC8qIFVSTFBhcnNlci5oICovLAogCQkJCTg2ODE2MEQx
MTg3NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuY3BwICovLAogCQkJCTg2ODE2MEQyMTg3
NjY5QzQwMDIxRTc5RCAvKiBVc2VyQWN0aXZpdHkuaCAqLywKIAkJCQk3MUM5MTYwNzFEMTQ4M0Ez
MDBBQ0E0N0QgLyogVXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbi5oICovLApAQCAtMjQ4NTks
NiArMjQ4NzksNyBAQAogCQkJCTA3MDM2M0U2MTgxQTFDREMwMEMwNzRBNSAvKiBBVlZpZGVvQ2Fw
dHVyZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ1QzIzMUUxOTk1QjczQjAwQTZFMkUz
IC8qIEF4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyMzgw
RkJCOUMxRDAwNTEwMjkzIC8qIEFYT2JqZWN0Q2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU5MUQ1RTg2NjEwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkxQzlGMkY5MUFFM0JFQjAwMDk1QjYxQyAvKiBBWFRleHRTdGF0ZUNoYW5nZUludGVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMEYwQjA3MjU5QTAwRUQ0NDJDIC8qIEJhY2tG
b3J3YXJkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0E4QzgxRTExRTNEMzY5MDA4MTJG
QjcgLyogQmFja0ZvcndhcmRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzA5LDYg
KzI1MzMwLDcgQEAKIAkJCQlBODE4NUYzOTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1l
bnRXcml0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUEzN0FEMDk3QzcxNUYwMDE5RjNEOCAv
KiBET00uaCBpbiBIZWFkZXJzICovLAorCQkJCTFBRkZDNDU3MUQ1RTgzQTcwMDI2N0E2NiAvKiBD
RlV0aWxpdGllc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUzOEYwMTkwQUQ3MThEODAwNkE4
MUQxIC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5OTgxMkUwREJF
ODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTM4RjAxQjBBRDcxOEQ4MDA2QTgxRDEgLyogRE9NQWJzdHJhY3RWaWV3SW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLApAQCAtMjc0NzYsNiArMjc0OTgsNyBAQAogCQkJCTkzQzM4QzAzMTY0NDcz
REQwMDA5MUVCMiAvKiBTY3JvbGxpbmdUcmVlRml4ZWROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBM0U4ODE5MUIzQkQ3MDAwRjFCNTUgLyogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNEU0MTExODdGODJFMTAwNDU4ODJDIC8qIFNj
cm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTFB
RkZDNDU4MUQ1RTg2NTUwMDI2N0E2NiAvKiBXZWJHTEJsYWNrbGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNDNEE0MTUxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9s
bGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzRFNDEwMTg3RjgyRTEwMDQ1ODgy
QyAvKiBTY3JvbGxpbmdUcmVlSU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1ODA2NDE5MzI3
QTYyMDBERTMyRUIgLyogU2Nyb2xsaW5nVHJlZU1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTYw
Nyw2ICsyOTYzMCw3IEBACiAJCQkJQTg3MURCMjYwQTE1MEJENjAwQjEyQTY4IC8qIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2NjgxN0ZBMTY2RkU2RDcw
MEZBMDdCNCAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MTM2OUQ3MDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFBRkZDNDU1MUQ1RTgxRDAwMDI2N0E2NiAvKiBQbHVnaW5CbGFja2xpc3Qu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5QkM2QzIxQzEzQ0NDOTdCMDA4RTAzMzcgLyogSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMwNTE5OTUxQkIw
RjExMDAwRjM3NzJFIC8qIEhUTUxUaW1lRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
ODcxREMyOTBBMTUyMDU3MDBCMTJBNjggLyogSFRNTFRpdGxlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTMwNzE2LDYgKzMwNzQwLDcgQEAKIAkJCQk4NTRGRTczNDBBMjI5N0JFMDA1OEQ3
QUQgLyogTm9kZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGRkMwMjJCMTY0M0I3
MTAwMDRFMTYzOCAvKiBOb2RlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQzMTA1
QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMUFGRkM0NTMxRDVFODFDNDAwMjY3QTY2IC8qIFdlYkdMQmxhY2tsaXN0Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzM1MDNDQzcxMDE3QTFCMTAwM0I0N0UxIC8qIE5vdGlmaWNhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMzkwQ0E1NTBGRkMxNTdCMDA5MjE5NjIgLyogTm90aWZpY2F0
aW9uQ2VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMjhDQTY4MTQ3MzMxNTIwMDc0Qzcy
QSAvKiBOb3RpZmljYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE0MDcs
NiArMzE0MzIsNyBAQAogCQkJCUIyMjI3QTQzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNYXJrZXJF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTQ2MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E0QTBEMDBCRjIy
MDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFB
RkZDNDU0MUQ1RTgxQ0IwMDI2N0E2NiAvKiBCbGFja2xpc3RVcGRhdGVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR01pc3NpbmdHbHlwaEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEQwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R01QYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODMzQzdDQTBBMkNGMDZCMDBE
NTc2NjQgLyogU1ZHTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzFmMjYwNGZhMWY4
ZWNkMDZmNDMwMmVhNGE5YzUxM2E1ZDQ4OTM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlzdFVwZGF0ZXIuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2lt
cG9ydCA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQbHVnaW5CbGFja2xpc3Q7CitjbGFzcyBXZWJHTEJsYWNrbGlzdDsKKworY2xhc3MgQmxhY2ts
aXN0VXBkYXRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVF1ZXVlKCk7
CisgICAgc3RhdGljIHZvaWQgcmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAgIHN0YXRpYyBkaXNw
YXRjaF9xdWV1ZV90IHF1ZXVlKCkgeyByZXR1cm4gc19xdWV1ZTsgfQorICAgIHN0YXRpYyBQbHVn
aW5CbGFja2xpc3QqIHBsdWdpbkJsYWNrbGlzdCgpIHsgcmV0dXJuIHNfcGx1Z2luQmxhY2tsaXN0
OyB9CisgICAgc3RhdGljIFdlYkdMQmxhY2tsaXN0KiB3ZWJHTEJsYWNrbGlzdCgpIHsgcmV0dXJu
IHNfd2ViR0xCbGFja2xpc3Q7IH07CisKK3ByaXZhdGU6CisKKyAgICBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpyZWFkQmxhY2tsaXN0RGF0YSgpOworCisgICAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3Qg
c19xdWV1ZTsKKyAgICBzdGF0aWMgUGx1Z2luQmxhY2tsaXN0KiBzX3BsdWdpbkJsYWNrbGlzdDsK
KyAgICBzdGF0aWMgV2ViR0xCbGFja2xpc3QqIHNfd2ViR0xCbGFja2xpc3Q7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlz
dFVwZGF0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQmxhY2tsaXN0VXBkYXRl
ci5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZTczOGMxY2EyNTM0NTViNDhmNDNiMTg5OGMxOWM2ZDMyZTI5YTMy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0JsYWNrbGlz
dFVwZGF0ZXIubW0KQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorI2ltcG9ydCAiQmxhY2tsaXN0VXBkYXRlci5oIgorCisjaWYgUExBVEZPUk0o
TUFDKQorCisjaW1wb3J0ICJQbHVnaW5CbGFja2xpc3QuaCIKKyNpbXBvcnQgIldlYkdMQmxhY2ts
aXN0LmgiCisjaW1wb3J0IDxzeXMvc3RhdC5oPgorI2ltcG9ydCA8c3lzL3RpbWUuaD4KKyNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKworLy8gVGhlIHRpbWUgYWZ0ZXIgd2hpY2ggd2UnbGwgY2hl
Y2sgdGhlIGJsYWNrbGlzdCBkYXRhLgorc3RhdGljIHRpbWVfdCBibGFja2xpc3ROZXh0Q2hlY2tU
aW1lOworCisvLyBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHdlJ2xsIGNoZWNrIGlmIHRo
ZSBibGFja2xpc3QgZGF0YSBoYXMgY2hhbmdlZC4KK2NvbnN0IHRpbWVfdCBibGFja2xpc3RDaGVj
a1RpbWVJbnRlcnZhbCA9IDYwICogMTA7CisKKy8vIFRoZSB0aW1lIHdoZW4gd2UgbGFzdCByZS1w
YXJzZWQgdGhlIGJsYWNrbGlzdCBmaWxlLgorc3RhdGljIHRpbWVfdCBibGFja2xpc3RVcGRhdGVU
aW1lOworCisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDExMDAKK05T
U3RyaW5nICogY29uc3QgYmxhY2tsaXN0UGF0aCA9IEAiL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2
aWNlcy9YUHJvdGVjdC5idW5kbGUvQ29udGVudHMvUmVzb3VyY2VzL1hQcm90ZWN0Lm1ldGEucGxp
c3QiOworI2Vsc2UKK05TU3RyaW5nICogY29uc3QgYmxhY2tsaXN0UGF0aCA9IEAiL1N5c3RlbS9M
aWJyYXJ5L0NvcmVTZXJ2aWNlcy9Db3JlVHlwZXMuYnVuZGxlL0NvbnRlbnRzL1Jlc291cmNlcy9Y
UHJvdGVjdC5tZXRhLnBsaXN0IjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Rp
c3BhdGNoX3F1ZXVlX3QgQmxhY2tsaXN0VXBkYXRlcjo6c19xdWV1ZTsKKworUGx1Z2luQmxhY2ts
aXN0KiBCbGFja2xpc3RVcGRhdGVyOjpzX3BsdWdpbkJsYWNrbGlzdCA9IG51bGxwdHI7CitXZWJH
TEJsYWNrbGlzdCogQmxhY2tsaXN0VXBkYXRlcjo6c193ZWJHTEJsYWNrbGlzdCA9IG51bGxwdHI7
CisKK05TRGljdGlvbmFyeSAqIEJsYWNrbGlzdFVwZGF0ZXI6OnJlYWRCbGFja2xpc3REYXRhKCkK
K3sKKyAgICBOU0RhdGEgKmRhdGEgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZkZpbGU6Ymxh
Y2tsaXN0UGF0aF07CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
cmV0dXJuIGR5bmFtaWNfb2JqY19jYXN0PE5TRGljdGlvbmFyeT4oW05TUHJvcGVydHlMaXN0U2Vy
aWFsaXphdGlvbiBwcm9wZXJ0eUxpc3RXaXRoRGF0YTpkYXRhIG9wdGlvbnM6TlNQcm9wZXJ0eUxp
c3RJbW11dGFibGUgZm9ybWF0Om51bGxwdHIgZXJyb3I6bnVsbHB0cl0pOworfQorCit2b2lkIEJs
YWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KCkKK3sKKyAgICBzdHJ1Y3QgdGltZXZh
bCB0aW1lVmFsOworICAgIGlmICghZ2V0dGltZW9mZGF5KCZ0aW1lVmFsLCBOVUxMKSkgeworICAg
ICAgICBpZiAodGltZVZhbC50dl9zZWMgPCBibGFja2xpc3ROZXh0Q2hlY2tUaW1lKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJsYWNrbGlzdE5leHRDaGVja1RpbWUgPSB0aW1l
VmFsLnR2X3NlYyArIGJsYWNrbGlzdENoZWNrVGltZUludGVydmFsOworCisgICAgc3RydWN0IHN0
YXQgc3RhdEJ1ZjsKKyAgICBpZiAoc3RhdChbYmxhY2tsaXN0UGF0aCBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb25dLCAmc3RhdEJ1ZikgPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
dGF0QnVmLnN0X210aW1lc3BlYy50dl9zZWMgPT0gYmxhY2tsaXN0VXBkYXRlVGltZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIE5TRGljdGlvbmFyeSAqcHJvcGVydHlMaXN0ID0gcmVhZEJsYWNrbGlz
dERhdGEoKTsKKyAgICBpZiAoIXByb3BlcnR5TGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHNfcGx1Z2luQmxhY2tsaXN0KSB7CisgICAgICAgIGRlbGV0ZSBzX3BsdWdpbkJsYWNrbGlz
dDsKKyAgICAgICAgc19wbHVnaW5CbGFja2xpc3QgPSAwOworICAgIH0KKworICAgIGlmIChzX3dl
YkdMQmxhY2tsaXN0KSB7CisgICAgICAgIGRlbGV0ZSBzX3dlYkdMQmxhY2tsaXN0OworICAgICAg
ICBzX3dlYkdMQmxhY2tsaXN0ID0gMDsKKyAgICB9CisKKyAgICBzX3BsdWdpbkJsYWNrbGlzdCA9
IFBsdWdpbkJsYWNrbGlzdDo6Y3JlYXRlKHByb3BlcnR5TGlzdCkucmVsZWFzZSgpOworICAgIHNf
d2ViR0xCbGFja2xpc3QgPSBXZWJHTEJsYWNrbGlzdDo6Y3JlYXRlKHByb3BlcnR5TGlzdCkucmVs
ZWFzZSgpOworCisgICAgYmxhY2tsaXN0VXBkYXRlVGltZSA9IHN0YXRCdWYuc3RfbXRpbWVzcGVj
LnR2X3NlYzsKK30KKwordm9pZCBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXplUXVldWUoKQor
eworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKKyAgICBkaXNwYXRjaF9vbmNlKCZv
bmNlLCBeeworICAgICAgICBzX3F1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJjb20uYXBw
bGUuV2ViS2l0LkJsYWNrbGlzdCIsIDApOworICAgIH0pOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg1MzY1ZmI3Yzg0MmI1NGRhZmU0OTgxNTJlZTc0ZGEyZmJiMDlkYjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0LmgKQEAgLTAs
MCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFURk9S
TShNQUMpCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKworT0JKQ19DTEFTUyBOU0FycmF5OworT0JKQ19DTEFTUyBOU0RpY3Rpb25hcnk7
CitPQkpDX0NMQVNTIE5TU2V0OworT0JKQ19DTEFTUyBOU1N0cmluZzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQbHVnaW5CbGFja2xpc3QgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgTG9hZFBvbGljeSB7CisgICAgICAgIExvYWROb3JtYWxseSwKKyAgICAgICAgQmxvY2tlZEZv
clNlY3VyaXR5LAorICAgICAgICBCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSwKKyAgICB9OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIExvYWRQb2xpY3kgbG9hZFBvbGljeUZvclBsdWdpblZl
cnNpb24oTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIsIE5TU3RyaW5nICpidW5kbGVWZXJzaW9u
U3RyaW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1BsdWdpblVwZGF0ZUF2
YWlsYWJsZShOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcik7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBsdWdpbkJsYWNrbGlzdD4gY3JlYXRlKE5TRGljdGlvbmFyeSAqKTsKKyAgICB+
UGx1Z2luQmxhY2tsaXN0KCk7CisKKyAgICBzdGF0aWMgTlNBcnJheSAqc3BsaXRPU1ZlcnNpb24o
TlNTdHJpbmcgKm9zVmVyc2lvbik7CisKKyAgICBMb2FkUG9saWN5IGxvYWRQb2xpY3lGb3JQbHVn
aW4oTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXIsIE5TU3RyaW5nICpidW5kbGVWZXJzaW9uU3Ry
aW5nKSBjb25zdDsKKyAgICBib29sIGlzVXBkYXRlQXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJ
ZGVudGlmaWVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5CbGFja2xpc3QoTlNEaWN0
aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIE5TRGljdGlvbmFyeSAqYnVu
ZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5ICpidW5kbGVJRFRv
QmxvY2tlZFZlcnNpb25zLCBOU1NldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMpOwor
CisgICAgTlNEaWN0aW9uYXJ5ICptX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbjsKKyAg
ICBOU0RpY3Rpb25hcnkgKm1fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbjsKKyAg
ICBOU0RpY3Rpb25hcnkgKm1fYnVuZGxlSURUb0Jsb2NrZWRWZXJzaW9uczsKKyAgICBOU1NldCAq
bV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlczsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGx1Z2luQmxhY2tsaXN0Lm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYmNjOTRmZGJiNGJmNmQ0NzM4MDZmMzU0NDJjODU0ZmQ2OGIwMzM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsdWdpbkJsYWNrbGlzdC5tbQpAQCAt
MCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJQbHVnaW5CbGFja2xpc3QuaCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2ltcG9ydCAi
QmxhY2tsaXN0VXBkYXRlci5oIgorI2ltcG9ydCAiQ0ZVdGlsaXRpZXNTUEkuaCIKKyNpbXBvcnQg
PHN5cy9zdGF0Lmg+CisjaW1wb3J0IDxzeXMvdGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkJsYWNrbGlzdDo6TG9hZFBvbGljeSBQbHVnaW5CbGFja2xpc3Q6OmxvYWRQb2xp
Y3lGb3JQbHVnaW5WZXJzaW9uKE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyLCBOU1N0cmluZyAq
YnVuZGxlVmVyc2lvblN0cmluZykKK3sKKyAgICBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXpl
UXVldWUoKTsKKworICAgIF9fYmxvY2sgUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9saWN5IGxvYWRQ
b2xpY3kgPSBMb2FkUG9saWN5OjpMb2FkTm9ybWFsbHk7CisgICAgZGlzcGF0Y2hfc3luYyhCbGFj
a2xpc3RVcGRhdGVyOjpxdWV1ZSgpLCBeeworICAgICAgICBCbGFja2xpc3RVcGRhdGVyOjpyZWxv
YWRJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIFBsdWdpbkJsYWNrbGlzdCogcGx1Z2luQmxhY2ts
aXN0ID0gQmxhY2tsaXN0VXBkYXRlcjo6cGx1Z2luQmxhY2tsaXN0KCk7CisgICAgICAgIGlmIChw
bHVnaW5CbGFja2xpc3QpCisgICAgICAgICAgICBsb2FkUG9saWN5ID0gcGx1Z2luQmxhY2tsaXN0
LT5sb2FkUG9saWN5Rm9yUGx1Z2luKGJ1bmRsZUlkZW50aWZpZXIsIGJ1bmRsZVZlcnNpb25TdHJp
bmcpOworICAgIH0pOworCisgICAgcmV0dXJuIGxvYWRQb2xpY3k7Cit9CisKK2Jvb2wgUGx1Z2lu
QmxhY2tsaXN0Ojppc1BsdWdpblVwZGF0ZUF2YWlsYWJsZShOU1N0cmluZyAqYnVuZGxlSWRlbnRp
ZmllcikKK3sKKyAgICBCbGFja2xpc3RVcGRhdGVyOjppbml0aWFsaXplUXVldWUoKTsKKworICAg
IF9fYmxvY2sgYm9vbCBpc1BsdWdpblVwZGF0ZUF2YWlsYWJsZSA9IGZhbHNlOworICAgIGRpc3Bh
dGNoX3N5bmMoQmxhY2tsaXN0VXBkYXRlcjo6cXVldWUoKSwgXnsKKyAgICAgICAgQmxhY2tsaXN0
VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAgICAgICBQbHVnaW5CbGFja2xpc3Qq
IHBsdWdpbkJsYWNrbGlzdCA9IEJsYWNrbGlzdFVwZGF0ZXI6OnBsdWdpbkJsYWNrbGlzdCgpOwor
ICAgICAgICBpZiAocGx1Z2luQmxhY2tsaXN0KQorICAgICAgICAgICAgaXNQbHVnaW5VcGRhdGVB
dmFpbGFibGUgPSBwbHVnaW5CbGFja2xpc3QtPmlzVXBkYXRlQXZhaWxhYmxlKGJ1bmRsZUlkZW50
aWZpZXIpOworICAgIH0pOworCisgICAgcmV0dXJuIGlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8UGx1Z2luQmxhY2tsaXN0PiBQbHVnaW5CbGFja2xpc3Q6OmNy
ZWF0ZShOU0RpY3Rpb25hcnkgKnByb3BlcnR5TGlzdCkKK3sKKyAgICBDRkRpY3Rpb25hcnlSZWYg
c3lzdGVtVmVyc2lvbkRpY3Rpb25hcnkgPSBfQ0ZDb3B5U3lzdGVtVmVyc2lvbkRpY3Rpb25hcnko
KTsKKyAgICBDRlN0cmluZ1JlZiBvc1ZlcnNpb24gPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3lzdGVtVmVyc2lvbkRpY3Rpb25hcnksIF9rQ0ZTeXN0ZW1W
ZXJzaW9uUHJvZHVjdFZlcnNpb25LZXkpKTsKKworICAgIE5TRGljdGlvbmFyeSAqZGljdGlvbmFy
eSA9IFtwcm9wZXJ0eUxpc3Qgb2JqZWN0Rm9yS2V5OkAiUGx1Z0luQmxhY2tsaXN0Il07CisKKyAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24gPSBb
TlNNdXRhYmxlRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uID0gW05TTXV0YWJsZURpY3Rpb25h
cnkgZGljdGlvbmFyeV07CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYnVuZGxlSURUb0Jsb2Nr
ZWRWZXJzaW9ucyA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOworICAgIE5TTXV0
YWJsZVNldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMgPSBbTlNNdXRhYmxlU2V0IHNl
dF07CisgICAgCisgICAgZm9yIChOU1N0cmluZyAqb3NWZXJzaW9uQ29tcG9uZW50IGluIHNwbGl0
T1NWZXJzaW9uKChOU1N0cmluZyAqKW9zVmVyc2lvbikpIHsKKyAgICAgICAgTlNEaWN0aW9uYXJ5
ICpidW5kbGVJRHMgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6b3NWZXJzaW9uQ29tcG9uZW50
XTsKKyAgICAgICAgaWYgKCFidW5kbGVJRHMpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBmb3IgKE5TU3RyaW5nICpidW5kbGVJRCBpbiBidW5kbGVJRHMpIHsKKyAgICAgICAgICAg
IE5TRGljdGlvbmFyeSAqdmVyc2lvbkluZm8gPSBbYnVuZGxlSURzIG9iamVjdEZvcktleTpidW5k
bGVJRF07CisgICAgICAgICAgICBhc3NlcnQodmVyc2lvbkluZm8pOworCisgICAgICAgICAgICBp
ZiAoIVt2ZXJzaW9uSW5mbyBpc0tpbmRPZkNsYXNzOltOU0RpY3Rpb25hcnkgY2xhc3NdXSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgW2J1bmRsZUlEVG9NaW5pbXVt
U2VjdXJlVmVyc2lvbiByZW1vdmVPYmplY3RGb3JLZXk6YnVuZGxlSURdOworICAgICAgICAgICAg
W2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gcmVtb3ZlT2JqZWN0Rm9yS2V5OmJ1
bmRsZUlEXTsKKyAgICAgICAgICAgIFtidW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zIHJlbW92ZU9i
amVjdEZvcktleTpidW5kbGVJRF07CisKKyAgICAgICAgICAgIGlmIChOU0FycmF5ICpibG9ja2Vk
VmVyc2lvbnMgPSBbdmVyc2lvbkluZm8gb2JqZWN0Rm9yS2V5OkAiQmxvY2tlZFBsdWdJbkJ1bmRs
ZVZlcnNpb25zIl0pCisgICAgICAgICAgICAgICAgW2J1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMg
c2V0T2JqZWN0OmJsb2NrZWRWZXJzaW9ucyBmb3JLZXk6YnVuZGxlSURdOworCisgICAgICAgICAg
ICBpZiAoTlNTdHJpbmcgKm1pbmltdW1TZWN1cmVWZXJzaW9uID0gW3ZlcnNpb25JbmZvIG9iamVj
dEZvcktleTpAIk1pbmltdW1QbHVnSW5CdW5kbGVWZXJzaW9uIl0pCisgICAgICAgICAgICAgICAg
W2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiBzZXRPYmplY3Q6bWluaW11bVNlY3VyZVZl
cnNpb24gZm9yS2V5OmJ1bmRsZUlEXTsKKworICAgICAgICAgICAgaWYgKE5TU3RyaW5nICptaW5p
bXVtQ29tcGF0aWJsZVZlcnNpb24gPSBbdmVyc2lvbkluZm8gb2JqZWN0Rm9yS2V5OkAiTWluaW11
bUNvbXBhdGlibGVQbHVnSW5CdW5kbGVWZXJzaW9uIl0pCisgICAgICAgICAgICAgICAgW2J1bmRs
ZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gc2V0T2JqZWN0Om1pbmltdW1Db21wYXRpYmxl
VmVyc2lvbiBmb3JLZXk6YnVuZGxlSURdOworCisgICAgICAgICAgICBpZiAoTlNOdW1iZXIgKnVw
ZGF0ZUF2YWlsYWJsZSA9IFt2ZXJzaW9uSW5mbyBvYmplY3RGb3JLZXk6QCJQbHVnSW5VcGRhdGVB
dmFpbGFibGUiXSkgeworICAgICAgICAgICAgICAgIC8vIEEgbWlzc2luZyBQbHVnSW5VcGRhdGVB
dmFpbGFibGUga2V5IG1lYW5zIHRoYXQgdGhlcmUgaXMgYSBwbHVnLWluIHVwZGF0ZSBhdmFpbGFi
bGUuCisgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVBdmFpbGFibGUgfHwgW3VwZGF0ZUF2YWls
YWJsZSBib29sVmFsdWVdKQorICAgICAgICAgICAgICAgICAgICBbYnVuZGxlSURzV2l0aEF2YWls
YWJsZVVwZGF0ZXMgYWRkT2JqZWN0OmJ1bmRsZUlEXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIENGUmVsZWFzZShzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBsdWdpbkJsYWNrbGlzdD4obmV3IFBsdWdpbkJsYWNr
bGlzdChidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIGJ1bmRsZUlEVG9NaW5pbXVtQ29t
cGF0aWJsZVZlcnNpb24sIGJ1bmRsZUlEVG9CbG9ja2VkVmVyc2lvbnMsIGJ1bmRsZUlEc1dpdGhB
dmFpbGFibGVVcGRhdGVzKSk7Cit9CisKK1BsdWdpbkJsYWNrbGlzdDo6flBsdWdpbkJsYWNrbGlz
dCgpCit7CisgICAgQ0ZSZWxlYXNlKG1fYnVuZGxlSURUb01pbmltdW1TZWN1cmVWZXJzaW9uKTsK
KyAgICBDRlJlbGVhc2UobV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uKTsKKyAg
ICBDRlJlbGVhc2UobV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKTsKKyAgICBDRlJlbGVhc2Uo
bV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyk7Cit9CisKK05TQXJyYXkgKlBsdWdpbkJs
YWNrbGlzdDo6c3BsaXRPU1ZlcnNpb24oTlNTdHJpbmcgKm9zVmVyc2lvbikKK3sKKyAgICBOU0Fy
cmF5ICpjb21wb25lbnRzID0gW29zVmVyc2lvbiBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6
QCIuIl07CisKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5XTsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IFtjb21wb25lbnRzIGNvdW50
XTsgKytpKSB7CisgICAgICAgIE5TU3RyaW5nICp2ZXJzaW9uU3RyaW5nID0gW1tjb21wb25lbnRz
IHN1YmFycmF5V2l0aFJhbmdlOk5TTWFrZVJhbmdlKDAsIGkgKyAxKV0gY29tcG9uZW50c0pvaW5l
ZEJ5U3RyaW5nOkAiLiJdOworCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OnZlcnNpb25TdHJp
bmddOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworUGx1Z2luQmxhY2tsaXN0
OjpMb2FkUG9saWN5IFBsdWdpbkJsYWNrbGlzdDo6bG9hZFBvbGljeUZvclBsdWdpbihOU1N0cmlu
ZyAqYnVuZGxlSWRlbnRpZmllciwgTlNTdHJpbmcgKmJ1bmRsZVZlcnNpb25TdHJpbmcpIGNvbnN0
Cit7CisgICAgaWYgKCFidW5kbGVJZGVudGlmaWVyIHx8ICFidW5kbGVWZXJzaW9uU3RyaW5nKQor
ICAgICAgICByZXR1cm4gTG9hZFBvbGljeTo6TG9hZE5vcm1hbGx5OworCisgICAgLy8gRmlyc3Qs
IGNoZWNrIGZvciBleHBsaWNpdGx5IGJsb2NrZWQgdmVyc2lvbnMuCisgICAgZm9yIChOU1N0cmlu
ZyAqYmxvY2tlZFZlcnNpb24gaW4gW21fYnVuZGxlSURUb0Jsb2NrZWRWZXJzaW9ucyBvYmplY3RG
b3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsKKyAgICAgICAgaWYgKFtibG9ja2VkVmVyc2lvbiBp
c0VxdWFsVG9TdHJpbmc6YnVuZGxlVmVyc2lvblN0cmluZ10pCisgICAgICAgICAgICByZXR1cm4g
TG9hZFBvbGljeTo6QmxvY2tlZEZvclNlY3VyaXR5OworICAgIH0KKworICAgIC8vIFRoZW4sIGNo
ZWNrIGlmIHRoZXJlJ3MgYSBmb3JjZWQgbWluaW11bSB2ZXJzaW9uIGZvciBzZWN1cml0eSBpc3N1
ZXMuCisgICAgaWYgKE5TU3RyaW5nICptaW5pbXVtU2VjdXJlVmVyc2lvbiA9IFttX2J1bmRsZUlE
VG9NaW5pbXVtU2VjdXJlVmVyc2lvbiBvYmplY3RGb3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsK
KyAgICAgICAgaWYgKFtidW5kbGVWZXJzaW9uU3RyaW5nIGNvbXBhcmU6bWluaW11bVNlY3VyZVZl
cnNpb24gb3B0aW9uczpOU051bWVyaWNTZWFyY2hdID09IE5TT3JkZXJlZEFzY2VuZGluZykKKyAg
ICAgICAgICAgIHJldHVybiBMb2FkUG9saWN5OjpCbG9ja2VkRm9yU2VjdXJpdHk7CisgICAgfQor
CisgICAgLy8gVGhlbiwgY2hlY2sgaWYgdGhlcmUncyBhIGZvcmNlZCBtaW5pbXVtIHZlcnNpb24g
Zm9yIGNvbXBhdGliaWxpdHkgaXNzdWVzLgorICAgIGlmIChOU1N0cmluZyAqbWluaW11bUNvbXBh
dGlibGVWZXJzaW9uID0gW21fYnVuZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiBvYmpl
Y3RGb3JLZXk6YnVuZGxlSWRlbnRpZmllcl0pIHsKKyAgICAgICAgaWYgKFtidW5kbGVWZXJzaW9u
U3RyaW5nIGNvbXBhcmU6bWluaW11bUNvbXBhdGlibGVWZXJzaW9uIG9wdGlvbnM6TlNOdW1lcmlj
U2VhcmNoXSA9PSBOU09yZGVyZWRBc2NlbmRpbmcpCisgICAgICAgICAgICByZXR1cm4gTG9hZFBv
bGljeTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CisgICAgfQorCisgICAgcmV0dXJuIExvYWRQ
b2xpY3k6OkxvYWROb3JtYWxseTsKK30KKworYm9vbCBQbHVnaW5CbGFja2xpc3Q6OmlzVXBkYXRl
QXZhaWxhYmxlKE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyKSBjb25zdAoreworICAgIHJldHVy
biBbbV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyBjb250YWluc09iamVjdDpidW5kbGVJ
ZGVudGlmaWVyXTsKK30KKworUGx1Z2luQmxhY2tsaXN0OjpQbHVnaW5CbGFja2xpc3QoTlNEaWN0
aW9uYXJ5ICpidW5kbGVJRFRvTWluaW11bVNlY3VyZVZlcnNpb24sIE5TRGljdGlvbmFyeSAqYnVu
ZGxlSURUb01pbmltdW1Db21wYXRpYmxlVmVyc2lvbiwgTlNEaWN0aW9uYXJ5ICpidW5kbGVJRFRv
QmxvY2tlZFZlcnNpb25zLCBOU1NldCAqYnVuZGxlSURzV2l0aEF2YWlsYWJsZVVwZGF0ZXMpCisg
ICAgOiBtX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbihbYnVuZGxlSURUb01pbmltdW1T
ZWN1cmVWZXJzaW9uIGNvcHldKQorICAgICwgbV9idW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVW
ZXJzaW9uKFtidW5kbGVJRFRvTWluaW11bUNvbXBhdGlibGVWZXJzaW9uIGNvcHldKQorICAgICwg
bV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKFtidW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zIGNv
cHldKQorICAgICwgbV9idW5kbGVJRHNXaXRoQXZhaWxhYmxlVXBkYXRlcyhbYnVuZGxlSURzV2l0
aEF2YWlsYWJsZVVwZGF0ZXMgY29weV0pCit7CisgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhl
IGRpY3Rpb25hcmllcyBkbyBub3QgZ2V0IGRlc3Ryb3llZCB1bmRlciBPYmplY3RpdmUtQyBncmFi
YWdlIGNvbGxlY3Rpb24uCisgICAgQ0ZSZXRhaW4obV9idW5kbGVJRFRvTWluaW11bVNlY3VyZVZl
cnNpb24pOworICAgIFttX2J1bmRsZUlEVG9NaW5pbXVtU2VjdXJlVmVyc2lvbiByZWxlYXNlXTsK
KyAgICBDRlJldGFpbihtX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24pOworICAg
IFttX2J1bmRsZUlEVG9NaW5pbXVtQ29tcGF0aWJsZVZlcnNpb24gcmVsZWFzZV07CisgICAgQ0ZS
ZXRhaW4obV9idW5kbGVJRFRvQmxvY2tlZFZlcnNpb25zKTsKKyAgICBbbV9idW5kbGVJRFRvQmxv
Y2tlZFZlcnNpb25zIHJlbGVhc2VdOworICAgIENGUmV0YWluKG1fYnVuZGxlSURzV2l0aEF2YWls
YWJsZVVwZGF0ZXMpOworICAgIFttX2J1bmRsZUlEc1dpdGhBdmFpbGFibGVVcGRhdGVzIHJlbGVh
c2VdOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1dlYkdMQmxhY2tsaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
R0xCbGFja2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmY3MmEyMDc2MGM3ZWFlNjE2YjUxYjM2ZWE2MTg0
M2ZhNWFhOTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1dlYkdMQmxhY2tsaXN0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBQTEFURk9STShNQUMpCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworT0JKQ19DTEFTUyBOU0RpY3Rpb25h
cnk7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0xCbGFja2xpc3QgeworcHVi
bGljOgorICAgIGVudW0gQmxvY2tDb21wYXJpc29uIHsKKyAgICAgICAgRXF1YWxzLAorICAgICAg
ICBMZXNzVGhhbiwKKyAgICAgICAgTGVzc1RoYW5FcXVhbHMKKyAgICB9OworCisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tXZWJHTCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBib29sIHNob3VsZFN1Z2dlc3RCbG9ja2luZ1dlYkdMKCk7CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQmxhY2tsaXN0PiBjcmVhdGUoTlNEaWN0aW9uYXJ5ICpw
cm9wZXJ0eUxpc3QpOworICAgIH5XZWJHTEJsYWNrbGlzdCgpOworCisgICAgYm9vbCBzaG91bGRC
bG9jaygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkU3VnZ2VzdEJsb2NraW5nKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBCbG9ja0NvbW1hbmQgeworICAgICAgICBBbGxvdywK
KyAgICAgICAgQmxvY2ssCisgICAgICAgIFN1Z2dlc3RCbG9ja2luZworICAgIH07CisKKyAgICBX
ZWJHTEJsYWNrbGlzdChCbG9ja0NvbW1hbmQpOworCisgICAgQmxvY2tDb21tYW5kIG1fY29tbWFu
ZDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvV2ViR0xCbGFja2xpc3QubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2Vi
R0xCbGFja2xpc3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2OGY4MTcxNjBkMmVmOTFmOTViMDc5NmIzYTJh
NmQxY2VjMTUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9XZWJHTEJsYWNrbGlzdC5tbQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJHTEJsYWNrbGlzdC5oIgorCisjaWYgUExB
VEZPUk0oTUFDKQorCisjaW1wb3J0ICJCbGFja2xpc3RVcGRhdGVyLmgiCisjaW1wb3J0ICJDRlV0
aWxpdGllc1NQSS5oIgorI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0cnVjdCBPU0J1aWxkSW5mbyB7CisgICAgT1NCdWlsZEluZm8oKQorICAgICAg
ICA6IG1ham9yKDApCisgICAgICAgICwgbWlub3IoMCkKKyAgICAgICAgLCBidWlsZCgwKQorICAg
IHsKKyAgICB9CisKKyAgICBPU0J1aWxkSW5mbyhpbnQgbWFqb3IsIGludCBtaW5vciwgaW50IGJ1
aWxkKQorICAgICAgICA6IG1ham9yKG1ham9yKQorICAgICAgICAsIG1pbm9yKG1pbm9yKQorICAg
ICAgICAsIGJ1aWxkKGJ1aWxkKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgT1NCdWlsZEluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
am9yID09IG90aGVyLm1ham9yICYmIG1pbm9yID09IG90aGVyLm1pbm9yICYmIGJ1aWxkID09IG90
aGVyLmJ1aWxkOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IE9TQnVpbGRJbmZv
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnRpZShtYWpvciwgbWlu
b3IsIGJ1aWxkKSA+IHN0ZDo6dGllKG90aGVyLm1ham9yLCBvdGhlci5taW5vciwgb3RoZXIuYnVp
bGQpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPU0J1aWxkSW5mbyYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjp0aWUobWFqb3IsIG1pbm9yLCBi
dWlsZCkgPD0gc3RkOjp0aWUob3RoZXIubWFqb3IsIG90aGVyLm1pbm9yLCBvdGhlci5idWlsZCk7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT1NCdWlsZEluZm8mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dGllKG1ham9yLCBtaW5vciwgYnVpbGQp
IDwgc3RkOjp0aWUob3RoZXIubWFqb3IsIG90aGVyLm1pbm9yLCBvdGhlci5idWlsZCk7CisgICAg
fQorCisgICAgaW50IG1ham9yOyAvLyBSZXByZXNlbnRzIHRoZSAxMyBpbiAxM0M2NC4KKyAgICBp
bnQgbWlub3I7IC8vIFJlcHJlc2VudHMgdGhlIEMgaW4gMTNDNjQgKGFzIGEgbnVtYmVyIHdoZXJl
IEEgPT0gMSwgaS5lLiAzKS4KKyAgICBpbnQgYnVpbGQ7IC8vIFJlcHJlc2VudHMgdGhlIDY0IGlu
IDEzQzY0LgorfTsKKworc3RhdGljIE9TQnVpbGRJbmZvIGJ1aWxkSW5mb0Zyb21PU0J1aWxkU3Ry
aW5nKE5TU3RyaW5nICpidWlsZFN0cmluZykKK3sKKyAgICBOU0Vycm9yICplcnJvciA9IE5VTEw7
CisgICAgTlNSZWd1bGFyRXhwcmVzc2lvbiAqcmVnZXggPSBbTlNSZWd1bGFyRXhwcmVzc2lvbiBy
ZWd1bGFyRXhwcmVzc2lvbldpdGhQYXR0ZXJuOkAiXihcXGQrKShbQS1aXSkoXFxkKykiIG9wdGlv
bnM6MCBlcnJvcjomZXJyb3JdOworICAgIE5TQXJyYXkgKm1hdGNoZXMgPSBbcmVnZXggbWF0Y2hl
c0luU3RyaW5nOmJ1aWxkU3RyaW5nIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbYnVp
bGRTdHJpbmcgbGVuZ3RoXSldOworICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmNvdW50ICE9
IDEpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIE5TTG9nKEAiV2ViR0xCbGFja2xpc3QgY291
bGQgbm90IHBhcnNlIE9TQnVpbGQgZW50cnk6ICVAIiwgYnVpbGRTdHJpbmcpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiBPU0J1aWxkSW5mbygpOworICAgIH0KKworICAgIE5TVGV4dENoZWNraW5n
UmVzdWx0ICptYXRjaFJlc3VsdCA9IFttYXRjaGVzIG9iamVjdEF0SW5kZXg6MF07CisKKyAgICBp
ZiAobWF0Y2hSZXN1bHQubnVtYmVyT2ZSYW5nZXMgIT0gNCkgeworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgTlNMb2coQCJXZWJHTEJsYWNrbGlzdCBjb3VsZCBub3QgcGFyc2UgT1NCdWlsZCBlbnRy
eTogJUAiLCBidWlsZFN0cmluZyk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIE9TQnVpbGRJbmZv
KCk7CisgICAgfQorCisgICAgaW50IG1ham9yVmVyc2lvbiA9IFtbYnVpbGRTdHJpbmcgc3Vic3Ry
aW5nV2l0aFJhbmdlOlttYXRjaFJlc3VsdCByYW5nZUF0SW5kZXg6MV1dIGludFZhbHVlXTsKKyAg
ICBpbnQgbWlub3JWZXJzaW9uID0gW1tidWlsZFN0cmluZyBzdWJzdHJpbmdXaXRoUmFuZ2U6W21h
dGNoUmVzdWx0IHJhbmdlQXRJbmRleDoyXV0gY2hhcmFjdGVyQXRJbmRleDowXSAtICdBJyArIDE7
CisgICAgaW50IGJ1aWxkVmVyc2lvbiA9IFtbYnVpbGRTdHJpbmcgc3Vic3RyaW5nV2l0aFJhbmdl
OlttYXRjaFJlc3VsdCByYW5nZUF0SW5kZXg6M11dIGludFZhbHVlXTsKKworICAgIHJldHVybiBP
U0J1aWxkSW5mbyhtYWpvclZlcnNpb24sIG1pbm9yVmVyc2lvbiwgYnVpbGRWZXJzaW9uKTsKK30K
KworYm9vbCBXZWJHTEJsYWNrbGlzdDo6c2hvdWxkQmxvY2tXZWJHTCgpCit7CisgICAgQmxhY2ts
aXN0VXBkYXRlcjo6aW5pdGlhbGl6ZVF1ZXVlKCk7CisKKyAgICBfX2Jsb2NrIGJvb2wgc2hvdWxk
QmxvY2sgPSBmYWxzZTsKKyAgICBkaXNwYXRjaF9zeW5jKEJsYWNrbGlzdFVwZGF0ZXI6OnF1ZXVl
KCksIF57CisgICAgICAgIEJsYWNrbGlzdFVwZGF0ZXI6OnJlbG9hZElmTmVjZXNzYXJ5KCk7CisK
KyAgICAgICAgV2ViR0xCbGFja2xpc3QqIHdlYkdMQmxhY2tsaXN0ID0gQmxhY2tsaXN0VXBkYXRl
cjo6d2ViR0xCbGFja2xpc3QoKTsKKyAgICAgICAgaWYgKHdlYkdMQmxhY2tsaXN0KQorICAgICAg
ICAgICAgc2hvdWxkQmxvY2sgPSB3ZWJHTEJsYWNrbGlzdC0+c2hvdWxkQmxvY2soKTsKKyAgICB9
KTsKKworICAgIHJldHVybiBzaG91bGRCbG9jazsKK30KKworYm9vbCBXZWJHTEJsYWNrbGlzdDo6
c2hvdWxkU3VnZ2VzdEJsb2NraW5nV2ViR0woKQoreworICAgIEJsYWNrbGlzdFVwZGF0ZXI6Omlu
aXRpYWxpemVRdWV1ZSgpOworCisgICAgX19ibG9jayBib29sIHNob3VsZFN1Z2dlc3RCbG9ja2lu
ZyA9IGZhbHNlOworICAgIGRpc3BhdGNoX3N5bmMoQmxhY2tsaXN0VXBkYXRlcjo6cXVldWUoKSwg
XnsKKyAgICAgICAgQmxhY2tsaXN0VXBkYXRlcjo6cmVsb2FkSWZOZWNlc3NhcnkoKTsKKworICAg
ICAgICBXZWJHTEJsYWNrbGlzdCogd2ViR0xCbGFja2xpc3QgPSBCbGFja2xpc3RVcGRhdGVyOjp3
ZWJHTEJsYWNrbGlzdCgpOworICAgICAgICBpZiAod2ViR0xCbGFja2xpc3QpCisgICAgICAgICAg
ICBzaG91bGRTdWdnZXN0QmxvY2tpbmcgPSB3ZWJHTEJsYWNrbGlzdC0+c2hvdWxkU3VnZ2VzdEJs
b2NraW5nKCk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc2hvdWxkU3VnZ2VzdEJsb2NraW5nOwor
fQorCitzdGF0aWMgYm9vbCBtYXRjaGVzR1BVKEdMaW50IG1hY2hpbmVJZCwgR0xpbnQgcmVuZGVy
ZXJNYXNrKQoreworICAgIC8vIElmIHRoZSBsYXN0IHR3byBieXRlcyBvZiB0aGUgcmVuZGVyZXJN
YXNrIGFyZSBub3QgemVybywgdGhlbiB3ZSdyZQorICAgIC8vIGxvb2tpbmcgZm9yIGFuIGV4YWN0
IEdQVSBtYXRjaC4gT3RoZXJ3aXNlIHdlJ3JlIG1hdGNoaW5nIGFnYWluc3QKKyAgICAvLyBhIGNs
YXNzIG9mIEdQVXMuCisKKyAgICBpZiAocmVuZGVyZXJNYXNrICYgMHhGRikKKyAgICAgICAgcmV0
dXJuIG1hY2hpbmVJZCA9PSByZW5kZXJlck1hc2s7CisKKyAgICByZXR1cm4gKG1hY2hpbmVJZCAm
IGtDR0xSZW5kZXJlcklETWF0Y2hpbmdNYXNrKSA9PSByZW5kZXJlck1hc2s7Cit9CisKK3N0YXRp
YyBHTGludCBncHVNYXNrRnJvbVN0cmluZyhOU1N0cmluZyAqaW5wdXQpCit7CisgICAgTlNTY2Fu
bmVyKiBzY2FubmVyID0gW05TU2Nhbm5lciBzY2FubmVyV2l0aFN0cmluZzppbnB1dF07CisgICAg
dW5zaWduZWQgbWFza1ZhbHVlOworICAgIFtzY2FubmVyIHNjYW5IZXhJbnQ6Jm1hc2tWYWx1ZV07
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihtYXNrVmFsdWUgJiAoa0NHTFJlbmRlcmVy
SURNYXRjaGluZ01hc2sgfCAweEZGKSk7Cit9CisKK3N0YXRpYyBib29sIG1hdGNoZXNCdWlsZElu
Zm8oT1NCdWlsZEluZm8gbWFjaGluZUluZm8sIE9TQnVpbGRJbmZvIGJsb2NrSW5mbywgV2ViR0xC
bGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbiBjb21wYXJpc29uKQoreworICAgIHN3aXRjaCAoY29t
cGFyaXNvbikgeworICAgIGNhc2UgV2ViR0xCbGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbjo6RXF1
YWxzOgorICAgICAgICByZXR1cm4gbWFjaGluZUluZm8gPT0gYmxvY2tJbmZvOworICAgIGNhc2Ug
V2ViR0xCbGFja2xpc3Q6OkJsb2NrQ29tcGFyaXNvbjo6TGVzc1RoYW46CisgICAgICAgIHJldHVy
biBtYWNoaW5lSW5mbyA8IGJsb2NrSW5mbzsKKyAgICBjYXNlIFdlYkdMQmxhY2tsaXN0OjpCbG9j
a0NvbXBhcmlzb246Okxlc3NUaGFuRXF1YWxzOgorICAgICAgICByZXR1cm4gbWFjaGluZUluZm8g
PD0gYmxvY2tJbmZvOworICAgIH0KK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQmxhY2tsaXN0
PiBXZWJHTEJsYWNrbGlzdDo6Y3JlYXRlKE5TRGljdGlvbmFyeSAqcHJvcGVydHlMaXN0KQorewor
ICAgIENGRGljdGlvbmFyeVJlZiBzeXN0ZW1WZXJzaW9uRGljdGlvbmFyeSA9IF9DRkNvcHlTeXN0
ZW1WZXJzaW9uRGljdGlvbmFyeSgpOworICAgIENGU3RyaW5nUmVmIG9zQnVpbGQgPSBzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3lzdGVtVmVyc2lvbkRpY3Rp
b25hcnksIF9rQ0ZTeXN0ZW1WZXJzaW9uQnVpbGRWZXJzaW9uS2V5KSk7CisgICAgT1NCdWlsZElu
Zm8gYnVpbGRJbmZvID0gYnVpbGRJbmZvRnJvbU9TQnVpbGRTdHJpbmcoKE5TU3RyaW5nICopb3NC
dWlsZCk7CisgICAgQ0ZSZWxlYXNlKHN5c3RlbVZlcnNpb25EaWN0aW9uYXJ5KTsKKworICAgIGlm
ICghYnVpbGRJbmZvLm1ham9yKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5TQXJy
YXkgKmJsb2NrRW50cmllcyA9IFtwcm9wZXJ0eUxpc3Qgb2JqZWN0Rm9yS2V5OkAiV2ViR0xCbGFj
a2xpc3QiXTsKKworICAgIGlmICghW2Jsb2NrRW50cmllcyBpc0tpbmRPZkNsYXNzOltOU0FycmF5
IGNsYXNzXV0gfHwgIWJsb2NrRW50cmllcy5jb3VudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzWzEyXSA9IHsKKyAgICAgICAg
a0NHTFBGQUNvbG9yU2l6ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKTMyLAorICAgICAgICBr
Q0dMUEZBRGVwdGhTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpMzIsCisgICAgICAgIGtD
R0xQRkFBY2NlbGVyYXRlZCwKKyAgICAgICAga0NHTFBGQVN1cGVyc2FtcGxlLAorICAgICAgICBr
Q0dMUEZBTXVsdGlzYW1wbGUsCisgICAgICAgIGtDR0xQRkFTYW1wbGVCdWZmZXJzLCAoQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUpMSwKKyAgICAgICAga0NHTFBGQVNhbXBsZXMsIChDR0xQaXhlbEZv
cm1hdEF0dHJpYnV0ZSk0LAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpMAorICAg
IH07CisKKyAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXg7CisgICAgR0xpbnQgbnBpeDsKKyAgICBD
R0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4LCAmbnBpeCk7CisgICAgQ0dMQ29udGV4
dE9iaiBjdHg7CisgICAgQ0dMQ3JlYXRlQ29udGV4dChwaXgsIDAsICZjdHgpOworICAgIEdMaW50
IHJlbmRlcmVySWQgPSAwOworICAgIENHTEdldFBhcmFtZXRlcihjdHgsIGtDR0xDUEN1cnJlbnRS
ZW5kZXJlcklELCAmcmVuZGVyZXJJZCk7CisgICAgR0xpbnQgc3VwcG9ydHNTZXBhcmF0ZUFkZHJl
c3NTcGFjZSA9IDA7CisjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEw
MDAKKyAgICBDR0xHZXRQYXJhbWV0ZXIoY3R4LCBrQ0dMQ1BTdXBwb3J0U2VwYXJhdGVBZGRyZXNz
U3BhY2UsICZzdXBwb3J0c1NlcGFyYXRlQWRkcmVzc1NwYWNlKTsKKyNlbmRpZgorICAgIENHTERl
c3Ryb3lDb250ZXh0KGN0eCk7CisgICAgQ0dMUmVsZWFzZVBpeGVsRm9ybWF0KHBpeCk7CisKKyAg
ICByZW5kZXJlcklkICY9IGtDR0xSZW5kZXJlcklETWF0Y2hpbmdNYXNrIHwgMHhGRjsKKworICAg
IEJsb2NrQ29tbWFuZCBnbG9iYWxDb21tYW5kID0gQmxvY2tDb21tYW5kOjpBbGxvdzsKKworICAg
IGZvciAoTlNEaWN0aW9uYXJ5ICpibG9ja0RhdGEgaW4gYmxvY2tFbnRyaWVzKSB7CisKKyAgICAg
ICAgR0xpbnQgZ3B1TWFzayA9IGdwdU1hc2tGcm9tU3RyaW5nKFtibG9ja0RhdGEgb2JqZWN0Rm9y
S2V5OkAiR1BVIl0pOworCisgICAgICAgIE9TQnVpbGRJbmZvIGJsb2NrZWRCdWlsZEluZm8gPSBi
dWlsZEluZm9Gcm9tT1NCdWlsZFN0cmluZyhzdGF0aWNfY2FzdDxOU1N0cmluZyo+KFtibG9ja0Rh
dGEgb2JqZWN0Rm9yS2V5OkAiT1NCdWlsZCJdKSk7CisKKyAgICAgICAgTlNTdHJpbmcgKmNvbXBh
cmlzb25TdHJpbmcgPSBbYmxvY2tEYXRhIG9iamVjdEZvcktleTpAIkNvbXBhcmlzb24iXTsKKyAg
ICAgICAgQmxvY2tDb21wYXJpc29uIGNvbXBhcmlzb24gPSBCbG9ja0NvbXBhcmlzb246OkVxdWFs
czsKKyAgICAgICAgaWYgKFtjb21wYXJpc29uU3RyaW5nIGlzRXF1YWxUb1N0cmluZzpAIkxlc3NU
aGFuIl0pCisgICAgICAgICAgICBjb21wYXJpc29uID0gQmxvY2tDb21wYXJpc29uOjpMZXNzVGhh
bjsKKyAgICAgICAgZWxzZSBpZiAoW2NvbXBhcmlzb25TdHJpbmcgaXNFcXVhbFRvU3RyaW5nOkAi
TGVzc1RoYW5FcXVhbHMiXSkKKyAgICAgICAgICAgIGNvbXBhcmlzb24gPSBCbG9ja0NvbXBhcmlz
b246Okxlc3NUaGFuRXF1YWxzOworCisgICAgICAgIE5TU3RyaW5nICpjb21tYW5kU3RyaW5nID0g
W2Jsb2NrRGF0YSBvYmplY3RGb3JLZXk6QCJDb21tYW5kIl07CisgICAgICAgIEJsb2NrQ29tbWFu
ZCBjb21tYW5kID0gQmxvY2tDb21tYW5kOjpBbGxvdzsKKyAgICAgICAgaWYgKFtjb21tYW5kU3Ry
aW5nIGlzRXF1YWxUb1N0cmluZzpAIkJsb2NrIl0pCisgICAgICAgICAgICBjb21tYW5kID0gQmxv
Y2tDb21tYW5kOjpCbG9jazsKKyAgICAgICAgZWxzZSBpZiAoW2NvbW1hbmRTdHJpbmcgaXNFcXVh
bFRvU3RyaW5nOkAiU3VnZ2VzdEJsb2NraW5nIl0pCisgICAgICAgICAgICBjb21tYW5kID0gQmxv
Y2tDb21tYW5kOjpTdWdnZXN0QmxvY2tpbmc7CisKKyAgICAgICAgaWYgKG1hdGNoZXNHUFUocmVu
ZGVyZXJJZCwgZ3B1TWFzaykgJiYgbWF0Y2hlc0J1aWxkSW5mbyhidWlsZEluZm8sIGJsb2NrZWRC
dWlsZEluZm8sIGNvbXBhcmlzb24pKSB7CisgICAgICAgICAgICBnbG9iYWxDb21tYW5kID0gY29t
bWFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFz
dXBwb3J0c1NlcGFyYXRlQWRkcmVzc1NwYWNlICYmIGdsb2JhbENvbW1hbmQgPT0gQmxvY2tDb21t
YW5kOjpBbGxvdykKKyAgICAgICAgZ2xvYmFsQ29tbWFuZCA9IEJsb2NrQ29tbWFuZDo6U3VnZ2Vz
dEJsb2NraW5nOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTEJsYWNrbGlzdD4o
bmV3IFdlYkdMQmxhY2tsaXN0KGdsb2JhbENvbW1hbmQpKTsKK30KKworYm9vbCBXZWJHTEJsYWNr
bGlzdDo6c2hvdWxkQmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbW1hbmQgPT0gQmxv
Y2tDb21tYW5kOjpCbG9jazsKK30KKworYm9vbCBXZWJHTEJsYWNrbGlzdDo6c2hvdWxkU3VnZ2Vz
dEJsb2NraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb21tYW5kID09IEJsb2NrQ29tbWFu
ZDo6U3VnZ2VzdEJsb2NraW5nOworfQorCitXZWJHTEJsYWNrbGlzdDo6V2ViR0xCbGFja2xpc3Qo
QmxvY2tDb21tYW5kIGNvbW1hbmQpCisgICAgOiBtX2NvbW1hbmQoY29tbWFuZCkKK3sKK30KKwor
V2ViR0xCbGFja2xpc3Q6On5XZWJHTEJsYWNrbGlzdCgpCit7Cit9CisKK30KKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVzU1BJLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcGkvY2YvQ0ZVdGlsaXRpZXNTUEkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNTY4NmI0YzIzMjhhYmEzM2JkODczYjQ4NjAwODQzODg1NmFkZGFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3BpL2NmL0NGVXRpbGl0aWVzU1BJLmgK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKworI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCisjaW1wb3J0IDxDb3JlRm91bmRhdGlvbi9DRlByaXYuaD4KKyNlbmRpZgorCitleHRl
cm4gIkMiIHsKK0NGRGljdGlvbmFyeVJlZiBfQ0ZDb3B5U3lzdGVtVmVyc2lvbkRpY3Rpb25hcnko
dm9pZCk7CitleHRlcm4gY29uc3QgQ0ZTdHJpbmdSZWYgX2tDRlN5c3RlbVZlcnNpb25Qcm9kdWN0
VmVyc2lvbktleTsKK2V4dGVybiBjb25zdCBDRlN0cmluZ1JlZiBfa0NGU3lzdGVtVmVyc2lvbkJ1
aWxkVmVyc2lvbktleTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggZWNmMmY1MDE1NmFkMmRmZTE1
YjRmNGFkMjFkZmM5N2YwM2FmMjZjZC4uMmUwN2JjNDc5NDg5ZTk1MTA1ZGVhY2ZmYWYzMTkyZTFk
NWZiYzY2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTEwOCw2ICsxMDgsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9OU1VSTERvd25sb2FkU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL05TVVJMRmlsZVR5
cGVNYXBwaW5nc1NQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1BsdWdpbkJsYWNrbGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5WaWV3QmFzZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9Qcm90ZWN0aW9uU3BhY2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVzb3VyY2VFcnJvci5oPgpAQCAtMTE4LDYgKzExOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdWJyZXNvdXJjZUxvYWRlci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJH
TEJsYWNrbGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJTY3JpcHRPYmplY3RQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1dpZGdldC5oPgogI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTUVs
ZW1lbnQuaD4KQEAgLTE4OTAsNiArMTg5MiwxNyBAQCBwcml2YXRlOgogCiAjZW5kaWYgLy8gRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAKK3N0YXRpYyBib29sIHNob3VsZEJsb2NrUGx1Z2lu
KFdlYkJhc2VQbHVnaW5QYWNrYWdlICpwbHVnaW5QYWNrYWdlKQoreworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBhdXRvIGxvYWRQb2xpY3kgPSBQbHVnaW5CbGFja2xpc3Q6OmxvYWRQb2xpY3lGb3JQ
bHVnaW5WZXJzaW9uKHBsdWdpblBhY2thZ2UuYnVuZGxlSWRlbnRpZmllciwgcGx1Z2luUGFja2Fn
ZS5idW5kbGVWZXJzaW9uKTsKKyAgICByZXR1cm4gbG9hZFBvbGljeSA9PSBQbHVnaW5CbGFja2xp
c3Q6OkxvYWRQb2xpY3k6OkJsb2NrZWRGb3JTZWN1cml0eSB8fCBsb2FkUG9saWN5ID09IFBsdWdp
bkJsYWNrbGlzdDo6TG9hZFBvbGljeTo6QmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShwbHVnaW5QYWNrYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwogUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZVBsdWdp
bihjb25zdCBJbnRTaXplJiBzaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
VVJMJiB1cmwsCiAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBs
b2FkTWFudWFsbHkpCiB7CkBAIC0xOTczLDcgKzE5ODYsNyBAQCBSZWZQdHI8V2lkZ2V0PiBXZWJG
cmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxQ
bHVnSQogICAgIE5TVmlldyAqdmlldyA9IG5pbDsKIAogICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7
Ci0gICAgICAgIGlmIChXS1Nob3VsZEJsb2NrUGx1Z2luKFtwbHVnaW5QYWNrYWdlIGJ1bmRsZUlk
ZW50aWZpZXJdLCBbcGx1Z2luUGFja2FnZSBidW5kbGVWZXJzaW9uXSkpIHsKKyAgICAgICAgaWYg
KHNob3VsZEJsb2NrUGx1Z2luKHBsdWdpblBhY2thZ2UpKSB7CiAgICAgICAgICAgICBlcnJvckNv
ZGUgPSBXZWJLaXRFcnJvckJsb2NrZWRQbHVnSW5WZXJzaW9uOwogICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckVtYmVkZGVkT2JqZWN0PihlbGVtZW50LT5yZW5kZXJlcigpKSkKICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4oKmVsZW1lbnQtPnJlbmRlcmVyKCkp
LnNldFBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKFJlbmRlckVtYmVkZGVkT2JqZWN0OjpJbnNl
Y3VyZVBsdWdpblZlcnNpb24pOwpAQCAtMjA3OCw3ICsyMDkxLDcgQEAgUGFzc1JlZlB0cjxXaWRn
ZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmIHMKICAgICBpbnQgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JKYXZhVW5hdmFpbGFibGU7
CiAKICAgICBpZiAocGx1Z2luUGFja2FnZSkgewotICAgICAgICBpZiAoV0tTaG91bGRCbG9ja1Bs
dWdpbihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVyXSwgW3BsdWdpblBhY2thZ2UgYnVu
ZGxlVmVyc2lvbl0pKSB7CisgICAgICAgIGlmIChzaG91bGRCbG9ja1BsdWdpbihwbHVnaW5QYWNr
YWdlKSkgewogICAgICAgICAgICAgZXJyb3JDb2RlID0gV2ViS2l0RXJyb3JCbG9ja2VkUGx1Z0lu
VmVyc2lvbjsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4oZWxlbWVu
dC0+cmVuZGVyZXIoKSkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRP
YmplY3Q+KCplbGVtZW50LT5yZW5kZXJlcigpKS5zZXRQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNv
bihSZW5kZXJFbWJlZGRlZE9iamVjdDo6SW5zZWN1cmVQbHVnaW5WZXJzaW9uKTsKQEAgLTIxMjYs
MTQgKzIxMzksMjMgQEAgU3RyaW5nIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlh
VHlwZSgpIGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCitzdGF0aWMgYm9vbCBzaG91bGRC
bG9ja1dlYkdMKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFdlYkdMQmxhY2ts
aXN0OjpzaG91bGRCbG9ja1dlYkdMKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCiBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgV2ViRnJhbWVMb2FkZXJDbGllbnQ6Ondl
YkdMUG9saWN5Rm9yVVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdLU2hv
dWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0aW9uIDogV2ViR0xBbGxvd0NyZWF0aW9u
OworICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkgPyBXZWJHTEJsb2NrQ3JlYXRpb24gOiBX
ZWJHTEFsbG93Q3JlYXRpb247CiB9CiAKIFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6cmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFdLU2hvdWxkQmxvY2tXZWJHTCgpID8gV2ViR0xCbG9ja0NyZWF0
aW9uIDogV2ViR0xBbGxvd0NyZWF0aW9uOworICAgIHJldHVybiBzaG91bGRCbG9ja1dlYkdMKCkg
PyBXZWJHTEJsb2NrQ3JlYXRpb24gOiBXZWJHTEFsbG93Q3JlYXRpb247CiB9CiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9tYWMvUGx1Z2luSW5mb3JtYXRpb25NYWMubW0KaW5kZXgg
NDM5MzY5MWNhMWYwMDJmNzcwMDdiMjc4MTIyZTgyNzIwMzZjZjllZC4uNWVjODQyNDk1OWNiYzE5
Mjg4NmZhNzVhYmYwM2YzZDg4NWJjYjFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1BsdWdpbnMvTmV0c2NhcGUvbWFjL1BsdWdpbkluZm9ybWF0aW9uTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVnaW5zL05ldHNjYXBlL21hYy9QbHVnaW5JbmZvcm1hdGlv
bk1hYy5tbQpAQCAtMzIsNyArMzIsOSBAQAogI2ltcG9ydCAiQVBJU3RyaW5nLmgiCiAjaW1wb3J0
ICJQbHVnaW5Nb2R1bGVJbmZvLmgiCiAjaW1wb3J0ICJTdHJpbmdVdGlsaXRpZXMuaCIKLSNpbXBv
cnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5CbGFj
a2xpc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCkBAIC00MSw3ICs0Myw3IEBAIHZvaWQgZ2V0UGxhdGZvcm1QbHVnaW5Nb2R1bGVJbmZvcm1h
dGlvbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiBwbHVnaW4sIEFQSTo6RGljCiAgICAgbWFwLnNl
dChwbHVnaW5JbmZvcm1hdGlvbkJ1bmRsZUlkZW50aWZpZXJLZXkoKSwgQVBJOjpTdHJpbmc6OmNy
ZWF0ZShwbHVnaW4uYnVuZGxlSWRlbnRpZmllcikpOwogICAgIG1hcC5zZXQocGx1Z2luSW5mb3Jt
YXRpb25CdW5kbGVWZXJzaW9uS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnZlcnNp
b25TdHJpbmcpKTsKICAgICBtYXAuc2V0KHBsdWdpbkluZm9ybWF0aW9uQnVuZGxlU2hvcnRWZXJz
aW9uS2V5KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luLnNob3J0VmVyc2lvblN0cmluZykp
OwotICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFzdEJsb2NrZWRWZXJz
aW9uSXNLbm93bkF2YWlsYWJsZUtleSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0ZShXS0lzUGx1Z2lu
VXBkYXRlQXZhaWxhYmxlKG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcocGx1Z2luLmJ1bmRsZUlk
ZW50aWZpZXIpKSkpOworICAgIG1hcC5zZXQocGx1Z2luSW5mb3JtYXRpb25VcGRhdGVQYXN0TGFz
dEJsb2NrZWRWZXJzaW9uSXNLbm93bkF2YWlsYWJsZUtleSgpLCBBUEk6OkJvb2xlYW46OmNyZWF0
ZShXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6OmlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlKG5zU3Ry
aW5nRnJvbVdlYkNvcmVTdHJpbmcocGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIpKSkpOwogICAgIG1h
cC5zZXQocGx1Z2luSW5mb3JtYXRpb25IYXNTYW5kYm94UHJvZmlsZUtleSgpLCBBUEk6OkJvb2xl
YW46OmNyZWF0ZShwbHVnaW4uaGFzU2FuZGJveFByb2ZpbGUpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxlSW5mby5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL1BsdWdpbnMvUGx1Z2luTW9kdWxlSW5mby5oCmluZGV4IGNiYzE4NzYw
YTVkNzQ1YTIyZDBlOTBkMjNmOTk1ZTFkODJjNzg5YjguLmU1MzYwZjhkNDdjNTYyNjZkMGM4OTQ2
ZjQ2NmE0MmE3MmFmNjBkM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QbHVn
aW5zL1BsdWdpbk1vZHVsZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUGx1Z2lu
cy9QbHVnaW5Nb2R1bGVJbmZvLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFBsdWdpbk1vZHVsZUluZm9faAotI2Rl
ZmluZSBQbHVnaW5Nb2R1bGVJbmZvX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbHVnaW5EYXRhLmg+CiAKQEAgLTYzLDUgKzYyLDMgQEAgc3RydWN0IFBsdWdpbk1vZHVsZUlu
Zm8gewogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBQbHVnaW5Nb2R1
bGVJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMv
V0tDb250ZXh0UHJpdmF0ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9t
YWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbQppbmRleCBiMjU4NjMyMDQ3NjJiMmQ4MTU1NDkyZjMz
OTY1OTNiNGQ0ZDhlYTlhLi43ZjkzYzFlMzJhYTQxNDNmNGRiMjAyMGFiYWYzYWYwMjZhOGJiMTk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4
dFByaXZhdGVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL21hYy9X
S0NvbnRleHRQcml2YXRlTWFjLm1tCkBAIC0zOCw3ICszOCw4IEBACiAjaW1wb3J0ICJXS1NoYXJl
ZEFQSUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQ
b29sLmgiCi0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUGx1Z2luQmxhY2tsaXN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkdMQmxhY2tsaXN0Lmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBA
IC00OCw3ICs0OSw3IEBAIGJvb2wgV0tDb250ZXh0SXNQbHVnSW5VcGRhdGVBdmFpbGFibGUoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIHBsdWdJCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIFdLSXNQbHVnaW5VcGRhdGVB
dmFpbGFibGUoKE5TU3RyaW5nICopYWRvcHRDRihXS1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBwbHVnSW5CdW5kbGVJZGVudGlmaWVyUmVmKSkuZ2V0KCkpOworICAgIHJl
dHVybiBXZWJDb3JlOjpQbHVnaW5CbGFja2xpc3Q6OmlzUGx1Z2luVXBkYXRlQXZhaWxhYmxlKChO
U1N0cmluZyAqKWFkb3B0Q0YoV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgcGx1Z0luQnVuZGxlSWRlbnRpZmllclJlZikpLmdldCgpKTsKICNlbmRpZgogfQogCkBAIC0x
NTYsMTAgKzE1NywxOCBAQCBXS1N0cmluZ1JlZiBXS1BsdWdJbkluZm9Jc1NhbmRib3hlZEtleSgp
CiAKIGJvb2wgV0tDb250ZXh0U2hvdWxkQmxvY2tXZWJHTCgpCiB7Ci0gICAgcmV0dXJuIFdLU2hv
dWxkQmxvY2tXZWJHTCgpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gV2ViQ29yZTo6
V2ViR0xCbGFja2xpc3Q6OnNob3VsZEJsb2NrV2ViR0woKTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCiB9CiAKIGJvb2wgV0tDb250ZXh0U2hvdWxkU3VnZ2VzdEJsb2NrV2ViR0wo
KQogewotICAgIHJldHVybiBXS1Nob3VsZFN1Z2dlc3RCbG9ja2luZ1dlYkdMKCk7CisjaWYgUExB
VEZPUk0oTUFDKQorICAgIHJldHVybiBXZWJDb3JlOjpXZWJHTEJsYWNrbGlzdDo6c2hvdWxkU3Vn
Z2VzdEJsb2NraW5nV2ViR0woKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2lu
SW5mb1N0b3JlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1Bs
dWdpbkluZm9TdG9yZU1hYy5tbQppbmRleCA5NjIyNzY1ZTkyMmQyYmM2MTMwNTM0Yzg1ZWNiNWVh
ZTI1MGUzOTcxLi5hMWIwNmJkOTU4NGNhYzI5OGVhNDM5ZmYwY2RiYTAzOTkzNDY5ZmJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9tYWMvUGx1Z2luSW5mb1N0
b3JlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVn
aW5JbmZvU3RvcmVNYWMubW0KQEAgLTMxLDcgKzMxLDcgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
ICNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCiAjaW1wb3J0ICJTYW5kYm94VXRpbGl0
aWVzLmgiCi0jaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgPFdlYkNv
cmUvUGx1Z2luQmxhY2tsaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVOU1N0cmluZ0V4
dHJhcy5oPgogI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KQEAgLTc2LDcgKzc2LDcgQEAgYm9vbCBQbHVnaW5JbmZvU3RvcmU6OmdldFBsdWdpbkluZm8o
Y29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJgogc3RhdGljIGJvb2wg
c2hvdWxkQmxvY2tQbHVnaW4oY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQogewogICAg
IFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgbG9hZFBvbGljeSA9IFBsdWdpbkluZm9TdG9yZTo6ZGVm
YXVsdExvYWRQb2xpY3lGb3JQbHVnaW4ocGx1Z2luKTsKLSAgICByZXR1cm4gKGxvYWRQb2xpY3kg
PT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5KSB8fCAobG9hZFBvbGljeSA9PSBQbHVn
aW5Nb2R1bGVCbG9ja2VkRm9yQ29tcGF0aWJpbGl0eSk7CisgICAgcmV0dXJuIGxvYWRQb2xpY3kg
PT0gUGx1Z2luTW9kdWxlQmxvY2tlZEZvclNlY3VyaXR5IHx8IGxvYWRQb2xpY3kgPT0gUGx1Z2lu
TW9kdWxlQmxvY2tlZEZvckNvbXBhdGliaWxpdHk7CiB9CiAKIGJvb2wgUGx1Z2luSW5mb1N0b3Jl
OjpzaG91bGRVc2VQbHVnaW4oVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+JiBhbHJlYWR5TG9hZGVk
UGx1Z2lucywgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYgcGx1Z2luKQpAQCAtMTA4LDI3ICsxMDgs
MTYgQEAgYm9vbCBQbHVnaW5JbmZvU3RvcmU6OnNob3VsZFVzZVBsdWdpbihWZWN0b3I8UGx1Z2lu
TW9kdWxlSW5mbz4mIGFscmVhZHlMb2FkZWRQbHUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5s
aW5lIFBsdWdpbk1vZHVsZUxvYWRQb2xpY3kgV0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5VG9QbHVn
aW5Nb2R1bGVMb2FkUG9saWN5KFdLUGx1Z0luTW9kdWxlTG9hZFBvbGljeSB3a3NpUG9saWN5KQot
ewotCi0gICAgc3dpdGNoICh3a3NpUG9saWN5KSB7Ci0gICAgICAgIGNhc2UgV0tQbHVnSW5Nb2R1
bGVMb2FkUG9saWN5TG9hZE5vcm1hbGx5OgotICAgICAgICAgICAgcmV0dXJuIFBsdWdpbk1vZHVs
ZUxvYWROb3JtYWxseTsKLSAgICAgICAgY2FzZSBXS1BsdWdJbk1vZHVsZUxvYWRQb2xpY3lMb2Fk
VW5zYW5kYm94ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlTG9hZFVuc2FuZGJv
eGVkOwotICAgICAgICBjYXNlIFdLUGx1Z0luTW9kdWxlTG9hZFBvbGljeUJsb2NrZWRGb3JTZWN1
cml0eToKLSAgICAgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVCbG9ja2VkRm9yU2VjdXJpdHk7
Ci0gICAgICAgIGNhc2UgV0tQbHVnSW5Nb2R1bGVMb2FkUG9saWN5QmxvY2tlZEZvckNvbXBhdGli
aWxpdHk6Ci0gICAgICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tlZEZvckNvbXBhdGli
aWxpdHk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFBs
dWdpbk1vZHVsZUJsb2NrZWRGb3JTZWN1cml0eTsKLX0KLQogUGx1Z2luTW9kdWxlTG9hZFBvbGlj
eSBQbHVnaW5JbmZvU3RvcmU6OmRlZmF1bHRMb2FkUG9saWN5Rm9yUGx1Z2luKGNvbnN0IFBsdWdp
bk1vZHVsZUluZm8mIHBsdWdpbikKIHsKLSAgICByZXR1cm4gV0tQbHVnSW5Nb2R1bGVMb2FkUG9s
aWN5VG9QbHVnaW5Nb2R1bGVMb2FkUG9saWN5KFdLTG9hZFBvbGljeUZvclBsdWdpblZlcnNpb24o
cGx1Z2luLmJ1bmRsZUlkZW50aWZpZXIsIHBsdWdpbi52ZXJzaW9uU3RyaW5nKSk7CisgICAgc3dp
dGNoIChQbHVnaW5CbGFja2xpc3Q6OmxvYWRQb2xpY3lGb3JQbHVnaW5WZXJzaW9uKHBsdWdpbi5i
dW5kbGVJZGVudGlmaWVyLCBwbHVnaW4udmVyc2lvblN0cmluZykpIHsKKyAgICBjYXNlIFBsdWdp
bkJsYWNrbGlzdDo6TG9hZFBvbGljeTo6TG9hZE5vcm1hbGx5OgorICAgICAgICByZXR1cm4gUGx1
Z2luTW9kdWxlTG9hZE5vcm1hbGx5OworICAgIGNhc2UgUGx1Z2luQmxhY2tsaXN0OjpMb2FkUG9s
aWN5OjpCbG9ja2VkRm9yU2VjdXJpdHk6CisgICAgICAgIHJldHVybiBQbHVnaW5Nb2R1bGVCbG9j
a2VkRm9yU2VjdXJpdHk7CisgICAgY2FzZSBQbHVnaW5CbGFja2xpc3Q6OkxvYWRQb2xpY3k6OkJs
b2NrZWRGb3JDb21wYXRpYmlsaXR5OgorICAgICAgICByZXR1cm4gUGx1Z2luTW9kdWxlQmxvY2tl
ZEZvckNvbXBhdGliaWxpdHk7CisgICAgfQogfQogCiBQbHVnaW5Nb2R1bGVJbmZvIFBsdWdpbklu
Zm9TdG9yZTo6ZmluZFBsdWdpbldpdGhCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgYnVu
ZGxlSWRlbnRpZmllcikK
</data>
<flag name="review"
          id="309548"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>