<?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>33201</bug_id>
          
          <creation_ts>2010-01-05 01:12:27 -0800</creation_ts>
          <short_desc>[V8] Move createWindow into generic bindings so it can be shared with JSC</short_desc>
          <delta_ts>2010-08-08 23:35:09 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>creis</cc>
    
    <cc>dglazkov</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177079</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 01:12:27 -0800</bug_when>
    <thetext>[V8] Move createWindow into generic bindings so it can be shared with JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177083</commentid>
    <comment_count>1</comment_count>
      <attachid>45872</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 01:16:32 -0800</bug_when>
    <thetext>Created attachment 45872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177084</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 01:17:24 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45872 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177180</commentid>
    <comment_count>3</comment_count>
      <attachid>45872</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-01-05 09:07:49 -0800</bug_when>
    <thetext>Comment on attachment 45872
Patch

ok. I am learning about this generic binding from this patch -- it looks pretty interesting. I am assuming this is very much in flux still, so I&apos;ll follow along.

I am assuming State&lt;Binding&gt; -&gt; ScriptState? Or is this going to be a more generic concept?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177215</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 10:27:12 -0800</bug_when>
    <thetext>&gt; I am assuming State&lt;Binding&gt; -&gt; ScriptState? Or is this going to be a more
&gt; generic concept?

The Script* types are WebCore&apos;s view of the bindings.  The templated objects are the generic bindings view of the engine-specific bindings.  I want to see how far I can push things, but eventually we might hope that the templated objects are a relatively thin layer around the JavaScript engine itself.

To specifically answer your question, State&lt;Binding&gt; is ExecState for JSC and nothing for V8 (because V8 uses statics instead of a state object).

Another way to think about this is to look at ScriptValue and Bindings::Value.  ScriptValue uses a persistent handle with a managed lifetime, which is how WebCore wants to think about the bindings, but that&apos;s slow and memory intensive.  Bindings::Value is just a regular value handle, which means zero overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177248</commentid>
    <comment_count>5</comment_count>
      <attachid>45872</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 11:03:39 -0800</bug_when>
    <thetext>Comment on attachment 45872
Patch

Clearing flags on attachment: 45872

Committed r52810: &lt;http://trac.webkit.org/changeset/52810&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177249</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-05 11:03:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261982</commentid>
    <comment_count>7</comment_count>
      <attachid>63860</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-08-08 23:33:48 -0700</bug_when>
    <thetext>Created attachment 63860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261984</commentid>
    <comment_count>8</comment_count>
      <attachid>63860</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2010-08-08 23:35:09 -0700</bug_when>
    <thetext>Comment on attachment 63860
Patch

Commit message confused webkit-patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45872</attachid>
            <date>2010-01-05 01:16:32 -0800</date>
            <delta_ts>2010-01-05 11:03:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33201-20100105011631.patch</filename>
            <type>text/plain</type>
            <size>56666</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDk2NTQxZC4uNGI5MmQzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wMS0wNSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtWOF0gTW92ZSBjcmVhdGVXaW5kb3cgaW50byBnZW5lcmljIGJpbmRpbmdz
IHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCBKU0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjAxCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBj
cmVhdGVXaW5kb3cgZnJvbSBWOC1zcGVjaWZpYyBjb2RlIGludG8gdGhlIGdlbmVyaWMKKyAgICAg
ICAgYmluZGluZ3Mgc28gdGhhdCBpcyBjYW4gYmUgcmUtdXNlZCBieSB0aGUgSmF2YVNjcmlwdENv
cmUgYmluZGluZ3MuICBJCisgICAgICAgIGhhdmVuJ3QgYWN0dWFsbHkgbW92ZWQgdGhlIEpTQyBi
aW5kaW5ncyBvdmVyIHRvIHVzaW5nIHRoaXMgeWV0LgorCisgICAgICAgIEFsc28sIEkgb3JnYW5p
emVkIHRoZSBnZW5lcmljIGJpbmRpbmdzIGEgYml0IG1vcmUgYXMgaXQncyBiZWNvbWluZworICAg
ICAgICBjbGVhcmVyIGhvdyB0aGluZ3MgYXJlIGdvaW5nIHRvIHNoYXBlIHVwLiAgVGhlcmUgYXJl
IHN0aWxsIHNvbWUKKyAgICAgICAgcXVlc3Rpb24gbWFya3MsIGJ1dCBob3BlZnVsbHkgdGhlIGFu
c3dlcnMgd2lsbCBiZWNvbWUgY2xlYXIgYXMgd2UKKyAgICAgICAgcHJvZ3Jlc3MuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL2dlbmVy
aWMvQmluZGluZ1NlY3VyaXR5Lmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL0JpbmRp
bmdTZWN1cml0eS5oLgorICAgICAgICAoV2ViQ29yZTo6QmluZGluZ1NlY3VyaXR5OjpCaW5kaW5n
U2VjdXJpdHkpOgorICAgICAgICAoV2ViQ29yZTo6OjpjYW5BY2Nlc3NXaW5kb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6OjpjYW5BY2Nlc3NGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjo6OmNoZWNr
Tm9kZVNlY3VyaXR5KToKKyAgICAgICAgKiBiaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0
eUJhc2UuY3BwOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlC
YXNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkJpbmRpbmdTZWN1cml0eUJhc2U6OmdldERPTVdp
bmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nU2VjdXJpdHlCYXNlOjpnZXRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaW5kaW5nU2VjdXJpdHlCYXNlOjpjYW5BY2Nlc3MpOgorICAg
ICAgICAqIGJpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oOiBSZW5hbWVkIGZy
b20gV2ViQ29yZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmguCisgICAgICAgICogYmlu
ZGluZ3MvZ2VuZXJpYy9HZW5lcmljQmluZGluZy5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9iaW5k
aW5ncy9HZW5lcmljQmluZGluZy5oLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9WOEJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhE
T01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3c6OnNob3dN
b2RhbERpYWxvZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93OjpvcGVu
Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGlu
Z0RPTVdpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlY4QmluZGluZ0RPTVdpbmRv
dzo6c3RvcmVEaWFsb2dBcmdzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9zcGVjaWFsaXphdGlv
bi9WOEJpbmRpbmdTdGF0ZS5jcHA6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZ1N0YXRlLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6Ojo6T25seSk6CisgICAgICAgIChX
ZWJDb3JlOjo6OmdldEFjdGl2ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjo6OmltbWVkaWF0
ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L3NwZWNpYWxp
emF0aW9uL1Y4QmluZGluZ1N0YXRlLmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4QmluZGluZ1N0YXRlLmguCisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDEwLTAxLTA0ICBD
aHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA0NWRlOTI1Li41NDgz
ZTc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTEwNyw4ICsxMDcsMTAgQEAKICAgICAg
ICcuLi9hY2Nlc3NpYmlsaXR5JywKICAgICAgICcuLi9hY2Nlc3NpYmlsaXR5L2Nocm9taXVtJywK
ICAgICAgICcuLi9iaW5kaW5ncycsCisgICAgICAnLi4vYmluZGluZ3MvZ2VuZXJpYycsCiAgICAg
ICAnLi4vYmluZGluZ3MvdjgnLAogICAgICAgJy4uL2JpbmRpbmdzL3Y4L2N1c3RvbScsCisgICAg
ICAnLi4vYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24nLAogICAgICAgJy4uL2JyaWRnZScsCiAg
ICAgICAnLi4vY3NzJywKICAgICAgICcuLi9kb20nLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMzM2NjkzLi4zOGQyZjExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNDM0LDEwICs0MzQsMTEgQEAKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L3dpbi9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V2luLmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS93
aW4vQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJXaW4uaCcsCiAgICAgICAgICAgICAnYWNjZXNz
aWJpbGl0eS93eC9BY2Nlc3NpYmlsaXR5T2JqZWN0V3guY3BwJywKLSAgICAgICAgICAgICdiaW5k
aW5ncy9CaW5kaW5nU2VjdXJpdHkuaCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvQmluZGluZ1Nl
Y3VyaXR5QmFzZS5jcHAnLAotICAgICAgICAgICAgJ2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0eUJh
c2UuaCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvR2VuZXJpY0JpbmRpbmcuaCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgnLAorICAgICAgICAgICAg
J2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5n
cy9nZW5lcmljL0dlbmVyaWNCaW5kaW5nLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0Nh
Y2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0RP
TU9iamVjdFdpdGhTVkdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0dDQ29u
dHJvbGxlci5jcHAnLApAQCAtNzkxLDE0ICs3OTIsMTUgQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9TY3JpcHRWYWx1ZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdET01X
aW5kb3cuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5k
aW5nU3RhdGUuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9W
OEJpbmRpbmdTdGF0ZS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TdGF0aWNET01EYXRh
U3RvcmUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9TdGF0aWNET01EYXRhU3RvcmUu
aCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOEJpbmRpbmcuaCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhCaW5k
aW5nU3RhdGUuY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0ZS5o
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwJywKICAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhDb25zb2xlTWVzc2FnZS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9C
aW5kaW5nU2VjdXJpdHkuaCBiL1dlYkNvcmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5LmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMDE0MDMuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9CaW5kaW5nU2VjdXJpdHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICog
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBCaW5kaW5nU2VjdXJpdHlfaAotI2RlZmluZSBCaW5kaW5nU2VjdXJpdHlf
aAotCi0jaW5jbHVkZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgotI2luY2x1ZGUgIkdlbmVyaWNC
aW5kaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NV2luZG93OwotY2xh
c3MgRnJhbWU7Ci1jbGFzcyBOb2RlOwotCi0vLyBTZWN1cml0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5
IHZhcmlvdXMgbGFuZ3VhZ2UgYmluZGluZ3MuCi10ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KLWNs
YXNzIEJpbmRpbmdTZWN1cml0eSA6IHB1YmxpYyBCaW5kaW5nU2VjdXJpdHlCYXNlIHsKLXB1Ymxp
YzoKLSAgICAvLyBDaGVjayBpZiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nl
c3MgdGhlIHRhcmdldCBmcmFtZS4KLSAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcmFtZShTdGF0
ZTxCaW5kaW5nPiosIEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7Ci0KLSAgICAvLyBDaGVjayBp
ZiBpdCBpcyBzYWZlIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQotICAgIC8vIGN1
cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KLSAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0
eShTdGF0ZTxCaW5kaW5nPiosIE5vZGUqIHRhcmdldCk7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgQmluZGluZ1NlY3VyaXR5KCkge30KLSAgICB+QmluZGluZ1NlY3VyaXR5KCk7Ci0KLSAgICAv
LyBDaGVjayBpZiB0aGUgY3VycmVudCBET01XaW5kb3cncyBzZWN1cml0eSBjb250ZXh0IGNhbiBh
Y2Nlc3MgdGhlIHRhcmdldAotICAgIC8vIERPTVdpbmRvdy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBu
b3QgcmVwb3J0IGVycm9ycywgc28gbW9zdCBjYWxsZXJzIHNob3VsZAotICAgIC8vIHVzZSBjYW5B
Y2Nlc3NGcmFtZSBpbnN0ZWFkLgotICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1dpbmRvdyhTdGF0
ZTxCaW5kaW5nPiosIERPTVdpbmRvdyogdGFyZ2V0KTsKLX07Ci0KLS8vIEltcGxlbWVudGF0aW9u
cyBvZiB0ZW1wbGF0ZWQgbWV0aG9kcyBtdXN0IGJlIGluIHRoaXMgZmlsZS4KLQotdGVtcGxhdGUg
PGNsYXNzIEJpbmRpbmc+Ci1ib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNz
V2luZG93KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cpCi17Ci0gICAgRE9N
V2luZG93KiBhY3RpdmVXaW5kb3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7Ci0gICAgcmV0
dXJuIGNhbkFjY2VzcyhhY3RpdmVXaW5kb3csIHRhcmdldFdpbmRvdyk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBCaW5kaW5nPgotYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNhbkFjY2Vz
c0ZyYW1lKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGcmFtZSogdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVwb3J0RXJyb3IpCi17Ci0gICAgLy8gVGhl
IHN1YmplY3QgaXMgZGV0YWNoZWQgZnJvbSBhIGZyYW1lLCBkZW55IGFjY2Vzc2VzLgotICAgIGlm
ICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNhbkFjY2Vzc1dp
bmRvdyhzdGF0ZSwgZ2V0RE9NV2luZG93KHRhcmdldCkpKSB7Ci0gICAgICAgIGlmIChyZXBvcnRF
cnJvcikKLSAgICAgICAgICAgIHN0YXRlLT5pbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1Rv
KHRhcmdldCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBCaW5kaW5nPgotYm9vbCBCaW5kaW5nU2VjdXJpdHk8Qmlu
ZGluZz46OmNoZWNrTm9kZVNlY3VyaXR5KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgTm9kZSogbm9k
ZSkKLXsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEZyYW1l
KiB0YXJnZXQgPSBnZXRGcmFtZShub2RlKTsKLQotICAgIGlmICghdGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY2FuQWNjZXNzRnJhbWUoc3RhdGUsIHRhcmdldCwg
dHJ1ZSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eV9oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0eUJhc2UuY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGMxMmE2Zi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL0JpbmRpbmdTZWN1cml0
eUJhc2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgotCi0jaW5jbHVkZSAiRE9N
V2luZG93LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURPTVdpbmRvdyogQmluZGluZ1NlY3VyaXR5QmFz
ZTo6Z2V0RE9NV2luZG93KEZyYW1lKiBmcmFtZSkKLXsKLSAgICByZXR1cm4gZnJhbWUtPmRvbVdp
bmRvdygpOwotfQotCi1GcmFtZSogQmluZGluZ1NlY3VyaXR5QmFzZTo6Z2V0RnJhbWUoTm9kZSog
bm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLX0KLQotLy8g
U2FtZSBvcmlnaW4gcG9saWN5IGltcGxlbWVudGF0aW9uOgotLy8KLS8vIFNhbWUgb3JpZ2luIHBv
bGljeSBwcmV2ZW50cyBKUyBjb2RlIGZyb20gZG9tYWluIEEgZnJvbSBhY2Nlc3NpbmcgSlMgJiBE
T00KLS8vIG9iamVjdHMgaW4gYSBkaWZmZXJlbnQgZG9tYWluIEIuIFRoZXJlIGFyZSBleGNlcHRp
b25zIGFuZCBzZXZlcmFsIG9iamVjdHMKLS8vIGFyZSBhY2Nlc3NpYmxlIGJ5IGNyb3NzLWRvbWFp
biBjb2RlLiBGb3IgZXhhbXBsZSwgdGhlIHdpbmRvdy5mcmFtZXMgb2JqZWN0Ci0vLyBpcyBhY2Nl
c3NpYmxlIGJ5IGNvZGUgZnJvbSBhIGRpZmZlcmVudCBkb21haW4sIGJ1dCB3aW5kb3cuZG9jdW1l
bnQgaXMgbm90LgotLy8KLS8vIFRoZSBKUyBiaW5kaW5nIGNvZGUgc2V0cyBzZWN1cml0eSBjaGVj
ayBjYWxsYmFja3Mgb24gYSBmdW5jdGlvbiB0ZW1wbGF0ZSwKLS8vIGFuZCBhY2Nlc3NpbmcgaW5z
dGFuY2VzIG9mIHRoZSB0ZW1wbGF0ZSBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCi0vLyBU
aGUgY2FsbGJhY2sgZnVuY3Rpb24gZW5mb3JjZXMgdGhlIHNhbWUgb3JpZ2luIHBvbGljeS4KLS8v
Ci0vLyBDYWxsYmFjayBmdW5jdGlvbnMgYXJlIGV4cGVuc2l2ZS4gQmluZGluZyBjb2RlIHNob3Vs
ZCB1c2UgYSBzZWN1cml0eSB0b2tlbgotLy8gc3RyaW5nIHRvIGRvIGZhc3QgYWNjZXNzIGNoZWNr
cyBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNvdXJjZSBhbmQgdGFyZ2V0Ci0vLyBhcmUgaW4g
dGhlIHNhbWUgZG9tYWluLiBBIHNlY3VyaXR5IHRva2VuIGlzIGEgc3RyaW5nIG9iamVjdCB0aGF0
IHJlcHJlc2VudHMKLS8vIHRoZSBwcm90b2NvbC91cmwvcG9ydCBvZiBhIGRvbWFpbi4KLS8vCi0v
LyBUaGVyZSBhcmUgc3BlY2lhbCBjYXNlcyB3aGVyZSBzZWN1cml0eSB0b2tlbiBtYXRjaGluZyBp
cyBub3QgZW5vdWdoLgotLy8gRm9yIGV4YW1wbGUsIEpTIGNhbiBzZXQgaXRzIGRvbWFpbiB0byBh
IHN1cGVyIGRvbWFpbiBieSBjYWxsaW5nCi0vLyBkb2N1bWVudC5zZXREb21haW4oLi4uKS4gSW4g
dGhlc2UgY2FzZXMsIHRoZSBiaW5kaW5nIGNvZGUgY2FuIHJlc2V0Ci0vLyBhIGNvbnRleHQncyBz
ZWN1cml0eSB0b2tlbiB0byBpdHMgZ2xvYmFsIG9iamVjdCBzbyB0aGF0IHRoZSBmYXN0IGFjY2Vz
cwotLy8gY2hlY2sgd2lsbCBhbHdheXMgZmFpbC4KLQotLy8gSGVscGVyIHRvIGNoZWNrIGlmIHRo
ZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgYSB0YXJnZXQgZnJhbWUuCi0v
LyBGaXJzdCBpdCBjaGVja3Mgc2FtZSBkb21haW4gcG9saWN5IHVzaW5nIHRoZSBsZXhpY2FsIGNv
bnRleHQuCi0vLwotLy8gVGhpcyBpcyBlcXVpdmFsZW50IHRvIEtKUzo6V2luZG93OjphbGxvd3NB
Y2Nlc3NGcm9tKEV4ZWNTdGF0ZSopLgotYm9vbCBCaW5kaW5nU2VjdXJpdHlCYXNlOjpjYW5BY2Nl
c3MoRE9NV2luZG93KiBhY3RpdmVXaW5kb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdykKLXsKLSAgICBBU1NFUlQodGFyZ2V0V2lu
ZG93KTsKLQotICAgIFN0cmluZyBtZXNzYWdlOwotCi0gICAgaWYgKGFjdGl2ZVdpbmRvdyA9PSB0
YXJnZXRXaW5kb3cpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhY3RpdmVXaW5k
b3cpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBh
Y3RpdmVTZWN1cml0eU9yaWdpbiA9IGFjdGl2ZVdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKLSAg
ICBjb25zdCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0U2VjdXJpdHlPcmlnaW4gPSB0YXJnZXRXaW5k
b3ctPnNlY3VyaXR5T3JpZ2luKCk7Ci0KLSAgICAvLyBXZSBoYXZlIHNlZW4gY3Jhc2hlcyB3ZXJl
IHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgdGhlIHRhcmdldCBoYXMgbm90IGJlZW4KLSAgICAvLyBp
bml0aWFsaXplZC4gRGVmZW5kIGFnYWluc3QgdGhhdC4KLSAgICBpZiAoIXRhcmdldFNlY3VyaXR5
T3JpZ2luKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYWN0aXZlU2VjdXJpdHlP
cmlnaW4tPmNhbkFjY2Vzcyh0YXJnZXRTZWN1cml0eU9yaWdpbikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgLy8gQWxsb3cgYWNjZXNzIHRvIGEgImFib3V0OmJsYW5rIiBwYWdlIGlmIHRo
ZSBkeW5hbWljIGNvbnRleHQgaXMgYQotICAgIC8vIGRldGFjaGVkIGNvbnRleHQgb2YgdGhlIHNh
bWUgZnJhbWUgYXMgdGhlIGJsYW5rIHBhZ2UuCi0gICAgaWYgKHRhcmdldFNlY3VyaXR5T3JpZ2lu
LT5pc0VtcHR5KCkgJiYgYWN0aXZlV2luZG93LT5mcmFtZSgpID09IHRhcmdldFdpbmRvdy0+ZnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL0JpbmRp
bmdTZWN1cml0eUJhc2UuaCBiL1dlYkNvcmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5QmFzZS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmEyZTk5Li4wMDAwMDAwCi0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvQmluZGluZ1NlY3VyaXR5QmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgQmluZGluZ1NlY3VyaXR5QmFzZV9oCi0jZGVmaW5lIEJpbmRp
bmdTZWN1cml0eUJhc2VfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIERPTVdpbmRv
dzsKLWNsYXNzIEZyYW1lOwotY2xhc3MgTm9kZTsKLQotLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
QmluZGluZ1NlY3VyaXR5IHRoYXQgZGVwZW5kIG9uIFdlYkNvcmUgY2xhc3NlcywgYW5kCi0vLyB0
aHVzIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgaW4gQmluZGluZ1NlY3VyaXR5LmgsIHdoaWNo
IGNvbnRhaW5zIHRlbXBsYXRlCi0vLyBtZXRob2QgZGVmaW5pdGlvbnMuCi1jbGFzcyBCaW5kaW5n
U2VjdXJpdHlCYXNlIHsKLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgRE9NV2luZG93KiBnZXRET01X
aW5kb3coRnJhbWUqKTsKLSAgICBzdGF0aWMgRnJhbWUqIGdldEZyYW1lKE5vZGUqKTsKLSAgICBz
dGF0aWMgYm9vbCBjYW5BY2Nlc3MoRE9NV2luZG93KiBhY3RpdmUsIERPTVdpbmRvdyogdGFyZ2V0
KTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eUJhc2VfaApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9HZW5lcmljQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9H
ZW5lcmljQmluZGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDMwYjQ1Li4w
MDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvR2VuZXJpY0JpbmRpbmcuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdlbmVyaWNCaW5kaW5nX2gKLSNkZWZpbmUg
R2VuZXJpY0JpbmRpbmdfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFVzZWQgdG8gaW5z
dGFudGlhdGUgYmluZGluZyB0ZW1wbGF0ZXMgZm9yIGFueSBtZXRob2RzIHNoYXJlZCBhbW9uZyBh
bGwKLS8vIGxhbmd1YWdlIGJpbmRpbmdzLgotY2xhc3MgR2VuZXJpY0JpbmRpbmcge307Ci0KLS8v
IENsYXNzIHRvIHJlcHJlc2VudCBleGVjdXRpb24gc3RhdGUgZm9yIGVhY2ggbGFuZ3VhZ2UgYmlu
ZGluZy4KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgU3RhdGUge307Ci0KLS8vIENvbW1vbiBu
b3Rpb24gb2YgZXhlY3V0aW9uIHN0YXRlIGZvciBsYW5ndWFnZSBiaW5kaW5ncy4KLXRlbXBsYXRl
IDw+Ci1jbGFzcyBTdGF0ZTxHZW5lcmljQmluZGluZz4gewotICAgIC8vIEFueSBtZXRob2RzIHNo
YXJlZCBhY3Jvc3MgYmluZGluZ3MgY2FuIGdvIGhlcmUuCi19OwotCi19Ci0KLSNlbmRpZiAvLyBH
ZW5lcmljQmluZGluZ19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmlu
ZGluZ0RPTVdpbmRvdy5oIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01XaW5k
b3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTY4ZTJjCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01XaW5kb3cuaApA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmluZGluZ0RPTVdpbmRvd19oCisjZGVmaW5lIEJp
bmRpbmdET01XaW5kb3dfaAorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiR2VuZXJpY0JpbmRpbmcuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+Citj
bGFzcyBCaW5kaW5nRE9NV2luZG93IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHR5cGVuYW1lIEJp
bmRpbmc6OlZhbHVlIEJpbmRpbmdWYWx1ZTsKKworICAgIHN0YXRpYyBGcmFtZSogY3JlYXRlV2lu
ZG93KFN0YXRlPEJpbmRpbmc+KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFt
ZSogY2FsbGluZ0ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiBl
bnRlcmVkRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUqIG9wZW5l
ckZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3
aW5kb3dGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kaW5nVmFs
dWUgZGlhbG9nQXJncyk7Cit9OworCisvLyBJbXBsZW1lbnRhdGlvbnMgb2YgdGVtcGxhdGVkIG1l
dGhvZHMgbXVzdCBiZSBpbiB0aGlzIGZpbGUuCisKK3RlbXBsYXRlIDxjbGFzcyBCaW5kaW5nPgor
RnJhbWUqIEJpbmRpbmdET01XaW5kb3c8QmluZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5k
aW5nPiogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyYW1lKiBjYWxsaW5nRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZyYW1lKiBlbnRlcmVkRnJhbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lKiBvcGVuZXJGcmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgZnJhbWVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVhdHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRpbmdWYWx1ZSBkaWFsb2dB
cmdzKQoreworICAgIEFTU0VSVChjYWxsaW5nRnJhbWUpOworICAgIEFTU0VSVChlbnRlcmVkRnJh
bWUpOworCisgICAgLy8gU2FuZGJveGVkIGlmcmFtZXMgY2Fubm90IG9wZW4gbmV3IGF1eGlsaWFy
eSBicm93c2luZyBjb250ZXh0cy4KKyAgICBpZiAoY2FsbGluZ0ZyYW1lICYmIGNhbGxpbmdGcmFt
ZS0+bG9hZGVyKCktPmlzU2FuZGJveGVkKFNhbmRib3hOYXZpZ2F0aW9uKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKworICAgIC8vIEZvciB3aGF0
ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUgZW50ZXJlZCBmcmFtZSB0byBkZXRlcm1pbmUK
KyAgICAvLyB0aGUgb3V0Z29pbmdSZWZlcnJlci4gIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9y
IGhlcmUuCisgICAgU3RyaW5nIHJlZmVycmVyID0gZW50ZXJlZEZyYW1lLT5sb2FkZXIoKS0+b3V0
Z29pbmdSZWZlcnJlcigpOworICAgIHJlcXVlc3Quc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsK
KyAgICBGcmFtZUxvYWRlcjo6YWRkSFRUUE9yaWdpbklmTmVlZGVkKHJlcXVlc3QsIGVudGVyZWRG
cmFtZS0+bG9hZGVyKCktPm91dGdvaW5nT3JpZ2luKCkpOworICAgIEZyYW1lTG9hZFJlcXVlc3Qg
ZnJhbWVSZXF1ZXN0KHJlcXVlc3QsIGZyYW1lTmFtZSk7CisKKyAgICAvLyBGSVhNRTogSXQncyBt
dWNoIGJldHRlciBmb3IgY2xpZW50IEFQSSBpZiBhIG5ldyB3aW5kb3cgc3RhcnRzIHdpdGggYSBV
UkwsCisgICAgLy8gaGVyZSB3aGVyZSB3ZSBrbm93IHdoYXQgVVJMIHdlIGFyZSBnb2luZyB0byBv
cGVuLiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgLy8gY29kZSBwYXNzZXMgdGhlIGVtcHR5IHN0
cmluZyBmb3IgdGhlIFVSTCwgYnV0IHRoZXJlJ3MgYSByZWFzb24gZm9yIHRoYXQuCisgICAgLy8g
QmVmb3JlIGxvYWRpbmcgd2UgaGF2ZSB0byBzZXQgdXAgdGhlIG9wZW5lciwgb3BlbmVkQnlET00s
CisgICAgLy8gYW5kIGRpYWxvZ0FyZ3VtZW50cyB2YWx1ZXMuIEFsc28sIHRvIGRlY2lkZSB3aGV0
aGVyIHRvIHVzZSB0aGUgVVJMCisgICAgLy8gd2UgY3VycmVudGx5IGRvIGFuIGFsbG93c0FjY2Vz
c0Zyb20gY2FsbCB1c2luZyB0aGUgd2luZG93IHdlIGNyZWF0ZSwKKyAgICAvLyB3aGljaCBjYW4n
dCBiZSBkb25lIGJlZm9yZSBjcmVhdGluZyBpdC4gV2UnZCBoYXZlIHRvIHJlc29sdmUgYWxsIHRo
b3NlCisgICAgLy8gaXNzdWVzIHRvIHBhc3MgdGhlIFVSTCBpbnN0ZWFkIG9mICIiLgorCisgICAg
Ym9vbCBjcmVhdGVkOworICAgIC8vIFdlIHBhc3MgaW4gdGhlIG9wZW5lciBmcmFtZSBoZXJlIHNv
IGl0IGNhbiBiZSB1c2VkIGZvciBsb29raW5nIHVwIHRoZQorICAgIC8vIGZyYW1lIG5hbWUsIGlu
IGNhc2UgdGhlIGFjdGl2ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3BlbmVyIGZyYW1l
LAorICAgIC8vIGFuZCB0aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUgcmVsYXRpdmUgdG8gdGhl
IG9wZW5lciBmcmFtZSwgZm9yIGV4YW1wbGUKKyAgICAvLyAiX3NlbGYiIG9yICJfcGFyZW50Ii4K
KyAgICBGcmFtZSogbmV3RnJhbWUgPSBjYWxsaW5nRnJhbWUtPmxvYWRlcigpLT5jcmVhdGVXaW5k
b3cob3BlbmVyRnJhbWUtPmxvYWRlcigpLCBmcmFtZVJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVzLCBj
cmVhdGVkKTsKKyAgICBpZiAoIW5ld0ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5l
d0ZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKG9wZW5lckZyYW1lKTsKKyAgICBuZXdGcmFtZS0+
cGFnZSgpLT5zZXRPcGVuZWRCeURPTSgpOworCisgICAgQmluZGluZzo6RE9NV2luZG93OjpzdG9y
ZURpYWxvZ0FyZ3Moc3RhdGUsIG5ld0ZyYW1lLCBkaWFsb2dBcmdzKTsKKworICAgIGlmICghcHJv
dG9jb2xJc0phdmFTY3JpcHQodXJsKSB8fCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNhbkFj
Y2Vzc0ZyYW1lKHN0YXRlLCBuZXdGcmFtZSwgdHJ1ZSkpIHsKKyAgICAgICAgS1VSTCBjb21wbGV0
ZWRVcmwgPQorICAgICAgICAgICAgdXJsLmlzRW1wdHkoKSA/IEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCAiIikgOiBjb21wbGV0ZVVSTCh1cmwpOworICAgICAgICBib29sIHVzZXJHZXN0dXJlID0gcHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisKKyAgICAgICAgaWYgKGNyZWF0ZWQpCisgICAgICAgICAg
ICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVybCwgcmVmZXJy
ZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICBlbHNlIGlmICghdXJsLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIG5ld0ZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hl
ZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybC5zdHJpbmcoKSwgcmVmZXJyZXIsIGZhbHNl
LCB1c2VyR2VzdHVyZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0ZyYW1lOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBCaW5kaW5nRE9NV2luZG93X2gKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaCBiL1dlYkNv
cmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jZDAxNDAzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBCaW5kaW5nU2VjdXJpdHlfaAorI2RlZmluZSBCaW5kaW5nU2VjdXJpdHlfaAorCisjaW5jbHVk
ZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgorI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7Citj
bGFzcyBOb2RlOworCisvLyBTZWN1cml0eSBmdW5jdGlvbnMgc2hhcmVkIGJ5IHZhcmlvdXMgbGFu
Z3VhZ2UgYmluZGluZ3MuCit0ZW1wbGF0ZSA8Y2xhc3MgQmluZGluZz4KK2NsYXNzIEJpbmRpbmdT
ZWN1cml0eSA6IHB1YmxpYyBCaW5kaW5nU2VjdXJpdHlCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBD
aGVjayBpZiB0aGUgYWN0aXZlIGV4ZWN1dGlvbiBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRhcmdl
dCBmcmFtZS4KKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NGcmFtZShTdGF0ZTxCaW5kaW5nPios
IEZyYW1lKiwgYm9vbCByZXBvcnRFcnJvcik7CisKKyAgICAvLyBDaGVjayBpZiBpdCBpcyBzYWZl
IHRvIGFjY2VzcyB0aGUgZ2l2ZW4gbm9kZSBmcm9tIHRoZQorICAgIC8vIGN1cnJlbnQgc2VjdXJp
dHkgY29udGV4dC4KKyAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0eShTdGF0ZTxCaW5k
aW5nPiosIE5vZGUqIHRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQmluZGluZ1Nl
Y3VyaXR5KCkge30KKyAgICB+QmluZGluZ1NlY3VyaXR5KCk7CisKKyAgICAvLyBDaGVjayBpZiB0
aGUgY3VycmVudCBET01XaW5kb3cncyBzZWN1cml0eSBjb250ZXh0IGNhbiBhY2Nlc3MgdGhlIHRh
cmdldAorICAgIC8vIERPTVdpbmRvdy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVwb3J0IGVy
cm9ycywgc28gbW9zdCBjYWxsZXJzIHNob3VsZAorICAgIC8vIHVzZSBjYW5BY2Nlc3NGcmFtZSBp
bnN0ZWFkLgorICAgIHN0YXRpYyBib29sIGNhbkFjY2Vzc1dpbmRvdyhTdGF0ZTxCaW5kaW5nPios
IERPTVdpbmRvdyogdGFyZ2V0KTsKK307CisKKy8vIEltcGxlbWVudGF0aW9ucyBvZiB0ZW1wbGF0
ZWQgbWV0aG9kcyBtdXN0IGJlIGluIHRoaXMgZmlsZS4KKwordGVtcGxhdGUgPGNsYXNzIEJpbmRp
bmc+Citib29sIEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6Y2FuQWNjZXNzV2luZG93KFN0YXRl
PEJpbmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cpCit7CisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3cgPSBzdGF0ZS0+Z2V0QWN0aXZlV2luZG93KCk7CisgICAgcmV0dXJuIGNhbkFjY2Vz
cyhhY3RpdmVXaW5kb3csIHRhcmdldFdpbmRvdyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBCaW5k
aW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNhbkFjY2Vzc0ZyYW1lKFN0YXRl
PEJpbmRpbmc+KiBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcmFtZSogdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmVwb3J0RXJyb3IpCit7CisgICAgLy8gVGhlIHN1YmplY3QgaXMg
ZGV0YWNoZWQgZnJvbSBhIGZyYW1lLCBkZW55IGFjY2Vzc2VzLgorICAgIGlmICghdGFyZ2V0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNhbkFjY2Vzc1dpbmRvdyhzdGF0ZSwg
Z2V0RE9NV2luZG93KHRhcmdldCkpKSB7CisgICAgICAgIGlmIChyZXBvcnRFcnJvcikKKyAgICAg
ICAgICAgIHN0YXRlLT5pbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKHRhcmdldCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBCaW5kaW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNoZWNr
Tm9kZVNlY3VyaXR5KFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZyYW1lKiB0YXJnZXQgPSBn
ZXRGcmFtZShub2RlKTsKKworICAgIGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gY2FuQWNjZXNzRnJhbWUoc3RhdGUsIHRhcmdldCwgdHJ1ZSk7Cit9CisK
K30KKworI2VuZGlmIC8vIEJpbmRpbmdTZWN1cml0eV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTU5ODc4MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHlCYXNlLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaW5kaW5nU2VjdXJpdHlCYXNlLmgiCisKKyNpbmNs
dWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRE9NV2luZG93KiBCaW5kaW5nU2Vj
dXJpdHlCYXNlOjpnZXRET01XaW5kb3coRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBmcmFt
ZS0+ZG9tV2luZG93KCk7Cit9CisKK0ZyYW1lKiBCaW5kaW5nU2VjdXJpdHlCYXNlOjpnZXRGcmFt
ZShOb2RlKiBub2RlKQoreworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwor
fQorCisvLyBTYW1lIG9yaWdpbiBwb2xpY3kgaW1wbGVtZW50YXRpb246CisvLworLy8gU2FtZSBv
cmlnaW4gcG9saWN5IHByZXZlbnRzIEpTIGNvZGUgZnJvbSBkb21haW4gQSBmcm9tIGFjY2Vzc2lu
ZyBKUyAmIERPTQorLy8gb2JqZWN0cyBpbiBhIGRpZmZlcmVudCBkb21haW4gQi4gVGhlcmUgYXJl
IGV4Y2VwdGlvbnMgYW5kIHNldmVyYWwgb2JqZWN0cworLy8gYXJlIGFjY2Vzc2libGUgYnkgY3Jv
c3MtZG9tYWluIGNvZGUuIEZvciBleGFtcGxlLCB0aGUgd2luZG93LmZyYW1lcyBvYmplY3QKKy8v
IGlzIGFjY2Vzc2libGUgYnkgY29kZSBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbiwgYnV0IHdpbmRv
dy5kb2N1bWVudCBpcyBub3QuCisvLworLy8gVGhlIEpTIGJpbmRpbmcgY29kZSBzZXRzIHNlY3Vy
aXR5IGNoZWNrIGNhbGxiYWNrcyBvbiBhIGZ1bmN0aW9uIHRlbXBsYXRlLAorLy8gYW5kIGFjY2Vz
c2luZyBpbnN0YW5jZXMgb2YgdGhlIHRlbXBsYXRlIGNhbGxzIHRoZSBjYWxsYmFjayBmdW5jdGlv
bi4KKy8vIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbmZvcmNlcyB0aGUgc2FtZSBvcmlnaW4gcG9s
aWN5LgorLy8KKy8vIENhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgZXhwZW5zaXZlLiBCaW5kaW5nIGNv
ZGUgc2hvdWxkIHVzZSBhIHNlY3VyaXR5IHRva2VuCisvLyBzdHJpbmcgdG8gZG8gZmFzdCBhY2Nl
c3MgY2hlY2tzIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc291cmNlIGFuZCB0YXJnZXQKKy8v
IGFyZSBpbiB0aGUgc2FtZSBkb21haW4uIEEgc2VjdXJpdHkgdG9rZW4gaXMgYSBzdHJpbmcgb2Jq
ZWN0IHRoYXQgcmVwcmVzZW50cworLy8gdGhlIHByb3RvY29sL3VybC9wb3J0IG9mIGEgZG9tYWlu
LgorLy8KKy8vIFRoZXJlIGFyZSBzcGVjaWFsIGNhc2VzIHdoZXJlIHNlY3VyaXR5IHRva2VuIG1h
dGNoaW5nIGlzIG5vdCBlbm91Z2guCisvLyBGb3IgZXhhbXBsZSwgSlMgY2FuIHNldCBpdHMgZG9t
YWluIHRvIGEgc3VwZXIgZG9tYWluIGJ5IGNhbGxpbmcKKy8vIGRvY3VtZW50LnNldERvbWFpbigu
Li4pLiBJbiB0aGVzZSBjYXNlcywgdGhlIGJpbmRpbmcgY29kZSBjYW4gcmVzZXQKKy8vIGEgY29u
dGV4dCdzIHNlY3VyaXR5IHRva2VuIHRvIGl0cyBnbG9iYWwgb2JqZWN0IHNvIHRoYXQgdGhlIGZh
c3QgYWNjZXNzCisvLyBjaGVjayB3aWxsIGFsd2F5cyBmYWlsLgorCisvLyBIZWxwZXIgdG8gY2hl
Y2sgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQgY2FuIGFjY2VzcyBhIHRhcmdldCBm
cmFtZS4KKy8vIEZpcnN0IGl0IGNoZWNrcyBzYW1lIGRvbWFpbiBwb2xpY3kgdXNpbmcgdGhlIGxl
eGljYWwgY29udGV4dC4KKy8vCisvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gS0pTOjpXaW5kb3c6
OmFsbG93c0FjY2Vzc0Zyb20oRXhlY1N0YXRlKikuCitib29sIEJpbmRpbmdTZWN1cml0eUJhc2U6
OmNhbkFjY2VzcyhET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93KQoreworICAgIEFTU0VSVCh0
YXJnZXRXaW5kb3cpOworCisgICAgU3RyaW5nIG1lc3NhZ2U7CisKKyAgICBpZiAoYWN0aXZlV2lu
ZG93ID09IHRhcmdldFdpbmRvdykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWFj
dGl2ZVdpbmRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU2VjdXJpdHlP
cmlnaW4qIGFjdGl2ZVNlY3VyaXR5T3JpZ2luID0gYWN0aXZlV2luZG93LT5zZWN1cml0eU9yaWdp
bigpOworICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRTZWN1cml0eU9yaWdpbiA9IHRh
cmdldFdpbmRvdy0+c2VjdXJpdHlPcmlnaW4oKTsKKworICAgIC8vIFdlIGhhdmUgc2VlbiBjcmFz
aGVzIHdlcmUgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiB0aGUgdGFyZ2V0IGhhcyBub3QgYmVlbgor
ICAgIC8vIGluaXRpYWxpemVkLiBEZWZlbmQgYWdhaW5zdCB0aGF0LgorICAgIGlmICghdGFyZ2V0
U2VjdXJpdHlPcmlnaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhY3RpdmVT
ZWN1cml0eU9yaWdpbi0+Y2FuQWNjZXNzKHRhcmdldFNlY3VyaXR5T3JpZ2luKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBBbGxvdyBhY2Nlc3MgdG8gYSAiYWJvdXQ6YmxhbmsiIHBh
Z2UgaWYgdGhlIGR5bmFtaWMgY29udGV4dCBpcyBhCisgICAgLy8gZGV0YWNoZWQgY29udGV4dCBv
ZiB0aGUgc2FtZSBmcmFtZSBhcyB0aGUgYmxhbmsgcGFnZS4KKyAgICBpZiAodGFyZ2V0U2VjdXJp
dHlPcmlnaW4tPmlzRW1wdHkoKSAmJiBhY3RpdmVXaW5kb3ctPmZyYW1lKCkgPT0gdGFyZ2V0V2lu
ZG93LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9nZW5lcmljL0JpbmRpbmdTZWN1cml0eUJhc2UuaCBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJp
Yy9CaW5kaW5nU2VjdXJpdHlCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uY2ZhMmU5OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9C
aW5kaW5nU2VjdXJpdHlCYXNlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmluZGluZ1Nl
Y3VyaXR5QmFzZV9oCisjZGVmaW5lIEJpbmRpbmdTZWN1cml0eUJhc2VfaAorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xhc3MgTm9kZTsK
KworLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgQmluZGluZ1NlY3VyaXR5IHRoYXQgZGVwZW5kIG9u
IFdlYkNvcmUgY2xhc3NlcywgYW5kCisvLyB0aHVzIHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQg
aW4gQmluZGluZ1NlY3VyaXR5LmgsIHdoaWNoIGNvbnRhaW5zIHRlbXBsYXRlCisvLyBtZXRob2Qg
ZGVmaW5pdGlvbnMuCitjbGFzcyBCaW5kaW5nU2VjdXJpdHlCYXNlIHsKK3Byb3RlY3RlZDoKKyAg
ICBzdGF0aWMgRE9NV2luZG93KiBnZXRET01XaW5kb3coRnJhbWUqKTsKKyAgICBzdGF0aWMgRnJh
bWUqIGdldEZyYW1lKE5vZGUqKTsKKyAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3MoRE9NV2luZG93
KiBhY3RpdmUsIERPTVdpbmRvdyogdGFyZ2V0KTsKK307CisKK30KKworI2VuZGlmIC8vIEJpbmRp
bmdTZWN1cml0eUJhc2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0dl
bmVyaWNCaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvR2VuZXJpY0JpbmRpbmcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDMwYjQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0dlbmVyaWNCaW5kaW5nLmgKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgR2VuZXJpY0JpbmRpbmdfaAorI2RlZmluZSBHZW5lcmljQmlu
ZGluZ19oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVXNlZCB0byBpbnN0YW50aWF0ZSBi
aW5kaW5nIHRlbXBsYXRlcyBmb3IgYW55IG1ldGhvZHMgc2hhcmVkIGFtb25nIGFsbAorLy8gbGFu
Z3VhZ2UgYmluZGluZ3MuCitjbGFzcyBHZW5lcmljQmluZGluZyB7fTsKKworLy8gQ2xhc3MgdG8g
cmVwcmVzZW50IGV4ZWN1dGlvbiBzdGF0ZSBmb3IgZWFjaCBsYW5ndWFnZSBiaW5kaW5nLgordGVt
cGxhdGUgPGNsYXNzIFQ+CitjbGFzcyBTdGF0ZSB7fTsKKworLy8gQ29tbW9uIG5vdGlvbiBvZiBl
eGVjdXRpb24gc3RhdGUgZm9yIGxhbmd1YWdlIGJpbmRpbmdzLgordGVtcGxhdGUgPD4KK2NsYXNz
IFN0YXRlPEdlbmVyaWNCaW5kaW5nPiB7CisgICAgLy8gQW55IG1ldGhvZHMgc2hhcmVkIGFjcm9z
cyBiaW5kaW5ncyBjYW4gZ28gaGVyZS4KK307CisKK30KKworI2VuZGlmIC8vIEdlbmVyaWNCaW5k
aW5nX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmggYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCmluZGV4IGFhNGEzMjYuLjhjZWRhNjUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuaApAQCAtNDQsMTEgKzQ0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEV2ZW50VGFyZ2V0
OworICAgIGNsYXNzIFY4QmluZGluZ0RPTVdpbmRvdzsKIAogICAgIC8vIEluc3RhbnRpYXRlIGJp
bmRpbmcgdGVtcGxhdGUgY2xhc3NlcyBmb3IgVjguCi0gICAgY2xhc3MgVjhCaW5kaW5nIHt9Owor
ICAgIGNsYXNzIFY4QmluZGluZyB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWYWx1ZTsKKyAgICAgICAgdHlwZWRlZiBWOEJpbmRpbmdET01XaW5k
b3cgRE9NV2luZG93OworICAgIH07CiAgICAgdHlwZWRlZiBCaW5kaW5nU2VjdXJpdHk8VjhCaW5k
aW5nPiBWOEJpbmRpbmdTZWN1cml0eTsKLSAgICAKKwogICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9u
IGV4dHJhY3QgbmF0aXZlIG9iamVjdCBwb2ludGVyIGZyb20gYSBET00gd3JhcHBlcgogICAgIC8v
IGFuZCBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4KICAgICB2b2lkKiB2OERPTVdyYXBwZXJU
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nU3RhdGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmdTdGF0ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwZjc1MGQuLjAwMDAw
MDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0ZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4
QmluZGluZ1N0YXRlLmgiCi0KLSNpbmNsdWRlICJWOFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVN0YXRlPFY4QmluZGluZz4q
IFN0YXRlPFY4QmluZGluZz46Ok9ubHkoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3Rh
dGUsIGdsb2JhbFY4QmluZGluZ1N0YXRlLCAoKSk7Ci0gICAgcmV0dXJuICZnbG9iYWxWOEJpbmRp
bmdTdGF0ZTsKLX0KLQotRE9NV2luZG93KiBTdGF0ZTxWOEJpbmRpbmc+OjpnZXRBY3RpdmVXaW5k
b3coKQotewotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gYWN0aXZlQ29udGV4dCA9IHY4OjpD
b250ZXh0OjpHZXRDYWxsaW5nKCk7Ci0gICAgaWYgKGFjdGl2ZUNvbnRleHQuSXNFbXB0eSgpKSB7
Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgc2luZ2xlIGFjdGl2YXRpb24gcmVjb3JkIG9uIHRoZSBz
dGFjaywgc28gdGhhdCBtdXN0Ci0gICAgICAgIC8vIGJlIHRoZSBhY3RpdmVDb250ZXh0LgotICAg
ICAgICBhY3RpdmVDb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIFY4UHJveHk6OnJldHJpZXZlV2luZG93KGFjdGl2ZUNvbnRleHQpOwotfQotCi12
b2lkIFN0YXRlPFY4QmluZGluZz46OmltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJh
bWUqIHRhcmdldCkKLXsKLSAgICBWOFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQs
IFY4UHJveHk6OlJlcG9ydE5vdyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QmluZGluZ1N0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGYzMDVjMTQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmdTdGF0
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhCaW5kaW5nU3Rh
dGVfaAotI2RlZmluZSBWOEJpbmRpbmdTdGF0ZV9oCi0KLSNpbmNsdWRlICJHZW5lcmljQmluZGlu
Zy5oIgotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IFNpbmdsZXRvbiBpbXBsZW1lbnRhdGlvbiBvZiBTdGF0ZTxWOEJpbmRpbmc+LiAgVXNlcyBWOCdz
IGdsb2JhbCBkYXRhCi0vLyBzdHJ1Y3R1cmVzIHRvIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBy
ZWxldmFudCBleGVjdXRpb24gc3RhdGUuCi10ZW1wbGF0ZSA8PgotY2xhc3MgU3RhdGU8VjhCaW5k
aW5nPiA6IHB1YmxpYyBTdGF0ZTxHZW5lcmljQmluZGluZz4gewotcHVibGljOgotICAgIC8vIFNp
bmdsZXRvbgotICAgIHN0YXRpYyBTdGF0ZSogT25seSgpOwotCi0gICAgLy8gVGhlIERPTVdpbmRv
dyBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBjb250ZXh0JyBvZiBleGVjdXRpb24uCi0g
ICAgRE9NV2luZG93KiBnZXRBY3RpdmVXaW5kb3coKTsKLQotICAgIC8vIFJlcG9ydHMgYW4gZXJy
b3IgbWVzc2FnZSAod2l0aG91dCBkZWxheSkgaWYgdGhlIHNlY3VyaXR5IGNoZWNrIGZhaWxzLgot
ICAgIHN0YXRpYyB2b2lkIGltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqKTsK
LQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBTdGF0ZSgpIHt9Ci0gICAgflN0YXRlKCk7Ci19Owot
Ci10eXBlZGVmIFN0YXRlPFY4QmluZGluZz4gVjhCaW5kaW5nU3RhdGU7Ci0KLX0KLQotI2VuZGlm
IC8vIFY4QmluZGluZ1N0YXRlX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCA2MTc3YmM4Li45MjJmYTQ2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC0zMSwxOSAr
MzEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOERPTVdpbmRvdy5oIgog
Ci0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKLSNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVu
ZXIuaCIKLSNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0Q3VzdG9tLmgiCi0jaW5jbHVkZSAiVjhQcm94
eS5oIgotI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCi0KICNpbmNsdWRlICJCYXNlNjQuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
RE9NVGltZXIuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0Lmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC01OCw2ICs1MCwxNCBAQAogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkV29ya2VyUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUg
IlN0b3JhZ2UuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIlY4Q3Vz
dG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1
ZGUgIlY4TWVzc2FnZVBvcnRDdXN0b20uaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVk
ZSAiVjhVdGlsaXRpZXMuaCIKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAjaW5jbHVkZSAiV2Vi
U29ja2V0LmgiCiAjZW5kaWYKQEAgLTU0Nyw3NyArNTQ3LDYgQEAgc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIGZlYXR1
cmVzQXIKICAgICByZXR1cm4gbWFwOwogfQogCi0KLXN0YXRpYyBGcmFtZSogY3JlYXRlV2luZG93
KEZyYW1lKiBjYWxsaW5nRnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZSog
ZW50ZXJlZEZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhbWUqIG9wZW5lckZy
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGRpYWxvZ0Fy
Z3MpCi17Ci0gICAgQVNTRVJUKGNhbGxpbmdGcmFtZSk7Ci0gICAgQVNTRVJUKGVudGVyZWRGcmFt
ZSk7Ci0KLSAgICAvLyBTYW5kYm94ZWQgaWZyYW1lcyBjYW5ub3Qgb3BlbiBuZXcgYXV4aWxpYXJ5
IGJyb3dzaW5nIGNvbnRleHRzLgotICAgIGlmIChjYWxsaW5nRnJhbWUgJiYgY2FsbGluZ0ZyYW1l
LT5sb2FkZXIoKS0+aXNTYW5kYm94ZWQoU2FuZGJveE5hdmlnYXRpb24pKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OwotCi0gICAgLy8gRm9yIHdoYXRl
dmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBlbnRlcmVkIGZyYW1lIHRvIGRldGVybWluZQot
ICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3Ig
aGVyZS4KLSAgICBTdHJpbmcgcmVmZXJyZXIgPSBlbnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCk7Ci0gICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwot
ICAgIEZyYW1lTG9hZGVyOjphZGRIVFRQT3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgZW50ZXJlZEZy
YW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdPcmlnaW4oKSk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBm
cmFtZVJlcXVlc3QocmVxdWVzdCwgZnJhbWVOYW1lKTsKLQotICAgIC8vIEZJWE1FOiBJdCdzIG11
Y2ggYmV0dGVyIGZvciBjbGllbnQgQVBJIGlmIGEgbmV3IHdpbmRvdyBzdGFydHMgd2l0aCBhIFVS
TCwKLSAgICAvLyBoZXJlIHdoZXJlIHdlIGtub3cgd2hhdCBVUkwgd2UgYXJlIGdvaW5nIHRvIG9w
ZW4uIFVuZm9ydHVuYXRlbHksIHRoaXMKLSAgICAvLyBjb2RlIHBhc3NlcyB0aGUgZW1wdHkgc3Ry
aW5nIGZvciB0aGUgVVJMLCBidXQgdGhlcmUncyBhIHJlYXNvbiBmb3IgdGhhdC4KLSAgICAvLyBC
ZWZvcmUgbG9hZGluZyB3ZSBoYXZlIHRvIHNldCB1cCB0aGUgb3BlbmVyLCBvcGVuZWRCeURPTSwK
LSAgICAvLyBhbmQgZGlhbG9nQXJndW1lbnRzIHZhbHVlcy4gQWxzbywgdG8gZGVjaWRlIHdoZXRo
ZXIgdG8gdXNlIHRoZSBVUkwKLSAgICAvLyB3ZSBjdXJyZW50bHkgZG8gYW4gYWxsb3dzQWNjZXNz
RnJvbSBjYWxsIHVzaW5nIHRoZSB3aW5kb3cgd2UgY3JlYXRlLAotICAgIC8vIHdoaWNoIGNhbid0
IGJlIGRvbmUgYmVmb3JlIGNyZWF0aW5nIGl0LiBXZSdkIGhhdmUgdG8gcmVzb2x2ZSBhbGwgdGhv
c2UKLSAgICAvLyBpc3N1ZXMgdG8gcGFzcyB0aGUgVVJMIGluc3RlYWQgb2YgIiIuCi0KLSAgICBi
b29sIGNyZWF0ZWQ7Ci0gICAgLy8gV2UgcGFzcyBpbiB0aGUgb3BlbmVyIGZyYW1lIGhlcmUgc28g
aXQgY2FuIGJlIHVzZWQgZm9yIGxvb2tpbmcgdXAgdGhlCi0gICAgLy8gZnJhbWUgbmFtZSwgaW4g
Y2FzZSB0aGUgYWN0aXZlIGZyYW1lIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcGVuZXIgZnJhbWUs
Ci0gICAgLy8gYW5kIHRoZSBuYW1lIHJlZmVyZW5jZXMgYSBmcmFtZSByZWxhdGl2ZSB0byB0aGUg
b3BlbmVyIGZyYW1lLCBmb3IgZXhhbXBsZQotICAgIC8vICJfc2VsZiIgb3IgIl9wYXJlbnQiLgot
ICAgIEZyYW1lKiBuZXdGcmFtZSA9IGNhbGxpbmdGcmFtZS0+bG9hZGVyKCktPmNyZWF0ZVdpbmRv
dyhvcGVuZXJGcmFtZS0+bG9hZGVyKCksIGZyYW1lUmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIGNy
ZWF0ZWQpOwotICAgIGlmICghbmV3RnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgbmV3
RnJhbWUtPmxvYWRlcigpLT5zZXRPcGVuZXIob3BlbmVyRnJhbWUpOwotICAgIG5ld0ZyYW1lLT5w
YWdlKCktPnNldE9wZW5lZEJ5RE9NKCk7Ci0KLSAgICAvLyBTZXQgZGlhbG9nIGFyZ3VtZW50cyBv
biB0aGUgZ2xvYmFsIG9iamVjdCBvZiB0aGUgbmV3IGZyYW1lLgotICAgIGlmICghZGlhbG9nQXJn
cy5Jc0VtcHR5KCkpIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0g
VjhQcm94eTo6Y29udGV4dChuZXdGcmFtZSk7Ci0gICAgICAgIGlmICghY29udGV4dC5Jc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KCJkaWFsb2dB
cmd1bWVudHMiKSwgZGlhbG9nQXJncyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXBy
b3RvY29sSXNKYXZhU2NyaXB0KHVybCkgfHwgU2NyaXB0Q29udHJvbGxlcjo6aXNTYWZlU2NyaXB0
KG5ld0ZyYW1lKSkgewotICAgICAgICBLVVJMIGNvbXBsZXRlZFVybCA9Ci0gICAgICAgICAgICB1
cmwuaXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxTdHJpbmcsICIiKSA6IGNvbXBsZXRlVVJMKHVy
bCk7Ci0gICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
LQotICAgICAgICBpZiAoY3JlYXRlZCkKLSAgICAgICAgICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+
Y2hhbmdlTG9jYXRpb24oY29tcGxldGVkVXJsLCByZWZlcnJlciwgZmFsc2UsIGZhbHNlLCB1c2Vy
R2VzdHVyZSk7Ci0gICAgICAgIGVsc2UgaWYgKCF1cmwuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bmV3RnJhbWUtPnJlZGlyZWN0U2NoZWR1bGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29t
cGxldGVkVXJsLnN0cmluZygpLCByZWZlcnJlciwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbmV3RnJhbWU7Ci19Ci0KLQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LnNob3dNb2RhbERpYWxvZygp
Iik7CkBAIC02ODMsNyArNjEyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93
OjpzaG93TW9kYWxEaWFsb2dDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJgogICAgIHdpbmRv
d0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSA9IGZhbHNlOwogICAgIHdpbmRvd0ZlYXR1cmVz
LmZ1bGxzY3JlZW4gPSBmYWxzZTsKIAotICAgIEZyYW1lKiBkaWFsb2dGcmFtZSA9IGNyZWF0ZVdp
bmRvdyhjYWxsaW5nRnJhbWUsIGVudGVyZWRGcmFtZSwgZnJhbWUsIHVybCwgIiIsIHdpbmRvd0Zl
YXR1cmVzLCBkaWFsb2dBcmdzKTsKKyAgICBGcmFtZSogZGlhbG9nRnJhbWUgPSBWOEJpbmRpbmdE
T01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBjYWxsaW5nRnJh
bWUsIGVudGVyZWRGcmFtZSwgZnJhbWUsIHVybCwgIiIsIHdpbmRvd0ZlYXR1cmVzLCBkaWFsb2dB
cmdzKTsKICAgICBpZiAoIWRpYWxvZ0ZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwogCkBAIC04MjYsNyArNzU1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2lu
ZG93OjpvcGVuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgd2lu
ZG93RmVhdHVyZXMueVNldCA9IGZhbHNlOwogICAgIH0KIAotICAgIGZyYW1lID0gY3JlYXRlV2lu
ZG93KGNhbGxpbmdGcmFtZSwgZW50ZXJlZEZyYW1lLCBmcmFtZSwgdXJsU3RyaW5nLCBmcmFtZU5h
bWUsIHdpbmRvd0ZlYXR1cmVzLCB2ODo6TG9jYWw8djg6OlZhbHVlPigpKTsKKyAgICBmcmFtZSA9
IFY4QmluZGluZ0RPTVdpbmRvdzo6Y3JlYXRlV2luZG93KFY4QmluZGluZ1N0YXRlOjpPbmx5KCks
IGNhbGxpbmdGcmFtZSwgZW50ZXJlZEZyYW1lLCBmcmFtZSwgdXJsU3RyaW5nLCBmcmFtZU5hbWUs
IHdpbmRvd0ZlYXR1cmVzLCB2ODo6TG9jYWw8djg6OlZhbHVlPigpKTsKIAogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ0RPTVdpbmRvdy5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdET01XaW5kb3cuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQwNjlmCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdET01XaW5kb3cuaApA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEJpbmRpbmdET01XaW5kb3dfaAorI2RlZmluZSBW
OEJpbmRpbmdET01XaW5kb3dfaAorCisjaW5jbHVkZSAiQmluZGluZ0RPTVdpbmRvdy5oIgorI2lu
Y2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFY4QmluZGluZzsKKworY2xhc3MgVjhCaW5kaW5nRE9NV2lu
ZG93IDogcHVibGljIEJpbmRpbmdET01XaW5kb3c8VjhCaW5kaW5nPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIHZvaWQgc3RvcmVEaWFsb2dBcmdzKFN0YXRlPFY4QmluZGluZz4qLCBGcmFtZSogbmV3
RnJhbWUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaWFsb2dBcmdzKQorICAgIHsKKyAgICAgICAg
Ly8gU2V0IGRpYWxvZyBhcmd1bWVudHMgb24gdGhlIGdsb2JhbCBvYmplY3Qgb2YgdGhlIG5ldyBm
cmFtZS4KKyAgICAgICAgaWYgKCFkaWFsb2dBcmdzLklzRW1wdHkoKSkgeworICAgICAgICAgICAg
djg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChuZXdGcmFt
ZSk7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPkdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KCJkaWFsb2dBcmd1bWVudHMiKSwg
ZGlhbG9nQXJncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOEJpbmRpbmdET01XaW5kb3dfaApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0
ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzEwMjcxCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdT
dGF0ZS5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJWOEJpbmRpbmdTdGF0ZS5oIgorCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdGF0ZTxWOEJpbmRp
bmc+KiBTdGF0ZTxWOEJpbmRpbmc+OjpPbmx5KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0YXRlLCBnbG9iYWxWOEJpbmRpbmdTdGF0ZSwgKCkpOworICAgIHJldHVybiAmZ2xvYmFsVjhC
aW5kaW5nU3RhdGU7Cit9CisKK0RPTVdpbmRvdyogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZl
V2luZG93KCkKK3sKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGFjdGl2ZUNvbnRleHQgPSB2
ODo6Q29udGV4dDo6R2V0Q2FsbGluZygpOworICAgIGlmIChhY3RpdmVDb250ZXh0LklzRW1wdHko
KSkgeworICAgICAgICAvLyBUaGVyZSBpcyBhIHNpbmdsZSBhY3RpdmF0aW9uIHJlY29yZCBvbiB0
aGUgc3RhY2ssIHNvIHRoYXQgbXVzdAorICAgICAgICAvLyBiZSB0aGUgYWN0aXZlQ29udGV4dC4K
KyAgICAgICAgYWN0aXZlQ29udGV4dCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCk7CisgICAg
fQorICAgIHJldHVybiBWOFByb3h5OjpyZXRyaWV2ZVdpbmRvdyhhY3RpdmVDb250ZXh0KTsKK30K
Kwordm9pZCBTdGF0ZTxWOEJpbmRpbmc+OjppbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1Rv
KEZyYW1lKiB0YXJnZXQpCit7CisgICAgVjhQcm94eTo6cmVwb3J0VW5zYWZlQWNjZXNzVG8odGFy
Z2V0LCBWOFByb3h5OjpSZXBvcnROb3cpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0
YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwNWMxNAotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3Rh
dGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEJpbmRpbmdTdGF0ZV9oCisjZGVmaW5l
IFY4QmluZGluZ1N0YXRlX2gKKworI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gU2luZ2xldG9uIGlt
cGxlbWVudGF0aW9uIG9mIFN0YXRlPFY4QmluZGluZz4uICBVc2VzIFY4J3MgZ2xvYmFsIGRhdGEK
Ky8vIHN0cnVjdHVyZXMgdG8gcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHJlbGV2YW50IGV4ZWN1
dGlvbiBzdGF0ZS4KK3RlbXBsYXRlIDw+CitjbGFzcyBTdGF0ZTxWOEJpbmRpbmc+IDogcHVibGlj
IFN0YXRlPEdlbmVyaWNCaW5kaW5nPiB7CitwdWJsaWM6CisgICAgLy8gU2luZ2xldG9uCisgICAg
c3RhdGljIFN0YXRlKiBPbmx5KCk7CisKKyAgICAvLyBUaGUgRE9NV2luZG93IGNvcnJlc3BvbmRp
bmcgdG8gdGhlICdjYWxsaW5nIGNvbnRleHQnIG9mIGV4ZWN1dGlvbi4KKyAgICBET01XaW5kb3cq
IGdldEFjdGl2ZVdpbmRvdygpOworCisgICAgLy8gUmVwb3J0cyBhbiBlcnJvciBtZXNzYWdlICh3
aXRob3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sgZmFpbHMuCisgICAgc3RhdGljIHZv
aWQgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhGcmFtZSopOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IFN0YXRlKCkge30KKyAgICB+U3RhdGUoKTsKK307CisKK3R5cGVkZWYgU3Rh
dGU8VjhCaW5kaW5nPiBWOEJpbmRpbmdTdGF0ZTsKKworfQorCisjZW5kaWYgLy8gVjhCaW5kaW5n
U3RhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63860</attachid>
            <date>2010-08-08 23:33:48 -0700</date>
            <delta_ts>2010-08-08 23:35:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33201-20100809153346.patch</filename>
            <type>text/plain</type>
            <size>31514</size>
            <attacher name="Dominic Cooney">dominicc</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTEzNzI2MWZlZGM3OWE3NjMzMWMzMzcyZTNkODRkZjJlNmE2Nzc4Zi4uYjk1MjAyYjg3YWU4N2Yy
MzNjNjExOGIwZTg5ZDI0NDgwZjE5OTNkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNy0wMSAgRG9t
aW5pYyBDb29uZXkgIDxkb21pbmljY0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVzIHdpbmRvdy5vcGVuIGxvZ2ljIGludG8g
dGhlIGdlbmVyaWMgYmluZGluZ3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyB3aW5kb3cu
b3BlbiBsb2dpYyBmcm9tIFY4IGludG8gdGhlIGdlbmVyaWMKKyAgICAgICAgYmluZGluZ3Mgc28g
aXQgY291bGQgYmUgc2hhcmVkIHdpdGggSlNDLiBKU0Mgc2hhcmluZyBpcyBub3QgaW4KKyAgICAg
ICAgdGhpcyBwYXRjaC4gVGhpcyBwYXRjaCBpcyBvZiB0aGUgc2FtZSBmbGF2b3IvaW50ZW50IGFz
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMyMDE+
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTM5
MgorCisgICAgICAgICogYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93Lmg6CisgICAg
ICAgIChXZWJDb3JlOjo6OmNyZWF0ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjo6Om9wZW4p
OgorICAgICAgICAoV2ViQ29yZTo6Ojpjb21wbGV0ZVVSTCk6CisgICAgICAgICogYmluZGluZ3Mv
Z2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6YWxsb3dQb3BV
cCk6CisgICAgICAgIChXZWJDb3JlOjo6OnNob3VsZEFsbG93TmF2aWdhdGlvbik6CisgICAgICAg
ICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpWOEJpbmRpbmc6
OmVtcHR5U2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeSk6CisgICAgICAg
IChXZWJDb3JlOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkQWxsb3dOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXRlVVJMKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2dDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvdzo6b3BlbkNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojo6OmdldEFjdGl2ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0Rmlyc3RGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjo6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAgICAgICog
YmluZGluZ3Mvdjgvc3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6Oik6CisKIDIwMTAtMDgtMDYgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8u
bm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdET01XaW5kb3cu
aCBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nRE9NV2luZG93LmgKaW5kZXggZjg4
M2QxMTAyMzVkN2QzMDY4YzFjYmU1ZjdhOTIwMWU0ZWFmODE1OC4uZGRhNTY0NDE5Mzg0OTYzY2Fk
MTYyM2FmODA0ODhlMDcwZjE1YThjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5l
cmljL0JpbmRpbmdET01XaW5kb3cuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmlu
ZGluZ0RPTVdpbmRvdy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKKyAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKICAqIG1ldDoKLSAqIAorICoKICAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCiAgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQog
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqIAorICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKICAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
QEAgLTMxLDExICszMSwxNyBAQAogI2lmbmRlZiBCaW5kaW5nRE9NV2luZG93X2gKICNkZWZpbmUg
QmluZGluZ0RPTVdpbmRvd19oCiAKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5n
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCisjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
aW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
Miw2ICs1OCwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiBmcmFtZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJpbmRpbmdWYWx1ZSBkaWFsb2dBcmdzKTsKKworICAgIHN0YXRpYyBXZWJDb3Jl
OjpET01XaW5kb3cqIG9wZW4oU3RhdGU8QmluZGluZz4qLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6RE9NV2luZG93KiBwYXJlbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2luZG93RmVhdHVyZXMmIHJhd0ZlYXR1
cmVzKTsKKworICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSBwbGFjZSBmb3IgZ2VuZXJp
YyBiaW5kaW5nIHV0aWxpdGllcy4KKyAgICBzdGF0aWMgS1VSTCBjb21wbGV0ZVVSTChTdGF0ZTxC
aW5kaW5nPiosIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOworCitwcml2YXRlOgorICAgIC8v
IEhvcml6b250YWwgYW5kIHZlcnRpY2FsIG9mZnNldCwgZnJvbSB0aGUgcGFyZW50IGNvbnRlbnQg
YXJlYSwKKyAgICAvLyBhcm91bmQgbmV3bHkgb3BlbmVkIHBvcHVwcyB0aGF0IGRvbid0IHNwZWNp
ZnkgYSBsb2NhdGlvbi4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBvcHVwVGlsZVBpeGVscyA9IDEw
OwogfTsKIAogLy8gSW1wbGVtZW50YXRpb25zIG9mIHRlbXBsYXRlZCBtZXRob2RzIG11c3QgYmUg
aW4gdGhpcyBmaWxlLgpAQCAtMTAzLDggKzEyMyw4IEBAIEZyYW1lKiBCaW5kaW5nRE9NV2luZG93
PEJpbmRpbmc+OjpjcmVhdGVXaW5kb3coU3RhdGU8QmluZGluZz4qIHN0YXRlLAogCiAgICAgaWYg
KCFwcm90b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6
Y2FuQWNjZXNzRnJhbWUoc3RhdGUsIG5ld0ZyYW1lLCB0cnVlKSkgewogICAgICAgICBLVVJMIGNv
bXBsZXRlZFVybCA9Ci0gICAgICAgICAgICB1cmwuaXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxT
dHJpbmcsICIiKSA6IGNvbXBsZXRlVVJMKHVybCk7Ci0gICAgICAgIGJvb2wgdXNlckdlc3R1cmUg
PSBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKyAgICAgICAgICAgIHVybC5pc0VtcHR5KCkgPyBL
VVJMKFBhcnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoc3RhdGUsIHVybCk7CisgICAg
ICAgIGJvb2wgdXNlckdlc3R1cmUgPSBzdGF0ZS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAK
ICAgICAgICAgaWYgKGNyZWF0ZWQpCiAgICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNo
YW5nZUxvY2F0aW9uKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdl
c3R1cmUpOwpAQCAtMTE1LDYgKzEzNSwxNTMgQEAgRnJhbWUqIEJpbmRpbmdET01XaW5kb3c8Qmlu
ZGluZz46OmNyZWF0ZVdpbmRvdyhTdGF0ZTxCaW5kaW5nPiogc3RhdGUsCiAgICAgcmV0dXJuIG5l
d0ZyYW1lOwogfQogCit0ZW1wbGF0ZTxjbGFzcyBCaW5kaW5nPgorV2ViQ29yZTo6RE9NV2luZG93
KiBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+OjpvcGVuKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlOjpET01XaW5kb3cqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGZy
YW1lTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXaW5kb3dGZWF0dXJlcyYgcmF3RmVhdHVyZXMpCit7CisgICAgRnJhbWUqIGZy
YW1lID0gcGFyZW50LT5mcmFtZSgpOworCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGlu
Zz46OmNhbkFjY2Vzc0ZyYW1lKHN0YXRlLCBmcmFtZSwgdHJ1ZSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgpOworICAg
IGlmICghZmlyc3RGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBGcmFtZSogYWN0aXZl
RnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICAvLyBXZSBtYXkgbm90IGhhdmUg
YSBjYWxsaW5nIGNvbnRleHQgaWYgd2UgYXJlIGludm9rZWQgYnkgYSBwbHVnaW4KKyAgICAvLyB2
aWEgTlBBUEkuCisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgYWN0aXZlRnJhbWUgPSBm
aXJzdEZyYW1lOworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVlOjpmaW5k
KCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrCisgICAgLy8g
Zm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdpbmRvdy5vcGVu
KCkgY2FsbHMgd2l0aAorICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhl
IHBvcHVwIGJsb2NrZXIuCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmFsbG93
UG9wVXAoc3RhdGUpCisgICAgICAgICYmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFmcmFtZS0+
dHJlZSgpLT5maW5kKGZyYW1lTmFtZSkpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIEdldCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBfdG9w
IGFuZCBfcGFyZW50LgorICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBjYW4gc2NoZWR1bGUgYSBs
b2NhdGlvbiBjaGFuZ2UgcmlnaHQgbm93IGFuZAorICAgIC8vIHJldHVybiBlYXJseS4KKyAgICBi
b29sIHRvcE9yUGFyZW50ID0gZmFsc2U7CisgICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsK
KyAgICAgICAgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKKyAgICAgICAgdG9wT3JQYXJl
bnQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgeworICAg
ICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQorICAgICAg
ICAgICAgZnJhbWUgPSBwYXJlbnQ7CisgICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHRvcE9yUGFyZW50KSB7CisgICAgICAgIGlmICghQmluZGluZ1NlY3VyaXR5PEJp
bmRpbmc+OjpzaG91bGRBbGxvd05hdmlnYXRpb24oc3RhdGUsIGZyYW1lKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBjb21wbGV0ZWRVcmw7CisgICAgICAgIGlmICgh
dXJsU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbXBsZXRlZFVybCA9IGNvbXBsZXRl
VVJMKHN0YXRlLCB1cmxTdHJpbmcpOworCisgICAgICAgIGlmICghY29tcGxldGVkVXJsLmlzRW1w
dHkoKQorICAgICAgICAgICAgJiYgKCFwcm90b2NvbElzSmF2YVNjcmlwdChjb21wbGV0ZWRVcmwp
CisgICAgICAgICAgICAgICAgfHwgQmluZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjpjYW5BY2Nlc3NG
cmFtZShzdGF0ZSwgZnJhbWUsIHRydWUpKSkgeworICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVy
ZSA9IHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKKworICAgICAgICAgICAgLy8gRm9y
IHdoYXRldmVyIHJlYXNvbiwgRmlyZWZveCB1c2VzIHRoZSBmaXJzdCBmcmFtZSB0byBkZXRlcm1p
bmUKKyAgICAgICAgICAgIC8vIHRoZSBvdXRnb2luZ1JlZmVycmVyLiAgV2UgcmVwbGljYXRlIHRo
YXQgYmVoYXZpb3IgaGVyZS4KKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGZpcnN0RnJh
bWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7CisKKyAgICAgICAgICAgIGZyYW1lLT5y
ZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwg
cmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNlckdlc3R1cmUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7CisgICAgfQorCisgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgYSBuYW1lZCBmcmFtZSBvciBhIG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKKyAgICAvLyBj
cmVhdGVXaW5kb3coKSBoZWxwZXIuCisKKyAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBw
YXJzZWQgdmFsdWVzIHNvIHdlIGNhbiByZXN0b3JlIHRoZQorICAgIC8vIHZhbHVlcyB3ZSBtYXkg
bm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyIHdlIGRvIHRoZSBtdWx0aXBsZQorICAgIC8vIG1v
bml0b3IgZml4ZXMuCisgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXMocmF3RmVhdHVy
ZXMpOworICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0ID0gc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdl
LT5tYWluRnJhbWUoKS0+dmlldygpKTsKKworICAgIC8vIFNldCBkZWZhdWx0IHNpemUgYW5kIGxv
Y2F0aW9uIG5lYXIgcGFyZW50IHdpbmRvdyBpZiBub25lIHdlcmUgc3BlY2lmaWVkLgorICAgIC8v
IFRoZXNlIG1heSBiZSBmdXJ0aGVyIG1vZGlmaWVkIGJ5IGFkanVzdFdpbmRvd1JlY3QsIGJlbG93
LgorICAgIGlmICghd2luZG93RmVhdHVyZXMueFNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJl
cy54ID0gcGFyZW50LT5zY3JlZW5YKCkgLSBzY3JlZW5SZWN0LngoKSArIHBvcHVwVGlsZVBpeGVs
czsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IHRydWU7CisgICAgfQorICAgIGlmICgh
d2luZG93RmVhdHVyZXMueVNldCkgeworICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gcGFyZW50
LT5zY3JlZW5ZKCkgLSBzY3JlZW5SZWN0LnkoKSArIHBvcHVwVGlsZVBpeGVsczsKKyAgICAgICAg
d2luZG93RmVhdHVyZXMueVNldCA9IHRydWU7CisgICAgfQorICAgIGlmICghd2luZG93RmVhdHVy
ZXMud2lkdGhTZXQpIHsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGggPSBwYXJlbnQtPmlu
bmVyV2lkdGgoKTsKKyAgICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoIXdpbmRvd0ZlYXR1cmVzLmhlaWdodFNldCkgeworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy5oZWlnaHQgPSBwYXJlbnQtPmlubmVySGVpZ2h0KCk7CisgICAgICAgIHdpbmRvd0Zl
YXR1cmVzLmhlaWdodFNldCA9IHRydWU7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHdpbmRvd1Jl
Y3Qod2luZG93RmVhdHVyZXMueCwgd2luZG93RmVhdHVyZXMueSwgd2luZG93RmVhdHVyZXMud2lk
dGgsIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCk7CisKKyAgICAvLyBUaGUgbmV3IHdpbmRvdydzIGxv
Y2F0aW9uIGlzIHJlbGF0aXZlIHRvIGl0cyBjdXJyZW50IHNjcmVlbiwgc28gc2hpZnQKKyAgICAv
LyBpdCBpbiBjYXNlIGl0J3Mgb24gYSBzZWNvbmRhcnkgbW9uaXRvci4gU2VlIGh0dHA6Ly9iL3Zp
ZXdJc3N1ZT9pZD05Njc5MDUuCisgICAgd2luZG93UmVjdC5tb3ZlKHNjcmVlblJlY3QueCgpLCBz
Y3JlZW5SZWN0LnkoKSk7CisgICAgV2ViQ29yZTo6RE9NV2luZG93OjphZGp1c3RXaW5kb3dSZWN0
KHNjcmVlblJlY3QsIHdpbmRvd1JlY3QsIHdpbmRvd1JlY3QpOworCisgICAgd2luZG93RmVhdHVy
ZXMueCA9IHdpbmRvd1JlY3QueCgpOworICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5kb3dSZWN0
LnkoKTsKKyAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOwor
ICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworCisgICAgLy8g
SWYgZWl0aGVyIG9mIHRoZSBvcmlnaW4gY29vcmRpbmF0ZXMgb3IgZGltZW5zaW9ucyB3ZXJlbid0
IHNldAorICAgIC8vIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcsIG1ha2Ugc3VyZSB0aGV5IGFyZW4n
dCBzZXQgbm93LgorICAgIGlmICghcmF3RmVhdHVyZXMueFNldCkgeworICAgICAgICB3aW5kb3dG
ZWF0dXJlcy54ID0gMDsKKyAgICAgICAgd2luZG93RmVhdHVyZXMueFNldCA9IGZhbHNlOworICAg
IH0KKyAgICBpZiAoIXJhd0ZlYXR1cmVzLnlTZXQpIHsKKyAgICAgICAgd2luZG93RmVhdHVyZXMu
eSA9IDA7CisgICAgICAgIHdpbmRvd0ZlYXR1cmVzLnlTZXQgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFyYXdGZWF0dXJlcy53aWR0aFNldCkgeworICAgICAgd2luZG93RmVhdHVyZXMud2lkdGgg
PSAwOworICAgICAgd2luZG93RmVhdHVyZXMud2lkdGhTZXQgPSBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFyYXdGZWF0dXJlcy5oZWlnaHRTZXQpIHsKKyAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdo
dCA9IDA7CisgICAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPSBmYWxzZTsKKyAgICB9CisK
KyAgICBmcmFtZSA9IGNyZWF0ZVdpbmRvdyhzdGF0ZSwgYWN0aXZlRnJhbWUsIGZpcnN0RnJhbWUs
IGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVyZXMsIEJpbmRpbmc6OmVt
cHR5U2NyaXB0VmFsdWUoKSk7CisKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBmcmFtZS0+ZG9tV2luZG93KCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBC
aW5kaW5nPgorS1VSTCBCaW5kaW5nRE9NV2luZG93PEJpbmRpbmc+Ojpjb21wbGV0ZVVSTChTdGF0
ZTxCaW5kaW5nPiogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpCit7CisgICAgLy8gRm9yIGhpc3Rvcmlj
YWwgcmVhc29ucywgd2UgbmVlZCB0byBjb21wbGV0ZSB0aGUgVVJMIHVzaW5nIHRoZQorICAgIC8v
IGR5bmFtaWMgZnJhbWUuCisgICAgRnJhbWUqIGZyYW1lID0gc3RhdGUtPmdldEZpcnN0RnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gS1VSTCgpOworICAgIHJldHVybiBm
cmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKHJlbGF0aXZlVVJMKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQmluZGluZ0RPTVdpbmRvd19oCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmggYi9XZWJDb3JlL2Jp
bmRpbmdzL2dlbmVyaWMvQmluZGluZ1NlY3VyaXR5LmgKaW5kZXggZDdjOWRmZTIyZDEyZjFiZjkz
MDVhYzg0YjcxMzJkZjdkOTM2M2VhNi4uMTEyNGY3ZWY2ZTc2ZTNhYThlYWZjNzkyMDY1YWE2ODJi
MWEwNTRlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmljL0JpbmRpbmdTZWN1
cml0eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYy9CaW5kaW5nU2VjdXJpdHkuaApA
QCAtMzQsMTQgKzM0LDE1IEBACiAjaW5jbHVkZSAiQmluZGluZ1NlY3VyaXR5QmFzZS5oIgogI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkdlbmVyaWNCaW5kaW5nLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudEJhc2UuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIEZyYW1l
OwogY2xhc3MgTm9kZTsKIAogLy8gU2VjdXJpdHkgZnVuY3Rpb25zIHNoYXJlZCBieSB2YXJpb3Vz
IGxhbmd1YWdlIGJpbmRpbmdzLgpAQCAtNTUsOSArNTYsMTIgQEAgcHVibGljOgogICAgIC8vIGN1
cnJlbnQgc2VjdXJpdHkgY29udGV4dC4KICAgICBzdGF0aWMgYm9vbCBjaGVja05vZGVTZWN1cml0
eShTdGF0ZTxCaW5kaW5nPiosIE5vZGUqIHRhcmdldCk7CiAKKyAgICBzdGF0aWMgYm9vbCBhbGxv
d1BvcFVwKFN0YXRlPEJpbmRpbmc+Kik7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0aW5nRnJh
bWVTcmNUb0phdmFzY3JpcHRVcmwoU3RhdGU8QmluZGluZz4qLCBIVE1MRnJhbWVFbGVtZW50QmFz
ZSosIFN0cmluZyB2YWx1ZSk7CiAgICAgc3RhdGljIGJvb2wgYWxsb3dTZXR0aW5nU3JjVG9KYXZh
c2NyaXB0VVJMKFN0YXRlPEJpbmRpbmc+KiwgRWxlbWVudCosIFN0cmluZyBuYW1lLCBTdHJpbmcg
dmFsdWUpOwogCisgICAgc3RhdGljIGJvb2wgc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKFN0YXRlPEJp
bmRpbmc+KiwgRnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBCaW5kaW5nU2VjdXJp
dHkoKSB7fQogICAgIH5CaW5kaW5nU2VjdXJpdHkoKTsKQEAgLTExMCw2ICsxMTQsMTggQEAgYm9v
bCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmNoZWNrTm9kZVNlY3VyaXR5KFN0YXRlPEJpbmRp
bmc+KiBzdGF0ZSwgTm9kZSogbm8KIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJpbmRpbmc+Citib29s
IEJpbmRpbmdTZWN1cml0eTxCaW5kaW5nPjo6YWxsb3dQb3BVcChTdGF0ZTxCaW5kaW5nPiogc3Rh
dGUpCit7CisgICAgaWYgKHN0YXRlLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBGcmFtZSogZnJhbWUgPSBzdGF0ZS0+Z2V0Rmlyc3RGcmFtZSgp
OworICAgIEFTU0VSVChmcmFtZSk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNl
dHRpbmdzKCk7CisgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzLT5qYXZhU2NyaXB0Q2Fu
T3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBCaW5kaW5n
PgogYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OmFsbG93U2V0dGluZ0ZyYW1lU3JjVG9K
YXZhc2NyaXB0VXJsKFN0YXRlPEJpbmRpbmc+KiBzdGF0ZSwgSFRNTEZyYW1lRWxlbWVudEJhc2Uq
IGZyYW1lLCBTdHJpbmcgdmFsdWUpCiB7CiAgICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGRl
cHJlY2F0ZWRQYXJzZVVSTCh2YWx1ZSkpKSB7CkBAIC0xMjgsNiArMTQ0LDEzIEBAIGJvb2wgQmlu
ZGluZ1NlY3VyaXR5PEJpbmRpbmc+OjphbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoU3Rh
dGU8QmluZGluZz4qIHN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3RlbXBsYXRlIDxjbGFzcyBC
aW5kaW5nPgorYm9vbCBCaW5kaW5nU2VjdXJpdHk8QmluZGluZz46OnNob3VsZEFsbG93TmF2aWdh
dGlvbihTdGF0ZTxCaW5kaW5nPiogc3RhdGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBGcmFtZSog
YWN0aXZlRnJhbWUgPSBzdGF0ZS0+Z2V0QWN0aXZlRnJhbWUoKTsKKyAgICByZXR1cm4gYWN0aXZl
RnJhbWUgJiYgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oZnJh
bWUpOworfQorCiB9CiAKICNlbmRpZiAvLyBCaW5kaW5nU2VjdXJpdHlfaApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKaW5kZXggYTE1ZWNlMTI0OTI0ZmIzN2IxMjhmYTYzZDY1Y2VhYzU4ZThhZTQ0YS4u
ODM4M2Y5NGYxZWNlNTgxMzJlYjQ4NmRlNTQxNzA3MmUzNzY5YTVmMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSogCisqCiAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCiAqIG1ldDoKLSogCisqCiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpA
QCAtMTQsNyArMTQsNyBAQAogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCiAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCiAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0qIAorKgogKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCiAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1
ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKKwogICAgIGNsYXNzIEV2ZW50
TGlzdGVuZXI7CiAgICAgY2xhc3MgRXZlbnRUYXJnZXQ7CiAgICAgY2xhc3MgVjhCaW5kaW5nRE9N
V2luZG93OwpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWYWx1ZTsKICAgICAgICAg
dHlwZWRlZiBWOEJpbmRpbmdET01XaW5kb3cgRE9NV2luZG93OworCisgICAgICAgIHN0YXRpYyBW
YWx1ZSBlbXB0eVNjcmlwdFZhbHVlKCkgeyByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsg
fQogICAgIH07CiAgICAgdHlwZWRlZiBCaW5kaW5nU2VjdXJpdHk8VjhCaW5kaW5nPiBWOEJpbmRp
bmdTZWN1cml0eTsKICAgICAKQEAgLTE1Miw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgewogICAgICAgICByZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhvYmplY3QpOwog
ICAgIH0KLSAgICAKKwogICAgIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYsIGludCBpbmRleCk7CiAKICAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMg
ZnVuY3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CkBAIC0xNzEsNyArMTczLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEF0b21pY1N0cmluZyB0b0F0b21pY1dlYkNvcmVT
dHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAKICAgICBT
dHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSk7Ci0gCisKICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4VW5k
ZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKTsKIAogICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcmIHN0cik7CkBAIC0xODMsMzEgKzE4
NSwzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgZG91YmxlIHRvV2ViQ29yZURhdGUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
djhEYXRlT3JOdWxsKGRvdWJsZSB2YWx1ZSk7Ci0gICAgCisKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKTsKIAogICAgIHN0cnVjdCBC
YXRjaGVkQXR0cmlidXRlOwogICAgIHN0cnVjdCBCYXRjaGVkQ2FsbGJhY2s7Ci0gICAgCisKICAg
ICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3Rl
bnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gcGFyZW50Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmaWVsZENvdW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQXR0cmlidXRlKiwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRB
dHRyaWJ1dGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgYXR0cmlidXRlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRDYWxsYmFjayosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjYWxsYmFja0NvdW50KTsKLSAg
ICAKKwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRFbGVtZW50U3RyaW5nQXR0cihjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIHZvaWQgc2V0RWxlbWVudFN0
cmluZ0F0dHIoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+KTsKIAotICAgIAorCiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6OlN0cmluZz4gZ2V0VG9TdHJpbmdOYW1lKCk7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGdldFRvU3RyaW5nVGVtcGxhdGUoKTsKLSAgICAKKwogICAgIC8vIFY4
UGFyYW1ldGVyIGlzIGFuIGFkYXB0ZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBWOCB2YWx1ZXMgdG8g
U3RyaW5ncwogICAgIC8vIG9yIEF0b21pY1N0cmluZ3MgYXMgYXBwcm9wcmlhdGUsIHVzaW5nIG11
bHRpcGxlIHR5cGVjYXN0IG9wZXJhdG9ycy4KICAgICBlbnVtIFY4UGFyYW1ldGVyTW9kZSB7CkBA
IC0yMjQsNyArMjI2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fdjhPYmplY3Q7CiAgICAgfTsKLSAgICAKKwogICAg
IHRlbXBsYXRlPD4gaW5saW5lIFY4UGFyYW1ldGVyPERlZmF1bHRNb2RlPjo6b3BlcmF0b3IgU3Ry
aW5nKCkgeyByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKG1fdjhPYmplY3QpOyB9CiAgICAgdGVtcGxh
dGU8PiBpbmxpbmUgVjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz46Om9wZXJhdG9yIFN0cmluZygp
IHsgcmV0dXJuIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sobV92OE9iamVjdCk7IH0KICAg
ICB0ZW1wbGF0ZTw+IGlubGluZSBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2s+
OjpvcGVyYXRvciBTdHJpbmcoKSB7IHJldHVybiB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5k
ZWZpbmVkQ2hlY2sobV92OE9iamVjdCk7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAK
aW5kZXggZjc4MDIxODdkMjE1OGIwOGIzYmIxMzYzMTYwZGMyMTc0NzYxMzEzZC4uMmU1Y2Y4YjBm
NTI3NmY3NzYzZmYzNjljNGU0MDU3MjM5ZmRhMGRiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFV0aWxpdGllcy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxp
dGllcy5jcHAKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOEJpbmRpbmdET01XaW5kb3cuaCIgLy8gRklYTUU6IHJlbW92ZSB3aGVuIGNv
bXBsZXRlVVJMIG1vdmVzCisjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKICNpbmNsdWRlICJW
OFByb3h5LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5oIgpAQCAtOTIsNDEgKzk0LDI1IEBAIHZvaWQgdHJhbnNmZXJI
aWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LAogICAgIGlmICgh
bmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1ZS0+SXNVbmRlZmluZWQoKSkKICAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3QsIG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsKIH0K
LSAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdlc3R1cmUoKQogewotICAgIEZyYW1lKiBmcmFt
ZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOwotICAgIHJldHVy
biBmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAg
IHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsK
IH0KIAogRnJhbWUqIGNhbGxpbmdPckVudGVyZWRGcmFtZSgpCiB7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFm
cmFtZSkgewotICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB3aGVuIHByb2Nlc3Npbmcgc2NyaXB0
IGZyb20gYSBwbHVnLWluLCB3ZSBtaWdodCBub3QKLSAgICAgICAgLy8gaGF2ZSBhIGNhbGxpbmcg
Y29udGV4dC4gIEluIHRob3NlIGNhc2VzLCB3ZSBmYWxsIGJhY2sgdG8gdGhlCi0gICAgICAgIC8v
IGVudGVyZWQgY29udGV4dCBmb3Igc2VjdXJpdHkgY2hlY2tzLgotICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCBhIGJldHRlciBBUEkgZm9yIHJldHJpZXZpbmcgZnJhbWVzIHRoYXQgYWJzdHJhY3Rz
Ci0gICAgICAgIC8vICAgICAgICBhd2F5IHRoaXMgY29uY2Vybi4KLSAgICAgICAgZnJhbWUgPSBW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZyYW1lOworICAgIHJldHVybiBWOEJpbmRpbmdTdGF0ZTo6T25seSgpLT5nZXRBY3RpdmVG
cmFtZSgpOwogfQogCiBib29sIHNob3VsZEFsbG93TmF2aWdhdGlvbihGcmFtZSogZnJhbWUpCiB7
Ci0gICAgRnJhbWUqIGNhbGxpbmdPckVudGVyZWQgPSBjYWxsaW5nT3JFbnRlcmVkRnJhbWUoKTsK
LSAgICByZXR1cm4gY2FsbGluZ09yRW50ZXJlZCAmJiBjYWxsaW5nT3JFbnRlcmVkLT5sb2FkZXIo
KS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93TmF2aWdhdGlvbihWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCBmcmFt
ZSk7CiB9CiAKIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiByZWxhdGl2ZVVSTCkKIHsK
LSAgICAvLyBGb3IgaGlzdG9pY2FsIHJlYXNvbnMsIHdlIG5lZWQgdG8gY29tcGxldGUgdGhlIFVS
TCB1c2luZyB0aGUgZHluYW1pYyBmcmFtZS4KLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5Ojpy
ZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm4gS1VSTCgpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJM
KHJlbGF0aXZlVVJMKTsKKyAgICByZXR1cm4gVjhCaW5kaW5nRE9NV2luZG93Ojpjb21wbGV0ZVVS
TChWOEJpbmRpbmdTdGF0ZTo6T25seSgpLCByZWxhdGl2ZVVSTCk7CiB9CiAKIHZvaWQgbmF2aWdh
dGVJZkFsbG93ZWQoRnJhbWUqIGZyYW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9ja0hpc3Rv
cnksIGJvb2wgbG9ja0JhY2tGb3J3YXJkTGlzdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHAKaW5kZXggNTAxZTVhMmRlM2VhODc3OGI2
MjBlMTllOTU3YjU0YTg5MWIzNzZjZS4uMzA1ZmIxODU4ZTljNjAyMDFmYmQwN2Y1ZDVlYTI5MGYz
OGIxNDg2NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1
ZmZlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1
ZmZlckN1c3RvbS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVy
LmgiCiAKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAjaW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAppbmRleCBi
NGZhNzRmN2U5ZDRjM2U4OWY2M2E2ZWYzYzNhMWJlMjlmNzg1MDk2Li5jZmYyNTIzODQ4ZTY4MDQ3
NTk1NDNjMDE1MjQ1YjY4MjA5YTBiYTZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCkBAIC04MiwxMCArODIsNiBAQAogI2VuZGlmCiAj
aW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAotLy8gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwg
b2Zmc2V0LCBmcm9tIHRoZSBwYXJlbnQgY29udGVudCBhcmVhLCBhcm91bmQgbmV3bHkKLS8vIG9w
ZW5lZCBwb3B1cHMgdGhhdCBkb24ndCBzcGVjaWZ5IGEgbG9jYXRpb24uCi1zdGF0aWMgY29uc3Qg
aW50IHBvcHVwVGlsZVBpeGVscyA9IDEwOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBXaW5kb3dTZXRUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLCBib29sIHNpbmdsZVNob3QpCkBAIC00NDksMTcgKzQ0NSw2IEBAIHN0YXRpYyBib29s
IGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZy
YW1lLT5wYWdlKCktPmNocm9tZSgpLT5jYW5SdW5Nb2RhbE5vdygpOwogfQogCi1zdGF0aWMgYm9v
bCBhbGxvd1BvcFVwKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZy
YW1lRm9yRW50ZXJlZENvbnRleHQoKTsKLQotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgaWYgKGZy
YW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0aW5ncygpOwotICAgIHJl
dHVybiBzZXR0aW5ncyAmJiBzZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21h
dGljYWxseSgpOwotfQotCiBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyc2VNb2Rh
bERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVhdHVyZXNBcmcpCiB7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbWFwOwpAQCAtNTEzLDcgKzQ5OCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOERPTVdpbmRvdzo6c2hvd01vZGFsRGlhbG9nQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYKICAgICBpZiAoIWVudGVyZWRGcmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAotICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhYWxs
b3dQb3BVcCgpKQorICAgIGlmICghY2FuU2hvd01vZGFsRGlhbG9nTm93KGZyYW1lKSB8fCAhVjhC
aW5kaW5nU2VjdXJpdHk6OmFsbG93UG9wVXAoVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSkpCiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKICAgICBjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiBmZWF0dXJlcyA9IHBhcnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhmZWF0dXJlQXJncyk7
CkBAIC01ODQsMTM0ICs1NjksMTYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93
OjpvcGVuQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5ET01XaW5kb3cub3BlbigpIik7CiAKKyAgICBET01XaW5kb3cqIHBhcmVudCA9IFY4
RE9NV2luZG93Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBTdHJpbmcgdXJsU3RyaW5n
ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMF0pOwogICAg
IEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSAoYXJnc1sxXS0+SXNVbmRlZmluZWQoKSB8fCBhcmdz
WzFdLT5Jc051bGwoKSkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyh0b1dlYkNvcmVTdHJpbmco
YXJnc1sxXSkpOwotCi0gICAgRE9NV2luZG93KiBwYXJlbnQgPSBWOERPTVdpbmRvdzo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwot
Ci0gICAgaWYgKCFWOEJpbmRpbmdTZWN1cml0eTo6Y2FuQWNjZXNzRnJhbWUoVjhCaW5kaW5nU3Rh
dGU6Ok9ubHkoKSwgZnJhbWUsIHRydWUpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotCi0gICAgRnJhbWUqIGVudGVyZWRGcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JF
bnRlcmVkQ29udGV4dCgpOwotICAgIGlmICghZW50ZXJlZEZyYW1lKQotICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotCi0gICAgRnJhbWUqIGNhbGxpbmdGcmFtZSA9IFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4dCgpOwotICAgIC8vIFdlIG1heSBub3QgaGF2ZSBh
IGNhbGxpbmcgY29udGV4dCBpZiB3ZSBhcmUgaW52b2tlZCBieSBhIHBsdWdpbiB2aWEgTlBBUEku
Ci0gICAgaWYgKCFjYWxsaW5nRnJhbWUpCi0gICAgICAgIGNhbGxpbmdGcmFtZSA9IGVudGVyZWRG
cmFtZTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQotICAgIC8vIEJlY2F1c2UgRnJhbWVU
cmVlOjpmaW5kKCkgcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNr
Ci0gICAgLy8gZm9yIGVtcHR5IGZyYW1lbmFtZXMuIE90aGVyd2lzZSwgaWxsZWdpdGltYXRlIHdp
bmRvdy5vcGVuKCkgY2FsbHMgd2l0aAotICAgIC8vIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRo
cm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFhbGxvd1BvcFVwKCkgJiYKLSAgICAg
ICAgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQoZnJhbWVOYW1l
KSkpIHsKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBH
ZXQgdGhlIHRhcmdldCBmcmFtZSBmb3IgdGhlIHNwZWNpYWwgY2FzZXMgb2YgX3RvcCBhbmQgX3Bh
cmVudC4gIEluIHRob3NlCi0gICAgLy8gY2FzZXMsIHdlIGNhbiBzY2hlZHVsZSBhIGxvY2F0aW9u
IGNoYW5nZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KLSAgICBib29sIHRvcE9yUGFyZW50
ID0gZmFsc2U7Ci0gICAgaWYgKGZyYW1lTmFtZSA9PSAiX3RvcCIpIHsKLSAgICAgICAgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLT50b3AoKTsKLSAgICAgICAgdG9wT3JQYXJlbnQgPSB0cnVlOwotICAg
IH0gZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50IikgewotICAgICAgICBpZiAoRnJhbWUq
IHBhcmVudCA9IGZyYW1lLT50cmVlKCktPnBhcmVudCgpKQotICAgICAgICAgICAgZnJhbWUgPSBw
YXJlbnQ7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHRvcE9y
UGFyZW50KSB7Ci0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKLSAg
ICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgU3RyaW5nIGNvbXBs
ZXRlZFVybDsKLSAgICAgICAgaWYgKCF1cmxTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICAgICAg
Y29tcGxldGVkVXJsID0gY29tcGxldGVVUkwodXJsU3RyaW5nKTsKLQotICAgICAgICBpZiAoIWNv
bXBsZXRlZFVybC5pc0VtcHR5KCkgJiYKLSAgICAgICAgICAgICghcHJvdG9jb2xJc0phdmFTY3Jp
cHQoY29tcGxldGVkVXJsKSB8fCBTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUp
KSkgewotICAgICAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IHByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpOwotCi0gICAgICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMg
dGhlIGVudGVyZWQgZnJhbWUgdG8gZGV0ZXJtaW5lCi0gICAgICAgICAgICAvLyB0aGUgb3V0Z29p
bmdSZWZlcnJlci4gIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCi0gICAgICAgICAg
ICBTdHJpbmcgcmVmZXJyZXIgPSBlbnRlcmVkRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVy
cmVyKCk7Ci0KLSAgICAgICAgICAgIGZyYW1lLT5yZWRpcmVjdFNjaGVkdWxlcigpLT5zY2hlZHVs
ZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwgcmVmZXJyZXIsIGZhbHNlLCBmYWxzZSwgdXNl
ckdlc3R1cmUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1Y4KGZyYW1lLT5kb21XaW5k
b3coKSk7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBuYW1lZCBmcmFtZSBvciBh
IG5ldyB3aW5kb3csIHdlJ2xsIHVzZSB0aGUKLSAgICAvLyBjcmVhdGVXaW5kb3coKSBoZWxwZXIu
Ci0KLSAgICAvLyBQYXJzZSB0aGUgdmFsdWVzLCBhbmQgdGhlbiB3b3JrIHdpdGggYSBjb3B5IG9m
IHRoZSBwYXJzZWQgdmFsdWVzCi0gICAgLy8gc28gd2UgY2FuIHJlc3RvcmUgdGhlIHZhbHVlcyB3
ZSBtYXkgbm90IHdhbnQgdG8gb3ZlcndyaXRlIGFmdGVyCi0gICAgLy8gd2UgZG8gdGhlIG11bHRp
cGxlIG1vbml0b3IgZml4ZXMuCiAgICAgV2luZG93RmVhdHVyZXMgcmF3RmVhdHVyZXModG9XZWJD
b3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKGFyZ3NbMl0pKTsKLSAgICBXaW5kb3dG
ZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyhyYXdGZWF0dXJlcyk7Ci0gICAgRmxvYXRSZWN0IHNjcmVl
blJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwot
Ci0gICAgLy8gU2V0IGRlZmF1bHQgc2l6ZSBhbmQgbG9jYXRpb24gbmVhciBwYXJlbnQgd2luZG93
IGlmIG5vbmUgd2VyZSBzcGVjaWZpZWQuCi0gICAgLy8gVGhlc2UgbWF5IGJlIGZ1cnRoZXIgbW9k
aWZpZWQgYnkgYWRqdXN0V2luZG93UmVjdCwgYmVsb3cuCi0gICAgaWYgKCF3aW5kb3dGZWF0dXJl
cy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSBwYXJlbnQtPnNjcmVlblgoKSAt
IHNjcmVlblJlY3QueCgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJl
cy54U2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy55U2V0KSB7Ci0g
ICAgICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSBwYXJlbnQtPnNjcmVlblkoKSAtIHNjcmVlblJlY3Qu
eSgpICsgcG9wdXBUaWxlUGl4ZWxzOwotICAgICAgICB3aW5kb3dGZWF0dXJlcy55U2V0ID0gdHJ1
ZTsKLSAgICB9Ci0gICAgaWYgKCF3aW5kb3dGZWF0dXJlcy53aWR0aFNldCkgewotICAgICAgICB3
aW5kb3dGZWF0dXJlcy53aWR0aCA9IHBhcmVudC0+aW5uZXJXaWR0aCgpOwotICAgICAgICB3aW5k
b3dGZWF0dXJlcy53aWR0aFNldCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghd2luZG93RmVhdHVy
ZXMuaGVpZ2h0U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLmhlaWdodCA9IHBhcmVudC0+
aW5uZXJIZWlnaHQoKTsKLSAgICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0U2V0ID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCh3aW5kb3dGZWF0dXJlcy54LCB3aW5k
b3dGZWF0dXJlcy55LCB3aW5kb3dGZWF0dXJlcy53aWR0aCwgd2luZG93RmVhdHVyZXMuaGVpZ2h0
KTsKLQotICAgIC8vIFRoZSBuZXcgd2luZG93J3MgbG9jYXRpb24gaXMgcmVsYXRpdmUgdG8gaXRz
IGN1cnJlbnQgc2NyZWVuLCBzbyBzaGlmdAotICAgIC8vIGl0IGluIGNhc2UgaXQncyBvbiBhIHNl
Y29uZGFyeSBtb25pdG9yLiBTZWUgaHR0cDovL2Ivdmlld0lzc3VlP2lkPTk2NzkwNS4KLSAgICB3
aW5kb3dSZWN0Lm1vdmUoc2NyZWVuUmVjdC54KCksIHNjcmVlblJlY3QueSgpKTsKLSAgICBXZWJD
b3JlOjpET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2NyZWVuUmVjdCwgd2luZG93UmVjdCwg
d2luZG93UmVjdCk7Ci0KLSAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVjdC54KCk7Ci0g
ICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOwotICAgIHdpbmRvd0ZlYXR1cmVz
LmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7Ci0gICAgd2luZG93RmVhdHVyZXMud2lkdGgg
PSB3aW5kb3dSZWN0LndpZHRoKCk7Ci0KLSAgICAvLyBJZiBlaXRoZXIgb2YgdGhlIG9yaWdpbiBj
b29yZGluYXRlcyBvciBkaW1lbnNpb25zIHdlcmVuJ3Qgc2V0IGluIHRoZSBvcmlnaW5hbAotICAg
IC8vIHN0cmluZywgbWFrZSBzdXJlIHRoZXkgYXJlbid0IHNldCBub3cuCi0gICAgaWYgKCFyYXdG
ZWF0dXJlcy54U2V0KSB7Ci0gICAgICAgIHdpbmRvd0ZlYXR1cmVzLnggPSAwOwotICAgICAgICB3
aW5kb3dGZWF0dXJlcy54U2V0ID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICghcmF3RmVhdHVyZXMu
eVNldCkgewotICAgICAgICB3aW5kb3dGZWF0dXJlcy55ID0gMDsKLSAgICAgICAgd2luZG93RmVh
dHVyZXMueVNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLndpZHRoU2V0
KSB7Ci0gICAgICB3aW5kb3dGZWF0dXJlcy53aWR0aCA9IDA7Ci0gICAgICB3aW5kb3dGZWF0dXJl
cy53aWR0aFNldCA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXJhd0ZlYXR1cmVzLmhlaWdodFNl
dCkgewotICAgICAgd2luZG93RmVhdHVyZXMuaGVpZ2h0ID0gMDsKLSAgICAgIHdpbmRvd0ZlYXR1
cmVzLmhlaWdodFNldCA9IGZhbHNlOwotICAgIH0KLQotICAgIGZyYW1lID0gVjhCaW5kaW5nRE9N
V2luZG93OjpjcmVhdGVXaW5kb3coVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgY2FsbGluZ0ZyYW1l
LCBlbnRlcmVkRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVy
ZXMsIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCkpOworICAgIERPTVdpbmRvdyogY2hpbGQgPSBWOEJp
bmRpbmdET01XaW5kb3c6Om9wZW4oVjhCaW5kaW5nU3RhdGU6Ok9ubHkoKSwgcGFyZW50LCB1cmxT
dHJpbmcsIGZyYW1lTmFtZSwgcmF3RmVhdHVyZXMpOwogCi0gICAgaWYgKCFmcmFtZSkKKyAgICBp
ZiAoIWNoaWxkKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJu
IHRvVjgoZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gdG9WOChjaGlsZCk7CiB9CiAK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRp
bmdTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGlu
Z1N0YXRlLmNwcAppbmRleCA0NzEwMjcxZWZjOWRmYTlhZWU1OWFmZWIzMGU5MzI0NjI0ZmM5ZmU0
Li44OWU5YjE0YTEwYTU0YWE1YmJjODgwYWQ2ZmRiMmJhZmE4M2UzODc3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmNwcApA
QCAtMSwxMCArMSwxMCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCiAgKiBtZXQ6Ci0gKiAKKyAqCiAgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpA
QCAtMTQsNyArMTQsNyBAQAogICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwogICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKKyAqCiAgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCiAgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAogICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCkBAIC0zMSw2ICszMSw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nU3RhdGUuaCIKIAorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTUzLDkgKzU1
LDI1IEBAIERPTVdpbmRvdyogU3RhdGU8VjhCaW5kaW5nPjo6Z2V0QWN0aXZlV2luZG93KCkKICAg
ICByZXR1cm4gVjhQcm94eTo6cmV0cmlldmVXaW5kb3coYWN0aXZlQ29udGV4dCk7CiB9CiAKK0Zy
YW1lKiBTdGF0ZTxWOEJpbmRpbmc+OjpnZXRBY3RpdmVGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4
UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOworfQorCitGcmFtZSogU3Rh
dGU8VjhCaW5kaW5nPjo6Z2V0Rmlyc3RGcmFtZSgpCit7CisgICAgcmV0dXJuIFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpOworfQorCiB2b2lkIFN0YXRlPFY4QmluZGlu
Zz46OmltbWVkaWF0ZWx5UmVwb3J0VW5zYWZlQWNjZXNzVG8oRnJhbWUqIHRhcmdldCkKIHsKICAg
ICBWOFByb3h5OjpyZXBvcnRVbnNhZmVBY2Nlc3NUbyh0YXJnZXQsIFY4UHJveHk6OlJlcG9ydE5v
dyk7CiB9CiAKK2Jvb2wgU3RhdGU8VjhCaW5kaW5nPjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENv
bnRleHQoKTsKKyAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5wcm9jZXNzaW5n
VXNlckdlc3R1cmUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9zcGVjaWFsaXphdGlvbi9WOEJpbmRpbmdTdGF0ZS5oCmluZGV4IGYz
MDVjMTQ1MTA1NzNlZDMwZDY3ZjVkZThiY2ZhOTAwNzcyOGQxZjYuLmJhYmEwYzYzYzA4OGZmNzE0
ODU4ZDRkMDZiOWRmZmNiYzA0MWE3MmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
c3BlY2lhbGl6YXRpb24vVjhCaW5kaW5nU3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L3NwZWNpYWxpemF0aW9uL1Y4QmluZGluZ1N0YXRlLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IAorICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQogICogbWV0OgotICogCisgKgog
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKICAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
ICAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCiAgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICogCisgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
ICAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgpAQCAtMzYsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIEZyYW1lOworCiAvLyBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24gb2YgU3RhdGU8
VjhCaW5kaW5nPi4gIFVzZXMgVjgncyBnbG9iYWwgZGF0YQogLy8gc3RydWN0dXJlcyB0byByZXR1
cm4gaW5mb3JtYXRpb24gYWJvdXQgcmVsZXZhbnQgZXhlY3V0aW9uIHN0YXRlLgogdGVtcGxhdGUg
PD4KQEAgLTQ0LDExICs0NiwxOSBAQCBwdWJsaWM6CiAgICAgLy8gU2luZ2xldG9uCiAgICAgc3Rh
dGljIFN0YXRlKiBPbmx5KCk7CiAKKyAgICAvLyBSZXBvcnRzIGFuIGVycm9yIG1lc3NhZ2UgKHdp
dGhvdXQgZGVsYXkpIGlmIHRoZSBzZWN1cml0eSBjaGVjayBmYWlscy4KKyAgICBzdGF0aWMgdm9p
ZCBpbW1lZGlhdGVseVJlcG9ydFVuc2FmZUFjY2Vzc1RvKEZyYW1lKik7CisKICAgICAvLyBUaGUg
RE9NV2luZG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlICdjYWxsaW5nIGNvbnRleHQnIG9mIGV4ZWN1
dGlvbi4KICAgICBET01XaW5kb3cqIGdldEFjdGl2ZVdpbmRvdygpOwogCi0gICAgLy8gUmVwb3J0
cyBhbiBlcnJvciBtZXNzYWdlICh3aXRob3V0IGRlbGF5KSBpZiB0aGUgc2VjdXJpdHkgY2hlY2sg
ZmFpbHMuCi0gICAgc3RhdGljIHZvaWQgaW1tZWRpYXRlbHlSZXBvcnRVbnNhZmVBY2Nlc3NUbyhG
cmFtZSopOworICAgIC8vIFRoZSBmcmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSAnY2FsbGluZyBj
b250ZXh0JyBvZiBleGVjdXRpb24uCisgICAgRnJhbWUqIGdldEFjdGl2ZUZyYW1lKCk7CisKKyAg
ICAvLyBUaGUgZmlyc3QgZnJhbWUgaW4gd2hpY2ggZXhlY3V0aW9uIGVudGVyZWQgdXNlciBzY3Jp
cHQuCisgICAgRnJhbWUqIGdldEZpcnN0RnJhbWUoKTsKKworICAgIGJvb2wgcHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlKCk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU3RhdGUoKSB7fQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>