<?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>142402</bug_id>
          
          <creation_ts>2015-03-06 09:52:58 -0800</creation_ts>
          <short_desc>[Content Extensions] Move compiling of content extensions to the UIProcess</short_desc>
          <delta_ts>2015-03-06 18:42:08 -0800</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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1074983</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 09:52:58 -0800</bug_when>
    <thetext>[Content Extensions] Move compiling of content extensions to the UIProcess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075070</commentid>
    <comment_count>1</comment_count>
      <attachid>248092</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 13:13:09 -0800</bug_when>
    <thetext>Created attachment 248092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075072</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 13:14:29 -0800</bug_when>
    <thetext>Attachment 248092 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:182:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/page/UserContentController.h:84:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 43 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>1075093</commentid>
    <comment_count>3</comment_count>
      <attachid>248092</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 14:24:10 -0800</bug_when>
    <thetext>Comment on attachment 248092
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        Convert CompiledContentExtension to be an abstract base class so that we can back it however
&gt; +        we like at the WebKit level. Since it doesn&apos;t necessarily use Vectors for its backing store
&gt; +        any more, change the interface to use pointer/length.

I would have gone an other way:

Give the compiler an abstract &quot;writer/reader&quot; class to manipulate the bytecode. There would be 2 kinds of writer: one backed by a file, the other backed by a vector. That way, we would avoid having the entire DFA in memory (at the cost of having to read back from the disk to link).

&gt; Source/WebCore/contentextensions/CompiledContentExtension.h:42
&gt; +struct CompiledContentExtensionData {
&gt; +    Vector&lt;DFABytecode&gt; bytecode;
&gt; +    Vector&lt;SerializedActionByte&gt; actions;
&gt; +};

This could be in ContentExtensionCompiler.h

&gt; Source/WebCore/contentextensions/ContentExtensionRule.h:70
&gt;      static Action deserialize(const Vector&lt;SerializedActionByte&gt;&amp;, unsigned location);

Isn&apos;t this dead?

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:40
&gt;      return *reinterpret_cast&lt;const IntType*&gt;(&amp;bytecode[index]);

ASSERT(index + sizeof(IntType) &lt;= m_bytecodeLength)

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:54
&gt; +        switch (static_cast&lt;DFABytecodeInstruction&gt;(m_bytecode[programCounter])) {

ASSERT(programCounter &lt;= m_bytecodeLength)

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:46
&gt; +        UNUSED_PARAM(m_bytecodeLength);

ASSERT(bytecode);
ASSERT(m_bytecodeLength)?

&gt; Source/WebCore/page/UserContentController.cpp:182
&gt; -void UserContentController::addUserContentFilter(const String&amp; name, const String&amp; ruleList)
&gt; +void UserContentController::addUserContentExtension(const String&amp; name, RefPtr&lt;ContentExtensions::CompiledContentExtension&gt; contentExtension)

Yeaah, I never liked the &quot;Filter&quot; :)

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:34
&gt; +class UserContentFilter final : public ObjectImpl&lt;Object::Type::UserContentFilter&gt; {

Still using the name Filter here?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:41
&gt; +    UserContentFilter(const WTF::String&amp; name, const WTF::String&amp; serializedRules);

Shouldn&apos;t this be private?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075108</commentid>
    <comment_count>4</comment_count>
      <attachid>248092</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-06 14:54:02 -0800</bug_when>
    <thetext>Comment on attachment 248092
Patch

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

Patch needs a little refining, but the concept is good.

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:157
&gt; +    return { WTF::move(bytecode), WTF::move(actions) };

I feel like you have redundant WTF::move calls, but better too many than too few.

&gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:55
&gt; +    const size_t m_bytecodeLength;

I used unsigned for the index in the byte code many times to keep the byte code small.  My jumps are only 4 bytes long.  Should we limit the size of byte code and actions to 2^32 bytes?

&gt; Source/WebKit2/Shared/WebCompiledContentExtensionData.cpp:38
&gt; +    encoder &lt;&lt; bytecode;
&gt; +    encoder &lt;&lt; actions;

Does this copy the whole vector across IPC?  I hope this is temporary.

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.cpp:31
&gt; +UserContentFilter::UserContentFilter(const WTF::String&amp; name, const WTF::String&amp; serializedRules)

Shouldn&apos;t we get rid of this?  Why is this file in the patch twice?

&gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:34
&gt; +class UserContentFilter final : public ObjectImpl&lt;Object::Type::UserContentFilter&gt; {

Same here.  Get rid of this file.

&gt; Source/WebKit2/UIProcess/API/C/WKUserContentFilterRef.cpp:41
&gt;  WKUserContentFilterRef WKUserContentFilterCreate(WKStringRef nameRef, WKStringRef serializedRulesRef)

Change this also to WKUserContentExtensionCreate

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:46
&gt; +        return os &lt;&lt; &quot;ContentFilterAction::CSSDisplayNone&quot;;

This is just copying the file, but in a follow-up patch we should print out the selector in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075110</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 14:57:24 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=248092&amp;action=review

&gt;&gt; Source/WebCore/contentextensions/CompiledContentExtension.h:42
&gt;&gt; +};
&gt; 
&gt; This could be in ContentExtensionCompiler.h

Ok, you use it outside WebCore, ignore my previous comment.

&gt; Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in:37
&gt; +    AddUserContentExtensions(Vector&lt;std::pair&lt;String, WebKit::WebCompiledContentExtensionData&gt;&gt; userContentFilters);

userContentFilters -&gt; userContentExtensions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075127</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 15:51:01 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 248092 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248092&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        Convert CompiledContentExtension to be an abstract base class so that we can back it however
&gt; &gt; +        we like at the WebKit level. Since it doesn&apos;t necessarily use Vectors for its backing store
&gt; &gt; +        any more, change the interface to use pointer/length.
&gt; 
&gt; I would have gone an other way:
&gt; 
&gt; Give the compiler an abstract &quot;writer/reader&quot; class to manipulate the
&gt; bytecode. There would be 2 kinds of writer: one backed by a file, the other
&gt; backed by a vector. That way, we would avoid having the entire DFA in memory
&gt; (at the cost of having to read back from the disk to link).

I completely agree this is the right way to go.  I was avoiding doing that in this patch as it was already getting to big. It will be part of follow up patches.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/CompiledContentExtension.h:42
&gt; &gt; +struct CompiledContentExtensionData {
&gt; &gt; +    Vector&lt;DFABytecode&gt; bytecode;
&gt; &gt; +    Vector&lt;SerializedActionByte&gt; actions;
&gt; &gt; +};
&gt; 
&gt; This could be in ContentExtensionCompiler.h

Done.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionRule.h:70
&gt; &gt;      static Action deserialize(const Vector&lt;SerializedActionByte&gt;&amp;, unsigned location);
&gt; 
&gt; Isn&apos;t this dead?

Yup, bad merge on my part.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:40
&gt; &gt;      return *reinterpret_cast&lt;const IntType*&gt;(&amp;bytecode[index]);
&gt; 
&gt; ASSERT(index + sizeof(IntType) &lt;= m_bytecodeLength)

Done.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.cpp:54
&gt; &gt; +        switch (static_cast&lt;DFABytecodeInstruction&gt;(m_bytecode[programCounter])) {
&gt; 
&gt; ASSERT(programCounter &lt;= m_bytecodeLength)

Done.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:46
&gt; &gt; +        UNUSED_PARAM(m_bytecodeLength);
&gt; 
&gt; ASSERT(bytecode);
&gt; ASSERT(m_bytecodeLength)?

I don&apos;t think this adds much.

&gt; 
&gt; &gt; Source/WebCore/page/UserContentController.cpp:182
&gt; &gt; -void UserContentController::addUserContentFilter(const String&amp; name, const String&amp; ruleList)
&gt; &gt; +void UserContentController::addUserContentExtension(const String&amp; name, RefPtr&lt;ContentExtensions::CompiledContentExtension&gt; contentExtension)
&gt; 
&gt; Yeaah, I never liked the &quot;Filter&quot; :)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:34
&gt; &gt; +class UserContentFilter final : public ObjectImpl&lt;Object::Type::UserContentFilter&gt; {
&gt; 
&gt; Still using the name Filter here?

No, weird diff thing.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:41
&gt; &gt; +    UserContentFilter(const WTF::String&amp; name, const WTF::String&amp; serializedRules);
&gt; 
&gt; Shouldn&apos;t this be private?

It can&apos;t be due to ObjC bridging stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075130</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 16:00:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 248092 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248092&amp;action=review
&gt; 
&gt; Patch needs a little refining, but the concept is good.
&gt; 
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:157
&gt; &gt; +    return { WTF::move(bytecode), WTF::move(actions) };
&gt; 
&gt; I feel like you have redundant WTF::move calls, but better too many than too
&gt; few.
&gt; 
&gt; &gt; Source/WebCore/contentextensions/DFABytecodeInterpreter.h:55
&gt; &gt; +    const size_t m_bytecodeLength;
&gt; 
&gt; I used unsigned for the index in the byte code many times to keep the byte
&gt; code small.  My jumps are only 4 bytes long.  Should we limit the size of
&gt; byte code and actions to 2^32 bytes?

Done.

&gt; 
&gt; &gt; Source/WebKit2/Shared/WebCompiledContentExtensionData.cpp:38
&gt; &gt; +    encoder &lt;&lt; bytecode;
&gt; &gt; +    encoder &lt;&lt; actions;
&gt; 
&gt; Does this copy the whole vector across IPC?  I hope this is temporary.

Yes. As mentioned in the ChangeLog. This will move to being shared/file back.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.cpp:31
&gt; &gt; +UserContentFilter::UserContentFilter(const WTF::String&amp; name, const WTF::String&amp; serializedRules)
&gt; 
&gt; Shouldn&apos;t we get rid of this?  Why is this file in the patch twice?

This is just svn-create-patch behavior. It&apos;s renaming and modifying the file.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/APIUserContentExtension.h:34
&gt; &gt; +class UserContentFilter final : public ObjectImpl&lt;Object::Type::UserContentFilter&gt; {
&gt; 
&gt; Same here.  Get rid of this file.

See above.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/WKUserContentFilterRef.cpp:41
&gt; &gt;  WKUserContentFilterRef WKUserContentFilterCreate(WKStringRef nameRef, WKStringRef serializedRulesRef)
&gt; 
&gt; Change this also to WKUserContentExtensionCreate

I&apos;ll have to do this later to avoid breaking Safari.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:46
&gt; &gt; +        return os &lt;&lt; &quot;ContentFilterAction::CSSDisplayNone&quot;;
&gt; 
&gt; This is just copying the file, but in a follow-up patch we should print out
&gt; the selector in this case.

See above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075134</commentid>
    <comment_count>8</comment_count>
      <attachid>248106</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 16:02:28 -0800</bug_when>
    <thetext>Created attachment 248106
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075137</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-06 16:05:43 -0800</bug_when>
    <thetext>Attachment 248106 did not pass style-queue:


ERROR: Source/WebCore/page/UserContentController.cpp:182:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebCore/page/UserContentController.h:84:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
ERROR: Source/WebKit2/CMakeLists.txt:242:  Alphabetical sorting problem. &quot;UIProcess/API/APIFrameInfo.cpp&quot; should be before &quot;UIProcess/WebsiteData/unix/WebsiteDataStoreUnix.cpp&quot;.  [list/order] [5]
Total errors found: 3 in 44 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>1075157</commentid>
    <comment_count>10</comment_count>
      <attachid>248106</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-06 16:41:50 -0800</bug_when>
    <thetext>Comment on attachment 248106
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionRule.cpp:44
&gt;  {
&gt;      switch (static_cast&lt;ActionType&gt;(actions[location])) {

ASSERT(location &lt;= actionsLength) since we no longer have the Vector&apos;s Release assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075199</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-06 18:42:08 -0800</bug_when>
    <thetext>Committed r181200: &lt;http://trac.webkit.org/changeset/181200&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248092</attachid>
            <date>2015-03-06 13:13:09 -0800</date>
            <delta_ts>2015-03-06 16:02:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142402-20150306131248.patch</filename>
            <type>text/plain</type>
            <size>103410</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE1LTAzLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gTW92
ZSBjb21waWxpbmcgb2YgY29udGVudCBleHRlbnNpb25zIHRvIHRoZSBVSVByb2Nlc3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQwMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5Db21waWxlZENvbnRl
bnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgQ29udmVydCBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24gdG8gYmUgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBzbyB0aGF0IHdlIGNhbiBiYWNrIGl0
IGhvd2V2ZXIKKyAgICAgICAgd2UgbGlrZSBhdCB0aGUgV2ViS2l0IGxldmVsLiBTaW5jZSBpdCBk
b2Vzbid0IG5lY2Vzc2FyaWx5IHVzZSBWZWN0b3JzIGZvciBpdHMgYmFja2luZyBzdG9yZQorICAg
ICAgICBhbnkgbW9yZSwgY2hhbmdlIHRoZSBpbnRlcmZhY2UgdG8gdXNlIHBvaW50ZXIvbGVuZ3Ro
LgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxp
c3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5oOgorICAgICAgICBDaGFuZ2UgY29tcGlsZVJ1bGVMaXN0IHRvIHJldHVybiBjb21waWxlZCBy
ZXN1bHQgYXMgdGhlIHJhdyBWZWN0b3JzIHJhdGhlciB0aGFuIGFzCisgICAgICAgIGEgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLCBzaW5jZSB0aGF0IGNsYXNzIGlzIG5vdyBhYnN0cmFjdC4gSXQg
aXMgdXAgdG8gdGhlIGNhbGxlcgorICAgICAgICB0byBjb3B5IHRoZSBkYXRhIGludG8gaXRzIGZp
bmFsIGhvbWUuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blJ1bGUuaDoKKyAgICAgICAgU3dpdGNoIEFjdGlvbjo6ZGVzZXJpYWxpemUgdG8gdGFrZSBwb2lu
dGVyL2xlbmd0aCByYXRoZXIgdGhhbiBhIFZlY3Rvci4KKworICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yVVJM
KToKKyAgICAgICAgUHVsbCBnZXR0aW5nIHRoZSBzZXJpYWxpemVkIGFjdGlvbnMgZnJvbSB0aGUg
Y29tcGlsZWQgZXh0ZW5zaW9uIG91dCBvZiB0aGUgbG9vcAorICAgICAgICB0byBhdm9pZCBjYWxs
aW5nIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzLiBQYXNzIHRoZSBieXRlY29k
ZSBhbmQgYWN0aW9ucworICAgICAgICBhcyBwb2ludGVyL2xlbmd0aCBwYWlycyByYXRoZXIgdGhh
biBWZWN0b3JzLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0Qml0
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcik6CisgICAgICAg
IFN3aXRjaCB0aGUgaW50ZXJwcmV0ZXIgdG8gdGFrZSBwb2ludGVyL2xlbmd0aCByYXRoZXIgdGhh
biBhIFZlY3Rvci4KKworICAgICAgICAqIHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50RmlsdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNv
bnRlbnRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgIFVuaWZ5IHRlcm1pbm9sb2d5
IHRvIHVzZSB0aGUgdGVybSBVc2VyQ29udGVudEV4dGVuc2lvbiByYXRoZXIgdGhhbiBVc2VyQ29u
dGVudEZpbHRlci4KKwogMjAxNS0wMy0wNiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2ViIEF1ZGlvXSBEZWNvZGluZyBzcGVjaWZpYyAubTRhIGZpbGUgY3Jh
c2hlcyB0YWIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTgxMTc3
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLVJlZjxDb21waWxlZENv
bnRlbnRFeHRlbnNpb24+IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFZlY3RvcjxE
RkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYmIGFj
dGlvbnMpCi17Ci0gICAgcmV0dXJuIFdURjo6YWRvcHRSZWYoKm5ldyBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24oV1RGOjptb3ZlKGJ5dGVjb2RlKSwgV1RGOjptb3ZlKGFjdGlvbnMpKSk7Ci19Ci0K
LUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFZlY3Rv
cjxERkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYm
IGFjdGlvbnMpCi0gICAgOiBtX2J5dGVjb2RlKFdURjo6bW92ZShieXRlY29kZSkpCi0gICAgLCBt
X2FjdGlvbnMoV1RGOjptb3ZlKGFjdGlvbnMpKQorQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNSAr
MzQsMjQgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LQogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotY2xhc3MgQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbj4gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uPiBjcmVhdGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmLCBWZWN0b3I8U2VyaWFsaXplZEFjdGlv
bkJ5dGU+JiYpOwotCi0gICAgY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYgYWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9uczsgfQorc3RydWN0
IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgeworICAgIFZlY3RvcjxERkFCeXRlY29kZT4g
Ynl0ZWNvZGU7CisgICAgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiBhY3Rpb25zOworfTsK
IAotcHJpdmF0ZToKLSAgICBDb21waWxlZENvbnRlbnRFeHRlbnNpb24oVmVjdG9yPERGQUJ5dGVj
b2RlPiYmLCBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYpOworY2xhc3MgV0VCQ09SRV9F
WFBPUlQgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPENvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4geworcHVibGljOgorICAgIHZpcnR1YWwgfkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbigpOwogCi0gICAgVmVjdG9yPERGQUJ5dGVjb2RlPiBtX2J5
dGVjb2RlOwotICAgIFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4gbV9hY3Rpb25zOworICAg
IHZpcnR1YWwgY29uc3QgREZBQnl0ZWNvZGUqIGJ5dGVjb2RlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgc2l6ZV90IGJ5dGVjb2RlTGVuZ3RoKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29u
c3QgU2VyaWFsaXplZEFjdGlvbkJ5dGUqIGFjdGlvbnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBzaXplX3QgYWN0aW9uc0xlbmd0aCgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5j
cHAJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDcgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogfQogCiAKLVJl
ZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJpbmcm
IHJ1bGVMaXN0KQorQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb21waWxlUnVsZUxpc3Qo
Y29uc3QgU3RyaW5nJiBydWxlTGlzdCkKIHsKICAgICBhdXRvIHBhcnNlZFJ1bGVMaXN0ID0gcGFy
c2VSdWxlTGlzdChydWxlTGlzdCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBSZWY8Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBjb21waWxlUnVsCiAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21w
aWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICBjb21waWxlci5jb21waWxlKCk7CiAKLSAgICByZXR1
cm4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSwg
V1RGOjptb3ZlKGFjdGlvbnMpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnl0ZWNvZGUpLCBX
VEY6Om1vdmUoYWN0aW9ucykgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFt
ZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotV0VCQ09SRV9FWFBPUlQgUmVmPENvbXBpbGVk
Q29udGVudEV4dGVuc2lvbj4gY29tcGlsZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYpOworV0VCQ09S
RV9FWFBPUlQgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb21waWxlUnVsZUxpc3QoY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9D
b250ZW50RXh0ZW5zaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCShyZXZpc2lvbiAxODExNzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgQ29udGVudEV4dGVuc2lvblJ1
bGU6OkNvbnRlbnRFeHRlbnNpb25SdQogICAgIEFTU0VSVCghbV90cmlnZ2VyLnVybEZpbHRlci5p
c0VtcHR5KCkpOwogfQogCi1BY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBWZWN0b3I8
U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiBhY3Rpb25zLCB1bnNpZ25lZCBsb2NhdGlvbikKK0FjdGlv
biBBY3Rpb246OmRlc2VyaWFsaXplKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25z
LCBjb25zdCBzaXplX3QgYWN0aW9uc0xlbmd0aCwgdW5zaWduZWQgbG9jYXRpb24pCiB7CiAgICAg
c3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihhY3Rpb25zW2xvY2F0aW9uXSkpIHsKICAg
ICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKQEAgLTUyLDE1ICs1MiwxNSBAQCBBY3Rp
b24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBWZWN0b3I8CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZTog
ewogICAgICAgICB1bnNpZ25lZCBzdHJpbmdTdGFydEluZGV4ID0gbG9jYXRpb24gKyBzaXplb2Yo
QWN0aW9uVHlwZSkgKyBzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKGJvb2wpOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVChhY3Rpb25zLnNpemUoKSA+PSBzdHJpbmdTdGFydEluZGV4KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBzdHJpbmdTdGFydEluZGV4KTsKICAg
ICAgICAgdW5zaWduZWQgc2VsZWN0b3JMZW5ndGggPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5cGUpXSk7CiAgICAg
ICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlv
blR5cGUpICsgc2l6ZW9mKHVuc2lnbmVkKV07CiAgICAgICAgIAogICAgICAgICBpZiAod2lkZUNo
YXJhY3RlcnMpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnMuc2l6ZSgpID49
IHN0cmluZ1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBzdHJpbmdTdGFydEluZGV4
ICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAgICAgIHJldHVybiBB
Y3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmUsIFN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4oJmFjdGlvbnNbc3RyaW5nU3RhcnRJbmRleF0pLCBzZWxlY3Rvckxlbmd0
aCkpOwogICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlvbnMuc2l6ZSgpID49
IHN0cmluZ1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49IHN0cmluZ1N0YXJ0SW5kZXggKyBz
ZWxlY3Rvckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOwogICAgICAgICByZXR1cm4gQWN0aW9uKEFj
dGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lLCBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBM
Q2hhcio+KCZhY3Rpb25zW3N0cmluZ1N0YXJ0SW5kZXhdKSwgc2VsZWN0b3JMZW5ndGgpKTsKICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0
ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHN0cnVjdCBBY3Rpb24gewogICAgICAgICByZXR1
cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9jc3NTZWxlY3RvciA9
PSBvdGhlci5tX2Nzc1NlbGVjdG9yOwogICAgIH0KKyAgICBzdGF0aWMgQWN0aW9uIGRlc2VyaWFs
aXplKGNvbnN0IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zLCBjb25zdCBzaXplX3QgYWN0
aW9uc0xlbmd0aCwgdW5zaWduZWQgbG9jYXRpb24pOwogICAgIHN0YXRpYyBBY3Rpb24gZGVzZXJp
YWxpemUoY29uc3QgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYsIHVuc2lnbmVkIGxvY2F0
aW9uKTsKIAogICAgIEFjdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNC
YWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9u
cy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3BwCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NywxMSArNjcsMTQgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOgogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodXJsU3RyaW5nLmNv
bnRhaW5zT25seUFTQ0lJKCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBvbmx5IGNvbnRhaW4gQVND
SUkgY2hhcmFjdGVycy4gVGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1bWVzIHRoZSBpbnB1dCBp
cyBBU0NJSS4iKTsKICAgICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nID0gdXJsU3RyaW5nLnV0
ZjgoKTsKIAotICAgIFZlY3RvcjxBY3Rpb24+IGFjdGlvbnM7CisgICAgVmVjdG9yPEFjdGlvbj4g
ZmluYWxBY3Rpb25zOwogICAgIGZvciAoYXV0byYgY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDog
bV9jb250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkgewotICAgICAgICBERkFCeXRlY29kZUludGVy
cHJldGVyIGludGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNvZGUoKSk7
CisgICAgICAgIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgaW50ZXJwcmV0ZXIoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uLT5ieXRlY29kZSgpLCBjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmJ5dGVj
b2RlTGVuZ3RoKCkpOwogICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIHRy
aWdnZXJlZEFjdGlvbnMgPSBpbnRlcnByZXRlci5pbnRlcnByZXQodXJsQ1N0cmluZyk7CiAgICAg
ICAgIAorICAgICAgICBjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucyA9IGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi0+YWN0aW9ucygpOworICAgICAgICBjb25zdCBzaXplX3QgYWN0
aW9uc0xlbmd0aCA9IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+YWN0aW9uc0xlbmd0aCgpOwor
ICAgICAgICAKICAgICAgICAgaWYgKCF0cmlnZ2VyZWRBY3Rpb25zLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhY3Rpb25Mb2NhdGlvbnM7CiAgICAgICAgICAgICBh
Y3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh0cmlnZ2VyZWRBY3Rpb25zLnNp
emUoKSk7CkBAIC04MSwxNCArODQsMTQgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVuc2lv
bnNCYWNrZW5kOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBBZGQgYWN0aW9ucyBpbiBy
ZXZlcnNlIG9yZGVyIHRvIHByb3Blcmx5IGRlYWwgd2l0aCBJZ25vcmVQcmV2aW91c1J1bGVzLgog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYWN0aW9uTG9jYXRpb25zLnNpemUoKTsgaTsg
aS0tKSB7Ci0gICAgICAgICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxp
emUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLT5hY3Rpb25zKCksIGFjdGlvbkxvY2F0aW9uc1tp
IC0gMV0pOworICAgICAgICAgICAgICAgIEFjdGlvbiBhY3Rpb24gPSBBY3Rpb246OmRlc2VyaWFs
aXplKGFjdGlvbnMsIGFjdGlvbnNMZW5ndGgsIGFjdGlvbkxvY2F0aW9uc1tpIC0gMV0pOwogICAg
ICAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09IEFjdGlvblR5cGU6Oklnbm9yZVByZXZp
b3VzUnVsZXMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGFj
dGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgICAgICAgICAgICAgZmluYWxBY3Rpb25zLmFwcGVu
ZChhY3Rpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBh
Y3Rpb25zOworICAgIHJldHVybiBmaW5hbEFjdGlvbnM7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENv
bnRlbnRFeHRlbnNpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9E
RkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgx
MTc3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAogdGVtcGxhdGUgPHR5cGVu
YW1lIEludFR5cGU+Ci1zdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBWZWN0b3I8
REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdW5zaWduZWQgaW5kZXgpCitzdGF0aWMgaW5saW5lIElu
dFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUsIHVuc2lnbmVkIGluZGV4
KQogewogICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnRUeXBlKj4oJmJ5dGVj
b2RlW2luZGV4XSk7CiB9CkBAIC01MSw3ICs1MSw3IEBAIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXI6
OkFjdGlvbnMgREZBQnl0ZWMKICAgICAKICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgdGVybWlu
YXRlIGlmIGludGVycHJldGluZyBjb3JyZWN0bHkgY29tcGlsZWQgYnl0ZWNvZGUuCiAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxERkFCeXRlY29kZUluc3Ry
dWN0aW9uPihieXRlY29kZVtwcm9ncmFtQ291bnRlcl0pKSB7CisgICAgICAgIHN3aXRjaCAoc3Rh
dGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtwcm9ncmFtQ291bnRl
cl0pKSB7CiAKICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9uOjpUZXJtaW5hdGU6
CiAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKQEAgLTYwLDIwICs2MCwyMCBAQCBERkFCeXRl
Y29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAgICAvLyBDaGVjayB0
byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhlIHZhbHVlIHN0b3Jl
ZCB3aXRoIHRoZSBieXRlY29kZS4KICAgICAgICAgICAgIGlmICghdXJsW3VybEluZGV4XSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsgLy8gUmVhY2hlZCBudWxsIGNoYXJhY3RlciBh
dCBlbmQuCi0gICAgICAgICAgICBpZiAodXJsW3VybEluZGV4XSA9PSBnZXRCaXRzPHVpbnQ4X3Q+
KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSB7Ci0gICAg
ICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVkPihieXRlY29kZSwg
cHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsK
KyAgICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWludDhfdD4obV9ieXRl
Y29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpKSkgeworICAgICAgICAg
ICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgcHJv
Z3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKICAg
ICAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0
aGUgREZBLgogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50
ZXIgKz0gaW5zdHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9u
OjpDaGVja1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgREZBQnl0
ZWNvZGVJbnN0cnVjdGlvbjo6SnVtcDoKLSAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0
Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVj
b2RlKSk7CisgICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1f
Ynl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSk7CiAgICAgICAg
ICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICBhY3Rpb25zLmFkZChzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9m
KERGQUJ5dGVjb2RlKSkpKTsKKyAgICAgICAgICAgIGFjdGlvbnMuYWRkKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNp
emVvZihERkFCeXRlY29kZSkpKSk7CiAgICAgICAgICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0
cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFj
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2
aXNpb24gMTgxMTc3KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0
ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSwxMSBAQCBuYW1l
c3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewogCiBjbGFzcyBERkFCeXRlY29kZUludGVycHJldGVy
IHsKIHB1YmxpYzoKLSAgICBERkFCeXRlY29kZUludGVycHJldGVyKGNvbnN0IFZlY3RvcjxERkFC
eXRlY29kZT4mIGJ5dGVjb2RlKQotICAgICAgICA6IGJ5dGVjb2RlKGJ5dGVjb2RlKQorICAgIERG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIoY29uc3QgREZBQnl0ZWNvZGUqIGJ5dGVjb2RlLCBzaXplX3Qg
Ynl0ZWNvZGVMZW5ndGgpCisgICAgICAgIDogbV9ieXRlY29kZShieXRlY29kZSkKKyAgICAgICAg
LCBtX2J5dGVjb2RlTGVuZ3RoKGJ5dGVjb2RlTGVuZ3RoKQogICAgIHsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG1fYnl0ZWNvZGVMZW5ndGgpOwogICAgIH0KICAgICAKICAgICB0eXBlZGVmIEhhc2hT
ZXQ8dWludDY0X3QsIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+IEFjdGlvbnM7CkBAIC00OSw3ICs1MSw4IEBA
IHB1YmxpYzoKICAgICBBY3Rpb25zIGludGVycHJldChjb25zdCBDU3RyaW5nJik7CiAKIHByaXZh
dGU6Ci0gICAgY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGU7CisgICAgY29uc3Qg
REZBQnl0ZWNvZGUqIG1fYnl0ZWNvZGU7CisgICAgY29uc3Qgc2l6ZV90IG1fYnl0ZWNvZGVMZW5n
dGg7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTgx
MTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksMTUgKzE3OSwxNSBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJv
bGxlcjo6cmVtb3ZlVXNlck1lCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lP
TlMpCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRGaWx0ZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHJ1bGVMaXN0KQordm9pZCBVc2VyQ29udGVu
dENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbnRl
bnRFeHRlbnNpb24pCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQogICAg
ICAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50
RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPigpOwogICAgIAotICAgIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQtPmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgQ29udGVudEV4
dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChydWxlTGlzdCkpOworICAgIG1fY29udGVudEV4dGVu
c2lvbkJhY2tlbmQtPmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgY29udGVudEV4dGVuc2lvbik7
CiB9CiAKLXZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEZpbHRl
cihjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghbV9j
b250ZW50RXh0ZW5zaW9uQmFja2VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk1LDcgKzE5NSw3
IEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ28KICAgICBtX2NvbnRl
bnRFeHRlbnNpb25CYWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCi12
b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCkK
K3ZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lv
bnMoKQogewogICAgIGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5o
CShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFVzZXJTdHls
ZVNoZWV0OwogY2xhc3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKIAogbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zIHsKK2NsYXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKIGNs
YXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDsKIHN0cnVjdCBBY3Rpb247CiB9CkBAIC04MCwx
MiArODEsMTEgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgdGFrZSBhIHBvaW50ZXIgdG8g
YSBjb21waWxlZCBVc2VyQ29udGVudEZpbHRlci4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFk
ZFVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBydWxl
TGlzdCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyQ29udGVudEZpbHRlcihj
b25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsVXNl
ckNvbnRlbnRGaWx0ZXJzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyQ29udGVu
dEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAgICAgCi0gICAg
Ly8gRklYTUU6IENvbnNpZGVyIHB1dHRpbmcgdGhpcyAoYW5kIG90aGVyIGZ1dHVyZSBjb250ZW50
IGZpbHRlciBwcmVkaWNhdGVzKSBpbiBpdHMgb3duIGNsYXNzLgorICAgIC8vIEZJWE1FOiBDb25z
aWRlciBwdXR0aW5nIHRoaXMgKGFuZCBvdGhlciBmdXR1cmUgY29udGVudCBleHRlbnNpb24gcHJl
ZGljYXRlcykgaW4gaXRzIG93biBjbGFzcy4KICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6
OkFjdGlvbj4gYWN0aW9uc0ZvclVSTChjb25zdCBVUkwmKTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjIgQEAKKzIwMTUtMDMtMDYgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBNb3ZlIGNvbXBpbGlu
ZyBvZiBjb250ZW50IGV4dGVuc2lvbnMgdG8gdGhlIFVJUHJvY2VzcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5o
OgorICAgICAgICBSZW5hbWUgVXNlckNvbnRlbnRGaWx0ZXIgdHlwZSB0byBVc2VyQ29udGVudEV4
dGVuc2lvbiB0byBtYXRjaCBuZXcgdW5pZmllZCBuYW1pbmcuCisKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb246OmJ5dGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpieXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6YWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6YWN0aW9uc0xlbmd0aCk6CisgICAgICAgICogU2hhcmVkL1dl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgQWRkIG5ldyBXZWJL
aXQyIGltcGxlbWVudGF0aW9uIG9mIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi4gUmlnaHQgbm93
IGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQKKyAgICAgICAgV2ViQ29yZSBiYXNlZCBDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24sIGJ1dCBpbiBzdWJzZXF1ZW50IHBhdGNoZXMsIGl0IHdpbGwgdXNl
IHNoYXJlZC9maWxlIGJhY2tlZAorICAgICAgICBtZW1vcnkuCisKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUpOgorICAgICAg
ICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmg6IEFkZGVkLgorICAg
ICAgICBBZGQgZW5jb2RhYmxlL2RlY29kYWJsZSBob2xkZXIgZm9yIHRoZSBjb21waWxlZCBjb250
ZW50IGV4dGVuc2lvbiBkYXRhIGZvciB1c2UgaW4gSVBDLiBSaWdodAorICAgICAgICBub3cgaXQg
aXMgZG9pbmcgdGhlIG5haXZlIHRoaW5nIGFuZCBhbHdheXMgY29weWluZyB0aGUgZGF0YSwgYnV0
IGluIHN1YnNlcXVlbnQgcGF0Y2hlcywgaXQgd2lsbAorICAgICAgICB1c2Ugc2hhcmVkL2ZpbGUg
YmFja2VkIG1lbW9yeS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQYWdlR3JvdXBEYXRhLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwRGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUdyb3VwRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFn
ZUdyb3VwRGF0YS5oOgorICAgICAgICBSZW5hbWUgbWVtYmVyIHRvIG1hdGNoIG5ldyB1bmlmaWNh
dGlvbiBvbiB0aGUgbmFtZSB1c2VyQ29udGVudEV4dGVuc2lvbi4gQ2hhbmdlIHRoZSB2YWx1ZSBm
cm9tCisgICAgICAgIHRoZSBzZXJpYWxpemVkIEpTT04gKGFzIGEgU3RyaW5nKSB0byBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRGaWx0ZXIuY3BwLgorICAgICAgICAoQVBJOjpVc2VyQ29u
dGVudEV4dGVuc2lvbjo6VXNlckNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoQVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6
VXNlckNvbnRlbnRGaWx0ZXI6OlVzZXJDb250ZW50RmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEFQSTo6VXNlckNvbnRlbnRGaWx0ZXI6On5Vc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmgu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5oOiBSZW1v
dmVkLgorICAgICAgICBSZW5hbWVkIFVzZXJDb250ZW50RmlsdGVyIHRvIEFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLiBVcGRhdGVkIHRvIHN0b3JlIHRoZSBjb21waWxlZCBleHRlbnNpb24gKGFzIGEg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKQorICAgICAgICByYXRoZXIgdGhhbiB0aGUgc2Vy
aWFsaXplZCBKU09OLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXS1Bh
Z2VHcm91cEFkZFVzZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLUGFnZUdyb3VwUmVtb3Zl
VXNlckNvbnRlbnRGaWx0ZXIpOgorICAgICAgICAoV0tQYWdlR3JvdXBSZW1vdmVBbGxVc2VyQ29u
dGVudEZpbHRlcnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclJlZi5jcHA6CisgICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJD
b250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxs
VXNlckNvbnRlbnRGaWx0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxl
ciBfYWRkVXNlckNvbnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250
cm9sbGVyIF9yZW1vdmVVc2VyQ29udGVudEZpbHRlcjpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29u
dGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVyc10pOgorICAgICAgICBV
cGRhdGUgZm9yIHJlbmFtZSBvZiBBUElVc2VyQ29udGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4
dGVuc2lvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RmlsdGVy
UmVmLmNwcDoKKyAgICAgICAgKFdLVXNlckNvbnRlbnRGaWx0ZXJHZXRUeXBlSUQpOgorICAgICAg
ICAoV0tVc2VyQ29udGVudEZpbHRlckNyZWF0ZSk6CisgICAgICAgIFVwZGF0ZSBmb3IgcmVuYW1l
IG9mIEFQSVVzZXJDb250ZW50RmlsdGVyIC0+IFVzZXJDb250ZW50RXh0ZW5zaW9uLiBBbHNvIG1h
a2UgV0tVc2VyQ29udGVudEZpbHRlckNyZWF0ZSBlYWdlcmx5CisgICAgICAgIGNvbXBpbGUgcnVs
ZSBsaXN0IHRvIGEgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAgICgt
W19XS1VzZXJDb250ZW50RmlsdGVyIGluaXRXaXRoTmFtZTpzZXJpYWxpemVkUnVsZXM6XSk6Cisg
ICAgICAgICgtW19XS1VzZXJDb250ZW50RmlsdGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bX1dL
VXNlckNvbnRlbnRGaWx0ZXIgX2FwaU9iamVjdF0pOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFt
ZSBvZiBBUElVc2VyQ29udGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4dGVuc2lvbi4gQWxzbyBt
YWtlIGluaXRXaXRoTmFtZTpzZXJpYWxpemVkUnVsZXM6IGVhZ2VybHkKKyAgICAgICAgY29tcGls
ZSBydWxlIGxpc3QgdG8gYSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmg6
CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFtZSBv
ZiBBUElVc2VyQ29udGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4dGVuc2lvbi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQ
cm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJDb250
ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
clByb3h5OjphZGRVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
R3JvdXA6OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZUdyb3VwOjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VHcm91cDo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUdyb3VwOjphZGRVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VHcm91cDo6cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlR3JvdXA6OnJlbW92ZUFsbFVzZXJDb250ZW50
RmlsdGVycyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5oOgor
ICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRl
bnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEZpbHRlcnMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZXJDb250ZW50RmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXIubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VH
cm91cFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OldlYlBh
Z2VHcm91cFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OmFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6
OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdy
b3VwUHJveHk6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VHcm91cFByb3h5OjphZGRVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VHcm91cFByb3h5OjpyZW1vdmVVc2VyQ29udGVudEZpbHRl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VHcm91cFByb3h5OjpyZW1vdmVB
bGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlR3JvdXBQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgUGlwZSB0aGUgY29tcGlsZWQg
ZXh0ZW5zaW9uIGZyb20gdGhlIFVJUHJvY2VzcyB0byB0aGUgV2ViUHJvY2Vzcy4KKwogMjAxNS0w
My0wNiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lP
TiAocjE4MDc4Mik6IERhdGEgRGV0ZWN0b3IgcG9wb3ZlcnMgYXJlIG5vdCBkaXNtaXNzZWQgb24g
c2Nyb2xsIG9yIHpvb20KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKworI2lmIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWY8V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShWZWN0
b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVjb2RlLCBW
ZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYm
IGFjdGlvbnMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uKFdURjo6bW92ZShieXRlY29kZSksIFdURjo6bW92ZShhY3Rpb25zKSkpOworfQor
CitXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bihWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYmIGJ5dGVj
b2RlLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25C
eXRlPiYmIGFjdGlvbnMpCisgICAgOiBtX2RhdGEgeyBXVEY6Om1vdmUoYnl0ZWNvZGUpLCBXVEY6
Om1vdmUoYWN0aW9ucykgfQoreworfQorCitXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oKQoreworfQorCitjb25zdCBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6
Ynl0ZWNvZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuYnl0ZWNvZGUuZGF0YSgpOwor
fQorCitzaXplX3QgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZUxlbmd0aCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS5ieXRlY29kZS5zaXplKCk7Cit9CisKK2NvbnN0
IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uOjphY3Rpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9k
YXRhLmFjdGlvbnMuZGF0YSgpOworfQorCitzaXplX3QgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjphY3Rpb25zTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLmFjdGlvbnMu
c2l6ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbl9oCisjZGVmaW5lIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbl9oCisKKyNp
ZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBjcmVhdGUoVmVjdG9yPFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiwgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJik7CisgICAgdmlydHVhbCB+V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uKCk7CisKKyAgICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b25EYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworcHJpdmF0ZToKKyAgICBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZT4mJiwgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpT
ZXJpYWxpemVkQWN0aW9uQnl0ZT4mJik7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZSogYnl0ZWNvZGUoKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHNpemVfdCBieXRlY29kZUxlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rp
b25CeXRlKiBhY3Rpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBzaXplX3QgYWN0
aW9uc0xlbmd0aCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGEgbV9kYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorI2VuZGlmIC8vIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5o
IgorCisjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGE6OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IGJ5dGVjb2RlOworICAgIGVuY29kZXIgPDwgYWN0aW9uczsK
K30KKworYm9vbCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUoSVBDOjpB
cmd1bWVudERlY29kZXImIGRlY29kZXIsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEm
IGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmJ5dGVjb2RlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5hY3Rpb25zKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbkRhdGFfaAorI2RlZmluZSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNz
IEFyZ3VtZW50RGVjb2RlcjsKK2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgeworcHVi
bGljOgorICAgIHZvaWQgZW5jb2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YSYpOworCisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZT4gYnl0ZWNvZGU7CisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKK307CisKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjZW5kaWYgLy8gV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFn
ZUdyb3VwRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBh
Z2VHcm91cERhdGEuY3BwCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViUGFnZUdyb3VwRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
dm9pZCBXZWJQYWdlR3JvdXBEYXRhOjplbmNvZGUoSVBDOjpBcmd1bQogICAgIGVuY29kZXIgPDwg
dXNlclN0eWxlU2hlZXRzOwogICAgIGVuY29kZXIgPDwgdXNlclNjcmlwdHM7CiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBlbmNvZGVyIDw8IHVzZXJDb250ZW50RmlsdGVyczsK
KyAgICBlbmNvZGVyIDw8IHVzZXJDb250ZW50RXh0ZW5zaW9uczsKICNlbmRpZgogfQogCkBAIC01
OCw3ICs1OCw3IEBAIGJvb2wgV2ViUGFnZUdyb3VwRGF0YTo6ZGVjb2RlKElQQzo6QXJndW0KICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEudXNlclNjcmlwdHMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKGRhdGEudXNlckNvbnRlbnRGaWx0ZXJzKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGRhdGEudXNlckNvbnRlbnRFeHRlbnNpb25zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFn
ZUdyb3VwRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdl
R3JvdXBEYXRhLmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJQYWdlR3JvdXBEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgV2ViUGFnZUdyb3VwRGF0YV9oCiAjZGVmaW5lIFdlYlBhZ2VHcm91cERhdGFfaAogCisjaW5j
bHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvVXNlclNjcmlwdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgV2ViUGFnZUdy
b3VwRGF0YSB7CiAgICAgVmVjdG9yPFdlYkNvcmU6OlVzZXJTY3JpcHQ+IHVzZXJTY3JpcHRzOwog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBIYXNoTWFwPFN0cmluZywgU3Ry
aW5nPiB1c2VyQ29udGVudEZpbHRlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFdlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGE+IHVzZXJDb250ZW50RXh0ZW5zaW9uczsKICNlbmRpZgogfTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZpc2lvbiAxODEx
NzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAgICAgVVJMLAogICAgICAgICBVUkxS
ZXF1ZXN0LAogICAgICAgICBVUkxSZXNwb25zZSwKKyAgICAgICAgVXNlckNvbnRlbnRFeHRlbnNp
b24sCiAgICAgICAgIFVzZXJDb250ZW50VVJMUGF0dGVybiwKLSAgICAgICAgVXNlckNvbnRlbnRG
aWx0ZXIsCiAgICAgICAgIFVzZXJTY3JpcHQsCiAgICAgICAgIFdlYkFyY2hpdmUsCiAgICAgICAg
IFdlYkFyY2hpdmVSZXNvdXJjZSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlR3JvdXAuY3BwCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOCBAQAogI2lu
Y2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRl
ICJBUElVc2VyQ29udGVudEZpbHRlci5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5z
aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCkBAIC0xNzMsMjIgKzE3NCwyMiBAQCB2b2lk
IFdlYlBhZ2VHcm91cDo6cmVtb3ZlQWxsVXNlckNvbnRlbnQoCiB9CiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQotdm9pZCBXZWJQYWdlR3JvdXA6OmFkZFVzZXJDb250ZW50RmlsdGVy
KGNvbnN0IEFQSTo6VXNlckNvbnRlbnRGaWx0ZXImIHVzZXJDb250ZW50RmlsdGVyKQordm9pZCBX
ZWJQYWdlR3JvdXA6OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IEFQSTo6VXNlckNvbnRl
bnRFeHRlbnNpb24mIHVzZXJDb250ZW50RXh0ZW5zaW9uKQogewotICAgIG1fZGF0YS51c2VyQ29u
dGVudEZpbHRlcnMuc2V0KHVzZXJDb250ZW50RmlsdGVyLm5hbWUoKSwgdXNlckNvbnRlbnRGaWx0
ZXIuc2VyaWFsaXplZFJ1bGVzKCkpOwotICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0luR3JvdXAoTWVz
c2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpBZGRVc2VyQ29udGVudEZpbHRlcih1c2VyQ29udGVu
dEZpbHRlci5uYW1lKCksIHVzZXJDb250ZW50RmlsdGVyLnNlcmlhbGl6ZWRSdWxlcygpKSwgbV9k
YXRhLnBhZ2VHcm91cElEKTsKKyAgICBtX2RhdGEudXNlckNvbnRlbnRFeHRlbnNpb25zLnNldCh1
c2VyQ29udGVudEV4dGVuc2lvbi5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLmNvbXBpbGVk
RXh0ZW5zaW9uKCkuZGF0YSgpKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXNJbkdyb3VwKE1lc3Nh
Z2VzOjpXZWJQYWdlR3JvdXBQcm94eTo6QWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRl
bnRFeHRlbnNpb24ubmFtZSgpLCB1c2VyQ29udGVudEV4dGVuc2lvbi5jb21waWxlZEV4dGVuc2lv
bigpLmRhdGEoKSksIG1fZGF0YS5wYWdlR3JvdXBJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZUdyb3Vw
OjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb25zdCBTdHJpbmcmIGNvbnRlbnRGaWx0ZXJOYW1l
KQordm9pZCBXZWJQYWdlR3JvdXA6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgY29udGVudEV4dGVuc2lvbk5hbWUpCiB7Ci0gICAgbV9kYXRhLnVzZXJDb250ZW50Rmls
dGVycy5yZW1vdmUoY29udGVudEZpbHRlck5hbWUpOwotICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0lu
R3JvdXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpSZW1vdmVVc2VyQ29udGVudEZpbHRl
cihjb250ZW50RmlsdGVyTmFtZSksIG1fZGF0YS5wYWdlR3JvdXBJRCk7CisgICAgbV9kYXRhLnVz
ZXJDb250ZW50RXh0ZW5zaW9ucy5yZW1vdmUoY29udGVudEV4dGVuc2lvbk5hbWUpOworICAgIHNl
bmRUb0FsbFByb2Nlc3Nlc0luR3JvdXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpSZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbihjb250ZW50RXh0ZW5zaW9uTmFtZSksIG1fZGF0YS5wYWdl
R3JvdXBJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZUdyb3VwOjpyZW1vdmVBbGxVc2VyQ29udGVudEZp
bHRlcnMoKQordm9pZCBXZWJQYWdlR3JvdXA6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9u
cygpCiB7Ci0gICAgbV9kYXRhLnVzZXJDb250ZW50RmlsdGVycy5jbGVhcigpOwotICAgIHNlbmRU
b0FsbFByb2Nlc3Nlc0luR3JvdXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpSZW1vdmVB
bGxVc2VyQ29udGVudEZpbHRlcnMoKSwgbV9kYXRhLnBhZ2VHcm91cElEKTsKKyAgICBtX2RhdGEu
dXNlckNvbnRlbnRFeHRlbnNpb25zLmNsZWFyKCk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzSW5H
cm91cChNZXNzYWdlczo6V2ViUGFnZUdyb3VwUHJveHk6OlJlbW92ZUFsbFVzZXJDb250ZW50RXh0
ZW5zaW9ucygpLCBtX2RhdGEucGFnZUdyb3VwSUQpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NjcsOSArNjcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudCgpOwog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZFVzZXJDb250ZW50
RmlsdGVyKGNvbnN0IEFQSTo6VXNlckNvbnRlbnRGaWx0ZXImKTsKLSAgICB2b2lkIHJlbW92ZVVz
ZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNv
bnRlbnRGaWx0ZXJzKCk7CisgICAgdm9pZCBhZGRVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBB
UEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4
dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0
ZW5zaW9ucygpOwogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2
aXNpb24gMTgwOTk5KQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJD
b250ZW50RmlsdGVyLmNwcDoxODA5OTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFQSVVzZXJD
b250ZW50RmlsdGVyLmgiCisKK25hbWVzcGFjZSBBUEkgeworCitVc2VyQ29udGVudEZpbHRlcjo6
VXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3Ry
aW5nJiBzZXJpYWxpemVkUnVsZXMpCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1fc2VyaWFs
aXplZFJ1bGVzKHNlcmlhbGl6ZWRSdWxlcykKK3sKK30KKworVXNlckNvbnRlbnRGaWx0ZXI6On5V
c2VyQ29udGVudEZpbHRlcigpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOCAr
MjQsMjQgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVBJVXNlckNv
bnRlbnRGaWx0ZXIuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorCisj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oIgogCiBuYW1lc3BhY2UgQVBJIHsKIAotVXNlckNvbnRlbnRGaWx0ZXI6
OlVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgc2VyaWFsaXplZFJ1bGVzKQorVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJDb250ZW50
RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+JiYgY29udGVudEV4dGVuc2lvbikKICAgICA6IG1fbmFtZShuYW1l
KQotICAgICwgbV9zZXJpYWxpemVkUnVsZXMoc2VyaWFsaXplZFJ1bGVzKQorICAgICwgbV9jb21w
aWxlZEV4dGVuc2lvbihXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbikpCiB7CiB9CiAKLVVzZXJD
b250ZW50RmlsdGVyOjp+VXNlckNvbnRlbnRGaWx0ZXIoKQorVXNlckNvbnRlbnRFeHRlbnNpb246
On5Vc2VyQ29udGVudEV4dGVuc2lvbigpCiB7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQorCisj
ZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKHJl
dmlzaW9uIDE4MDk5OSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2Vy
Q29udGVudEZpbHRlci5oOjE4MDk5OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBUElVc2VyQ29udGVudEZpbHRlcl9oCisjZGVmaW5lIEFQ
SVVzZXJDb250ZW50RmlsdGVyX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgQVBJIHsKKworY2xhc3MgVXNlckNv
bnRlbnRGaWx0ZXIgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJD
b250ZW50RmlsdGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEZpbHRl
cj4gY3JlYXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2Vy
aWFsaXplZFJ1bGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNv
bnRlbnRGaWx0ZXIobmFtZSwgc2VyaWFsaXplZFJ1bGVzKSk7CisgICAgfQorCisgICAgVXNlckNv
bnRlbnRGaWx0ZXIoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBz
ZXJpYWxpemVkUnVsZXMpOworICAgIH5Vc2VyQ29udGVudEZpbHRlcigpOworCisgICAgY29uc3Qg
V1RGOjpTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBX
VEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemVk
UnVsZXM7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6OlN0cmluZyBtX25hbWU7CisgICAgV1RGOjpT
dHJpbmcgbV9zZXJpYWxpemVkUnVsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2Vu
ZGlmIC8vIEFQSVVzZXJDb250ZW50RmlsdGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRl
bnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzIgKzIzLDM4IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBBUElVc2VyQ29udGVudEZpbHRl
cl9oCi0jZGVmaW5lIEFQSVVzZXJDb250ZW50RmlsdGVyX2gKKyNpZm5kZWYgQVBJVXNlckNvbnRl
bnRFeHRlbnNpb25faAorI2RlZmluZSBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCiAKICNpbmNs
dWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFt
ZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247Cit9CisK
IG5hbWVzcGFjZSBBUEkgewogCi1jbGFzcyBVc2VyQ29udGVudEZpbHRlciBmaW5hbCA6IHB1Ymxp
YyBPYmplY3RJbXBsPE9iamVjdDo6VHlwZTo6VXNlckNvbnRlbnRGaWx0ZXI+IHsKK2NsYXNzIFVz
ZXJDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBl
OjpVc2VyQ29udGVudEV4dGVuc2lvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VXNlckNv
bnRlbnRGaWx0ZXI+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcmIHNlcmlhbGl6ZWRSdWxlcykKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQor
ICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSwgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNv
bnRlbnRFeHRlbnNpb24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2Vy
Q29udGVudEZpbHRlcihuYW1lLCBzZXJpYWxpemVkUnVsZXMpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSwgV1RGOjptb3ZlKGNvbnRlbnRF
eHRlbnNpb24pKSk7CiAgICAgfQogCi0gICAgVXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxpemVkUnVsZXMpOwotICAgIH5V
c2VyQ29udGVudEZpbHRlcigpOworICAgIFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYp
OworICAgIHZpcnR1YWwgflVzZXJDb250ZW50RXh0ZW5zaW9uKCk7CiAKICAgICBjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0IFdURjo6
U3RyaW5nJiBzZXJpYWxpemVkUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6ZWRSdWxl
czsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21w
aWxlZEV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7
IH0KIAogcHJpdmF0ZToKICAgICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgV1RGOjpTdHJpbmcg
bV9zZXJpYWxpemVkUnVsZXM7CisgICAgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiBtX2NvbXBpbGVkRXh0ZW5zaW9uOworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKIAotI2VuZGlmIC8vIEFQSVVzZXJD
b250ZW50RmlsdGVyX2gKKyNlbmRpZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50
RmlsdGVyLmNwcAkocmV2aXNpb24gMTgxMTc3KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2Vy
Q29udGVudEZpbHRlci5oIgotCi1uYW1lc3BhY2UgQVBJIHsKLQotVXNlckNvbnRlbnRGaWx0ZXI6
OlVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0
cmluZyYgc2VyaWFsaXplZFJ1bGVzKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX3Nlcmlh
bGl6ZWRSdWxlcyhzZXJpYWxpemVkUnVsZXMpCi17Ci19Ci0KLVVzZXJDb250ZW50RmlsdGVyOjp+
VXNlckNvbnRlbnRGaWx0ZXIoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRGaWx0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVy
LmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRGaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBBUElVc2VyQ29udGVudEZpbHRlcl9oCi0jZGVmaW5lIEFQSVVzZXJD
b250ZW50RmlsdGVyX2gKLQotI2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgQVBJIHsKLQotY2xhc3MgVXNlckNvbnRlbnRG
aWx0ZXIgZmluYWwgOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50
RmlsdGVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEZpbHRlcj4gY3Jl
YXRlKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXpl
ZFJ1bGVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRG
aWx0ZXIobmFtZSwgc2VyaWFsaXplZFJ1bGVzKSk7Ci0gICAgfQotCi0gICAgVXNlckNvbnRlbnRG
aWx0ZXIoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxp
emVkUnVsZXMpOwotICAgIH5Vc2VyQ29udGVudEZpbHRlcigpOwotCi0gICAgY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBXVEY6OlN0
cmluZyYgc2VyaWFsaXplZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemVkUnVsZXM7
IH0KLQotcHJpdmF0ZToKLSAgICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgV1RGOjpTdHJpbmcg
bV9zZXJpYWxpemVkUnVsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8v
IEFQSVVzZXJDb250ZW50RmlsdGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCBjbGFzcyBOYXZpZ2F0aW9uUmVzcG9uc2U7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlvbjsKIGNs
YXNzIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjsKIGNsYXNzIFNlc3Npb25TdGF0ZTsKLWNsYXNz
IFVzZXJDb250ZW50RmlsdGVyOworY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBV
c2VyU2NyaXB0OwogfQogCkBAIC0xNjEsNyArMTYxLDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdL
UmVuZGVyT2JqZWN0UmVmLCBXZQogV0tfQUREX0FQSV9NQVBQSU5HKFdLU2Vzc2lvblN0YXRlUmVm
LCBBUEk6OlNlc3Npb25TdGF0ZSkKIFdLX0FERF9BUElfTUFQUElORyhXS1RleHRDaGVja2VyUmVm
LCBXZWJUZXh0Q2hlY2tlcikKIFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50Q29udHJv
bGxlclJlZiwgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkpCi1XS19BRERfQVBJX01BUFBJ
TkcoV0tVc2VyQ29udGVudEZpbHRlclJlZiwgQVBJOjpVc2VyQ29udGVudEZpbHRlcikKK1dLX0FE
RF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uKQogV0tfQUREX0FQSV9NQVBQSU5HKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RS
ZWYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkpCiBXS19BRERfQVBJX01BUFBJTkco
V0tVc2VyU2NyaXB0UmVmLCBBUEk6OlVzZXJTY3JpcHQpCiBXS19BRERfQVBJX01BUFBJTkcoV0tW
aWJyYXRpb25SZWYsIFdlYlZpYnJhdGlvblByb3h5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAxODExNzcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tQ
YWdlR3JvdXAuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisjaW5jbHVk
ZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgpAQCAt
ODIsNyArODIsNyBAQCB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlQWxsVXNlclNjcmlwdHMoV0tQCiB2
b2lkIFdLUGFnZUdyb3VwQWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmLCBXS1VzZXJDb250ZW50RmlsdGVyUmVmIHVzZXJDb250ZW50RmlsdGVyUmVmKQogewog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZikt
PmFkZFVzZXJDb250ZW50RmlsdGVyKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKKyAg
ICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1
c2VyQ29udGVudEZpbHRlclJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZUdyb3Vw
UmVmKTsKICAgICBVTlVTRURfUEFSQU0odXNlckNvbnRlbnRGaWx0ZXJSZWYpOwpAQCAtOTIsNyAr
OTIsNyBAQCB2b2lkIFdLUGFnZUdyb3VwQWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tQCiB2b2lkIFdL
UGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmLCBXS1N0cmluZ1JlZiB1c2VyQ29udGVudEZpbHRlck5hbWVSZWYpCiB7CiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+cmVtb3ZlVXNl
ckNvbnRlbnRGaWx0ZXIodG9XVEZTdHJpbmcodXNlckNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7Cisg
ICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHRvV1RG
U3RyaW5nKHVzZXJDb250ZW50RmlsdGVyTmFtZVJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0ocGFnZUdyb3VwUmVmKTsKICAgICBVTlVTRURfUEFSQU0odXNlckNvbnRlbnRGaWx0ZXJOYW1l
UmVmKTsKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRl
bnRGaWx0ZXIoCiB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKFdL
UGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQotICAgIHRvSW1wbChwYWdlR3JvdXBSZWYpLT5yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRl
cnMoKTsKKyAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRl
bnNpb25zKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRy
b2xsZXJSZWYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAJKHJldmlzaW9uIDE4MTE3NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5oIgogCi0jaW5jbHVkZSAiQVBJ
VXNlckNvbnRlbnRGaWx0ZXIuaCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5o
IgogI2luY2x1ZGUgIkFQSVVzZXJTY3JpcHQuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNp
bmNsdWRlICJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oIgpAQCAtNjIsMTMgKzYyLDEz
IEBAIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2UKIHZvaWQgV0tVc2Vy
Q29udGVudENvbnRyb2xsZXJBZGRVc2VyQ29udGVudEZpbHRlcihXS1VzZXJDb250ZW50Q29udHJv
bGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJSZWYsIFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYg
dXNlckNvbnRlbnRGaWx0ZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+YWRkVXNlckNvbnRlbnRGaWx0
ZXIoKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJlZikpOworICAgIHRvSW1wbCh1c2VyQ29udGVu
dENvbnRyb2xsZXJSZWYpLT5hZGRVc2VyQ29udGVudEV4dGVuc2lvbigqdG9JbXBsKHVzZXJDb250
ZW50RmlsdGVyUmVmKSk7CiAjZW5kaWYKIH0KIAogdm9pZCBXS1VzZXJDb250ZW50Q29udHJvbGxl
clJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyhXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1
c2VyQ29udGVudENvbnRyb2xsZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLSAgICB0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsVXNlckNv
bnRlbnRGaWx0ZXJzKCk7CisgICAgdG9JbXBsKHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJl
bW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEZpbHRlclJlZi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRGaWx0
ZXJSZWYuY3BwCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tVc2VyQ29udGVudEZpbHRlclJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE3
ICsyNiwyOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLVXNlckNvbnRlbnRG
aWx0ZXJSZWYuaCIKIAotI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisjaW5jbHVk
ZSAiQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNp
bmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CiBXS1R5cGVJRCBXS1VzZXJDb250ZW50RmlsdGVyR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4g
dG9BUEkoQVBJOjpVc2VyQ29udGVudEZpbHRlcjo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJ
KEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OkFQSVR5cGUpOwogfQogCiBXS1VzZXJDb250ZW50
RmlsdGVyUmVmIFdLVXNlckNvbnRlbnRGaWx0ZXJDcmVhdGUoV0tTdHJpbmdSZWYgbmFtZVJlZiwg
V0tTdHJpbmdSZWYgc2VyaWFsaXplZFJ1bGVzUmVmKQogewotICAgIHJldHVybiB0b0FQSSgmQVBJ
OjpVc2VyQ29udGVudEZpbHRlcjo6Y3JlYXRlKHRvV1RGU3RyaW5nKG5hbWVSZWYpLCB0b1dURlN0
cmluZyhzZXJpYWxpemVkUnVsZXNSZWYpKS5sZWFrUmVmKCkpOworI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCisgICAgYXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdCh0b1dURlN0cmluZyhzZXJp
YWxpemVkUnVsZXNSZWYpKTsKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEuYnl0ZWNvZGUpLCBXVEY6Om1vdmUoY29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5hY3Rpb25zKSk7CisKKyAgICByZXR1cm4gdG9BUEkoJkFQSTo6VXNl
ckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSh0b1dURlN0cmluZyhuYW1lUmVmKSwgV1RGOjptb3Zl
KGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpLmxlYWtSZWYoKSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShuYW1lUmVmKTsKKyAgICBVTlVTRURfUEFSQU0oc2VyaWFsaXplZFJ1bGVzUmVmKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9s
bGVyLm1tCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
MjEgKzEzMCwyMSBAQCAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAogLSAodm9pZClfYWRkVXNl
ckNvbnRlbnRGaWx0ZXI6KF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRGaWx0ZXIK
IHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS0+YWRkVXNlckNvbnRlbnRGaWx0ZXIoKnVzZXJDb250ZW50RmlsdGVyLT5fdXNl
ckNvbnRlbnRGaWx0ZXIpOworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkVXNl
ckNvbnRlbnRFeHRlbnNpb24oKnVzZXJDb250ZW50RmlsdGVyLT5fdXNlckNvbnRlbnRFeHRlbnNp
b24pOwogI2VuZGlmCiB9CiAKIC0gKHZvaWQpX3JlbW92ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0
cmluZyAqKXVzZXJDb250ZW50RmlsdGVyTmFtZQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVVc2VyQ29udGVu
dEZpbHRlcih1c2VyQ29udGVudEZpbHRlck5hbWUpOworICAgIF91c2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS0+cmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1l
KTsKICNlbmRpZgogfQogCiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMKIHsK
ICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS0+cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCk7CisgICAgX3VzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRp
ZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJD
b250ZW50RmlsdGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0JKHJldmlzaW9uIDE4MTE3NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDkgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
KyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgorCiBAaW1wbGVtZW50YXRpb24gX1dLVXNl
ckNvbnRlbnRGaWx0ZXIKIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lIHNlcmlhbGl6ZWRSdWxlczooTlNTdHJpbmcgKilzZXJpYWxpemVkUnVsZXMKQEAgLTM1
LDE0ICszOCwxNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqCiAg
ICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlckNvbnRlbnRGaWx0ZXI+
KHNlbGYsIFN0cmluZyhuYW1lKSwgU3RyaW5nKHNlcmlhbGl6ZWRSdWxlcykpOworICAgIGF1dG8g
Y29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
Ojpjb21waWxlUnVsZUxpc3QoU3RyaW5nKHNlcmlhbGl6ZWRSdWxlcykpOworICAgIGF1dG8gY29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OmNyZWF0ZShXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29k
ZSksIFdURjo6bW92ZShjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnMpKTsKKwor
ICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbj4oc2VsZiwgU3RyaW5nKG5hbWUpLCBXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uKSk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAg
X3VzZXJDb250ZW50RmlsdGVyLT5+VXNlckNvbnRlbnRGaWx0ZXIoKTsKKyAgICBfdXNlckNvbnRl
bnRFeHRlbnNpb24tPn5Vc2VyQ29udGVudEV4dGVuc2lvbigpOwogCiAgICAgW3N1cGVyIGRlYWxs
b2NdOwogfQpAQCAtNTEsNyArNTcsNyBAQCAtICh2b2lkKWRlYWxsb2MKIAogLSAoQVBJOjpPYmpl
Y3QmKV9hcGlPYmplY3QKIHsKLSAgICByZXR1cm4gKl91c2VyQ29udGVudEZpbHRlcjsKKyAgICBy
ZXR1cm4gKl91c2VyQ29udGVudEV4dGVuc2lvbjsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2Vy
Q29udGVudEZpbHRlckludGVybmFsLmgJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywyMiArMjcsMjIgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAK
LSNpbXBvcnQgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisjaW1wb3J0ICJBUElVc2VyQ29udGVu
dEV4dGVuc2lvbi5oIgogI2ltcG9ydCAiV0tPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWlubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50
RmlsdGVyJiB1c2VyQ29udGVudEZpbHRlcikKK2lubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAq
d3JhcHBlcihBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikK
IHsKLSAgICBBU1NFUlQoW3VzZXJDb250ZW50RmlsdGVyLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNz
OltfV0tVc2VyQ29udGVudEZpbHRlciBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJDb250
ZW50RmlsdGVyICopdXNlckNvbnRlbnRGaWx0ZXIud3JhcHBlcigpOworICAgIEFTU0VSVChbdXNl
ckNvbnRlbnRFeHRlbnNpb24ud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50
RmlsdGVyIGNsYXNzXV0pOworICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2Vy
Q29udGVudEV4dGVuc2lvbi53cmFwcGVyKCk7CiB9CiAKIH0KIAogQGludGVyZmFjZSBfV0tVc2Vy
Q29udGVudEZpbHRlciAoKSA8V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RT
dG9yYWdlPEFQSTo6VXNlckNvbnRlbnRGaWx0ZXI+IF91c2VyQ29udGVudEZpbHRlcjsKKyAgICBB
UEk6Ok9iamVjdFN0b3JhZ2U8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gX3VzZXJDb250ZW50
RXh0ZW5zaW9uOwogfQogQGVuZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oPgogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRl
ICJBUElVc2VyQ29udGVudEZpbHRlci5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5z
aW9uLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC04MiwxMCArODMsMTAgQEAgdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eTo6YWRkUAogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlw
dE1lc3NhZ2VIYW5kbGVycyhtZXNzYWdlSGFuZGxlckhhbmRsZXMpLCBtX2lkZW50aWZpZXIpOwog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0
cmluZywgU3RyaW5nPj4gdXNlckNvbnRlbnRGaWx0ZXJzOwotICAgIGZvciAoY29uc3QgYXV0byYg
dXNlckNvbnRlbnRGaWx0ZXIgOiBtX3VzZXJDb250ZW50RmlsdGVycy52YWx1ZXMoKSkKLSAgICAg
ICAgdXNlckNvbnRlbnRGaWx0ZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyQ29udGVudEZp
bHRlci0+bmFtZSgpLCB1c2VyQ29udGVudEZpbHRlci0+c2VyaWFsaXplZFJ1bGVzKCkpKTsKLSAg
ICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVudEZpbHRlcnMp
LCBtX2lkZW50aWZpZXIpOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhPj4gdXNlckNvbnRlbnRFeHRlbnNpb25zOworICAgIGZvciAo
Y29uc3QgYXV0byYgdXNlckNvbnRlbnRFeHRlbnNpb24gOiBtX3VzZXJDb250ZW50RXh0ZW5zaW9u
cy52YWx1ZXMoKSkKKyAgICAgICAgdXNlckNvbnRlbnRFeHRlbnNpb25zLmFwcGVuZChzdGQ6Om1h
a2VfcGFpcih1c2VyQ29udGVudEV4dGVuc2lvbi0+bmFtZSgpLCB1c2VyQ29udGVudEV4dGVuc2lv
bi0+Y29tcGlsZWRFeHRlbnNpb24oKS5kYXRhKCkpKTsKKyAgICB3ZWJQcm9jZXNzUHJveHkuY29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9ucyh1c2VyQ29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIp
OwogI2VuZGlmCiB9CiAKQEAgLTE4MiwzMCArMTgzLDMwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHk6OmRpZFAKIAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykK
LXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJDb250ZW50RmlsdGVy
KEFQSTo6VXNlckNvbnRlbnRGaWx0ZXImIHVzZXJDb250ZW50RmlsdGVyKQordm9pZCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2Vy
Q29udGVudEV4dGVuc2lvbiYgdXNlckNvbnRlbnRFeHRlbnNpb24pCiB7Ci0gICAgbV91c2VyQ29u
dGVudEZpbHRlcnMuc2V0KHVzZXJDb250ZW50RmlsdGVyLm5hbWUoKSwgJnVzZXJDb250ZW50Rmls
dGVyKTsKKyAgICBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy5zZXQodXNlckNvbnRlbnRFeHRlbnNp
b24ubmFtZSgpLCAmdXNlckNvbnRlbnRFeHRlbnNpb24pOwogCi0gICAgYXV0byBwYWlyID0gc3Rk
OjptYWtlX3BhaXIodXNlckNvbnRlbnRGaWx0ZXIubmFtZSgpLCB1c2VyQ29udGVudEZpbHRlci5z
ZXJpYWxpemVkUnVsZXMoKSk7CisgICAgYXV0byBwYWlyID0gc3RkOjptYWtlX3BhaXIodXNlckNv
bnRlbnRFeHRlbnNpb24ubmFtZSgpLCB1c2VyQ29udGVudEV4dGVuc2lvbi5jb21waWxlZEV4dGVu
c2lvbigpLmRhdGEoKSk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1f
cHJvY2Vzc2VzKQotICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlckNvbnRlbnRGaWx0ZXJzKHsgcGFpciB9
KSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50RXh0ZW5zaW9u
cyh7IHBhaXIgfSksIG1faWRlbnRpZmllcik7CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50RmlsdGVycy5y
ZW1vdmUobmFtZSk7CisgICAgbV91c2VyQ29udGVudEV4dGVuc2lvbnMucmVtb3ZlKG5hbWUpOwog
CiAgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAg
ICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXI6OlJlbW92ZVVzZXJDb250ZW50RmlsdGVyKG5hbWUpLCBtX2lkZW50aWZpZXIpOwor
ICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6UmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSksIG1faWRlbnRp
Zmllcik7CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFs
bFVzZXJDb250ZW50RmlsdGVycygpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRG
aWx0ZXJzLmNsZWFyKCk7CisgICAgbV91c2VyQ29udGVudEV4dGVuc2lvbnMuY2xlYXIoKTsKIAog
ICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAg
IHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKSwgbV9pZGVudGlmaWVyKTsKKyAg
ICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OlJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2lkZW50aWZp
ZXIpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eS5oCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEFycmF5OwotY2xhc3Mg
VXNlckNvbnRlbnRGaWx0ZXI7CitjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKIGNsYXNzIFVz
ZXJTY3JpcHQ7CiB9CiAKQEAgLTgzLDkgKzgzLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3Zl
VXNlck1lc3NhZ2VIYW5kbGVyRm9yTmFtZShjb25zdCBTdHJpbmcmKTsKIAogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9pZCBhZGRVc2VyQ29udGVudEZpbHRlcihBUEk6OlVz
ZXJDb250ZW50RmlsdGVyJik7Ci0gICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycygpOworICAg
IHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYp
OworICAgIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCiBwcml2
YXRlOgpAQCAtMTAxLDcgKzEwMSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwg
UmVmUHRyPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyPj4gbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnM7
CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QVBJOjpVc2VyQ29udGVudEZpbHRlcj4+IG1fdXNlckNvbnRlbnRGaWx0ZXJzOworICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4+IG1fdXNl
ckNvbnRlbnRFeHRlbnNpb25zOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODExNzcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwOTYsNiArMTA5NiwxMCBAQAogCQk3QzQ2OTRDQzFBNEI1MTBBMDBB
RDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2Vi
UGFzdGVib2FyZFByb3h5Q29jb2EubW0gKi87IH07CiAJCTdDNDY5NEQwMUE1MUUzNjgwMEFENTg0
NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0M0Njk0Q0QxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9h
cmRQcm94eS5jcHAgKi87IH07CiAJCTdDNDY5NEQxMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0
ZWJvYXJkUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDNDY5NENFMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAqLzsg
fTsKKwkJN0M0QUJFRDAxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzRBQkVDRTFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNw
cCAqLzsgfTsKKwkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0M0QUJFQ0YxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5oICovOyB9OworCQk3QzRBQkVENDFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uRGF0YS5jcHAgKi87IH07CisJCTdDNEFCRUQ1MUFBOEZDQjgwMDg4QUEzNyAvKiBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVEMzFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oICovOyB9OwogCQk3QzRFRDMyOTFBMzExOUQ5MDA3
OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRFRDMyNzFBMzExOUQ5
MDA3OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggKi87
IH07CiAJCTdDNkQzN0ZDMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2RDM3RkExNzJGNTU1
RjAwOUQyODQ3IC8qIFBhZ2VCYW5uZXJNYWMubW0gKi87IH07CiAJCTdDNkU3MEZCMThCMkRDN0Ew
MEYyNEUyRSAvKiBXZWJQcm9jZXNzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzZFNzBGOTE4QjJENEEwMDBGMjRFMkUgLyogV2ViUHJvY2Vz
c0NvY29hLm1tICovOyB9OwpAQCAtMTExMiw4ICsxMTE2LDggQEAKIAkJN0M4OUQyQTMxQTY3ODg3
NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBMTFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2Vy
U2NyaXB0UmVmLmNwcCAqLzsgfTsKIAkJN0M4OUQyQTQxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNl
clNjcmlwdFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0M4OUQyQTIxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDODlEMkE2MUE2Nzg5
RUEwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkE1MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElVc2Vy
U2NyaXB0LmNwcCAqLzsgfTsKLQkJN0M4OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJD
b250ZW50RmlsdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5j
cHAgKi87IH07Ci0JCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZp
bHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4
OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RmlsdGVyLmggKi87IH07CisJ
CTdDODlEMkIzMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFB
NkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OworCQk3
Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkIyMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oICovOyB9OwogCQk3Qzg5RDJC
NjFBNkIwREQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCNTFBNkIw
REQ5MDAzQTVGREUgLyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQjkxQTZCMEYy
QzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9X
S1VzZXJDb250ZW50RmlsdGVyLm1tICovOyB9OwogCQk3Qzg5RDJCQTFBNkIwRjJDMDAzQTVGREUg
LyogX1dLVXNlckNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDODlEMkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVu
dEZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0zMjg2LDYgKzMyOTAsMTAgQEAKIAkJN0M0Njk0Q0QxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdl
YlBhc3RlYm9hcmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJQYXN0ZWJvYXJkUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzQ2OTRDRTFBNTFFMzY4MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzQ2OTRDRjFBNTFFMzY4MDBBRDU4NDUgLyogV2ViUGFzdGVi
b2FyZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBhc3RlYm9h
cmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0QUJF
Q0UxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzRBQkVDRjFBQThFOUYw
MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzRFRDMyNjFBMzExOUQ5MDA3OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NT
dHlsZURlY2xhcmF0aW9uSGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEVEMzI3MUEzMTE5RDkwMDc5QkQ0OSAvKiBJbmpl
Y3RlZEJ1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAv
KiBQYWdlQmFubmVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUGFnZUJhbm5lck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzMDMs
OCArMzMxMSw4IEBACiAJCTdDODlEMkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRS
ZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tVc2VyU2NyaXB0
UmVmLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTIxQTY3ODg3NTAw
M0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1VzZXJTY3JpcHRSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4
OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNlclNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVu
dEZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2Vy
Q29udGVudEZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIy
MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBBUElVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRl
bnRFeHRlbnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg5RDJCMjFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8q
IFdLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1VzZXJDb250ZW50Q29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250
ZW50RmlsdGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dL
VXNlckNvbnRlbnRGaWx0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlE
MkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDcyNSw2ICs0NzMzLDEwIEBACiAJCQkJMUE2NDI0NUMxMkRF
MjlBMTAwQ0FBRTJDIC8qIFVwZGF0ZUluZm8uaCAqLywKIAkJCQkxQUMxMzM2NTE4NTY1QjU3MDBG
M0VDMDUgLyogVXNlckRhdGEuY3BwICovLAogCQkJCTFBQzEzMzY2MTg1NjVCNTcwMEYzRUMwNSAv
KiBVc2VyRGF0YS5oICovLAorCQkJCTdDNEFCRUNFMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uY3BwICovLAorCQkJCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEz
NyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCAqLywKKwkJCQk3QzRBQkVEMjFBQThG
Q0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi8sCisJ
CQkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEuaCAqLywKIAkJCQkyNjg0MDU0QTE4Qjg2NkZGMDAyMkMzOEIgLyogVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlSW5mby5jcHAgKi8sCiAJCQkJMjY4NDA1NDIxOEI4NUE2MzAwMjJDMzhCIC8q
IFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaCAqLywKIAkJCQkxQTBGMjlDOTEyMEIzNzE2
MDA1M0QxQjkgLyogVmlzaXRlZExpbmtUYWJsZS5jcHAgKi8sCkBAIC02MjQ5LDggKzYyNjEsOCBA
QAogCQkJCTFBRkRFNjVGMTk1NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuY3BwICov
LAogCQkJCTFBRkRFNjYwMTk1NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuaCAqLywK
IAkJCQkxQTRENjY0NzE4QTJEOTFBMDBEODJFMjEgLyogQVBJVUlDbGllbnQuaCAqLywKLQkJCQk3
Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRGaWx0ZXIuY3BwICovLAot
CQkJCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5oICov
LAorCQkJCTdDODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lv
bi5jcHAgKi8sCisJCQkJN0M4OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50
RXh0ZW5zaW9uLmggKi8sCiAJCQkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJT
Y3JpcHQuY3BwICovLAogCQkJCTdDODlEMjkyMUE2NzEyMkYwMDNBNUZERSAvKiBBUElVc2VyU2Ny
aXB0LmggKi8sCiAJCQkJMUE0ODMyQzUxQTlCQzEzQzAwOEI0REZFIC8qIEFQSVdlYnNpdGVEYXRh
UmVjb3JkLmNwcCAqLywKQEAgLTc3NzAsNyArNzc4Miw3IEBACiAJCQkJMkQ1QUI2MkUxQTY5RDZG
QjAwMTRBOUNCIC8qIE1lc3NhZ2VSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNzk3
ODAxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNl
ckNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDODlEMkI0MUE2QjA2OEMwMDNB
NUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFF
RkNDMTIxMUQwMUY5NjAwODIxOUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUEzRDYxMDIxM0E3Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMDQzOTc2MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNz
LmggaW4gSGVhZGVycyAqLywKQEAgLTc4MzcsNiArNzg0OSw3IEBACiAJCQkJMUEyNEJFRDUxMjA4
OTREMTAwRkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2
RDYxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJERTY5NDNFMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmlj
YXRpb25Db250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNEFCRUQ1MUFB
OEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTA2NEQzNjE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTFEODFGRjE4NUJCREVFMDAxQUVENTYgLyogU1FMaXRl
SURCVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2
QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDg1LDYgKzgwOTgs
NyBAQAogCQkJCTM3ODhBMDVDMTQ3NDNDOTAwMDYzMTlFNSAvKiBXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JBQUNGNDE0NTIzMjRGMDA1
M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M5
RDE1MzcxODQ1ODREQTAwOUQzOTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRjYxNDUyMzI0
RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUUwMEQ0RDE4MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5k
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jy
b3dzaW5nQ29udGV4dEhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTkzNTIsNiAr
OTM2Niw3IEBACiAJCQkJMjk4NEY1ODgxNjRCQTA5NTAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29s
TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUFEMzA5NjE2
NEI0QzkzMDA3MkRFQTkgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQkyOTg0RjU3QzE2NEI5MTVGMDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0QUJF
RDAxQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUUzNTFGRjE4MEY1RDBGMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9j
ZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBE
YXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTFEMEQ0MzExODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NzQzLDcgKzk3NTgsNyBAQAogCQkJCTUxQzk2MTE4MTgz
RDI5NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2QUJDMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFn
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzhFMjgyMTEyNzVEMTU0MDBCQzdCRDAgLyogV2Vi
SW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDODlEMkIzMUE2QjA2OEMwMDNBNUZE
RSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Qzg5RDJC
MzFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMxMTFBNjAxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3RvckNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzhFMkEzNTEyNzc4NTI0MDBCQzdCRDAgLyogV2Vi
SW5zcGVjdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDOEUyODM1
MTI3NUQ3MzgwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTk5NDgsNiArOTk2Myw3IEBACiAJCQkJMEZDQjRFNTExOEJCRTA0NDAwMEZDRkM5IC8qIFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTBGMTc0QUE3MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUI2MkU3MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0QUJFRDQxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEFF
MEMxMzNDMTZDQjAwNzI3MTdBIC8qIFdLSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQ0Y2QUMyMTJDOTFGMzQwMDhGOUMzNSAvKiBXS0ltYWdlLmNwcCBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTgxMTc3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVu
dC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRl
ICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgpAQCAtMTgxLDIwICsxODIsMjMgQEAgdm9pZCBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZQogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEZpbHRlcnMo
Y29uc3QgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiB1c2VyQ29udGVudEZpbHRl
cnMpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNp
b25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhPj4mIHVzZXJDb250ZW50RXh0ZW5zaW9ucykKIHsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHVzZXJDb250ZW50RmlsdGVyIDogdXNlckNvbnRlbnRGaWx0ZXJzKQotICAgICAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlckNvbnRlbnRGaWx0ZXIodXNlckNvbnRlbnRGaWx0
ZXIuZmlyc3QsIHVzZXJDb250ZW50RmlsdGVyLnNlY29uZCk7CisgICAgZm9yIChjb25zdCBhdXRv
JiB1c2VyQ29udGVudEV4dGVuc2lvbiA6IHVzZXJDb250ZW50RXh0ZW5zaW9ucykgeworICAgICAg
ICBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0g
dXNlckNvbnRlbnRFeHRlbnNpb24uc2Vjb25kOworICAgICAgICBSZWZQdHI8V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYnl0
ZWNvZGUpLCBXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYWN0aW9ucykpOworICAgICAg
ICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNv
bnRlbnRFeHRlbnNpb24uZmlyc3QsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CisgICAgfQog
fQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRGaWx0
ZXIoY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3Vz
ZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIobmFtZSk7CisgICAg
bV91c2VyQ29udGVudENvbnRyb2xsZXItPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUp
OwogfQogCi12b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRl
bnRGaWx0ZXJzKCkKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2Vy
Q29udGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1v
dmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAxODExNzcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CitjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOwogY2xhc3MgV2ViVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5OwogCiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXIgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyICB7CkBAIC02MSw5ICs2Miw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIodWludDY0X3QpOwog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZFVzZXJDb250ZW50
RmlsdGVycyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mKTsKLSAgICB2
b2lkIHJlbW92ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9p
ZCByZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50
RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YT4+Jik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRl
bnNpb25zKCk7CiAjZW5kaWYKIAogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9s
bGVyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
VXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lv
biAxODExNzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVz
ZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsOCBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewogICAgIFJlbW92
ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcih1aW50NjRfdCBpZGVudGlmaWVyKTsKIAogI2lmIEVO
QUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgQWRkVXNlckNvbnRlbnRGaWx0ZXJzKFZlY3Rv
cjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiB1c2VyQ29udGVudEZpbHRlcnMpOwotICAgIFJl
bW92ZVVzZXJDb250ZW50RmlsdGVyKFN0cmluZyBuYW1lKTsKLSAgICBSZW1vdmVBbGxVc2VyQ29u
dGVudEZpbHRlcnMoKTsKKyAgICBBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IHVz
ZXJDb250ZW50RmlsdGVycyk7CisgICAgUmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oU3RyaW5n
IG5hbWUpOworICAgIFJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlR3JvdXBQcm94eS5jcHAJKHJldmlzaW9uIDE4MTE3NykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDggKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdl
R3JvdXBQcm94eS5oIgogCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxk
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Vz
ZXJDb250ZW50Q29udHJvbGxlci5oPgpAQCAtNTQsOCArNTUsOCBAQCBXZWJQYWdlR3JvdXBQcm94
eTo6V2ViUGFnZUdyb3VwUHJveHkoY29uCiAgICAgICAgIGFkZFVzZXJTY3JpcHQodXNlclNjcmlw
dCk7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIGZvciAoY29uc3QgYXV0
byYgc2xvdCA6IGRhdGEudXNlckNvbnRlbnRGaWx0ZXJzKQotICAgICAgICBhZGRVc2VyQ29udGVu
dEZpbHRlcihzbG90LmtleSwgc2xvdC52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBzbG90IDogZGF0
YS51c2VyQ29udGVudEV4dGVuc2lvbnMpCisgICAgICAgIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9u
KHNsb3Qua2V5LCBzbG90LnZhbHVlKTsKICNlbmRpZgogfQogCkBAIC05NywxOSArOTgsMjAgQEAg
dm9pZCBXZWJQYWdlR3JvdXBQcm94eTo6cmVtb3ZlQWxsVXNlckNvbgogfQogCiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OmFkZFVzZXJDb250
ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzZXJpYWxpemVkUnVs
ZXMpCit2b2lkIFdlYlBhZ2VHcm91cFByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIG5hbWUsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgY29udGVudEV4
dGVuc2lvbkRhdGEpCiB7Ci0gICAgdXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlckNvbnRl
bnRGaWx0ZXIobmFtZSwgc2VyaWFsaXplZFJ1bGVzKTsKKyAgICBSZWZQdHI8V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYnl0
ZWNvZGUpLCBXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYWN0aW9ucykpOworICAgIHVz
ZXJDb250ZW50Q29udHJvbGxlcigpLmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbik7CiB9CiAKLXZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OnJlbW92
ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViUGFnZUdyb3Vw
UHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICB1c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyQ29udGVudEZpbHRlcihuYW1l
KTsKKyAgICB1c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lv
bihuYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlR3JvdXBQcm94eTo6cmVtb3ZlQWxsVXNlckNvbnRl
bnRGaWx0ZXJzKCkKK3ZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OnJlbW92ZUFsbFVzZXJDb250ZW50
RXh0ZW5zaW9ucygpCiB7Ci0gICAgdXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQWxsVXNl
ckNvbnRlbnRGaWx0ZXJzKCk7ICAgIAorICAgIHVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOyAgICAKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuaAkocmV2aXNpb24gMTgxMTc3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAg
Y2xhc3MgVXNlckNvbnRlbnRDb250cm9sbGVyOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xh
c3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTsKKwogY2xhc3MgV2ViUGFnZUdyb3Vw
UHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQ
YWdlR3JvdXA+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXBQ
cm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKQEAgLTY0LDkgKzY2LDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKIAogI2lmIEVOQUJMRShD
T05URU5UX0VYVEVOU0lPTlMpCi0gICAgdm9pZCBhZGRVc2VyQ29udGVudEZpbHRlcihjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2VyaWFsaXplZFJ1bGVzKTsKLSAgICB2b2lkIHJl
bW92ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1v
dmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk7
CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5kaWYKIAog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
R3JvdXBQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE4
MTE3NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQ
cm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQCBtZXNzYWdl
cyAtPiBXZWJQYWdlR3JvdXBQcm94eSB7CiAgICAgUmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKIAog
I2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgQWRkVXNlckNvbnRlbnRGaWx0ZXIo
U3RyaW5nIG5hbWUsIFN0cmluZyBzZXJpYWxpemVkUnVsZXMpOwotICAgIFJlbW92ZVVzZXJDb250
ZW50RmlsdGVyKFN0cmluZyBuYW1lKTsKLSAgICBSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMo
KTsKKyAgICBBZGRVc2VyQ29udGVudEV4dGVuc2lvbihTdHJpbmcgbmFtZSwgV2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb24pOworICAgIFJlbW92
ZVVzZXJDb250ZW50RXh0ZW5zaW9uKFN0cmluZyBuYW1lKTsKKyAgICBSZW1vdmVBbGxVc2VyQ29u
dGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxMTc3KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMDMtMDYgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBN
b3ZlIGNvbXBpbGluZyBvZiBjb250ZW50IGV4dGVuc2lvbnMgdG8gdGhlIFVJUHJvY2VzcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOiBDb3BpZWQg
ZnJvbSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEZpbHRlci5jcHAu
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjp+SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkluTWVt
b3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRF
U1RfRik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRGaWx0
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICBVcGRhdGUgdGVzdCBmb3IgbmV3IG5hbWUgKENvbnRl
bnRGaWx0ZXIgLT4gQ29udGVudEV4dGVuc2lvbnMpIGFuZCBBUEkgKENvbXBpbGVkQ29udGVudEV4
dGVuc2lvbgorICAgICAgICBpcyBub3cgYWJzdHJhY3QpLgorCiAyMDE1LTAzLTA2ICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUZXN0
IC93ZWJraXQyL1dlYktpdFdlYlZpZXcvc3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucyBtaWdodCBm
YWlsIGFmdGVyIGZpbmlzaGVkCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTgxMTc3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAKIAkJN0M1NEE0
QzExQUExMUNFNDAwMzgwRjc4IC8qIFdLQnVuZGxlRmlsZUhhbmRsZV9CdW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1NEE0QkYxQUExMUNF
NDAwMzgwRjc4IC8qIFdLQnVuZGxlRmlsZUhhbmRsZV9CdW5kbGUuY3BwICovOyB9OwogCQk3Qzg5
RDJBQzFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBQTFBNjlCODBEMDAz
QTVGREUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi87IH07CiAJCTdDOUVEOThCMTdBMTlG
NEIwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sIGluIENvcHkg
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOUVEOThBMTdB
MTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sICovOyB9
OwotCQk3Q0IxODRDNjFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEZpbHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxODRDNDFBQTNGMjEw
MDA2NkVERkQgLyogQ29udGVudEZpbHRlci5jcHAgKi87IH07CisJCTdDQjE4NEM2MUFBM0YyMTAw
MDY2RURGRCAvKiBDb250ZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVu
dEV4dGVuc2lvbnMuY3BwICovOyB9OwogCQk3Q0NFN0VBNDFBNDExOUYzMDA0NDdDNEMgLyogSW5z
dGFuY2VNZXRob2RTd2l6emxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMwODU4N0ZGMTNGRUMzQTYwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyLm1tICovOyB9OwogCQk3Q0NFN0VBNTFBNDExQTA4MDA0NDdDNEMgLyogSmF2YVNjcmlw
dFRlc3RNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMDgxMjI0MDEzRkMxNzI0MDBEQzM5QUUgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gKi87IH07
CiAJCTdDQ0U3RUE2MUE0MTFBMEYwMDQ0N0M0QyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3
MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAgLTUyNCw3
ICs1MjQsNyBAQAogCQk3Qzg5RDJBQTFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29uZmlndXJh
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BhZ2VDb25m
aWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RERBQTkxNzM1
REUxRDAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDbG9zZVRoZW5UZXJtaW5hdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QzlFRDk4QTE3QTE5RDA2MDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2gu
aHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9IGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDQjE4NEM0MUFBM0YyMTAwMDY2RURGRCAvKiBDb250
ZW50RmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRl
bnRGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0IxODRDNDFBQTNG
MjEwMDA2NkVERkQgLyogQ29udGVudEV4dGVuc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29udGVudEV4dGVuc2lvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Q0JCQTA3NjE5QkI4QTkxMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NPYmplY3RQdHIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0MzRTFGQTE5N0UyMzQxMDBCRTYyNTIgLyog
VXNlckNvbnRlbnRDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gVXNlckNvbnRlbnRDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3Q0NFN0U4QzFBNDExNDRFMDA0NDdDNEMgLyogbGliVGVzdFdlYktpdEFQSS5hICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFy
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJUZXN0V2ViS2l0QVBJLmE7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC04MjQsMTEgKzgyNCwxMSBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk5M0E3MjBFNTE4RjFBMEU4MDBBODQ4
RTEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCisJCQkJN0NCMTg0QzQxQUEzRjIxMDAwNjZF
REZEIC8qIENvbnRlbnRFeHRlbnNpb25zLmNwcCAqLywKIAkJCQlDRDU0NTFFOTE5RTQxRjlEMDAx
NjkzNkYgLyogQ1NTUGFyc2VyLmNwcCAqLywKIAkJCQkxNDQ2NDAxMjE2N0E4MzA1MDAwQkQyMTgg
LyogTGF5b3V0VW5pdC5jcHAgKi8sCiAJCQkJQ0RDMkM3MTQxNzk3MDg5RDAwRTYyN0ZCIC8qIFRp
bWVSYW5nZXMuY3BwICovLAogCQkJCTQ0MEExRDM4MTRBMDEwM0EwMDhBNjZGMiAvKiBVUkwuY3Bw
ICovLAotCQkJCTdDQjE4NEM0MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RmlsdGVyLmNwcCAq
LywKIAkJCSk7CiAJCQlwYXRoID0gV2ViQ29yZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0xNDk1LDcgKzE0OTUsNyBAQAogCQkJCTdDQ0U3RUNFMUE0MTFBN0UwMDQ0N0M0QyAvKiBT
dG9wTG9hZGluZ0Zyb21EaWRGaW5pc2hMb2FkaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0ND
RTdFQ0YxQTQxMUE3RTAwNDQ3QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2VpdmVSZXNwb25z
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjQ0MUE0MTFCOEUwMDQ0N0M0QyAvKiBTdHJp
bmdCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURG
RCAvKiBDb250ZW50RmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDQjE4NEM2MUFBM0Yy
MTAwMDY2RURGRCAvKiBDb250ZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0VEMDFBNDExQTdFMDA0NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZy
b21TdHJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0Y0NTFBNDExQjhFMDA0NDdDNEMg
LyogU3RyaW5nSGFzaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjQ2MUE0MTFCOEUw
MDQ0N0M0QyAvKiBTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMu
Y3BwCShyZXZpc2lvbiAxODEwMDApCShmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9Db250ZW50RmlsdGVyLmNwcDoxODEwMDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVU
aHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBDb250ZW50
RXh0ZW5zaW9ucyB7CitpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVh
bSYgb3MsIGNvbnN0IEFjdGlvblR5cGUmIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikg
eworICAgIGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tMb2FkOgorICAgICAgICByZXR1cm4gb3MgPDwg
IkNvbnRlbnRGaWx0ZXJBY3Rpb246OkJsb2NrTG9hZCI7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpC
bG9ja0Nvb2tpZXM6CisgICAgICAgIHJldHVybiBvcyA8PCAiQ29udGVudEZpbHRlckFjdGlvbjo6
QmxvY2tDb29raWVzIjsKKyAgICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lOgorICAg
ICAgICByZXR1cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rpb246OkNTU0Rpc3BsYXlOb25lIjsK
KyAgICBjYXNlIEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CisgICAgICAgIHJldHVy
biBvcyA8PCAiQ29udGVudEZpbHRlckFjdGlvbjo6SWdub3JlUHJldmlvdXNSdWxlcyI7CisgICAg
Y2FzZSBBY3Rpb25UeXBlOjpJbnZhbGlkQWN0aW9uOgorICAgICAgICByZXR1cm4gb3MgPDwgIkNv
bnRlbnRGaWx0ZXJBY3Rpb246OkludmFsaWRBY3Rpb24iOworICAgIH0KK30KK30KK30KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xh
c3MgQ29udGVudEZpbHRlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKKyAgICAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAg
IFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOworICAgIH0KK307CisKK2NvbnN0IGNo
YXIqIGJhc2ljRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CisKK1RFU1RfRihD
b250ZW50RmlsdGVyVGVzdCwgQmFzaWMpCit7CisgICAgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25z
OjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGV4dGVuc2lvbiA9IENvbnRlbnRFeHRlbnNpb25z
Ojpjb21waWxlUnVsZUxpc3QoYmFzaWNGaWx0ZXIpOworCisgICAgQ29udGVudEV4dGVuc2lvbnM6
OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOworICAgIGJhY2tlbmQuYWRkQ29udGVu
dEV4dGVuc2lvbigidGVzdEZpbHRlciIsIGV4dGVuc2lvbik7CisgICAgCisgICAgYXV0byBhY3Rp
b25zID0gYmFja2VuZC5hY3Rpb25zRm9yVVJMKFVSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8v
d2Via2l0Lm9yZy8iKSk7CisgICAgRVhQRUNUX0VRKDF1LCBhY3Rpb25zLnNpemUoKSk7CisgICAg
RVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQsIGFjdGlv
bnNbMF0udHlwZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4
dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CiAKLWNsYXNzIENvbnRlbnRGaWx0ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewor
Y2xhc3MgQ29udGVudEV4dGVuc2lvblRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKICAgICB7CkBAIC02NywxMSArNjcsMzcgQEAg
cHVibGljOgogICAgIH0KIH07CiAKK2NsYXNzIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uIDogcHVibGljIENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24g
eworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb24+IGNyZWF0ZShDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YSYmIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKFdURjo6bW92ZShkYXRhKSkpOworICAgIH0KKworICAg
IHZpcnR1YWwgfkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCBjb25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGJ5
dGVjb2RlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLmRhdGEoKTsg
fQorICAgIHZpcnR1YWwgc2l6ZV90IGJ5dGVjb2RlTGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQ29udGVu
dEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9kYXRhLmFjdGlvbnMuZGF0YSgpOyB9CisgICAgdmlydHVhbCBzaXplX3Qg
YWN0aW9uc0xlbmd0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5hY3Rpb25zLnNp
emUoKTsgfQorCitwcml2YXRlOgorICAgIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkK
KyAgICAgICAgOiBtX2RhdGEoV1RGOjptb3ZlKGRhdGEpKQorICAgIHsKKyAgICB9CisKKyAgICBD
b250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7Cit9
OworCiBjb25zdCBjaGFyKiBiYXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0i
OwogCi1URVNUX0YoQ29udGVudEZpbHRlclRlc3QsIEJhc2ljKQorVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBCYXNpYykKIHsKLSAgICBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBp
bGVSdWxlTGlzdChiYXNpY0ZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVu
dEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChiYXNpY0ZpbHRlcik7CisgICAgYXV0byBleHRl
bnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92
ZShleHRlbnNpb25EYXRhKSk7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0
ZXN0RmlsdGVyIiwgZXh0ZW5zaW9uKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db250ZW50RmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEZpbHRlci5jcHAJKHJldmlzaW9uIDE4MTE3NykKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RmlsdGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25z
QmFja2VuZC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1uYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgewotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBBY3Rpb25UeXBlJiBhY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKLSAg
ICAgICAgcmV0dXJuIG9zIDw8ICJDb250ZW50RmlsdGVyQWN0aW9uOjpCbG9ja0xvYWQiOwotICAg
IGNhc2UgQWN0aW9uVHlwZTo6QmxvY2tDb29raWVzOgotICAgICAgICByZXR1cm4gb3MgPDwgIkNv
bnRlbnRGaWx0ZXJBY3Rpb246OkJsb2NrQ29va2llcyI7Ci0gICAgY2FzZSBBY3Rpb25UeXBlOjpD
U1NEaXNwbGF5Tm9uZToKLSAgICAgICAgcmV0dXJuIG9zIDw8ICJDb250ZW50RmlsdGVyQWN0aW9u
OjpDU1NEaXNwbGF5Tm9uZSI7Ci0gICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1
bGVzOgotICAgICAgICByZXR1cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rpb246Oklnbm9yZVBy
ZXZpb3VzUnVsZXMiOwotICAgIGNhc2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKLSAgICAg
ICAgcmV0dXJuIG9zIDw8ICJDb250ZW50RmlsdGVyQWN0aW9uOjpJbnZhbGlkQWN0aW9uIjsKLSAg
ICB9Ci19Ci19Ci19Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVz
dFdlYktpdEFQSSB7Ci0KLWNsYXNzIENvbnRlbnRGaWx0ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCi0gICAgewotICAgICAg
ICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7Ci0gICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwotICAgICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAg
ICB9Ci19OwotCi1jb25zdCBjaGFyKiBiYXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlw
ZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3Jn
XCJ9fV0iOwotCi1URVNUX0YoQ29udGVudEZpbHRlclRlc3QsIEJhc2ljKQotewotICAgIFJlZlB0
cjxDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBleHRlbnNpb24g
PSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KGJhc2ljRmlsdGVyKTsKLQotICAg
IENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAg
ICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oInRlc3RGaWx0ZXIiLCBleHRlbnNpb24pOwot
ICAgIAotICAgIGF1dG8gYWN0aW9ucyA9IGJhY2tlbmQuYWN0aW9uc0ZvclVSTChVUkwoUGFyc2Vk
VVJMU3RyaW5nLCAiaHR0cDovL3dlYmtpdC5vcmcvIikpOwotICAgIEVYUEVDVF9FUSgxdSwgYWN0
aW9ucy5zaXplKCkpOwotICAgIEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlw
ZTo6QmxvY2tMb2FkLCBhY3Rpb25zWzBdLnR5cGUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248106</attachid>
            <date>2015-03-06 16:02:28 -0800</date>
            <delta_ts>2015-03-06 16:41:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142402-20150306160207.patch</filename>
            <type>text/plain</type>
            <size>104475</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE1LTAzLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gTW92
ZSBjb21waWxpbmcgb2YgY29udGVudCBleHRlbnNpb25zIHRvIHRoZSBVSVByb2Nlc3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQwMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5Db21waWxlZENvbnRl
bnRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpieXRlY29kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjphY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgQ29udmVydCBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24gdG8gYmUgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBzbyB0aGF0IHdlIGNhbiBiYWNrIGl0
IGhvd2V2ZXIKKyAgICAgICAgd2UgbGlrZSBhdCB0aGUgV2ViS2l0IGxldmVsLiBTaW5jZSBpdCBk
b2Vzbid0IG5lY2Vzc2FyaWx5IHVzZSBWZWN0b3JzIGZvciBpdHMgYmFja2luZyBzdG9yZQorICAg
ICAgICBhbnkgbW9yZSwgY2hhbmdlIHRoZSBpbnRlcmZhY2UgdG8gdXNlIHBvaW50ZXIvbGVuZ3Ro
LgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxp
c3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxl
ci5oOgorICAgICAgICBDaGFuZ2UgY29tcGlsZVJ1bGVMaXN0IHRvIHJldHVybiBjb21waWxlZCBy
ZXN1bHQgYXMgdGhlIHJhdyBWZWN0b3JzIHJhdGhlciB0aGFuIGFzCisgICAgICAgIGEgQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLCBzaW5jZSB0aGF0IGNsYXNzIGlzIG5vdyBhYnN0cmFjdC4gSXQg
aXMgdXAgdG8gdGhlIGNhbGxlcgorICAgICAgICB0byBjb3B5IHRoZSBkYXRhIGludG8gaXRzIGZp
bmFsIGhvbWUuCisKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uOjpk
ZXNlcmlhbGl6ZSk6CisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lv
blJ1bGUuaDoKKyAgICAgICAgU3dpdGNoIEFjdGlvbjo6ZGVzZXJpYWxpemUgdG8gdGFrZSBwb2lu
dGVyL2xlbmd0aCByYXRoZXIgdGhhbiBhIFZlY3Rvci4KKworICAgICAgICAqIGNvbnRlbnRleHRl
bnNpb25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yVVJM
KToKKyAgICAgICAgUHVsbCBnZXR0aW5nIHRoZSBzZXJpYWxpemVkIGFjdGlvbnMgZnJvbSB0aGUg
Y29tcGlsZWQgZXh0ZW5zaW9uIG91dCBvZiB0aGUgbG9vcAorICAgICAgICB0byBhdm9pZCBjYWxs
aW5nIHRoZSB2aXJ0dWFsIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzLiBQYXNzIHRoZSBieXRlY29k
ZSBhbmQgYWN0aW9ucworICAgICAgICBhcyBwb2ludGVyL2xlbmd0aCBwYWlycyByYXRoZXIgdGhh
biBWZWN0b3JzLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Z2V0Qml0
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGVJbnRl
cnByZXRlcjo6aW50ZXJwcmV0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRl
Y29kZUludGVycHJldGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
REZBQnl0ZWNvZGVJbnRlcnByZXRlcjo6REZBQnl0ZWNvZGVJbnRlcnByZXRlcik6CisgICAgICAg
IFN3aXRjaCB0aGUgaW50ZXJwcmV0ZXIgdG8gdGFrZSBwb2ludGVyL2xlbmd0aCByYXRoZXIgdGhh
biBhIFZlY3Rvci4KKworICAgICAgICAqIHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENv
bnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50RmlsdGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNv
bnRlbnRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAq
IHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgIFVuaWZ5IHRlcm1pbm9sb2d5
IHRvIHVzZSB0aGUgdGVybSBVc2VyQ29udGVudEV4dGVuc2lvbiByYXRoZXIgdGhhbiBVc2VyQ29u
dGVudEZpbHRlci4KKwogMjAxNS0wMy0wNiAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgJ2luaXRpYWwnIGtleXdvcmQgc3VwcG9ydCBmb3Igc2Nyb2xs
IHNuYXAgQ1NTIHByb3BlcnRpZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2
aXNpb24gMTgxMTg5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLVJl
ZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3Jl
YXRlKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rp
b25CeXRlPiYmIGFjdGlvbnMpCi17Ci0gICAgcmV0dXJuIFdURjo6YWRvcHRSZWYoKm5ldyBDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24oV1RGOjptb3ZlKGJ5dGVjb2RlKSwgV1RGOjptb3ZlKGFjdGlv
bnMpKSk7Ci19Ci0KLUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKFZlY3RvcjxERkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYmIGFjdGlvbnMpCi0gICAgOiBtX2J5dGVjb2RlKFdURjo6bW92ZShieXRlY29k
ZSkpCi0gICAgLCBtX2FjdGlvbnMoV1RGOjptb3ZlKGFjdGlvbnMpKQorQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjp+Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0NvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwyNSArMzQsMTkgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAotY2xhc3MgQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvbXBp
bGVkQ29udGVudEV4dGVuc2lvbj4geworY2xhc3MgV0VCQ09SRV9FWFBPUlQgQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uPiBjcmVhdGUoVmVjdG9yPERGQUJ5dGVjb2RlPiYmLCBWZWN0b3I8U2VyaWFsaXplZEFj
dGlvbkJ5dGU+JiYpOwotCi0gICAgY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUo
KSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlOyB9Ci0gICAgY29uc3QgVmVjdG9yPFNlcmlhbGl6
ZWRBY3Rpb25CeXRlPiYgYWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9uczsgfQorICAg
IHZpcnR1YWwgfkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbigpOwogCi1wcml2YXRlOgotICAgIENv
bXBpbGVkQ29udGVudEV4dGVuc2lvbihWZWN0b3I8REZBQnl0ZWNvZGU+JiYsIFZlY3RvcjxTZXJp
YWxpemVkQWN0aW9uQnl0ZT4mJik7Ci0KLSAgICBWZWN0b3I8REZBQnl0ZWNvZGU+IG1fYnl0ZWNv
ZGU7Ci0gICAgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiBtX2FjdGlvbnM7CisgICAgdmly
dHVhbCBjb25zdCBERkFCeXRlY29kZSogYnl0ZWNvZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlY29kZUxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IFNlcmlhbGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dW5zaWduZWQgYWN0aW9uc0xlbmd0aCgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IENvbnRlbnRFeHRlbnNpb25zCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5j
cHAJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDcgQEAgc3RhdGljIFZlY3Rvcjx1bnNpZ25lZD4gc2VyaWFsaXplQWN0aW9ucwogfQogCiAKLVJl
ZjxDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJpbmcm
IHJ1bGVMaXN0KQorQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBjb21waWxlUnVsZUxpc3Qo
Y29uc3QgU3RyaW5nJiBydWxlTGlzdCkKIHsKICAgICBhdXRvIHBhcnNlZFJ1bGVMaXN0ID0gcGFy
c2VSdWxlTGlzdChydWxlTGlzdCk7CiAKQEAgLTE1NCw3ICsxNTQsNyBAQCBSZWY8Q29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uPiBjb21waWxlUnVsCiAgICAgREZBQnl0ZWNvZGVDb21waWxlciBjb21w
aWxlcihkZmEsIGJ5dGVjb2RlKTsKICAgICBjb21waWxlci5jb21waWxlKCk7CiAKLSAgICByZXR1
cm4gQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGJ5dGVjb2RlKSwg
V1RGOjptb3ZlKGFjdGlvbnMpKTsKKyAgICByZXR1cm4geyBXVEY6Om1vdmUoYnl0ZWNvZGUpLCBX
VEY6Om1vdmUoYWN0aW9ucykgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lv
bnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAxODExODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZjxDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24+IGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJpbmcmKTsKK3N0cnVj
dCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIHsKKyAgICBWZWN0b3I8REZBQnl0ZWNvZGU+
IGJ5dGVjb2RlOworICAgIFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKK307
CisKK1dFQkNPUkVfRVhQT1JUIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgY29tcGlsZVJ1
bGVMaXN0KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9u
cwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25SdWxlLmNwcAkocmV2aXNp
b24gMTgxMTg5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvblJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIENvbnRlbnRF
eHRlbnNpb25SdWxlOjpDb250ZW50RXh0ZW5zaW9uUnUKICAgICBBU1NFUlQoIW1fdHJpZ2dlci51
cmxGaWx0ZXIuaXNFbXB0eSgpKTsKIH0KIAotQWN0aW9uIEFjdGlvbjo6ZGVzZXJpYWxpemUoY29u
c3QgVmVjdG9yPFNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYgYWN0aW9ucywgdW5zaWduZWQgbG9jYXRp
b24pCitBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBTZXJpYWxpemVkQWN0aW9uQnl0
ZSogYWN0aW9ucywgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCwgdW5zaWduZWQgbG9jYXRp
b24pCiB7CiAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxBY3Rpb25UeXBlPihhY3Rpb25zW2xvY2F0
aW9uXSkpIHsKICAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrQ29va2llczoKQEAgLTUyLDE1ICs1
MiwxNSBAQCBBY3Rpb24gQWN0aW9uOjpkZXNlcmlhbGl6ZShjb25zdCBWZWN0b3I8CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NE
aXNwbGF5Tm9uZTogewogICAgICAgICB1bnNpZ25lZCBzdHJpbmdTdGFydEluZGV4ID0gbG9jYXRp
b24gKyBzaXplb2YoQWN0aW9uVHlwZSkgKyBzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKGJvb2wp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zLnNpemUoKSA+PSBzdHJpbmdTdGFydElu
ZGV4KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBzdHJpbmdTdGFy
dEluZGV4KTsKICAgICAgICAgdW5zaWduZWQgc2VsZWN0b3JMZW5ndGggPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCo+KCZhY3Rpb25zW2xvY2F0aW9uICsgc2l6ZW9mKEFjdGlvblR5
cGUpXSk7CiAgICAgICAgIGJvb2wgd2lkZUNoYXJhY3RlcnMgPSBhY3Rpb25zW2xvY2F0aW9uICsg
c2l6ZW9mKEFjdGlvblR5cGUpICsgc2l6ZW9mKHVuc2lnbmVkKV07CiAgICAgICAgIAogICAgICAg
ICBpZiAod2lkZUNoYXJhY3RlcnMpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlv
bnMuc2l6ZSgpID49IHN0cmluZ1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihV
Q2hhcikpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWN0aW9uc0xlbmd0aCA+PSBzdHJp
bmdTdGFydEluZGV4ICsgc2VsZWN0b3JMZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKICAgICAgICAg
ICAgIHJldHVybiBBY3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmUsIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oJmFjdGlvbnNbc3RyaW5nU3RhcnRJbmRleF0pLCBz
ZWxlY3Rvckxlbmd0aCkpOwogICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGFjdGlv
bnMuc2l6ZSgpID49IHN0cmluZ1N0YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihM
Q2hhcikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhY3Rpb25zTGVuZ3RoID49IHN0cmluZ1N0
YXJ0SW5kZXggKyBzZWxlY3Rvckxlbmd0aCAqIHNpemVvZihMQ2hhcikpOwogICAgICAgICByZXR1
cm4gQWN0aW9uKEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lLCBTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCZhY3Rpb25zW3N0cmluZ1N0YXJ0SW5kZXhdKSwgc2VsZWN0b3JM
ZW5ndGgpKTsKICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvblJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUnVsZS5oCShyZXZpc2lvbiAxODEx
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHN0cnVjdCBBY3Rpb24gewog
ICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9j
c3NTZWxlY3RvciA9PSBvdGhlci5tX2Nzc1NlbGVjdG9yOwogICAgIH0KLSAgICBzdGF0aWMgQWN0
aW9uIGRlc2VyaWFsaXplKGNvbnN0IFZlY3RvcjxTZXJpYWxpemVkQWN0aW9uQnl0ZT4mLCB1bnNp
Z25lZCBsb2NhdGlvbik7CisgICAgc3RhdGljIEFjdGlvbiBkZXNlcmlhbGl6ZShjb25zdCBTZXJp
YWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucywgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCwg
dW5zaWduZWQgbG9jYXRpb24pOwogCiAgICAgQWN0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgY29uc3QgU3RyaW5nJiBjc3NTZWxlY3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1fY3NzU2VsZWN0b3I7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2
aXNpb24gMTgxMTg5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTEgKzY3LDE0IEBA
IFZlY3RvcjxBY3Rpb24+IENvbnRlbnRFeHRlbnNpb25zQmFja2VuZDoKICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKHVybFN0cmluZy5jb250YWluc09ubHlBU0NJSSgpLCAiQSBkZWNvZGVkIFVSTCBz
aG91bGQgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSBtYXRjaGluZyBhbGdvcml0
aG0gYXNzdW1lcyB0aGUgaW5wdXQgaXMgQVNDSUkuIik7CiAgICAgY29uc3QgQ1N0cmluZyYgdXJs
Q1N0cmluZyA9IHVybFN0cmluZy51dGY4KCk7CiAKLSAgICBWZWN0b3I8QWN0aW9uPiBhY3Rpb25z
OworICAgIFZlY3RvcjxBY3Rpb24+IGZpbmFsQWN0aW9uczsKICAgICBmb3IgKGF1dG8mIGNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbiA6IG1fY29udGVudEV4dGVuc2lvbnMudmFsdWVzKCkpIHsKLSAg
ICAgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlciBpbnRlcnByZXRlcihjb21waWxlZENvbnRlbnRF
eHRlbnNpb24tPmJ5dGVjb2RlKCkpOworICAgICAgICBERkFCeXRlY29kZUludGVycHJldGVyIGlu
dGVycHJldGVyKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi0+Ynl0ZWNvZGUoKSwgY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLT5ieXRlY29kZUxlbmd0aCgpKTsKICAgICAgICAgREZBQnl0ZWNvZGVJ
bnRlcnByZXRlcjo6QWN0aW9ucyB0cmlnZ2VyZWRBY3Rpb25zID0gaW50ZXJwcmV0ZXIuaW50ZXJw
cmV0KHVybENTdHJpbmcpOwogICAgICAgICAKKyAgICAgICAgY29uc3QgU2VyaWFsaXplZEFjdGlv
bkJ5dGUqIGFjdGlvbnMgPSBjb21waWxlZENvbnRlbnRFeHRlbnNpb24tPmFjdGlvbnMoKTsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCA9IGNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbi0+YWN0aW9uc0xlbmd0aCgpOworICAgICAgICAKICAgICAgICAgaWYgKCF0cmlnZ2VyZWRB
Y3Rpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhY3Rpb25M
b2NhdGlvbnM7CiAgICAgICAgICAgICBhY3Rpb25Mb2NhdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh0cmlnZ2VyZWRBY3Rpb25zLnNpemUoKSk7CkBAIC04MSwxNCArODQsMTQgQEAgVmVjdG9y
PEFjdGlvbj4gQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBBZGQgYWN0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHRvIHByb3Blcmx5IGRlYWwgd2l0
aCBJZ25vcmVQcmV2aW91c1J1bGVzLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYWN0
aW9uTG9jYXRpb25zLnNpemUoKTsgaTsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgQWN0aW9uIGFj
dGlvbiA9IEFjdGlvbjo6ZGVzZXJpYWxpemUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLT5hY3Rp
b25zKCksIGFjdGlvbkxvY2F0aW9uc1tpIC0gMV0pOworICAgICAgICAgICAgICAgIEFjdGlvbiBh
Y3Rpb24gPSBBY3Rpb246OmRlc2VyaWFsaXplKGFjdGlvbnMsIGFjdGlvbnNMZW5ndGgsIGFjdGlv
bkxvY2F0aW9uc1tpIC0gMV0pOwogICAgICAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSgpID09
IEFjdGlvblR5cGU6Oklnbm9yZVByZXZpb3VzUnVsZXMpCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKGFjdGlvbik7CisgICAgICAgICAg
ICAgICAgZmluYWxBY3Rpb25zLmFwcGVuZChhY3Rpb24pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQotICAgIHJldHVybiBhY3Rpb25zOworICAgIHJldHVybiBmaW5hbEFjdGlvbnM7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVycHJldGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMTgxMTg5KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDggKzM1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNp
b25zIHsKIAogdGVtcGxhdGUgPHR5cGVuYW1lIEludFR5cGU+Ci1zdGF0aWMgaW5saW5lIEludFR5
cGUgZ2V0Qml0cyhjb25zdCBWZWN0b3I8REZBQnl0ZWNvZGU+JiBieXRlY29kZSwgdW5zaWduZWQg
aW5kZXgpCitzdGF0aWMgaW5saW5lIEludFR5cGUgZ2V0Qml0cyhjb25zdCBERkFCeXRlY29kZSog
Ynl0ZWNvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3RoLCB1bnNpZ25lZCBpbmRleCkKIHsKKyAg
ICBBU1NFUlRfVU5VU0VEKGJ5dGVjb2RlTGVuZ3RoLCBpbmRleCArIHNpemVvZihJbnRUeXBlKSA8
PSBieXRlY29kZUxlbmd0aCk7CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IElu
dFR5cGUqPigmYnl0ZWNvZGVbaW5kZXhdKTsKIH0KIApAQCAtNTEsNyArNTIsOCBAQCBERkFCeXRl
Y29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgCiAgICAgLy8gVGhpcyBzaG91
bGQgYWx3YXlzIHRlcm1pbmF0ZSBpZiBpbnRlcnByZXRpbmcgY29ycmVjdGx5IGNvbXBpbGVkIGJ5
dGVjb2RlLgogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4oYnl0ZWNvZGVbcHJvZ3JhbUNvdW50ZXJdKSkgeworICAg
ICAgICBBU1NFUlQocHJvZ3JhbUNvdW50ZXIgPD0gbV9ieXRlY29kZUxlbmd0aCk7CisgICAgICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8REZBQnl0ZWNvZGVJbnN0cnVjdGlvbj4obV9ieXRlY29kZVtw
cm9ncmFtQ291bnRlcl0pKSB7CiAKICAgICAgICAgY2FzZSBERkFCeXRlY29kZUluc3RydWN0aW9u
OjpUZXJtaW5hdGU6CiAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsKQEAgLTYwLDIwICs2Miwy
MCBAQCBERkFCeXRlY29kZUludGVycHJldGVyOjpBY3Rpb25zIERGQUJ5dGVjCiAgICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1cmwgaXMgdGhl
IHZhbHVlIHN0b3JlZCB3aXRoIHRoZSBieXRlY29kZS4KICAgICAgICAgICAgIGlmICghdXJsW3Vy
bEluZGV4XSkKICAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uczsgLy8gUmVhY2hlZCBudWxs
IGNoYXJhY3RlciBhdCBlbmQuCi0gICAgICAgICAgICBpZiAodXJsW3VybEluZGV4XSA9PSBnZXRC
aXRzPHVpbnQ4X3Q+KGJ5dGVjb2RlLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29k
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgPSBnZXRCaXRzPHVuc2lnbmVk
PihieXRlY29kZSwgcHJvZ3JhbUNvdW50ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9m
KHVpbnQ4X3QpKTsKKyAgICAgICAgICAgIGlmICh1cmxbdXJsSW5kZXhdID09IGdldEJpdHM8dWlu
dDhfdD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50ZXIgKyBzaXpl
b2YoREZBQnl0ZWNvZGUpKSkgeworICAgICAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0
Qml0czx1bnNpZ25lZD4obV9ieXRlY29kZSwgbV9ieXRlY29kZUxlbmd0aCwgcHJvZ3JhbUNvdW50
ZXIgKyBzaXplb2YoREZBQnl0ZWNvZGUpICsgc2l6ZW9mKHVpbnQ4X3QpKTsKICAgICAgICAgICAg
ICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0aGUgREZBLgog
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcHJvZ3JhbUNvdW50ZXIgKz0gaW5z
dHJ1Y3Rpb25TaXplV2l0aEFyZ3VtZW50cyhERkFCeXRlY29kZUluc3RydWN0aW9uOjpDaGVja1Zh
bHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgREZBQnl0ZWNvZGVJbnN0
cnVjdGlvbjo6SnVtcDoKLSAgICAgICAgICAgIHByb2dyYW1Db3VudGVyID0gZ2V0Qml0czx1bnNp
Z25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSk7Cisg
ICAgICAgICAgICBwcm9ncmFtQ291bnRlciA9IGdldEJpdHM8dW5zaWduZWQ+KG1fYnl0ZWNvZGUs
IG1fYnl0ZWNvZGVMZW5ndGgsIHByb2dyYW1Db3VudGVyICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSk7
CiAgICAgICAgICAgICB1cmxJbmRleCsrOyAvLyBUaGlzIHJlcHJlc2VudHMgYW4gZWRnZSBpbiB0
aGUgREZBLgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBERkFCeXRlY29kZUlu
c3RydWN0aW9uOjpBcHBlbmRBY3Rpb246Ci0gICAgICAgICAgICBhY3Rpb25zLmFkZChzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oZ2V0Qml0czx1bnNpZ25lZD4oYnl0ZWNvZGUsIHByb2dyYW1Db3VudGVy
ICsgc2l6ZW9mKERGQUJ5dGVjb2RlKSkpKTsKKyAgICAgICAgICAgIGFjdGlvbnMuYWRkKHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihnZXRCaXRzPHVuc2lnbmVkPihtX2J5dGVjb2RlLCBtX2J5dGVjb2Rl
TGVuZ3RoLCBwcm9ncmFtQ291bnRlciArIHNpemVvZihERkFCeXRlY29kZSkpKSk7CiAgICAgICAg
ICAgICBwcm9ncmFtQ291bnRlciArPSBpbnN0cnVjdGlvblNpemVXaXRoQXJndW1lbnRzKERGQUJ5
dGVjb2RlSW5zdHJ1Y3Rpb246OkFwcGVuZEFjdGlvbik7CiAgICAgICAgICAgICBicmVhazsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnBy
ZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0RG
QUJ5dGVjb2RlSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTgxMTg5KQorKysgU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw4ICszOSw5IEBAIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKIGNs
YXNzIERGQUJ5dGVjb2RlSW50ZXJwcmV0ZXIgewogcHVibGljOgotICAgIERGQUJ5dGVjb2RlSW50
ZXJwcmV0ZXIoY29uc3QgVmVjdG9yPERGQUJ5dGVjb2RlPiYgYnl0ZWNvZGUpCi0gICAgICAgIDog
Ynl0ZWNvZGUoYnl0ZWNvZGUpCisgICAgREZBQnl0ZWNvZGVJbnRlcnByZXRlcihjb25zdCBERkFC
eXRlY29kZSogYnl0ZWNvZGUsIHVuc2lnbmVkIGJ5dGVjb2RlTGVuZ3RoKQorICAgICAgICA6IG1f
Ynl0ZWNvZGUoYnl0ZWNvZGUpCisgICAgICAgICwgbV9ieXRlY29kZUxlbmd0aChieXRlY29kZUxl
bmd0aCkKICAgICB7CiAgICAgfQogICAgIApAQCAtNDksNyArNTAsOCBAQCBwdWJsaWM6CiAgICAg
QWN0aW9ucyBpbnRlcnByZXQoY29uc3QgQ1N0cmluZyYpOwogCiBwcml2YXRlOgotICAgIGNvbnN0
IFZlY3RvcjxERkFCeXRlY29kZT4mIGJ5dGVjb2RlOworICAgIGNvbnN0IERGQUJ5dGVjb2RlKiBt
X2J5dGVjb2RlOworICAgIGNvbnN0IHVuc2lnbmVkIG1fYnl0ZWNvZGVMZW5ndGg7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTgxMTg5KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzksMTUgKzE3OSwxNSBAQCB2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
VXNlck1lCiAjZW5kaWYKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHJ1bGVMaXN0KQordm9pZCBVc2VyQ29udGVudENvbnRyb2xsZXI6
OmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPENvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNvbnRlbnRFeHRlbnNpb24p
CiB7CiAgICAgaWYgKCFtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kKQogICAgICAgICBtX2NvbnRl
bnRFeHRlbnNpb25CYWNrZW5kID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50RXh0ZW5zaW9uczo6
Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kPigpOwogICAgIAotICAgIG1fY29udGVudEV4dGVuc2lv
bkJhY2tlbmQtPmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgQ29udGVudEV4dGVuc2lvbnM6OmNv
bXBpbGVSdWxlTGlzdChydWxlTGlzdCkpOworICAgIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQt
PmFkZENvbnRlbnRFeHRlbnNpb24obmFtZSwgY29udGVudEV4dGVuc2lvbik7CiB9CiAKLXZvaWQg
VXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb25zdCBTdHJp
bmcmIG5hbWUpCit2b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghbV9jb250ZW50RXh0ZW5z
aW9uQmFja2VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ28KICAgICBtX2NvbnRlbnRFeHRlbnNpb25C
YWNrZW5kLT5yZW1vdmVDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCi12b2lkIFVzZXJDb250
ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCkKK3ZvaWQgVXNlckNv
bnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKQogewogICAg
IGlmICghbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCShyZXZpc2lvbiAx
ODExODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIFVzZXJTdHlsZVNoZWV0OwogY2xh
c3MgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjsKIAogbmFtZXNwYWNlIENvbnRlbnRFeHRl
bnNpb25zIHsKK2NsYXNzIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbjsKIGNsYXNzIENvbnRlbnRF
eHRlbnNpb25zQmFja2VuZDsKIHN0cnVjdCBBY3Rpb247CiB9CkBAIC04MCwxMiArODEsMTEgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgdGFrZSBhIHBvaW50ZXIgdG8gYSBjb21waWxlZCBV
c2VyQ29udGVudEZpbHRlci4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFVzZXJDb250ZW50
RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBydWxlTGlzdCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb25zdCBTdHJpbmcm
IG5hbWUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0
ZXJzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRVc2VyQ29udGVudEV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uPik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVVc2VyQ29udGVu
dEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IENv
bnNpZGVyIHB1dHRpbmcgdGhpcyAoYW5kIG90aGVyIGZ1dHVyZSBjb250ZW50IGZpbHRlciBwcmVk
aWNhdGVzKSBpbiBpdHMgb3duIGNsYXNzLgorICAgIC8vIEZJWE1FOiBDb25zaWRlciBwdXR0aW5n
IHRoaXMgKGFuZCBvdGhlciBmdXR1cmUgY29udGVudCBleHRlbnNpb24gcHJlZGljYXRlcykgaW4g
aXRzIG93biBjbGFzcy4KICAgICBWZWN0b3I8Q29udGVudEV4dGVuc2lvbnM6OkFjdGlvbj4gYWN0
aW9uc0ZvclVSTChjb25zdCBVUkwmKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lv
biAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMjIgQEAKKzIwMTUtMDMtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBNb3ZlIGNvbXBpbGluZyBvZiBjb250ZW50
IGV4dGVuc2lvbnMgdG8gdGhlIFVJUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvQVBJL0FQSU9iamVjdC5oOgorICAgICAgICBS
ZW5hbWUgVXNlckNvbnRlbnRGaWx0ZXIgdHlwZSB0byBVc2VyQ29udGVudEV4dGVuc2lvbiB0byBt
YXRjaCBuZXcgdW5pZmllZCBuYW1pbmcuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246On5XZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmJ5dGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpieXRlY29kZUxlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6YWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6YWN0aW9uc0xlbmd0aCk6CisgICAgICAgICogU2hhcmVkL1dlYkNvbXBpbGVkQ29u
dGVudEV4dGVuc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgQWRkIG5ldyBXZWJLaXQyIGltcGxlbWVu
dGF0aW9uIG9mIENvbXBpbGVkQ29udGVudEV4dGVuc2lvbi4gUmlnaHQgbm93IGl0IGlzIHRoZSBz
YW1lIGFzIHRoZSBvbGQKKyAgICAgICAgV2ViQ29yZSBiYXNlZCBDb21waWxlZENvbnRlbnRFeHRl
bnNpb24sIGJ1dCBpbiBzdWJzZXF1ZW50IHBhdGNoZXMsIGl0IHdpbGwgdXNlIHNoYXJlZC9maWxl
IGJhY2tlZAorICAgICAgICBtZW1vcnkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmg6IEFkZGVkLgorICAgICAgICBBZGQgZW5j
b2RhYmxlL2RlY29kYWJsZSBob2xkZXIgZm9yIHRoZSBjb21waWxlZCBjb250ZW50IGV4dGVuc2lv
biBkYXRhIGZvciB1c2UgaW4gSVBDLiBSaWdodAorICAgICAgICBub3cgaXQgaXMgZG9pbmcgdGhl
IG5haXZlIHRoaW5nIGFuZCBhbHdheXMgY29weWluZyB0aGUgZGF0YSwgYnV0IGluIHN1YnNlcXVl
bnQgcGF0Y2hlcywgaXQgd2lsbAorICAgICAgICB1c2Ugc2hhcmVkL2ZpbGUgYmFja2VkIG1lbW9y
eS4KKworICAgICAgICAqIFNoYXJlZC9XZWJQYWdlR3JvdXBEYXRhLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZUdyb3VwRGF0YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZUdyb3VwRGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViUGFnZUdyb3VwRGF0YS5o
OgorICAgICAgICBSZW5hbWUgbWVtYmVyIHRvIG1hdGNoIG5ldyB1bmlmaWNhdGlvbiBvbiB0aGUg
bmFtZSB1c2VyQ29udGVudEV4dGVuc2lvbi4gQ2hhbmdlIHRoZSB2YWx1ZSBmcm9tCisgICAgICAg
IHRoZSBzZXJpYWxpemVkIEpTT04gKGFzIGEgU3RyaW5nKSB0byBXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4
dGVuc2lvbi5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRGaWx0ZXIuY3BwLgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVuc2lv
bjo6VXNlckNvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoQVBJOjpVc2VyQ29udGVudEV4dGVu
c2lvbjo6flVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKEFQSTo6VXNlckNvbnRlbnRG
aWx0ZXI6OlVzZXJDb250ZW50RmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEFQSTo6VXNlckNv
bnRlbnRGaWx0ZXI6On5Vc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmguCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5oOiBSZW1vdmVkLgorICAgICAg
ICBSZW5hbWVkIFVzZXJDb250ZW50RmlsdGVyIHRvIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLiBV
cGRhdGVkIHRvIHN0b3JlIHRoZSBjb21waWxlZCBleHRlbnNpb24gKGFzIGEgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uKQorICAgICAgICByYXRoZXIgdGhhbiB0aGUgc2VyaWFsaXplZCBKU09O
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQVBJQ2FzdC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHA6CisgICAgICAgIChXS1BhZ2VHcm91cEFkZFVz
ZXJDb250ZW50RmlsdGVyKToKKyAgICAgICAgKFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRG
aWx0ZXIpOgorICAgICAgICAoV0tQYWdlR3JvdXBSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5j
cHA6CisgICAgICAgIChXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJDb250ZW50RmlsdGVy
KToKKyAgICAgICAgKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRG
aWx0ZXJzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250
cm9sbGVyLm1tOgorICAgICAgICAoLVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfYWRkVXNlckNv
bnRlbnRGaWx0ZXI6XSk6CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250cm9sbGVyIF9yZW1v
dmVVc2VyQ29udGVudEZpbHRlcjpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xs
ZXIgX3JlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVyc10pOgorICAgICAgICBVcGRhdGUgZm9yIHJl
bmFtZSBvZiBBUElVc2VyQ29udGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4dGVuc2lvbi4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RmlsdGVyUmVmLmNwcDoKKyAg
ICAgICAgKFdLVXNlckNvbnRlbnRGaWx0ZXJHZXRUeXBlSUQpOgorICAgICAgICAoV0tVc2VyQ29u
dGVudEZpbHRlckNyZWF0ZSk6CisgICAgICAgIFVwZGF0ZSBmb3IgcmVuYW1lIG9mIEFQSVVzZXJD
b250ZW50RmlsdGVyIC0+IFVzZXJDb250ZW50RXh0ZW5zaW9uLiBBbHNvIG1ha2UgV0tVc2VyQ29u
dGVudEZpbHRlckNyZWF0ZSBlYWdlcmx5CisgICAgICAgIGNvbXBpbGUgcnVsZSBsaXN0IHRvIGEg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW06CisgICAgICAgICgtW19XS1VzZXJDb250
ZW50RmlsdGVyIGluaXRXaXRoTmFtZTpzZXJpYWxpemVkUnVsZXM6XSk6CisgICAgICAgICgtW19X
S1VzZXJDb250ZW50RmlsdGVyIGRlYWxsb2NdKToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRG
aWx0ZXIgX2FwaU9iamVjdF0pOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFtZSBvZiBBUElVc2Vy
Q29udGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4dGVuc2lvbi4gQWxzbyBtYWtlIGluaXRXaXRo
TmFtZTpzZXJpYWxpemVkUnVsZXM6IGVhZ2VybHkKKyAgICAgICAgY29tcGlsZSBydWxlIGxpc3Qg
dG8gYSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmg6CisgICAgICAgIChX
ZWJLaXQ6OndyYXBwZXIpOgorICAgICAgICBVcGRhdGUgZm9yIHJlbmFtZSBvZiBBUElVc2VyQ29u
dGVudEZpbHRlciAtPiBVc2VyQ29udGVudEV4dGVuc2lvbi4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRQcm9jZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJDb250
ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9u
cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjphZGRV
c2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxV
c2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlR3JvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlR3JvdXA6OmFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwOjpyZW1v
dmVVc2VyQ29udGVudEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VHcm91cDo6
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZUdyb3VwOjphZGRVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VHcm91cDo6cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlR3JvdXA6OnJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycyk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VHcm91cC5oOgorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVu
dEV4dGVuc2lvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50
RmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9s
bGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2Fn
ZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OldlYlBhZ2VHcm91cFByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OmFkZFVzZXJDb250ZW50RXh0
ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnJlbW92ZVVzZXJD
b250ZW50RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZUdyb3VwUHJveHk6OnJl
bW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VH
cm91cFByb3h5OjphZGRVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VHcm91cFByb3h5OjpyZW1vdmVVc2VyQ29udGVudEZpbHRlcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VHcm91cFByb3h5OjpyZW1vdmVBbGxVc2VyQ29udGVu
dEZpbHRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
R3JvdXBQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgUGlwZSB0aGUgY29tcGlsZWQgZXh0ZW5zaW9uIGZy
b20gdGhlIFVJUHJvY2VzcyB0byB0aGUgV2ViUHJvY2Vzcy4KKwogMjAxNS0wMy0wNiAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE4MDc4Mik6
IERhdGEgRGV0ZWN0b3IgcG9wb3ZlcnMgYXJlIG5vdCBkaXNtaXNzZWQgb24gc2Nyb2xsIG9yIHpv
b20KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIzOCw4IEBA
IHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBTaGFyZWQvVmlzaXRlZExpbmtUYWJsZS5jcHAKICAg
ICBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAKICAgICBTaGFyZWQvV2ViQmF0dGVy
eVN0YXR1cy5jcHAKKyAgICBTaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAor
ICAgIFNoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcAogICAgIFNoYXJl
ZC9XZWJDb25uZWN0aW9uLmNwcAogICAgIFNoYXJlZC9XZWJDb25uZWN0aW9uQ2xpZW50LmNwcAog
ICAgIFNoYXJlZC9XZWJDb250ZXh0TWVudUl0ZW0uY3BwCkBAIC0zODksNyArMzkxLDcgQEAgc2V0
KFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbi5jcHAKICAg
ICBVSVByb2Nlc3MvQVBJL0FQSVNlc3Npb25TdGF0ZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0FQ
SVdlYnNpdGVEYXRhU3RvcmUuY3BwCi0gICAgVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZp
bHRlci5jcHAKKyAgICBVSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAog
CiAgICAgVUlQcm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworUmVmPFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4gV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbihXVEY6Om1vdmUoYnl0ZWNv
ZGUpLCBXVEY6Om1vdmUoYWN0aW9ucykpKTsKK30KKworV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uOjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24oVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRF
eHRlbnNpb25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSwgVmVjdG9yPFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZT4mJiBhY3Rpb25zKQorICAgIDogbV9k
YXRhIHsgV1RGOjptb3ZlKGJ5dGVjb2RlKSwgV1RGOjptb3ZlKGFjdGlvbnMpIH0KK3sKK30KKwor
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
KCkKK3sKK30KKworY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2Rl
KiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmJ5dGVjb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLmRhdGEoKTsKK30KKwordW5zaWduZWQgV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpieXRlY29kZUxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZGF0YS5ieXRlY29kZS5zaXplKCk7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjph
Y3Rpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLmFjdGlvbnMuZGF0YSgpOworfQor
Cit1bnNpZ25lZCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmFjdGlvbnNMZW5ndGgoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEuYWN0aW9ucy5zaXplKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uX2gKKyNkZWZpbmUg
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uX2gKKworI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCisKKyNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24g
ZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb24+IGNyZWF0ZShWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlPiYmLCBWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRB
Y3Rpb25CeXRlPiYmKTsKKyAgICB2aXJ0dWFsIH5XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24o
KTsKKworICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQorCitwcml2YXRlOgorICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbihWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYmLCBW
ZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25CeXRlPiYm
KTsKKworICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5
dGVjb2RlKiBieXRlY29kZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQg
Ynl0ZWNvZGVMZW5ndGgoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVkQWN0aW9uQnl0ZSogYWN0aW9ucygpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdW5zaWduZWQgYWN0aW9uc0xlbmd0aCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgbV9k
YXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQorI2VuZGlmIC8vIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbl9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oIgorCisjaWYgRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGE6OmVu
Y29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVy
IDw8IGJ5dGVjb2RlOworICAgIGVuY29kZXIgPDwgYWN0aW9uczsKK30KKworYm9vbCBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOjpkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImIGRl
Y29kZXIsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbkRhdGEpCit7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhLmJ5dGVjb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5hY3Rpb25zKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGFf
aAorI2RlZmluZSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhX2gKKworI2lmIEVOQUJM
RShDT05URU5UX0VYVEVOU0lPTlMpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbi5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEFyZ3VtZW50RGVjb2RlcjsK
K2NsYXNzIEFyZ3VtZW50RW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgeworcHVibGljOgorICAgIHZvaWQgZW5j
b2RlKElQQzo6QXJndW1lbnRFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiwgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYp
OworCisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZT4g
Ynl0ZWNvZGU7CisgICAgVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxp
emVkQWN0aW9uQnl0ZT4gYWN0aW9uczsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShDT05U
RU5UX0VYVEVOU0lPTlMpCisjZW5kaWYgLy8gV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0
YV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUdyb3VwRGF0YS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlBhZ2VHcm91cERhdGEuY3BwCShy
ZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUdyb3VwRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgdm9pZCBXZWJQYWdlR3JvdXBE
YXRhOjplbmNvZGUoSVBDOjpBcmd1bQogICAgIGVuY29kZXIgPDwgdXNlclN0eWxlU2hlZXRzOwog
ICAgIGVuY29kZXIgPDwgdXNlclNjcmlwdHM7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLSAgICBlbmNvZGVyIDw8IHVzZXJDb250ZW50RmlsdGVyczsKKyAgICBlbmNvZGVyIDw8IHVz
ZXJDb250ZW50RXh0ZW5zaW9uczsKICNlbmRpZgogfQogCkBAIC01OCw3ICs1OCw3IEBAIGJvb2wg
V2ViUGFnZUdyb3VwRGF0YTo6ZGVjb2RlKElQQzo6QXJndW0KICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGRhdGEudXNlclNjcmlwdHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEudXNlckNv
bnRlbnRGaWx0ZXJzKSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGRhdGEudXNlckNvbnRlbnRF
eHRlbnNpb25zKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUGFnZUdyb3VwRGF0YS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlR3JvdXBEYXRhLmgJKHJldmlz
aW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQYWdlR3JvdXBEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViUGFnZUdyb3VwRGF0
YV9oCiAjZGVmaW5lIFdlYlBhZ2VHcm91cERhdGFfaAogCisjaW5jbHVkZSAiV2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlclNjcmlwdC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVXNlclN0eWxlU2hlZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgpAQCAtNTIsNyArNTMsNyBAQCBzdHJ1Y3QgV2ViUGFnZUdyb3VwRGF0YSB7CiAgICAgVmVj
dG9yPFdlYkNvcmU6OlVzZXJTY3JpcHQ+IHVzZXJTY3JpcHRzOwogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB1c2VyQ29udGVudEZp
bHRlcnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRh
dGE+IHVzZXJDb250ZW50RXh0ZW5zaW9uczsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw4ICs4MCw4
IEBAIHB1YmxpYzoKICAgICAgICAgVVJMLAogICAgICAgICBVUkxSZXF1ZXN0LAogICAgICAgICBV
UkxSZXNwb25zZSwKKyAgICAgICAgVXNlckNvbnRlbnRFeHRlbnNpb24sCiAgICAgICAgIFVzZXJD
b250ZW50VVJMUGF0dGVybiwKLSAgICAgICAgVXNlckNvbnRlbnRGaWx0ZXIsCiAgICAgICAgIFVz
ZXJTY3JpcHQsCiAgICAgICAgIFdlYkFyY2hpdmUsCiAgICAgICAgIFdlYkFyY2hpdmVSZXNvdXJj
ZSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlR3JvdXAuY3BwCShyZXZp
c2lvbiAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZUdyb3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOCBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgogCiAjaW5jbHVkZSAiQVBJQXJyYXkuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEZp
bHRlci5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAi
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlBy
ZWZlcmVuY2VzLmgiCkBAIC0xNzMsMjIgKzE3NCwyMiBAQCB2b2lkIFdlYlBhZ2VHcm91cDo6cmVt
b3ZlQWxsVXNlckNvbnRlbnQoCiB9CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQot
dm9pZCBXZWJQYWdlR3JvdXA6OmFkZFVzZXJDb250ZW50RmlsdGVyKGNvbnN0IEFQSTo6VXNlckNv
bnRlbnRGaWx0ZXImIHVzZXJDb250ZW50RmlsdGVyKQordm9pZCBXZWJQYWdlR3JvdXA6OmFkZFVz
ZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24mIHVzZXJD
b250ZW50RXh0ZW5zaW9uKQogewotICAgIG1fZGF0YS51c2VyQ29udGVudEZpbHRlcnMuc2V0KHVz
ZXJDb250ZW50RmlsdGVyLm5hbWUoKSwgdXNlckNvbnRlbnRGaWx0ZXIuc2VyaWFsaXplZFJ1bGVz
KCkpOwotICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0luR3JvdXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91
cFByb3h5OjpBZGRVc2VyQ29udGVudEZpbHRlcih1c2VyQ29udGVudEZpbHRlci5uYW1lKCksIHVz
ZXJDb250ZW50RmlsdGVyLnNlcmlhbGl6ZWRSdWxlcygpKSwgbV9kYXRhLnBhZ2VHcm91cElEKTsK
KyAgICBtX2RhdGEudXNlckNvbnRlbnRFeHRlbnNpb25zLnNldCh1c2VyQ29udGVudEV4dGVuc2lv
bi5uYW1lKCksIHVzZXJDb250ZW50RXh0ZW5zaW9uLmNvbXBpbGVkRXh0ZW5zaW9uKCkuZGF0YSgp
KTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXNJbkdyb3VwKE1lc3NhZ2VzOjpXZWJQYWdlR3JvdXBQ
cm94eTo6QWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24ubmFtZSgp
LCB1c2VyQ29udGVudEV4dGVuc2lvbi5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSksIG1fZGF0
YS5wYWdlR3JvdXBJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZUdyb3VwOjpyZW1vdmVVc2VyQ29udGVu
dEZpbHRlcihjb25zdCBTdHJpbmcmIGNvbnRlbnRGaWx0ZXJOYW1lKQordm9pZCBXZWJQYWdlR3Jv
dXA6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgY29udGVudEV4dGVu
c2lvbk5hbWUpCiB7Ci0gICAgbV9kYXRhLnVzZXJDb250ZW50RmlsdGVycy5yZW1vdmUoY29udGVu
dEZpbHRlck5hbWUpOwotICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0luR3JvdXAoTWVzc2FnZXM6Oldl
YlBhZ2VHcm91cFByb3h5OjpSZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb250ZW50RmlsdGVyTmFt
ZSksIG1fZGF0YS5wYWdlR3JvdXBJRCk7CisgICAgbV9kYXRhLnVzZXJDb250ZW50RXh0ZW5zaW9u
cy5yZW1vdmUoY29udGVudEV4dGVuc2lvbk5hbWUpOworICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0lu
R3JvdXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpSZW1vdmVVc2VyQ29udGVudEV4dGVu
c2lvbihjb250ZW50RXh0ZW5zaW9uTmFtZSksIG1fZGF0YS5wYWdlR3JvdXBJRCk7CiB9CiAKLXZv
aWQgV2ViUGFnZUdyb3VwOjpyZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKQordm9pZCBXZWJQ
YWdlR3JvdXA6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpCiB7Ci0gICAgbV9kYXRh
LnVzZXJDb250ZW50RmlsdGVycy5jbGVhcigpOwotICAgIHNlbmRUb0FsbFByb2Nlc3Nlc0luR3Jv
dXAoTWVzc2FnZXM6OldlYlBhZ2VHcm91cFByb3h5OjpSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRl
cnMoKSwgbV9kYXRhLnBhZ2VHcm91cElEKTsKKyAgICBtX2RhdGEudXNlckNvbnRlbnRFeHRlbnNp
b25zLmNsZWFyKCk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzSW5Hcm91cChNZXNzYWdlczo6V2Vi
UGFnZUdyb3VwUHJveHk6OlJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2RhdGEu
cGFnZUdyb3VwSUQpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlR3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZUdyb3VwLmgJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlR3JvdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudCgpOwogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZFVzZXJDb250ZW50RmlsdGVyKGNvbnN0IEFQSTo6
VXNlckNvbnRlbnRGaWx0ZXImKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50RmlsdGVyKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCk7Cisg
ICAgdm9pZCBhZGRVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBBUEk6OlVzZXJDb250ZW50RXh0
ZW5zaW9uJik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlm
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJD
b250ZW50RXh0ZW5zaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmNwcAkocmV2aXNpb24gMTgwOTk5KQkoZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmNwcDox
ODA5OTkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0
ZW5zaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisK
K25hbWVzcGFjZSBBUEkgeworCitVc2VyQ29udGVudEZpbHRlcjo6VXNlckNvbnRlbnRGaWx0ZXIo
Y29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxpemVkUnVs
ZXMpCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1fc2VyaWFsaXplZFJ1bGVzKHNlcmlhbGl6
ZWRSdWxlcykKK3sKK30KKworVXNlckNvbnRlbnRGaWx0ZXI6On5Vc2VyQ29udGVudEZpbHRlcigp
Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRF
eHRlbnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxOCArMjQsMjQgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRGaWx0ZXIuaCIKKyNp
bmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgorCisjaWYgRU5BQkxFKENPTlRFTlRf
RVhURU5TSU9OUykKKworI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIgog
CiBuYW1lc3BhY2UgQVBJIHsKIAotVXNlckNvbnRlbnRGaWx0ZXI6OlVzZXJDb250ZW50RmlsdGVy
KGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1
bGVzKQorVXNlckNvbnRlbnRFeHRlbnNpb246OlVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdU
Rjo6U3RyaW5nJiBuYW1lLCBSZWY8V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+
JiYgY29udGVudEV4dGVuc2lvbikKICAgICA6IG1fbmFtZShuYW1lKQotICAgICwgbV9zZXJpYWxp
emVkUnVsZXMoc2VyaWFsaXplZFJ1bGVzKQorICAgICwgbV9jb21waWxlZEV4dGVuc2lvbihXVEY6
Om1vdmUoY29udGVudEV4dGVuc2lvbikpCiB7CiB9CiAKLVVzZXJDb250ZW50RmlsdGVyOjp+VXNl
ckNvbnRlbnRGaWx0ZXIoKQorVXNlckNvbnRlbnRFeHRlbnNpb246On5Vc2VyQ29udGVudEV4dGVu
c2lvbigpCiB7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQorCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
VXNlckNvbnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKHJldmlzaW9uIDE4MDk5OSkJKGZy
b20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVudEZpbHRlci5oOjE4
MDk5OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRl
bnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBBUElVc2VyQ29udGVudEZpbHRlcl9oCisjZGVmaW5lIEFQSVVzZXJDb250ZW50RmlsdGVy
X2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgQVBJIHsKKworY2xhc3MgVXNlckNvbnRlbnRGaWx0ZXIgZmluYWwg
OiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50RmlsdGVyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEZpbHRlcj4gY3JlYXRlKGNvbnN0IFdU
Rjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1bGVzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRGaWx0ZXIobmFtZSwg
c2VyaWFsaXplZFJ1bGVzKSk7CisgICAgfQorCisgICAgVXNlckNvbnRlbnRGaWx0ZXIoY29uc3Qg
V1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxpemVkUnVsZXMpOwor
ICAgIH5Vc2VyQ29udGVudEZpbHRlcigpOworCisgICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFs
aXplZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemVkUnVsZXM7IH0KKworcHJpdmF0
ZToKKyAgICBXVEY6OlN0cmluZyBtX25hbWU7CisgICAgV1RGOjpTdHJpbmcgbV9zZXJpYWxpemVk
UnVsZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKKworI2VuZGlmIC8vIEFQSVVzZXJDb250
ZW50RmlsdGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNv
bnRlbnRFeHRlbnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMzIgKzIzLDM4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBBUElVc2VyQ29udGVudEZpbHRlcl9oCi0jZGVmaW5lIEFQSVVz
ZXJDb250ZW50RmlsdGVyX2gKKyNpZm5kZWYgQVBJVXNlckNvbnRlbnRFeHRlbnNpb25faAorI2Rl
ZmluZSBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIFdlYktpdCB7Citj
bGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb247Cit9CisKIG5hbWVzcGFjZSBBUEkgewog
Ci1jbGFzcyBVc2VyQ29udGVudEZpbHRlciBmaW5hbCA6IHB1YmxpYyBPYmplY3RJbXBsPE9iamVj
dDo6VHlwZTo6VXNlckNvbnRlbnRGaWx0ZXI+IHsKK2NsYXNzIFVzZXJDb250ZW50RXh0ZW5zaW9u
IGZpbmFsIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpVc2VyQ29udGVudEV4dGVu
c2lvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8VXNlckNvbnRlbnRGaWx0ZXI+IGNyZWF0
ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIHNlcmlhbGl6ZWRS
dWxlcykKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorICAgIHN0YXRpYyBSZWY8VXNl
ckNvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgUmVmPFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiYmIGNvbnRlbnRFeHRlbnNpb24pCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVc2VyQ29udGVudEZpbHRlcihuYW1l
LCBzZXJpYWxpemVkUnVsZXMpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNv
bnRlbnRFeHRlbnNpb24obmFtZSwgV1RGOjptb3ZlKGNvbnRlbnRFeHRlbnNpb24pKSk7CiAgICAg
fQogCi0gICAgVXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0
IFdURjo6U3RyaW5nJiBzZXJpYWxpemVkUnVsZXMpOwotICAgIH5Vc2VyQ29udGVudEZpbHRlcigp
OworICAgIFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBSZWY8
V2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+JiYpOworICAgIHZpcnR1YWwgflVz
ZXJDb250ZW50RXh0ZW5zaW9uKCk7CiAKICAgICBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxpemVk
UnVsZXMoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6ZWRSdWxlczsgfQorICAgIGNvbnN0IFdl
YktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uJiBjb21waWxlZEV4dGVuc2lvbigpIGNv
bnN0IHsgcmV0dXJuIG1fY29tcGlsZWRFeHRlbnNpb24uZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAg
ICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgV1RGOjpTdHJpbmcgbV9zZXJpYWxpemVkUnVsZXM7
CisgICAgUmVmPFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBtX2NvbXBpbGVk
RXh0ZW5zaW9uOworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBBUEkKIAotI2VuZGlmIC8vIEFQSVVzZXJDb250ZW50RmlsdGVyX2gKKyNl
bmRpZiAvLyBBUElVc2VyQ29udGVudEV4dGVuc2lvbl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmNwcAkocmV2aXNp
b24gMTgxMTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElVc2VyQ29udGVu
dEZpbHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEZpbHRlci5oIgot
Ci1uYW1lc3BhY2UgQVBJIHsKLQotVXNlckNvbnRlbnRGaWx0ZXI6OlVzZXJDb250ZW50RmlsdGVy
KGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1
bGVzKQotICAgIDogbV9uYW1lKG5hbWUpCi0gICAgLCBtX3NlcmlhbGl6ZWRSdWxlcyhzZXJpYWxp
emVkUnVsZXMpCi17Ci19Ci0KLVVzZXJDb250ZW50RmlsdGVyOjp+VXNlckNvbnRlbnRGaWx0ZXIo
KQotewotfQotCi19IC8vIG5hbWVzcGFjZSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRGaWx0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0FQSVVzZXJDb250ZW50RmlsdGVyLmgJKHJldmlzaW9uIDE4MTE4
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRGaWx0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBB
UElVc2VyQ29udGVudEZpbHRlcl9oCi0jZGVmaW5lIEFQSVVzZXJDb250ZW50RmlsdGVyX2gKLQot
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgQVBJIHsKLQotY2xhc3MgVXNlckNvbnRlbnRGaWx0ZXIgZmluYWwgOiBwdWJs
aWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OlVzZXJDb250ZW50RmlsdGVyPiB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxVc2VyQ29udGVudEZpbHRlcj4gY3JlYXRlKGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1bGVzKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlckNvbnRlbnRGaWx0ZXIobmFtZSwgc2VyaWFs
aXplZFJ1bGVzKSk7Ci0gICAgfQotCi0gICAgVXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBzZXJpYWxpemVkUnVsZXMpOwotICAgIH5V
c2VyQ29udGVudEZpbHRlcigpOwotCi0gICAgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBXVEY6OlN0cmluZyYgc2VyaWFsaXplZFJ1
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemVkUnVsZXM7IH0KLQotcHJpdmF0ZToKLSAg
ICBXVEY6OlN0cmluZyBtX25hbWU7Ci0gICAgV1RGOjpTdHJpbmcgbV9zZXJpYWxpemVkUnVsZXM7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSVVzZXJDb250ZW50Rmls
dGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJ
KHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQ
SUNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBjbGFzcyBOYXZpZ2F0aW9u
UmVzcG9uc2U7CiBjbGFzcyBQYWdlQ29uZmlndXJhdGlvbjsKIGNsYXNzIFByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbjsKIGNsYXNzIFNlc3Npb25TdGF0ZTsKLWNsYXNzIFVzZXJDb250ZW50RmlsdGVy
OworY2xhc3MgVXNlckNvbnRlbnRFeHRlbnNpb247CiBjbGFzcyBVc2VyU2NyaXB0OwogfQogCkBA
IC0xNjEsNyArMTYxLDcgQEAgV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVuZGVyT2JqZWN0UmVmLCBX
ZQogV0tfQUREX0FQSV9NQVBQSU5HKFdLU2Vzc2lvblN0YXRlUmVmLCBBUEk6OlNlc3Npb25TdGF0
ZSkKIFdLX0FERF9BUElfTUFQUElORyhXS1RleHRDaGVja2VyUmVmLCBXZWJUZXh0Q2hlY2tlcikK
IFdLX0FERF9BUElfTUFQUElORyhXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiwgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkpCi1XS19BRERfQVBJX01BUFBJTkcoV0tVc2VyQ29udGVudEZp
bHRlclJlZiwgQVBJOjpVc2VyQ29udGVudEZpbHRlcikKK1dLX0FERF9BUElfTUFQUElORyhXS1Vz
ZXJDb250ZW50RmlsdGVyUmVmLCBBUEk6OlVzZXJDb250ZW50RXh0ZW5zaW9uKQogV0tfQUREX0FQ
SV9NQVBQSU5HKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RSZWYsIFVzZXJNZWRpYVBlcm1p
c3Npb25SZXF1ZXN0UHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tVc2VyU2NyaXB0UmVmLCBB
UEk6OlVzZXJTY3JpcHQpCiBXS19BRERfQVBJX01BUFBJTkcoV0tWaWJyYXRpb25SZWYsIFdlYlZp
YnJhdGlvblByb3h5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tQYWdlR3JvdXAuY3BwCShyZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tQYWdlR3JvdXAuaCIKIAotI2lu
Y2x1ZGUgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRF
eHRlbnNpb24uaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJQYWdlR3Jv
dXAuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgpAQCAtODIsNyArODIsNyBAQCB2b2lk
IFdLUGFnZUdyb3VwUmVtb3ZlQWxsVXNlclNjcmlwdHMoV0tQCiB2b2lkIFdLUGFnZUdyb3VwQWRk
VXNlckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1VzZXJDb250
ZW50RmlsdGVyUmVmIHVzZXJDb250ZW50RmlsdGVyUmVmKQogewogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPmFkZFVzZXJDb250ZW50Rmls
dGVyKCp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKKyAgICB0b0ltcGwocGFnZUdyb3Vw
UmVmKS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJl
ZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZUdyb3VwUmVmKTsKICAgICBVTlVTRURf
UEFSQU0odXNlckNvbnRlbnRGaWx0ZXJSZWYpOwpAQCAtOTIsNyArOTIsNyBAQCB2b2lkIFdLUGFn
ZUdyb3VwQWRkVXNlckNvbnRlbnRGaWx0ZXIoV0tQCiB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNl
ckNvbnRlbnRGaWx0ZXIoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiB1
c2VyQ29udGVudEZpbHRlck5hbWVSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLSAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIodG9X
VEZTdHJpbmcodXNlckNvbnRlbnRGaWx0ZXJOYW1lUmVmKSk7CisgICAgdG9JbXBsKHBhZ2VHcm91
cFJlZiktPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKHRvV1RGU3RyaW5nKHVzZXJDb250ZW50
RmlsdGVyTmFtZVJlZikpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZUdyb3VwUmVmKTsK
ICAgICBVTlVTRURfUEFSQU0odXNlckNvbnRlbnRGaWx0ZXJOYW1lUmVmKTsKQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIFdLUGFnZUdyb3VwUmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIoCiB2b2lkIFdL
UGFnZUdyb3VwUmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZikKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbChw
YWdlR3JvdXBSZWYpLT5yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAgICB0b0ltcGwo
cGFnZUdyb3VwUmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShwYWdlR3JvdXBSZWYpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29u
dHJvbGxlclJlZi5jcHAJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXS1VzZXJD
b250ZW50Q29udHJvbGxlclJlZi5oIgogCi0jaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRGaWx0ZXIu
aCIKKyNpbmNsdWRlICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIkFQSVVz
ZXJTY3JpcHQuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eS5oIgpAQCAtNjIsMTMgKzYyLDEzIEBAIHZvaWQgV0tVc2VyQ29u
dGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2UKIHZvaWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJB
ZGRVc2VyQ29udGVudEZpbHRlcihXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVu
dENvbnRyb2xsZXJSZWYsIFdLVXNlckNvbnRlbnRGaWx0ZXJSZWYgdXNlckNvbnRlbnRGaWx0ZXJS
ZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNlckNv
bnRlbnRDb250cm9sbGVyUmVmKS0+YWRkVXNlckNvbnRlbnRGaWx0ZXIoKnRvSW1wbCh1c2VyQ29u
dGVudEZpbHRlclJlZikpOworICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpLT5h
ZGRVc2VyQ29udGVudEV4dGVuc2lvbigqdG9JbXBsKHVzZXJDb250ZW50RmlsdGVyUmVmKSk7CiAj
ZW5kaWYKIH0KIAogdm9pZCBXS1VzZXJDb250ZW50Q29udHJvbGxlclJlbW92ZUFsbFVzZXJDb250
ZW50RmlsdGVycyhXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xs
ZXJSZWYpCiB7CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSAgICB0b0ltcGwodXNl
ckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCk7Cisg
ICAgdG9JbXBsKHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJlbW92ZUFsbFVzZXJDb250ZW50
RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvV0tVc2VyQ29udGVudEZpbHRlclJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRGaWx0ZXJSZWYuY3BwCShyZXZpc2lv
biAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVu
dEZpbHRlclJlZi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE3ICsyNiwyOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLVXNlckNvbnRlbnRGaWx0ZXJSZWYuaCIKIAotI2lu
Y2x1ZGUgIkFQSVVzZXJDb250ZW50RmlsdGVyLmgiCisjaW5jbHVkZSAiQVBJVXNlckNvbnRlbnRF
eHRlbnNpb24uaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25D
b21waWxlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBXS1R5cGVJRCBXS1VzZXJD
b250ZW50RmlsdGVyR2V0VHlwZUlEKCkKIHsKLSAgICByZXR1cm4gdG9BUEkoQVBJOjpVc2VyQ29u
dGVudEZpbHRlcjo6QVBJVHlwZSk7CisgICAgcmV0dXJuIHRvQVBJKEFQSTo6VXNlckNvbnRlbnRF
eHRlbnNpb246OkFQSVR5cGUpOwogfQogCiBXS1VzZXJDb250ZW50RmlsdGVyUmVmIFdLVXNlckNv
bnRlbnRGaWx0ZXJDcmVhdGUoV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tTdHJpbmdSZWYgc2VyaWFs
aXplZFJ1bGVzUmVmKQogewotICAgIHJldHVybiB0b0FQSSgmQVBJOjpVc2VyQ29udGVudEZpbHRl
cjo6Y3JlYXRlKHRvV1RGU3RyaW5nKG5hbWVSZWYpLCB0b1dURlN0cmluZyhzZXJpYWxpemVkUnVs
ZXNSZWYpKS5sZWFrUmVmKCkpOworI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisgICAg
YXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdCh0b1dURlN0cmluZyhzZXJpYWxpemVkUnVsZXNSZWYpKTsK
KyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEuYnl0ZWNvZGUpLCBXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5h
Y3Rpb25zKSk7CisKKyAgICByZXR1cm4gdG9BUEkoJkFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZSh0b1dURlN0cmluZyhuYW1lUmVmKSwgV1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbikpLmxlYWtSZWYoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShuYW1lUmVmKTsK
KyAgICBVTlVTRURfUEFSQU0oc2VyaWFsaXplZFJ1bGVzUmVmKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1VzZXJDb250ZW50Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCShyZXZpc2lvbiAx
ODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRl
bnRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsMjEgKzEzMCwyMSBAQCAtIChB
UEk6Ok9iamVjdCYpX2FwaU9iamVjdAogLSAodm9pZClfYWRkVXNlckNvbnRlbnRGaWx0ZXI6KF9X
S1VzZXJDb250ZW50RmlsdGVyICopdXNlckNvbnRlbnRGaWx0ZXIKIHsKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkVXNl
ckNvbnRlbnRGaWx0ZXIoKnVzZXJDb250ZW50RmlsdGVyLT5fdXNlckNvbnRlbnRGaWx0ZXIpOwor
ICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24o
KnVzZXJDb250ZW50RmlsdGVyLT5fdXNlckNvbnRlbnRFeHRlbnNpb24pOwogI2VuZGlmCiB9CiAK
IC0gKHZvaWQpX3JlbW92ZVVzZXJDb250ZW50RmlsdGVyOihOU1N0cmluZyAqKXVzZXJDb250ZW50
RmlsdGVyTmFtZQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgX3VzZXJD
b250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVVc2VyQ29udGVudEZpbHRlcih1c2VyQ29udGVu
dEZpbHRlck5hbWUpOworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNl
ckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRGaWx0ZXJOYW1lKTsKICNlbmRpZgogfQogCiAt
ICh2b2lkKV9yZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMKIHsKICNpZiBFTkFCTEUoQ09OVEVO
VF9FWFRFTlNJT05TKQotICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQWxs
VXNlckNvbnRlbnRGaWx0ZXJzKCk7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5y
ZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNv
bnRlbnRGaWx0ZXIubW0JKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDkgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKKyNpbmNsdWRlICJXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oPgorCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKIAog
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIHNlcmlhbGl6ZWRS
dWxlczooTlNTdHJpbmcgKilzZXJpYWxpemVkUnVsZXMKQEAgLTM1LDE0ICszOCwxNyBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqCiAgICAgaWYgKCEoc2VsZiA9IFtz
dXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBBUEk6Ok9iamVjdDo6Y29u
c3RydWN0SW5XcmFwcGVyPEFQSTo6VXNlckNvbnRlbnRGaWx0ZXI+KHNlbGYsIFN0cmluZyhuYW1l
KSwgU3RyaW5nKHNlcmlhbGl6ZWRSdWxlcykpOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YSA9IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3Qo
U3RyaW5nKHNlcmlhbGl6ZWRSdWxlcykpOworICAgIGF1dG8gY29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uID0gV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1v
dmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5ieXRlY29kZSksIFdURjo6bW92ZShjb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmFjdGlvbnMpKTsKKworICAgIEFQSTo6T2JqZWN0Ojpj
b25zdHJ1Y3RJbldyYXBwZXI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4oc2VsZiwgU3RyaW5n
KG5hbWUpLCBXVEY6Om1vdmUoY29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKSk7CiAKICAgICByZXR1
cm4gc2VsZjsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgX3VzZXJDb250ZW50RmlsdGVy
LT5+VXNlckNvbnRlbnRGaWx0ZXIoKTsKKyAgICBfdXNlckNvbnRlbnRFeHRlbnNpb24tPn5Vc2Vy
Q29udGVudEV4dGVuc2lvbigpOwogCiAgICAgW3N1cGVyIGRlYWxsb2NdOwogfQpAQCAtNTEsNyAr
NTcsNyBAQCAtICh2b2lkKWRlYWxsb2MKIAogLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIHsK
LSAgICByZXR1cm4gKl91c2VyQ29udGVudEZpbHRlcjsKKyAgICByZXR1cm4gKl91c2VyQ29udGVu
dEV4dGVuc2lvbjsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZpbHRlckludGVy
bmFsLmgJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvX1dLVXNlckNvbnRlbnRGaWx0ZXJJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywyMiArMjcsMjIgQEAKIAogI2lmIFdLX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgIkFQSVVzZXJD
b250ZW50RmlsdGVyLmgiCisjaW1wb3J0ICJBUElVc2VyQ29udGVudEV4dGVuc2lvbi5oIgogI2lt
cG9ydCAiV0tPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWlubGluZSBfV0tVc2Vy
Q29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJDb250ZW50RmlsdGVyJiB1c2VyQ29udGVu
dEZpbHRlcikKK2lubGluZSBfV0tVc2VyQ29udGVudEZpbHRlciAqd3JhcHBlcihBUEk6OlVzZXJD
b250ZW50RXh0ZW5zaW9uJiB1c2VyQ29udGVudEV4dGVuc2lvbikKIHsKLSAgICBBU1NFUlQoW3Vz
ZXJDb250ZW50RmlsdGVyLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltfV0tVc2VyQ29udGVudEZp
bHRlciBjbGFzc11dKTsKLSAgICByZXR1cm4gKF9XS1VzZXJDb250ZW50RmlsdGVyICopdXNlckNv
bnRlbnRGaWx0ZXIud3JhcHBlcigpOworICAgIEFTU0VSVChbdXNlckNvbnRlbnRFeHRlbnNpb24u
d3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W19XS1VzZXJDb250ZW50RmlsdGVyIGNsYXNzXV0pOwor
ICAgIHJldHVybiAoX1dLVXNlckNvbnRlbnRGaWx0ZXIgKil1c2VyQ29udGVudEV4dGVuc2lvbi53
cmFwcGVyKCk7CiB9CiAKIH0KIAogQGludGVyZmFjZSBfV0tVc2VyQ29udGVudEZpbHRlciAoKSA8
V0tPYmplY3Q+IHsKIEBwYWNrYWdlCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6VXNlckNv
bnRlbnRGaWx0ZXI+IF91c2VyQ29udGVudEZpbHRlcjsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8
QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4gX3VzZXJDb250ZW50RXh0ZW5zaW9uOwogfQogQGVu
ZAogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHJl
dmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDggQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oPgogCiAj
aWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLSNpbmNsdWRlICJBUElVc2VyQ29udGVudEZp
bHRlci5oIgorI2luY2x1ZGUgIkFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAi
V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktp
dCB7CkBAIC04MiwxMCArODMsMTAgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6YWRkUAogICAgIHdlYlByb2Nlc3NQcm94eS5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6QWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyht
ZXNzYWdlSGFuZGxlckhhbmRsZXMpLCBtX2lkZW50aWZpZXIpOwogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKLSAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gdXNl
ckNvbnRlbnRGaWx0ZXJzOwotICAgIGZvciAoY29uc3QgYXV0byYgdXNlckNvbnRlbnRGaWx0ZXIg
OiBtX3VzZXJDb250ZW50RmlsdGVycy52YWx1ZXMoKSkKLSAgICAgICAgdXNlckNvbnRlbnRGaWx0
ZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyQ29udGVudEZpbHRlci0+bmFtZSgpLCB1c2Vy
Q29udGVudEZpbHRlci0+c2VyaWFsaXplZFJ1bGVzKCkpKTsKLSAgICB3ZWJQcm9jZXNzUHJveHku
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFk
ZFVzZXJDb250ZW50RmlsdGVycyh1c2VyQ29udGVudEZpbHRlcnMpLCBtX2lkZW50aWZpZXIpOwor
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25E
YXRhPj4gdXNlckNvbnRlbnRFeHRlbnNpb25zOworICAgIGZvciAoY29uc3QgYXV0byYgdXNlckNv
bnRlbnRFeHRlbnNpb24gOiBtX3VzZXJDb250ZW50RXh0ZW5zaW9ucy52YWx1ZXMoKSkKKyAgICAg
ICAgdXNlckNvbnRlbnRFeHRlbnNpb25zLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyQ29udGVu
dEV4dGVuc2lvbi0+bmFtZSgpLCB1c2VyQ29udGVudEV4dGVuc2lvbi0+Y29tcGlsZWRFeHRlbnNp
b24oKS5kYXRhKCkpKTsKKyAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50RXh0ZW5zaW9u
cyh1c2VyQ29udGVudEV4dGVuc2lvbnMpLCBtX2lkZW50aWZpZXIpOwogI2VuZGlmCiB9CiAKQEAg
LTE4MiwzMCArMTgzLDMwIEBAIHZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmRp
ZFAKIAogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHk6OmFkZFVzZXJDb250ZW50RmlsdGVyKEFQSTo6VXNlckNvbnRlbnRG
aWx0ZXImIHVzZXJDb250ZW50RmlsdGVyKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQ
cm94eTo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYg
dXNlckNvbnRlbnRFeHRlbnNpb24pCiB7Ci0gICAgbV91c2VyQ29udGVudEZpbHRlcnMuc2V0KHVz
ZXJDb250ZW50RmlsdGVyLm5hbWUoKSwgJnVzZXJDb250ZW50RmlsdGVyKTsKKyAgICBtX3VzZXJD
b250ZW50RXh0ZW5zaW9ucy5zZXQodXNlckNvbnRlbnRFeHRlbnNpb24ubmFtZSgpLCAmdXNlckNv
bnRlbnRFeHRlbnNpb24pOwogCi0gICAgYXV0byBwYWlyID0gc3RkOjptYWtlX3BhaXIodXNlckNv
bnRlbnRGaWx0ZXIubmFtZSgpLCB1c2VyQ29udGVudEZpbHRlci5zZXJpYWxpemVkUnVsZXMoKSk7
CisgICAgYXV0byBwYWlyID0gc3RkOjptYWtlX3BhaXIodXNlckNvbnRlbnRFeHRlbnNpb24ubmFt
ZSgpLCB1c2VyQ29udGVudEV4dGVuc2lvbi5jb21waWxlZEV4dGVuc2lvbigpLmRhdGEoKSk7CiAK
ICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKQotICAgICAg
ICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6QWRkVXNlckNvbnRlbnRGaWx0ZXJzKHsgcGFpciB9KSwgbV9pZGVudGlmaWVyKTsK
KyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OkFkZFVzZXJDb250ZW50RXh0ZW5zaW9ucyh7IHBhaXIgfSksIG1faWRl
bnRpZmllcik7CiB9CiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92
ZVVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50RmlsdGVycy5yZW1vdmUobmFtZSk7CisgICAg
bV91c2VyQ29udGVudEV4dGVuc2lvbnMucmVtb3ZlKG5hbWUpOwogCiAgICAgZm9yIChXZWJQcm9j
ZXNzUHJveHkqIHByb2Nlc3MgOiBtX3Byb2Nlc3NlcykKLSAgICAgICAgcHJvY2Vzcy0+Y29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZVVz
ZXJDb250ZW50RmlsdGVyKG5hbWUpLCBtX2lkZW50aWZpZXIpOworICAgICAgICBwcm9jZXNzLT5j
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6UmVt
b3ZlVXNlckNvbnRlbnRFeHRlbnNpb24obmFtZSksIG1faWRlbnRpZmllcik7CiB9CiAKLXZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVy
cygpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyQ29u
dGVudEV4dGVuc2lvbnMoKQogewotICAgIG1fdXNlckNvbnRlbnRGaWx0ZXJzLmNsZWFyKCk7Cisg
ICAgbV91c2VyQ29udGVudEV4dGVuc2lvbnMuY2xlYXIoKTsKIAogICAgIGZvciAoV2ViUHJvY2Vz
c1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpSZW1vdmVBbGxV
c2VyQ29udGVudEZpbHRlcnMoKSwgbV9pZGVudGlmaWVyKTsKKyAgICAgICAgcHJvY2Vzcy0+Y29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpLCBtX2lkZW50aWZpZXIpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCShyZXZpc2lvbiAx
ODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAog
CiBuYW1lc3BhY2UgQVBJIHsKIGNsYXNzIEFycmF5OwotY2xhc3MgVXNlckNvbnRlbnRGaWx0ZXI7
CitjbGFzcyBVc2VyQ29udGVudEV4dGVuc2lvbjsKIGNsYXNzIFVzZXJTY3JpcHQ7CiB9CiAKQEAg
LTgzLDkgKzgzLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVy
Rm9yTmFtZShjb25zdCBTdHJpbmcmKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgdm9pZCBhZGRVc2VyQ29udGVudEZpbHRlcihBUEk6OlVzZXJDb250ZW50RmlsdGVyJik7
Ci0gICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEZpbHRlcihjb25zdCBTdHJpbmcmKTsKLSAgICB2
b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RmlsdGVycygpOworICAgIHZvaWQgYWRkVXNlckNvbnRl
bnRFeHRlbnNpb24oQVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbiYpOworICAgIHZvaWQgcmVtb3Zl
VXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCByZW1vdmVBbGxV
c2VyQ29udGVudEV4dGVuc2lvbnMoKTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTAxLDcgKzEw
MSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlNjcmlwdE1l
c3NhZ2VIYW5kbGVyPj4gbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnM7CiAKICNpZiBFTkFCTEUoQ09O
VEVOVF9FWFRFTlNJT05TKQotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8QVBJOjpVc2VyQ29u
dGVudEZpbHRlcj4+IG1fdXNlckNvbnRlbnRGaWx0ZXJzOworICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8QVBJOjpVc2VyQ29udGVudEV4dGVuc2lvbj4+IG1fdXNlckNvbnRlbnRFeHRlbnNpb25z
OwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEw
OTYsNiArMTA5NiwxMCBAQAogCQk3QzQ2OTRDQzFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVi
b2FyZFByb3h5Q29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzQ2OTRDQjFBNEI1MTBBMDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Q29j
b2EubW0gKi87IH07CiAJCTdDNDY5NEQwMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJk
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0M0Njk0Q0QxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5jcHAgKi87IH07
CiAJCTdDNDY5NEQxMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDY5NENFMUE1MUUz
NjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJveHkuaCAqLzsgfTsKKwkJN0M0QUJFRDAxQUE4
RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVDRTFBQThFOUYwMDA4
OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsgfTsKKwkJN0M0QUJF
RDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0QUJFQ0YxQUE4RTlG
MDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oICovOyB9OworCQk3QzRB
QkVENDFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRBQkVE
MjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAg
Ki87IH07CisJCTdDNEFCRUQ1MUFBOEZDQjgwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzRBQkVEMzFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YS5oICovOyB9OwogCQk3QzRFRDMyOTFBMzExOUQ5MDA3OUJENDkgLyogSW5qZWN0ZWRC
dW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRFRDMyNzFBMzExOUQ5MDA3OUJENDkgLyogSW5qZWN0
ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmggKi87IH07CiAJCTdDNkQzN0ZDMTcy
RjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M2RDM3RkExNzJGNTU1RjAwOUQyODQ3IC8qIFBhZ2VC
YW5uZXJNYWMubW0gKi87IH07CiAJCTdDNkU3MEZCMThCMkRDN0EwMEYyNEUyRSAvKiBXZWJQcm9j
ZXNzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzZFNzBGOTE4QjJENEEwMDBGMjRFMkUgLyogV2ViUHJvY2Vzc0NvY29hLm1tICovOyB9OwpA
QCAtMTExMiw4ICsxMTE2LDggQEAKIAkJN0M4OUQyQTMxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNl
clNjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Qzg5RDJBMTFBNjc4ODc1MDAzQTVGREUgLyogV0tVc2VyU2NyaXB0UmVmLmNwcCAqLzsg
fTsKIAkJN0M4OUQyQTQxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQTIxQTY3ODg3
NTAwM0E1RkRFIC8qIFdLVXNlclNjcmlwdFJlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDODlEMkE2MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElV
c2VyU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDODlEMkE1MUE2Nzg5RUEwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmNwcCAqLzsgfTsK
LQkJN0M4OUQyQjMxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RmlsdGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkIxMUE2
QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5jcHAgKi87IH07Ci0JCTdDODlE
MkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M4OUQyQjIxQTZCMDY4QzAwM0E1
RkRFIC8qIEFQSVVzZXJDb250ZW50RmlsdGVyLmggKi87IH07CisJCTdDODlEMkIzMUE2QjA2OEMw
MDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyog
QVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OworCQk3Qzg5RDJCNDFBNkIwNjhDMDAz
QTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAvKiBBUElV
c2VyQ29udGVudEV4dGVuc2lvbi5oICovOyB9OwogCQk3Qzg5RDJCNjFBNkIwREQ5MDAzQTVGREUg
LyogV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJCNTFBNkIwREQ5MDAzQTVGREUgLyogV0tV
c2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M4OUQyQjkxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1Vz
ZXJDb250ZW50RmlsdGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVy
Lm1tICovOyB9OwogCQk3Qzg5RDJCQTFBNkIwRjJDMDAzQTVGREUgLyogX1dLVXNlckNvbnRlbnRG
aWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
ODlEMkI4MUE2QjBGMkMwMDNBNUZERSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMjg2LDYgKzMyOTAs
MTAgQEAKIAkJN0M0Njk0Q0QxQTUxRTM2ODAwQUQ1ODQ1IC8qIFdlYlBhc3RlYm9hcmRQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYXN0ZWJvYXJkUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ2OTRDRTFBNTFFMzY4MDBB
RDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzQ2OTRDRjFBNTFFMzY4MDBBRDU4NDUgLyogV2ViUGFzdGVib2FyZFByb3h5Lm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlBhc3RlYm9hcmRQcm94eS5tZXNzYWdlcy5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0QUJFQ0UxQUE4RTlGMDAwODhBQTM3
IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QzRBQkVDRjFBQThFOUYwMDA4OEFBMzcgLyogV2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0M0QUJFRDMxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bkRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRFRDMy
NjFBMzExOUQ5MDA3OUJENDkgLyogSW5qZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFu
ZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkQnVu
ZGxlQ1NTU3R5bGVEZWNsYXJhdGlvbkhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDNEVEMzI3MUEzMTE5RDkwMDc5QkQ0OSAvKiBJbmplY3RlZEJ1bmRsZUNTU1N0eWxl
RGVjbGFyYXRpb25IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDNkQzN0ZBMTcyRjU1NUYwMDlEMjg0NyAvKiBQYWdlQmFubmVyTWFjLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFnZUJhbm5lck1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzMDMsOCArMzMxMSw4IEBACiAJCTdD
ODlEMkExMUE2Nzg4NzUwMDNBNUZERSAvKiBXS1VzZXJTY3JpcHRSZWYuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tVc2VyU2NyaXB0UmVmLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTIxQTY3ODg3NTAwM0E1RkRFIC8qIFdLVXNlclNj
cmlwdFJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJTY3JpcHRS
ZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1
RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQVBJVXNlclNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdD
ODlEMkIxMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElVc2VyQ29udGVudEZpbHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdDODlEMkIyMUE2QjA2OEMwMDNBNUZERSAv
KiBBUElVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg5RDJCMTFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg5RDJCMjFBNkIwNjhDMDAz
QTVGREUgLyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0M4OUQyQjUxQTZCMEREOTAwM0E1RkRFIC8qIFdLVXNlckNvbnRlbnRDb250
cm9sbGVyUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1VzZXJD
b250ZW50Q29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M4OUQyQjcxQTZCMEYyQzAwM0E1RkRFIC8qIF9XS1VzZXJDb250ZW50RmlsdGVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gX1dLVXNlckNvbnRlbnRGaWx0ZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODlEMkI4MUE2QjBGMkMwMDNBNUZE
RSAvKiBfV0tVc2VyQ29udGVudEZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tVc2VyQ29udGVudEZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDcyNSw2ICs0NzMzLDEwIEBACiAJCQkJMUE2NDI0NUMxMkRFMjlBMTAwQ0FBRTJDIC8qIFVw
ZGF0ZUluZm8uaCAqLywKIAkJCQkxQUMxMzM2NTE4NTY1QjU3MDBGM0VDMDUgLyogVXNlckRhdGEu
Y3BwICovLAogCQkJCTFBQzEzMzY2MTg1NjVCNTcwMEYzRUMwNSAvKiBVc2VyRGF0YS5oICovLAor
CQkJCTdDNEFCRUNFMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uY3BwICovLAorCQkJCTdDNEFCRUNGMUFBOEU5RjAwMDg4QUEzNyAvKiBXZWJDb21waWxlZENv
bnRlbnRFeHRlbnNpb24uaCAqLywKKwkJCQk3QzRBQkVEMjFBQThGQ0I4MDA4OEFBMzcgLyogV2Vi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YS5jcHAgKi8sCisJCQkJN0M0QUJFRDMxQUE4RkNC
ODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEuaCAqLywKIAkJCQky
Njg0MDU0QTE4Qjg2NkZGMDAyMkMzOEIgLyogVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5j
cHAgKi8sCiAJCQkJMjY4NDA1NDIxOEI4NUE2MzAwMjJDMzhCIC8qIFZpc2libGVDb250ZW50UmVj
dFVwZGF0ZUluZm8uaCAqLywKIAkJCQkxQTBGMjlDOTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRl
ZExpbmtUYWJsZS5jcHAgKi8sCkBAIC02MjQ5LDggKzYyNjEsOCBAQAogCQkJCTFBRkRFNjVGMTk1
NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuY3BwICovLAogCQkJCTFBRkRFNjYwMTk1
NEU5QjEwMEM0OEZGQSAvKiBBUElTZXNzaW9uU3RhdGUuaCAqLywKIAkJCQkxQTRENjY0NzE4QTJE
OTFBMDBEODJFMjEgLyogQVBJVUlDbGllbnQuaCAqLywKLQkJCQk3Qzg5RDJCMTFBNkIwNjhDMDAz
QTVGREUgLyogQVBJVXNlckNvbnRlbnRGaWx0ZXIuY3BwICovLAotCQkJCTdDODlEMkIyMUE2QjA2
OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEZpbHRlci5oICovLAorCQkJCTdDODlEMkIxMUE2
QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVudEV4dGVuc2lvbi5jcHAgKi8sCisJCQkJN0M4
OUQyQjIxQTZCMDY4QzAwM0E1RkRFIC8qIEFQSVVzZXJDb250ZW50RXh0ZW5zaW9uLmggKi8sCiAJ
CQkJN0M4OUQyQTUxQTY3ODlFQTAwM0E1RkRFIC8qIEFQSVVzZXJTY3JpcHQuY3BwICovLAogCQkJ
CTdDODlEMjkyMUE2NzEyMkYwMDNBNUZERSAvKiBBUElVc2VyU2NyaXB0LmggKi8sCiAJCQkJMUE0
ODMyQzUxQTlCQzEzQzAwOEI0REZFIC8qIEFQSVdlYnNpdGVEYXRhUmVjb3JkLmNwcCAqLywKQEAg
LTc3NzAsNyArNzc4Miw3IEBACiAJCQkJMkQ1QUI2MkUxQTY5RDZGQjAwMTRBOUNCIC8qIE1lc3Nh
Z2VSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNzk3ODAxMzdFRTgyQzAwRjk3RDQ1
IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRjhD
OTExNzNBRjUyRDAwN0I3RjM5IC8qIFBsdWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywK
LQkJCQk3Qzg5RDJCNDFBNkIwNjhDMDAzQTVGREUgLyogQVBJVXNlckNvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDODlEMkI0MUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29u
dGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFRkNDMTIxMUQwMUY5NjAwODIx
OUQzIC8qIFBsdWdpbkluZm9TdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzRDYxMDIxM0E3
Q0MyQTAwRjk1RDRFIC8qIFBsdWdpbk1vZHVsZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
MDQzOTc2MTI0RDAzNDgwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzLmggaW4gSGVhZGVycyAqLywK
QEAgLTc4MzcsNiArNzg0OSw3IEBACiAJCQkJMUEyNEJFRDUxMjA4OTREMTAwRkJCMDU5IC8qIFNo
YXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0NzAwODFDRUIx
IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJE
RTY5NDNFMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVz
c2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNEFCRUQ1MUFBOEZDQjgwMDg4QUEzNyAvKiBX
ZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTA2
NEQzNjE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTFEODFGRjE4NUJCREVFMDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTUyNzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNz
RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDg1LDYgKzgwOTgsNyBAQAogCQkJCTM3ODhBMDVD
MTQ3NDNDOTAwMDYzMTlFNSAvKiBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0JBQUNGNDE0NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2lu
Z0NvbnRleHRHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M5RDE1MzcxODQ1ODREQTAwOUQz
OTE4IC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0M0QUJFRDExQUE4RTlGMDAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRjYxNDUyMzI0RjAwNTNGODJGIC8qIFdLQnJv
d3NpbmdDb250ZXh0R3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ0RDE4
MkQ2RUIwMDAwODdERDcgLyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBRTAwRDRGMTgyRDZGNTAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRs
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTkzNTIsNiArOTM2Niw3IEBACiAJCQkJMjk4
NEY1ODgxNjRCQTA5NTAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUFEMzA5NjE2NEI0QzkzMDA3MkRFQTkgLyog
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTg0
RjU3QzE2NEI5MTVGMDA0QkMwQzYgLyogQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0QUJFRDAxQUE4RTlGMDAwODhBQTM3
IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MUUzNTFGRjE4MEY1RDBGMDBFNTNCRTkgLyogRGF0YWJhc2VQcm9jZXNzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNUU3NzJCMTg0MDA4QjkwMDA3MjAzRiAvKiBEYXRhYmFzZVByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMEQ0MzExODNCMzQxMzAw
OTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05NzQzLDcgKzk3NTgsNyBAQAogCQkJCTUxQzk2MTE4MTgzRDI5NDcwMEQyMDAyRSAvKiBX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQ0Y2QUJDMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQzhFMjgyMTEyNzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTdDODlEMkIzMUE2QjA2OEMwMDNBNUZERSAvKiBBUElVc2VyQ29udGVu
dEZpbHRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3Qzg5RDJCMzFBNkIwNjhDMDAzQTVGREUg
LyogQVBJVXNlckNvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFB
NjAxMTJGNEZCQjAwMzM3QkFCIC8qIFdlYkluc3BlY3RvckNsaWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQzhFMkEzNTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDOEUyODM1MTI3NUQ3MzgwMEJDN0JEMCAv
KiBXZWJJbnNwZWN0b3JQcm94eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5NDgsNiArOTk2Myw3
IEBACiAJCQkJMEZDQjRFNTExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRl
cklPU09iakNTZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMTc0QUE3MTQy
QUFDNjEwMDM5MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2MkU3
MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJN0M0QUJFRDQxQUE4RkNCODAwODhBQTM3IC8qIFdlYkNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEFFMEMxMzNDMTZDQjAwNzI3MTdB
IC8qIFdLSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjNDRjFCMTMzRDI2
MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
Q0Y2QUMyMTJDOTFGMzQwMDhGOUMzNSAvKiBXS0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTgxMTg5KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2Vi
RnJhbWUuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgpA
QCAtMTgxLDIwICsxODIsMjMgQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92
ZVVzZQogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKLXZvaWQgV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVudEZpbHRlcnMoY29uc3QgVmVjdG9yPHN0ZDo6
cGFpcjxTdHJpbmcsIFN0cmluZz4+JiB1c2VyQ29udGVudEZpbHRlcnMpCit2b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKGNvbnN0IFZlY3Rvcjxz
dGQ6OnBhaXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4mIHVzZXJD
b250ZW50RXh0ZW5zaW9ucykKIHsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHVzZXJDb250ZW50Rmls
dGVyIDogdXNlckNvbnRlbnRGaWx0ZXJzKQotICAgICAgICBtX3VzZXJDb250ZW50Q29udHJvbGxl
ci0+YWRkVXNlckNvbnRlbnRGaWx0ZXIodXNlckNvbnRlbnRGaWx0ZXIuZmlyc3QsIHVzZXJDb250
ZW50RmlsdGVyLnNlY29uZCk7CisgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyQ29udGVudEV4dGVu
c2lvbiA6IHVzZXJDb250ZW50RXh0ZW5zaW9ucykgeworICAgICAgICBXZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb25EYXRhID0gdXNlckNvbnRlbnRFeHRlbnNp
b24uc2Vjb25kOworICAgICAgICBSZWZQdHI8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBj
b21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYnl0ZWNvZGUpLCBXVEY6Om1vdmUo
Y29udGVudEV4dGVuc2lvbkRhdGEuYWN0aW9ucykpOworICAgICAgICBtX3VzZXJDb250ZW50Q29u
dHJvbGxlci0+YWRkVXNlckNvbnRlbnRFeHRlbnNpb24odXNlckNvbnRlbnRFeHRlbnNpb24uZmly
c3QsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbik7CisgICAgfQogfQogCi12b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIoY29uc3QgU3RyaW5nJiBu
YW1lKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX3VzZXJDb250ZW50Q29udHJvbGxl
ci0+cmVtb3ZlVXNlckNvbnRlbnRGaWx0ZXIobmFtZSk7CisgICAgbV91c2VyQ29udGVudENvbnRy
b2xsZXItPnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUpOwogfQogCi12b2lkIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCkKK3ZvaWQg
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMo
KQogewotICAgIG1fdXNlckNvbnRlbnRDb250cm9sbGVyLT5yZW1vdmVBbGxVc2VyQ29udGVudEZp
bHRlcnMoKTsKKyAgICBtX3VzZXJDb250ZW50Q29udHJvbGxlci0+cmVtb3ZlQWxsVXNlckNvbnRl
bnRFeHRlbnNpb25zKCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAxODExODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhOwogY2xhc3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclByb3h5OwogCiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxXZWJVc2VyQ29udGVudENvbnRyb2xsZXI+LCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyICB7CkBAIC02MSw5ICs2Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1v
dmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIodWludDY0X3QpOwogCiAjaWYgRU5BQkxFKENPTlRF
TlRfRVhURU5TSU9OUykKLSAgICB2b2lkIGFkZFVzZXJDb250ZW50RmlsdGVycyhjb25zdCBWZWN0
b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJDb250
ZW50RmlsdGVyKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxVc2VyQ29u
dGVudEZpbHRlcnMoKTsKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9ucyhjb25zdCBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+
Jik7CisgICAgdm9pZCByZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5kaWYK
IAogICAgIHVpbnQ2NF90IG1faWRlbnRpZmllcjsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxODExODkpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxl
ci5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQCBtZXNzYWdlcyAt
PiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgewogICAgIFJlbW92ZVVzZXJTY3JpcHRNZXNzYWdl
SGFuZGxlcih1aW50NjRfdCBpZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCi0gICAgQWRkVXNlckNvbnRlbnRGaWx0ZXJzKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5n
LCBTdHJpbmc+PiB1c2VyQ29udGVudEZpbHRlcnMpOwotICAgIFJlbW92ZVVzZXJDb250ZW50Rmls
dGVyKFN0cmluZyBuYW1lKTsKLSAgICBSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAg
ICBBZGRVc2VyQ29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYktp
dDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IHVzZXJDb250ZW50RmlsdGVycyk7
CisgICAgUmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oU3RyaW5nIG5hbWUpOworICAgIFJlbW92
ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5j
cHAJKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBQcm94eS5oIgogCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCisjaW5j
bHVkZSAiV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vz
cy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NV3JhcHBlcldvcmxkLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlR3JvdXAuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50Q29udHJvbGxl
ci5oPgpAQCAtNTQsOCArNTUsOCBAQCBXZWJQYWdlR3JvdXBQcm94eTo6V2ViUGFnZUdyb3VwUHJv
eHkoY29uCiAgICAgICAgIGFkZFVzZXJTY3JpcHQodXNlclNjcmlwdCk7CiAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQotICAgIGZvciAoY29uc3QgYXV0byYgc2xvdCA6IGRhdGEudXNl
ckNvbnRlbnRGaWx0ZXJzKQotICAgICAgICBhZGRVc2VyQ29udGVudEZpbHRlcihzbG90LmtleSwg
c2xvdC52YWx1ZSk7CisgICAgZm9yIChhdXRvJiBzbG90IDogZGF0YS51c2VyQ29udGVudEV4dGVu
c2lvbnMpCisgICAgICAgIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKHNsb3Qua2V5LCBzbG90LnZh
bHVlKTsKICNlbmRpZgogfQogCkBAIC05NywxOSArOTgsMjAgQEAgdm9pZCBXZWJQYWdlR3JvdXBQ
cm94eTo6cmVtb3ZlQWxsVXNlckNvbgogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9O
UykKLXZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OmFkZFVzZXJDb250ZW50RmlsdGVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzZXJpYWxpemVkUnVsZXMpCit2b2lkIFdlYlBhZ2VH
cm91cFByb3h5OjphZGRVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUsIFdl
YkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgY29udGVudEV4dGVuc2lvbkRhdGEpCiB7Ci0g
ICAgdXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlckNvbnRlbnRGaWx0ZXIobmFtZSwgc2Vy
aWFsaXplZFJ1bGVzKTsKKyAgICBSZWZQdHI8V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBj
b21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNy
ZWF0ZShXVEY6Om1vdmUoY29udGVudEV4dGVuc2lvbkRhdGEuYnl0ZWNvZGUpLCBXVEY6Om1vdmUo
Y29udGVudEV4dGVuc2lvbkRhdGEuYWN0aW9ucykpOworICAgIHVzZXJDb250ZW50Q29udHJvbGxl
cigpLmFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKG5hbWUsIGNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bik7CiB9CiAKLXZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OnJlbW92ZVVzZXJDb250ZW50RmlsdGVy
KGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgV2ViUGFnZUdyb3VwUHJveHk6OnJlbW92ZVVzZXJD
b250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICB1c2VyQ29udGVudENv
bnRyb2xsZXIoKS5yZW1vdmVVc2VyQ29udGVudEZpbHRlcihuYW1lKTsKKyAgICB1c2VyQ29udGVu
dENvbnRyb2xsZXIoKS5yZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihuYW1lKTsKIH0KIAotdm9p
ZCBXZWJQYWdlR3JvdXBQcm94eTo6cmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCkKK3ZvaWQg
V2ViUGFnZUdyb3VwUHJveHk6OnJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygpCiB7Ci0g
ICAgdXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQWxsVXNlckNvbnRlbnRGaWx0ZXJzKCk7
ICAgIAorICAgIHVzZXJDb250ZW50Q29udHJvbGxlcigpLnJlbW92ZUFsbFVzZXJDb250ZW50RXh0
ZW5zaW9ucygpOyAgICAKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkocmV2aXNpb24gMTgx
MTg5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAgY2xhc3MgVXNlckNvbnRlbnRD
b250cm9sbGVyOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uRGF0YTsKKwogY2xhc3MgV2ViUGFnZUdyb3VwUHJveHkgOiBwdWJsaWMgQVBJ
OjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpCdW5kbGVQYWdlR3JvdXA+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0
IFdlYlBhZ2VHcm91cERhdGEmKTsKQEAgLTY0LDkgKzY2LDkgQEAgcHVibGljOgogICAgIHZvaWQg
cmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMp
Ci0gICAgdm9pZCBhZGRVc2VyQ29udGVudEZpbHRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgc2VyaWFsaXplZFJ1bGVzKTsKLSAgICB2b2lkIHJlbW92ZVVzZXJDb250ZW50Rmls
dGVyKGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEZp
bHRlcnMoKTsKKyAgICB2b2lkIGFkZFVzZXJDb250ZW50RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSk7CisgICAgdm9pZCByZW1vdmVV
c2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3Zl
QWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdl
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUdyb3VwUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE4MTE4OSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlR3JvdXBQ
cm94eSB7CiAgICAgUmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsKIAogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCi0gICAgQWRkVXNlckNvbnRlbnRGaWx0ZXIoU3RyaW5nIG5hbWUsIFN0cmlu
ZyBzZXJpYWxpemVkUnVsZXMpOwotICAgIFJlbW92ZVVzZXJDb250ZW50RmlsdGVyKFN0cmluZyBu
YW1lKTsKLSAgICBSZW1vdmVBbGxVc2VyQ29udGVudEZpbHRlcnMoKTsKKyAgICBBZGRVc2VyQ29u
dGVudEV4dGVuc2lvbihTdHJpbmcgbmFtZSwgV2ViS2l0OjpXZWJDb21waWxlZENvbnRlbnRFeHRl
bnNpb25EYXRhIGNvbnRlbnRFeHRlbnNpb24pOworICAgIFJlbW92ZVVzZXJDb250ZW50RXh0ZW5z
aW9uKFN0cmluZyBuYW1lKTsKKyAgICBSZW1vdmVBbGxVc2VyQ29udGVudEV4dGVuc2lvbnMoKTsK
ICNlbmRpZgogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMTgxMTg5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMDMtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0
Lm9yZz4KKworICAgICAgICBbQ29udGVudCBFeHRlbnNpb25zXSBNb3ZlIGNvbXBpbGluZyBvZiBj
b250ZW50IGV4dGVuc2lvbnMgdG8gdGhlIFVJUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNDAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwOiBDb3BpZWQgZnJvbSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEZpbHRlci5jcHAuCisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OkluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjp+SW5N
ZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OkluTWVtb3J5Q29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRGaWx0ZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICBVcGRhdGUgdGVzdCBmb3IgbmV3IG5hbWUgKENvbnRlbnRGaWx0ZXIgLT4gQ29udGVu
dEV4dGVuc2lvbnMpIGFuZCBBUEkgKENvbXBpbGVkQ29udGVudEV4dGVuc2lvbgorICAgICAgICBp
cyBub3cgYWJzdHJhY3QpLgorCiAyMDE1LTAzLTA2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNn
YXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBUZXN0IC93ZWJraXQyL1dlYktpdFdl
YlZpZXcvc3luYy1yZXF1ZXN0LW9uLW1heC1jb25ucyBtaWdodCBmYWlsIGFmdGVyIGZpbmlzaGVk
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgxMTg5KQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAKIAkJN0M1NEE0QzExQUExMUNFNDAwMzgwRjc4
IC8qIFdLQnVuZGxlRmlsZUhhbmRsZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M1NEE0QkYxQUExMUNFNDAwMzgwRjc4IC8qIFdLQnVu
ZGxlRmlsZUhhbmRsZV9CdW5kbGUuY3BwICovOyB9OwogCQk3Qzg5RDJBQzFBNjlCODBEMDAzQTVG
REUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzg5RDJBQTFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29u
ZmlndXJhdGlvbi5jcHAgKi87IH07CiAJCTdDOUVEOThCMTdBMTlGNEIwMEU0REMzMyAvKiBhdHRy
aWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBh
dHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sICovOyB9OwotCQk3Q0IxODRDNjFBQTNG
MjEwMDA2NkVERkQgLyogQ29udGVudEZpbHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVu
dEZpbHRlci5jcHAgKi87IH07CisJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50
RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29udGVudEV4dGVuc2lvbnMuY3BwICov
OyB9OwogCQk3Q0NFN0VBNDFBNDExOUYzMDA0NDdDNEMgLyogSW5zdGFuY2VNZXRob2RTd2l6emxl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwODU4
N0ZGMTNGRUMzQTYwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tICovOyB9Owog
CQk3Q0NFN0VBNTFBNDExQTA4MDA0NDdDNEMgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMDgxMjI0MDEzRkMxNzI0
MDBEQzM5QUUgLyogSmF2YVNjcmlwdFRlc3RNYWMubW0gKi87IH07CiAJCTdDQ0U3RUE2MUE0MTFB
MEYwMDQ0N0M0QyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMxODg0MTE3MTE0QjYwMEI2OTcyNyAvKiBQ
bGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCQk3Qzg5
RDJBQTFBNjlCODBEMDAzQTVGREUgLyogV0tQYWdlQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXS1BhZ2VDb25maWd1cmF0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RERBQTkxNzM1REUxRDAwRUE1QUMwIC8qIENs
b3NlVGhlblRlcm1pbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9zZVRoZW5UZXJtaW5h
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzlFRDk4QTE3QTE5RDA2MDBF
NERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2guaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IGF0
dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTdDQjE4NEM0MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RmlsdGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRGaWx0ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0IxODRDNDFBQTNGMjEwMDA2NkVERkQgLyogQ29u
dGVudEV4dGVuc2lvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q29udGVudEV4dGVuc2lvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0JC
QTA3NjE5QkI4QTkxMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT1NPYmplY3RQdHIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3Q0MzRTFGQTE5N0UyMzQxMDBCRTYyNTIgLyogVXNlckNvbnRlbnRDb250cm9s
bGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckNvbnRl
bnRDb250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0NFN0U4QzFB
NDExNDRFMDA0NDdDNEMgLyogbGliVGVzdFdlYktpdEFQSS5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJUZXN0V2ViS2l0QVBJLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CkBAIC04MjQsMTEgKzgyNCwxMSBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQk5M0E3MjBFNTE4RjFBMEU4MDBBODQ4RTEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5jcHAgKi8sCisJCQkJN0NCMTg0QzQxQUEzRjIxMDAwNjZFREZEIC8qIENvbnRlbnRFeHRl
bnNpb25zLmNwcCAqLywKIAkJCQlDRDU0NTFFOTE5RTQxRjlEMDAxNjkzNkYgLyogQ1NTUGFyc2Vy
LmNwcCAqLywKIAkJCQkxNDQ2NDAxMjE2N0E4MzA1MDAwQkQyMTggLyogTGF5b3V0VW5pdC5jcHAg
Ki8sCiAJCQkJQ0RDMkM3MTQxNzk3MDg5RDAwRTYyN0ZCIC8qIFRpbWVSYW5nZXMuY3BwICovLAog
CQkJCTQ0MEExRDM4MTRBMDEwM0EwMDhBNjZGMiAvKiBVUkwuY3BwICovLAotCQkJCTdDQjE4NEM0
MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RmlsdGVyLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gV2ViQ29yZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDk1LDcgKzE0OTUs
NyBAQAogCQkJCTdDQ0U3RUNFMUE0MTFBN0UwMDQ0N0M0QyAvKiBTdG9wTG9hZGluZ0Zyb21EaWRG
aW5pc2hMb2FkaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQ0YxQTQxMUE3RTAwNDQ3
QzRDIC8qIFN0b3BMb2FkaW5nRnJvbURpZFJlY2VpdmVSZXNwb25zZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RjQ0MUE0MTFCOEUwMDQ0N0M0QyAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250ZW50RmlsdGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDQjE4NEM2MUFBM0YyMTAwMDY2RURGRCAvKiBDb250
ZW50RXh0ZW5zaW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEMDFBNDExQTdFMDA0
NDdDNEMgLyogU3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdEZyb21TdHJpbmcubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0Y0NTFBNDExQjhFMDA0NDdDNEMgLyogU3RyaW5nSGFzaGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjQ2MUE0MTFCOEUwMDQ0N0M0QyAvKiBTdHJpbmdJ
bXBsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxODEw
MDApCShmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RmlsdGVy
LmNwcDoxODEwMDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVu
dEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkwuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7Citpbmxp
bmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEFjdGlv
blR5cGUmIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgQWN0aW9u
VHlwZTo6QmxvY2tMb2FkOgorICAgICAgICByZXR1cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rp
b246OkJsb2NrTG9hZCI7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpCbG9ja0Nvb2tpZXM6CisgICAg
ICAgIHJldHVybiBvcyA8PCAiQ29udGVudEZpbHRlckFjdGlvbjo6QmxvY2tDb29raWVzIjsKKyAg
ICBjYXNlIEFjdGlvblR5cGU6OkNTU0Rpc3BsYXlOb25lOgorICAgICAgICByZXR1cm4gb3MgPDwg
IkNvbnRlbnRGaWx0ZXJBY3Rpb246OkNTU0Rpc3BsYXlOb25lIjsKKyAgICBjYXNlIEFjdGlvblR5
cGU6Oklnbm9yZVByZXZpb3VzUnVsZXM6CisgICAgICAgIHJldHVybiBvcyA8PCAiQ29udGVudEZp
bHRlckFjdGlvbjo6SWdub3JlUHJldmlvdXNSdWxlcyI7CisgICAgY2FzZSBBY3Rpb25UeXBlOjpJ
bnZhbGlkQWN0aW9uOgorICAgICAgICByZXR1cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rpb246
OkludmFsaWRBY3Rpb24iOworICAgIH0KK30KK30KK30KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgQ29udGVudEZpbHRlclRl
c3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIFNl
dFVwKCkKKyAgICB7CisgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKyAgICAg
ICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgICAgIFJ1bkxvb3A6OmluaXRpYWxp
emVNYWluUnVuTG9vcCgpOworICAgIH0KK307CisKK2NvbnN0IGNoYXIqIGJhc2ljRmlsdGVyID0g
Ilt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmls
dGVyXCI6XCIuKndlYmtpdC5vcmdcIn19XSI7CisKK1RFU1RfRihDb250ZW50RmlsdGVyVGVzdCwg
QmFzaWMpCit7CisgICAgUmVmUHRyPENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRF
eHRlbnNpb24+IGV4dGVuc2lvbiA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3Qo
YmFzaWNGaWx0ZXIpOworCisgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCBiYWNrZW5kOworICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZp
bHRlciIsIGV4dGVuc2lvbik7CisgICAgCisgICAgYXV0byBhY3Rpb25zID0gYmFja2VuZC5hY3Rp
b25zRm9yVVJMKFVSTChQYXJzZWRVUkxTdHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy8iKSk7Cisg
ICAgRVhQRUNUX0VRKDF1LCBhY3Rpb25zLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKENvbnRlbnRF
eHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQsIGFjdGlvbnNbMF0udHlwZSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4dGVuc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4
dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKLWNsYXNzIENvbnRl
bnRGaWx0ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworY2xhc3MgQ29udGVudEV4dGVu
c2lvblRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKICAgICB7CkBAIC02NywxMSArNjcsMzcgQEAgcHVibGljOgogICAgIH0KIH07
CiAKK2NsYXNzIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDogcHVibGljIENvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24geworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZShDb250
ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSYmIGRhdGEpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uKFdURjo6bW92ZShkYXRhKSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBj
b25zdCBDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGUqIGJ5dGVjb2RlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9kYXRhLmJ5dGVjb2RlLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgc2l6
ZV90IGJ5dGVjb2RlTGVuZ3RoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRhLmJ5dGVj
b2RlLnNpemUoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQ29udGVudEV4dGVuc2lvbnM6OlNlcmlh
bGl6ZWRBY3Rpb25CeXRlKiBhY3Rpb25zKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9kYXRh
LmFjdGlvbnMuZGF0YSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgYWN0aW9uc0xlbmd0aCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZGF0YS5hY3Rpb25zLnNpemUoKTsgfQorCitwcml2YXRl
OgorICAgIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uKENvbnRlbnRFeHRlbnNpb25z
OjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEo
V1RGOjptb3ZlKGRhdGEpKQorICAgIHsKKyAgICB9CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7Cit9OworCiBjb25zdCBjaGFyKiBi
YXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwogCi1URVNUX0YoQ29udGVu
dEZpbHRlclRlc3QsIEJhc2ljKQorVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBCYXNpYykK
IHsKLSAgICBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gZXh0ZW5zaW9uID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChiYXNpY0Zp
bHRlcik7CisgICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBp
bGVSdWxlTGlzdChiYXNpY0ZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7
CiAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tl
bmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJ0ZXN0RmlsdGVyIiwgZXh0ZW5z
aW9uKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50Rmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Q29udGVudEZpbHRlci5jcHAJKHJldmlzaW9uIDE4MTE4OSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RmlsdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
UGxhdGZvcm1VdGlsaXRpZXMuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXpl
VGhyZWFkaW5nLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgQ29udGVu
dEV4dGVuc2lvbnMgewotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG9zLCBjb25zdCBBY3Rpb25UeXBlJiBhY3Rpb24pCi17Ci0gICAgc3dpdGNoIChhY3Rpb24p
IHsKLSAgICBjYXNlIEFjdGlvblR5cGU6OkJsb2NrTG9hZDoKLSAgICAgICAgcmV0dXJuIG9zIDw8
ICJDb250ZW50RmlsdGVyQWN0aW9uOjpCbG9ja0xvYWQiOwotICAgIGNhc2UgQWN0aW9uVHlwZTo6
QmxvY2tDb29raWVzOgotICAgICAgICByZXR1cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rpb246
OkJsb2NrQ29va2llcyI7Ci0gICAgY2FzZSBBY3Rpb25UeXBlOjpDU1NEaXNwbGF5Tm9uZToKLSAg
ICAgICAgcmV0dXJuIG9zIDw8ICJDb250ZW50RmlsdGVyQWN0aW9uOjpDU1NEaXNwbGF5Tm9uZSI7
Ci0gICAgY2FzZSBBY3Rpb25UeXBlOjpJZ25vcmVQcmV2aW91c1J1bGVzOgotICAgICAgICByZXR1
cm4gb3MgPDwgIkNvbnRlbnRGaWx0ZXJBY3Rpb246Oklnbm9yZVByZXZpb3VzUnVsZXMiOwotICAg
IGNhc2UgQWN0aW9uVHlwZTo6SW52YWxpZEFjdGlvbjoKLSAgICAgICAgcmV0dXJuIG9zIDw8ICJD
b250ZW50RmlsdGVyQWN0aW9uOjpJbnZhbGlkQWN0aW9uIjsKLSAgICB9Ci19Ci19Ci19Ci0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7Ci0KLWNs
YXNzIENvbnRlbnRGaWx0ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgewotcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCi0gICAgewotICAgICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7Ci0gICAgICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgICAg
ICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICB9Ci19OwotCi1jb25zdCBj
aGFyKiBiYXNpY0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLip3ZWJraXQub3JnXCJ9fV0iOwotCi1URVNUX0Yo
Q29udGVudEZpbHRlclRlc3QsIEJhc2ljKQotewotICAgIFJlZlB0cjxDb250ZW50RXh0ZW5zaW9u
czo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBDb250ZW50RXh0ZW5zaW9u
czo6Y29tcGlsZVJ1bGVMaXN0KGJhc2ljRmlsdGVyKTsKLQotICAgIENvbnRlbnRFeHRlbnNpb25z
OjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKLSAgICBiYWNrZW5kLmFkZENvbnRl
bnRFeHRlbnNpb24oInRlc3RGaWx0ZXIiLCBleHRlbnNpb24pOwotICAgIAotICAgIGF1dG8gYWN0
aW9ucyA9IGJhY2tlbmQuYWN0aW9uc0ZvclVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCAiaHR0cDov
L3dlYmtpdC5vcmcvIikpOwotICAgIEVYUEVDVF9FUSgxdSwgYWN0aW9ucy5zaXplKCkpOwotICAg
IEVYUEVDVF9FUShDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2FkLCBhY3Rp
b25zWzBdLnR5cGUoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="273022"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>