<?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>143059</bug_id>
          
          <creation_ts>2015-03-25 14:36:15 -0700</creation_ts>
          <short_desc>[Content Extensions] Convert content extension compiling to return error codes and write its output using a client</short_desc>
          <delta_ts>2015-03-25 15:49:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>
          
          <blocked>143058</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1080042</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-25 14:36:15 -0700</bug_when>
    <thetext>[Content Extensions] Convert content extension compiling to return error codes and write its output using a client</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080045</commentid>
    <comment_count>1</comment_count>
      <attachid>249428</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-25 14:41:01 -0700</bug_when>
    <thetext>Created attachment 249428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080046</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-25 14:43:06 -0700</bug_when>
    <thetext>Attachment 249428 did not pass style-queue:


ERROR: Source/WebKit2/Shared/WebCompiledContentExtension.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/contentextensions/ContentExtensionError.h:60:  make_error_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/contentextensions/ContentExtensionError.h:69:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/contentextensions/ContentExtensionError.cpp:41:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080068</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-25 15:39:40 -0700</bug_when>
    <thetext>Committed r181974: &lt;http://trac.webkit.org/changeset/181974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080073</commentid>
    <comment_count>4</comment_count>
      <attachid>249428</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-03-25 15:43:33 -0700</bug_when>
    <thetext>Comment on attachment 249428
Patch

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

&gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:103
&gt; +std::error_code compileRuleList(const String&amp; ruleList, ContentExtensionCompilationClient&amp; client)

I like always putting the client object first in a list of parameters.

&gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:50
&gt; +static std::error_code getTypeFlags(ExecState&amp; exec, const JSValue&amp; typeValue, ResourceFlags&amp; flags, uint16_t(*stringToType)(const String&amp;))

missing space after the return type.

&gt; Source/WebKit2/Shared/WebCompiledContentExtension.cpp:59
&gt; +    data.actionsOffset = compilerData.  bytecode.size();

Please don&apos;t land this.

&gt; Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentFilter.mm:47
&gt; +    auto compilerError = WebCore::ContentExtensions::compileRuleList(String(serializedRules), client);
&gt; +    if (compilerError)

Can fold these into one line.

&gt; Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentFilter.mm:48
&gt; +        [NSException raise:NSGenericException format:@&quot;Failed to compile rules with error: %s&quot;, compilerError.message().c_str()];

Not sure if we should raise an exception here. Maybe we should return nil on failure and have an NSError parameter instead.

&gt; Tools/MiniBrowser/mac/MainMenu.xib:8
&gt;  &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&gt; -&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;7504.2&quot; systemVersion=&quot;14D89&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot;&gt;
&gt; +&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;8052.4&quot; systemVersion=&quot;15A131a&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot;&gt;
&gt;      &lt;dependencies&gt;
&gt; -        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;7504.2&quot;/&gt;
&gt; +        &lt;deployment identifier=&quot;macosx&quot;/&gt;
&gt; +        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;8052.4&quot;/&gt;
&gt;      &lt;/dependencies&gt;
&gt;      &lt;objects&gt;
&gt;          &lt;customObject id=&quot;-2&quot; userLabel=&quot;File&apos;s Owner&quot; customClass=&quot;NSApplication&quot;&gt;

Please don&apos;t land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080076</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-03-25 15:49:49 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 249428 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=249428&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionCompiler.cpp:103
&gt; &gt; +std::error_code compileRuleList(const String&amp; ruleList, ContentExtensionCompilationClient&amp; client)
&gt; 
&gt; I like always putting the client object first in a list of parameters.

Ok. Will change.

&gt; 
&gt; &gt; Source/WebCore/contentextensions/ContentExtensionParser.cpp:50
&gt; &gt; +static std::error_code getTypeFlags(ExecState&amp; exec, const JSValue&amp; typeValue, ResourceFlags&amp; flags, uint16_t(*stringToType)(const String&amp;))
&gt; 
&gt; missing space after the return type.

Will fix.

&gt; 
&gt; &gt; Source/WebKit2/Shared/WebCompiledContentExtension.cpp:59
&gt; &gt; +    data.actionsOffset = compilerData.  bytecode.size();
&gt; 
&gt; Please don&apos;t land this.

Oops. Will fix.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentFilter.mm:47
&gt; &gt; +    auto compilerError = WebCore::ContentExtensions::compileRuleList(String(serializedRules), client);
&gt; &gt; +    if (compilerError)
&gt; 
&gt; Can fold these into one line.

Ok.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/_WKUserContentFilter.mm:48
&gt; &gt; +        [NSException raise:NSGenericException format:@&quot;Failed to compile rules with error: %s&quot;, compilerError.message().c_str()];
&gt; 
&gt; Not sure if we should raise an exception here. Maybe we should return nil on
&gt; failure and have an NSError parameter instead.

This init method will be going away real soon.  I was using this for testing only.

&gt; 
&gt; &gt; Tools/MiniBrowser/mac/MainMenu.xib:8
&gt; &gt;  &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&gt; &gt; -&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;7504.2&quot; systemVersion=&quot;14D89&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot;&gt;
&gt; &gt; +&lt;document type=&quot;com.apple.InterfaceBuilder3.Cocoa.XIB&quot; version=&quot;3.0&quot; toolsVersion=&quot;8052.4&quot; systemVersion=&quot;15A131a&quot; targetRuntime=&quot;MacOSX.Cocoa&quot; propertyAccessControl=&quot;none&quot;&gt;
&gt; &gt;      &lt;dependencies&gt;
&gt; &gt; -        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;7504.2&quot;/&gt;
&gt; &gt; +        &lt;deployment identifier=&quot;macosx&quot;/&gt;
&gt; &gt; +        &lt;plugIn identifier=&quot;com.apple.InterfaceBuilder.CocoaPlugin&quot; version=&quot;8052.4&quot;/&gt;
&gt; &gt;      &lt;/dependencies&gt;
&gt; &gt;      &lt;objects&gt;
&gt; &gt;          &lt;customObject id=&quot;-2&quot; userLabel=&quot;File&apos;s Owner&quot; customClass=&quot;NSApplication&quot;&gt;
&gt; 
&gt; Please don&apos;t land this.

I removed it before landing.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249428</attachid>
            <date>2015-03-25 14:41:01 -0700</date>
            <delta_ts>2015-03-25 15:38:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143059-20150325144023.patch</filename>
            <type>text/plain</type>
            <size>51330</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAzLTI1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gQ29u
dmVydCBjb250ZW50IGV4dGVuc2lvbiBjb21waWxpbmcgdG8gcmV0dXJuIGVycm9yIGNvZGVzIGFu
ZCB3cml0ZSBpdHMgb3V0cHV0IHVzaW5nIGEgY2xpZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNTkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgQWRkIENvbnRlbnRFeHRlbnNpb25FcnJvci5oL2NwcC4KKworICAgICAg
ICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OmNvbnRlbnRFeHRlbnNpb25FcnJv
ckNhdGVnb3J5KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
RXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bWFr
ZV9lcnJvcl9jb2RlKToKKyAgICAgICAgQWRkIENvbnRlbnRFeHRlbnNpb25FcnJvciBlbnVtIGFu
ZCBzdGQ6OmVycm9yX2NvZGUgYWRhcHRvci4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oOgorICAgICAgICBJbnN0ZWFkIG9mIHJldHVybmlu
ZyBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhLCB1c2UgYSBjbGllbnQgaW50ZXJmYWNlCisg
ICAgICAgIHRvIHBhc3MgZGF0YS4gRXZlbnR1YWxseSwgdGhpcyBzaG91bGQgYmUgdHVybmVkIGlu
dG8gYSBkaXJlY3Qgc3RyZWFtaW5nIAorICAgICAgICBpbnRlcmZhY2Ugc28gd2UgY2FuIHdyaXRl
IGRpcmVjdGx5IHRvIGEgZmlsZS4KKworICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25Db21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Y29tcGlsZVJ1bGVMaXN0KToKKyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpnZXRUeXBlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmxvYWRUcmlnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2Fk
QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpsb2FkUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6bG9hZEVuY29kZWRSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6cGFyc2VSdWxlTGlzdCk6Cisg
ICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBhcnNlci5oOgorICAg
ICAgICBDb252ZXJ0IHRvIHJldHVybiBhbiBlcnJvci4KKwogMjAxNS0wMy0yNSAgQmV0aCBEYWtp
biAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE4MTY2MCk6IFNh
ZmFyaSBuYXZpZ2F0ZXMgdG8gbGluayBhZnRlciBhIHN0YXJ0aW5nIGFuZCBjYW5jZWxpbmcgYSAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4MTk2NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjUzOSw2ICsyNTM5LDggQEAK
IAkJN0NFNjgzNDcxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0
b3JUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0NFNjgzNDYxOTIxODIxNTAwRjREOTI4IC8qIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JU
eXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTZDQkZBMTg3RjM3MDcwMEQ0
NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCAqLzsgfTsKIAkJN0NFNkNCRkQxODdGMzk0OTAwRDQ2
QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3Q0U2Q0JGQzE4N0YzOTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVy
dGVyLmNwcCAqLzsgfTsKKwkJN0NGREM1N0MxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRl
bnNpb25FcnJvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNw
cCAqLzsgfTsKKwkJN0NGREM1N0QxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25F
cnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NG
REM1N0IxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdENzQxQkRBMTc3MjI2
QUEwMDg1OTE3MCAvKiBDU1NWYWx1ZUtleXdvcmRzLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODE0ODA5RDEzMDQzMDAw
RTYxRDcgLyogQ1NTVmFsdWVLZXl3b3Jkcy5oICovOyB9OwogCQk3RTM3RUYyRTEzMzkyMDg4MDBC
MjkyNTAgLyogU3VicmVzb3VyY2VMb2FkZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVz
b3VyY2VMb2FkZXJDRi5jcHAgKi87IH07CiAJCTdFNDI4Q0U1MTNFMzQwN0YwMDNCNjYxQyAvKiBS
ZXNvdXJjZUhhbmRsZUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdFNDI4Q0U0MTNFMzQwN0YwMDNCNjYxQyAvKiBSZXNvdXJjZUhhbmRsZUlPUy5t
bSAqLzsgfTsKQEAgLTk3ODgsNiArOTc5MCw4IEBACiAJCTdDRTY4MzQ2MTkyMTgyMTUwMEY0RDky
OCAvKiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclR5cGVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBG
b3JtYXRDb252ZXJ0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybWF0
Q29udmVydGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRTZDQkZDMTg3RjM5
NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRm9ybWF0Q29udmVydGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0NGREM1N0ExQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5z
aW9uRXJyb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0ZEQzU3QjFBQzFE
ODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbnRlbnRFeHRlbnNpb25FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3RTM3RUYyRDEzMzkyMDg4MDBCMjkyNTAgLyogU3VicmVzb3VyY2VMb2Fk
ZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdWJyZXNvdXJj
ZUxvYWRlckNGLmNwcDsgcGF0aCA9IGNmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3RTQyOENFNDEzRTM0MDdGMDAzQjY2MUMgLyogUmVzb3Vy
Y2VIYW5kbGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBS
ZXNvdXJjZUhhbmRsZUlPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0NkY2
RjgxNjI3QTJDOTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09FU0VsZW1lbnRJbmRleFVpbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1MDEsNiArMTU1MDUsOCBAQAogCQkJCTdD
OTNGMzQ3MUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwICov
LAogCQkJCTdDOTNGMzQ4MUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRFeHRlbnNp
b24uaCAqLywKIAkJCQk1Q0RGQTZDNzFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lv
bkFjdGlvbnMuaCAqLywKKwkJCQk3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4
dGVuc2lvbkVycm9yLmNwcCAqLywKKwkJCQk3Q0ZEQzU3QjFBQzFEODA1MDBFMjRBNTcgLyogQ29u
dGVudEV4dGVuc2lvbkVycm9yLmggKi8sCiAJCQkJN0M5M0YzNEIxQUE2QkYwNzAwQTk4QkFCIC8q
IENvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAgKi8sCiAJCQkJN0M5M0YzNEMxQUE2QkYwNzAw
QTk4QkFCIC8qIENvbnRlbnRFeHRlbnNpb25Db21waWxlci5oICovLAogCQkJCTI2RjBDODk1MUEy
RTcyNEIwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLywKQEAgLTI1NDEz
LDYgKzI1NDE5LDcgQEAKIAkJCQlCMkZBM0Q5QjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpT
RVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovLAogCQkJCUIyN0IyODI4MENFRjBDMDcwMEQz
OUQ1NCAvKiBKU1NWR0dseXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NGREM1N0Qx
QUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0Q5RDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdHcmFk
aWVudEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCRTc0MjczODFGQTkwNkZCQjRGMEYy
QyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODQyOSw2ICsy
ODQzNiw3IEBACiAJCQkJRjM1MEI3MzUxM0YxMzc3RDAwODgwQzQzIC8qIEluc3RydW1lbnRpbmdB
Z2VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ0NkYwNEUxN0I5NkZCRDAwNTY0N0YwIC8q
IEludFBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTYwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbnRQb2ludENHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRkRDNTdDMUFDMUQ4MDUw
MEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjI3NTM1N0MwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjI3NTM1NzMwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjI3NTM1NjEwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RDRy5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVu
dGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTgxOTY0
KQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbkNv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvbkFj
dGlvbnMuaCIKKyNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCIKICNpbmNsdWRlICJD
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lvblJ1bGUu
aCIKICNpbmNsdWRlICJDb250ZW50RXh0ZW5zaW9uc0RlYnVnZ2luZy5oIgpAQCAtOTksOSArMTAw
LDEyIEBAIHN0YXRpYyBWZWN0b3I8dW5zaWduZWQ+IHNlcmlhbGl6ZUFjdGlvbnMKIH0KIAogCi1D
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJpbmcm
IHJ1bGVMaXN0KQorc3RkOjplcnJvcl9jb2RlIGNvbXBpbGVSdWxlTGlzdChjb25zdCBTdHJpbmcm
IHJ1bGVMaXN0LCBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQmIGNsaWVudCkKIHsK
LSAgICBhdXRvIHBhcnNlZFJ1bGVMaXN0ID0gcGFyc2VSdWxlTGlzdChydWxlTGlzdCk7CisgICAg
VmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBwYXJzZWRSdWxlTGlzdDsKKyAgICBhdXRvIHBh
cnNlckVycm9yID0gcGFyc2VSdWxlTGlzdChydWxlTGlzdCwgcGFyc2VkUnVsZUxpc3QpOworICAg
IGlmIChwYXJzZXJFcnJvcikKKyAgICAgICAgcmV0dXJuIHBhcnNlckVycm9yOwogCiAjaWYgQ09O
VEVOVF9FWFRFTlNJT05TX1BFUkZPUk1BTkNFX1JFUE9SVElORwogICAgIGRvdWJsZSBuZmFCdWls
ZFRpbWVTdGFydCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMTc4LDcgKzE4
MiwxMCBAQCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbXBpbGVSdWxlCiAgICAgZGZh
LmRlYnVnUHJpbnREb3QoKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHsgV1RGOjptb3ZlKGJ5dGVj
b2RlKSwgV1RGOjptb3ZlKGFjdGlvbnMpIH07CisgICAgY2xpZW50LndyaXRlQnl0ZWNvZGUoV1RG
Ojptb3ZlKGJ5dGVjb2RlKSk7CisgICAgY2xpZW50LndyaXRlQWN0aW9ucyhXVEY6Om1vdmUoYWN0
aW9ucykpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4
dGVuc2lvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRF
eHRlbnNpb25Db21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oCShyZXZpc2lvbiAxODE5NjQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGls
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAKICNpbmNsdWRlICJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaCIKKyNp
bmNsdWRlIDxzeXN0ZW1fZXJyb3I+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAKQEAgLTQwLDcgKzQxLDE1IEBAIHN0cnVjdCBDb21waWxlZENvbnRlbnRF
eHRlbnNpb25EYXRhIHsKICAgICBWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+IGFjdGlvbnM7
CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhIGNvbXBp
bGVSdWxlTGlzdChjb25zdCBTdHJpbmcmKTsKK2NsYXNzIENvbnRlbnRFeHRlbnNpb25Db21waWxh
dGlvbkNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29udGVudEV4dGVuc2lvbkNvbXBp
bGF0aW9uQ2xpZW50KCkgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHdyaXRlQnl0ZWNvZGUo
VmVjdG9yPERGQUJ5dGVjb2RlPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0aW9u
cyhWZWN0b3I8U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYpID0gMDsKK307CisKK1dFQkNPUkVfRVhQ
T1JUIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiwgQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50Jik7CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRF
eHRlbnNpb25zCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25FcnJvci5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uRXJyb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lv
bkVycm9yLmgiCisKKyNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQorCisjaW5jbHVkZSA8
c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMgeworCitjb25zdCBzdGQ6OmVycm9y
X2NhdGVnb3J5JiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeSgpCit7CisgICAgY2xhc3Mg
Q29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkgOiBwdWJsaWMgc3RkOjplcnJvcl9jYXRlZ29y
eSB7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gImNvbnRlbnQgZXh0ZW5zaW9uIjsKKyAgICAg
ICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbWVzc2FnZShpbnQgZXJyb3JDb2Rl
KSBjb25zdCBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PENvbnRlbnRFeHRlbnNpb25FcnJvcj4oZXJyb3JDb2RlKSkgeworICAgICAgICAgICAgY2Fz
ZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiRmFpbGVkIHRvIHBhcnNlIHRoZSBKU09OIFN0cmluZy4iOworICAgICAgICAgICAgY2Fz
ZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0
OgorICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCBpbnB1dCwgdGhlIHRvcCBsZXZlbCBz
dHJ1Y3R1cmUgaXMgbm90IGFuIG9iamVjdC4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuQXJyYXk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJJbnZhbGlkIGlucHV0LCB0aGUgdG9wIGxldmVsIHN0cnVjdHVyZSBpcyBu
b3QgYW4gYXJyYXkuIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpK
U09OSW52YWxpZE9iamVjdEluVG9wTGV2ZWxBcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkludmFsaWQgb2JqZWN0IGluIHRoZSB0b3AgbGV2ZWwgYXJyYXkuIjsKKyAgICAgICAgICAgIGNh
c2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFJ1bGU6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJJbnZhbGlkIHJ1bGUuIjsKKyAgICAgICAgICAgIGNhc2UgQ29udGVudEV4dGVu
c2lvbkVycm9yOjpKU09OQ29udGFpbnNOb1J1bGVzOgorICAgICAgICAgICAgICAgIHJldHVybiAi
RW1wdHkgZXh0ZW5zaW9uLiI7CisgICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJv
cjo6SlNPTkludmFsaWRUcmlnZ2VyOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCB0
cmlnZ2VyIG9iamVjdC4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05JbnZhbGlkVVJMRmlsdGVySW5UcmlnZ2VyOgorICAgICAgICAgICAgICAgIHJldHVybiAi
SW52YWxpZCB1cmwtZmlsdGVyIG9iamVjdC4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0
ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlckZsYWdzQXJyYXk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJJbnZhbGlkIHRyaWdnZXIgZmxhZ3MgYXJyYXkuIjsKKyAgICAgICAgICAgIGNh
c2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZE9iamVjdEluVHJpZ2dlckZsYWdz
QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIG9iamVjdCBpbiB0aGUgdHJp
Z2dlciBmbGFncyBhcnJheS4iOworICAgICAgICAgICAgY2FzZSBDb250ZW50RXh0ZW5zaW9uRXJy
b3I6OkpTT05JbnZhbGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIkludmFsaWQgc3RyaW5nIGluIHRoZSB0cmlnZ2VyIGZsYWdzIGFycmF5LiI7Cisg
ICAgICAgICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRBY3Rpb246
CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGFjdGlvbiBvYmplY3QuIjsKKyAgICAg
ICAgICAgIGNhc2UgQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvblR5cGU6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGFjdGlvbiB0eXBlLiI7CisgICAgICAg
ICAgICBjYXNlIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTkludmFsaWRDU1NEaXNwbGF5Tm9u
ZUFjdGlvblR5cGU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIGNzcy1kaXNwbGF5
LW5vbmUgYWN0aW9uIHR5cGUuIFJlcXVpcmVzIGEgc2VsZWN0b3IuIjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5
PiBjb250ZW50RXh0ZW5zaW9uRXJyb3JDYXRlZ29yeTsKKyAgICByZXR1cm4gY29udGVudEV4dGVu
c2lvbkVycm9yQ2F0ZWdvcnk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25z
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEVOVF9FWFRF
TlNJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbkVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVu
c2lvbnMvQ29udGVudEV4dGVuc2lvbkVycm9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb250ZW50RXh0ZW5z
aW9uRXJyb3JfaAorI2RlZmluZSBDb250ZW50RXh0ZW5zaW9uRXJyb3JfaAorCisjaWYgRU5BQkxF
KENPTlRFTlRfRVhURU5TSU9OUykKKworI2luY2x1ZGUgPHN5c3RlbV9lcnJvcj4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKKworZW51bSBjbGFz
cyBDb250ZW50RXh0ZW5zaW9uRXJyb3IgeworICAgIC8vIEpTT04gcGFyc2VyIGVycm9yCisgICAg
SlNPTkludmFsaWQgPSAxLAorICAgIAorICAgIC8vIEpTT04gc2VtYW50aWNzIGVycm9yCisgICAg
SlNPTlRvcExldmVsU3RydWN0dXJlTm90QW5PYmplY3QsCisgICAgSlNPTlRvcExldmVsU3RydWN0
dXJlTm90QW5BcnJheSwKKyAgICBKU09OSW52YWxpZE9iamVjdEluVG9wTGV2ZWxBcnJheSwKKyAg
ICBKU09OSW52YWxpZFJ1bGUsCisgICAgSlNPTkNvbnRhaW5zTm9SdWxlcywKKyAgICAKKyAgICBK
U09OSW52YWxpZFRyaWdnZXIsCisgICAgSlNPTkludmFsaWRVUkxGaWx0ZXJJblRyaWdnZXIsCisg
ICAgSlNPTkludmFsaWRUcmlnZ2VyRmxhZ3NBcnJheSwKKyAgICBKU09OSW52YWxpZE9iamVjdElu
VHJpZ2dlckZsYWdzQXJyYXksCisgICAgSlNPTkludmFsaWRTdHJpbmdJblRyaWdnZXJGbGFnc0Fy
cmF5LAorICAgIAorICAgIEpTT05JbnZhbGlkQWN0aW9uLAorICAgIEpTT05JbnZhbGlkQWN0aW9u
VHlwZSwKKyAgICBKU09OSW52YWxpZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZSwKK307CisKK2Nv
bnN0IHN0ZDo6ZXJyb3JfY2F0ZWdvcnkmIGNvbnRlbnRFeHRlbnNpb25FcnJvckNhdGVnb3J5KCk7
CisKK2lubGluZSBzdGQ6OmVycm9yX2NvZGUgbWFrZV9lcnJvcl9jb2RlKENvbnRlbnRFeHRlbnNp
b25FcnJvciBlcnJvcikKK3sKKyAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yKSwg
Y29udGVudEV4dGVuc2lvbkVycm9yQ2F0ZWdvcnkoKSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBD
b250ZW50RXh0ZW5zaW9ucworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCituYW1lc3BhY2Ugc3Rk
IHsKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lcnJvcl9jb2RlX2VudW08V2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25FcnJvcj4gOiBwdWJsaWMgdHJ1ZV90eXBl
IHsgfTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCisjZW5kaWYg
Ly8gQ29udGVudEV4dGVuc2lvbkVycm9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRl
eHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0NvbnRlbnRFeHRlbnNpb25QYXJzZXIuY3BwCShy
ZXZpc2lvbiAxODE5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250
ZW50RXh0ZW5zaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAorI2luY2x1ZGUgIkNvbnRlbnRFeHRl
bnNpb25FcnJvci5oIgogI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25SdWxlLmgiCiAjaW5jbHVk
ZSAiQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVuc2lv
bnNEZWJ1Z2dpbmcuaCIKQEAgLTQ2LDU3ICs0Nyw0OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IG5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7CiAKLXN0YXRpYyBib29sIGdldFR5cGVGbGFn
cyhFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHR5cGVWYWx1ZSwgUmVzb3VyY2VGbGFn
cyYgZmxhZ3MsIHVpbnQxNl90KCpzdHJpbmdUb1R5cGUpKGNvbnN0IFN0cmluZyYpKQorc3RhdGlj
IHN0ZDo6ZXJyb3JfY29kZSBnZXRUeXBlRmxhZ3MoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1Zh
bHVlJiB0eXBlVmFsdWUsIFJlc291cmNlRmxhZ3MmIGZsYWdzLCB1aW50MTZfdCgqc3RyaW5nVG9U
eXBlKShjb25zdCBTdHJpbmcmKSkKIHsKICAgICBpZiAoIXR5cGVWYWx1ZS5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB0eXBlVmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgIGlmICghaXNKU0FycmF5
KG9iamVjdCkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIHRyaWdnZXIgZmxhZ3Mg
YXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIWlzSlNBcnJh
eShvYmplY3QpKQorICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52
YWxpZFRyaWdnZXJGbGFnc0FycmF5OwogCiAgICAgSlNBcnJheSogYXJyYXkgPSBqc0Nhc3Q8SlNB
cnJheSo+KG9iamVjdCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gYXJyYXktPmdldEluZGV4KCZleGVjLCBpKTsKLSAgICAgICAgaWYg
KGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIkludmFsaWQgb2JqZWN0IGluIHRoZSB0cmlnZ2VyIGZsYWdzIGFycmF5LiIpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9u
KCkgfHwgIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6
SlNPTkludmFsaWRPYmplY3RJblRyaWdnZXJGbGFnc0FycmF5OwogICAgICAgICAKICAgICAgICAg
U3RyaW5nIG5hbWUgPSB2YWx1ZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgICAgIHVpbnQxNl90
IHR5cGUgPSBzdHJpbmdUb1R5cGUobmFtZSk7Ci0gICAgICAgIGlmICghdHlwZSkgewotICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIHN0cmluZyBpbiB0aGUgdHJpZ2dlciBmbGFncyBh
cnJheS4iKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisgICAgICAgIGlmICgh
dHlwZSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZh
bGlkU3RyaW5nSW5UcmlnZ2VyRmxhZ3NBcnJheTsKKwogICAgICAgICBmbGFncyB8PSB0eXBlOwog
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiB7IH07CiB9CiAgICAgCi1zdGF0
aWMgYm9vbCBsb2FkVHJpZ2dlcihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0JiBydWxlT2JqZWN0
LCBUcmlnZ2VyJiB0cmlnZ2VyKQorc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkVHJpZ2dlcihF
eGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0JiBydWxlT2JqZWN0LCBUcmlnZ2VyJiB0cmlnZ2VyKQog
ewogICAgIEpTVmFsdWUgdHJpZ2dlck9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyKCZleGVjLCAidHJpZ2dlciIpKTsKLSAgICBpZiAoIXRyaWdnZXJPYmplY3QgfHwgZXhl
Yy5oYWRFeGNlcHRpb24oKSB8fCAhdHJpZ2dlck9iamVjdC5pc09iamVjdCgpKSB7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiSW52YWxpZCB0cmlnZ2VyIG9iamVjdC4iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQorICAgIGlmICghdHJpZ2dlck9iamVjdCB8fCBleGVjLmhhZEV4Y2Vw
dGlvbigpIHx8ICF0cmlnZ2VyT2JqZWN0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBDb250
ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVHJpZ2dlcjsKKyAgICAKICAgICBKU1ZhbHVl
IHVybEZpbHRlck9iamVjdCA9IHRyaWdnZXJPYmplY3QuZ2V0KCZleGVjLCBJZGVudGlmaWVyKCZl
eGVjLCAidXJsLWZpbHRlciIpKTsKLSAgICBpZiAoIXVybEZpbHRlck9iamVjdCB8fCBleGVjLmhh
ZEV4Y2VwdGlvbigpIHx8ICF1cmxGaWx0ZXJPYmplY3QuaXNTdHJpbmcoKSkgewotICAgICAgICBX
VEZMb2dBbHdheXMoIkludmFsaWQgdXJsLWZpbHRlciBvYmplY3QuIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgaWYgKCF1cmxGaWx0ZXJPYmplY3QgfHwgZXhlYy5oYWRFeGNl
cHRpb24oKSB8fCAhdXJsRmlsdGVyT2JqZWN0LmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkVVJMRmlsdGVySW5UcmlnZ2VyOwogCiAg
ICAgU3RyaW5nIHVybEZpbHRlciA9IHVybEZpbHRlck9iamVjdC50b1dURlN0cmluZygmZXhlYyk7
Ci0gICAgaWYgKHVybEZpbHRlci5pc0VtcHR5KCkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJ
bnZhbGlkIHVybC1maWx0ZXIgb2JqZWN0LiBUaGUgdXJsIGlzIGVtcHR5LiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICh1cmxGaWx0ZXIuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZFVSTEZpbHRlckluVHJp
Z2dlcjsKKwogICAgIHRyaWdnZXIudXJsRmlsdGVyID0gdXJsRmlsdGVyOwogCiAgICAgSlNWYWx1
ZSB1cmxGaWx0ZXJDYXNlVmFsdWUgPSB0cmlnZ2VyT2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmll
cigmZXhlYywgInVybC1maWx0ZXItaXMtY2FzZS1zZW5zaXRpdmUiKSk7CkBAIC0xMDQsMjkgKzk2
LDMxIEBAIHN0YXRpYyBib29sIGxvYWRUcmlnZ2VyKEV4ZWNTdGF0ZSYgZXhlYywKICAgICAgICAg
dHJpZ2dlci51cmxGaWx0ZXJJc0Nhc2VTZW5zaXRpdmUgPSB1cmxGaWx0ZXJDYXNlVmFsdWUudG9C
b29sZWFuKCZleGVjKTsKIAogICAgIEpTVmFsdWUgcmVzb3VyY2VUeXBlVmFsdWUgPSB0cmlnZ2Vy
T2JqZWN0LmdldCgmZXhlYywgSWRlbnRpZmllcigmZXhlYywgInJlc291cmNlLXR5cGUiKSk7Ci0g
ICAgaWYgKHJlc291cmNlVHlwZVZhbHVlICYmICFleGVjLmhhZEV4Y2VwdGlvbigpICYmICFnZXRU
eXBlRmxhZ3MoZXhlYywgcmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIuZmxhZ3MsIHJlYWRSZXNv
dXJjZVR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgICAgaWYgKHJlc291cmNl
VHlwZVZhbHVlICYmICFleGVjLmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGF1dG8gdHlwZUZs
YWdzRXJyb3IgPSBnZXRUeXBlRmxhZ3MoZXhlYywgcmVzb3VyY2VUeXBlVmFsdWUsIHRyaWdnZXIu
ZmxhZ3MsIHJlYWRSZXNvdXJjZVR5cGUpOworICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCisg
ICAgICAgICAgICByZXR1cm4gdHlwZUZsYWdzRXJyb3I7CisgICAgfQorCiAgICAgSlNWYWx1ZSBs
b2FkVHlwZVZhbHVlID0gdHJpZ2dlck9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMs
ICJsb2FkLXR5cGUiKSk7Ci0gICAgaWYgKGxvYWRUeXBlVmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0
aW9uKCkgJiYgIWdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdz
LCByZWFkTG9hZFR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxvYWRUeXBl
VmFsdWUgJiYgIWV4ZWMuaGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgYXV0byB0eXBlRmxhZ3NF
cnJvciA9IGdldFR5cGVGbGFncyhleGVjLCBsb2FkVHlwZVZhbHVlLCB0cmlnZ2VyLmZsYWdzLCBy
ZWFkTG9hZFR5cGUpOworICAgICAgICBpZiAodHlwZUZsYWdzRXJyb3IpCisgICAgICAgICAgICBy
ZXR1cm4gdHlwZUZsYWdzRXJyb3I7CisgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotc3RhdGljIGJvb2wgbG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMsIEpT
T2JqZWN0JiBydWxlT2JqZWN0LCBBY3Rpb24mIGFjdGlvbikKK3N0YXRpYyBzdGQ6OmVycm9yX2Nv
ZGUgbG9hZEFjdGlvbihFeGVjU3RhdGUmIGV4ZWMsIEpTT2JqZWN0JiBydWxlT2JqZWN0LCBBY3Rp
b24mIGFjdGlvbikKIHsKICAgICBKU1ZhbHVlIGFjdGlvbk9iamVjdCA9IHJ1bGVPYmplY3QuZ2V0
KCZleGVjLCBJZGVudGlmaWVyKCZleGVjLCAiYWN0aW9uIikpOwotICAgIGlmICghYWN0aW9uT2Jq
ZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCBhY3Rpb24gb2JqZWN0LiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlmICghYWN0aW9uT2JqZWN0IHx8IGV4ZWMuaGFk
RXhjZXB0aW9uKCkgfHwgIWFjdGlvbk9iamVjdC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4g
Q29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxpZEFjdGlvbjsKIAogICAgIEpTVmFsdWUg
dHlwZU9iamVjdCA9IGFjdGlvbk9iamVjdC5nZXQoJmV4ZWMsIElkZW50aWZpZXIoJmV4ZWMsICJ0
eXBlIikpOwotICAgIGlmICghdHlwZU9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF0
eXBlT2JqZWN0LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIHVy
bC1maWx0ZXIgb2JqZWN0LiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGlm
ICghdHlwZU9iamVjdCB8fCBleGVjLmhhZEV4Y2VwdGlvbigpIHx8ICF0eXBlT2JqZWN0LmlzU3Ry
aW5nKCkpCisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlk
QWN0aW9uVHlwZTsKIAogICAgIFN0cmluZyBhY3Rpb25UeXBlID0gdHlwZU9iamVjdC50b1dURlN0
cmluZygmZXhlYyk7CiAKQEAgLTEzOCw3NyArMTMyLDczIEBAIHN0YXRpYyBib29sIGxvYWRBY3Rp
b24oRXhlY1N0YXRlJiBleGVjLCAKICAgICAgICAgYWN0aW9uID0gQWN0aW9uVHlwZTo6QmxvY2tD
b29raWVzOwogICAgIGVsc2UgaWYgKGFjdGlvblR5cGUgPT0gImNzcy1kaXNwbGF5LW5vbmUiKSB7
CiAgICAgICAgIEpTVmFsdWUgc2VsZWN0b3IgPSBhY3Rpb25PYmplY3QuZ2V0KCZleGVjLCBJZGVu
dGlmaWVyKCZleGVjLCAic2VsZWN0b3IiKSk7Ci0gICAgICAgIGlmICghc2VsZWN0b3IgfHwgZXhl
Yy5oYWRFeGNlcHRpb24oKSB8fCAhc2VsZWN0b3IuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJjc3MtZGlzcGxheS1ub25lIGFjdGlvbiB0eXBlIHJlcXVpcmVzIGEgc2Vs
ZWN0b3IiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoIXNlbGVjdG9yIHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXNlbGVjdG9yLmlzU3RyaW5n
KCkpCisgICAgICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxp
ZENTU0Rpc3BsYXlOb25lQWN0aW9uVHlwZTsKKwogICAgICAgICBhY3Rpb24gPSBBY3Rpb24oQWN0
aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTZWxlY3Rvciwgc2VsZWN0b3IudG9XVEZTdHJpbmcoJmV4
ZWMpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBXVEZMb2dBbHdheXMoIlVucmVjb2duaXplZCBh
Y3Rpb246IFwiJXNcIiIsIGFjdGlvblR5cGUudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkQWN0aW9uVHlwZTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyB2b2lkIGxvYWRSdWxlKEV4ZWNTdGF0ZSYgZXhlYywg
SlNPYmplY3QmIHJ1bGVPYmplY3QsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVM
aXN0KQorc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkUnVsZShFeGVjU3RhdGUmIGV4ZWMsIEpT
T2JqZWN0JiBydWxlT2JqZWN0LCBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+JiBydWxlTGlz
dCkKIHsKICAgICBUcmlnZ2VyIHRyaWdnZXI7Ci0gICAgaWYgKCFsb2FkVHJpZ2dlcihleGVjLCBy
dWxlT2JqZWN0LCB0cmlnZ2VyKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gdHJpZ2dlckVy
cm9yID0gbG9hZFRyaWdnZXIoZXhlYywgcnVsZU9iamVjdCwgdHJpZ2dlcik7CisgICAgaWYgKHRy
aWdnZXJFcnJvcikKKyAgICAgICAgcmV0dXJuIHRyaWdnZXJFcnJvcjsKIAogICAgIEFjdGlvbiBh
Y3Rpb247Ci0gICAgaWYgKCFsb2FkQWN0aW9uKGV4ZWMsIHJ1bGVPYmplY3QsIGFjdGlvbikpCi0g
ICAgICAgIHJldHVybjsKKyAgICBhdXRvIGFjdGlvbkVycm9yID0gbG9hZEFjdGlvbihleGVjLCBy
dWxlT2JqZWN0LCBhY3Rpb24pOworICAgIGlmIChhY3Rpb25FcnJvcikKKyAgICAgICAgcmV0dXJu
IGFjdGlvbkVycm9yOwogCiAgICAgcnVsZUxpc3QuYXBwZW5kKENvbnRlbnRFeHRlbnNpb25SdWxl
KHRyaWdnZXIsIGFjdGlvbikpOworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBWZWN0b3I8
Q29udGVudEV4dGVuc2lvblJ1bGU+IGxvYWRFbmNvZGVkUnVsZXMoRXhlY1N0YXRlJiBleGVjLCBj
b25zdCBTdHJpbmcmIHJ1bGVzKQorc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBsb2FkRW5jb2RlZFJ1
bGVzKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgU3RyaW5nJiBydWxlcywgVmVjdG9yPENvbnRlbnRF
eHRlbnNpb25SdWxlPiYgcnVsZUxpc3QpCiB7CiAgICAgSlNWYWx1ZSBkZWNvZGVkUnVsZXMgPSBK
U09OUGFyc2UoJmV4ZWMsIHJ1bGVzKTsKIAotICAgIGlmIChleGVjLmhhZEV4Y2VwdGlvbigpIHx8
ICFkZWNvZGVkUnVsZXMpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQgdG8gcGFyc2Ug
dGhlIEpTT04gc3RyaW5nLiIpOwotICAgICAgICByZXR1cm4gVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25SdWxlPigpOwotICAgIH0KKyAgICBpZiAoZXhlYy5oYWRFeGNlcHRpb24oKSB8fCAhZGVjb2Rl
ZFJ1bGVzKQorICAgICAgICByZXR1cm4gQ29udGVudEV4dGVuc2lvbkVycm9yOjpKU09OSW52YWxp
ZDsKKworICAgIGlmICghZGVjb2RlZFJ1bGVzLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVyZU5vdEFuT2JqZWN0Owor
CisgICAgSlNPYmplY3QqIHRvcExldmVsT2JqZWN0ID0gZGVjb2RlZFJ1bGVzLnRvT2JqZWN0KCZl
eGVjKTsKKyAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05Ub3BMZXZlbFN0cnVjdHVy
ZU5vdEFuT2JqZWN0OworICAgIAorICAgIGlmICghaXNKU0FycmF5KHRvcExldmVsT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIENvbnRlbnRFeHRlbnNpb25FcnJvcjo6SlNPTlRvcExldmVsU3RydWN0
dXJlTm90QW5BcnJheTsKIAotICAgIGlmIChkZWNvZGVkUnVsZXMuaXNPYmplY3QoKSkgewotICAg
ICAgICBKU09iamVjdCogdG9wTGV2ZWxPYmplY3QgPSBkZWNvZGVkUnVsZXMudG9PYmplY3QoJmV4
ZWMpOwotICAgICAgICBpZiAoIXRvcExldmVsT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkp
IHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52YWxpZCBpbnB1dCwgdGhlIHRvcCBsZXZl
bCBzdHJ1Y3R1cmUgaXMgbm90IGFuIG9iamVjdC4iKTsKLSAgICAgICAgICAgIHJldHVybiBWZWN0
b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlz
SlNBcnJheSh0b3BMZXZlbE9iamVjdCkpIHsKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiSW52
YWxpZCBpbnB1dCwgdGhlIHRvcCBsZXZlbCBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpOwotICAg
ICAgICAgICAgcmV0dXJuIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4oKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVsZT4gcnVsZUxpc3Q7Ci0gICAg
ICAgIEpTQXJyYXkqIHRvcExldmVsQXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KHRvcExldmVsT2Jq
ZWN0KTsKLQotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0b3BMZXZlbEFycmF5LT5sZW5ndGgo
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdG9wTGV2ZWxBcnJheS0+Z2V0SW5kZXgoJmV4ZWMsIGkp
OwotICAgICAgICAgICAgaWYgKGV4ZWMuaGFkRXhjZXB0aW9uKCkgfHwgIXZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbnZhbGlkIG9iamVjdCBpbiB0aGUgYXJyYXkuIik7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEpTT2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMpOwotICAgICAgICAg
ICAgaWYgKCFydWxlT2JqZWN0IHx8IGV4ZWMuaGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIkludmFsaWQgcnVsZSIpOwotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFJ1bGUoZXhlYywgKnJ1bGVPYmpl
Y3QsIHJ1bGVMaXN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnVsZUxpc3Q7CisgICAg
SlNBcnJheSogdG9wTGV2ZWxBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4odG9wTGV2ZWxPYmplY3Qp
OworCisgICAgVmVjdG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBsb2NhbFJ1bGVMaXN0OworCisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdG9wTGV2ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSB0b3BMZXZlbEFycmF5LT5nZXRJbmRleCgmZXhlYywgaSk7CisgICAgICAgIGlmIChleGVjLmhh
ZEV4Y2VwdGlvbigpIHx8ICF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5z
aW9uRXJyb3I6OkpTT05JbnZhbGlkT2JqZWN0SW5Ub3BMZXZlbEFycmF5OworCisgICAgICAgIEpT
T2JqZWN0KiBydWxlT2JqZWN0ID0gdmFsdWUudG9PYmplY3QoJmV4ZWMpOworICAgICAgICBpZiAo
IXJ1bGVPYmplY3QgfHwgZXhlYy5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBD
b250ZW50RXh0ZW5zaW9uRXJyb3I6OkpTT05JbnZhbGlkUnVsZTsKKworICAgICAgICBhdXRvIGVy
cm9yID0gbG9hZFJ1bGUoZXhlYywgKnJ1bGVPYmplY3QsIGxvY2FsUnVsZUxpc3QpOworICAgICAg
ICBpZiAoZXJyb3IpCisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQotICAgIHJldHVy
biBWZWN0b3I8Q29udGVudEV4dGVuc2lvblJ1bGU+KCk7CisKKyAgICBydWxlTGlzdCA9IFdURjo6
bW92ZShsb2NhbFJ1bGVMaXN0KTsKKyAgICByZXR1cm4geyB9OwogfQogCi1WZWN0b3I8Q29udGVu
dEV4dGVuc2lvblJ1bGU+IHBhcnNlUnVsZUxpc3QoY29uc3QgU3RyaW5nJiBydWxlcykKK3N0ZDo6
ZXJyb3JfY29kZSBwYXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcnVsZXMsIFZlY3RvcjxDb250
ZW50RXh0ZW5zaW9uUnVsZT4mIHJ1bGVMaXN0KQogewogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgbG9hZEV4dGVuc2lvblN0YXJ0VGltZSA9
IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwpAQCAtMjE5LDE5ICsyMDksMjIgQEAgVmVj
dG9yPENvbnRlbnRFeHRlbnNpb25SdWxlPiBwYXJzZVJ1bGVMaQogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKCp2bSwgSlNHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSk7CiAKICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICBWZWN0b3I8Q29udGVudEV4dGVu
c2lvblJ1bGU+IHJ1bGVMaXN0ID0gbG9hZEVuY29kZWRSdWxlcygqZXhlYywgcnVsZXMpOworICAg
IGF1dG8gZXJyb3IgPSBsb2FkRW5jb2RlZFJ1bGVzKCpleGVjLCBydWxlcywgcnVsZUxpc3QpOwog
CiAgICAgdm0uY2xlYXIoKTsKIAorICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGVycm9y
OworCiAgICAgaWYgKHJ1bGVMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJF
bXB0eSBleHRlbnNpb24uIik7CisgICAgICAgIHJldHVybiBDb250ZW50RXh0ZW5zaW9uRXJyb3I6
OkpTT05Db250YWluc05vUnVsZXM7CiAKICNpZiBDT05URU5UX0VYVEVOU0lPTlNfUEVSRk9STUFO
Q0VfUkVQT1JUSU5HCiAgICAgZG91YmxlIGxvYWRFeHRlbnNpb25FbmRUaW1lID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0YoIlRpbWUgc3BlbnQgbG9hZGluZyBl
eHRlbnNpb24gJWZcbiIsIChsb2FkRXh0ZW5zaW9uRW5kVGltZSAtIGxvYWRFeHRlbnNpb25TdGFy
dFRpbWUpKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHJ1bGVMaXN0OworICAgIHJldHVybiB7IH07
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvblBh
cnNlci5oCShyZXZpc2lvbiAxODE5NjQpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5z
aW9ucy9Db250ZW50RXh0ZW5zaW9uUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAKKyNpbmNsdWRlIDxzeXN0
ZW1fZXJyb3I+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKQEAgLTM3LDcgKzM4LDcgQEAgbmFtZXNwYWNlIENvbnRlbnRFeHRlbnNpb25zIHsKIAog
Y2xhc3MgQ29udGVudEV4dGVuc2lvblJ1bGU7CiAKLVZlY3RvcjxDb250ZW50RXh0ZW5zaW9uUnVs
ZT4gcGFyc2VSdWxlTGlzdChjb25zdCBTdHJpbmcmIHJ1bGVzKTsKK3N0ZDo6ZXJyb3JfY29kZSBw
YXJzZVJ1bGVMaXN0KGNvbnN0IFN0cmluZyYgcnVsZXMsIFZlY3RvcjxDb250ZW50RXh0ZW5zaW9u
UnVsZT4mKTsKIAogfSAvLyBuYW1lc3BhY2UgQ29udGVudEV4dGVuc2lvbnMKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MTk3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE1LTAz
LTI1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvbnRlbnQgRXh0
ZW5zaW9uc10gQ29udmVydCBjb250ZW50IGV4dGVuc2lvbiBjb21waWxpbmcgdG8gcmV0dXJuIGVy
cm9yIGNvZGVzIGFuZCB3cml0ZSBpdHMgb3V0cHV0IHVzaW5nIGEgY2xpZW50CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNTkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxl
ZENvbnRlbnRFeHRlbnNpb24uY3BwOgorICAgICAgICAqIFNoYXJlZC9XZWJDb21waWxlZENvbnRl
bnRFeHRlbnNpb24uaDoKKyAgICAgICAgKFdlYktpdDo6TGVnYWN5Q29udGVudEV4dGVuc2lvbkNv
bXBpbGF0aW9uQ2xpZW50OjpMZWdhY3lDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGll
bnQ6OndyaXRlQnl0ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpMZWdhY3lDb250ZW50RXh0ZW5z
aW9uQ29tcGlsYXRpb25DbGllbnQ6OndyaXRlQWN0aW9ucyk6CisgICAgICAgIEFkZCBzdWJjbGFz
cyBvZiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgZm9yIHVzZSB3aXRoIHRoZSBu
b24tZmlsZSBiYWNrZWQgY29udGVudAorICAgICAgICBleHRlbnNpb25zLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRGaWx0ZXJSZWYuY3BwOgorICAgICAgICAoV0tV
c2VyQ29udGVudEZpbHRlckNyZWF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tVc2VyQ29udGVudEZpbHRlci5tbToKKyAgICAgICAgKC1bX1dLVXNlckNvbnRlbnRGaWx0ZXIg
aW5pdFdpdGhOYW1lOnNlcmlhbGl6ZWRSdWxlczpdKToKKyAgICAgICAgVXBkYXRlIHRvIHVzZSB0
aGUgbmV3IGludGVyZmFjZSBvZiBjb21waWxlUnVsZUxpc3QoKS4KKwogMjAxNS0wMy0yNSAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBT
d2l0Y2hpbmcgdGFicyB0byB3aW5kb3cgd2l0aCBpbnNwZWN0b3Igb3BlbiBwcm9oaWJpdHMgdHlw
aW5nIGludG8gY29uc29sZQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbi5jcHAJKHJldmlzaW9uIDE4MTk2NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMjQgQEAKIAogI2lmIEVOQUJMRShDT05URU5UX0VYVEVO
U0lPTlMpCiAKLSNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5oPgot
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorTGVnYWN5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9u
Q2xpZW50OjpMZWdhY3lDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQoV2ViQ29yZTo6
Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIGRhdGEpCisg
ICAgOiBtX2RhdGEoZGF0YSkKK3sKK30KKwordm9pZCBMZWdhY3lDb250ZW50RXh0ZW5zaW9uQ29t
cGlsYXRpb25DbGllbnQ6OndyaXRlQnl0ZWNvZGUoVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpERkFCeXRlY29kZT4mJiBieXRlY29kZSkKK3sKKyAgICBtX2RhdGEuYnl0ZWNvZGUg
PSBXVEY6Om1vdmUoYnl0ZWNvZGUpOworfQorCit2b2lkIExlZ2FjeUNvbnRlbnRFeHRlbnNpb25D
b21waWxhdGlvbkNsaWVudDo6d3JpdGVBY3Rpb25zKFZlY3RvcjxXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6U2VyaWFsaXplZEFjdGlvbkJ5dGU+JiYgYWN0aW9ucykKK3sKKyAgICBtX2RhdGEu
YWN0aW9ucyA9IFdURjo6bW92ZShhY3Rpb25zKTsKK30KKworCiBSZWY8V2ViQ29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uPiBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21Db21w
aWxlZENvbnRlbnRFeHRlbnNpb25EYXRhKGNvbnN0IFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBjb21waWxlckRhdGEpCiB7CiAgICAgUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29t
cGlsZXJEYXRhLmJ5dGVjb2RlLnNpemUoKSArIGNvbXBpbGVyRGF0YS5hY3Rpb25zLnNpemUoKSk7
CkBAIC00Miw3ICs1Niw3IEBAIFJlZjxXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IFdlYkNv
bXAKICAgICBkYXRhLmRhdGEgPSBXVEY6Om1vdmUoc2hhcmVkTWVtb3J5KTsKICAgICBkYXRhLmJ5
dGVjb2RlT2Zmc2V0ID0gMDsKICAgICBkYXRhLmJ5dGVjb2RlU2l6ZSA9IGNvbXBpbGVyRGF0YS5i
eXRlY29kZS5zaXplKCk7Ci0gICAgZGF0YS5hY3Rpb25zT2Zmc2V0ID0gY29tcGlsZXJEYXRhLmJ5
dGVjb2RlLnNpemUoKTsKKyAgICBkYXRhLmFjdGlvbnNPZmZzZXQgPSBjb21waWxlckRhdGEuICBi
eXRlY29kZS5zaXplKCk7CiAgICAgZGF0YS5hY3Rpb25zU2l6ZSA9IGNvbXBpbGVyRGF0YS5hY3Rp
b25zLnNpemUoKTsKIAogICAgIHJldHVybiBjcmVhdGUoV1RGOjptb3ZlKGRhdGEpKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5z
aW9uLmgJKHJldmlzaW9uIDE4MTk2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb21w
aWxlZENvbnRlbnRFeHRlbnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDI0IEBA
CiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKIAogI2luY2x1ZGUgIldlYkNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbkRhdGEuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNp
b25Db21waWxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
Lmg+CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBDb250ZW50RXh0ZW5zaW9ucyB7
Ci1zdHJ1Y3QgQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YTsKLX0KLX0KLQogbmFtZXNwYWNl
IFdlYktpdCB7CiAKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIGNvbnZl
cnRlZCB0byB1c2luZyB0aGUgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS4KK2NsYXNzIExlZ2Fj
eUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBmaW5hbCA6IHB1YmxpYyBXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBMZWdhY3lDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQoV2Vi
Q29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmKTsK
KworICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJ5dGVjb2RlKFZlY3RvcjxXZWJDb3JlOjpDb250ZW50
RXh0ZW5zaW9uczo6REZBQnl0ZWNvZGU+JiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3
cml0ZUFjdGlvbnMoVmVjdG9yPFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpTZXJpYWxpemVk
QWN0aW9uQnl0ZT4mJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIG1fZGF0YTsKK307CisK
KwogY2xhc3MgV2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewogcHVibGlj
OgogICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5b25lIGlzIGNvbnZlcnRlZCB0
byB1c2luZyB0aGUgVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50RmlsdGVyUmVmLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudEZpbHRlclJl
Zi5jcHAJKHJldmlzaW9uIDE4MTk2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1VzZXJDb250ZW50RmlsdGVyUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkNvbXBpbGVy
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZW50RXh0ZW5zaW9uRXJyb3IuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIApAQCAtNDEsOCArNDIsMTQgQEAgV0tUeXBlSUQgV0tVc2VyQ29u
dGVudEZpbHRlckdldFR5cGVJRCgpCiBXS1VzZXJDb250ZW50RmlsdGVyUmVmIFdLVXNlckNvbnRl
bnRGaWx0ZXJDcmVhdGUoV0tTdHJpbmdSZWYgbmFtZVJlZiwgV0tTdHJpbmdSZWYgc2VyaWFsaXpl
ZFJ1bGVzUmVmKQogewogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi0gICAgYXV0byBj
b21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6
OmNvbXBpbGVSdWxlTGlzdCh0b1dURlN0cmluZyhzZXJpYWxpemVkUnVsZXNSZWYpKTsKLSAgICBh
dXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50
RXh0ZW5zaW9uOjpjcmVhdGVGcm9tQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YShjb21waWxl
ZENvbnRlbnRFeHRlbnNpb25EYXRhKTsKKyAgICBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBkYXRhOworICAgIExlZ2FjeUNvbnRlbnRFeHRl
bnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZGF0YSk7CisKKyAgICBhdXRvIGNvbXBpbGVy
RXJyb3IgPSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KHRvV1RG
U3RyaW5nKHNlcmlhbGl6ZWRSdWxlc1JlZiksIGNsaWVudCk7CisgICAgaWYgKGNvbXBpbGVyRXJy
b3IpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb21waWxlZENvbnRlbnRF
eHRlbnNpb24gPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJv
bUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoZGF0YSk7CiAKICAgICByZXR1cm4gdG9BUEko
JkFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb246OmNyZWF0ZSh0b1dURlN0cmluZyhuYW1lUmVmKSwg
V1RGOjptb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpLmxlYWtSZWYoKSk7CiAjZWxzZQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tVc2VyQ29udGVudEZp
bHRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1VzZXJDb250ZW50RmlsdGVyLm1tCShyZXZpc2lvbiAxODE5NjQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1VzZXJDb250ZW50RmlsdGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJXZWJDb21waWxlZENvbnRlbnRF
eHRlbnNpb24uaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25Db21waWxlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGVudEV4dGVuc2lvbkVycm9yLmg+CisjaW5jbHVkZSA8
c3RyaW5nPgogCiBAaW1wbGVtZW50YXRpb24gX1dLVXNlckNvbnRlbnRGaWx0ZXIKIApAQCAtMzgs
OSArNDAsMTQgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKgogICAg
IGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
YXV0byBjb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhID0gV2ViQ29yZTo6Q29udGVudEV4dGVu
c2lvbnM6OmNvbXBpbGVSdWxlTGlzdChTdHJpbmcoc2VyaWFsaXplZFJ1bGVzKSk7Ci0gICAgYXV0
byBjb21waWxlZENvbnRlbnRFeHRlbnNpb24gPSBXZWJLaXQ6OldlYkNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlRnJvbUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEoY29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YSk7CisgICAgV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkNv
bXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEgZGF0YTsKKyAgICBXZWJLaXQ6OkxlZ2FjeUNvbnRl
bnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGllbnQoZGF0YSk7CiAKKyAgICBhdXRvIGNv
bXBpbGVyRXJyb3IgPSBXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0
KFN0cmluZyhzZXJpYWxpemVkUnVsZXMpLCBjbGllbnQpOworICAgIGlmIChjb21waWxlckVycm9y
KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNHZW5lcmljRXhjZXB0aW9uIGZvcm1hdDpA
IkZhaWxlZCB0byBjb21waWxlIHJ1bGVzIHdpdGggZXJyb3I6ICVzIiwgY29tcGlsZXJFcnJvci5t
ZXNzYWdlKCkuY19zdHIoKV07CisKKyAgICBhdXRvIGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbiA9
IFdlYktpdDo6V2ViQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tQ29tcGlsZWRD
b250ZW50RXh0ZW5zaW9uRGF0YShkYXRhKTsKICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5X
cmFwcGVyPEFQSTo6VXNlckNvbnRlbnRFeHRlbnNpb24+KHNlbGYsIFN0cmluZyhuYW1lKSwgV1RG
Ojptb3ZlKGNvbXBpbGVkQ29udGVudEV4dGVuc2lvbikpOwogCiAgICAgcmV0dXJuIHNlbGY7Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODE5NzMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNS0wMy0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIENvbnZlcnQgY29udGVudCBleHRlbnNpb24gY29tcGls
aW5nIHRvIHJldHVybiBlcnJvciBjb2RlcyBhbmQgd3JpdGUgaXRzIG91dHB1dCB1c2luZyBhIGNs
aWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQz
MDU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9tYWMvTWFpbk1lbnUueGliOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcik6Cisg
ICAgICAgIFVwZGF0ZSBmb3IgbmV3IGludGVyZmFjZSBvZiBjb21waWxlUnVsZUxpc3QoKS4KKwog
MjAxNS0wMy0yNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIFtDb250ZW50IEV4dGVuc2lvbnNdIEFkZCBtdWx0aS1ERkEgY29tcGlsaW5nIGFu
ZCBpbnRlcnByZXRpbmcuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9tYWMvTWFpbk1lbnUueGli
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL21hYy9NYWluTWVudS54aWIJKHJldmlz
aW9uIDE4MTk2NCkKKysrIFRvb2xzL01pbmlCcm93c2VyL21hYy9NYWluTWVudS54aWIJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV
VEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTxkb2N1bWVudCB0eXBlPSJjb20uYXBwbGUuSW50ZXJm
YWNlQnVpbGRlcjMuQ29jb2EuWElCIiB2ZXJzaW9uPSIzLjAiIHRvb2xzVmVyc2lvbj0iNzUwNC4y
IiBzeXN0ZW1WZXJzaW9uPSIxNEQ4OSIgdGFyZ2V0UnVudGltZT0iTWFjT1NYLkNvY29hIiBwcm9w
ZXJ0eUFjY2Vzc0NvbnRyb2w9Im5vbmUiPgorPGRvY3VtZW50IHR5cGU9ImNvbS5hcHBsZS5JbnRl
cmZhY2VCdWlsZGVyMy5Db2NvYS5YSUIiIHZlcnNpb249IjMuMCIgdG9vbHNWZXJzaW9uPSI4MDUy
LjQiIHN5c3RlbVZlcnNpb249IjE1QTEzMWEiIHRhcmdldFJ1bnRpbWU9Ik1hY09TWC5Db2NvYSIg
cHJvcGVydHlBY2Nlc3NDb250cm9sPSJub25lIj4KICAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAg
ICA8cGx1Z0luIGlkZW50aWZpZXI9ImNvbS5hcHBsZS5JbnRlcmZhY2VCdWlsZGVyLkNvY29hUGx1
Z2luIiB2ZXJzaW9uPSI3NTA0LjIiLz4KKyAgICAgICAgPGRlcGxveW1lbnQgaWRlbnRpZmllcj0i
bWFjb3N4Ii8+CisgICAgICAgIDxwbHVnSW4gaWRlbnRpZmllcj0iY29tLmFwcGxlLkludGVyZmFj
ZUJ1aWxkZXIuQ29jb2FQbHVnaW4iIHZlcnNpb249IjgwNTIuNCIvPgogICAgIDwvZGVwZW5kZW5j
aWVzPgogICAgIDxvYmplY3RzPgogICAgICAgICA8Y3VzdG9tT2JqZWN0IGlkPSItMiIgdXNlckxh
YmVsPSJGaWxlJ3MgT3duZXIiIGN1c3RvbUNsYXNzPSJOU0FwcGxpY2F0aW9uIj4KSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRl
bnNpb25zLmNwcAkocmV2aXNpb24gMTgxOTY0KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCAr
NzQsNDAgQEAgcHVibGljOgogICAgIH0KIH07CiAKK2NsYXNzIEluTWVtb3J5Q29udGVudEV4dGVu
c2lvbkNvbXBpbGF0aW9uQ2xpZW50IGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpDb250ZW50RXh0ZW5zaW9uQ29tcGlsYXRpb25DbGllbnQgeworcHVibGljOgorICAg
IEluTWVtb3J5Q29udGVudEV4dGVuc2lvbkNvbXBpbGF0aW9uQ2xpZW50KFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhJiBkYXRhKQorICAgICAg
ICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGVC
eXRlY29kZShWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OkRGQUJ5dGVjb2RlPiYm
IGJ5dGVjb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9kYXRhLmJ5dGVjb2RlID0gV1RG
Ojptb3ZlKGJ5dGVjb2RlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHdyaXRlQWN0
aW9ucyhWZWN0b3I8V2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlNlcmlhbGl6ZWRBY3Rpb25C
eXRlPiYmIGFjdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2RhdGEuYWN0aW9ucyA9
IFdURjo6bW92ZShhY3Rpb25zKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbkRhdGEmIG1fZGF0YTsKK307
CisKIGNsYXNzIEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uIDogcHVibGljIENvbnRl
bnRFeHRlbnNpb25zOjpDb21waWxlZENvbnRlbnRFeHRlbnNpb24gewogcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24+IGNyZWF0ZUZyb21G
aWx0ZXIoY29uc3QgU3RyaW5nJiBmaWx0ZXIpCisgICAgeworICAgICAgICBXZWJDb3JlOjpDb250
ZW50RXh0ZW5zaW9uczo6Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBleHRlbnNpb25EYXRh
OworICAgICAgICBJbk1lbW9yeUNvbnRlbnRFeHRlbnNpb25Db21waWxhdGlvbkNsaWVudCBjbGll
bnQoZXh0ZW5zaW9uRGF0YSk7CisgICAgICAgIGF1dG8gY29tcGlsZXJFcnJvciA9IENvbnRlbnRF
eHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoZmlsdGVyLCBjbGllbnQpOworICAgICAgICBpZiAo
Y29tcGlsZXJFcnJvcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHJl
dHVybiBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShl
eHRlbnNpb25EYXRhKSk7CisgICAgfQorCiAgICAgc3RhdGljIFJlZlB0cjxJbk1lbW9yeUNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbj4gY3JlYXRlKENvbnRlbnRFeHRlbnNpb25zOjpDb21waWxlZENv
bnRlbnRFeHRlbnNpb25EYXRhJiYgZGF0YSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb24oV1RGOjptb3ZlKGRhdGEpKSk7
CkBAIC0xMjYsOCArMTU4LDcgQEAgY29uc3QgY2hhciogYmFzaWNGaWx0ZXIgPSAiW3tcImFjdGlv
blwiOgogCiBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEJhc2ljKQogewotICAgIGF1dG8g
ZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoYmFzaWNG
aWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOworICAgIGF1dG8gZXh0ZW5z
aW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIo
YmFzaWNGaWx0ZXIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25z
QmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZp
bHRlciIsIGV4dGVuc2lvbik7CkBAIC0xMzksOCArMTcwLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRl
bnNpb25UZXN0LCBSYW5nZUJhc2ljKQogewogICAgIGNvbnN0IGNoYXIqIHJhbmdlQmFzaWNGaWx0
ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIndbMC05XWNcIiwgXCJ1cmwtZmlsdGVyLWlzLWNhc2Utc2Vuc2l0aXZlXCI6
dHJ1ZX19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrLWNvb2tpZXNc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiW0EtSF1bYS16XWNrb1wiLCBcInVybC1m
aWx0ZXItaXMtY2FzZS1zZW5zaXRpdmVcIjp0cnVlfX1dIjsKLSAgICBhdXRvIGV4dGVuc2lvbkRh
dGEgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KHJhbmdlQmFzaWNGaWx0ZXIp
OwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246
OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOworICAgIGF1dG8gZXh0ZW5zaW9uID0g
SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIocmFuZ2VC
YXNpY0ZpbHRlcik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJu
TmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKQEAgLTE2Niw4ICsxOTYsNyBAQCBURVNU
X0YoQ29udGVudEV4dGVuc2lvblRlc3QsIFJhbmdlRXhjbHVzCiB7CiAgICAgLy8gVHJhbnNpdGlv
biBvZiB0aGUgdHlwZSAoW15YXVgpIGVmZmljdGl2ZWx5IHRyYW5zaXRpb24gb24gZXZlcnkgaW5w
dXQuCiAgICAgY29uc3QgY2hhciogcmFuZ2VFeGNsdXNpb25HZW5lcmF0aW5nVW5pdmVyc2FsVHJh
bnNpdGlvbkZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmln
Z2VyXCI6e1widXJsLWZpbHRlclwiOlwiW15hXSthZm9vYmFyXCJ9fV0iOwotICAgIGF1dG8gZXh0
ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QocmFuZ2VFeGNs
dXNpb25HZW5lcmF0aW5nVW5pdmVyc2FsVHJhbnNpdGlvbkZpbHRlcik7Ci0gICAgYXV0byBleHRl
bnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92
ZShleHRlbnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihyYW5nZUV4Y2x1c2lvbkdlbmVyYXRp
bmdVbml2ZXJzYWxUcmFuc2l0aW9uRmlsdGVyKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25zOjpD
b250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRF
eHRlbnNpb24oIlBhdHRlcm5OZXN0ZWRHcm91cHNGaWx0ZXIiLCBleHRlbnNpb24pOwpAQCAtMTg5
LDggKzIxOCw3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUmFuZ2VFeGNsdXMKIFRF
U1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgUGF0dGVyblN0YXJ0aW5nV2l0aEdyb3VwKQogewog
ICAgIGNvbnN0IGNoYXIqIHBhdHRlcm5zU3RhcnRpbmdXaXRoR3JvdXBGaWx0ZXIgPSAiW3tcImFj
dGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpc
Il4oaHR0cDovL3doYXR3Z1xcXFwub3JnLyk/d2Via2l0XDEzNFwxMzQub3JnXCJ9fV0iOwotICAg
IGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3Qo
cGF0dGVybnNTdGFydGluZ1dpdGhHcm91cEZpbHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24gPSBJ
bk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNp
b25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4
dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihwYXR0ZXJuc1N0YXJ0aW5nV2l0aEdyb3VwRmlsdGVy
KTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFj
a2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlBhdHRlcm5OZXN0ZWRHcm91
cHNGaWx0ZXIiLCBleHRlbnNpb24pOwpAQCAtMjA2LDggKzIzNCw3IEBAIFRFU1RfRihDb250ZW50
RXh0ZW5zaW9uVGVzdCwgUGF0dGVybk5lc3QKIHsKICAgICBjb25zdCBjaGFyKiBwYXR0ZXJuTmVz
dGVkR3JvdXBzRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRy
aWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJeaHR0cDovL3dlYmtpdFxcXFwub3JnLyhmb28oYmFy
KSopK1wifX1dIjsKIAotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25z
Ojpjb21waWxlUnVsZUxpc3QocGF0dGVybk5lc3RlZEdyb3Vwc0ZpbHRlcik7Ci0gICAgYXV0byBl
eHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6
bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBp
bGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihwYXR0ZXJuTmVzdGVkR3JvdXBz
RmlsdGVyKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIlBhdHRlcm5OZXN0
ZWRHcm91cHNGaWx0ZXIiLCBleHRlbnNpb24pOwpAQCAtMjI5LDggKzI1Niw3IEBAIFRFU1RfRihD
b250ZW50RXh0ZW5zaW9uVGVzdCwgTWF0Y2hQYXN0RW4KIHsKICAgICBjb25zdCBjaGFyKiBtYXRj
aFBhc3RFbmRPZlN0cmluZ0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tc
In0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiLitcIn19XSI7CiAKLSAgICBhdXRvIGV4
dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KG1hdGNoUGFz
dEVuZE9mU3RyaW5nRmlsdGVyKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKKyAg
ICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVh
dGVGcm9tRmlsdGVyKG1hdGNoUGFzdEVuZE9mU3RyaW5nRmlsdGVyKTsKIAogICAgIENvbnRlbnRF
eHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5k
LmFkZENvbnRlbnRFeHRlbnNpb24oIk1hdGNoUGFzdEVuZE9mU3RyaW5nIiwgZXh0ZW5zaW9uKTsK
QEAgLTI0OSw4ICsyNzUsNyBAQCBjb25zdCBjaGFyKiBzdGFydE9mTGluZUFzc2VydGlvbkZpbHRl
ciA9CiAKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgU3RhcnRPZkxpbmVBc3NlcnRpb24p
CiB7Ci0gICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVS
dWxlTGlzdChzdGFydE9mTGluZUFzc2VydGlvbkZpbHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24g
PSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRl
bnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihzdGFydE9mTGluZUFzc2VydGlvbkZpbHRlcik7
CiAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tl
bmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJTdGFydE9mTGluZUFzc2VydGlv
biIsIGV4dGVuc2lvbik7CkBAIC0yNjgsOCArMjkzLDcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNp
b25UZXN0LCBTdGFydE9mTGluZQogVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBFbmRPZkxp
bmVBc3NlcnRpb24pCiB7CiAgICAgY29uc3QgY2hhciogZW5kT2ZMaW5lQXNzZXJ0aW9uRmlsdGVy
ID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwt
ZmlsdGVyXCI6XCJmb29iYXIkXCJ9fV0iOwotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRl
bnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoZW5kT2ZMaW5lQXNzZXJ0aW9uRmlsdGVyKTsK
LSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpj
cmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEpKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IElu
TWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKGVuZE9mTGlu
ZUFzc2VydGlvbkZpbHRlcik7CiAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVu
c2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJF
bmRPZkxpbmVBc3NlcnRpb24iLCBleHRlbnNpb24pOwpAQCAtMjg1LDggKzMwOSw3IEBAIFRFU1Rf
RihDb250ZW50RXh0ZW5zaW9uVGVzdCwgRW5kT2ZMaW5lQXMKIFRFU1RfRihDb250ZW50RXh0ZW5z
aW9uVGVzdCwgRW5kT2ZMaW5lQXNzZXJ0aW9uV2l0aEludmVydGVkQ2hhcmFjdGVyU2V0KQogewog
ICAgIGNvbnN0IGNoYXIqIGVuZE9mTGluZUFzc2VydGlvbldpdGhJbnZlcnRlZENoYXJhY3RlclNl
dEZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6
e1widXJsLWZpbHRlclwiOlwiW155XSRcIn19XSI7Ci0gICAgYXV0byBleHRlbnNpb25EYXRhID0g
Q29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChlbmRPZkxpbmVBc3NlcnRpb25XaXRo
SW52ZXJ0ZWRDaGFyYWN0ZXJTZXRGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1v
cnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0
YSkpOworICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNp
b246OmNyZWF0ZUZyb21GaWx0ZXIoZW5kT2ZMaW5lQXNzZXJ0aW9uV2l0aEludmVydGVkQ2hhcmFj
dGVyU2V0RmlsdGVyKTsKIAogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9u
c0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENvbnRlbnRFeHRlbnNpb24oIkVuZE9m
TGluZUFzc2VydGlvbiIsIGV4dGVuc2lvbik7CkBAIC0zMDgsOCArMzMxLDcgQEAgVEVTVF9GKENv
bnRlbnRFeHRlbnNpb25UZXN0LCBQcmVmaXhJbmZpeAogICAgICAgICAie1wiYWN0aW9uXCI6e1wi
dHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXnByZWZpeFwi
fX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwic3VmZml4JFwifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6
e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiXmh0dHA6
Ly9leGFjdFxcXFwub3JnLyRcIn19XSI7Ci0gICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVu
dEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxlTGlzdChwcmVmaXhJbmZpeFN1ZmZpeEV4YWN0TWF0Y2hG
aWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRl
bnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5zaW9uRGF0YSkpOworICAgIGF1dG8gZXh0ZW5z
aW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIo
cHJlZml4SW5maXhTdWZmaXhFeGFjdE1hdGNoRmlsdGVyKTsKIAogICAgIENvbnRlbnRFeHRlbnNp
b25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgYmFja2VuZDsKICAgICBiYWNrZW5kLmFkZENv
bnRlbnRFeHRlbnNpb24oIlByZWZpeEluZml4U3VmZml4RXhhY3RNYXRjaCIsIGV4dGVuc2lvbik7
CkBAIC0zMzQsOCArMzU2LDcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBEdXBsaWNh
dGVkTQogewogICAgIGNvbnN0IGNoYXIqIGR1cGxpY2F0ZWRNYXRjaEFsbFRlcm1zSW5WYXJpb3Vz
Rm9ybWF0RmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdn
ZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKi4qKC4pKiguKikoLispKiguPykqaW5maXhcIn19LCIK
ICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntc
InVybC1maWx0ZXJcIjpcInByZSguPykrKC4rKT9wb3N0XCJ9fV0iOwotICAgIGF1dG8gZXh0ZW5z
aW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QoZHVwbGljYXRlZE1h
dGNoQWxsVGVybXNJblZhcmlvdXNGb3JtYXRGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0g
SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5z
aW9uRGF0YSkpOworICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIoZHVwbGljYXRlZE1hdGNoQWxsVGVybXNJblZhcmlv
dXNGb3JtYXRGaWx0ZXIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiRHVw
bGljYXRlZE1hdGNoQWxsVGVybXNJblZhcmlvdXNGb3JtYXQiLCBleHRlbnNpb24pOwpAQCAtMzY3
LDggKzM4OCw3IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgVGVybXNLbm93blQKICAg
ICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVy
bC1maWx0ZXJcIjpcIl5wcmU4KC4/KSpwb3N0OCRcIn19LCIKICAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmU5
KC4rKT9wb3N0OSRcIn19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIl5wcmUwKC4/KStwb3N0MCRcIn19XSI7
Ci0gICAgYXV0byBleHRlbnNpb25EYXRhID0gQ29udGVudEV4dGVuc2lvbnM6OmNvbXBpbGVSdWxl
TGlzdCh0ZXJtc0tub3duVG9NYXRjaEFueXRoaW5nRmlsdGVyKTsKLSAgICBhdXRvIGV4dGVuc2lv
biA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4
dGVuc2lvbkRhdGEpKTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250
ZW50RXh0ZW5zaW9uOjpjcmVhdGVGcm9tRmlsdGVyKHRlcm1zS25vd25Ub01hdGNoQW55dGhpbmdG
aWx0ZXIpOwogCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiVGVybXNLbm93blRv
TWF0Y2hBbnl0aGluZyIsIGV4dGVuc2lvbik7CkBAIC00MTEsOCArNDMxLDcgQEAgVEVTVF9GKENv
bnRlbnRFeHRlbnNpb25UZXN0LCBUcmFpbGluZ0RvdAogewogICAgIGNvbnN0IGNoYXIqIHRyYWls
aW5nRG90U3RhckZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0
cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiZm9vLiokXCJ9fSwiCiAgICAgICAgICJ7XCJhY3Rp
b25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJi
YXIoLiopJFwifX1dIjsKLSAgICBhdXRvIGV4dGVuc2lvbkRhdGEgPSBDb250ZW50RXh0ZW5zaW9u
czo6Y29tcGlsZVJ1bGVMaXN0KHRyYWlsaW5nRG90U3RhckZpbHRlcik7Ci0gICAgYXV0byBleHRl
bnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92
ZShleHRlbnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVk
Q29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcih0cmFpbGluZ0RvdFN0YXJGaWx0ZXIp
OwogCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNr
ZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiVHJhaWxpbmdEb3RTdGFyIiwg
ZXh0ZW5zaW9uKTsKQEAgLTQzNSw4ICs0NTQsNyBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRl
c3QsIFRyYWlsaW5nVGVyCiAgICAgY29uc3QgY2hhciogdHJhaWxpbmdUZXJtc0NhcnJ5aW5nTm9E
YXRhRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJibG9ja1wifSxcInRyaWdnZXJc
Ijp7XCJ1cmwtZmlsdGVyXCI6XCJmb29iP2E/cj9cIn19LCIKICAgICAgICAgIntcImFjdGlvblwi
OntcInR5cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImJhem8o
b2spP2E/JFwifX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0s
XCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiY2F0cyokXCJ9fV0iOwotICAgIGF1dG8gZXh0
ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QodHJhaWxpbmdU
ZXJtc0NhcnJ5aW5nTm9EYXRhRmlsdGVyKTsKLSAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uOjpjcmVhdGUoV1RGOjptb3ZlKGV4dGVuc2lvbkRhdGEp
KTsKKyAgICBhdXRvIGV4dGVuc2lvbiA9IEluTWVtb3J5Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9u
OjpjcmVhdGVGcm9tRmlsdGVyKHRyYWlsaW5nVGVybXNDYXJyeWluZ05vRGF0YUZpbHRlcik7CiAK
ICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7
CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJUcmFpbGluZ1Rlcm1zQ2FycnlpbmdO
b0RhdGEiLCBleHRlbnNpb24pOwpAQCAtNDc4LDggKzQ5Niw3IEBAIFRFU1RfRihDb250ZW50RXh0
ZW5zaW9uVGVzdCwgTG9hZFR5cGUpCiAgICAgICAgICJ7XCJhY3Rpb25cIjp7XCJ0eXBlXCI6XCJi
bG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCJ3aGF0d2cub3JnXCIsXCJsb2Fk
LXR5cGVcIjpbXCJmaXJzdC1wYXJ0eVwiXX19LCIKICAgICAgICAgIntcImFjdGlvblwiOntcInR5
cGVcIjpcImJsb2NrXCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcImFsd2F5c2Jsb2Nr
LnBkZlwifX1dIjsKIAotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25z
Ojpjb21waWxlUnVsZUxpc3QobG9hZFR5cGVGaWx0ZXIpOwotICAgIGF1dG8gZXh0ZW5zaW9uID0g
SW5NZW1vcnlDb21waWxlZENvbnRlbnRFeHRlbnNpb246OmNyZWF0ZShXVEY6Om1vdmUoZXh0ZW5z
aW9uRGF0YSkpOworICAgIGF1dG8gZXh0ZW5zaW9uID0gSW5NZW1vcnlDb21waWxlZENvbnRlbnRF
eHRlbnNpb246OmNyZWF0ZUZyb21GaWx0ZXIobG9hZFR5cGVGaWx0ZXIpOwogICAgICAgICAKICAg
ICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAg
ICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJMb2FkVHlwZUZpbHRlciIsIGV4dGVuc2lv
bik7CkBAIC00OTksOCArNTE2LDcgQEAgVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBSZXNv
dXJjZVR5cAogICAgIGNvbnN0IGNoYXIqIHJlc291cmNlVHlwZUZpbHRlciA9ICJbe1wiYWN0aW9u
XCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxv
Y2tfYWxsX3R5cGVzLm9yZ1wiLFwicmVzb3VyY2UtdHlwZVwiOltcImRvY3VtZW50XCIsXCJpbWFn
ZVwiLFwic3R5bGUtc2hlZXRcIixcInNjcmlwdFwiLFwiZm9udFwiLFwicmF3XCIsXCJzdmctZG9j
dW1lbnRcIixcIm1lZGlhXCJdfX0sIgogICAgICAgICAie1wiYWN0aW9uXCI6e1widHlwZVwiOlwi
YmxvY2tcIn0sXCJ0cmlnZ2VyXCI6e1widXJsLWZpbHRlclwiOlwiYmxvY2tfb25seV9pbWFnZXNc
IixcInJlc291cmNlLXR5cGVcIjpbXCJpbWFnZVwiXX19XSI7CiAKLSAgICBhdXRvIGV4dGVuc2lv
bkRhdGEgPSBDb250ZW50RXh0ZW5zaW9uczo6Y29tcGlsZVJ1bGVMaXN0KHJlc291cmNlVHlwZUZp
bHRlcik7Ci0gICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVu
c2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNp
b24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihy
ZXNvdXJjZVR5cGVGaWx0ZXIpOwogICAgICAgICAKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CiAgICAgYmFja2VuZC5hZGRDb250ZW50RXh0
ZW5zaW9uKCJSZXNvdXJjZVR5cGVGaWx0ZXIiLCBleHRlbnNpb24pOwpAQCAtNTQ1LDggKzU2MSw3
IEBAIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgTXVsdGlERkEpCiAgICAgfQogICAgIHJ1
bGVMaXN0LmFwcGVuZCgnXScpOwogICAgIAotICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRl
bnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QocnVsZUxpc3QudG9TdHJpbmcoKSk7Ci0gICAg
YXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRl
KFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9y
eUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlRnJvbUZpbHRlcihydWxlTGlzdC50b1N0
cmluZygpKTsKICAgICAgICAgCiAgICAgQ29udGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNp
b25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJhY2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigiUmVz
b3VyY2VUeXBlRmlsdGVyIiwgZXh0ZW5zaW9uKTsK
</data>
<flag name="review"
          id="274236"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>