<?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>98222</bug_id>
          
          <creation_ts>2012-10-02 18:18:41 -0700</creation_ts>
          <short_desc>Add Objective-C API for the InjectedBundle</short_desc>
          <delta_ts>2012-10-02 21:11:59 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>733287</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-02 18:18:41 -0700</bug_when>
    <thetext>Add Objective-C API for the InjectedBundle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733328</commentid>
    <comment_count>1</comment_count>
      <attachid>166801</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-02 20:28:05 -0700</bug_when>
    <thetext>Created attachment 166801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733333</commentid>
    <comment_count>2</comment_count>
      <attachid>166801</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-10-02 20:39:01 -0700</bug_when>
    <thetext>Comment on attachment 166801
Patch

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

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:52
&gt; ++ (void)_initializeSharedWithPrincipalClassInstance:(id&lt;WKWebProcessPlugInDelegate&gt;)principalClassInstance injectedBundle:(WebKit::InjectedBundle*)injectedBundle
&gt; +{
&gt; +    ASSERT_WITH_MESSAGE(!sharedInstance, &quot;+[WKWebProcessPlugIn _initializeSharedWithPrincipalClassInstance:injectedBundle:] called multiple times&quot;);
&gt; +
&gt; +    sharedInstance = [[self alloc] _initWithPrincipalClassInstance:principalClassInstance injectedBundle:injectedBundle];
&gt; +}

I think a better pattern for this singleton would be for the first call to the init instance method to set up the shared instance. Then you wouldn&apos;t need this method at all.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:37
&gt; +@interface WKWebProcessPlugIn ()
&gt; +{
&gt; +    RetainPtr&lt;id&lt;WKWebProcessPlugInDelegate&gt; &gt; _principalClassInstance;
&gt; +    RefPtr&lt;WebKit::InjectedBundle&gt; _injectedBundle;
&gt; +}

It looks like you&apos;re only using these from the .mm file, so you could just put them in the @implementation instead.

&gt; Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:94
&gt; +    // First check to see if the bundle has a WKBundleInitialize function.
&gt; +    WKBundleInitializeFunctionPtr initializeFunction = reinterpret_cast&lt;WKBundleInitializeFunctionPtr&gt;(CFBundleGetFunctionPointerForName([m_platformBundle _cfBundle], CFSTR(&quot;WKBundleInitialize&quot;)));
&gt; +    if (initializeFunction) {
&gt; +        initializeFunction(toAPI(this), toAPI(initializationUserData));
&gt; +        return true;
&gt; +    }
&gt; +    
&gt; +    // Otherwise, look to see if the bundle has a principal class
&gt; +    Class principalClass = [m_platformBundle principalClass];
&gt; +    if (!principalClass) {
&gt; +        WTFLogAlways(&quot;InjectedBundle::load failed - No initialize function or principal class found in the bundle executable.&quot;);
&gt;          return false;
&gt;      }
&gt;  

I think we should prefer the class first and the WKBundleInitialize call second.

&gt; Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:109
&gt; +    if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)])
&gt; +        [instance webProcessPlugInInitialize:[WKWebProcessPlugIn _shared]];

This makes me think that WKWebProcessPlugIn should really be called the WKWebProcessPlugInController, and the protocol should be the WKWebProcessPlugIn since that&apos;s what you actually implement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733334</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-02 20:42:26 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 166801 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166801&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:52
&gt; &gt; ++ (void)_initializeSharedWithPrincipalClassInstance:(id&lt;WKWebProcessPlugInDelegate&gt;)principalClassInstance injectedBundle:(WebKit::InjectedBundle*)injectedBundle
&gt; &gt; +{
&gt; &gt; +    ASSERT_WITH_MESSAGE(!sharedInstance, &quot;+[WKWebProcessPlugIn _initializeSharedWithPrincipalClassInstance:injectedBundle:] called multiple times&quot;);
&gt; &gt; +
&gt; &gt; +    sharedInstance = [[self alloc] _initWithPrincipalClassInstance:principalClassInstance injectedBundle:injectedBundle];
&gt; &gt; +}
&gt; 
&gt; I think a better pattern for this singleton would be for the first call to the init instance method to set up the shared instance. Then you wouldn&apos;t need this method at all.

Is there another example of someone doing that?  It seems really weird to me.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInInternal.h:37
&gt; &gt; +@interface WKWebProcessPlugIn ()
&gt; &gt; +{
&gt; &gt; +    RetainPtr&lt;id&lt;WKWebProcessPlugInDelegate&gt; &gt; _principalClassInstance;
&gt; &gt; +    RefPtr&lt;WebKit::InjectedBundle&gt; _injectedBundle;
&gt; &gt; +}
&gt; 
&gt; It looks like you&apos;re only using these from the .mm file, so you could just put them in the @implementation instead.

Yeah, I actually can&apos;t do this since it will break the fragile base class build.  I&apos;ll move them to a WKWebProcessPlugInData object like the rest of the API.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:94
&gt; &gt; +    // First check to see if the bundle has a WKBundleInitialize function.
&gt; &gt; +    WKBundleInitializeFunctionPtr initializeFunction = reinterpret_cast&lt;WKBundleInitializeFunctionPtr&gt;(CFBundleGetFunctionPointerForName([m_platformBundle _cfBundle], CFSTR(&quot;WKBundleInitialize&quot;)));
&gt; &gt; +    if (initializeFunction) {
&gt; &gt; +        initializeFunction(toAPI(this), toAPI(initializationUserData));
&gt; &gt; +        return true;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    // Otherwise, look to see if the bundle has a principal class
&gt; &gt; +    Class principalClass = [m_platformBundle principalClass];
&gt; &gt; +    if (!principalClass) {
&gt; &gt; +        WTFLogAlways(&quot;InjectedBundle::load failed - No initialize function or principal class found in the bundle executable.&quot;);
&gt; &gt;          return false;
&gt; &gt;      }
&gt; &gt;  
&gt; 
&gt; I think we should prefer the class first and the WKBundleInitialize call second.

I can&apos;t as that would break Safari.  principalClass almost always returns non-nil.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/mac/InjectedBundleMac.mm:109
&gt; &gt; +    if ([instance respondsToSelector:@selector(webProcessPlugInInitialize:)])
&gt; &gt; +        [instance webProcessPlugInInitialize:[WKWebProcessPlugIn _shared]];
&gt; 
&gt; This makes me think that WKWebProcessPlugIn should really be called the WKWebProcessPlugInController, and the protocol should be the WKWebProcessPlugIn since that&apos;s what you actually implement.

I&apos;ll rename it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733341</commentid>
    <comment_count>4</comment_count>
      <attachid>166804</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-02 21:07:35 -0700</bug_when>
    <thetext>Created attachment 166804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733343</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-02 21:11:59 -0700</bug_when>
    <thetext>Committed r130245: &lt;http://trac.webkit.org/changeset/130245&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166801</attachid>
            <date>2012-10-02 20:28:05 -0700</date>
            <delta_ts>2012-10-02 21:07:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98222-20121002202720.patch</filename>
            <type>text/plain</type>
            <size>30920</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDI0MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEyLTEwLTAyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIE9iamVjdGl2ZS1DIEFQSSBmb3Ig
dGhlIEluamVjdGVkQnVuZGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBza2VsZXRvbiBvZiB0aGUgT2JqZWN0aXZlLUMgQVBJIGZvciB0aGUgSW5q
ZWN0ZWRCdW5kbGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZCBuZXcgQVBJIGZpbGVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW4ubW06
IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW4gX2luaXRXaXRoUHJpbmNpcGFs
Q2xhc3NJbnN0YW5jZTppbmplY3RlZEJ1bmRsZTpdKToKKyAgICAgICAgKCtbV0tXZWJQcm9jZXNz
UGx1Z0luIF9pbml0aWFsaXplU2hhcmVkV2l0aFByaW5jaXBhbENsYXNzSW5zdGFuY2U6aW5qZWN0
ZWRCdW5kbGU6XSk6CisgICAgICAgIEluaXRpYWxpemF0aW9uIG1ldGhvZHMgZm9yIHRoZSBXS1dl
YlByb2Nlc3NQbHVnSW4gb2JqZWN0LiBUaGlzIG9iamVjdCB3aWxsIGFjdCBhcyB0aGUgV0tCdW5k
bGVSZWYKKyAgICAgICAgb2JqZWN0IGRvZXMgaW4gdGhlIEMtU1BJLgorICAgICAgICAoK1tXS1dl
YlByb2Nlc3NQbHVnSW4gX3NoYXJlZF0pOgorICAgICAgICBBY2Nlc3MgdGhlIHNoYXJlZCBpbnN0
YW5jZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luSW50ZXJuYWwuaDogQWRkZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisgICAgICAgIFN0b3JlIGFuIE5TQnVuZGxl
IHJhdGhlciB0aGFuIGEgQ0ZCdW5kbGVSZWYgYXMgdGhlIHBsYXRmb3JtIGJ1bmRsZS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9Jbmpl
Y3RlZEJ1bmRsZU1hYy5tbTogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMuY3BwLgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZTo6bG9hZCk6CisgICAgICAgIElmIGEgcHJpbmNpcGFsIGNsYXNzIGlz
IHByb3ZpZGVkIGFuZCBubyBXS0J1bmRsZUluaXRpYWxpemUgZnVuY3Rpb24gaXMgcHJlc2VudCBp
biB0aGUgYnVuZGxlLCB1c2UgdGhlIHByaW5jaXBhbCBjbGFzcworICAgICAgICBhcyB0aGUgaW5p
dGlhbGl6YXRpb24gcG9pbnQuIFRoZSBwcmluY2lwYWwgY2xhc3MgbXVzdCBjb25mb3JtIHRvIHRo
ZSBXS1dlYlByb2Nlc3NQbHVnSW5EZWxlZ2F0ZSBwcm90b2NvbCBhbmQgaWYgYQorICAgICAgICB3
ZWJQcm9jZXNzUGx1Z0luSW5pdGlhbGl6ZTogbWV0aG9kIGlzIHByZXNlbnQsIGl0IGlzIGNhbGxl
ZC4gCisKIDIwMTItMTAtMDIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXhlZCBhIGNyYXNoIHdoZW4gdGhlIGxvY2FsaXphdGlvbiBvcHRpb24gaXMgbm90IHBh
c3NlZCB0byB0aGUgd2ViIHByb2Nlc3MuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjk5ODcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQlCQzFERkVBNDEyQjMxRjg3MDA1REY3MzAgLyogV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkMxREZFQTIxMkIzMUY4NzAwNURGNzMwIC8qIFdlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyUHJveHkuaCAqLzsgfTsKIAkJQkMyMDRFRTIxMUM4M0U5ODAwOEYz
Mzc1IC8qIEluamVjdGVkQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMjA0RUUwMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRs
ZS5jcHAgKi87IH07CiAJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMDRF
RTExMUM4M0U5ODAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggKi87IH07Ci0JCUJDMjA0RUU2
MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUg
LyogSW5qZWN0ZWRCdW5kbGVNYWMuY3BwICovOyB9OworCQlCQzIwNEVFNjExQzgzRUE5MDA4RjMz
NzUgLyogSW5qZWN0ZWRCdW5kbGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5k
bGVNYWMubW0gKi87IH07CiAJCUJDMjA0RUVFMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzIwNEVF
OTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwICovOyB9OwogCQlCQzIwNEVFRjExQzgz
RUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMjA0RUVBMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMjA0RUYw
MTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNhc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjA0RUVCMTFDODNFQzgwMDhGMzM3NSAvKiBX
S0J1bmRsZUFQSUNhc3QuaCAqLzsgfTsKQEAgLTcwOSw2ICs3MDksOSBAQAogCQlCQzk1ODVDODEy
RjA5NUI4MDA3NTU4MjEgLyogV2ViR2VzdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTU4NUM3MTJGMDk1QjgwMDc1NTgyMSAvKiBX
ZWJHZXN0dXJlRXZlbnQuY3BwICovOyB9OwogCQlCQzk2M0Q2QjExM0REMTkyMDA1NzRCRTIgLyog
V2ViUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzk2M0Q2QTExM0REMTkyMDA1NzRCRTIgLyogV2ViUGFnZS5jcHAgKi87IH07CiAJCUJDOTYz
RDZFMTEzREQxQTUwMDU3NEJFMiAvKiBXZWJQYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5NjNENkQxMTNERDFBNTAwNTc0QkUyIC8qIFdl
YlBhZ2VNYWMubW0gKi87IH07CisJCUJDOTg5RDgxMTYxQTdFNUQwMDBENDZEMyAvKiBXS1dlYlBy
b2Nlc3NQbHVnSW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzk4OUQ3RjE2MUE3RTVCMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLm1tICov
OyB9OworCQlCQzk4OUQ4MjE2MUE3RTVEMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk4OUQ4MDE2
MUE3RTVDMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQlCQzk4OUQ4NTE2MUE5ODkwMDAwRDQ2RDMg
LyogV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTg5RDg0MTYxQTk4OEYwMDBENDZEMyAvKiBXS1dlYlBy
b2Nlc3NQbHVnSW5JbnRlcm5hbC5oICovOyB9OwogCQlCQzlCMzhBMTEwRjUzOEJFMDA0NDNBMTUg
LyogV2ViRnJhbWVQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM5QjM4OUYxMEY1MzhCRTAwNDQzQTE1IC8qIFdlYkZyYW1lUHJveHkuaCAqLzsg
fTsKIAkJQkM5RkE1MjAxNjBEM0I0MzAwNTRERjlBIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMzREU0Njgx
NUE5MTc2MzAwOEQyNkZDIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQlCQzlGQTUy
MjE2MEQ0QTBDMDA1NERGOUEgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk2N0UzNTE1
MEFCNUQ1MDBDNzMxNjkgLyogY29tLmFwcGxlLldlYktpdC5QbHVnaW5Qcm9jZXNzLnNiICovOyB9
OwpAQCAtMTY0Myw3ICsxNjQ2LDcgQEAKIAkJQkMxREZFQTMxMkIzMUY4NzAwNURGNzMwIC8qIFdl
Yk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjA0RUUwMTFDODNFOTgwMDhGMzM3NSAvKiBJbmpl
Y3RlZEJ1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmpl
Y3RlZEJ1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMjA0RUUxMTFD
ODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGVNYWMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVNYWMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUgLyog
SW5qZWN0ZWRCdW5kbGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBJbmplY3RlZEJ1bmRsZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyMDRFRTkxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMyMDRFRUExMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMjA0RUVCMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZUFQSUNhc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGVBUElDYXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzk0LDYgKzE3OTcsOSBAQAogCQlCQzk1ODVDNzEy
RjA5NUI4MDA3NTU4MjEgLyogV2ViR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDOTYzRDZBMTEzREQxOTIwMDU3NEJFMiAvKiBXZWJQYWdlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2UuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzk2M0Q2RDExM0REMUE1MDA1NzRCRTIgLyogV2ViUGFnZU1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBhZ2VNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTg5RDdGMTYxQTdFNUIwMDBENDZE
MyAvKiBXS1dlYlByb2Nlc3NQbHVnSW4ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDOTg5RDgwMTYxQTdFNUMwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDOTg5RDg0MTYxQTk4OEYwMDBENDZEMyAvKiBX
S1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzlCMzg5RjEwRjUzOEJFMDA0NDNBMTUgLyogV2ViRnJhbWVQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFtZVByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQTBFRjdEMTIzMzFFNzgwMDdEM0NGQiAvKiBXZWJVbmRvU3Rl
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJVbmRvU3RlcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EwRUY3RTEyMzMxRTc4MDA3RDNDRkIgLyogV2Vi
VW5kb1N0ZXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVW5k
b1N0ZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM1OSw3ICszMzY1LDcg
QEAKIAkJQkMyMDRFRTQxMUM4M0U5QzAwOEYzMzc1IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQkMyMDRFRTUxMUM4M0VBOTAwOEYzMzc1IC8q
IEluamVjdGVkQnVuZGxlTWFjLmNwcCAqLywKKwkJCQlCQzIwNEVFNTExQzgzRUE5MDA4RjMzNzUg
LyogSW5qZWN0ZWRCdW5kbGVNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zMzY4LDYgKzMzNzQsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlCQzIwNEVFODExQzgzRUI3MDA4RjMzNzUgLyog
YyAqLywKKwkJCQlCQzk4OUQ0NTE2MTgxNjkxMDAwRDQ2RDMgLyogbWFjICovLAogCQkJKTsKIAkJ
CXBhdGggPSBBUEk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzUxOCw2ICszNTI1
LDE2IEBACiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJQkM5ODlENDUxNjE4MTY5MTAwMEQ0NkQzIC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQkM5ODlEN0YxNjFBN0U1QjAwMEQ0NkQzIC8qIFdL
V2ViUHJvY2Vzc1BsdWdJbi5tbSAqLywKKwkJCQlCQzk4OUQ4MDE2MUE3RTVDMDAwRDQ2RDMgLyog
V0tXZWJQcm9jZXNzUGx1Z0luLmggKi8sCisJCQkJQkM5ODlEODQxNjFBOTg4RjAwMEQ0NkQzIC8q
IFdLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmggKi8sCisJCQkpOworCQkJcGF0aCA9IG1hYzsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDQUU5REVEMTYwQzA5NzQwMEEz
MzIxNyAvKiBXZWJQcm9jZXNzU2VydmljZUZvcldlYktpdERldmVsb3BtZW50ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTQyOTksNiArNDMxNiw4IEBACiAJ
CQkJQkM1OTU0ODkxNUM3ODY4NTAwRkQxRTNFIC8qIFdlYktpdDIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDREMzMDg4MTVGRDZBOEIwMDZCNjY5NSAvKiBXZWJQcm9jZXNzSW5pdGlhbGl6YXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREMzMDhDMTVGRDZDRDEwMDZCNjY5NSAvKiBXZWJQcm9j
ZXNzU2VydmljZUVudHJ5UG9pbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzk4OUQ4MjE2MUE3
RTVEMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
Qzk4OUQ4NTE2MUE5ODkwMDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtNDc3OCw3ICs0Nzk3LDcgQEAKIAkJCQk5MzVFRUJBMzEyNzc2MUQz
MDAzMzIyQjggLyogSW5qZWN0ZWRCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRUU3REM2MTI4QjY0NUQwMDk4MjdEQSAvKiBJbmplY3RlZEJ1bmRsZUNs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzQ5ODYxOTEyNEQxMEUyMDBEODM0RTEgLyog
SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDMjA0
RUU2MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlCQzIwNEVFNjExQzgzRUE5MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGVNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQzgxNDdENjEyRjY2RDMxMDA3QjJDMzIgLyogSW5qZWN0ZWRC
dW5kbGVOYXZpZ2F0aW9uQWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNEJFRUFDMTIw
QTBBNUYwMEZCQTBDNyAvKiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEyOTM1RTMxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNv
bnRleHRNZW51Q2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTE1NSw2ICs1MTc0LDcgQEAK
IAkJCQlDRDY3RDMwRTE1QzA4RjlBMDA4NDNBREYgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEQzMwODcxNUZENkE4
QjAwNkI2Njk1IC8qIFdlYlByb2Nlc3NJbml0aWFsaXphdGlvbi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUJDREMzMDhCMTVGRDZDRDEwMDZCNjY5NSAvKiBXZWJQcm9jZXNzU2VydmljZUVudHJ5UG9p
bnRzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQkM5ODlEODExNjFBN0U1RDAwMEQ0NkQzIC8qIFdL
V2ViUHJvY2Vzc1BsdWdJbi5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aAkocmV2aXNpb24gMTI5OTg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMCBA
QCB0eXBlZGVmIHN0cnVjdCBfR01vZHVsZSBHTW9kdWxlOwogI2luY2x1ZGUgPEVpbmEuaD4KICNl
bmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorT0JKQ19DTEFTUyBOU0J1bmRsZTsKKyNlbmRpZgor
CiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNs
YXNzIENvbm5lY3Rpb247CkBAIC01Niw3ICs2MCw3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiAjaWYgUExBVEZPUk0oTUFDKQotdHlwZWRlZiBDRkJ1bmRsZVJl
ZiBQbGF0Zm9ybUJ1bmRsZTsKK3R5cGVkZWYgTlNCdW5kbGUgKlBsYXRmb3JtQnVuZGxlOwogI2Vs
aWYgUExBVEZPUk0oV0lOKQogdHlwZWRlZiBITU9EVUxFIFBsYXRmb3JtQnVuZGxlOwogI2VsaWYg
UExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJ
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+Cisj
aW1wb3J0IDxXZWJLaXQyL1dLQmFzZS5oPgorCitAY2xhc3MgV0tXZWJQcm9jZXNzUGx1Z0luOwor
CitAcHJvdG9jb2wgV0tXZWJQcm9jZXNzUGx1Z0luRGVsZWdhdGUgPE5TT2JqZWN0PgorQG9wdGlv
bmFsCistICh2b2lkKXdlYlByb2Nlc3NQbHVnSW5Jbml0aWFsaXplOihXS1dlYlByb2Nlc3NQbHVn
SW4gKilwbHVnSW47CitAZW5kCisKK1dLX0VYUE9SVAorQGludGVyZmFjZSBXS1dlYlByb2Nlc3NQ
bHVnSW4gOiBOU09iamVjdAorQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbi5tbQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luLmgiCisKKyNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJ
bkludGVybmFsLmgiCisjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgorCitAaW1wbGVtZW50YXRp
b24gV0tXZWJQcm9jZXNzUGx1Z0luCisKKy0gKGlkKV9pbml0V2l0aFByaW5jaXBhbENsYXNzSW5z
dGFuY2U6KGlkPFdLV2ViUHJvY2Vzc1BsdWdJbkRlbGVnYXRlPilwcmluY2lwYWxDbGFzc0luc3Rh
bmNlIGluamVjdGVkQnVuZGxlOihXZWJLaXQ6OkluamVjdGVkQnVuZGxlKilpbmplY3RlZEJ1bmRs
ZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX3ByaW5jaXBhbENsYXNzSW5zdGFuY2UgPSBwcmluY2lwYWxDbGFz
c0luc3RhbmNlOworICAgIF9pbmplY3RlZEJ1bmRsZSA9IGluamVjdGVkQnVuZGxlOworICAgIHJl
dHVybiBzZWxmOworfQorCitzdGF0aWMgV0tXZWJQcm9jZXNzUGx1Z0luICpzaGFyZWRJbnN0YW5j
ZTsKKworKyAodm9pZClfaW5pdGlhbGl6ZVNoYXJlZFdpdGhQcmluY2lwYWxDbGFzc0luc3RhbmNl
OihpZDxXS1dlYlByb2Nlc3NQbHVnSW5EZWxlZ2F0ZT4pcHJpbmNpcGFsQ2xhc3NJbnN0YW5jZSBp
bmplY3RlZEJ1bmRsZTooV2ViS2l0OjpJbmplY3RlZEJ1bmRsZSopaW5qZWN0ZWRCdW5kbGUKK3sK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzaGFyZWRJbnN0YW5jZSwgIitbV0tXZWJQcm9jZXNz
UGx1Z0luIF9pbml0aWFsaXplU2hhcmVkV2l0aFByaW5jaXBhbENsYXNzSW5zdGFuY2U6aW5qZWN0
ZWRCdW5kbGU6XSBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKTsKKworICAgIHNoYXJlZEluc3RhbmNl
ID0gW1tzZWxmIGFsbG9jXSBfaW5pdFdpdGhQcmluY2lwYWxDbGFzc0luc3RhbmNlOnByaW5jaXBh
bENsYXNzSW5zdGFuY2UgaW5qZWN0ZWRCdW5kbGU6aW5qZWN0ZWRCdW5kbGVdOworfQorCisrIChX
S1dlYlByb2Nlc3NQbHVnSW4gKilfc2hhcmVkCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShz
aGFyZWRJbnN0YW5jZSwgIitbV0tXZWJQcm9jZXNzUGx1Z0luIF9zaGFyZWRdIGNhbGxlZCB3aXRo
b3V0IGZpcnN0IGNhbGxpbmcgK1tXS1dlYlByb2Nlc3NQbHVnSW4gX2luaXRpYWxpemVTaGFyZWRX
aXRoUHJpbmNpcGFsQ2xhc3NJbnN0YW5jZTppbmplY3RlZEJ1bmRsZTpdIik7CisgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlOworfQorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQ
bHVnSW5JbnRlcm5hbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgSW5qZWN0ZWRCdW5kbGU7Cit9CisKK0Bp
bnRlcmZhY2UgV0tXZWJQcm9jZXNzUGx1Z0luICgpCit7CisgICAgUmV0YWluUHRyPGlkPFdLV2Vi
UHJvY2Vzc1BsdWdJbkRlbGVnYXRlPiA+IF9wcmluY2lwYWxDbGFzc0luc3RhbmNlOworICAgIFJl
ZlB0cjxXZWJLaXQ6OkluamVjdGVkQnVuZGxlPiBfaW5qZWN0ZWRCdW5kbGU7Cit9CisKKysgKHZv
aWQpX2luaXRpYWxpemVTaGFyZWRXaXRoUHJpbmNpcGFsQ2xhc3NJbnN0YW5jZTooaWQ8V0tXZWJQ
cm9jZXNzUGx1Z0luRGVsZWdhdGU+KXByaW5jaXBhbENsYXNzSW5zdGFuY2UgaW5qZWN0ZWRCdW5k
bGU6KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGUqKWluamVjdGVkQnVuZGxlOworCisrIChXS1dlYlBy
b2Nlc3NQbHVnSW4gKilfc2hhcmVkOworCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0
ZWRCdW5kbGVNYWMuY3BwCShyZXZpc2lvbiAxMjk5ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotCi0jaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0
LmgiCi0jaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWJvb2wgSW5qZWN0ZWRCdW5kbGU6OmxvYWQo
QVBJT2JqZWN0KiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQotewotICAgIGlmIChtX3NhbmRib3hF
eHRlbnNpb24pIHsKLSAgICAgICAgaWYgKCFtX3NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWVQZXJt
YW5lbnRseSgpKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjps
b2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjb25zdW1lIGJ1bmRsZSBzYW5kYm94IGV4dGVuc2lvbiBm
b3IgWyVzXS5cbiIsIG1fcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IDA7Ci0gICAg
fQotICAgIAotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gaW5qZWN0ZWRCdW5kbGVQYXRoU3Ry
KEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVbmlDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnMoKSksIG1fcGF0aC5sZW5ndGgoKSkp
OwotICAgIGlmICghaW5qZWN0ZWRCdW5kbGVQYXRoU3RyKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgcGF0
aCBzdHJpbmcuXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IGJ1bmRsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxl
U3lzdGVtUGF0aCgwLCBpbmplY3RlZEJ1bmRsZVBhdGhTdHIuZ2V0KCksIGtDRlVSTFBPU0lYUGF0
aFN0eWxlLCBmYWxzZSkpOwotICAgIGlmICghYnVuZGxlVVJMKSB7Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUg
dXJsIGZyb20gdGhlIHBhdGggc3RyaW5nLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBtX3BsYXRmb3JtQnVuZGxlID0gQ0ZCdW5kbGVDcmVhdGUoMCwgYnVuZGxlVVJM
LmdldCgpKTsKLSAgICBpZiAoIW1fcGxhdGZvcm1CdW5kbGUpIHsKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgY3JlYXRlIHRoZSBi
dW5kbGUuXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAgICAgCi0gICAg
aWYgKCFDRkJ1bmRsZUxvYWRFeGVjdXRhYmxlKG1fcGxhdGZvcm1CdW5kbGUpKSB7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGxv
YWQgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgYnVuZGxlLlxuIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFs
aXplRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9u
UHRyPihDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUobV9wbGF0Zm9ybUJ1bmRsZSwg
Q0ZTVFIoIldLQnVuZGxlSW5pdGlhbGl6ZSIpKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplRnVuY3Rp
b24pIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQg
LSBDb3VsZCBub3QgZmluZCB0aGUgaW5pdGlhbGl6ZSBmdW5jdGlvbiBpbiB0aGUgYnVuZGxlIGV4
ZWN1dGFibGUuXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGluaXRp
YWxpemVGdW5jdGlvbih0b0FQSSh0aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjphY3RpdmF0ZU1h
Y0ZvbnRBc2NlbnRIYWNrKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRs
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQkocmV2aXNpb24gMTI5OTg3KQkoZnJvbSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRs
ZU1hYy5jcHA6MTI5OTg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmplY3Rl
ZEJ1bmRsZS5oIgorCisjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tC
dW5kbGVJbml0aWFsaXplLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGU6OmxvYWQoQVBJT2JqZWN0KiBpbml0aWFs
aXphdGlvblVzZXJEYXRhKQoreworICAgIGlmIChtX3NhbmRib3hFeHRlbnNpb24pIHsKKyAgICAg
ICAgaWYgKCFtX3NhbmRib3hFeHRlbnNpb24tPmNvbnN1bWVQZXJtYW5lbnRseSgpKSB7CisgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxk
IG5vdCBjb25zdW1lIGJ1bmRsZSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgWyVzXS5cbiIsIG1fcGF0
aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIG1fc2FuZGJveEV4dGVuc2lvbiA9IDA7CisgICAgfQorICAgIAorICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gaW5qZWN0ZWRCdW5kbGVQYXRoU3RyKEFkb3B0Q0YsIENGU3RyaW5n
Q3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4o
bV9wYXRoLmNoYXJhY3RlcnMoKSksIG1fcGF0aC5sZW5ndGgoKSkpOworICAgIGlmICghaW5qZWN0
ZWRCdW5kbGVQYXRoU3RyKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6
OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgcGF0aCBzdHJpbmcuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IGJ1bmRsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBpbmpl
Y3RlZEJ1bmRsZVBhdGhTdHIuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwor
ICAgIGlmICghYnVuZGxlVVJMKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5k
bGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgdXJsIGZyb20gdGhlIHBhdGgg
c3RyaW5nLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3BsYXRm
b3JtQnVuZGxlID0gQ0ZCdW5kbGVDcmVhdGUoMCwgYnVuZGxlVVJMLmdldCgpKTsKKyAgICBpZiAo
IW1fcGxhdGZvcm1CdW5kbGUpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRs
ZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgY3JlYXRlIHRoZSBidW5kbGUuXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKCFDRkJ1bmRsZUxvYWRF
eGVjdXRhYmxlKG1fcGxhdGZvcm1CdW5kbGUpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5q
ZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGxvYWQgdGhlIGV4ZWN1dGFibGUg
ZnJvbSB0aGUgYnVuZGxlLlxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXplRnVuY3Rpb24gPSByZWlu
dGVycHJldF9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9uUHRyPihDRkJ1bmRsZUdldEZ1
bmN0aW9uUG9pbnRlckZvck5hbWUobV9wbGF0Zm9ybUJ1bmRsZSwgQ0ZTVFIoIldLQnVuZGxlSW5p
dGlhbGl6ZSIpKSk7CisgICAgaWYgKCFpbml0aWFsaXplRnVuY3Rpb24pIHsKKyAgICAgICAgV1RG
TG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgZmluZCB0
aGUgaW5pdGlhbGl6ZSBmdW5jdGlvbiBpbiB0aGUgYnVuZGxlIGV4ZWN1dGFibGUuXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGluaXRpYWxpemVGdW5jdGlvbih0b0FQ
SSh0aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEluamVjdGVkQnVuZGxlOjphY3RpdmF0ZU1hY0ZvbnRBc2NlbnRIYWNrKCkK
K3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3RlZEJ1bmRsZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9JbmplY3Rl
ZEJ1bmRsZU1hYy5tbQkocmV2aXNpb24gMTI5OTg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDE4ICsyMywyNSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5o
IgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJJbmplY3RlZEJ1bmRsZS5oIgogCi0jaW5j
bHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCi0jaW5jbHVkZSAiV0tCdW5kbGVJbml0aWFsaXplLmgi
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2ltcG9ydCAiV0tCdW5kbGVBUElDYXN0LmgiCisjaW1wb3J0ICJXS0J1bmRsZUluaXRpYWxpemUu
aCIKKyNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmgiCisKKyNpbXBvcnQgPEZv
dW5kYXRpb24vTlNCdW5kbGUuaD4KKyNpbXBvcnQgPHN0ZGlvLmg+CisjaW1wb3J0IDx3dGYvUmV0
YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK0BpbnRlcmZhY2Ug
TlNCdW5kbGUgKFdLQXBwRGV0YWlscykKKy0gKENGQnVuZGxlUmVmKV9jZkJ1bmRsZTsKK0BlbmQK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGU6OmxvYWQoQVBJT2Jq
ZWN0KiBpbml0aWFsaXphdGlvblVzZXJEYXRhKQpAQCAtNTYsMjggKzYzLDUwIEBAIGJvb2wgSW5q
ZWN0ZWRCdW5kbGU6OmxvYWQoQVBJT2JqZWN0KiBpbmkKICAgICAKICAgICBSZXRhaW5QdHI8Q0ZV
UkxSZWY+IGJ1bmRsZVVSTChBZG9wdENGLCBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgw
LCBpbmplY3RlZEJ1bmRsZVBhdGhTdHIuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxz
ZSkpOwogICAgIGlmICghYnVuZGxlVVJMKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0
ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgdXJsIGZyb20gdGhl
IHBhdGggc3RyaW5nLlxuIik7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6
OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgdXJsIGZyb20gdGhlIHBhdGggc3Ry
aW5nLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbV9wbGF0Zm9ybUJ1
bmRsZSA9IENGQnVuZGxlQ3JlYXRlKDAsIGJ1bmRsZVVSTC5nZXQoKSk7CisgICAgbV9wbGF0Zm9y
bUJ1bmRsZSA9IFtbTlNCdW5kbGUgYWxsb2NdIGluaXRXaXRoVVJMOihOU1VSTCAqKWJ1bmRsZVVS
TC5nZXQoKV07CiAgICAgaWYgKCFtX3BsYXRmb3JtQnVuZGxlKSB7Ci0gICAgICAgIFdURkxvZ0Fs
d2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUg
YnVuZGxlLlxuIik7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQg
ZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgYnVuZGxlLiIpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgICAgICAKLSAgICBpZiAoIUNGQnVuZGxlTG9hZEV4ZWN1dGFibGUo
bV9wbGF0Zm9ybUJ1bmRsZSkpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRs
ZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBub3QgbG9hZCB0aGUgZXhlY3V0YWJsZSBmcm9tIHRoZSBi
dW5kbGUuXG4iKTsKKyAgICBpZiAoIVttX3BsYXRmb3JtQnVuZGxlIGxvYWRdKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGxv
YWQgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgYnVuZGxlLiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidW5kbGUgaGFz
IGEgV0tCdW5kbGVJbml0aWFsaXplIGZ1bmN0aW9uLgorICAgIFdLQnVuZGxlSW5pdGlhbGl6ZUZ1
bmN0aW9uUHRyIGluaXRpYWxpemVGdW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tCdW5kbGVJ
bml0aWFsaXplRnVuY3Rpb25QdHI+KENGQnVuZGxlR2V0RnVuY3Rpb25Qb2ludGVyRm9yTmFtZShb
bV9wbGF0Zm9ybUJ1bmRsZSBfY2ZCdW5kbGVdLCBDRlNUUigiV0tCdW5kbGVJbml0aWFsaXplIikp
KTsKKyAgICBpZiAoaW5pdGlhbGl6ZUZ1bmN0aW9uKSB7CisgICAgICAgIGluaXRpYWxpemVGdW5j
dGlvbih0b0FQSSh0aGlzKSwgdG9BUEkoaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gT3RoZXJ3aXNlLCBsb29rIHRvIHNl
ZSBpZiB0aGUgYnVuZGxlIGhhcyBhIHByaW5jaXBhbCBjbGFzcworICAgIENsYXNzIHByaW5jaXBh
bENsYXNzID0gW21fcGxhdGZvcm1CdW5kbGUgcHJpbmNpcGFsQ2xhc3NdOworICAgIGlmICghcHJp
bmNpcGFsQ2xhc3MpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9h
ZCBmYWlsZWQgLSBObyBpbml0aWFsaXplIGZ1bmN0aW9uIG9yIHByaW5jaXBhbCBjbGFzcyBmb3Vu
ZCBpbiB0aGUgYnVuZGxlIGV4ZWN1dGFibGUuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0ciBpbml0aWFsaXplRnVuY3Rp
b24gPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlSW5pdGlhbGl6ZUZ1bmN0aW9uUHRyPihDRkJ1
bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUobV9wbGF0Zm9ybUJ1bmRsZSwgQ0ZTVFIoIldL
QnVuZGxlSW5pdGlhbGl6ZSIpKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplRnVuY3Rpb24pIHsKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBu
b3QgZmluZCB0aGUgaW5pdGlhbGl6ZSBmdW5jdGlvbiBpbiB0aGUgYnVuZGxlIGV4ZWN1dGFibGUu
XG4iKTsKKyAgICBpZiAoIVtwcmluY2lwYWxDbGFzcyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3Rv
Y29sKFdLV2ViUHJvY2Vzc1BsdWdJbkRlbGVnYXRlKV0pIHsKKyAgICAgICAgV1RGTG9nQWx3YXlz
KCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBQcmluY2lwYWwgY2xhc3MgZG9lcyBub3Qg
Y29uZm9ybSB0byB0aGUgV0tXZWJQcm9jZXNzUGx1Z0luRGVsZWdhdGUgcHJvdG9jb2wuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplRnVuY3Rpb24odG9B
UEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAgICBpZDxXS1dlYlBy
b2Nlc3NQbHVnSW5EZWxlZ2F0ZT4gaW5zdGFuY2UgPSAoaWQ8V0tXZWJQcm9jZXNzUGx1Z0luRGVs
ZWdhdGU+KVtbcHJpbmNpcGFsQ2xhc3MgYWxsb2NdIGluaXRdOworICAgIGlmICghaW5zdGFuY2Up
IHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBD
b3VsZCBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIHRoZSBwcmluY2lwYWwgY2xhc3MuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBbV0tXZWJQcm9jZXNzUGx1Z0luIF9p
bml0aWFsaXplU2hhcmVkV2l0aFByaW5jaXBhbENsYXNzSW5zdGFuY2U6aW5zdGFuY2UgaW5qZWN0
ZWRCdW5kbGU6dGhpc107CisKKyAgICBpZiAoW2luc3RhbmNlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3Iod2ViUHJvY2Vzc1BsdWdJbkluaXRpYWxpemU6KV0pCisgICAgICAgIFtpbnN0YW5j
ZSB3ZWJQcm9jZXNzUGx1Z0luSW5pdGlhbGl6ZTpbV0tXZWJQcm9jZXNzUGx1Z0luIF9zaGFyZWRd
XTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166804</attachid>
            <date>2012-10-02 21:07:35 -0700</date>
            <delta_ts>2012-10-02 21:08:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98222-20121002210651.patch</filename>
            <type>text/plain</type>
            <size>30958</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDI0MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDEyLTEwLTAyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIE9iamVjdGl2ZS1DIEFQSSBmb3Ig
dGhlIEluamVjdGVkQnVuZGxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODIyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBza2VsZXRvbiBvZiB0aGUgT2JqZWN0aXZlLUMgQVBJIGZvciB0aGUgSW5q
ZWN0ZWRCdW5kbGUuCisKKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZCBuZXcgQVBJIGZpbGVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW4ubW06
IEFkZGVkLgorICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW4gX2luaXRXaXRoUHJpbmNpcGFs
Q2xhc3NJbnN0YW5jZTppbmplY3RlZEJ1bmRsZTpdKToKKyAgICAgICAgSW5pdGlhbGl6YXRpb24g
bWV0aG9kIGZvciB0aGUgV0tXZWJQcm9jZXNzUGx1Z0luIG9iamVjdC4gVGhpcyBvYmplY3Qgd2ls
bCBhY3QgYXMgdGhlIFdLQnVuZGxlUmVmCisgICAgICAgIG9iamVjdCBkb2VzIGluIHRoZSBDLVNQ
SS4KKyAgICAgICAgKCtbV0tXZWJQcm9jZXNzUGx1Z0luIF9zaGFyZWRdKToKKyAgICAgICAgQWNj
ZXNzIHRoZSBzaGFyZWQgaW5zdGFuY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmg6IEFkZGVkLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oOgorICAgICAg
ICBTdG9yZSBhbiBOU0J1bmRsZSByYXRoZXIgdGhhbiBhIENGQnVuZGxlUmVmIGFzIHRoZSBwbGF0
Zm9ybSBidW5kbGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL21hYy9J
bmplY3RlZEJ1bmRsZU1hYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW06IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLmNw
cC4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6OmxvYWQpOgorICAgICAgICBJZiBh
IHByaW5jaXBhbCBjbGFzcyBpcyBwcm92aWRlZCBhbmQgbm8gV0tCdW5kbGVJbml0aWFsaXplIGZ1
bmN0aW9uIGlzIHByZXNlbnQgaW4gdGhlIGJ1bmRsZSwgdXNlIHRoZSBwcmluY2lwYWwgY2xhc3MK
KyAgICAgICAgYXMgdGhlIGluaXRpYWxpemF0aW9uIHBvaW50LiBUaGUgcHJpbmNpcGFsIGNsYXNz
IG11c3QgY29uZm9ybSB0byB0aGUgV0tXZWJQcm9jZXNzUGx1Z0luIHByb3RvY29sIGFuZCBpZiBh
CisgICAgICAgIHdlYlByb2Nlc3NQbHVnSW5Jbml0aWFsaXplOiBtZXRob2QgaXMgcHJlc2VudCwg
aXQgaXMgY2FsbGVkLiAKKwogMjAxMi0xMC0wMiAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeGVkIGEgY3Jhc2ggd2hlbiB0aGUgbG9jYWxpemF0aW9uIG9wdGlv
biBpcyBub3QgcGFzc2VkIHRvIHRoZSB3ZWIgcHJvY2Vzcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyOTk4
NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBACiAJCUJDMURGRUE0MTJCMzFGODcwMDVE
RjczMCAvKiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzFERkVBMjEyQjMxRjg3MDA1REY3MzAg
LyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5oICovOyB9OwogCQlCQzIwNEVFMjEx
QzgzRTk4MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMDRFRTAxMUM4M0U5ODAwOEYzMzc1IC8qIElu
amVjdGVkQnVuZGxlLmNwcCAqLzsgfTsKIAkJQkMyMDRFRTMxMUM4M0U5ODAwOEYzMzc1IC8qIElu
amVjdGVkQnVuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzIwNEVFMTExQzgzRTk4MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUuaCAqLzsgfTsK
LQkJQkMyMDRFRTYxMUM4M0VBOTAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlTWFjLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjA0RUU1MTFDODNF
QTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5jcHAgKi87IH07CisJCUJDMjA0RUU2MTFD
ODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjA0RUU1MTFDODNFQTkwMDhGMzM3NSAvKiBJ
bmplY3RlZEJ1bmRsZU1hYy5tbSAqLzsgfTsKIAkJQkMyMDRFRUUxMUM4M0VDODAwOEYzMzc1IC8q
IFdLQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMjA0RUU5MTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5jcHAgKi87IH07CiAJCUJD
MjA0RUVGMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMDRFRUExMUM4M0VDODAwOEYzMzc1IC8qIFdL
QnVuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMyMDRFRjAxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlQVBJQ2FzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyMDRFRUIxMUM4M0VDODAw
OEYzMzc1IC8qIFdLQnVuZGxlQVBJQ2FzdC5oICovOyB9OwpAQCAtNzA5LDYgKzcwOSw5IEBACiAJ
CUJDOTU4NUM4MTJGMDk1QjgwMDc1NTgyMSAvKiBXZWJHZXN0dXJlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5NTg1QzcxMkYwOTVCODAw
NzU1ODIxIC8qIFdlYkdlc3R1cmVFdmVudC5jcHAgKi87IH07CiAJCUJDOTYzRDZCMTEzREQxOTIw
MDU3NEJFMiAvKiBXZWJQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDOTYzRDZBMTEzREQxOTIwMDU3NEJFMiAvKiBXZWJQYWdlLmNwcCAqLzsg
fTsKIAkJQkM5NjNENkUxMTNERDFBNTAwNTc0QkUyIC8qIFdlYlBhZ2VNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk2M0Q2RDExM0REMUE1MDA1
NzRCRTIgLyogV2ViUGFnZU1hYy5tbSAqLzsgfTsKKwkJQkM5ODlEODExNjFBN0U1RDAwMEQ0NkQz
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDOTg5RDdGMTYxQTdFNUIwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQ
bHVnSW4ubW0gKi87IH07CisJCUJDOTg5RDgyMTYxQTdFNUQwMDBENDZEMyAvKiBXS1dlYlByb2Nl
c3NQbHVnSW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDOTg5RDgwMTYxQTdFNUMwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW4uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCUJDOTg5RDg1MTYxQTk4
OTAwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5ODlEODQxNjFBOTg4RjAwMEQ0NkQz
IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmggKi87IH07CiAJCUJDOUIzOEExMTBGNTM4
QkUwMDQ0M0ExNSAvKiBXZWJGcmFtZVByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlCMzg5RjEwRjUzOEJFMDA0NDNBMTUgLyogV2ViRnJhbWVQ
cm94eS5oICovOyB9OwogCQlCQzlGQTUyMDE2MEQzQjQzMDA1NERGOUEgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzNERTQ2ODE1QTkxNzYzMDA4RDI2RkMgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07
CiAJCUJDOUZBNTIyMTYwRDRBMEMwMDU0REY5QSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblBy
b2Nlc3Muc2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxOTY3RTM1MTUwQUI1RDUwMEM3MzE2OSAvKiBjb20uYXBwbGUuV2ViS2l0LlBsdWdpblByb2Nl
c3Muc2IgKi87IH07CkBAIC0xNjQzLDcgKzE2NDYsNyBAQAogCQlCQzFERkVBMzEyQjMxRjg3MDA1
REY3MzAgLyogV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyMDRFRTAxMUM4M0U5ODAwOEYz
Mzc1IC8qIEluamVjdGVkQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMyMDRFRTExMUM4M0U5ODAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUJDMjA0RUU1MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1h
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZEJ1bmRs
ZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDMjA0RUU1MTFDODNFQTkw
MDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEluamVjdGVkQnVuZGxlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzIwNEVFOTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzIwNEVFQTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tCdW5kbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyMDRFRUIxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxl
QVBJQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZUFQSUNh
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3OTQsNiArMTc5Nyw5IEBACiAJ
CUJDOTU4NUM3MTJGMDk1QjgwMDc1NTgyMSAvKiBXZWJHZXN0dXJlRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR2VzdHVyZUV2ZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5NjNENkExMTNERDE5MjAwNTc0QkUyIC8qIFdlYlBh
Z2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOTYzRDZEMTEzREQxQTUwMDU3NEJFMiAv
KiBXZWJQYWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViUGFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5ODlEN0YxNjFB
N0U1QjAwMEQ0NkQzIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViUHJvY2Vzc1BsdWdJbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQkM5ODlEODAxNjFBN0U1QzAwMEQ0NkQzIC8qIFdLV2ViUHJvY2Vz
c1BsdWdJbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlByb2Nlc3NQ
bHVnSW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM5ODlEODQxNjFBOTg4RjAw
MEQ0NkQzIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJvY2Vzc1BsdWdJbkludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDOUIzODlGMTBGNTM4QkUwMDQ0M0ExNSAvKiBXZWJGcmFtZVBy
b3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkZyYW1lUHJveHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMEVGN0QxMjMzMUU3ODAwN0QzQ0ZCIC8q
IFdlYlVuZG9TdGVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9T
dGVwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTBFRjdFMTIzMzFFNzgwMDdE
M0NGQiAvKiBXZWJVbmRvU3RlcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJVbmRvU3RlcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzU5
LDcgKzMzNjUsNyBAQAogCQlCQzIwNEVFNDExQzgzRTlDMDA4RjMzNzUgLyogbWFjICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCQzIwNEVFNTExQzgzRUE5
MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGVNYWMuY3BwICovLAorCQkJCUJDMjA0RUU1MTFDODNF
QTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZU1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTMzNjgsNiArMzM3NCw3IEBACiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDMjA0RUU4MTFDODNFQjcw
MDhGMzM3NSAvKiBjICovLAorCQkJCUJDOTg5RDQ1MTYxODE2OTEwMDBENDZEMyAvKiBtYWMgKi8s
CiAJCQkpOwogCQkJcGF0aCA9IEFQSTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0z
NTE4LDYgKzM1MjUsMTYgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQlCQzk4OUQ0NTE2MTgxNjkxMDAwRDQ2RDMgLyogbWFjICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCQzk4OUQ3RjE2MUE3RTVCMDAw
RDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLm1tICovLAorCQkJCUJDOTg5RDgwMTYxQTdFNUMw
MDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW4uaCAqLywKKwkJCQlCQzk4OUQ4NDE2MUE5ODhG
MDAwRDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gbWFjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQkNBRTlERUQx
NjBDMDk3NDAwQTMzMjE3IC8qIFdlYlByb2Nlc3NTZXJ2aWNlRm9yV2ViS2l0RGV2ZWxvcG1lbnQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNDI5OSw2ICs0
MzE2LDggQEAKIAkJCQlCQzU5NTQ4OTE1Qzc4Njg1MDBGRDFFM0UgLyogV2ViS2l0Mi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNEQzMwODgxNUZENkE4QjAwNkI2Njk1IC8qIFdlYlByb2Nlc3NJbml0
aWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEQzMwOEMxNUZENkNEMTAwNkI2Njk1
IC8qIFdlYlByb2Nlc3NTZXJ2aWNlRW50cnlQb2ludHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
OTg5RDgyMTYxQTdFNUQwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW4uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUJDOTg5RDg1MTYxQTk4OTAwMDBENDZEMyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5J
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00Nzc4LDcgKzQ3OTcsNyBAQAogCQkJCTkzNUVF
QkEzMTI3NzYxRDMwMDMzMjJCOCAvKiBJbmplY3RlZEJ1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFRTdEQzYxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVj
dGVkQnVuZGxlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDk4NjE5MTI0RDEwRTIw
MEQ4MzRFMSAvKiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJQkMyMDRFRTYxMUM4M0VBOTAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlTWFjLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUJDMjA0RUU2MTFDODNFQTkwMDhGMzM3NSAvKiBJbmplY3RlZEJ1
bmRsZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDODE0N0Q2MTJGNjZEMzEwMDdCMkMzMiAv
KiBJbmplY3RlZEJ1bmRsZU5hdmlnYXRpb25BY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM0QkVFQUMxMjBBMEE1RjAwRkJBMEM3IC8qIEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTI5MzVFMzEyODhEOTc4MDBBNEI2OTUgLyogSW5qZWN0ZWRC
dW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC01MTU1LDYg
KzUxNzQsNyBAQAogCQkJCUNENjdEMzBFMTVDMDhGOUEwMDg0M0FERiAvKiBJbmplY3RlZEJ1bmRs
ZVBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RD
MzA4NzE1RkQ2QThCMDA2QjY2OTUgLyogV2ViUHJvY2Vzc0luaXRpYWxpemF0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNEQzMwOEIxNUZENkNEMTAwNkI2Njk1IC8qIFdlYlByb2Nlc3NTZXJ2
aWNlRW50cnlQb2ludHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlCQzk4OUQ4MTE2MUE3RTVEMDAw
RDQ2RDMgLyogV0tXZWJQcm9jZXNzUGx1Z0luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5oCShyZXZpc2lvbiAxMjk5ODcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDYgKzQ3LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9HTW9kdWxlIEdNb2R1bGU7CiAjaW5jbHVkZSA8
RWluYS5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCitPQkpDX0NMQVNTIE5TQnVuZGxl
OworI2VuZGlmCisKIG5hbWVzcGFjZSBDb3JlSVBDIHsKICAgICBjbGFzcyBBcmd1bWVudERlY29k
ZXI7CiAgICAgY2xhc3MgQ29ubmVjdGlvbjsKQEAgLTU2LDcgKzYwLDcgQEAgbmFtZXNwYWNlIENv
cmVJUEMgewogbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBQTEFURk9STShNQUMpCi10eXBlZGVm
IENGQnVuZGxlUmVmIFBsYXRmb3JtQnVuZGxlOwordHlwZWRlZiBOU0J1bmRsZSAqUGxhdGZvcm1C
dW5kbGU7CiAjZWxpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhNT0RVTEUgUGxhdGZvcm1CdW5k
bGU7CiAjZWxpZiBQTEFURk9STShRVCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKyNpbXBvcnQgPFdlYktpdDIvV0tCYXNlLmg+CisKK0BjbGFzcyBXS1dlYlByb2Nl
c3NQbHVnSW5Db250cm9sbGVyOworCitAcHJvdG9jb2wgV0tXZWJQcm9jZXNzUGx1Z0luIDxOU09i
amVjdD4KK0BvcHRpb25hbAorLSAodm9pZCl3ZWJQcm9jZXNzUGx1Z0luSW5pdGlhbGl6ZTooV0tX
ZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciAqKXBsdWdJbkNvbnRyb2xsZXI7CitAZW5kCisKK1dL
X0VYUE9SVAorQGludGVyZmFjZSBXS1dlYlByb2Nlc3NQbHVnSW5Db250cm9sbGVyIDogTlNPYmpl
Y3QgeworQHByaXZhdGUKKyAgICB2b2lkICpfcHJpdmF0ZTsKK30KKworQGVuZApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vz
c1BsdWdJbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luLm1tCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJv
Y2Vzc1BsdWdJbi5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luLmgiCisKKyNp
bXBvcnQgIkluamVjdGVkQnVuZGxlLmgiCisjaW1wb3J0ICJXS1dlYlByb2Nlc3NQbHVnSW5JbnRl
cm5hbC5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitzdHJ1Y3QgV0tXZWJQcm9jZXNz
UGx1Z0luQ29udHJvbGxlckRhdGEgeworICAgIFJldGFpblB0cjxpZDxXS1dlYlByb2Nlc3NQbHVn
SW4+ID4gX3ByaW5jaXBhbENsYXNzSW5zdGFuY2U7CisgICAgUmVmUHRyPFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGU+IF9pbmplY3RlZEJ1bmRsZTsKK307CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYlBy
b2Nlc3NQbHVnSW5Db250cm9sbGVyIChJbnRlcm5hbCkKKworc3RhdGljIFdLV2ViUHJvY2Vzc1Bs
dWdJbkNvbnRyb2xsZXIgKnNoYXJlZEluc3RhbmNlOworCisrIChXS1dlYlByb2Nlc3NQbHVnSW5D
b250cm9sbGVyICopX3NoYXJlZAoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2hhcmVkSW5z
dGFuY2UsICIrW1dLV2ViUHJvY2Vzc1BsdWdJbiBfc2hhcmVkXSBjYWxsZWQgd2l0aG91dCBmaXJz
dCBpbml0aWFsaXppbmcgaXQuIik7CisgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOworfQorCist
IChpZClfaW5pdFdpdGhQcmluY2lwYWxDbGFzc0luc3RhbmNlOihpZDxXS1dlYlByb2Nlc3NQbHVn
SW4+KXByaW5jaXBhbENsYXNzSW5zdGFuY2UgaW5qZWN0ZWRCdW5kbGU6KFdlYktpdDo6SW5qZWN0
ZWRCdW5kbGUqKWluamVjdGVkQnVuZGxlCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfcHJpdmF0ZSA9IG5ldyBX
S1dlYlByb2Nlc3NQbHVnSW5Db250cm9sbGVyRGF0YTsKKyAgICBzdGF0aWNfY2FzdDxXS1dlYlBy
b2Nlc3NQbHVnSW5Db250cm9sbGVyRGF0YSo+KF9wcml2YXRlKS0+X3ByaW5jaXBhbENsYXNzSW5z
dGFuY2UgPSBwcmluY2lwYWxDbGFzc0luc3RhbmNlOworICAgIHN0YXRpY19jYXN0PFdLV2ViUHJv
Y2Vzc1BsdWdJbkNvbnRyb2xsZXJEYXRhKj4oX3ByaXZhdGUpLT5faW5qZWN0ZWRCdW5kbGUgPSBp
bmplY3RlZEJ1bmRsZTsKKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNoYXJlZEluc3RhbmNl
LCAiV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciBpbml0aWFsaXplZCBtdWx0aXBsZSB0aW1l
cy4iKTsKKyAgICBzaGFyZWRJbnN0YW5jZSA9IHNlbGY7CisKKyAgICByZXR1cm4gc2VsZjsKK30K
KworLSAodm9pZClkZWFsbG9jCit7CisgICAgZGVsZXRlIHN0YXRpY19jYXN0PFdLV2ViUHJvY2Vz
c1BsdWdJbkNvbnRyb2xsZXJEYXRhKj4oX3ByaXZhdGUpOworICAgIFtzdXBlciBkZWFsbG9jXTsK
K30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxl
cgorCitAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNz
UGx1Z0luSW50ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV0tXZWJQ
cm9jZXNzUGx1Z0luLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgSW5qZWN0ZWRCdW5k
bGU7Cit9CisKK0BpbnRlcmZhY2UgV0tXZWJQcm9jZXNzUGx1Z0luQ29udHJvbGxlciAoSW50ZXJu
YWwpCisKKysgKFdLV2ViUHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIgKilfc2hhcmVkOworLSAoaWQp
X2luaXRXaXRoUHJpbmNpcGFsQ2xhc3NJbnN0YW5jZTooaWQ8V0tXZWJQcm9jZXNzUGx1Z0luPilw
cmluY2lwYWxDbGFzc0luc3RhbmNlIGluamVjdGVkQnVuZGxlOihXZWJLaXQ6OkluamVjdGVkQnVu
ZGxlKilpbmplY3RlZEJ1bmRsZTsKKworQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVk
QnVuZGxlTWFjLmNwcAkocmV2aXNpb24gMTI5OTg3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIKLQotI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5o
IgotI2luY2x1ZGUgIldLQnVuZGxlSW5pdGlhbGl6ZS5oIgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1ib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQ
SU9iamVjdCogaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKLXsKLSAgICBpZiAobV9zYW5kYm94RXh0
ZW5zaW9uKSB7Ci0gICAgICAgIGlmICghbV9zYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lUGVybWFu
ZW50bHkoKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9h
ZCBmYWlsZWQgLSBDb3VsZCBub3QgY29uc3VtZSBidW5kbGUgc2FuZGJveCBleHRlbnNpb24gZm9y
IFslc10uXG4iLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSAwOwotICAgIH0K
LSAgICAKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGluamVjdGVkQnVuZGxlUGF0aFN0cihB
ZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVW5pQ2hhcio+KG1fcGF0aC5jaGFyYWN0ZXJzKCkpLCBtX3BhdGgubGVuZ3RoKCkpKTsK
LSAgICBpZiAoIWluamVjdGVkQnVuZGxlUGF0aFN0cikgewotICAgICAgICBXVEZMb2dBbHdheXMo
IkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHBhdGgg
c3RyaW5nLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBidW5kbGVVUkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5
c3RlbVBhdGgoMCwgaW5qZWN0ZWRCdW5kbGVQYXRoU3RyLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhT
dHlsZSwgZmFsc2UpKTsKLSAgICBpZiAoIWJ1bmRsZVVSTCkgewotICAgICAgICBXVEZMb2dBbHdh
eXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHVy
bCBmcm9tIHRoZSBwYXRoIHN0cmluZy5cbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbV9wbGF0Zm9ybUJ1bmRsZSA9IENGQnVuZGxlQ3JlYXRlKDAsIGJ1bmRsZVVSTC5n
ZXQoKSk7Ci0gICAgaWYgKCFtX3BsYXRmb3JtQnVuZGxlKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgYnVu
ZGxlLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGlm
ICghQ0ZCdW5kbGVMb2FkRXhlY3V0YWJsZShtX3BsYXRmb3JtQnVuZGxlKSkgewotICAgICAgICBX
VEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBsb2Fk
IHRoZSBleGVjdXRhYmxlIGZyb20gdGhlIGJ1bmRsZS5cbiIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgV0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIgaW5pdGlhbGl6
ZUZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0
cj4oQ0ZCdW5kbGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKG1fcGxhdGZvcm1CdW5kbGUsIENG
U1RSKCJXS0J1bmRsZUluaXRpYWxpemUiKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZUZ1bmN0aW9u
KSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0g
Q291bGQgbm90IGZpbmQgdGhlIGluaXRpYWxpemUgZnVuY3Rpb24gaW4gdGhlIGJ1bmRsZSBleGVj
dXRhYmxlLlxuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbml0aWFs
aXplRnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNG
b250QXNjZW50SGFjaygpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0JKHJldmlzaW9uIDEyOTk4NykJKGZyb20gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVN
YWMuY3BwOjEyOTk4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGUuaCIKKworI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQnVu
ZGxlSW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pdGlhbGl6
YXRpb25Vc2VyRGF0YSkKK3sKKyAgICBpZiAobV9zYW5kYm94RXh0ZW5zaW9uKSB7CisgICAgICAg
IGlmICghbV9zYW5kYm94RXh0ZW5zaW9uLT5jb25zdW1lUGVybWFuZW50bHkoKSkgeworICAgICAg
ICAgICAgV1RGTG9nQWx3YXlzKCJJbmplY3RlZEJ1bmRsZTo6bG9hZCBmYWlsZWQgLSBDb3VsZCBu
b3QgY29uc3VtZSBidW5kbGUgc2FuZGJveCBleHRlbnNpb24gZm9yIFslc10uXG4iLCBtX3BhdGgu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBtX3NhbmRib3hFeHRlbnNpb24gPSAwOworICAgIH0KKyAgICAKKyAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IGluamVjdGVkQnVuZGxlUGF0aFN0cihBZG9wdENGLCBDRlN0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KG1f
cGF0aC5jaGFyYWN0ZXJzKCkpLCBtX3BhdGgubGVuZ3RoKCkpKTsKKyAgICBpZiAoIWluamVjdGVk
QnVuZGxlUGF0aFN0cikgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjps
b2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHBhdGggc3RyaW5nLlxuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBi
dW5kbGVVUkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgaW5qZWN0
ZWRCdW5kbGVQYXRoU3RyLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKKyAg
ICBpZiAoIWJ1bmRsZVVSTCkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxl
Ojpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHVybCBmcm9tIHRoZSBwYXRoIHN0
cmluZy5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9wbGF0Zm9y
bUJ1bmRsZSA9IENGQnVuZGxlQ3JlYXRlKDAsIGJ1bmRsZVVSTC5nZXQoKSk7CisgICAgaWYgKCFt
X3BsYXRmb3JtQnVuZGxlKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6
OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGNyZWF0ZSB0aGUgYnVuZGxlLlxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICghQ0ZCdW5kbGVMb2FkRXhl
Y3V0YWJsZShtX3BsYXRmb3JtQnVuZGxlKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVj
dGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBsb2FkIHRoZSBleGVjdXRhYmxlIGZy
b20gdGhlIGJ1bmRsZS5cbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
V0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIgaW5pdGlhbGl6ZUZ1bmN0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDxXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0cj4oQ0ZCdW5kbGVHZXRGdW5j
dGlvblBvaW50ZXJGb3JOYW1lKG1fcGxhdGZvcm1CdW5kbGUsIENGU1RSKCJXS0J1bmRsZUluaXRp
YWxpemUiKSkpOworICAgIGlmICghaW5pdGlhbGl6ZUZ1bmN0aW9uKSB7CisgICAgICAgIFdURkxv
Z0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGZpbmQgdGhl
IGluaXRpYWxpemUgZnVuY3Rpb24gaW4gdGhlIGJ1bmRsZSBleGVjdXRhYmxlLlxuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbml0aWFsaXplRnVuY3Rpb24odG9BUEko
dGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBJbmplY3RlZEJ1bmRsZTo6YWN0aXZhdGVNYWNGb250QXNjZW50SGFjaygpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRCdW5kbGVNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9tYWMvSW5qZWN0ZWRC
dW5kbGVNYWMubW0JKHJldmlzaW9uIDEyOTk4NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvbWFjL0luamVjdGVkQnVuZGxlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMywxOCArMjMsMjUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGUuaCIK
KyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSW5qZWN0ZWRCdW5kbGUuaCIKIAotI2luY2x1
ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldLQnVuZGxlSW5pdGlhbGl6ZS5oIgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNp
bXBvcnQgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2ltcG9ydCAiV0tCdW5kbGVJbml0aWFsaXplLmgi
CisjaW1wb3J0ICJXS1dlYlByb2Nlc3NQbHVnSW5JbnRlcm5hbC5oIgorCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL05TQnVuZGxlLmg+CisjaW1wb3J0IDxzdGRpby5oPgorI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2ltcG9ydCA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitAaW50ZXJmYWNlIE5T
QnVuZGxlIChXS0FwcERldGFpbHMpCistIChDRkJ1bmRsZVJlZilfY2ZCdW5kbGU7CitAZW5kCisK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29sIEluamVjdGVkQnVuZGxlOjpsb2FkKEFQSU9iamVj
dCogaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKQEAgLTU2LDI4ICs2Myw1MSBAQCBib29sIEluamVj
dGVkQnVuZGxlOjpsb2FkKEFQSU9iamVjdCogaW5pCiAgICAgCiAgICAgUmV0YWluUHRyPENGVVJM
UmVmPiBidW5kbGVVUkwoQWRvcHRDRiwgQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwg
aW5qZWN0ZWRCdW5kbGVQYXRoU3RyLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2Up
KTsKICAgICBpZiAoIWJ1bmRsZVVSTCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVk
QnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHVybCBmcm9tIHRoZSBw
YXRoIHN0cmluZy5cbiIpOworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjps
b2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIHVybCBmcm9tIHRoZSBwYXRoIHN0cmlu
Zy4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1fcGxhdGZvcm1CdW5k
bGUgPSBDRkJ1bmRsZUNyZWF0ZSgwLCBidW5kbGVVUkwuZ2V0KCkpOworICAgIG1fcGxhdGZvcm1C
dW5kbGUgPSBbW05TQnVuZGxlIGFsbG9jXSBpbml0V2l0aFVSTDooTlNVUkwgKilidW5kbGVVUkwu
Z2V0KCldOwogICAgIGlmICghbV9wbGF0Zm9ybUJ1bmRsZSkgewotICAgICAgICBXVEZMb2dBbHdh
eXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIGJ1
bmRsZS5cbiIpOworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZh
aWxlZCAtIENvdWxkIG5vdCBjcmVhdGUgdGhlIGJ1bmRsZS4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAgICAgCi0gICAgaWYgKCFDRkJ1bmRsZUxvYWRFeGVjdXRhYmxlKG1f
cGxhdGZvcm1CdW5kbGUpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6
OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90IGxvYWQgdGhlIGV4ZWN1dGFibGUgZnJvbSB0aGUgYnVu
ZGxlLlxuIik7CisgICAgaWYgKCFbbV9wbGF0Zm9ybUJ1bmRsZSBsb2FkXSkgeworICAgICAgICBX
VEZMb2dBbHdheXMoIkluamVjdGVkQnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIG5vdCBsb2Fk
IHRoZSBleGVjdXRhYmxlIGZyb20gdGhlIGJ1bmRsZS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIC8vIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiB0aGUgYnVuZGxlIGhhcyBh
IFdLQnVuZGxlSW5pdGlhbGl6ZSBmdW5jdGlvbi4KKyAgICBXS0J1bmRsZUluaXRpYWxpemVGdW5j
dGlvblB0ciBpbml0aWFsaXplRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PFdLQnVuZGxlSW5p
dGlhbGl6ZUZ1bmN0aW9uUHRyPihDRkJ1bmRsZUdldEZ1bmN0aW9uUG9pbnRlckZvck5hbWUoW21f
cGxhdGZvcm1CdW5kbGUgX2NmQnVuZGxlXSwgQ0ZTVFIoIldLQnVuZGxlSW5pdGlhbGl6ZSIpKSk7
CisgICAgaWYgKGluaXRpYWxpemVGdW5jdGlvbikgeworICAgICAgICBpbml0aWFsaXplRnVuY3Rp
b24odG9BUEkodGhpcyksIHRvQVBJKGluaXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIE90aGVyd2lzZSwgbG9vayB0byBzZWUg
aWYgdGhlIGJ1bmRsZSBoYXMgYSBwcmluY2lwYWwgY2xhc3MKKyAgICBDbGFzcyBwcmluY2lwYWxD
bGFzcyA9IFttX3BsYXRmb3JtQnVuZGxlIHByaW5jaXBhbENsYXNzXTsKKyAgICBpZiAoIXByaW5j
aXBhbENsYXNzKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQg
ZmFpbGVkIC0gTm8gaW5pdGlhbGl6ZSBmdW5jdGlvbiBvciBwcmluY2lwYWwgY2xhc3MgZm91bmQg
aW4gdGhlIGJ1bmRsZSBleGVjdXRhYmxlLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgV0tCdW5kbGVJbml0aWFsaXplRnVuY3Rpb25QdHIgaW5pdGlhbGl6ZUZ1bmN0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxXS0J1bmRsZUluaXRpYWxpemVGdW5jdGlvblB0cj4oQ0ZCdW5k
bGVHZXRGdW5jdGlvblBvaW50ZXJGb3JOYW1lKG1fcGxhdGZvcm1CdW5kbGUsIENGU1RSKCJXS0J1
bmRsZUluaXRpYWxpemUiKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZUZ1bmN0aW9uKSB7Ci0gICAg
ICAgIFdURkxvZ0Fsd2F5cygiSW5qZWN0ZWRCdW5kbGU6OmxvYWQgZmFpbGVkIC0gQ291bGQgbm90
IGZpbmQgdGhlIGluaXRpYWxpemUgZnVuY3Rpb24gaW4gdGhlIGJ1bmRsZSBleGVjdXRhYmxlLlxu
Iik7CisgICAgaWYgKCFbcHJpbmNpcGFsQ2xhc3MgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2Nv
bChXS1dlYlByb2Nlc3NQbHVnSW4pXSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVk
QnVuZGxlOjpsb2FkIGZhaWxlZCAtIFByaW5jaXBhbCBjbGFzcyBkb2VzIG5vdCBjb25mb3JtIHRv
IHRoZSBXS1dlYlByb2Nlc3NQbHVnSW4gcHJvdG9jb2wuIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpbml0aWFsaXplRnVuY3Rpb24odG9BUEkodGhpcyksIHRvQVBJKGlu
aXRpYWxpemF0aW9uVXNlckRhdGEpKTsKKyAgICBpZDxXS1dlYlByb2Nlc3NQbHVnSW4+IGluc3Rh
bmNlID0gKGlkPFdLV2ViUHJvY2Vzc1BsdWdJbj4pW1twcmluY2lwYWxDbGFzcyBhbGxvY10gaW5p
dF07CisgICAgaWYgKCFpbnN0YW5jZSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkluamVjdGVk
QnVuZGxlOjpsb2FkIGZhaWxlZCAtIENvdWxkIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgdGhl
IHByaW5jaXBhbCBjbGFzcy4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIENyZWF0ZSB0aGUgc2hhcmVkIFdLV2ViUHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIuCisgICAg
W1tXS1dlYlByb2Nlc3NQbHVnSW5Db250cm9sbGVyIGFsbG9jXSBfaW5pdFdpdGhQcmluY2lwYWxD
bGFzc0luc3RhbmNlOmluc3RhbmNlIGluamVjdGVkQnVuZGxlOnRoaXNdOworCisgICAgaWYgKFtp
bnN0YW5jZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlByb2Nlc3NQbHVnSW5Jbml0
aWFsaXplOildKQorICAgICAgICBbaW5zdGFuY2Ugd2ViUHJvY2Vzc1BsdWdJbkluaXRpYWxpemU6
W1dLV2ViUHJvY2Vzc1BsdWdJbkNvbnRyb2xsZXIgX3NoYXJlZF1dOwogICAgIHJldHVybiB0cnVl
OwogfQogCg==
</data>
<flag name="review"
          id="179264"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>