<?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>38271</bug_id>
          
          <creation_ts>2010-04-28 10:46:39 -0700</creation_ts>
          <short_desc>Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space can be inspected before attempting to authenticate against it</short_desc>
          <delta_ts>2010-04-28 16:43:44 -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>Mac</rep_platform>
          <op_sys>OS X 10.6</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="Mike Thole">mthole</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218465</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Thole">mthole</who>
    <bug_when>2010-04-28 10:46:39 -0700</bug_when>
    <thetext>Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space can be inspected before attempting to authenticate against it.  Clients can use this, for example, to send an SSL client certificate when it is requested but not required.

Expose this functionality in WebKit via a new WebResourceLoadDelegate private method:
- (BOOL)webView:(WebView *)sender resource:(id)identifier canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace forDataSource:(WebDataSource *)dataSource;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218467</commentid>
    <comment_count>1</comment_count>
    <who name="Mike Thole">mthole</who>
    <bug_when>2010-04-28 10:48:06 -0700</bug_when>
    <thetext>Part of &lt;rdar://problem/7475092&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218550</commentid>
    <comment_count>2</comment_count>
      <attachid>54608</attachid>
    <who name="Mike Thole">mthole</who>
    <bug_when>2010-04-28 12:17:17 -0700</bug_when>
    <thetext>Created attachment 54608
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218555</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 12:19:10 -0700</bug_when>
    <thetext>Attachment 54608 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/network/ProtectionSpace.h:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/network/ProtectionSpace.h:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 21 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>218562</commentid>
    <comment_count>4</comment_count>
      <attachid>54610</attachid>
    <who name="Mike Thole">mthole</who>
    <bug_when>2010-04-28 12:30:48 -0700</bug_when>
    <thetext>Created attachment 54610
Fixed enum indentation for style-bot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218604</commentid>
    <comment_count>5</comment_count>
      <attachid>54610</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-04-28 13:39:46 -0700</bug_when>
    <thetext>Comment on attachment 54610
Fixed enum indentation for style-bot

&gt; Index: JavaScriptCore/wtf/Platform.h
&gt; ===================================================================
&gt; --- JavaScriptCore/wtf/Platform.h	(revision 58413)
&gt; +++ JavaScriptCore/wtf/Platform.h	(working copy)
&gt; @@ -1079,6 +1079,10 @@ on MinGW. See https://bugs.webkit.org/sh
&gt;  #endif
&gt;  #endif
&gt;  
&gt; +#if ((PLATFORM(MAC) || PLATFORM(IPHONE)) &amp;&amp; !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD))
&gt; +#define WTF_USE_PROTECTION_SPACE_AUTH_CALLBACK 1
&gt; +#endif

This should be:

#if (PLATFORM(MAC) &amp;&amp; !defined(BUILDING_ON_TIGER) &amp;&amp; !defined(BUILDING_ON_LEOPARD)) || PLATFORM(IPHONE)

&gt; Index: WebCore/loader/EmptyClients.h
&gt; ===================================================================
&gt; --- WebCore/loader/EmptyClients.h	(revision 58413)
&gt; +++ WebCore/loader/EmptyClients.h	(working copy)
&gt; @@ -194,6 +194,7 @@ public:
&gt;      virtual void dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest&amp;, const ResourceResponse&amp;) { }
&gt;      virtual void dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&amp;) { }
&gt;      virtual void dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&amp;) { }
&gt; +    virtual bool canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace&amp;) { return false; }

This should have #if USE(PROTECTION_SPACE_AUTH_CALLBACK)/#endif macro guards.

&gt; Index: WebCore/platform/network/ResourceHandle.h
&gt; ===================================================================
&gt; --- WebCore/platform/network/ResourceHandle.h	(revision 58413)
&gt; +++ WebCore/platform/network/ResourceHandle.h	(working copy)
&gt; @@ -131,6 +132,7 @@ public:
&gt;  
&gt;  #if PLATFORM(MAC)
&gt;      void didCancelAuthenticationChallenge(const AuthenticationChallenge&amp;);
&gt; +    bool canAuthenticateAgainstProtectionSpace(const ProtectionSpace&amp;);
&gt;      NSURLConnection *connection() const;
&gt;      WebCoreResourceHandleAsDelegate *delegate();
&gt;      void releaseDelegate();

This should have #if USE(PROTECTION_SPACE_AUTH_CALLBACK)/#endif macro guards.

&gt; Index: WebCore/platform/network/ResourceHandleClient.h
&gt; ===================================================================
&gt; --- WebCore/platform/network/ResourceHandleClient.h	(revision 58413)
&gt; +++ WebCore/platform/network/ResourceHandleClient.h	(working copy)
&gt; @@ -78,6 +79,7 @@ namespace WebCore {
&gt;          virtual bool shouldUseCredentialStorage(ResourceHandle*) { return false; }
&gt;          virtual void didReceiveAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&amp;) { }
&gt;          virtual void didCancelAuthenticationChallenge(ResourceHandle*, const AuthenticationChallenge&amp;) { }
&gt; +        virtual bool canAuthenticateAgainstProtectionSpace(ResourceHandle*, const ProtectionSpace&amp;) { return false; }
&gt;          virtual void receivedCancellation(ResourceHandle*, const AuthenticationChallenge&amp;) { }

This should have #if USE(PROTECTION_SPACE_AUTH_CALLBACK)/#endif macro guards.

&gt; Index: WebCore/platform/network/mac/AuthenticationMac.mm
&gt; ===================================================================
&gt; --- WebCore/platform/network/mac/AuthenticationMac.mm	(revision 58413)
&gt; +++ WebCore/platform/network/mac/AuthenticationMac.mm	(working copy)
&gt; @@ -194,6 +194,14 @@ NSURLProtectionSpace *mac(const Protecti
&gt;          case ProtectionSpaceAuthenticationSchemeHTMLForm:
&gt;              method = NSURLAuthenticationMethodHTMLForm;
&gt;              break;
&gt; +#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
&gt; +        case ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested:
&gt; +            method = NSURLAuthenticationMethodServerTrust;
&gt; +            break;
&gt; +        case ProtectionSpaceAuthenticationSchemeClientCertificateRequested:
&gt; +            method = NSURLAuthenticationMethodClientCertificate;
&gt; +            break;
&gt; +#endif
&gt;          case ProtectionSpaceAuthenticationSchemeNTLM:
&gt;              method = NSURLAuthenticationMethodNTLM;
&gt;              break;

These case statements should be after ProtectionSpaceAuthenticationSchemeNTLM to keep the order in the enum definitions.

&gt; @@ -293,6 +301,12 @@ ProtectionSpace core(NSURLProtectionSpac
&gt;          scheme = ProtectionSpaceAuthenticationSchemeHTTPDigest;
&gt;      else if ([method isEqualToString:NSURLAuthenticationMethodHTMLForm])
&gt;          scheme = ProtectionSpaceAuthenticationSchemeHTMLForm;
&gt; +#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
&gt; +    else if ([method isEqualToString:NSURLAuthenticationMethodClientCertificate])
&gt; +        scheme = ProtectionSpaceAuthenticationSchemeClientCertificateRequested;
&gt; +    else if ([method isEqualToString:NSURLAuthenticationMethodServerTrust])
&gt; +        scheme = ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested;
&gt; +#endif
&gt;      else if ([method isEqualToString:NSURLAuthenticationMethodNTLM])
&gt;          scheme = ProtectionSpaceAuthenticationSchemeNTLM;
&gt;      else {

Ditto.

&gt; Index: WebKit/mac/WebView/WebDelegateImplementationCaching.h
&gt; ===================================================================
&gt; --- WebKit/mac/WebView/WebDelegateImplementationCaching.h	(revision 58413)
&gt; +++ WebKit/mac/WebView/WebDelegateImplementationCaching.h	(working copy)
&gt; @@ -35,6 +35,7 @@
&gt;  struct WebResourceDelegateImplementationCache {
&gt;      IMP didCancelAuthenticationChallengeFunc;
&gt;      IMP didReceiveAuthenticationChallengeFunc;
&gt; +    IMP canAuthenticateAgainstProtectionSpaceFunc;
&gt;      IMP identifierForRequestFunc;
&gt;      IMP willSendRequestFunc;
&gt;      IMP didReceiveResponseFunc;

This should have #if USE(PROTECTION_SPACE_AUTH_CALLBACK)/#endif macro guards.

&gt; Index: WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h
&gt; ===================================================================
&gt; --- WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h	(revision 58413)
&gt; +++ WebKit/mac/WebView/WebResourceLoadDelegatePrivate.h	(working copy)
&gt; @@ -43,6 +43,14 @@ @interface NSObject (WebResourceLoadDele
&gt; +/*!
&gt; + @method webView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:
&gt; + @abstract Inspect an NSURLProtectionSpace before an authentication attempt is made
&gt; + @param protectionSpace an NSURLProtectionSpace that will be used to generate an authentication challenge
&gt; + @result Return YES if the resource load delegate is prepared to respond to an authentication challenge generated with protectionSpace, NO otherwise
&gt; + */
&gt; +- (BOOL)webView:(WebView *)sender resource:(id)identifier canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace forDataSource:(WebDataSource *)dataSource;

This needs some kind of #if/#endif protection so it can&apos;t be used on Tiger or Leopard.

&gt; Index: WebKit/mac/WebView/WebView.mm
&gt; ===================================================================
&gt; --- WebKit/mac/WebView/WebView.mm	(revision 58413)
&gt; +++ WebKit/mac/WebView/WebView.mm	(working copy)
&gt; @@ -1377,6 +1377,7 @@ - (void)_cacheResourceLoadDelegateImplem
&gt;      cache-&gt;didFinishLoadingFromDataSourceFunc = getMethod(delegate, @selector(webView:resource:didFinishLoadingFromDataSource:));
&gt;      cache-&gt;didLoadResourceFromMemoryCacheFunc = getMethod(delegate, @selector(webView:didLoadResourceFromMemoryCache:response:length:fromDataSource:));
&gt;      cache-&gt;didReceiveAuthenticationChallengeFunc = getMethod(delegate, @selector(webView:resource:didReceiveAuthenticationChallenge:fromDataSource:));
&gt; +    cache-&gt;canAuthenticateAgainstProtectionSpaceFunc = getMethod(delegate, @selector(webView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:));
&gt;      cache-&gt;didReceiveContentLengthFunc = getMethod(delegate, @selector(webView:resource:didReceiveContentLength:fromDataSource:));
&gt;      cache-&gt;didReceiveResponseFunc = getMethod(delegate, @selector(webView:resource:didReceiveResponse:fromDataSource:));
&gt;      cache-&gt;identifierForRequestFunc = getMethod(delegate, @selector(webView:identifierForInitialRequest:fromDataSource:));

This should have #if USE(PROTECTION_SPACE_AUTH_CALLBACK)/#endif macro guards.

r=me with the fixes above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218690</commentid>
    <comment_count>6</comment_count>
    <who name="Mike Thole">mthole</who>
    <bug_when>2010-04-28 16:17:01 -0700</bug_when>
    <thetext>Committed revision 58442.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218695</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-28 16:43:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58442 might have broken Qt Linux ARMv7 Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54608</attachid>
            <date>2010-04-28 12:17:17 -0700</date>
            <delta_ts>2010-04-28 12:31:27 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>textmate stdin 9PXWFr.txt</filename>
            <type>text/plain</type>
            <size>25443</size>
            <attacher name="Mike Thole">mthole</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMjggIE1pa2UgVGhv
bGUgIDxtdGhvbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KCkgdG8gZnJhbWUgbG9hZGVyIHNvIHRoYXQgYSBwcm90ZWN0aW9uIHNwYWNlIAorICAgICAgICBj
YW4gYmUgaW5zcGVjdGVkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0
IGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3
MQorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZfVVNFX1BST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSyBkZWZpbmUuCisKIDIwMTAtMDQtMjggIFNpbW9uIEhhdXNtYW5uICA8
c2ltb24uaGF1c21hbm5Abm9raWEuY29tPiwgS2VudCBIYW5zZW4gPGtlbnQuaGFuc2VuQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCShyZXZpc2lvbiA1ODQxMykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc5LDYgKzEwNzksMTAgQEAgb24gTWluR1cuIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaAogI2VuZGlmCiAjZW5kaWYKIAorI2lmICgoUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShJUEhPTkUpKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkpCisjZGVmaW5lIFdURl9VU0VfUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLIDEKKyNlbmRpZgorCiAjaWYgQ09NUElMRVIoR0ND
KQogI2RlZmluZSBXQVJOX1VOVVNFRF9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2Vk
X3Jlc3VsdCkpCiAjZWxzZQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wNC0yOCAgTWlrZSBUaG9sZSAg
PG10aG9sZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoKSB0
byBmcmFtZSBsb2FkZXIgc28gdGhhdCBhIHByb3RlY3Rpb24gc3BhY2UgCisgICAgICAgIGNhbiBi
ZSBpbnNwZWN0ZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjcxCisK
KyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUHJvdGVjdGlvblNwYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6bWFjKToKKyAgICAgICAgQWRkIGNhc2VzIGZvciBjYXNlIFBy
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVx
dWVzdGVkIGFuZAorICAgICAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUNs
aWVudENlcnRpZmljYXRlUmVxdWVzdGVkLiAgR3VhcmRlZCB3aXRoIHRoZQorICAgICAgICAjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgYXMgdGhlIG5ldyBOU1VSTFByb3Rl
Y3Rpb25TcGFjZSBjb25zdGFudHMgZG9uJ3QKKyAgICAgICAgZXhpc3QgcHJpb3IgdG8gTWFjIE9T
IFggMTAuNi4KKyAgICAgICAgKFdlYkNvcmU6OmNvcmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTog
QWRkZWQuCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVj
dGlvbjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOl0pOiBBZGRlZC4KKwog
MjAxMC0wNC0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMu
aAkocmV2aXNpb24gNTg0MTMpCisrKyBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikgeyB9CisgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBQcm90
ZWN0aW9uU3BhY2UmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNl
aXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcpIHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gNTg0MTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MDIsNiArMzgwMiwxMyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRVc2VDcmVk
ZW50aWFsU3RvCiAgICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShsb2FkZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAor
I2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIEZyYW1lTG9hZGVy
OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIHJl
dHVybiBtX2NsaWVudC0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShsb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+aWRlbnRpZmllcigpLCBwcm90ZWN0aW9uU3Bh
Y2UpOworfQorI2VuZGlmCisKIHZvaWQgRnJhbWVMb2FkZXI6OnNldFRpdGxlKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7CiAgICAgZG9jdW1lbnRMb2FkZXIoKS0+c2V0VGl0bGUodGl0bGUpOwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgTmF2aWdh
dGlvbkFjdGlvbjsKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKIGNsYXNzIE5v
ZGU7CiAjZW5kaWYKK2NsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFJlbmRlckVtYmVkZGVk
T2JqZWN0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwpAQCAt
MTUxLDYgKzE1Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZG91YmxlIHRpbWVPZkxhc3RDb21w
bGV0ZWRMb2FkKCk7CiAKICAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291
cmNlTG9hZGVyKik7CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAg
ICBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpOworI2Vu
ZGlmCiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsK
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0KCkgY29uc3Q7CiAgICAg
dm9pZCByZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImLCBib29s
IGlzQ29tcGxldGUpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIElu
dFNpemU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworICAg
IGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFzcyBQbHVnaW5WaWV3OwogICAgIGNsYXNz
IFBvbGljeUNoZWNrZXI7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTEwNyw2ICsxMDgs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSA9IDA7ICAgICAgICAKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUHJv
dGVjdGlvblNwYWNlJikgPSAwOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKSA9IDA7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg0LDYgKzQ4NCwxNCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRDYW5jZWxBdXRoZW50aWNhCiAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgY2hhbGxlbmdlKTsKIH0KIAorI2lmIFVT
RShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIFJlc291cmNlTG9hZGVyOjpj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVj
dG9yKHRoaXMpOworICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7Cit9CisjZW5kaWYKKwog
dm9pZCBSZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQogewogICAgIGNhbmNlbCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5oCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEZy
YW1lTG9hZGVyOworICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFzcyBSZXNvdXJj
ZUhhbmRsZTsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAgICAgCkBAIC04Niw2ICs4Nyw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAg
dm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCiAg
ICAgICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CkBAIC0xMDEsNiArMTA1LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKSB7IHJldHVybiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKSB7IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOyB9
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
KSB7IGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7IH0gCisjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICAgICAgdmlydHVhbCBib29s
IGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkgeyByZXR1cm4gY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpOyB9CisjZW5kaWYK
ICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkgeyByZWNlaXZlZENh
bmNlbGxhdGlvbihjaGFsbGVuZ2UpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENhY2hlU3RvcmFnZVBvbGljeSYpOwogI2lmIFBMQVRG
T1JNKE1BQykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNl
LmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rp
b25TcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBAIGVudW0gUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUKICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVIVE1MRm9ybSA9IDQsCiAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lTlRMTSA9IDUsCiAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3Rp
YXRlID0gNiwKKyAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVDbGllbnRDZXJ0
aWZpY2F0ZVJlcXVlc3RlZCA9IDcsCisgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2No
ZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkID0gOCwKICAgUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duID0gMTAwLAogfTsKIApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDYgKzgyLDcgQEAgY2xhc3MgQ3JlZGVudGlhbDsKIGNsYXNzIEZvcm1EYXRhOwogY2xhc3Mg
RnJhbWU7CiBjbGFzcyBLVVJMOworY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogY2xhc3MgUmVzb3Vy
Y2VFcnJvcjsKIGNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OwogY2xhc3MgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDsKQEAgLTEzMSw2ICsxMzIsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFBy
b3RlY3Rpb25TcGFjZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKICAgICBOU1VSTENvbm5lY3Rp
b24gKmNvbm5lY3Rpb24oKSBjb25zdDsKICAgICBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0RlbGVn
YXRlICpkZWxlZ2F0ZSgpOwogICAgIHZvaWQgcmVsZWFzZURlbGVnYXRlKCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2aXNp
b24gNTg0MTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVudGlh
bDsKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFz
cyBSZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwogICAgIGNsYXNzIFJl
c291cmNlUmVxdWVzdDsKQEAgLTc4LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VIYW5k
bGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2UmKSB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRp
b24oUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsgfQog
CiAjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0JKHJldmlzaW9uIDU4NDEzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCwxNCBAQCBOU1VSTFByb3RlY3Rpb25TcGFjZSAqbWFjKGNv
bnN0IFByb3RlY3RpCiAgICAgICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVIVE1MRm9ybToKICAgICAgICAgICAgIG1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRpb25N
ZXRob2RIVE1MRm9ybTsKICAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShQUk9URUNUSU9OX1NQ
QUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQ6CisgICAgICAgICAgICBt
ZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kU2VydmVyVHJ1c3Q7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkOgorICAgICAgICAgICAgbWV0aG9kID0gTlNVUkxB
dXRoZW50aWNhdGlvbk1ldGhvZENsaWVudENlcnRpZmljYXRlOworICAgICAgICAgICAgYnJlYWs7
CisjZW5kaWYKICAgICAgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZU5UTE06CiAgICAgICAgICAgICBtZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kTlRM
TTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkzLDYgKzMwMSwxMiBAQCBQcm90ZWN0aW9uU3Bh
Y2UgY29yZShOU1VSTFByb3RlY3Rpb25TcGFjCiAgICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25T
cGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKICAgICBlbHNlIGlmIChbbWV0aG9k
IGlzRXF1YWxUb1N0cmluZzpOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRNTEZvcm1dKQogICAg
ICAgICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUTUxGb3Jt
OworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgZWxzZSBpZiAo
W21ldGhvZCBpc0VxdWFsVG9TdHJpbmc6TlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZENsaWVudENl
cnRpZmljYXRlXSkKKyAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVDbGllbnRDZXJ0aWZpY2F0ZVJlcXVlc3RlZDsKKyAgICBlbHNlIGlmIChbbWV0aG9k
IGlzRXF1YWxUb1N0cmluZzpOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kU2VydmVyVHJ1c3RdKQor
ICAgICAgICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZl
clRydXN0RXZhbHVhdGlvblJlcXVlc3RlZDsKKyNlbmRpZgogICAgIGVsc2UgaWYgKFttZXRob2Qg
aXNFcXVhbFRvU3RyaW5nOk5TVVJMQXV0aGVudGljYXRpb25NZXRob2ROVExNXSkKICAgICAgICAg
c2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwogICAgIGVs
c2UgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNl
SGFuZGxlTWFjLm1tCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw2ICs1Njcs
MTYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkQ2FuY2VsQXV0aGVudGljYQogICAgICAgICBj
bGllbnQoKS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgY2hhbGxlbmdl
KTsKIH0KIAorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIFJl
c291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvbnN0
IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlv
blNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVudGlh
bCYgY3JlZGVudGlhbCkKIHsKICAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CkBAIC03
MzksNiArNzQ5LDE5IEBAIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY28K
ICAgICBtX2hhbmRsZS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29yZShjaGFs
bGVuZ2UpKTsKIH0KIAorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCist
IChCT09MKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24gY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3BhY2Ug
Kilwcm90ZWN0aW9uU3BhY2UKK3sKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlvbik7
CisgICAgCisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgICAgICAK
KyAgICBDYWxsYmFja0d1YXJkIGd1YXJkOworICAgIHJldHVybiBtX2hhbmRsZS0+Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlKHByb3RlY3Rpb25TcGFjZSkpOworfQor
I2VuZGlmCisKIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVjdGlv
biBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7CiAgICAgVU5VU0VEX1BB
UkFNKGNvbm5lY3Rpb24pOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wNC0yOCAgTWlr
ZSBUaG9sZSAgPG10aG9sZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9u
U3BhY2UoKSB0byBmcmFtZSBsb2FkZXIgc28gdGhhdCBhIHByb3RlY3Rpb24gc3BhY2UgCisgICAg
ICAgIGNhbiBiZSBpbnNwZWN0ZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIGFn
YWluc3QgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM4MjcxCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgorICAg
ICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UpOgorICAgICAgICBBZGRlZC4gIElmIHRoZSByZXNvdXJjZSBsb2FkIGRlbGVnYXRl
IGltcGxlbWVudHMgdGhlIGNhbGxiYWNrLCB1c2UgaXRzIGFuc3dlci4gIElmIGl0IGRvZXMKKyAg
ICAgICAgbm90LCB0aGVuIG9ubHkgc2VuZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2VzIGZvciBw
cmUtMTAuNiBwcm90ZWN0aW9uIHNwYWNlcywgd2hpY2ggbWF0Y2hlcworICAgICAgICBDRk5ldHdv
cmsncyBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAqIFdlYlZpZXcvV2ViRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hpbmcuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoaW5nLm1tOgorICAgICAgICAoQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlUmV0
dXJuaW5nQm9vbGVhbik6IEFkZGVkIGNhc2UgZm9yIHBhc3NpbmcgdGhyZWUgb2JqZWN0cy4KKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oOgorICAgICAg
ICBBZGRlZCBwcml2YXRlIFNQSSBkZWZpbml0aW9uOiB3ZWJWaWV3OnJlc291cmNlOmNhbkF1dGhl
bnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6Zm9yRGF0YVNvdXJjZToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NhY2hlUmVzb3VyY2VMb2Fk
RGVsZWdhdGVJbXBsZW1lbnRhdGlvbnNdKToKKwogMjAxMC0wNC0yNyAgU2hpbmljaGlybyBIYW1h
amkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyIGFuZCBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBIaXN0b3J5
SXRlbTsKKyAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiAgICAgY2xhc3MgU3RyaW5nOwogICAg
IGNsYXNzIFJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAgLTc5
LDYgKzgwLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3JlOjpE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRI
X0NBTExCQUNLKQorICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKTsKKyNlbmRpZgogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
KFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQg
bGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRp
bmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwpJ
bmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xp
ZW50Lm1tCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxNCw2ICs0MTQsMjcgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZQogICAgIFtbV2ViUGFuZWxB
dXRoZW50aWNhdGlvbkhhbmRsZXIgc2hhcmVkSGFuZGxlcl0gc3RhcnRBdXRoZW50aWNhdGlvbjp3
ZWJDaGFsbGVuZ2Ugd2luZG93OndpbmRvd107CiB9CiAKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFD
RV9BVVRIX0NBTExCQUNLKQorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNl
KQoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkp
OworICAgIFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1lbnRh
dGlvbnMgPSBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMod2Vi
Vmlldyk7CisgICAgCisgICAgTlNVUkxQcm90ZWN0aW9uU3BhY2UgKndlYlByb3RlY3Rpb25TcGFj
ZSA9IG1hYyhwcm90ZWN0aW9uU3BhY2UpOworICAgIAorICAgIGlmIChpbXBsZW1lbnRhdGlvbnMt
PmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VGdW5jKSB7CisgICAgICAgIGlm
IChpZCByZXNvdXJjZSA9IFt3ZWJWaWV3IF9vYmplY3RGb3JJZGVudGlmaWVyOmlkZW50aWZpZXJd
KSB7CisgICAgICAgICAgICByZXR1cm4gQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlUmV0dXJuaW5n
Qm9vbGVhbihOTywgaW1wbGVtZW50YXRpb25zLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6Y2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTpmb3JEYXRhU291cmNlOiksIHJlc291cmNl
LCB3ZWJQcm90ZWN0aW9uU3BhY2UsIGRhdGFTb3VyY2UobG9hZGVyKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBJZiBvdXIgcmVzb3VyY2UgbG9hZCBkZWxlZ2F0ZSBkb2Vzbid0IGhhbmRs
ZSB0aGUgcXVlc3Rpb24sIHRoZW4gb25seSBzZW5kIGF1dGhlbnRpY2F0aW9uCisgICAgLy8gY2hh
bGxlbmdlcyBmb3IgcHJlLTEwLjYgcHJvdGVjdGlvbiBzcGFjZXMuICBUaGlzIGlzIHRoZSBzYW1l
IGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgLy8gaW4gQ0ZOZXR3b3JrLgorICAg
IHJldHVybiAocHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPCBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkKTsK
K30KKyNlbmRpZgorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmY2hhbGxlbmdl
KQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkp
OwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoaW5nLmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDYgKzM1LDcgQEAKIHN0cnVjdCBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
ZSB7CiAgICAgSU1QIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVuYzsKICAgICBJ
TVAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVuYzsKKyAgICBJTVAgY2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUZ1bmM7CiAgICAgSU1QIGlkZW50aWZpZXJG
b3JSZXF1ZXN0RnVuYzsKICAgICBJTVAgd2lsbFNlbmRSZXF1ZXN0RnVuYzsKICAgICBJTVAgZGlk
UmVjZWl2ZVJlc3BvbnNlRnVuYzsKQEAgLTEzMCw2ICsxMzEsNyBAQCBpZCBDYWxsUmVzb3VyY2VM
b2FkRGVsZWdhdGUoSU1QLCBXZWJWaWV3CiBpZCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUoSU1Q
LCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkLCBOU0ludGVnZXIsIGlkKTsKIAogQk9PTCBDYWxsUmVz
b3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIElNUCwgV2ViVmlldyAqLCBT
RUwsIGlkLCBpZCk7CitCT09MIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZVJldHVybmluZ0Jvb2xl
YW4oQk9PTCwgSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkLCBpZCk7CiAKIGlkIENhbGxTY3Jp
cHREZWJ1Z0RlbGVnYXRlKElNUCwgV2ViVmlldyAqLCBTRUwsIGlkLCBpZCwgTlNJbnRlZ2VyLCBp
ZCk7CiBpZCBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBpZCwg
TlNJbnRlZ2VyLCBpZCwgTlNJbnRlZ2VyLCBpZCk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLm1tCShyZXZpc2lv
biA1ODQxMykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0aW9u
Q2FjaGluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDYgKzU0NywxOCBAQCBCT09MIENhbGxS
ZXNvdXJjZUxvYWREZWxlZ2F0ZVJldHVybmluZ0JvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAor
Qk9PTCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVzdWx0
LCBJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2Jq
ZWN0MSwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0MykKK3sKKyAgICBpZiAoIXNlbGYtPl9wcml2YXRl
LT5jYXRjaGVzRGVsZWdhdGVFeGNlcHRpb25zKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxCT09MICgqKShpZCwgU0VMLCBXZWJWaWV3ICosIGlkLCBpZCwgaWQpPihvYmpjX21zZ1Nl
bmQpKHNlbGYtPl9wcml2YXRlLT5yZXNvdXJjZVByb2dyZXNzRGVsZWdhdGUsIHNlbGVjdG9yLCBz
ZWxmLCBvYmplY3QxLCBvYmplY3QyLCBvYmplY3QzKTsKKyAgICBAdHJ5IHsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qk9PTCAoKikoaWQsIFNFTCwgV2ViVmlldyAqLCBpZCwgaWQs
IGlkKT4ob2JqY19tc2dTZW5kKShzZWxmLT5fcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVzc0RlbGVn
YXRlLCBzZWxlY3Rvciwgc2VsZiwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Myk7CisgICAgfSBA
Y2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRlRXhj
ZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBpZCBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZp
ZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MiwgTlNJbnRlZ2Vy
IGludGVnZXIsIGlkIG9iamVjdDMpCiB7CiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBsZW1l
bnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGUsIHNlbGVj
dG9yLCBvYmplY3QxLCBvYmplY3QyLCBpbnRlZ2VyLCBvYmplY3QzKTsKSW5kZXg6IFdlYktpdC9t
YWMvV2ViVmlldy9XZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlLmgJKHJl
dmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlc291cmNlTG9hZERlbGVn
YXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNCBAQCBAaW50ZXJmYWNl
IE5TT2JqZWN0IChXZWJSZXNvdXJjZUxvYWREZWxlCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZpZXcg
Kil3ZWJWaWV3IGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTooTlNVUkxSZXF1ZXN0ICop
cmVxdWVzdCByZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGxlbmd0aDooV2ViTlNJ
bnRlZ2VyKWxlbmd0aCBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2U7
CiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHJlc291cmNlOihpZClpZGVudGlm
aWVyIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlRm9yRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJj
ZSAqKWRhdGFTb3VyY2U7CiAKKy8qIQorIEBtZXRob2Qgd2ViVmlldzpyZXNvdXJjZTpjYW5BdXRo
ZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOmZvckRhdGFTb3VyY2U6CisgQGFic3RyYWN0
IEluc3BlY3QgYW4gTlNVUkxQcm90ZWN0aW9uU3BhY2UgYmVmb3JlIGFuIGF1dGhlbnRpY2F0aW9u
IGF0dGVtcHQgaXMgbWFkZQorIEBwYXJhbSBwcm90ZWN0aW9uU3BhY2UgYW4gTlNVUkxQcm90ZWN0
aW9uU3BhY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlCisgQHJlc3VsdCBSZXR1cm4gWUVTIGlmIHRoZSByZXNvdXJjZSBsb2FkIGRlbGVn
YXRlIGlzIHByZXBhcmVkIHRvIHJlc3BvbmQgdG8gYW4gYXV0aGVudGljYXRpb24gY2hhbGxlbmdl
IGdlbmVyYXRlZCB3aXRoIHByb3RlY3Rpb25TcGFjZSwgTk8gb3RoZXJ3aXNlCisgKi8KKy0gKEJP
T0wpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciBjYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFjZSAq
KXByb3RlY3Rpb25TcGFjZSBmb3JEYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJj
ZTsKKwogQGVuZAogCiAjdW5kZWYgV2ViTlNJbnRlZ2VyCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQkocmV2aXNpb24gNTg0MTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM3Nyw2ICsxMzc3LDcgQEAgLSAodm9pZClfY2FjaGVSZXNvdXJjZUxv
YWREZWxlZ2F0ZUltcGxlbQogICAgIGNhY2hlLT5kaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3Vy
Y2VGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJjZTpk
aWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3VyY2U6KSk7CiAgICAgY2FjaGUtPmRpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3
ZWJWaWV3OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTpyZXNwb25zZTpsZW5ndGg6ZnJv
bURhdGFTb3VyY2U6KSk7CiAgICAgY2FjaGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291cmNl
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpmcm9tRGF0YVNvdXJjZTopKTsKKyAg
ICBjYWNoZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUZ1bmMgPSBnZXRN
ZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291cmNlOmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6Zm9yRGF0YVNvdXJjZTopKTsKICAgICBjYWNoZS0+ZGlk
UmVjZWl2ZUNvbnRlbnRMZW5ndGhGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Io
d2ViVmlldzpyZXNvdXJjZTpkaWRSZWNlaXZlQ29udGVudExlbmd0aDpmcm9tRGF0YVNvdXJjZTop
KTsKICAgICBjYWNoZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlRnVuYyA9IGdldE1ldGhvZChkZWxlZ2F0
ZSwgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6ZGlkUmVjZWl2ZVJlc3BvbnNlOmZyb21EYXRh
U291cmNlOikpOwogICAgIGNhY2hlLT5pZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMgPSBnZXRNZXRo
b2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dDpmcm9tRGF0YVNvdXJjZTopKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54610</attachid>
            <date>2010-04-28 12:30:48 -0700</date>
            <delta_ts>2010-04-28 13:39:46 -0700</delta_ts>
            <desc>Fixed enum indentation for style-bot</desc>
            <filename>textmate stdin 0ZGOMq.txt</filename>
            <type>text/plain</type>
            <size>26643</size>
            <attacher name="Mike Thole">mthole</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMjggIE1pa2UgVGhv
bGUgIDxtdGhvbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KCkgdG8gZnJhbWUgbG9hZGVyIHNvIHRoYXQgYSBwcm90ZWN0aW9uIHNwYWNlIAorICAgICAgICBj
YW4gYmUgaW5zcGVjdGVkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0
IGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI3
MQorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBXVEZfVVNFX1BST1RFQ1RJT05fU1BB
Q0VfQVVUSF9DQUxMQkFDSyBkZWZpbmUuCisKIDIwMTAtMDQtMjggIFNpbW9uIEhhdXNtYW5uICA8
c2ltb24uaGF1c21hbm5Abm9raWEuY29tPiwgS2VudCBIYW5zZW4gPGtlbnQuaGFuc2VuQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCShyZXZpc2lvbiA1ODQxMykKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9y
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc5LDYgKzEwNzksMTAgQEAgb24gTWluR1cuIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaAogI2VuZGlmCiAjZW5kaWYKIAorI2lmICgoUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShJUEhPTkUpKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkpCisjZGVmaW5lIFdURl9VU0VfUFJP
VEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLIDEKKyNlbmRpZgorCiAjaWYgQ09NUElMRVIoR0ND
KQogI2RlZmluZSBXQVJOX1VOVVNFRF9SRVRVUk4gX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2Vk
X3Jlc3VsdCkpCiAjZWxzZQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wNC0yOCAgTWlrZSBUaG9sZSAg
PG10aG9sZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoKSB0
byBmcmFtZSBsb2FkZXIgc28gdGhhdCBhIHByb3RlY3Rpb24gc3BhY2UgCisgICAgICAgIGNhbiBi
ZSBpbnNwZWN0ZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgaXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjcxCisK
KyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpFbXB0
eUZyYW1lTG9hZGVyQ2xpZW50OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmg6CisgICAgICAgICogbG9h
ZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKTogQWRkZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
TG9hZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6Y2FuQXV0aGVudGlj
YXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUHJvdGVjdGlvblNwYWNlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUNsaWVudDo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZSk6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6bWFjKToKKyAgICAgICAgQWRkIGNhc2VzIGZvciBjYXNlIFBy
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVx
dWVzdGVkIGFuZAorICAgICAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUNs
aWVudENlcnRpZmljYXRlUmVxdWVzdGVkLiAgR3VhcmRlZCB3aXRoIHRoZQorICAgICAgICAjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykgYXMgdGhlIG5ldyBOU1VSTFByb3Rl
Y3Rpb25TcGFjZSBjb25zdGFudHMgZG9uJ3QKKyAgICAgICAgZXhpc3QgcHJpb3IgdG8gTWFjIE9T
IFggMTAuNi4KKyAgICAgICAgKFdlYkNvcmU6OmNvcmUpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRsZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKTog
QWRkZWQuCisgICAgICAgICgtW1dlYkNvcmVSZXNvdXJjZUhhbmRsZUFzRGVsZWdhdGUgY29ubmVj
dGlvbjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOl0pOiBBZGRlZC4KKwog
MjAxMC0wNC0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJDb3JlL2xvYWRlci9F
bXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMu
aAkocmV2aXNpb24gNTg0MTMpCisrKyBXZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJikgeyB9CisgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQ
cm90ZWN0aW9uU3BhY2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBQcm90
ZWN0aW9uU3BhY2UmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNl
aXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcpIHsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gNTg0MTMpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MDIsNiArMzgwMiwxMyBAQCBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRVc2VDcmVk
ZW50aWFsU3RvCiAgICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZShsb2FkZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+aWRlbnRpZmllcigpKTsKIH0KIAor
I2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIEZyYW1lTG9hZGVy
OjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKFJlc291cmNlTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIHJl
dHVybiBtX2NsaWVudC0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShsb2Fk
ZXItPmRvY3VtZW50TG9hZGVyKCksIGxvYWRlci0+aWRlbnRpZmllcigpLCBwcm90ZWN0aW9uU3Bh
Y2UpOworfQorI2VuZGlmCisKIHZvaWQgRnJhbWVMb2FkZXI6OnNldFRpdGxlKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7CiAgICAgZG9jdW1lbnRMb2FkZXIoKS0+c2V0VGl0bGUodGl0bGUpOwpJbmRl
eDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgY2xhc3MgTmF2aWdh
dGlvbkFjdGlvbjsKICNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKIGNsYXNzIE5v
ZGU7CiAjZW5kaWYKK2NsYXNzIFByb3RlY3Rpb25TcGFjZTsKIGNsYXNzIFJlbmRlckVtYmVkZGVk
T2JqZWN0OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlTG9hZGVyOwpAQCAt
MTUxLDYgKzE1Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZG91YmxlIHRpbWVPZkxhc3RDb21w
bGV0ZWRMb2FkKCk7CiAKICAgICBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKFJlc291
cmNlTG9hZGVyKik7CisjaWYgVVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAg
ICBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VMb2Fk
ZXIqIGxvYWRlciwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpOworI2Vu
ZGlmCiAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBvcmlnaW5hbFJlcXVlc3QoKSBjb25zdDsK
ICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGluaXRpYWxSZXF1ZXN0KCkgY29uc3Q7CiAgICAg
dm9pZCByZWNlaXZlZE1haW5SZXNvdXJjZUVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImLCBib29s
IGlzQ29tcGxldGUpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIElu
dFNpemU7CiAgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOworICAg
IGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFzcyBQbHVnaW5WaWV3OwogICAgIGNsYXNz
IFBvbGljeUNoZWNrZXI7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTEwNyw2ICsxMDgs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VD
cmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UmKSA9IDA7ICAgICAgICAKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNL
KQorICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25T
cGFjZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUHJv
dGVjdGlvblNwYWNlJikgPSAwOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKSA9IDA7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3Bw
CShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg0LDYgKzQ4NCwxNCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpk
aWRDYW5jZWxBdXRoZW50aWNhCiAgICAgZnJhbWVMb2FkZXIoKS0+bm90aWZpZXIoKS0+ZGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgY2hhbGxlbmdlKTsKIH0KIAorI2lmIFVT
RShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29sIFJlc291cmNlTG9hZGVyOjpj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNvbnN0IFByb3RlY3Rpb25TcGFj
ZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVj
dG9yKHRoaXMpOworICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jYW5BdXRoZW50aWNhdGVBZ2Fp
bnN0UHJvdGVjdGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7Cit9CisjZW5kaWYKKwog
dm9pZCBSZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQogewogICAgIGNhbmNlbCgpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5oCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEZy
YW1lTG9hZGVyOworICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBjbGFzcyBSZXNvdXJj
ZUhhbmRsZTsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CiAgICAgCkBAIC04Niw2ICs4Nyw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRl
bnRpYWxTdG9yYWdlKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAg
dm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNl
KGNvbnN0IFByb3RlY3Rpb25TcGFjZSYpOworI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgdm9pZCBy
ZWNlaXZlZENhbmNlbGxhdGlvbihjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwogCiAg
ICAgICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50CkBAIC0xMDEsNiArMTA1LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0
b3JhZ2UoUmVzb3VyY2VIYW5kbGUqKSB7IHJldHVybiBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFn
ZSgpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKSB7IGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjaGFsbGVuZ2UpOyB9
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
UmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxlbmdl
KSB7IGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7IH0gCisjaWYg
VVNFKFBST1RFQ1RJT05fU1BBQ0VfQVVUSF9DQUxMQkFDSykKKyAgICAgICAgdmlydHVhbCBib29s
IGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBj
b25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkgeyByZXR1cm4gY2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShwcm90ZWN0aW9uU3BhY2UpOyB9CisjZW5kaWYK
ICAgICAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkQ2FuY2VsbGF0aW9uKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSkgeyByZWNlaXZlZENh
bmNlbGxhdGlvbihjaGFsbGVuZ2UpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsQ2FjaGVS
ZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIENhY2hlU3RvcmFnZVBvbGljeSYpOwogI2lmIFBMQVRG
T1JNKE1BQykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Qcm90ZWN0aW9uU3BhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUHJvdGVjdGlvblNwYWNl
LmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Byb3RlY3Rp
b25TcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyNiArMzAsMjggQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogZW51bSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHsKLSAgUHJvdGVjdGlv
blNwYWNlU2VydmVySFRUUCA9IDEsCi0gIFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFBTID0gMiwK
LSAgUHJvdGVjdGlvblNwYWNlU2VydmVyRlRQID0gMywKLSAgUHJvdGVjdGlvblNwYWNlU2VydmVy
RlRQUyA9IDQsCi0gIFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCA9IDUsCi0gIFByb3RlY3Rpb25T
cGFjZVByb3h5SFRUUFMgPSA2LAotICBQcm90ZWN0aW9uU3BhY2VQcm94eUZUUCA9IDcsCi0gIFBy
b3RlY3Rpb25TcGFjZVByb3h5U09DS1MgPSA4CisgICAgUHJvdGVjdGlvblNwYWNlU2VydmVySFRU
UCA9IDEsCisgICAgUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFMgPSAyLAorICAgIFByb3RlY3Rp
b25TcGFjZVNlcnZlckZUUCA9IDMsCisgICAgUHJvdGVjdGlvblNwYWNlU2VydmVyRlRQUyA9IDQs
CisgICAgUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQID0gNSwKKyAgICBQcm90ZWN0aW9uU3BhY2VQ
cm94eUhUVFBTID0gNiwKKyAgICBQcm90ZWN0aW9uU3BhY2VQcm94eUZUUCA9IDcsCisgICAgUHJv
dGVjdGlvblNwYWNlUHJveHlTT0NLUyA9IDgKIH07CiAKIGVudW0gUHJvdGVjdGlvblNwYWNlQXV0
aGVudGljYXRpb25TY2hlbWUgewotICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZURlZmF1bHQgPSAxLAotICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBC
YXNpYyA9IDIsCi0gIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2Vz
dCA9IDMsCi0gIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRNTEZvcm0gPSA0
LAotICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0gPSA1LAotICBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZSA9IDYsCi0gIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lVW5rbm93biA9IDEwMCwKKyAgICBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZURlZmF1bHQgPSAxLAorICAgIFByb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJhc2ljID0gMiwKKyAgICBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3QgPSAzLAorICAgIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lSFRNTEZvcm0gPSA0LAorICAgIFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lTlRMTSA9IDUsCisgICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVOZWdvdGlhdGUgPSA2LAorICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0ZWQgPSA3LAorICAgIFByb3RlY3Rpb25TcGFj
ZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkID0gOCwK
KyAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24gPSAxMDAsCiB9
OwotCisgIAogY2xhc3MgUHJvdGVjdGlvblNwYWNlIHsKIAogcHVibGljOgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDU4NDEzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDYgKzgyLDcgQEAgY2xhc3MgQ3JlZGVudGlhbDsKIGNsYXNzIEZvcm1EYXRhOwogY2xh
c3MgRnJhbWU7CiBjbGFzcyBLVVJMOworY2xhc3MgUHJvdGVjdGlvblNwYWNlOwogY2xhc3MgUmVz
b3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlSGFuZGxlQ2xpZW50OwogY2xhc3MgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDsKQEAgLTEzMSw2ICsxMzIsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9S
TShNQUMpCiAgICAgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgIGJvb2wgY2FuQXV0aGVudGljYXRlQWdhaW5z
dFByb3RlY3Rpb25TcGFjZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKICAgICBOU1VSTENvbm5l
Y3Rpb24gKmNvbm5lY3Rpb24oKSBjb25zdDsKICAgICBXZWJDb3JlUmVzb3VyY2VIYW5kbGVBc0Rl
bGVnYXRlICpkZWxlZ2F0ZSgpOwogICAgIHZvaWQgcmVsZWFzZURlbGVnYXRlKCk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVDbGllbnQuaAkocmV2
aXNpb24gNTg0MTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVu
dGlhbDsKICAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFByb3RlY3Rpb25TcGFjZTsKICAgICBj
bGFzcyBSZXNvdXJjZUhhbmRsZTsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwogICAgIGNsYXNz
IFJlc291cmNlUmVxdWVzdDsKQEAgLTc4LDYgKzc5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoUmVzb3VyY2VI
YW5kbGUqKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGNhbkF1dGhlbnRpY2F0ZUFnYWlu
c3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBQcm90ZWN0aW9uU3BhY2Um
KSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRDYW5jZWxs
YXRpb24oUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpIHsg
fQogCiAjaWYgUExBVEZPUk0oTUFDKSAgICAgICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0F1dGhlbnRpY2F0aW9uTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvQXV0aGVudGljYXRpb25NYWMubW0JKHJldmlzaW9uIDU4NDEzKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9BdXRoZW50aWNhdGlvbk1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCwxNCBAQCBOU1VSTFByb3RlY3Rpb25TcGFjZSAqbWFj
KGNvbnN0IFByb3RlY3RpCiAgICAgICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRp
b25TY2hlbWVIVE1MRm9ybToKICAgICAgICAgICAgIG1ldGhvZCA9IE5TVVJMQXV0aGVudGljYXRp
b25NZXRob2RIVE1MRm9ybTsKICAgICAgICAgICAgIGJyZWFrOworI2lmIFVTRShQUk9URUNUSU9O
X1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVu
dGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQ6CisgICAgICAgICAg
ICBtZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kU2VydmVyVHJ1c3Q7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkOgorICAgICAgICAgICAgbWV0aG9kID0gTlNV
UkxBdXRoZW50aWNhdGlvbk1ldGhvZENsaWVudENlcnRpZmljYXRlOworICAgICAgICAgICAgYnJl
YWs7CisjZW5kaWYKICAgICAgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNj
aGVtZU5UTE06CiAgICAgICAgICAgICBtZXRob2QgPSBOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9k
TlRMTTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjkzLDYgKzMwMSwxMiBAQCBQcm90ZWN0aW9u
U3BhY2UgY29yZShOU1VSTFByb3RlY3Rpb25TcGFjCiAgICAgICAgIHNjaGVtZSA9IFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKICAgICBlbHNlIGlmIChbbWV0
aG9kIGlzRXF1YWxUb1N0cmluZzpOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kSFRNTEZvcm1dKQog
ICAgICAgICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUTUxG
b3JtOworI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCisgICAgZWxzZSBp
ZiAoW21ldGhvZCBpc0VxdWFsVG9TdHJpbmc6TlNVUkxBdXRoZW50aWNhdGlvbk1ldGhvZENsaWVu
dENlcnRpZmljYXRlXSkKKyAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGlj
YXRpb25TY2hlbWVDbGllbnRDZXJ0aWZpY2F0ZVJlcXVlc3RlZDsKKyAgICBlbHNlIGlmIChbbWV0
aG9kIGlzRXF1YWxUb1N0cmluZzpOU1VSTEF1dGhlbnRpY2F0aW9uTWV0aG9kU2VydmVyVHJ1c3Rd
KQorICAgICAgICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNl
cnZlclRydXN0RXZhbHVhdGlvblJlcXVlc3RlZDsKKyNlbmRpZgogICAgIGVsc2UgaWYgKFttZXRo
b2QgaXNFcXVhbFRvU3RyaW5nOk5TVVJMQXV0aGVudGljYXRpb25NZXRob2ROVExNXSkKICAgICAg
ICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwogICAg
IGVsc2UgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9SZXNvdXJjZUhhbmRs
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291
cmNlSGFuZGxlTWFjLm1tCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw2ICs1
NjcsMTYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6ZGlkQ2FuY2VsQXV0aGVudGljYQogICAgICAg
ICBjbGllbnQoKS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UodGhpcywgY2hhbGxl
bmdlKTsKIH0KIAorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0spCitib29s
IFJlc291cmNlSGFuZGxlOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGNv
bnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlKHRoaXMsIHByb3RlY3Rpb25TcGFjZSk7CisgICAgICAgIAorICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZgorCiB2b2lkIFJlc291cmNlSGFuZGxlOjpyZWNlaXZlZENyZWRlbnRp
YWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgY29uc3QgQ3JlZGVu
dGlhbCYgY3JlZGVudGlhbCkKIHsKICAgICBBU1NFUlQoIWNoYWxsZW5nZS5pc051bGwoKSk7CkBA
IC03MzksNiArNzQ5LDE5IEBAIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICop
Y28KICAgICBtX2hhbmRsZS0+ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29yZShj
aGFsbGVuZ2UpKTsKIH0KIAorI2lmIFVTRShQUk9URUNUSU9OX1NQQUNFX0FVVEhfQ0FMTEJBQ0sp
CistIChCT09MKWNvbm5lY3Rpb246KE5TVVJMQ29ubmVjdGlvbiAqKXVudXNlZENvbm5lY3Rpb24g
Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTooTlNVUkxQcm90ZWN0aW9uU3Bh
Y2UgKilwcm90ZWN0aW9uU3BhY2UKK3sKKyAgICBVTlVTRURfUEFSQU0odW51c2VkQ29ubmVjdGlv
bik7CisgICAgCisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgICAg
ICAKKyAgICBDYWxsYmFja0d1YXJkIGd1YXJkOworICAgIHJldHVybiBtX2hhbmRsZS0+Y2FuQXV0
aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb3JlKHByb3RlY3Rpb25TcGFjZSkpOwor
fQorI2VuZGlmCisKIC0gKHZvaWQpY29ubmVjdGlvbjooTlNVUkxDb25uZWN0aW9uICopY29ubmVj
dGlvbiBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0wNC0yOCAg
TWlrZSBUaG9sZSAgPG10aG9sZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2UoKSB0byBmcmFtZSBsb2FkZXIgc28gdGhhdCBhIHByb3RlY3Rpb24gc3BhY2UgCisg
ICAgICAgIGNhbiBiZSBpbnNwZWN0ZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRl
IGFnYWluc3QgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4MjcxCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tOgor
ICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UpOgorICAgICAgICBBZGRlZC4gIElmIHRoZSByZXNvdXJjZSBsb2FkIGRlbGVn
YXRlIGltcGxlbWVudHMgdGhlIGNhbGxiYWNrLCB1c2UgaXRzIGFuc3dlci4gIElmIGl0IGRvZXMK
KyAgICAgICAgbm90LCB0aGVuIG9ubHkgc2VuZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2VzIGZv
ciBwcmUtMTAuNiBwcm90ZWN0aW9uIHNwYWNlcywgd2hpY2ggbWF0Y2hlcworICAgICAgICBDRk5l
dHdvcmsncyBkZWZhdWx0IGJlaGF2aW9yLgorICAgICAgICAqIFdlYlZpZXcvV2ViRGVsZWdhdGVJ
bXBsZW1lbnRhdGlvbkNhY2hpbmcuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYkRlbGVnYXRlSW1w
bGVtZW50YXRpb25DYWNoaW5nLm1tOgorICAgICAgICAoQ2FsbFJlc291cmNlTG9hZERlbGVnYXRl
UmV0dXJuaW5nQm9vbGVhbik6IEFkZGVkIGNhc2UgZm9yIHBhc3NpbmcgdGhyZWUgb2JqZWN0cy4K
KyAgICAgICAgKiBXZWJWaWV3L1dlYlJlc291cmNlTG9hZERlbGVnYXRlUHJpdmF0ZS5oOgorICAg
ICAgICBBZGRlZCBwcml2YXRlIFNQSSBkZWZpbml0aW9uOiB3ZWJWaWV3OnJlc291cmNlOmNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6Zm9yRGF0YVNvdXJjZToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgX2NhY2hlUmVzb3VyY2VM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnNdKToKKwogMjAxMC0wNC0yNyAgU2hpbmljaGlybyBI
YW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyIGFuZCBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBIaXN0
b3J5SXRlbTsKKyAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7CiAgICAgY2xhc3MgU3RyaW5nOwog
ICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOwogICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKQEAg
LTc5LDYgKzgwLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVu
dGlhbFN0b3JhZ2UoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShXZWJDb3JlOjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKyNpZiBVU0UoUFJPVEVDVElPTl9TUEFDRV9B
VVRIX0NBTExCQUNLKQorICAgIHZpcnR1YWwgYm9vbCBjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBXZWJDb3JlOjpQcm90ZWN0aW9uU3BhY2UmKTsKKyNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVu
Z3RoKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBp
bnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExv
YWRpbmcoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIp
OwpJbmRleDogV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50Lm1tCShyZXZpc2lvbiA1ODQxMykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxNCw2ICs0MTQsMjcg
QEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZQogICAgIFtbV2ViUGFu
ZWxBdXRoZW50aWNhdGlvbkhhbmRsZXIgc2hhcmVkSGFuZGxlcl0gc3RhcnRBdXRoZW50aWNhdGlv
bjp3ZWJDaGFsbGVuZ2Ugd2luZG93OndpbmRvd107CiB9CiAKKyNpZiBVU0UoUFJPVEVDVElPTl9T
UEFDRV9BVVRIX0NBTExCQUNLKQorYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuQXV0aGVu
dGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShEb2N1bWVudExvYWRlciogbG9hZGVyLCB1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNw
YWNlKQoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0
KCkpOworICAgIFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBpbXBsZW1l
bnRhdGlvbnMgPSBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMo
d2ViVmlldyk7CisgICAgCisgICAgTlNVUkxQcm90ZWN0aW9uU3BhY2UgKndlYlByb3RlY3Rpb25T
cGFjZSA9IG1hYyhwcm90ZWN0aW9uU3BhY2UpOworICAgIAorICAgIGlmIChpbXBsZW1lbnRhdGlv
bnMtPmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2VGdW5jKSB7CisgICAgICAg
IGlmIChpZCByZXNvdXJjZSA9IFt3ZWJWaWV3IF9vYmplY3RGb3JJZGVudGlmaWVyOmlkZW50aWZp
ZXJdKSB7CisgICAgICAgICAgICByZXR1cm4gQ2FsbFJlc291cmNlTG9hZERlbGVnYXRlUmV0dXJu
aW5nQm9vbGVhbihOTywgaW1wbGVtZW50YXRpb25zLT5jYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJv
dGVjdGlvblNwYWNlRnVuYywgd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6Y2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTpmb3JEYXRhU291cmNlOiksIHJlc291
cmNlLCB3ZWJQcm90ZWN0aW9uU3BhY2UsIGRhdGFTb3VyY2UobG9hZGVyKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBJZiBvdXIgcmVzb3VyY2UgbG9hZCBkZWxlZ2F0ZSBkb2Vzbid0IGhh
bmRsZSB0aGUgcXVlc3Rpb24sIHRoZW4gb25seSBzZW5kIGF1dGhlbnRpY2F0aW9uCisgICAgLy8g
Y2hhbGxlbmdlcyBmb3IgcHJlLTEwLjYgcHJvdGVjdGlvbiBzcGFjZXMuICBUaGlzIGlzIHRoZSBz
YW1lIGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCisgICAgLy8gaW4gQ0ZOZXR3b3JrLgor
ICAgIHJldHVybiAocHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPCBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVk
KTsKK30KKyNlbmRpZgorCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENh
bmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmY2hhbGxl
bmdlKQogewogICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0
KCkpOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1w
bGVtZW50YXRpb25DYWNoaW5nLmgJKHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKIHN0cnVjdCBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoZSB7CiAgICAgSU1QIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVuYzsKICAg
ICBJTVAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVuYzsKKyAgICBJTVAgY2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUZ1bmM7CiAgICAgSU1QIGlkZW50aWZp
ZXJGb3JSZXF1ZXN0RnVuYzsKICAgICBJTVAgd2lsbFNlbmRSZXF1ZXN0RnVuYzsKICAgICBJTVAg
ZGlkUmVjZWl2ZVJlc3BvbnNlRnVuYzsKQEAgLTEzMCw2ICsxMzEsNyBAQCBpZCBDYWxsUmVzb3Vy
Y2VMb2FkRGVsZWdhdGUoSU1QLCBXZWJWaWV3CiBpZCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGUo
SU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkLCBOU0ludGVnZXIsIGlkKTsKIAogQk9PTCBDYWxs
UmVzb3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wsIElNUCwgV2ViVmlldyAq
LCBTRUwsIGlkLCBpZCk7CitCT09MIENhbGxSZXNvdXJjZUxvYWREZWxlZ2F0ZVJldHVybmluZ0Jv
b2xlYW4oQk9PTCwgSU1QLCBXZWJWaWV3ICosIFNFTCwgaWQsIGlkLCBpZCk7CiAKIGlkIENhbGxT
Y3JpcHREZWJ1Z0RlbGVnYXRlKElNUCwgV2ViVmlldyAqLCBTRUwsIGlkLCBpZCwgTlNJbnRlZ2Vy
LCBpZCk7CiBpZCBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShJTVAsIFdlYlZpZXcgKiwgU0VMLCBp
ZCwgTlNJbnRlZ2VyLCBpZCwgTlNJbnRlZ2VyLCBpZCk7CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hpbmcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoaW5nLm1tCShyZXZp
c2lvbiA1ODQxMykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDYgKzU0NywxOCBAQCBCT09MIENh
bGxSZXNvdXJjZUxvYWREZWxlZ2F0ZVJldHVybmluZ0JvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAorQk9PTCBDYWxsUmVzb3VyY2VMb2FkRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFuKEJPT0wgcmVz
dWx0LCBJTVAgaW1wbGVtZW50YXRpb24sIFdlYlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQg
b2JqZWN0MSwgaWQgb2JqZWN0MiwgaWQgb2JqZWN0MykKK3sKKyAgICBpZiAoIXNlbGYtPl9wcml2
YXRlLT5jYXRjaGVzRGVsZWdhdGVFeGNlcHRpb25zKQorICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxCT09MICgqKShpZCwgU0VMLCBXZWJWaWV3ICosIGlkLCBpZCwgaWQpPihvYmpjX21z
Z1NlbmQpKHNlbGYtPl9wcml2YXRlLT5yZXNvdXJjZVByb2dyZXNzRGVsZWdhdGUsIHNlbGVjdG9y
LCBzZWxmLCBvYmplY3QxLCBvYmplY3QyLCBvYmplY3QzKTsKKyAgICBAdHJ5IHsKKyAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qk9PTCAoKikoaWQsIFNFTCwgV2ViVmlldyAqLCBpZCwg
aWQsIGlkKT4ob2JqY19tc2dTZW5kKShzZWxmLT5fcHJpdmF0ZS0+cmVzb3VyY2VQcm9ncmVzc0Rl
bGVnYXRlLCBzZWxlY3Rvciwgc2VsZiwgb2JqZWN0MSwgb2JqZWN0Miwgb2JqZWN0Myk7CisgICAg
fSBAY2F0Y2goaWQgZXhjZXB0aW9uKSB7CisgICAgICAgIFJlcG9ydERpc2NhcmRlZERlbGVnYXRl
RXhjZXB0aW9uKHNlbGVjdG9yLCBleGNlcHRpb24pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiBpZCBDYWxsU2NyaXB0RGVidWdEZWxlZ2F0ZShJTVAgaW1wbGVtZW50YXRpb24sIFdl
YlZpZXcgKnNlbGYsIFNFTCBzZWxlY3RvciwgaWQgb2JqZWN0MSwgaWQgb2JqZWN0MiwgTlNJbnRl
Z2VyIGludGVnZXIsIGlkIG9iamVjdDMpCiB7CiAgICAgcmV0dXJuIENhbGxEZWxlZ2F0ZShpbXBs
ZW1lbnRhdGlvbiwgc2VsZiwgc2VsZi0+X3ByaXZhdGUtPnNjcmlwdERlYnVnRGVsZWdhdGUsIHNl
bGVjdG9yLCBvYmplY3QxLCBvYmplY3QyLCBpbnRlZ2VyLCBvYmplY3QzKTsKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZVByaXZhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGVQcml2YXRlLmgJ
KHJldmlzaW9uIDU4NDEzKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlJlc291cmNlTG9hZERl
bGVnYXRlUHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNCBAQCBAaW50ZXJm
YWNlIE5TT2JqZWN0IChXZWJSZXNvdXJjZUxvYWREZWxlCiAtICh2b2lkKXdlYlZpZXc6KFdlYlZp
ZXcgKil3ZWJWaWV3IGRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTooTlNVUkxSZXF1ZXN0
ICopcmVxdWVzdCByZXNwb25zZTooTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlIGxlbmd0aDooV2Vi
TlNJbnRlZ2VyKWxlbmd0aCBmcm9tRGF0YVNvdXJjZTooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3Vy
Y2U7CiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3IHJlc291cmNlOihpZClpZGVu
dGlmaWVyIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlRm9yRGF0YVNvdXJjZTooV2ViRGF0YVNv
dXJjZSAqKWRhdGFTb3VyY2U7CiAKKy8qIQorIEBtZXRob2Qgd2ViVmlldzpyZXNvdXJjZTpjYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOmZvckRhdGFTb3VyY2U6CisgQGFic3Ry
YWN0IEluc3BlY3QgYW4gTlNVUkxQcm90ZWN0aW9uU3BhY2UgYmVmb3JlIGFuIGF1dGhlbnRpY2F0
aW9uIGF0dGVtcHQgaXMgbWFkZQorIEBwYXJhbSBwcm90ZWN0aW9uU3BhY2UgYW4gTlNVUkxQcm90
ZWN0aW9uU3BhY2UgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYW4gYXV0aGVudGljYXRp
b24gY2hhbGxlbmdlCisgQHJlc3VsdCBSZXR1cm4gWUVTIGlmIHRoZSByZXNvdXJjZSBsb2FkIGRl
bGVnYXRlIGlzIHByZXBhcmVkIHRvIHJlc3BvbmQgdG8gYW4gYXV0aGVudGljYXRpb24gY2hhbGxl
bmdlIGdlbmVyYXRlZCB3aXRoIHByb3RlY3Rpb25TcGFjZSwgTk8gb3RoZXJ3aXNlCisgKi8KKy0g
KEJPT0wpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciByZXNvdXJjZTooaWQpaWRlbnRpZmllciBj
YW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlOihOU1VSTFByb3RlY3Rpb25TcGFj
ZSAqKXByb3RlY3Rpb25TcGFjZSBmb3JEYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNv
dXJjZTsKKwogQGVuZAogCiAjdW5kZWYgV2ViTlNJbnRlZ2VyCkluZGV4OiBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkocmV2aXNpb24gNTg0MTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTM3Nyw2ICsxMzc3LDcgQEAgLSAodm9pZClfY2FjaGVSZXNvdXJj
ZUxvYWREZWxlZ2F0ZUltcGxlbQogICAgIGNhY2hlLT5kaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFT
b3VyY2VGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0b3Iod2ViVmlldzpyZXNvdXJj
ZTpkaWRGaW5pc2hMb2FkaW5nRnJvbURhdGFTb3VyY2U6KSk7CiAgICAgY2FjaGUtPmRpZExvYWRS
ZXNvdXJjZUZyb21NZW1vcnlDYWNoZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rv
cih3ZWJWaWV3OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZTpyZXNwb25zZTpsZW5ndGg6
ZnJvbURhdGFTb3VyY2U6KSk7CiAgICAgY2FjaGUtPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUZ1bmMgPSBnZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291
cmNlOmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpmcm9tRGF0YVNvdXJjZTopKTsK
KyAgICBjYWNoZS0+Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUZ1bmMgPSBn
ZXRNZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OnJlc291cmNlOmNhbkF1dGhlbnRp
Y2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2U6Zm9yRGF0YVNvdXJjZTopKTsKICAgICBjYWNoZS0+
ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGdW5jID0gZ2V0TWV0aG9kKGRlbGVnYXRlLCBAc2VsZWN0
b3Iod2ViVmlldzpyZXNvdXJjZTpkaWRSZWNlaXZlQ29udGVudExlbmd0aDpmcm9tRGF0YVNvdXJj
ZTopKTsKICAgICBjYWNoZS0+ZGlkUmVjZWl2ZVJlc3BvbnNlRnVuYyA9IGdldE1ldGhvZChkZWxl
Z2F0ZSwgQHNlbGVjdG9yKHdlYlZpZXc6cmVzb3VyY2U6ZGlkUmVjZWl2ZVJlc3BvbnNlOmZyb21E
YXRhU291cmNlOikpOwogICAgIGNhY2hlLT5pZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmMgPSBnZXRN
ZXRob2QoZGVsZWdhdGUsIEBzZWxlY3Rvcih3ZWJWaWV3OmlkZW50aWZpZXJGb3JJbml0aWFsUmVx
dWVzdDpmcm9tRGF0YVNvdXJjZTopKTsK
</data>
<flag name="review"
          id="38626"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>