<?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>41051</bug_id>
          
          <creation_ts>2010-06-23 01:27:03 -0700</creation_ts>
          <short_desc>Yet more HTML5 =&gt; HTML renames</short_desc>
          <delta_ts>2010-06-23 01:33:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>241743</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:27:03 -0700</bug_when>
    <thetext>Yet more HTML5 =&gt; HTML renames</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241744</commentid>
    <comment_count>1</comment_count>
      <attachid>59489</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:29:00 -0700</bug_when>
    <thetext>Created attachment 59489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241745</commentid>
    <comment_count>2</comment_count>
      <attachid>59489</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 01:30:20 -0700</bug_when>
    <thetext>Comment on attachment 59489
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241746</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:33:47 -0700</bug_when>
    <thetext>Committed r61674: &lt;http://trac.webkit.org/changeset/61674&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59489</attachid>
            <date>2010-06-23 01:29:00 -0700</date>
            <delta_ts>2010-06-23 01:30:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41051-20100623012859.patch</filename>
            <type>text/plain</type>
            <size>111726</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDYtMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBZZXQg
bW9yZSBIVE1MNSA9PiBIVE1MIHJlbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQxMDUxCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5hbWVzIEhU
TUw1RG9jdW1lbnRQYXJzZXIgdG8gSFRNTERvY3VtZW50UGFyc2VyIGFuZAorICAgICAgICBIVE1M
NVRyZWVCdWlsZGVyIHRvIEhUTUxUcmVlQnVpbGRlci4gIFRoZXJlIHdhcyBzb21lIGRpc2N1c3Np
b24gYWJvdXQKKyAgICAgICAgd2hldGhlciB0byB1c2UgdGhlIG5hbWUgSFRNTFRyZWVCdWlsZGVy
IG9yIEhUTUxUcmVlQ29uc3RydWN0b3IsIGJ1dAorICAgICAgICB0cmVlIGJ1aWxkZXIgc2VlbXMg
dG8gYmUgdGhlIGRvbWluYXRlIG5hbWUgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLgorCisgICAg
ICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ6OnBh
cnNlSFRNTCk6CisgICAgICAgICogaHRtbC9IVE1MNURvY3VtZW50UGFyc2VyLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBodG1sL0hUTUw1UHJlbG9hZFNjYW5uZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TDVQcmVsb2FkU2Nhbm5lcjo6c2Nhbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MNVByZWxvYWRT
Y2FubmVyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAqIGh0bWwvSFRNTDVUcmVlQnVpbGRlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TERvY3VtZW50OjpjcmVhdGVQYXJzZXIpOgorICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50UGFy
c2VyLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJz
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjp+SFRNTERvY3VtZW50
UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcklmUG9zc2libGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjppc1NjaGVkdWxlZEZvclJl
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNp
bmdBZnRlcllpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cnVu
U2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjp3aWxsUHVtcExleGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudFBhcnNlcjo6ZGlkUHVtcExleGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjphdHRlbXB0VG9FbmQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjplbmRJZkRlbGF5ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRpbmdTY3JpcHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjppblNjcmlwdEV4ZWN1dGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5nRm9yU2NyaXB0cyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4
ZWN1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OndhdGNoRm9y
TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BXYXRjaGlu
Z0ZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpzaG91bGRM
b2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVu
dFBhcnNlcjo6bm90aWZ5RmluaXNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50
UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdCk6CisgICAgICAgICogaHRtbC9IVE1M
RG9jdW1lbnRQYXJzZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL0hUTUw1RG9jdW1lbnRQ
YXJzZXIuaC4KKyAgICAgICAgKiBodG1sL0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcnNlclNjaGVkdWxlcjo6SFRNTFBhcnNlclNjaGVkdWxlcik6Cisg
ICAgICAgICogaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVyLmg6CisgICAgICAgICogaHRtbC9IVE1M
VHJlZUJ1aWxkZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRl
ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRl
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6On5IVE1MVHJlZUJ1aWxkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVTY3JpcHRTdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZVNjcmlwdEVuZFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nl
c3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjphZGp1c3RlZExleGVyU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwYXNzVG9rZW5Ub0xlZ2Fj
eVBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRy
ZWVGcm9tVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmlzU2NyaXB0aW5nRmxhZ0VuYWJsZWQp
OgorICAgICAgICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmg6IENvcGllZCBmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MNVRyZWVCdWlsZGVyLmguCisKIDIwMTAtMDYtMjMgIEFkYW0gQmFydGggIDxhYmFy
dGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6
IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJl
dmlzaW9uIDYxNjczKQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTEsMTAgKzI1MSwxMCBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwK
IAlodG1sL0Zvcm1EYXRhTGlzdC5jcHAgXAogCWh0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAgXAog
CWh0bWwvSFRNTFRva2VuaXplci5jcHAgXAotCWh0bWwvSFRNTDVEb2N1bWVudFBhcnNlci5jcHAg
XAorCWh0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBcCiAJaHRtbC9IVE1MNVByZWxvYWRTY2Fu
bmVyLmNwcCBcCiAJaHRtbC9IVE1MU2NyaXB0UnVubmVyLmNwcCBcCi0JaHRtbC9IVE1MNVRyZWVC
dWlsZGVyLmNwcCBcCisJaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIFwKIAlodG1sL0hUTUxBbGxD
b2xsZWN0aW9uLmNwcCBcCiAJaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTERh
dGFMaXN0RWxlbWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA2MTY3MykKKysrIFdlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkwOCwxMCArOTA4LDEwIEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL0Zvcm1EYXRhTGlzdC5jcHAKICAgICBodG1sL0hU
TUxFbnRpdHlQYXJzZXIuY3BwCiAgICAgaHRtbC9IVE1MVG9rZW5pemVyLmNwcAotICAgIGh0bWwv
SFRNTDVEb2N1bWVudFBhcnNlci5jcHAKKyAgICBodG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAK
ICAgICBodG1sL0hUTUw1UHJlbG9hZFNjYW5uZXIuY3BwCiAgICAgaHRtbC9IVE1MU2NyaXB0UnVu
bmVyLmNwcAotICAgIGh0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKKyAgICBodG1sL0hUTUxUcmVl
QnVpbGRlci5jcHAKICAgICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAogICAgIGh0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwCiAgICAgaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKSW5kZXg6
IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQkocmV2aXNpb24gNjE2NzMpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDkxLDE1ICsxMDkxLDE1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2Vi
Q29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXpl
ci5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFRva2VuLmggXAotCVdlYkNvcmUvaHRtbC9IVE1MNURv
Y3VtZW50UGFyc2VyLmNwcCBcCi0JV2ViQ29yZS9odG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuaCBc
CisJV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgXAorCVdlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnRQYXJzZXIuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUw1UHJlbG9hZFNjYW5uZXIu
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvSFRNTDVQcmVsb2FkU2Nhbm5lci5oIFwKIAlXZWJDb3JlL2h0
bWwvSFRNTFNjcmlwdFJ1bm5lci5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0UnVubmVy
LmggXAogCVdlYkNvcmUvaHRtbC9IVE1MU2NyaXB0UnVubmVySG9zdC5oIFwKLQlXZWJDb3JlL2h0
bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAgXAotCVdlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVy
LmggXAorCVdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL2h0bWwv
SFRNTFRyZWVCdWlsZGVyLmggXAogCVdlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAg
XAogCVdlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oIFwKIAlXZWJDb3JlL2h0bWwvSFRN
TEFuY2hvckVsZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA2MTY3MykKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc1LDE0ICsxNDc1LDE0IEBACiAgICAg
ICAgICAgICAnaHRtbC9IVE1MRW50aXR5UGFyc2VyLmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRN
TFRva2VuaXplci5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTFRva2VuaXplci5oJywKLSAg
ICAgICAgICAgICdodG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuY3BwJywKLSAgICAgICAgICAgICdo
dG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwJywKKyAgICAgICAgICAgICdodG1sL0hUTUxEb2N1bWVudFBhcnNlci5oJywK
ICAgICAgICAgICAgICdodG1sL0hUTUw1UHJlbG9hZFNjYW5uZXIuY3BwJywKICAgICAgICAgICAg
ICdodG1sL0hUTUw1UHJlbG9hZFNjYW5uZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MU2Ny
aXB0UnVubmVyLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MU2NyaXB0UnVubmVyLmgnLAot
ICAgICAgICAgICAgJ2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAnLAotICAgICAgICAgICAgJ2h0
bWwvSFRNTDVUcmVlQnVpbGRlci5oJywKKyAgICAgICAgICAgICdodG1sL0hUTUxUcmVlQnVpbGRl
ci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgnLAogICAgICAgICAg
ICAgJ2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwJywKICAgICAgICAgICAgICdodG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
JywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnBybwkocmV2aXNpb24gNjE2NzMpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC02MTMsMTAgKzYxMywxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBodG1sL0Zvcm1E
YXRhTGlzdC5jcHAgXAogICAgIGh0bWwvSFRNTEVudGl0eVBhcnNlci5jcHAgXAogICAgIGh0bWwv
SFRNTFRva2VuaXplci5jcHAgXAotICAgIGh0bWwvSFRNTDVEb2N1bWVudFBhcnNlci5jcHAgXAor
ICAgIGh0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBcCiAgICAgaHRtbC9IVE1MNVByZWxvYWRT
Y2FubmVyLmNwcCBcCiAgICAgaHRtbC9IVE1MU2NyaXB0UnVubmVyLmNwcCBcCi0gICAgaHRtbC9I
VE1MNVRyZWVCdWlsZGVyLmNwcCBcCisgICAgaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwIFwKICAg
ICBodG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcCBcCiAgICAgaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHAgXAogICAgIGh0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwIFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjE2NzMpCisrKyBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzM3NywxMSAr
MzMzNzcsMTEgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KICAgICAgICAgICAgIDxGaWxlDQotCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MNURvY3VtZW50UGFyc2VyLmNwcCINCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXEhUTUxEb2N1bWVudFBhcnNlci5jcHAiDQogCQkJCT4NCiAgICAg
ICAgICAgICA8L0ZpbGU+DQogICAgICAgICAgICAgPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxodG1sXEhUTUw1RG9jdW1lbnRQYXJzZXIuaCINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XEhUTUxEb2N1bWVudFBhcnNlci5oIg0KIAkJCQk+DQogICAgICAgICAgICAgPC9GaWxlPg0KICAg
ICAgICAgICAgIDxGaWxlDQpAQCAtMzM0MTcsMTEgKzMzNDE3LDExIEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTDVUcmVlQnVp
bGRlci5jcHAiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MVHJlZUJ1aWxkZXIuY3Bw
Ig0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxIVE1MNVRyZWVCdWlsZGVyLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1M
VHJlZUJ1aWxkZXIuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2MTY3MykK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTc2LDggKzI5NzYsOCBAQAogCQlBODY2MjlEMjA5REEyQjQ4MDA5NjMzQTUgLyog
SlNNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuY3BwICovOyB9
OwogCQlBODY2MjlEMzA5REEyQjQ4MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODY2MjlDRDA5REEyQjQ3
MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi87IH07CiAJCUE4NjYyOUQ0MDlEQTJCNDgw
MDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTg2NjI5Q0UwOURBMkI0NzAwOTYzM0E1IC8qIEpTS2V5Ym9h
cmRFdmVudC5jcHAgKi87IH07Ci0JCUE4NzEwMzhBMTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MNURv
Y3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4NzEwMzg4MTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MNURvY3VtZW50UGFyc2VyLmNw
cCAqLzsgfTsKLQkJQTg3MTAzOEIxMUEyOTQ3MDAwREJENTBFIC8qIEhUTUw1RG9jdW1lbnRQYXJz
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzEw
Mzg5MTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MNURvY3VtZW50UGFyc2VyLmggKi87IH07CisJCUE4
NzEwMzhBMTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MTAzODgxMUEyOTQ3MDAw
REJENTBFIC8qIEhUTUxEb2N1bWVudFBhcnNlci5jcHAgKi87IH07CisJCUE4NzEwMzhCMTFBMjk0
NzAwMERCRDUwRSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzEwMzg5MTFBMjk0NzAwMERCRDUwRSAvKiBIVE1M
RG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJQTg3MUQ0NTYwQTEyN0NCQzAwQjEyQTY4IC8qIEhU
TUxQbHVnSW5FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODcxRDQ0QzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBODcxRDQ1
NzBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTFBsdWdJbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3MUQ0NEQwQTEyN0NCQzAwQjEyQTY4
IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNwcCAqLzsgfTsKIAkJQTg3MUQ0NTgwQTEyN0NCQzAwQjEy
QTY4IC8qIEhUTUxQYXJhbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NzFENDRFMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVt
ZW50LmggKi87IH07CkBAIC0zMDM2LDggKzMwMzYsOCBAQAogCQlBODcxREZFMzBBMTUzNzZCMDBC
MTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4NzFERkRGMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJSZXBsYWNl
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4
NzFERkU0MEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkUwMEExNTM3NkIwMEIxMkE2OCAv
KiBSZW5kZXJXaWRnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBODcxREZFNTBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzFERkUxMEEx
NTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuY3BwICovOyB9OwotCQlBODc5QzYyNTExQTlE
MUY3MDA1OTIzN0EgLyogSFRNTDVUcmVlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc5QzYyMzExQTlEMUY3MDA1OTIzN0EgLyogSFRN
TDVUcmVlQnVpbGRlci5jcHAgKi87IH07Ci0JCUE4NzlDNjI2MTFBOUQxRjcwMDU5MjM3QSAvKiBI
VE1MNVRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODc5QzYyNDExQTlEMUY3MDA1OTIzN0EgLyogSFRNTDVUcmVlQnVpbGRlci5oICov
OyB9OworCQlBODc5QzYyNTExQTlEMUY3MDA1OTIzN0EgLyogSFRNTFRyZWVCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NzlDNjIzMTFB
OUQxRjcwMDU5MjM3QSAvKiBIVE1MVHJlZUJ1aWxkZXIuY3BwICovOyB9OworCQlBODc5QzYyNjEx
QTlEMUY3MDA1OTIzN0EgLyogSFRNTFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODc5QzYyNDExQTlEMUY3MDA1OTIzN0EgLyogSFRN
TFRyZWVCdWlsZGVyLmggKi87IH07CiAJCUE4N0YxNjM1MTFBRTg0MTMwMENCQjJFNSAvKiBIVE1M
U2NyaXB0UnVubmVySG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg3RjE2MzQxMUFFODQxMzAwQ0JCMkU1IC8qIEhUTUxTY3JpcHRSdW5uZXJIb3N0
LmggKi87IH07CiAJCUE4ODNERjI3MEYzRDA0NUQwMEYxOUJGNiAvKiBWaXNpYmxlU2VsZWN0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4ODNE
RjI1MEYzRDA0NUQwMEYxOUJGNiAvKiBWaXNpYmxlU2VsZWN0aW9uLmNwcCAqLzsgfTsKIAkJQTg4
M0RGMjgwRjNEMDQ1RDAwRjE5QkY2IC8qIFZpc2libGVTZWxlY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4ODNERjI2MEYzRDA0NUQwMEYxOUJG
NiAvKiBWaXNpYmxlU2VsZWN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg0NTYsOCArODQ1Niw4IEBACiAJCUE4NjYyOUNDMDlEQTJCNDcw
MDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTW91c2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE4NjYyOUNEMDlEQTJCNDcwMDk2MzNBNSAvKiBKU0tleWJvYXJkRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBODY2MjlDRTA5REEyQjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0tleWJvYXJk
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODcxMDM4ODExQTI5NDcw
MDBEQkQ1MEUgLyogSFRNTDVEb2N1bWVudFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIVE1MNURvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTg3MTAzODkxMUEyOTQ3MDAwREJENTBFIC8qIEhUTUw1RG9jdW1lbnRQ
YXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTDVEb2N1bWVudFBh
cnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODcxMDM4ODExQTI5NDcwMDBE
QkQ1MEUgLyogSFRNTERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxEb2N1bWVudFBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4NzEwMzg5MTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERvY3VtZW50UGFyc2VyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFENDRDMEExMjdDQkMwMEIxMkE2OCAv
KiBIVE1MUGx1Z0luRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SFRNTFBsdWdJbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg3MUQ0
NEQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQbHVnSW5FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MUGx1Z0luRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4NzFENDRFMEExMjdDQkMwMEIxMkE2OCAvKiBIVE1MUGFy
YW1FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGFyYW1F
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NTE2LDggKzg1MTYsOCBA
QAogCQlBODcxREZERjBBMTUzNzZCMDBCMTJBNjggLyogUmVuZGVyUmVwbGFjZWQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclJlcGxhY2VkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4NzFERkUwMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRn
ZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcldpZGdldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODcxREZFMTBBMTUzNzZCMDBCMTJBNjggLyog
UmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBODc5QzYyMzEx
QTlEMUY3MDA1OTIzN0EgLyogSFRNTDVUcmVlQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MNVRyZWVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTg3OUM2MjQxMUE5RDFGNzAwNTkyMzdBIC8qIEhUTUw1VHJlZUJ1aWxk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTDVUcmVlQnVpbGRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBODc5QzYyMzExQTlEMUY3MDA1OTIzN0Eg
LyogSFRNTFRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhUTUxUcmVlQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4
NzlDNjI0MTFBOUQxRjcwMDU5MjM3QSAvKiBIVE1MVHJlZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFRyZWVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE4N0YxNjM0MTFBRTg0MTMwMENCQjJFNSAvKiBIVE1MU2NyaXB0UnVubmVy
SG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MU2NyaXB0UnVubmVy
SG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODgzREYyNTBGM0QwNDVEMDBG
MTlCRjYgLyogVmlzaWJsZVNlbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWaXNpYmxlU2VsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTg4M0RGMjYwRjNEMDQ1RDAwRjE5QkY2IC8qIFZpc2libGVTZWxlY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlzaWJsZVNlbGVjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM0ODMsOCArMTM0ODMsOCBAQAogCQkJCTg5NTI1M0RF
MTE2QzRGMDYwMENBQkYwMCAvKiBGaWxlVGhyZWFkVGFzay5oICovLAogCQkJCUE4MTM2RDM3MDk3
M0E4RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuY3BwICovLAogCQkJCUE4MTM2RDM2MDk3M0E4
RTcwMEQ3NDQ2MyAvKiBGb3JtRGF0YUxpc3QuaCAqLywKLQkJCQlBODcxMDM4ODExQTI5NDcwMDBE
QkQ1MEUgLyogSFRNTDVEb2N1bWVudFBhcnNlci5jcHAgKi8sCi0JCQkJQTg3MTAzODkxMUEyOTQ3
MDAwREJENTBFIC8qIEhUTUw1RG9jdW1lbnRQYXJzZXIuaCAqLywKKwkJCQlBODcxMDM4ODExQTI5
NDcwMDBEQkQ1MEUgLyogSFRNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKKwkJCQlBODcxMDM4OTEx
QTI5NDcwMDBEQkQ1MEUgLyogSFRNTERvY3VtZW50UGFyc2VyLmggKi8sCiAJCQkJOTc2RTg5NUUx
MUMwQ0EzQTAwRUE5Q0E5IC8qIEhUTUxFbnRpdHlQYXJzZXIuY3BwICovLAogCQkJCTk3NkU4OTVG
MTFDMENBM0EwMEVBOUNBOSAvKiBIVE1MRW50aXR5UGFyc2VyLmggKi8sCiAJCQkJOTdFOEIzNTQx
MUEyM0NFMjAwMTY5NDA5IC8qIEhUTUxUb2tlbml6ZXIuY3BwICovLApAQCAtMTM0OTUsOCArMTM0
OTUsOCBAQAogCQkJCUE4M0IzQUVGMTFBREVGRjUwMDQ1ODgwOSAvKiBIVE1MU2NyaXB0UnVubmVy
LmggKi8sCiAJCQkJQTg3RjE2MzQxMUFFODQxMzAwQ0JCMkU1IC8qIEhUTUxTY3JpcHRSdW5uZXJI
b3N0LmggKi8sCiAJCQkJOTdFOEIzQzIxMUEyODkwODAwMTY5NDA5IC8qIEhUTUxUb2tlbi5oICov
LAotCQkJCUE4NzlDNjIzMTFBOUQxRjcwMDU5MjM3QSAvKiBIVE1MNVRyZWVCdWlsZGVyLmNwcCAq
LywKLQkJCQlBODc5QzYyNDExQTlEMUY3MDA1OTIzN0EgLyogSFRNTDVUcmVlQnVpbGRlci5oICov
LAorCQkJCUE4NzlDNjIzMTFBOUQxRjcwMDU5MjM3QSAvKiBIVE1MVHJlZUJ1aWxkZXIuY3BwICov
LAorCQkJCUE4NzlDNjI0MTFBOUQxRjcwMDU5MjM3QSAvKiBIVE1MVHJlZUJ1aWxkZXIuaCAqLywK
IAkJCQlCQzk3RTIzOTEwOTE0NDk1MDAxMEQzNjEgLyogSFRNTEFsbENvbGxlY3Rpb24uY3BwICov
LAogCQkJCUJDOTdFMjM4MTA5MTQ0OTUwMDEwRDM2MSAvKiBIVE1MQWxsQ29sbGVjdGlvbi5oICov
LAogCQkJCUJDOTdFMjNDMTA5MTQ2RjEwMDEwRDM2MSAvKiBIVE1MQWxsQ29sbGVjdGlvbi5pZGwg
Ki8sCkBAIC0xODA1MSwxNCArMTgwNTEsMTQgQEAKIAkJCQk5MzA5MDg5MTBBRjdFREU0MDA4MURG
MDEgLyogSGl0VGVzdFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMDdGMUQ4MEFGMkQ1
OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCQzI5
QzBFOTFBQjBGMDA4MzU1ODggLyogSG9zdFdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg3
MTAzOEIxMUEyOTQ3MDAwREJENTBFIC8qIEhUTUw1RG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUE4NzEwMzhCMTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkU4OTYxMTFDMENBM0EwMEVBOUNBOSAvKiBIVE1MRW50
aXR5UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0U4QjM1NzExQTIzQ0UyMDAxNjk0MDkg
LyogSFRNTFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdFNzkzNjYxMUM2MDMwOTAw
RTY0OUJDIC8qIEhUTUw1UHJlbG9hZFNjYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4M0Iz
QUYxMTFBREVGRjUwMDQ1ODgwOSAvKiBIVE1MU2NyaXB0UnVubmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODdGMTYzNTExQUU4NDEzMDBDQkIyRTUgLyogSFRNTFNjcmlwdFJ1bm5lckhvc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3RThCM0MzMTFBMjg5MDgwMDE2OTQwOSAvKiBIVE1MVG9rZW4u
aCBpbiBIZWFkZXJzICovLAotCQkJCUE4NzlDNjI2MTFBOUQxRjcwMDU5MjM3QSAvKiBIVE1MNVRy
ZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODc5QzYyNjExQTlEMUY3MDA1OTIzN0Eg
LyogSFRNTFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk3RTIzQTEwOTE0NDk1
MDAxMEQzNjEgLyogSFRNTEFsbENvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0ZG
N0FCMEExNTY5NzgwMDBBNDIzNCAvKiBIVE1MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTg3MUQ0NUQwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxBcHBsZXRFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTIwMzkzLDEyICsyMDM5MywxMiBAQAogCQkJCTUxNjBGNDk4MEIwQUE3
NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzNjNC
NjJDMEY4RThGRTAwMDgwMzgxMCAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzMDdGMUQ3MEFGMkQ1OTAwMERCQTMxQSAvKiBIaXRUZXN0UmVzdWx0LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUE4NzEwMzhBMTFBMjk0NzAwMERCRDUwRSAvKiBIVE1MNURvY3Vt
ZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE4NzEwMzhBMTFBMjk0NzAwMERCRDUw
RSAvKiBIVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RTg5NjAx
MUMwQ0EzQTAwRUE5Q0E5IC8qIEhUTUxFbnRpdHlQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTdFOEIzNTYxMUEyM0NFMjAwMTY5NDA5IC8qIEhUTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdFNzkzNjUxMUM2MDMwOTAwRTY0OUJDIC8qIEhUTUw1UHJlbG9hZFNjYW5u
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzQjNBRjAxMUFERUZGNTAwNDU4ODA5IC8qIEhU
TUxTY3JpcHRSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg3OUM2MjUxMUE5RDFGNzAw
NTkyMzdBIC8qIEhUTUw1VHJlZUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTg3OUM2
MjUxMUE5RDFGNzAwNTkyMzdBIC8qIEhUTUxUcmVlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzk3RTIzQjEwOTE0NDk1MDAxMEQzNjEgLyogSFRNTEFsbENvbGxlY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThDRkY3QTQwQTE1Njk3ODAwMEE0MjM0IC8qIEhUTUxBbmNob3JF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFENDVFMEExMjdDQkMwMEIxMkE2OCAv
KiBIVE1MQXBwbGV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvZG9t
L0RvY3VtZW50RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50
RnJhZ21lbnQuY3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50RnJh
Z21lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
NURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5j
bHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRG9jdW1lbnRGcmFnbWVu
dDo6cGFyc2VIVE1MKGNvbnN0IFMKICAgICBpZiAoc2hvdWxkVXNlTGVnYWN5SFRNTFBhcnNlcigp
KQogICAgICAgICByZXR1cm4gcGFyc2VMZWdhY3lIVE1MRG9jdW1lbnRGcmFnbWVudChzb3VyY2Us
IHRoaXMsIHNjcmlwdGluZ1Blcm1pc3Npb24pOwogCi0gICAgSFRNTDVEb2N1bWVudFBhcnNlciBw
YXJzZXIodGhpcywgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgSFRNTERvY3VtZW50UGFyc2Vy
IHBhcnNlcih0aGlzLCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKICAgICBwYXJzZXIud3JpdGUoc291
cmNlLCBmYWxzZSk7CiAgICAgcGFyc2VyLmZpbmlzaCgpOwogICAgIEFTU0VSVCghcGFyc2VyLnBy
b2Nlc3NpbmdEYXRhKCkpOyAvLyBNYWtlIHN1cmUgd2UncmUgZG9uZS4gPHJkYXI6Ly9wcm9ibGVt
LzM5NjMxNTE+CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVEb2N1bWVudFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUw1RG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lv
biA2MTY3MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MNURvY3VtZW50UGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhUTUw1RG9j
dW1lbnRQYXJzZXIuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VyU2No
ZWR1bGVyLmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgotI2luY2x1ZGUgIkhUTUw1UHJl
bG9hZFNjYW5uZXIuaCIKLSNpbmNsdWRlICJIVE1MU2NyaXB0UnVubmVyLmgiCi0jaW5jbHVkZSAi
SFRNTDVUcmVlQnVpbGRlci5oIgotI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgotI2luY2x1ZGUg
IlhTU0F1ZGl0b3IuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0jaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLQotY2xhc3MgTmVzdGluZ0xl
dmVsSW5jcmVtZW50ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IE5lc3RpbmdMZXZlbEluY3JlbWVudGVyKGludCYgY291bnRlcikKLSAgICAgICAgOiBtX2Nv
dW50ZXIoJmNvdW50ZXIpCi0gICAgewotICAgICAgICArKygqbV9jb3VudGVyKTsKLSAgICB9Ci0K
LSAgICB+TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIoKQotICAgIHsKLSAgICAgICAgLS0oKm1fY291
bnRlcik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGludCogbV9jb3VudGVyOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UKLQotSFRNTDVEb2N1bWVudFBhcnNlcjo6SFRNTDVEb2N1bWVudFBhcnNlcihI
VE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKLSAgICA6IG1fZG9jdW1l
bnQoZG9jdW1lbnQpCi0gICAgLCBtX3Rva2VuaXplcihuZXcgSFRNTFRva2VuaXplcikKLSAgICAs
IG1fc2NyaXB0UnVubmVyKG5ldyBIVE1MU2NyaXB0UnVubmVyKGRvY3VtZW50LCB0aGlzKSkKLSAg
ICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBIVE1MNVRyZWVCdWlsZGVyKG1fdG9rZW5pemVyLmdl
dCgpLCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzKSkKLSAgICAsIG1fcGFyc2VyU2NoZWR1bGVyKG5l
dyBIVE1MUGFyc2VyU2NoZWR1bGVyKHRoaXMpKQotICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNl
KQotICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQotewotICAgIGJlZ2luKCk7Ci19Ci0KLS8v
IEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBncm91cGVkIGludG8gc2VsZi1pbml0
aWFsaXppbmcgc3RydWN0cyB0bwotLy8gbWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVu
IHRoZXNlIGNvbnN0cnVjdG9ycy4KLUhUTUw1RG9jdW1lbnRQYXJzZXI6OkhUTUw1RG9jdW1lbnRQ
YXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9j
dW1lbnQoKSkKLSAgICAsIG1fdG9rZW5pemVyKG5ldyBIVE1MVG9rZW5pemVyKQotICAgICwgbV90
cmVlQ29uc3RydWN0b3IobmV3IEhUTUw1VHJlZUJ1aWxkZXIobV90b2tlbml6ZXIuZ2V0KCksIGZy
YWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAsIG1fZW5kV2FzRGVsYXllZChmYWxz
ZSkKLSAgICAsIG1fd3JpdGVOZXN0aW5nTGV2ZWwoMCkKLXsKLSAgICBiZWdpbigpOwotfQotCi1I
VE1MNURvY3VtZW50UGFyc2VyOjp+SFRNTDVEb2N1bWVudFBhcnNlcigpCi17Ci0gICAgLy8gRklY
TUU6IFdlJ2QgbGlrZSB0byBBU1NFUlQgdGhhdCBub3JtYWwgb3BlcmF0aW9uIG9mIHRoaXMgY2xh
c3MgY2xlYXJzCi0gICAgLy8gb3V0IGFueSBkZWxheWVkIGFjdGlvbnMsIGJ1dCB3ZSBjYW4ndCBi
ZWNhdXNlIHdlJ3JlIHVuY2VyZW1vbmlvdXNseQotICAgIC8vIGRlbGV0ZWQuICBJZiB0aGVyZSB3
ZXJlIGEgcmVxdWlyZWQgY2FsbCB0byBzb21lIHNvcnQgb2YgY2FuY2VsIGZ1bmN0aW9uLAotICAg
IC8vIHRoZW4gd2UgY291bGQgQVNTRVJUIHNvbWUgaW52YXJpYW50cyBoZXJlLgotfQotCi12b2lk
IEhUTUw1RG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKLXsKLSAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IHJlc2V0IHRoZSB0b2tlbml6ZXI/Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6c3Rv
cFBhcnNpbmcoKQotewotICAgIERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpOwotICAgIG1f
cGFyc2VyU2NoZWR1bGVyLmNsZWFyKCk7IC8vIERlbGV0aW5nIHRoZSBzY2hlZHVsZXIgd2lsbCBj
bGVhciBhbnkgdGltZXJzLgotfQotCi1ib29sIEhUTUw1RG9jdW1lbnRQYXJzZXI6OnByb2Nlc3Np
bmdEYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNTY2hlZHVsZWRGb3JSZXN1bWUoKSB8fCBp
bldyaXRlKCk7Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcklm
UG9zc2libGUoU3luY2hyb25vdXNNb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1fcGFyc2VyU3RvcHBl
ZCB8fCBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gT25jZSBhIHJlc3VtZSBpcyBzY2hlZHVsZWQsIEhUTUxQYXJzZXJTY2hlZHVsZXIgY29u
dHJvbHMgd2hlbiB3ZSBuZXh0IHB1bXAuCi0gICAgaWYgKGlzU2NoZWR1bGVkRm9yUmVzdW1lKCkp
IHsKLSAgICAgICAgQVNTRVJUKG1vZGUgPT0gQWxsb3dZaWVsZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwdW1wVG9rZW5pemVyKG1vZGUpOwotfQotCi1ib29sIEhUTUw1RG9jdW1l
bnRQYXJzZXI6OmlzU2NoZWR1bGVkRm9yUmVzdW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9w
YXJzZXJTY2hlZHVsZXIgJiYgbV9wYXJzZXJTY2hlZHVsZXItPmlzU2NoZWR1bGVkRm9yUmVzdW1l
KCk7Ci19Ci0KLS8vIFVzZWQgYnkgSFRNTFBhcnNlclNjaGVkdWxlcgotdm9pZCBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgpCi17Ci0gICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGJlIGhlcmUgdW5sZXNzIHdlIGNhbiBwdW1wIGltbWVkaWF0ZWx5LiAgQ2FsbCBwdW1w
VG9rZW5pemVyKCkKLSAgICAvLyBkaXJlY3RseSBzbyB0aGF0IEFTU0VSVFMgd2lsbCBmaXJlIGlm
IHdlJ3JlIHdyb25nLgotICAgIHB1bXBUb2tlbml6ZXIoQWxsb3dZaWVsZCk7Ci19Ci0KLWJvb2wg
SFRNTDVEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3Rvcigp
Ci17Ci0gICAgQVNTRVJUKG1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKTsKLQotICAgIGlu
dCBzY3JpcHRTdGFydExpbmUgPSAwOwotICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50
ID0gbV90cmVlQ29uc3RydWN0b3ItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0U3RhcnRMaW5l
KTsKLSAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4gcGFyc2luZyBh
IERvY3VtZW50RnJhZ21lbnQuCi0gICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5leGVjdXRlKHNjcmlwdEVsZW1l
bnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydExpbmUpOwotfQotCi12b2lkIEhUTUw1RG9jdW1lbnRQ
YXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJU
KCFtX3BhcnNlclN0b3BwZWQpOwotICAgIEFTU0VSVCghbV90cmVlQ29uc3RydWN0b3ItPmlzUGF1
c2VkKCkpOwotICAgIEFTU0VSVCghaXNTY2hlZHVsZWRGb3JSZXN1bWUoKSk7Ci0KLSAgICAvLyBX
ZSB0ZWxsIHRoZSBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGFib3V0IGV2ZXJ5IHB1bXAsIGV2ZW4g
aWYgd2UKLSAgICAvLyBlbmQgdXAgcHVtcGluZyBub3RoaW5nLiAgSXQgY2FuIGZpbHRlciBvdXQg
ZW1wdHkgcHVtcHMgaXRzZWxmLgotICAgIHdpbGxQdW1wTGV4ZXIoKTsKLQotICAgIEhUTUxQYXJz
ZXJTY2hlZHVsZXI6OlB1bXBTZXNzaW9uIHNlc3Npb247Ci0gICAgLy8gRklYTUU6IFRoaXMgbG9v
cCBib2R5IGhhcyBpcyBub3cgdG9vIGxvbmcgYW5kIG5lZWRzIGNsZWFudXAuCi0gICAgd2hpbGUg
KG1vZGUgPT0gRm9yY2VTeW5jaHJvbm91cyB8fCAoIW1fcGFyc2VyU3RvcHBlZCAmJiBtX3BhcnNl
clNjaGVkdWxlci0+c2hvdWxkQ29udGludWVQYXJzaW5nKHNlc3Npb24pKSkgewotICAgICAgICBp
ZiAoIW1fdG9rZW5pemVyLT5uZXh0VG9rZW4obV9pbnB1dC5jdXJyZW50KCksIG1fdG9rZW4pKQot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgbV90cmVlQ29uc3RydWN0b3ItPmNvbnN0cnVj
dFRyZWVGcm9tVG9rZW4obV90b2tlbik7Ci0gICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKLQotICAg
ICAgICAvLyBUaGUgcGFyc2VyIHdpbGwgcGF1c2UgaXRzZWxmIHdoZW4gd2FpdGluZyBvbiBhIHNj
cmlwdCB0byBsb2FkIG9yIHJ1bi4KLSAgICAgICAgaWYgKCFtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQ
YXVzZWQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIElmIHdlJ3JlIHBh
dXNlZCB3YWl0aW5nIGZvciBhIHNjcmlwdCwgd2UgdHJ5IHRvIGV4ZWN1dGUgc2NyaXB0cyBiZWZv
cmUgY29udGludWluZy4KLSAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBydW5T
Y3JpcHRzRm9yUGF1c2VkVHJlZUNvbnN0cnVjdG9yKCk7Ci0gICAgICAgIG1fdHJlZUNvbnN0cnVj
dG9yLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7Ci0gICAgICAgIGlmICghc2hv
dWxkQ29udGludWVQYXJzaW5nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYg
KGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgewotICAgICAgICBBU1NFUlQobV90b2tlbml6ZXItPnN0
YXRlKCkgPT0gSFRNTFRva2VuaXplcjo6RGF0YVN0YXRlKTsKLSAgICAgICAgaWYgKCFtX3ByZWxv
YWRTY2FubmVyKSB7Ci0gICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLnNldChuZXcgSFRNTDVQ
cmVsb2FkU2Nhbm5lcihtX2RvY3VtZW50KSk7Ci0gICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVy
LT5hcHBlbmRUb0VuZChtX2lucHV0LmN1cnJlbnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9w
cmVsb2FkU2Nhbm5lci0+c2NhbigpOwotICAgIH0KLQotICAgIGRpZFB1bXBMZXhlcigpOwotfQot
Ci12b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OndpbGxQdW1wTGV4ZXIoKQotewotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0gICAgLy8gRklYTUU6IG1faW5wdXQuY3VycmVudCgpLmxlbmd0aCgpIGlz
IG9ubHkgYWNjdXJhdGUgaWYgd2UKLSAgICAvLyBlbmQgdXAgcGFyc2luZyB0aGUgd2hvbGUgYnVm
ZmVyIGluIHRoaXMgcHVtcC4gIFdlIHNob3VsZCBwYXNzIGhvdwotICAgIC8vIG11Y2ggd2UgcGFy
c2VkIGFzIHBhcnQgb2YgZGlkV3JpdGVIVE1MIGluc3RlYWQgb2Ygd2lsbFdyaXRlSFRNTC4KLSAg
ICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jdW1lbnQt
Pmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKLSAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdy
aXRlSFRNTChtX2lucHV0LmN1cnJlbnQoKS5sZW5ndGgoKSwgbV90b2tlbml6ZXItPmxpbmVOdW1i
ZXIoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpkaWRQdW1wTGV4
ZXIoKQotewotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgaWYgKEluc3BlY3RvclRpbWVsaW5l
QWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBtX2RvY3VtZW50LT5pbnNwZWN0b3JUaW1lbGluZUFnZW50
KCkpCi0gICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFdyaXRlSFRNTChtX3Rva2VuaXplci0+bGlu
ZU51bWJlcigpKTsKLSNlbmRpZgotfQotCi12b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OndyaXRl
KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sIGlzRnJvbU5ldHdvcmspCi17Ci0g
ICAgaWYgKG1fcGFyc2VyU3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTmVzdGluZ0xl
dmVsSW5jcmVtZW50ZXIgbmVzdGluZ0xldmVsSW5jcmVtZW50ZXIobV93cml0ZU5lc3RpbmdMZXZl
bCk7Ci0KLSAgICBpZiAoaXNGcm9tTmV0d29yaykgewotICAgICAgICBtX2lucHV0LmFwcGVuZFRv
RW5kKHNvdXJjZSk7Ci0gICAgICAgIGlmIChtX3ByZWxvYWRTY2FubmVyKQotICAgICAgICAgICAg
bV9wcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNlKTsKLQotICAgICAgICBpZiAobV93
cml0ZU5lc3RpbmdMZXZlbCA+IDEpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGdvdHRlbiBkYXRh
IG9mZiB0aGUgbmV0d29yayBpbiBhIG5lc3RlZCBjYWxsIHRvIHdyaXRlKCkuCi0gICAgICAgICAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbnN1bWUgYW55IG1vcmUgb2YgdGhlIGlucHV0IHN0cmVh
bSBub3cuICBEbwotICAgICAgICAgICAgLy8gbm90IHdvcnJ5LiAgV2UnbGwgY29uc3VtZSB0aGlz
IGRhdGEgaW4gYSBsZXNzLW5lc3RlZCB3cml0ZSgpLgotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW5wdXQuaW5zZXJ0QXRDdXJyZW50SW5zZXJ0
aW9uUG9pbnQoc291cmNlKTsKLQotICAgIHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKGlzRnJvbU5l
dHdvcmsgPyBBbGxvd1lpZWxkIDogRm9yY2VTeW5jaHJvbm91cyk7Ci0gICAgZW5kSWZEZWxheWVk
KCk7Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZW5kKCkKLXsKLSAgICBBU1NFUlQo
IWlzU2NoZWR1bGVkRm9yUmVzdW1lKCkpOwotICAgIC8vIE5PVEU6IFRoaXMgcHVtcCBzaG91bGQg
b25seSBldmVyIGVtaXQgYnVmZmVyZWQgY2hhcmFjdGVyIHRva2VucywKLSAgICAvLyBzbyBGb3Jj
ZVN5bmNocm9ub3VzIHZzLiBBbGxvd1lpZWxkIHNob3VsZCBiZSBtZWFuaW5nbGVzcy4KLSAgICBw
dW1wVG9rZW5pemVySWZQb3NzaWJsZShGb3JjZVN5bmNocm9ub3VzKTsKLQotICAgIC8vIEluZm9y
bXMgdGhlIHRoZSByZXN0IG9mIFdlYkNvcmUgdGhhdCBwYXJzaW5nIGlzIHJlYWxseSBmaW5pc2hl
ZCAoYW5kIGRlbGV0ZXMgdGhpcykuCi0gICAgbV90cmVlQ29uc3RydWN0b3ItPmZpbmlzaGVkKCk7
Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6YXR0ZW1wdFRvRW5kKCkKLXsKLSAgICAv
LyBmaW5pc2goKSBpbmRpY2F0ZXMgd2Ugd2lsbCBub3QgcmVjZWl2ZSBhbnkgbW9yZSBkYXRhLiBJ
ZiB3ZSBhcmUgd2FpdGluZyBvbgotICAgIC8vIGFuIGV4dGVybmFsIHNjcmlwdCB0byBsb2FkLCB3
ZSBjYW4ndCBmaW5pc2ggcGFyc2luZyBxdWl0ZSB5ZXQuCi0KLSAgICBpZiAoaW5Xcml0ZSgpIHx8
IGlzV2FpdGluZ0ZvclNjcmlwdHMoKSB8fCBleGVjdXRpbmdTY3JpcHQoKSB8fCBpc1NjaGVkdWxl
ZEZvclJlc3VtZSgpKSB7Ci0gICAgICAgIG1fZW5kV2FzRGVsYXllZCA9IHRydWU7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZW5kKCk7Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNl
cjo6ZW5kSWZEZWxheWVkKCkKLXsKLSAgICAvLyBXZSBkb24ndCBjaGVjayBpbldyaXRlKCkgaGVy
ZSBzaW5jZSBpbldyaXRlKCkgd2lsbCBiZSB0cnVlIGlmIHRoaXMgd2FzCi0gICAgLy8gY2FsbGVk
IGZyb20gd3JpdGUoKS4KLSAgICBpZiAoIW1fZW5kV2FzRGVsYXllZCB8fCBpc1dhaXRpbmdGb3JT
Y3JpcHRzKCkgfHwgZXhlY3V0aW5nU2NyaXB0KCkgfHwgaXNTY2hlZHVsZWRGb3JSZXN1bWUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9lbmRXYXNEZWxheWVkID0gZmFsc2U7Ci0gICAgZW5k
KCk7Ci19Ci0KLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKLXsKLSAgICAvLyBX
ZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGFueSBtb3JlIGRhdGEgb2ZmIHRoZSBuZXR3b3JrLCBzbyB3
ZSBjbG9zZSB0aGUKLSAgICAvLyBpbnB1dCBzdHJlYW0gdG8gaW5kaWNhdGUgRU9GLgotICAgIG1f
aW5wdXQuY2xvc2UoKTsKLSAgICBhdHRlbXB0VG9FbmQoKTsKLX0KLQotYm9vbCBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQotewotICAgIHJldHVybiBtX2lucHV0LmlzQ2xv
c2VkKCk7Ci19Ci0KLS8vIFRoaXMgZnVuY3Rpb24gaXMgdmlydHVhbCBhbmQganVzdCBmb3IgdGhl
IERvY3VtZW50UGFyc2VyIGludGVyZmFjZS4KLWludCBIVE1MNURvY3VtZW50UGFyc2VyOjpleGVj
dXRpbmdTY3JpcHQoKSBjb25zdAotewotICAgIHJldHVybiBpblNjcmlwdEV4ZWN1dGlvbigpOwot
fQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIG5vbi12aXJ0dWFsIGFuZCB1c2VkIHRocm91Z2hvdXQg
dGhlIGltcGxlbWVudGF0aW9uLgotYm9vbCBIVE1MNURvY3VtZW50UGFyc2VyOjppblNjcmlwdEV4
ZWN1dGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+aW5TY3JpcHRFeGVjdXRpb24o
KTsKLX0KLQotaW50IEhUTUw1RG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigpOwotfQotCi1pbnQgSFRNTDVEb2N1
bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90b2tlbml6
ZXItPmNvbHVtbk51bWJlcigpOwotfQotCi1MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBIVE1M
NURvY3VtZW50UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90cmVlQ29uc3RydWN0b3ItPmxlZ2FjeVRyZWVDb25zdHJ1Y3RvcigpOwotfQotCi1ib29s
IEhUTUw1RG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAotewotICAg
IHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKTsKLX0KLQotdm9pZCBIVE1MNURv
Y3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQotewotICAg
IEFTU0VSVCghaW5TY3JpcHRFeGVjdXRpb24oKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVDb25zdHJ1
Y3Rvci0+aXNQYXVzZWQoKSk7Ci0KLSAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShBbGxvd1lp
ZWxkKTsKLQotICAgIC8vIFRoZSBkb2N1bWVudCBhbHJlYWR5IGZpbmlzaGVkIHBhcnNpbmcgd2Ug
d2VyZSBqdXN0IHdhaXRpbmcgb24gc2NyaXB0cyB3aGVuIGZpbmlzaGVkKCkgd2FzIGNhbGxlZC4K
LSAgICBlbmRJZkRlbGF5ZWQoKTsKLX0KLQotdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjp3YXRj
aEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkKLXsKLSAgICBjYWNoZWRTY3Jp
cHQtPmFkZENsaWVudCh0aGlzKTsKLX0KLQotdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpzdG9w
V2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKiBjYWNoZWRTY3JpcHQpCi17Ci0gICAgY2Fj
aGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Ci19Ci0KLWJvb2wgSFRNTDVEb2N1bWVudFBh
cnNlcjo6c2hvdWxkTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhjb25zdCBBdG9taWNTdHJpbmcm
IHNyY1ZhbHVlKQotewotICAgIGlmICghbV9YU1NBdWRpdG9yKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICByZXR1cm4gbV9YU1NBdWRpdG9yLT5jYW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3Jj
KHNyY1ZhbHVlKTsKLX0KLQotdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hl
ZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCi17Ci0gICAgQVNTRVJUKG1fc2NyaXB0
UnVubmVyKTsKLSAgICAvLyBJZ25vcmUgY2FsbHMgdW5sZXNzIHdlIGhhdmUgYSBzY3JpcHQgYmxv
Y2tpbmcgdGhlIHBhcnNlciB3YWl0aW5nCi0gICAgLy8gZm9yIGl0cyBvd24gbG9hZC4gIE90aGVy
d2lzZSB0aGlzIG1heSBiZSBhIGxvYWQgY2FsbGJhY2sgZnJvbQotICAgIC8vIENhY2hlZFJlc291
cmNlOjphZGRDbGllbnQgYmVjYXVzZSB0aGUgc2NyaXB0IHdhcyBhbHJlYWR5IGluIHRoZSBjYWNo
ZS4KLSAgICAvLyBIVE1MU2NyaXB0UnVubmVyIG1heSBub3QgYmUgcmVhZHkgdG8gaGFuZGxlIHJ1
bm5pbmcgdGhhdCBzY3JpcHQgeWV0LgotICAgIGlmICghbV9zY3JpcHRSdW5uZXItPmhhc1Njcmlw
dHNXYWl0aW5nRm9yTG9hZCgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3NjcmlwdFJ1bm5lci0+aW5T
Y3JpcHRFeGVjdXRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCFp
blNjcmlwdEV4ZWN1dGlvbigpKTsKLSAgICBBU1NFUlQobV90cmVlQ29uc3RydWN0b3ItPmlzUGF1
c2VkKCkpOwotICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0IG9uIG9uZSBzY3JpcHQgYXQg
YSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCi0gICAgLy8gaXMgdGhlIG9uZSB3ZSB3ZXJl
IHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBidWlsZGVyLgotICAgIG1fdHJl
ZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoZmFsc2UpOwotICAgIGJvb2wgc2hvdWxkQ29udGludWVQ
YXJzaW5nID0gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQoY2Fj
aGVkUmVzb3VyY2UpOwotICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoIXNob3VsZENv
bnRpbnVlUGFyc2luZyk7Ci0gICAgaWYgKHNob3VsZENvbnRpbnVlUGFyc2luZykKLSAgICAgICAg
cmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCk7Ci19Ci0KLXZvaWQgSFRNTDVEb2N1
bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKQotewotICAg
IC8vIERvY3VtZW50IG9ubHkgY2FsbHMgdGhpcyB3aGVuIHRoZSBEb2N1bWVudCBvd25zIHRoZSBE
b2N1bWVudFBhcnNlcgotICAgIC8vIHNvIHRoaXMgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoZSBE
b2N1bWVudEZyYWdtZW50IGNhc2UuCi0gICAgQVNTRVJUKG1fc2NyaXB0UnVubmVyKTsKLSAgICAv
LyBJZ25vcmUgY2FsbHMgdW5sZXNzIHdlIGhhdmUgYSBzY3JpcHQgYmxvY2tpbmcgdGhlIHBhcnNl
ciB3YWl0aW5nIG9uIGEKLSAgICAvLyBzdHlsZXNoZWV0IGxvYWQuICBPdGhlcndpc2Ugd2UgYXJl
IGN1cnJlbnRseSBwYXJzaW5nIGFuZCB0aGlzCi0gICAgLy8gaXMgYSByZS1lbnRyYW50IGNhbGwg
ZnJvbSBlbmNvdW50ZXJpbmcgYSA8LyBzdHlsZT4gdGFnLgotICAgIGlmICghbV9zY3JpcHRSdW5u
ZXItPmhhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVCghbV9zY3JpcHRSdW5uZXItPmluU2NyaXB0RXhlY3V0aW9uKCkpOwotICAgIEFT
U0VSVChtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7Ci0gICAgLy8gTm90ZTogV2Ugb25s
eSBldmVyIHdhaXQgb24gb25lIHNjcmlwdCBhdCBhIHRpbWUsIHNvIHdlIGFsd2F5cyBrbm93IHRo
aXMKLSAgICAvLyBpcyB0aGUgb25lIHdlIHdlcmUgd2FpdGluZyBvbiBhbmQgY2FuIHVuLXBhdXNl
IHRoZSB0cmVlIGJ1aWxkZXIuCi0gICAgbV90cmVlQ29uc3RydWN0b3ItPnNldFBhdXNlZChmYWxz
ZSk7Ci0gICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBtX3NjcmlwdFJ1bm5lci0+ZXhl
Y3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKLSAgICBtX3RyZWVDb25zdHJ1Y3Rv
ci0+c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBhcnNpbmcpOwotICAgIGlmIChzaG91bGRDb250
aW51ZVBhcnNpbmcpCi0gICAgICAgIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigp
OwotfQotCi1TY3JpcHRDb250cm9sbGVyKiBIVE1MNURvY3VtZW50UGFyc2VyOjpzY3JpcHQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2RvY3VtZW50LT5mcmFtZSgpID8gbV9kb2N1bWVudC0+ZnJh
bWUoKS0+c2NyaXB0KCkgOiAwOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVEb2N1
bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MNURvY3VtZW50UGFy
c2VyLmgJKHJldmlzaW9uIDYxNjczKQorKysgV2ViQ29yZS9odG1sL0hUTUw1RG9jdW1lbnRQYXJz
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBIVE1MNURvY3VtZW50UGFyc2Vy
X2gKLSNkZWZpbmUgSFRNTDVEb2N1bWVudFBhcnNlcl9oCi0KLSNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgot
I2luY2x1ZGUgIkhUTUxTY3JpcHRSdW5uZXJIb3N0LmgiCi0jaW5jbHVkZSAiSFRNTFRva2VuLmgi
Ci0jaW5jbHVkZSAiSFRNTElucHV0U3RyZWFtLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5n
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1
bWVudDsKLWNsYXNzIERvY3VtZW50RnJhZ21lbnQ7Ci1jbGFzcyBIVE1MRG9jdW1lbnQ7Ci1jbGFz
cyBIVE1MUGFyc2VyU2NoZWR1bGVyOwotY2xhc3MgSFRNTFRva2VuaXplcjsKLWNsYXNzIEhUTUxT
Y3JpcHRSdW5uZXI7Ci1jbGFzcyBIVE1MNVRyZWVCdWlsZGVyOwotY2xhc3MgSFRNTDVQcmVsb2Fk
U2Nhbm5lcjsKLWNsYXNzIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I7Ci1jbGFzcyBTY3JpcHRD
b250cm9sbGVyOwotY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKLQotY2xhc3MgSFRNTDVEb2N1bWVu
dFBhcnNlciA6ICBwdWJsaWMgRG9jdW1lbnRQYXJzZXIsIEhUTUxTY3JpcHRSdW5uZXJIb3N0LCBD
YWNoZWRSZXNvdXJjZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gRklYTUU6IFRoZXNlIGNvbnN0
cnVjdG9ycyBzaG91bGQgYmUgbWFkZSBwcml2YXRlIGFuZCByZXBsYWNlZCBieSBjcmVhdGUoKSBt
ZXRob2RzLgotICAgIEhUTUw1RG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiwgYm9vbCByZXBv
cnRFcnJvcnMpOwotICAgIEhUTUw1RG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7Ci0gICAgdmlydHVhbCB+SFRNTDVEb2N1bWVudFBh
cnNlcigpOwotCi0gICAgLy8gRG9jdW1lbnRQYXJzZXIKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW4o
KTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBp
c0Zyb21OZXR3b3JrKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kKCk7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbmlzaCgpOwotICAgIHZpcnR1YWwgYm9vbCBmaW5pc2hXYXNDYWxsZWQoKTsKLSAgICB2aXJ0
dWFsIGludCBleGVjdXRpbmdTY3JpcHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcHJvY2Vz
c2luZ0RhdGEoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNpbmcoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNXYWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwotICAgIHZpcnR1YWwgaW50
IGxpbmVOdW1iZXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25z
dDsKLSAgICAvLyBGSVhNRTogSFRNTEZvcm1Db250cm9sRWxlbWVudCBhY2Nlc3NlcyB0aGUgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3RvciB2aWEgdGhpcyBtZXRob2QuCi0gICAgLy8gUmVtb3ZlIHRo
aXMgd2hlbiB0aGUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciBpcyBubyBsb25nZXIgdXNlZC4K
LSAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIGh0bWxUcmVlQ29uc3RydWN0
b3IoKSBjb25zdDsKLQotICAgIC8vIEhUTUxTY3JpcHRSdW5uZXJIb3N0Ci0gICAgdmlydHVhbCB2
b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9w
V2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKik7Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZExvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgdmly
dHVhbCBIVE1MSW5wdXRTdHJlYW0mIGlucHV0U3RyZWFtKCkgeyByZXR1cm4gbV9pbnB1dDsgfQot
Ci0gICAgLy8gQ2FjaGVkUmVzb3VyY2VDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKLQotICAgIC8vIEV4cG9zZWQgZm9yIEhUTUxQYXJzZXJT
Y2hlZHVsZXIKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3Vt
ZW50OyB9Ci0gICAgdm9pZCByZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgpOwotCi1wcml2YXRlOgot
ICAgIHZvaWQgd2lsbFB1bXBMZXhlcigpOwotICAgIHZvaWQgZGlkUHVtcExleGVyKCk7Ci0KLSAg
ICBlbnVtIFN5bmNocm9ub3VzTW9kZSB7Ci0gICAgICAgIEFsbG93WWllbGQsCi0gICAgICAgIEZv
cmNlU3luY2hyb25vdXMsCi0gICAgfTsKLSAgICB2b2lkIHB1bXBUb2tlbml6ZXIoU3luY2hyb25v
dXNNb2RlKTsKLSAgICB2b2lkIHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKFN5bmNocm9ub3VzTW9k
ZSk7Ci0KLSAgICBib29sIHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQ29uc3RydWN0b3IoKTsKLSAg
ICB2b2lkIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwotCi0gICAgdm9pZCBh
dHRlbXB0VG9FbmQoKTsKLSAgICB2b2lkIGVuZElmRGVsYXllZCgpOwotCi0gICAgYm9vbCBpc1Nj
aGVkdWxlZEZvclJlc3VtZSgpIGNvbnN0OwotICAgIGJvb2wgaW5TY3JpcHRFeGVjdXRpb24oKSBj
b25zdDsKLSAgICBib29sIGluV3JpdGUoKSBjb25zdCB7IHJldHVybiBtX3dyaXRlTmVzdGluZ0xl
dmVsID4gMDsgfQotCi0gICAgU2NyaXB0Q29udHJvbGxlciogc2NyaXB0KCkgY29uc3Q7Ci0KLSAg
ICBIVE1MSW5wdXRTdHJlYW0gbV9pbnB1dDsKLQotICAgIC8vIFdlIGhvbGQgbV90b2tlbiBoZXJl
IGJlY2F1c2UgaXQgbWlnaHQgYmUgcGFydGlhbGx5IGNvbXBsZXRlLgotICAgIEhUTUxUb2tlbiBt
X3Rva2VuOwotCi0gICAgLy8gV2UgbXVzdCBzdXBwb3J0IHBhcnNpbmcgaW50byBhIERvY3VtZW50
KiBhbmQgbm90IGp1c3QgSFRNTERvY3VtZW50KgotICAgIC8vIHRvIHN1cHBvcnQgRG9jdW1lbnRG
cmFnbWVudCAod2hpY2ggaGFzIGEgRG9jdW1lbnQqKS4KLSAgICBEb2N1bWVudCogbV9kb2N1bWVu
dDsKLSAgICBPd25QdHI8SFRNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7Ci0gICAgT3duUHRyPEhU
TUxTY3JpcHRSdW5uZXI+IG1fc2NyaXB0UnVubmVyOwotICAgIE93blB0cjxIVE1MNVRyZWVCdWls
ZGVyPiBtX3RyZWVDb25zdHJ1Y3RvcjsKLSAgICBPd25QdHI8SFRNTDVQcmVsb2FkU2Nhbm5lcj4g
bV9wcmVsb2FkU2Nhbm5lcjsKLSAgICBPd25QdHI8SFRNTFBhcnNlclNjaGVkdWxlcj4gbV9wYXJz
ZXJTY2hlZHVsZXI7Ci0KLSAgICBib29sIG1fZW5kV2FzRGVsYXllZDsKLSAgICBpbnQgbV93cml0
ZU5lc3RpbmdMZXZlbDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TDVQcmVsb2FkU2Nhbm5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUw1UHJl
bG9hZFNjYW5uZXIuY3BwCShyZXZpc2lvbiA2MTY3MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MNVBy
ZWxvYWRTY2FubmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkRvY0xvYWRlci5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTDVUcmVlQnVpbGRlci5oIgorI2luY2x1ZGUgIkhUTUxUcmVl
QnVpbGRlci5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBIVE1MNVByZWxvYWRTY2FubmVyOjph
cHBlbmRUb0VuZChjbwogCiB2b2lkIEhUTUw1UHJlbG9hZFNjYW5uZXI6OnNjYW4oKQogewotICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgc2F2ZSBhbmQgcmUtdXNlIHRoZXNlIHRva2VucyBpbiBIVE1M
NURvY3VtZW50UGFyc2VyIGlmCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzYXZlIGFuZCByZS11
c2UgdGhlc2UgdG9rZW5zIGluIEhUTUxEb2N1bWVudFBhcnNlciBpZgogICAgIC8vIHRoZSBwZW5k
aW5nIHNjcmlwdCBkb2Vzbid0IGVuZCB1cCBjYWxsaW5nIGRvY3VtZW50LndyaXRlLgogICAgIHdo
aWxlIChtX3Rva2VuaXplci5uZXh0VG9rZW4obV9zb3VyY2UsIG1fdG9rZW4pKSB7CiAgICAgICAg
IHByb2Nlc3NUb2tlbigpOwpAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgSFRNTDVQcmVsb2FkU2Nh
bm5lcjo6cHJvY2Vzc1Rva2VuKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUHJlbG9hZFRhc2sg
dGFzayhtX3Rva2VuKTsKLSAgICBtX3Rva2VuaXplci5zZXRTdGF0ZShIVE1MNVRyZWVCdWlsZGVy
OjphZGp1c3RlZExleGVyU3RhdGUobV90b2tlbml6ZXIuc3RhdGUoKSwgdGFzay50YWdOYW1lKCks
IG1fZG9jdW1lbnQtPmZyYW1lKCkpKTsKKyAgICBtX3Rva2VuaXplci5zZXRTdGF0ZShIVE1MVHJl
ZUJ1aWxkZXI6OmFkanVzdGVkTGV4ZXJTdGF0ZShtX3Rva2VuaXplci5zdGF0ZSgpLCB0YXNrLnRh
Z05hbWUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSkpOwogICAgIGlmICh0YXNrLnRhZ05hbWUoKSA9
PSBzY3JpcHRUYWcpIHsKICAgICAgICAgLy8gVGhlIHRyZWUgYnVpbGRlciBoYW5kbGVzIHNjcmlw
dFRhZyBzZXBhcmF0ZWx5IGZyb20gdGhlIG90aGVyIHRva2VuaXplcgogICAgICAgICAvLyBzdGF0
ZSBhZGp1c3RtZW50cywgc28gd2UgbmVlZCB0byBoYW5kbGUgaXQgc2VwYXJhdGVseSB0b28uCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY3MykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNjMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhUTUw1VHJlZUJ1aWxkZXIuaCIKLQotI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiSFRNTFRv
a2VuLmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSA9IC0xOwotCi1IVE1M
NVRyZWVCdWlsZGVyOjpIVE1MNVRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwg
SFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMpCi0gICAgOiBtX2RvY3Vt
ZW50KGRvY3VtZW50KQotICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQotICAgICwg
bV9pc1BhdXNlZChmYWxzZSkKLSAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsKQotICAgICwg
bV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3IobmV3
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCi0gICAg
LCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFs
dWUpCi0gICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51
bWJlclZhbHVlKQotICAgICwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRT
Y3JpcHRpbmdBbGxvd2VkKQotewotfQotCi0vLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBzaG91
bGQgYmUgZ3JvdXBlZCBpbnRvIHNlbGYtaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KLS8vIG1pbmlt
aXplIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCi1IVE1MNVRy
ZWVCdWlsZGVyOjpIVE1MNVRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQotICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkK
LSAgICAsIG1fcmVwb3J0RXJyb3JzKGZhbHNlKSAvLyBGSVhNRTogV2h5IG5vdCByZXBvcnQgZXJy
b3JzIGluIGZyYWdtZW50cz8KLSAgICAsIG1faXNQYXVzZWQoZmFsc2UpCi0gICAgLCBtX2luc2Vy
dGlvbk1vZGUoSW5pdGlhbCkKLSAgICAsIG1fdG9rZW5pemVyKHRva2VuaXplcikKLSAgICAsIG1f
bGVnYWN5VHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKGZyYWdt
ZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKLSAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFy
dExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fc2NyaXB0VG9Qcm9j
ZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCi0gICAgLCBtX2ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9uKQotewotfQotCi1IVE1M
NVRyZWVCdWlsZGVyOjp+SFRNTDVUcmVlQnVpbGRlcigpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGNv
bnZlcnRUb09sZFN0eWxlKEhUTUxUb2tlbiYgdG9rZW4sIFRva2VuJiBvbGRTdHlsZVRva2VuKQot
ewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7Ci0gICAgY2FzZSBIVE1MVG9rZW46OlVuaW5p
dGlhbGl6ZWQ6Ci0gICAgY2FzZSBIVE1MVG9rZW46OkRPQ1RZUEU6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhUTUxUb2tlbjo6RW5kT2ZG
aWxlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFnOgotICAg
IGNhc2UgSFRNTFRva2VuOjpFbmRUYWc6IHsKLSAgICAgICAgb2xkU3R5bGVUb2tlbi5iZWdpblRh
ZyA9ICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7Ci0gICAgICAgIG9sZFN0
eWxlVG9rZW4uc2VsZkNsb3NpbmdUYWcgPSB0b2tlbi5zZWxmQ2xvc2luZygpOwotICAgICAgICBv
bGRTdHlsZVRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcodG9rZW4ubmFtZSgpLmRhdGEoKSwg
dG9rZW4ubmFtZSgpLnNpemUoKSk7Ci0gICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRl
TGlzdCYgYXR0cmlidXRlcyA9IHRva2VuLmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgZm9yIChIVE1M
VG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJl
Z2luKCk7Ci0gICAgICAgICAgICAgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmICghaXRlci0+bV9uYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIFN0cmluZyBuYW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkp
OwotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRl
ci0+bV92YWx1ZS5zaXplKCkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxBdHRyaWJ1dGU+IG1h
cHBlZEF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlTWFwcGVkKG5hbWUsIHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIW9sZFN0eWxlVG9rZW4uYXR0cnMpCi0gICAgICAgICAgICAgICAg
ICAgIG9sZFN0eWxlVG9rZW4uYXR0cnMgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIG9sZFN0eWxlVG9rZW4uYXR0cnMtPmluc2VydEF0dHJpYnV0ZShtYXBwZWRBdHRy
aWJ1dGUucmVsZWFzZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSFRNTFRva2VuOjpDb21tZW50OgotICAgICAgICBv
bGRTdHlsZVRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKLSAgICAgICAgb2xkU3R5bGVUb2tl
bi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHRva2VuLmNvbW1lbnQoKS5kYXRhKCksIHRva2Vu
LmNvbW1lbnQoKS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhUTUxUb2tlbjo6
Q2hhcmFjdGVyOgotICAgICAgICBvbGRTdHlsZVRva2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKLSAg
ICAgICAgb2xkU3R5bGVUb2tlbi50ZXh0ID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHRva2VuLmNoYXJh
Y3RlcnMoKS5kYXRhKCksIHRva2VuLmNoYXJhY3RlcnMoKS5zaXplKCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTDVUcmVlQnVpbGRlcjo6aGFuZGxlU2NyaXB0U3RhcnRU
YWcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIFRoZSBIVE1MIGZyZ21lbnQgY2FzZT8K
LSAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRl
KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBTYXZlIGluc2VydGlvbiBtb2RlLgotfQotCi12
b2lkIEhUTUw1VHJlZUJ1aWxkZXI6OmhhbmRsZVNjcmlwdEVuZFRhZyhFbGVtZW50KiBzY3JpcHRF
bGVtZW50LCBpbnQgc2NyaXB0U3RhcnRMaW5lKQotewotICAgIEFTU0VSVCghbV9zY3JpcHRUb1By
b2Nlc3MpOyAvLyBDYWxsZXIgbmV2ZXIgY2FsbGVkIHRha2VTY3JpcHRUb1Byb2Nlc3MhCi0gICAg
QVNTRVJUKG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lID09IHVuaW5pdGlhbGl6ZWRMaW5lTnVt
YmVyVmFsdWUpOyAvLyBDYWxsZXIgbmV2ZXIgY2FsbGVkIHRha2VTY3JpcHRUb1Byb2Nlc3MhCi0g
ICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gU2F2ZSBpbnNlcnRpb24gbW9kZSBhbmQgaW5zZXJ0aW9u
IHBvaW50PwotCi0gICAgLy8gUGF1c2Ugb3Vyc2VsdmVzIHNvIHRoYXQgcGFyc2luZyBzdG9wcyB1
bnRpbCB0aGUgc2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQgYnkgdGhlIGNhbGxlci4KLSAgICBtX2lz
UGF1c2VkID0gdHJ1ZTsKLSAgICBtX3NjcmlwdFRvUHJvY2VzcyA9IHNjcmlwdEVsZW1lbnQ7Ci0g
ICAgLy8gTGV4ZXIgbGluZSBudW1iZXJzIGFyZSAwLWJhc2VkLCBTY3JpcHRTb3VyY2VDb2RlIGV4
cGVjdHMgMS1iYXNlZCBsaW5lcywKLSAgICAvLyBzbyB3ZSBjb252ZXJ0IGhlcmUgYmVmb3JlIHBh
c3NpbmcgdGhlIGxpbmUgbnVtYmVyIG9mZiB0byBIVE1MU2NyaXB0UnVubmVyLgotICAgIG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRMaW5lID0gc2NyaXB0U3RhcnRMaW5lICsgMTsKLX0KLQotUGFzc1Jl
ZlB0cjxFbGVtZW50PiBIVE1MNVRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYg
c2NyaXB0U3RhcnRMaW5lKQotewotICAgIC8vIFVucGF1c2Ugb3Vyc2VsdmVzLCBjYWxsZXJzIG1h
eSBwYXVzZSB1cyBhZ2FpbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHNjcmlwdC4KLSAgICAvLyBUaGUg
SFRNTDUgc3BlYyBpcyB3cml0dGVuIGFzIHRob3VnaCBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbnNp
ZGUgdGhlIHRyZWUKLSAgICAvLyBidWlsZGVyLiAgV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0
IHRoZSB0cmVlIGJ1aWxkZXIsIGFuZCB0aGVuIHJlc3VtZQotICAgIC8vIGJlZm9yZSBydW5uaW5n
IHNjcmlwdHMuCi0gICAgbV9pc1BhdXNlZCA9IGZhbHNlOwotICAgIHNjcmlwdFN0YXJ0TGluZSA9
IG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lOwotICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRM
aW5lID0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZTsKLSAgICByZXR1cm4gbV9zY3JpcHRU
b1Byb2Nlc3MucmVsZWFzZSgpOwotfQotCi1IVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MNVRyZWVC
dWlsZGVyOjphZGp1c3RlZExleGVyU3RhdGUoSFRNTFRva2VuaXplcjo6U3RhdGUgc3RhdGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRnJhbWUqIGZyYW1lKQotewotICAgIGlmICh0YWdO
YW1lID09IHRleHRhcmVhVGFnIHx8IHRhZ05hbWUgPT0gdGl0bGVUYWcpCi0gICAgICAgIHJldHVy
biBIVE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZTsKLQotICAgIGlmICh0YWdOYW1lID09IHN0eWxl
VGFnIHx8IHRhZ05hbWUgPT0gaWZyYW1lVGFnIHx8IHRhZ05hbWUgPT0geG1wVGFnIHx8IHRhZ05h
bWUgPT0gbm9lbWJlZFRhZwotICAgICAgICB8fCB0YWdOYW1lID09IG5vZnJhbWVzVGFnIHx8ICh0
YWdOYW1lID09IG5vc2NyaXB0VGFnICYmIGlzU2NyaXB0aW5nRmxhZ0VuYWJsZWQoZnJhbWUpKSkK
LSAgICAgICAgcmV0dXJuIEhUTUxUb2tlbml6ZXI6OlJBV1RFWFRTdGF0ZTsKLQotICAgIGlmICh0
YWdOYW1lID09IHBsYWludGV4dFRhZykKLSAgICAgICAgcmV0dXJuIEhUTUxUb2tlbml6ZXI6OlBM
QUlOVEVYVFN0YXRlOwotCi0gICAgcmV0dXJuIHN0YXRlOwotfQotCi1QYXNzUmVmUHRyPE5vZGU+
IEhUTUw1VHJlZUJ1aWxkZXI6OnBhc3NUb2tlblRvTGVnYWN5UGFyc2VyKEhUTUxUb2tlbiYgdG9r
ZW4pCi17Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkRPQ1RZUEUpIHsKLSAg
ICAgICAgRG9jdHlwZVRva2VuIGRvY3R5cGVUb2tlbjsKLSAgICAgICAgZG9jdHlwZVRva2VuLm1f
bmFtZS5hcHBlbmQodG9rZW4ubmFtZSgpLmRhdGEoKSwgdG9rZW4ubmFtZSgpLnNpemUoKSk7Ci0g
ICAgICAgIGRvY3R5cGVUb2tlbi5tX3B1YmxpY0lEID0gdG9rZW4ucHVibGljSWRlbnRpZmllcigp
OwotICAgICAgICBkb2N0eXBlVG9rZW4ubV9zeXN0ZW1JRCA9IHRva2VuLnN5c3RlbUlkZW50aWZp
ZXIoKTsKLSAgICAgICAgZG9jdHlwZVRva2VuLm1fZm9yY2VRdWlya3MgPSB0b2tlbi5mb3JjZVF1
aXJrcygpOwotCi0gICAgICAgIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yLT5wYXJzZURvY3R5cGVU
b2tlbigmZG9jdHlwZVRva2VuKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8g
Rm9yIG5vdywgd2UgdHJhbnNsYXRlIGludG8gYW4gb2xkLXN0eWxlIHRva2VuIGZvciB0ZXN0aW5n
LgotICAgIFRva2VuIG9sZFN0eWxlVG9rZW47Ci0gICAgY29udmVydFRvT2xkU3R5bGUodG9rZW4s
IG9sZFN0eWxlVG9rZW4pOwotCi0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9ICBtX2xlZ2FjeVRy
ZWVDb25zdHJ1Y3Rvci0+cGFyc2VUb2tlbigmb2xkU3R5bGVUb2tlbik7Ci0gICAgaWYgKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKSB7Ci0gICAgICAgIC8vIFRoaXMgd29yayBp
cyBzdXBwb3NlZCB0byBiZSBkb25lIGJ5IHRoZSBwYXJzZXIsIGJ1dAotICAgICAgICAvLyB3aGVu
IHVzaW5nIHRoZSBvbGQgcGFyc2VyIGZvciB3ZSBoYXZlIHRvIGRvIHRoaXMgbWFudWFsbHkuCi0g
ICAgICAgIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFnKSB7Ci0gICAgICAg
ICAgICBoYW5kbGVTY3JpcHRTdGFydFRhZygpOwotICAgICAgICAgICAgbV9sYXN0U2NyaXB0RWxl
bWVudCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RWxlbWVudD4ocmVzdWx0KTsKLSAgICAgICAgICAg
IG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSBtX3Rva2VuaXplci0+bGluZU51bWJlcigp
OwotICAgICAgICB9IGVsc2UgaWYgKG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBwcmVUYWcgfHwg
b2xkU3R5bGVUb2tlbi50YWdOYW1lID09IGxpc3RpbmdUYWcpCi0gICAgICAgICAgICBtX3Rva2Vu
aXplci0+c2tpcExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZygpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3Rva2VuaXplci0+c2V0U3RhdGUoYWRqdXN0ZWRMZXhlclN0YXRlKG1fdG9rZW5p
emVyLT5zdGF0ZSgpLCBvbGRTdHlsZVRva2VuLnRhZ05hbWUsIG1fZG9jdW1lbnQtPmZyYW1lKCkp
KTsKLSAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZykgewot
ICAgICAgICBpZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZykgewotICAgICAg
ICAgICAgaWYgKG1fbGFzdFNjcmlwdEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSAhPSB1bmluaXRpYWxpemVkTGluZU51bWJlclZh
bHVlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
PT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGEgaG9ycmlibGUgaGFjayBmb3IgcGxhdGZvcm0vUGFzdGVib2FyZC4K
LSAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIDxzY3JpcHQ+IHRhZyB3aGVuIHVzaW5n
IHRoZSBQYXJzZXIgdG8gY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIGEgRG9jdW1lbnRG
cmFnbWVudCBmb3IgcGFzdGluZyBzbyB0aGF0IGphdmFzY3JpcHQgY29udGVudAotICAgICAgICAg
ICAgICAgICAgICAvLyBkb2VzIG5vdCBzaG93IHVwIGluIHBhc3RlZCBIVE1MLgotICAgICAgICAg
ICAgICAgICAgICBtX2xhc3RTY3JpcHRFbGVtZW50LT5yZW1vdmVDaGlsZHJlbigpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaW5zZXJ0aW9uTW9kZSgpICE9IEFmdGVyRnJhbWVzZXQpCi0g
ICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcmlwdEVuZFRhZyhtX2xhc3RTY3JpcHRFbGVtZW50
LmdldCgpLCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKTsKLSAgICAgICAgICAgICAgICBt
X2xhc3RTY3JpcHRFbGVtZW50ID0gMDsKLSAgICAgICAgICAgICAgICBtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lID0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0gZnJhbWVzZXRU
YWcpCi0gICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEFmdGVyRnJhbWVzZXQpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBIVE1M
NVRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCi17
Ci0gICAgLy8gTWFrZSBNU1ZDIGlnbm9yZSBvdXIgdW5yZWFjaGFibGUgY29kZSBmb3Igbm93Lgot
ICAgIGlmICh0cnVlKQotICAgICAgICByZXR1cm4gcGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIodG9r
ZW4pOwotCi0gICAgLy8gSFRNTDUgZXhwZWN0cyB0aGUgdG9rZW5pemVyIHRvIGNhbGwgdGhlIHBh
cnNlciBldmVyeSB0aW1lIGEgY2hhcmFjdGVyIGlzCi0gICAgLy8gZW1pdHRlZC4gIFdlIGluc3Rl
YWQgY29sbGVjdCBjaGFyYWN0ZXJzIGFuZCBjYWxsIHRoZSBwYXJzZXIgd2l0aCBhIGJhdGNoLgot
ICAgIC8vIEluIG9yZGVyIHRvIG1ha2Ugb3VyIGZpcnN0LXBhc3MgcGFyc2VyIGNvZGUgc2ltcGxl
LCBwcm9jZXNzVG9rZW4gbWF0Y2hlcwotICAgIC8vIHRoZSBzcGVjIGluIG9ubHkgaGFuZGxpbmcg
b25lIGNoYXJhY3RlciBhdCBhIHRpbWUuCi0gICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkNoYXJhY3RlcikgewotICAgICAgICBIVE1MVG9rZW46OkRhdGFWZWN0b3IgY2hhcmFjdGVy
cyA9IHRva2VuLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgSFRNTFRva2VuOjpEYXRhVmVjdG9yOjpj
b25zdF9pdGVyYXRvciBpdHIgPSBjaGFyYWN0ZXJzLmJlZ2luKCk7Ci0gICAgICAgIGZvciAoO2l0
cjsgKytpdHIpCi0gICAgICAgICAgICBwcm9jZXNzVG9rZW4odG9rZW4sICppdHIpOwotICAgICAg
ICByZXR1cm4gMDsgLy8gRklYTUU6IFNob3VsZCB3ZSBiZSByZXR1cm5pbmcgdGhlIFRleHQgbm9k
ZT8KLSAgICB9Ci0gICAgcmV0dXJuIHByb2Nlc3NUb2tlbih0b2tlbik7Ci19Ci0KLVBhc3NSZWZQ
dHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEhUTUxUb2tlbiYgdG9rZW4s
IFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHRva2VuKTsKLSAg
ICBVTlVTRURfUEFSQU0oY3VycmVudENoYXJhY3Rlcik7Ci0gICAgLy8gSW1wbGVtZW50YXRpb24g
Y29taW5nIGluIHRoZSBuZXh0IHBhdGNoLgotICAgIHJldHVybiAwOwotfQotCi12b2lkIEhUTUw1
VHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKLXsKLSAgICAvLyBXZSBzaG91bGQgY2FsbCBtX2RvY3Vt
ZW50LT5maW5pc2hlZFBhcnNpbmcoKSBoZXJlLCBleGNlcHQKLSAgICAvLyBtX2xlZ2FjeVRyZWVD
b25zdHJ1Y3Rvci0+ZmluaXNoZWQoKSBkb2VzIGl0IGZvciB1cy4KLSAgICBtX2xlZ2FjeVRyZWVD
b25zdHJ1Y3Rvci0+ZmluaXNoZWQoKTsKLX0KLQotYm9vbCBIVE1MNVRyZWVCdWlsZGVyOjppc1Nj
cmlwdGluZ0ZsYWdFbmFibGVkKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdENvbnRy
b2xsZXIgPSBmcmFtZS0+c2NyaXB0KCkpCi0gICAgICAgIHJldHVybiBzY3JpcHRDb250cm9sbGVy
LT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTDVUcmVlQnVpbGRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MNVRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYx
NjczKQorKysgV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
R09PR0xFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBIVE1MNVRyZWVCdWlsZGVyX2gKLSNkZWZpbmUgSFRNTDVUcmVl
QnVpbGRlcl9oCi0KLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKLSNp
bmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0j
aW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50RnJh
Z21lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBIVE1MVG9rZW47Ci1j
bGFzcyBIVE1MRG9jdW1lbnQ7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOwotY2xh
c3MgTm9kZTsKLQotY2xhc3MgSFRNTDVUcmVlQnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Ci1wdWJsaWM6Ci0gICAgLy8gRklYTUU6IFJlcGxhY2UgY29uc3RydWN0b3JzIHdpdGggY3JlYXRl
KCkgZnVuY3Rpb25zIHJldHVybmluZyBQYXNzT3duUHRycwotICAgIEhUTUw1VHJlZUJ1aWxkZXIo
SFRNTFRva2VuaXplciosIEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKLSAgICBI
VE1MNVRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqLCBEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAgICB+SFRNTDVUcmVlQnVpbGRlcigpOwotCi0gICAg
dm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQpIHsgbV9pc1BhdXNlZCA9IHBhdXNlZDsgfQotICAg
IGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGF1c2VkOyB9Ci0KLSAgICAvLyBU
aGUgdG9rZW4gcmVhbGx5IHNob3VsZCBiZSBwYXNzZWQgYXMgYSBjb25zdCYgc2luY2UgaXQncyBu
ZXZlciBtb2RpZmllZC4KLSAgICBQYXNzUmVmUHRyPE5vZGU+IGNvbnN0cnVjdFRyZWVGcm9tVG9r
ZW4oSFRNTFRva2VuJik7Ci0gICAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbiBwYXJzZXIgaXMgcGF1
c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCi0gICAgUGFzc1JlZlB0cjxFbGVt
ZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKTsKLQotICAgIC8v
IERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KLSAgICB2b2lkIGZpbmlzaGVkKCk7Ci0K
LSAgICBzdGF0aWMgSFRNTFRva2VuaXplcjo6U3RhdGUgYWRqdXN0ZWRMZXhlclN0YXRlKEhUTUxU
b2tlbml6ZXI6OlN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIEZyYW1lKik7Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGRpcnR5LCByb3R0ZW4gaGFjayB0byBrZWVwIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQgaGFwcHkKLSAgICAvLyB1bnRpbCB3ZSBzdG9wIHVzaW5nIHRoZSBs
ZWdhY3kgcGFyc2VyLiBETyBOT1QgQ0FMTCBUSElTIE1FVEhPRC4KLSAgICBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKiBsZWdhY3lUcmVlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2xl
Z2FjeVRyZWVDb25zdHJ1Y3Rvci5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIC8vIFJlcHJlc2Vu
dHMgSFRNTDUgImluc2VydGlvbiBtb2RlIgotICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0
bWw1L3N5bnRheC5odG1sI2luc2VydGlvbi1tb2RlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBy
ZW1haW5kZXIgb2Ygc3RhdGVzLgotICAgIGVudW0gSW5zZXJ0aW9uTW9kZSB7Ci0gICAgICAgIElu
aXRpYWwsCi0gICAgICAgIEFmdGVyRnJhbWVzZXQsCi0gICAgfTsKLQotICAgIFBhc3NSZWZQdHI8
Tm9kZT4gcGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTFRva2VuJik7Ci0gICAgUGFzc1JlZlB0
cjxOb2RlPiBwcm9jZXNzVG9rZW4oSFRNTFRva2VuJiwgVUNoYXIgY3VycmVudENoYXJhY3RlciA9
IDApOwotICAgIAotICAgIHZvaWQgaGFuZGxlU2NyaXB0U3RhcnRUYWcoKTsKLSAgICB2b2lkIGhh
bmRsZVNjcmlwdEVuZFRhZyhFbGVtZW50KiwgaW50IHNjcmlwdFN0YXJ0TGluZSk7Ci0KLSAgICB2
b2lkIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZSB2YWx1ZSkgeyBtX2luc2VydGlvbk1v
ZGUgPSB2YWx1ZTsgfQotICAgIEluc2VydGlvbk1vZGUgaW5zZXJ0aW9uTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zZXJ0aW9uTW9kZTsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNTY3JpcHRpbmdG
bGFnRW5hYmxlZChGcmFtZSogZnJhbWUpOwotCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8v
IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBtX2xlZ2FjeVBhcnNlciBmb3Igbm93LgotICAgIGJv
b2wgbV9yZXBvcnRFcnJvcnM7Ci0gICAgYm9vbCBtX2lzUGF1c2VkOwotCi0gICAgSW5zZXJ0aW9u
TW9kZSBtX2luc2VydGlvbk1vZGU7Ci0KLSAgICAvLyBIVE1MNSBzcGVjIHJlcXVpcmVzIHRoYXQg
d2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSB0b2tlbml6ZXIKLSAgICAvLyBm
cm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9ucy4KLSAgICBIVE1MVG9rZW5pemVyKiBtX3Rva2VuaXpl
cjsKLQotICAgIC8vIFdlJ3JlIHJlLXVzaW5nIGxvZ2ljIGZyb20gdGhlIG9sZCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yIHdoaWxlIHRoaXMgY2xhc3MgaXMgYmVpbmcgd3JpdHRlbi4KLSAgICBP
d25QdHI8TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcj4gbV9sZWdhY3lUcmVlQ29uc3RydWN0b3I7
Ci0KLSAgICAvLyBUaGVzZSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IGR1cGxpY2F0ZWQgYXMg
dGhlIGZpcnN0IHNldCBpcyBhIGhhY2sKLSAgICAvLyBvbiB0b3Agb2YgdGhlIGxlZ2FjeSBwYXJz
ZXIgd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCi0gICAgUmVmUHRyPEVsZW1lbnQ+
IG1fbGFzdFNjcmlwdEVsZW1lbnQ7IC8vIEZJWE1FOiBIYWNrIGZvciA8c2NyaXB0PiBzdXBwb3J0
IG9uIHRvcCBvZiB0aGUgb2xkIHBhcnNlci4KLSAgICBpbnQgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0TGluZTsgLy8gRklYTUU6IEhhY2sgZm9yIDxzY3JpcHQ+IHN1cHBvcnQgb24gdG9wIG9mIHRo
ZSBvbGQgcGFyc2VyLgotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAv
LyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhl
IHBhcnNlci4KLSAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0YXJ0aW5n
IGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KLQotICAg
IC8vIEZJWE1FOiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gaXMgYSBIQUNLIGZvciBwbGF0
Zm9ybS9QYXN0ZWJvYXJkLgotICAgIC8vIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCBjYXVz
ZXMgdGhlIFBhcnNlciB0byByZW1vdmUgY2hpbGRyZW4KLSAgICAvLyBmcm9tIDxzY3JpcHQ+IHRh
Z3MgKHNvIGphdmFzY3JpcHQgZG9lc24ndCBzaG93IHVwIGluIHBhc3RlcykuCi0gICAgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uOwotfTsK
LQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MTY3MikK
KysrIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3
ICs2NCw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MNURvY3VtZW50UGFyc2Vy
LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCkBAIC0yOTIsNyArMjkyLDcgQEAgRG9jdW1lbnRQYXJzZXIqIEhUTUxEb2N1bWVu
dDo6Y3JlYXRlUGFycwogI2VuZGlmCiAKICAgICBpZiAoc2V0dGluZ3MoKSAmJiBzZXR0aW5ncygp
LT5odG1sNVBhcnNlckVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MNURvY3VtZW50
UGFyc2VyKHRoaXMsIHJlcG9ydEVycm9ycyk7CisgICAgICAgIHJldHVybiBuZXcgSFRNTERvY3Vt
ZW50UGFyc2VyKHRoaXMsIHJlcG9ydEVycm9ycyk7CiAKICAgICByZXR1cm4gbmV3IExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcih0aGlzLCByZXBvcnRFcnJvcnMpOwogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDYxNjczKQkoZnJvbSBXZWJDb3JlL2h0bWwv
SFRNTDVEb2N1bWVudFBhcnNlci5jcHA6NjE2NzMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhUTUw1RG9jdW1lbnRQYXJzZXIuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJIVE1MUGFyc2VyU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiSFRNTFRva2VuaXplci5o
IgorI2luY2x1ZGUgIkhUTUw1UHJlbG9hZFNjYW5uZXIuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0
UnVubmVyLmgiCisjaW5jbHVkZSAiSFRNTDVUcmVlQnVpbGRlci5oIgorI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgorI2luY2x1ZGUgIlhTU0F1ZGl0b3IuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisjaW5jbHVkZSAiSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgOiBwdWJsaWMgTm9uY29weWFibGUg
eworcHVibGljOgorICAgIGV4cGxpY2l0IE5lc3RpbmdMZXZlbEluY3JlbWVudGVyKGludCYgY291
bnRlcikKKyAgICAgICAgOiBtX2NvdW50ZXIoJmNvdW50ZXIpCisgICAgeworICAgICAgICArKygq
bV9jb3VudGVyKTsKKyAgICB9CisKKyAgICB+TmVzdGluZ0xldmVsSW5jcmVtZW50ZXIoKQorICAg
IHsKKyAgICAgICAgLS0oKm1fY291bnRlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIGludCog
bV9jb3VudGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworSFRNTDVEb2N1bWVudFBhcnNlcjo6
SFRNTDVEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVy
cm9ycykKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX3Rva2VuaXplcihuZXcg
SFRNTFRva2VuaXplcikKKyAgICAsIG1fc2NyaXB0UnVubmVyKG5ldyBIVE1MU2NyaXB0UnVubmVy
KGRvY3VtZW50LCB0aGlzKSkKKyAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBIVE1MNVRyZWVC
dWlsZGVyKG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzKSkKKyAgICAs
IG1fcGFyc2VyU2NoZWR1bGVyKG5ldyBIVE1MUGFyc2VyU2NoZWR1bGVyKHRoaXMpKQorICAgICwg
bV9lbmRXYXNEZWxheWVkKGZhbHNlKQorICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQorewor
ICAgIGJlZ2luKCk7Cit9CisKKy8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBn
cm91cGVkIGludG8gc2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bworLy8gbWluaW1pemUgY29k
ZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KK0hUTUw1RG9jdW1lbnRQ
YXJzZXI6OkhUTUw1RG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIDogbV9k
b2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fdG9rZW5pemVyKG5ldyBIVE1M
VG9rZW5pemVyKQorICAgICwgbV90cmVlQ29uc3RydWN0b3IobmV3IEhUTUw1VHJlZUJ1aWxkZXIo
bV90b2tlbml6ZXIuZ2V0KCksIGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAs
IG1fZW5kV2FzRGVsYXllZChmYWxzZSkKKyAgICAsIG1fd3JpdGVOZXN0aW5nTGV2ZWwoMCkKK3sK
KyAgICBiZWdpbigpOworfQorCitIVE1MNURvY3VtZW50UGFyc2VyOjp+SFRNTDVEb2N1bWVudFBh
cnNlcigpCit7CisgICAgLy8gRklYTUU6IFdlJ2QgbGlrZSB0byBBU1NFUlQgdGhhdCBub3JtYWwg
b3BlcmF0aW9uIG9mIHRoaXMgY2xhc3MgY2xlYXJzCisgICAgLy8gb3V0IGFueSBkZWxheWVkIGFj
dGlvbnMsIGJ1dCB3ZSBjYW4ndCBiZWNhdXNlIHdlJ3JlIHVuY2VyZW1vbmlvdXNseQorICAgIC8v
IGRlbGV0ZWQuICBJZiB0aGVyZSB3ZXJlIGEgcmVxdWlyZWQgY2FsbCB0byBzb21lIHNvcnQgb2Yg
Y2FuY2VsIGZ1bmN0aW9uLAorICAgIC8vIHRoZW4gd2UgY291bGQgQVNTRVJUIHNvbWUgaW52YXJp
YW50cyBoZXJlLgorfQorCit2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKK3sKKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIHJlc2V0IHRoZSB0b2tlbml6ZXI/Cit9CisKK3ZvaWQgSFRN
TDVEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQoreworICAgIERvY3VtZW50UGFyc2VyOjpz
dG9wUGFyc2luZygpOworICAgIG1fcGFyc2VyU2NoZWR1bGVyLmNsZWFyKCk7IC8vIERlbGV0aW5n
IHRoZSBzY2hlZHVsZXIgd2lsbCBjbGVhciBhbnkgdGltZXJzLgorfQorCitib29sIEhUTUw1RG9j
dW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTY2hl
ZHVsZWRGb3JSZXN1bWUoKSB8fCBpbldyaXRlKCk7Cit9CisKK3ZvaWQgSFRNTDVEb2N1bWVudFBh
cnNlcjo6cHVtcFRva2VuaXplcklmUG9zc2libGUoU3luY2hyb25vdXNNb2RlIG1vZGUpCit7Cisg
ICAgaWYgKG1fcGFyc2VyU3RvcHBlZCB8fCBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT25jZSBhIHJlc3VtZSBpcyBzY2hlZHVsZWQsIEhU
TUxQYXJzZXJTY2hlZHVsZXIgY29udHJvbHMgd2hlbiB3ZSBuZXh0IHB1bXAuCisgICAgaWYgKGlz
U2NoZWR1bGVkRm9yUmVzdW1lKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gQWxsb3dZaWVs
ZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwdW1wVG9rZW5pemVyKG1vZGUpOwor
fQorCitib29sIEhUTUw1RG9jdW1lbnRQYXJzZXI6OmlzU2NoZWR1bGVkRm9yUmVzdW1lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wYXJzZXJTY2hlZHVsZXIgJiYgbV9wYXJzZXJTY2hlZHVsZXIt
PmlzU2NoZWR1bGVkRm9yUmVzdW1lKCk7Cit9CisKKy8vIFVzZWQgYnkgSFRNTFBhcnNlclNjaGVk
dWxlcgordm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgp
Cit7CisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGhlcmUgdW5sZXNzIHdlIGNhbiBwdW1wIGlt
bWVkaWF0ZWx5LiAgQ2FsbCBwdW1wVG9rZW5pemVyKCkKKyAgICAvLyBkaXJlY3RseSBzbyB0aGF0
IEFTU0VSVFMgd2lsbCBmaXJlIGlmIHdlJ3JlIHdyb25nLgorICAgIHB1bXBUb2tlbml6ZXIoQWxs
b3dZaWVsZCk7Cit9CisKK2Jvb2wgSFRNTDVEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBh
dXNlZFRyZWVDb25zdHJ1Y3RvcigpCit7CisgICAgQVNTRVJUKG1fdHJlZUNvbnN0cnVjdG9yLT5p
c1BhdXNlZCgpKTsKKworICAgIGludCBzY3JpcHRTdGFydExpbmUgPSAwOworICAgIFJlZlB0cjxF
bGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQ29uc3RydWN0b3ItPnRha2VTY3JpcHRUb1By
b2Nlc3Moc2NyaXB0U3RhcnRMaW5lKTsKKyAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0
UnVubmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCisgICAgaWYgKCFtX3Njcmlw
dFJ1bm5lcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVy
LT5leGVjdXRlKHNjcmlwdEVsZW1lbnQucmVsZWFzZSgpLCBzY3JpcHRTdGFydExpbmUpOworfQor
Cit2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2Rl
IG1vZGUpCit7CisgICAgQVNTRVJUKCFtX3BhcnNlclN0b3BwZWQpOworICAgIEFTU0VSVCghbV90
cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVCghaXNTY2hlZHVsZWRGb3JS
ZXN1bWUoKSk7CisKKyAgICAvLyBXZSB0ZWxsIHRoZSBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGFi
b3V0IGV2ZXJ5IHB1bXAsIGV2ZW4gaWYgd2UKKyAgICAvLyBlbmQgdXAgcHVtcGluZyBub3RoaW5n
LiAgSXQgY2FuIGZpbHRlciBvdXQgZW1wdHkgcHVtcHMgaXRzZWxmLgorICAgIHdpbGxQdW1wTGV4
ZXIoKTsKKworICAgIEhUTUxQYXJzZXJTY2hlZHVsZXI6OlB1bXBTZXNzaW9uIHNlc3Npb247Cisg
ICAgLy8gRklYTUU6IFRoaXMgbG9vcCBib2R5IGhhcyBpcyBub3cgdG9vIGxvbmcgYW5kIG5lZWRz
IGNsZWFudXAuCisgICAgd2hpbGUgKG1vZGUgPT0gRm9yY2VTeW5jaHJvbm91cyB8fCAoIW1fcGFy
c2VyU3RvcHBlZCAmJiBtX3BhcnNlclNjaGVkdWxlci0+c2hvdWxkQ29udGludWVQYXJzaW5nKHNl
c3Npb24pKSkgeworICAgICAgICBpZiAoIW1fdG9rZW5pemVyLT5uZXh0VG9rZW4obV9pbnB1dC5j
dXJyZW50KCksIG1fdG9rZW4pKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV90cmVl
Q29uc3RydWN0b3ItPmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4obV90b2tlbik7CisgICAgICAgIG1f
dG9rZW4uY2xlYXIoKTsKKworICAgICAgICAvLyBUaGUgcGFyc2VyIHdpbGwgcGF1c2UgaXRzZWxm
IHdoZW4gd2FpdGluZyBvbiBhIHNjcmlwdCB0byBsb2FkIG9yIHJ1bi4KKyAgICAgICAgaWYgKCFt
X3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIElmIHdlJ3JlIHBhdXNlZCB3YWl0aW5nIGZvciBhIHNjcmlwdCwgd2UgdHJ5IHRv
IGV4ZWN1dGUgc2NyaXB0cyBiZWZvcmUgY29udGludWluZy4KKyAgICAgICAgYm9vbCBzaG91bGRD
b250aW51ZVBhcnNpbmcgPSBydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUNvbnN0cnVjdG9yKCk7Cisg
ICAgICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2lu
Zyk7CisgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKGlzV2FpdGluZ0ZvclNjcmlwdHMoKSkgeworICAgICAgICBB
U1NFUlQobV90b2tlbml6ZXItPnN0YXRlKCkgPT0gSFRNTFRva2VuaXplcjo6RGF0YVN0YXRlKTsK
KyAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKSB7CisgICAgICAgICAgICBtX3ByZWxvYWRT
Y2FubmVyLnNldChuZXcgSFRNTDVQcmVsb2FkU2Nhbm5lcihtX2RvY3VtZW50KSk7CisgICAgICAg
ICAgICBtX3ByZWxvYWRTY2FubmVyLT5hcHBlbmRUb0VuZChtX2lucHV0LmN1cnJlbnQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+c2NhbigpOworICAgIH0KKworICAg
IGRpZFB1bXBMZXhlcigpOworfQorCit2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OndpbGxQdW1w
TGV4ZXIoKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAgLy8gRklYTUU6IG1faW5wdXQu
Y3VycmVudCgpLmxlbmd0aCgpIGlzIG9ubHkgYWNjdXJhdGUgaWYgd2UKKyAgICAvLyBlbmQgdXAg
cGFyc2luZyB0aGUgd2hvbGUgYnVmZmVyIGluIHRoaXMgcHVtcC4gIFdlIHNob3VsZCBwYXNzIGhv
dworICAgIC8vIG11Y2ggd2UgcGFyc2VkIGFzIHBhcnQgb2YgZGlkV3JpdGVIVE1MIGluc3RlYWQg
b2Ygd2lsbFdyaXRlSFRNTC4KKyAgICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxp
bmVBZ2VudCA9IG1fZG9jdW1lbnQtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSkKKyAgICAgICAg
dGltZWxpbmVBZ2VudC0+d2lsbFdyaXRlSFRNTChtX2lucHV0LmN1cnJlbnQoKS5sZW5ndGgoKSwg
bV90b2tlbml6ZXItPmxpbmVOdW1iZXIoKSk7CisjZW5kaWYKK30KKwordm9pZCBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpkaWRQdW1wTGV4ZXIoKQoreworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisgICAg
aWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBtX2RvY3VtZW50LT5p
bnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRpZFdyaXRl
SFRNTChtX3Rva2VuaXplci0+bGluZU51bWJlcigpKTsKKyNlbmRpZgorfQorCit2b2lkIEhUTUw1
RG9jdW1lbnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29s
IGlzRnJvbU5ldHdvcmspCit7CisgICAgaWYgKG1fcGFyc2VyU3RvcHBlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTmVzdGluZ0xldmVsSW5jcmVtZW50ZXIgbmVzdGluZ0xldmVsSW5jcmVtZW50
ZXIobV93cml0ZU5lc3RpbmdMZXZlbCk7CisKKyAgICBpZiAoaXNGcm9tTmV0d29yaykgeworICAg
ICAgICBtX2lucHV0LmFwcGVuZFRvRW5kKHNvdXJjZSk7CisgICAgICAgIGlmIChtX3ByZWxvYWRT
Y2FubmVyKQorICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+YXBwZW5kVG9FbmQoc291cmNl
KTsKKworICAgICAgICBpZiAobV93cml0ZU5lc3RpbmdMZXZlbCA+IDEpIHsKKyAgICAgICAgICAg
IC8vIFdlJ3ZlIGdvdHRlbiBkYXRhIG9mZiB0aGUgbmV0d29yayBpbiBhIG5lc3RlZCBjYWxsIHRv
IHdyaXRlKCkuCisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbnN1bWUgYW55IG1v
cmUgb2YgdGhlIGlucHV0IHN0cmVhbSBub3cuICBEbworICAgICAgICAgICAgLy8gbm90IHdvcnJ5
LiAgV2UnbGwgY29uc3VtZSB0aGlzIGRhdGEgaW4gYSBsZXNzLW5lc3RlZCB3cml0ZSgpLgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG1faW5wdXQu
aW5zZXJ0QXRDdXJyZW50SW5zZXJ0aW9uUG9pbnQoc291cmNlKTsKKworICAgIHB1bXBUb2tlbml6
ZXJJZlBvc3NpYmxlKGlzRnJvbU5ldHdvcmsgPyBBbGxvd1lpZWxkIDogRm9yY2VTeW5jaHJvbm91
cyk7CisgICAgZW5kSWZEZWxheWVkKCk7Cit9CisKK3ZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6
ZW5kKCkKK3sKKyAgICBBU1NFUlQoIWlzU2NoZWR1bGVkRm9yUmVzdW1lKCkpOworICAgIC8vIE5P
VEU6IFRoaXMgcHVtcCBzaG91bGQgb25seSBldmVyIGVtaXQgYnVmZmVyZWQgY2hhcmFjdGVyIHRv
a2VucywKKyAgICAvLyBzbyBGb3JjZVN5bmNocm9ub3VzIHZzLiBBbGxvd1lpZWxkIHNob3VsZCBi
ZSBtZWFuaW5nbGVzcy4KKyAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShGb3JjZVN5bmNocm9u
b3VzKTsKKworICAgIC8vIEluZm9ybXMgdGhlIHRoZSByZXN0IG9mIFdlYkNvcmUgdGhhdCBwYXJz
aW5nIGlzIHJlYWxseSBmaW5pc2hlZCAoYW5kIGRlbGV0ZXMgdGhpcykuCisgICAgbV90cmVlQ29u
c3RydWN0b3ItPmZpbmlzaGVkKCk7Cit9CisKK3ZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6YXR0
ZW1wdFRvRW5kKCkKK3sKKyAgICAvLyBmaW5pc2goKSBpbmRpY2F0ZXMgd2Ugd2lsbCBub3QgcmVj
ZWl2ZSBhbnkgbW9yZSBkYXRhLiBJZiB3ZSBhcmUgd2FpdGluZyBvbgorICAgIC8vIGFuIGV4dGVy
bmFsIHNjcmlwdCB0byBsb2FkLCB3ZSBjYW4ndCBmaW5pc2ggcGFyc2luZyBxdWl0ZSB5ZXQuCisK
KyAgICBpZiAoaW5Xcml0ZSgpIHx8IGlzV2FpdGluZ0ZvclNjcmlwdHMoKSB8fCBleGVjdXRpbmdT
Y3JpcHQoKSB8fCBpc1NjaGVkdWxlZEZvclJlc3VtZSgpKSB7CisgICAgICAgIG1fZW5kV2FzRGVs
YXllZCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZW5kKCk7Cit9CisKK3Zv
aWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZW5kSWZEZWxheWVkKCkKK3sKKyAgICAvLyBXZSBkb24n
dCBjaGVjayBpbldyaXRlKCkgaGVyZSBzaW5jZSBpbldyaXRlKCkgd2lsbCBiZSB0cnVlIGlmIHRo
aXMgd2FzCisgICAgLy8gY2FsbGVkIGZyb20gd3JpdGUoKS4KKyAgICBpZiAoIW1fZW5kV2FzRGVs
YXllZCB8fCBpc1dhaXRpbmdGb3JTY3JpcHRzKCkgfHwgZXhlY3V0aW5nU2NyaXB0KCkgfHwgaXNT
Y2hlZHVsZWRGb3JSZXN1bWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmRXYXNEZWxh
eWVkID0gZmFsc2U7CisgICAgZW5kKCk7Cit9CisKK3ZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6
ZmluaXNoKCkKK3sKKyAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGFueSBtb3JlIGRhdGEg
b2ZmIHRoZSBuZXR3b3JrLCBzbyB3ZSBjbG9zZSB0aGUKKyAgICAvLyBpbnB1dCBzdHJlYW0gdG8g
aW5kaWNhdGUgRU9GLgorICAgIG1faW5wdXQuY2xvc2UoKTsKKyAgICBhdHRlbXB0VG9FbmQoKTsK
K30KKworYm9vbCBIVE1MNURvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQoreworICAg
IHJldHVybiBtX2lucHV0LmlzQ2xvc2VkKCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdmly
dHVhbCBhbmQganVzdCBmb3IgdGhlIERvY3VtZW50UGFyc2VyIGludGVyZmFjZS4KK2ludCBIVE1M
NURvY3VtZW50UGFyc2VyOjpleGVjdXRpbmdTY3JpcHQoKSBjb25zdAoreworICAgIHJldHVybiBp
blNjcmlwdEV4ZWN1dGlvbigpOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vbi12aXJ0dWFs
IGFuZCB1c2VkIHRocm91Z2hvdXQgdGhlIGltcGxlbWVudGF0aW9uLgorYm9vbCBIVE1MNURvY3Vt
ZW50UGFyc2VyOjppblNjcmlwdEV4ZWN1dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcmlw
dFJ1bm5lcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3NjcmlwdFJ1bm5l
ci0+aW5TY3JpcHRFeGVjdXRpb24oKTsKK30KKworaW50IEhUTUw1RG9jdW1lbnRQYXJzZXI6Omxp
bmVOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigp
OworfQorCitpbnQgSFRNTDVEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOworfQorCitMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yKiBIVE1MNURvY3VtZW50UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9y
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmVlQ29uc3RydWN0b3ItPmxlZ2FjeVRyZWVDb25z
dHJ1Y3RvcigpOworfQorCitib29sIEhUTUw1RG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNj
cmlwdHMoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQo
KTsKK30KKwordm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3Jp
cHRFeGVjdXRpb24oKQoreworICAgIEFTU0VSVCghaW5TY3JpcHRFeGVjdXRpb24oKSk7CisgICAg
QVNTRVJUKCFtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisKKyAgICBwdW1wVG9rZW5p
emVySWZQb3NzaWJsZShBbGxvd1lpZWxkKTsKKworICAgIC8vIFRoZSBkb2N1bWVudCBhbHJlYWR5
IGZpbmlzaGVkIHBhcnNpbmcgd2Ugd2VyZSBqdXN0IHdhaXRpbmcgb24gc2NyaXB0cyB3aGVuIGZp
bmlzaGVkKCkgd2FzIGNhbGxlZC4KKyAgICBlbmRJZkRlbGF5ZWQoKTsKK30KKwordm9pZCBIVE1M
NURvY3VtZW50UGFyc2VyOjp3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlw
dCkKK3sKKyAgICBjYWNoZWRTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKK30KKwordm9pZCBIVE1M
NURvY3VtZW50UGFyc2VyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291cmNlKiBjYWNo
ZWRTY3JpcHQpCit7CisgICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7Cit9CisK
K2Jvb2wgSFRNTDVEb2N1bWVudFBhcnNlcjo6c2hvdWxkTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNy
Yyhjb25zdCBBdG9taWNTdHJpbmcmIHNyY1ZhbHVlKQoreworICAgIGlmICghbV9YU1NBdWRpdG9y
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9YU1NBdWRpdG9yLT5jYW5Mb2Fk
RXh0ZXJuYWxTY3JpcHRGcm9tU3JjKHNyY1ZhbHVlKTsKK30KKwordm9pZCBIVE1MNURvY3VtZW50
UGFyc2VyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCit7
CisgICAgQVNTRVJUKG1fc2NyaXB0UnVubmVyKTsKKyAgICAvLyBJZ25vcmUgY2FsbHMgdW5sZXNz
IHdlIGhhdmUgYSBzY3JpcHQgYmxvY2tpbmcgdGhlIHBhcnNlciB3YWl0aW5nCisgICAgLy8gZm9y
IGl0cyBvd24gbG9hZC4gIE90aGVyd2lzZSB0aGlzIG1heSBiZSBhIGxvYWQgY2FsbGJhY2sgZnJv
bQorICAgIC8vIENhY2hlZFJlc291cmNlOjphZGRDbGllbnQgYmVjYXVzZSB0aGUgc2NyaXB0IHdh
cyBhbHJlYWR5IGluIHRoZSBjYWNoZS4KKyAgICAvLyBIVE1MU2NyaXB0UnVubmVyIG1heSBub3Qg
YmUgcmVhZHkgdG8gaGFuZGxlIHJ1bm5pbmcgdGhhdCBzY3JpcHQgeWV0LgorICAgIGlmICghbV9z
Y3JpcHRSdW5uZXItPmhhc1NjcmlwdHNXYWl0aW5nRm9yTG9hZCgpKSB7CisgICAgICAgIEFTU0VS
VChtX3NjcmlwdFJ1bm5lci0+aW5TY3JpcHRFeGVjdXRpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgQVNTRVJUKCFpblNjcmlwdEV4ZWN1dGlvbigpKTsKKyAgICBBU1NFUlQobV90
cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOworICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3
YWl0IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCisgICAg
Ly8gaXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJl
ZSBidWlsZGVyLgorICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoZmFsc2UpOworICAg
IGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3Jp
cHRzV2FpdGluZ0ZvckxvYWQoY2FjaGVkUmVzb3VyY2UpOworICAgIG1fdHJlZUNvbnN0cnVjdG9y
LT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVlUGFyc2luZyk7CisgICAgaWYgKHNob3VsZENvbnRp
bnVlUGFyc2luZykKKyAgICAgICAgcmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCk7
Cit9CisKK3ZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHMoKQoreworICAgIC8vIERvY3VtZW50IG9ubHkgY2FsbHMgdGhpcyB3aGVuIHRo
ZSBEb2N1bWVudCBvd25zIHRoZSBEb2N1bWVudFBhcnNlcgorICAgIC8vIHNvIHRoaXMgd2lsbCBu
b3QgYmUgY2FsbGVkIGluIHRoZSBEb2N1bWVudEZyYWdtZW50IGNhc2UuCisgICAgQVNTRVJUKG1f
c2NyaXB0UnVubmVyKTsKKyAgICAvLyBJZ25vcmUgY2FsbHMgdW5sZXNzIHdlIGhhdmUgYSBzY3Jp
cHQgYmxvY2tpbmcgdGhlIHBhcnNlciB3YWl0aW5nIG9uIGEKKyAgICAvLyBzdHlsZXNoZWV0IGxv
YWQuICBPdGhlcndpc2Ugd2UgYXJlIGN1cnJlbnRseSBwYXJzaW5nIGFuZCB0aGlzCisgICAgLy8g
aXMgYSByZS1lbnRyYW50IGNhbGwgZnJvbSBlbmNvdW50ZXJpbmcgYSA8LyBzdHlsZT4gdGFnLgor
ICAgIGlmICghbV9zY3JpcHRSdW5uZXItPmhhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9zY3JpcHRSdW5uZXItPmluU2NyaXB0
RXhlY3V0aW9uKCkpOworICAgIEFTU0VSVChtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7
CisgICAgLy8gTm90ZTogV2Ugb25seSBldmVyIHdhaXQgb24gb25lIHNjcmlwdCBhdCBhIHRpbWUs
IHNvIHdlIGFsd2F5cyBrbm93IHRoaXMKKyAgICAvLyBpcyB0aGUgb25lIHdlIHdlcmUgd2FpdGlu
ZyBvbiBhbmQgY2FuIHVuLXBhdXNlIHRoZSB0cmVlIGJ1aWxkZXIuCisgICAgbV90cmVlQ29uc3Ry
dWN0b3ItPnNldFBhdXNlZChmYWxzZSk7CisgICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcg
PSBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsK
KyAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBhcnNpbmcp
OworICAgIGlmIChzaG91bGRDb250aW51ZVBhcnNpbmcpCisgICAgICAgIHJlc3VtZVBhcnNpbmdB
ZnRlclNjcmlwdEV4ZWN1dGlvbigpOworfQorCitTY3JpcHRDb250cm9sbGVyKiBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpzY3JpcHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RvY3VtZW50LT5mcmFt
ZSgpID8gbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCkgOiAwOworfQorCit9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJIVE1MNURvY3VtZW50
UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAKICNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtMzMsNyArMzMsNyBA
QAogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJIVE1MNVByZWxvYWRTY2Fu
bmVyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdFJ1bm5lci5oIgotI2luY2x1ZGUgIkhUTUw1VHJl
ZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1M
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJYU1NBdWRpdG9yLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CkBAIC02NSwxMSArNjUsMTEgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UK
IAotSFRNTDVEb2N1bWVudFBhcnNlcjo6SFRNTDVEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQq
IGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKK0hUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERv
Y3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQog
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fdG9rZW5pemVyKG5ldyBIVE1MVG9r
ZW5pemVyKQogICAgICwgbV9zY3JpcHRSdW5uZXIobmV3IEhUTUxTY3JpcHRSdW5uZXIoZG9jdW1l
bnQsIHRoaXMpKQotICAgICwgbV90cmVlQ29uc3RydWN0b3IobmV3IEhUTUw1VHJlZUJ1aWxkZXIo
bV90b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQorICAgICwgbV90cmVl
Q29uc3RydWN0b3IobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rva2VuaXplci5nZXQoKSwgZG9jdW1l
bnQsIHJlcG9ydEVycm9ycykpCiAgICAgLCBtX3BhcnNlclNjaGVkdWxlcihuZXcgSFRNTFBhcnNl
clNjaGVkdWxlcih0aGlzKSkKICAgICAsIG1fZW5kV2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1f
d3JpdGVOZXN0aW5nTGV2ZWwoMCkKQEAgLTc5LDE3ICs3OSwxNyBAQCBIVE1MNURvY3VtZW50UGFy
c2VyOjpIVE1MNURvY3VtZW50UGFyc2VyCiAKIC8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNo
b3VsZCBiZSBncm91cGVkIGludG8gc2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bwogLy8gbWlu
aW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KLUhUTUw1
RG9jdW1lbnRQYXJzZXI6OkhUTUw1RG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQor
SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQogICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW5p
emVyKG5ldyBIVE1MVG9rZW5pemVyKQotICAgICwgbV90cmVlQ29uc3RydWN0b3IobmV3IEhUTUw1
VHJlZUJ1aWxkZXIobV90b2tlbml6ZXIuZ2V0KCksIGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNz
aW9uKSkKKyAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBIVE1MVHJlZUJ1aWxkZXIobV90b2tl
bml6ZXIuZ2V0KCksIGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKICAgICAsIG1fZW5k
V2FzRGVsYXllZChmYWxzZSkKICAgICAsIG1fd3JpdGVOZXN0aW5nTGV2ZWwoMCkKIHsKICAgICBi
ZWdpbigpOwogfQogCi1IVE1MNURvY3VtZW50UGFyc2VyOjp+SFRNTDVEb2N1bWVudFBhcnNlcigp
CitIVE1MRG9jdW1lbnRQYXJzZXI6On5IVE1MRG9jdW1lbnRQYXJzZXIoKQogewogICAgIC8vIEZJ
WE1FOiBXZSdkIGxpa2UgdG8gQVNTRVJUIHRoYXQgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGlzIGNs
YXNzIGNsZWFycwogICAgIC8vIG91dCBhbnkgZGVsYXllZCBhY3Rpb25zLCBidXQgd2UgY2FuJ3Qg
YmVjYXVzZSB3ZSdyZSB1bmNlcmVtb25pb3VzbHkKQEAgLTk3LDIzICs5NywyMyBAQCBIVE1MNURv
Y3VtZW50UGFyc2VyOjp+SFRNTDVEb2N1bWVudFBhcnNlCiAgICAgLy8gdGhlbiB3ZSBjb3VsZCBB
U1NFUlQgc29tZSBpbnZhcmlhbnRzIGhlcmUuCiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNl
cjo6YmVnaW4oKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKIHsKICAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHJlc2V0IHRoZSB0b2tlbml6ZXI/CiB9CiAKLXZvaWQgSFRNTDVEb2N1
bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKQordm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnN0b3BQ
YXJzaW5nKCkKIHsKICAgICBEb2N1bWVudFBhcnNlcjo6c3RvcFBhcnNpbmcoKTsKICAgICBtX3Bh
cnNlclNjaGVkdWxlci5jbGVhcigpOyAvLyBEZWxldGluZyB0aGUgc2NoZWR1bGVyIHdpbGwgY2xl
YXIgYW55IHRpbWVycy4KIH0KIAotYm9vbCBIVE1MNURvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5n
RGF0YSgpIGNvbnN0Citib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0RhdGEoKSBj
b25zdAogewogICAgIHJldHVybiBpc1NjaGVkdWxlZEZvclJlc3VtZSgpIHx8IGluV3JpdGUoKTsK
IH0KIAotdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVySWZQb3NzaWJsZShT
eW5jaHJvbm91c01vZGUgbW9kZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5p
emVySWZQb3NzaWJsZShTeW5jaHJvbm91c01vZGUgbW9kZSkKIHsKICAgICBpZiAobV9wYXJzZXJT
dG9wcGVkIHx8IG1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKQogICAgICAgICByZXR1cm47
CkBAIC0xMjcsMjAgKzEyNywyMCBAQCB2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXJJCiAgICAgcHVtcFRva2VuaXplcihtb2RlKTsKIH0KIAotYm9vbCBIVE1MNURvY3VtZW50
UGFyc2VyOjppc1NjaGVkdWxlZEZvclJlc3VtZSgpIGNvbnN0Citib29sIEhUTUxEb2N1bWVudFBh
cnNlcjo6aXNTY2hlZHVsZWRGb3JSZXN1bWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3BhcnNl
clNjaGVkdWxlciAmJiBtX3BhcnNlclNjaGVkdWxlci0+aXNTY2hlZHVsZWRGb3JSZXN1bWUoKTsK
IH0KIAogLy8gVXNlZCBieSBIVE1MUGFyc2VyU2NoZWR1bGVyCi12b2lkIEhUTUw1RG9jdW1lbnRQ
YXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlcllpZWxkKCkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2Vy
OjpyZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgpCiB7CiAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJl
IGhlcmUgdW5sZXNzIHdlIGNhbiBwdW1wIGltbWVkaWF0ZWx5LiAgQ2FsbCBwdW1wVG9rZW5pemVy
KCkKICAgICAvLyBkaXJlY3RseSBzbyB0aGF0IEFTU0VSVFMgd2lsbCBmaXJlIGlmIHdlJ3JlIHdy
b25nLgogICAgIHB1bXBUb2tlbml6ZXIoQWxsb3dZaWVsZCk7CiB9CiAKLWJvb2wgSFRNTDVEb2N1
bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3RvcigpCitib29sIEhU
TUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3RvcigpCiB7
CiAgICAgQVNTRVJUKG1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKTsKIApAQCAtMTUyLDcg
KzE1Miw3IEBAIGJvb2wgSFRNTDVEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclAKICAgICBy
ZXR1cm4gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGUoc2NyaXB0RWxlbWVudC5yZWxlYXNlKCksIHNj
cmlwdFN0YXJ0TGluZSk7CiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6cHVtcFRva2Vu
aXplcihTeW5jaHJvbm91c01vZGUgbW9kZSkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1w
VG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQogewogICAgIEFTU0VSVCghbV9wYXJzZXJT
dG9wcGVkKTsKICAgICBBU1NFUlQoIW1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKTsKQEAg
LTE5NCw3ICsxOTQsNyBAQCB2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIo
CiAgICAgZGlkUHVtcExleGVyKCk7CiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6d2ls
bFB1bXBMZXhlcigpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d2lsbFB1bXBMZXhlcigpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICAvLyBGSVhNRTogbV9pbnB1dC5jdXJyZW50KCku
bGVuZ3RoKCkgaXMgb25seSBhY2N1cmF0ZSBpZiB3ZQpAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQg
SFRNTDVEb2N1bWVudFBhcnNlcjo6d2lsbFB1bXBMZXhlcigKICNlbmRpZgogfQogCi12b2lkIEhU
TUw1RG9jdW1lbnRQYXJzZXI6OmRpZFB1bXBMZXhlcigpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNl
cjo6ZGlkUHVtcExleGVyKCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgIGlmIChJbnNw
ZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gbV9kb2N1bWVudC0+aW5zcGVjdG9y
VGltZWxpbmVBZ2VudCgpKQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgSFRNTDVEb2N1bWVudFBh
cnNlcjo6ZGlkUHVtcExleGVyKCkKICNlbmRpZgogfQogCi12b2lkIEhUTUw1RG9jdW1lbnRQYXJz
ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBib29sIGlzRnJvbU5ldHdv
cmspCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UsIGJvb2wgaXNGcm9tTmV0d29yaykKIHsKICAgICBpZiAobV9wYXJzZXJTdG9wcGVk
KQogICAgICAgICByZXR1cm47CkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBIVE1MNURvY3VtZW50
UGFyc2VyOjp3cml0ZShjb25zdCBTZQogICAgIGVuZElmRGVsYXllZCgpOwogfQogCi12b2lkIEhU
TUw1RG9jdW1lbnRQYXJzZXI6OmVuZCgpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkK
IHsKICAgICBBU1NFUlQoIWlzU2NoZWR1bGVkRm9yUmVzdW1lKCkpOwogICAgIC8vIE5PVEU6IFRo
aXMgcHVtcCBzaG91bGQgb25seSBldmVyIGVtaXQgYnVmZmVyZWQgY2hhcmFjdGVyIHRva2VucywK
QEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OmVuZCgpCiAgICAg
bV90cmVlQ29uc3RydWN0b3ItPmZpbmlzaGVkKCk7CiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBh
cnNlcjo6YXR0ZW1wdFRvRW5kKCkKK3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphdHRlbXB0VG9F
bmQoKQogewogICAgIC8vIGZpbmlzaCgpIGluZGljYXRlcyB3ZSB3aWxsIG5vdCByZWNlaXZlIGFu
eSBtb3JlIGRhdGEuIElmIHdlIGFyZSB3YWl0aW5nIG9uCiAgICAgLy8gYW4gZXh0ZXJuYWwgc2Ny
aXB0IHRvIGxvYWQsIHdlIGNhbid0IGZpbmlzaCBwYXJzaW5nIHF1aXRlIHlldC4KQEAgLTI2MSw3
ICsyNjEsNyBAQCB2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OmF0dGVtcHRUb0VuZCgpCiAgICAg
ZW5kKCk7CiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZW5kSWZEZWxheWVkKCkKK3Zv
aWQgSFRNTERvY3VtZW50UGFyc2VyOjplbmRJZkRlbGF5ZWQoKQogewogICAgIC8vIFdlIGRvbid0
IGNoZWNrIGluV3JpdGUoKSBoZXJlIHNpbmNlIGluV3JpdGUoKSB3aWxsIGJlIHRydWUgaWYgdGhp
cyB3YXMKICAgICAvLyBjYWxsZWQgZnJvbSB3cml0ZSgpLgpAQCAtMjcyLDcgKzI3Miw3IEBAIHZv
aWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6ZW5kSWZEZWxheWVkKCkKICAgICBlbmQoKTsKIH0KIAot
dm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpmaW5pc2goKQordm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OmZpbmlzaCgpCiB7CiAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIGdldCBhbnkgbW9yZSBk
YXRhIG9mZiB0aGUgbmV0d29yaywgc28gd2UgY2xvc2UgdGhlCiAgICAgLy8gaW5wdXQgc3RyZWFt
IHRvIGluZGljYXRlIEVPRi4KQEAgLTI4MCw0NiArMjgwLDQ2IEBAIHZvaWQgSFRNTDVEb2N1bWVu
dFBhcnNlcjo6ZmluaXNoKCkKICAgICBhdHRlbXB0VG9FbmQoKTsKIH0KIAotYm9vbCBIVE1MNURv
Y3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQorYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6
OmZpbmlzaFdhc0NhbGxlZCgpCiB7CiAgICAgcmV0dXJuIG1faW5wdXQuaXNDbG9zZWQoKTsKIH0K
IAogLy8gVGhpcyBmdW5jdGlvbiBpcyB2aXJ0dWFsIGFuZCBqdXN0IGZvciB0aGUgRG9jdW1lbnRQ
YXJzZXIgaW50ZXJmYWNlLgotaW50IEhUTUw1RG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGluZ1Njcmlw
dCgpIGNvbnN0CitpbnQgSFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRpbmdTY3JpcHQoKSBjb25z
dAogewogICAgIHJldHVybiBpblNjcmlwdEV4ZWN1dGlvbigpOwogfQogCiAvLyBUaGlzIGZ1bmN0
aW9uIGlzIG5vbi12aXJ0dWFsIGFuZCB1c2VkIHRocm91Z2hvdXQgdGhlIGltcGxlbWVudGF0aW9u
LgotYm9vbCBIVE1MNURvY3VtZW50UGFyc2VyOjppblNjcmlwdEV4ZWN1dGlvbigpIGNvbnN0Citi
b29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5TY3JpcHRFeGVjdXRpb24oKSBjb25zdAogewogICAg
IGlmICghbV9zY3JpcHRSdW5uZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
bV9zY3JpcHRSdW5uZXItPmluU2NyaXB0RXhlY3V0aW9uKCk7CiB9CiAKLWludCBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpsaW5lTnVtYmVyKCkgY29uc3QKK2ludCBIVE1MRG9jdW1lbnRQYXJzZXI6Omxp
bmVOdW1iZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3Rva2VuaXplci0+bGluZU51bWJlcigp
OwogfQogCi1pbnQgSFRNTDVEb2N1bWVudFBhcnNlcjo6Y29sdW1uTnVtYmVyKCkgY29uc3QKK2lu
dCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsKIH0KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3RvciogSFRNTDVEb2N1bWVudFBhcnNlcjo6aHRtbFRyZWVDb25zdHJ1Y3RvcigpIGNvbnN0CitM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBIVE1MRG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVlQ29u
c3RydWN0b3IoKSBjb25zdAogewogICAgIHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rvci0+bGVnYWN5
VHJlZUNvbnN0cnVjdG9yKCk7CiB9CiAKLWJvb2wgSFRNTDVEb2N1bWVudFBhcnNlcjo6aXNXYWl0
aW5nRm9yU2NyaXB0cygpIGNvbnN0Citib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNXYWl0aW5n
Rm9yU2NyaXB0cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHJlZUNvbnN0cnVjdG9yLT5pc1Bh
dXNlZCgpOwogfQogCi12b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRl
clNjcmlwdEV4ZWN1dGlvbigpCit2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2lu
Z0FmdGVyU2NyaXB0RXhlY3V0aW9uKCkKIHsKICAgICBBU1NFUlQoIWluU2NyaXB0RXhlY3V0aW9u
KCkpOwogICAgIEFTU0VSVCghbV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOwpAQCAtMzMw
LDI0ICszMzAsMjQgQEAgdm9pZCBIVE1MNURvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQQog
ICAgIGVuZElmRGVsYXllZCgpOwogfQogCi12b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6OndhdGNo
Rm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQordm9pZCBIVE1MRG9jdW1lbnRQ
YXJzZXI6OndhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSogY2FjaGVkU2NyaXB0KQogewogICAg
IGNhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KHRoaXMpOwogfQogCi12b2lkIEhUTUw1RG9jdW1lbnRQ
YXJzZXI6OnN0b3BXYXRjaGluZ0ZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFNjcmlwdCkK
K3ZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpzdG9wV2F0Y2hpbmdGb3JMb2FkKENhY2hlZFJlc291
cmNlKiBjYWNoZWRTY3JpcHQpCiB7CiAgICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhp
cyk7CiB9CiAKLWJvb2wgSFRNTDVEb2N1bWVudFBhcnNlcjo6c2hvdWxkTG9hZEV4dGVybmFsU2Ny
aXB0RnJvbVNyYyhjb25zdCBBdG9taWNTdHJpbmcmIHNyY1ZhbHVlKQorYm9vbCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnNob3VsZExvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoY29uc3QgQXRvbWljU3Ry
aW5nJiBzcmNWYWx1ZSkKIHsKICAgICBpZiAoIW1fWFNTQXVkaXRvcikKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgcmV0dXJuIG1fWFNTQXVkaXRvci0+Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJv
bVNyYyhzcmNWYWx1ZSk7CiB9CiAKLXZvaWQgSFRNTDVEb2N1bWVudFBhcnNlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQordm9pZCBIVE1MRG9jdW1lbnRQ
YXJzZXI6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsK
ICAgICBBU1NFUlQobV9zY3JpcHRSdW5uZXIpOwogICAgIC8vIElnbm9yZSBjYWxscyB1bmxlc3Mg
d2UgaGF2ZSBhIHNjcmlwdCBibG9ja2luZyB0aGUgcGFyc2VyIHdhaXRpbmcKQEAgLTM2OSw3ICsz
NjksNyBAQCB2b2lkIEhUTUw1RG9jdW1lbnRQYXJzZXI6Om5vdGlmeUZpbmlzaGVkCiAgICAgICAg
IHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQogCi12b2lkIEhUTUw1RG9j
dW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkKK3ZvaWQg
SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygp
CiB7CiAgICAgLy8gRG9jdW1lbnQgb25seSBjYWxscyB0aGlzIHdoZW4gdGhlIERvY3VtZW50IG93
bnMgdGhlIERvY3VtZW50UGFyc2VyCiAgICAgLy8gc28gdGhpcyB3aWxsIG5vdCBiZSBjYWxsZWQg
aW4gdGhlIERvY3VtZW50RnJhZ21lbnQgY2FzZS4KQEAgLTM5MCw3ICszOTAsNyBAQCB2b2lkIEhU
TUw1RG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzCiAgICAgICAgIHJlc3VtZVBhcnNpbmdB
ZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQogCi1TY3JpcHRDb250cm9sbGVyKiBIVE1MNURvY3Vt
ZW50UGFyc2VyOjpzY3JpcHQoKSBjb25zdAorU2NyaXB0Q29udHJvbGxlciogSFRNTERvY3VtZW50
UGFyc2VyOjpzY3JpcHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RvY3VtZW50LT5mcmFtZSgp
ID8gbV9kb2N1bWVudC0+ZnJhbWUoKS0+c2NyaXB0KCkgOiAwOwogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnRQYXJzZXIuaAkocmV2aXNpb24gNjE2NzMpCShmcm9tIFdlYkNvcmUvaHRtbC9IVE1M
NURvY3VtZW50UGFyc2VyLmg6NjE2NzMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSFRNTDVEb2N1bWVudFBhcnNl
cl9oCisjZGVmaW5lIEhUTUw1RG9jdW1lbnRQYXJzZXJfaAorCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIK
KyNpbmNsdWRlICJIVE1MU2NyaXB0UnVubmVySG9zdC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbi5o
IgorI2luY2x1ZGUgIkhUTUxJbnB1dFN0cmVhbS5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmlu
Zy5oIgorI2luY2x1ZGUgIkRvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgSFRNTERvY3VtZW50OworY2xh
c3MgSFRNTFBhcnNlclNjaGVkdWxlcjsKK2NsYXNzIEhUTUxUb2tlbml6ZXI7CitjbGFzcyBIVE1M
U2NyaXB0UnVubmVyOworY2xhc3MgSFRNTDVUcmVlQnVpbGRlcjsKK2NsYXNzIEhUTUw1UHJlbG9h
ZFNjYW5uZXI7CitjbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOworY2xhc3MgU2NyaXB0
Q29udHJvbGxlcjsKK2NsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CisKK2NsYXNzIEhUTUw1RG9jdW1l
bnRQYXJzZXIgOiAgcHVibGljIERvY3VtZW50UGFyc2VyLCBIVE1MU2NyaXB0UnVubmVySG9zdCwg
Q2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIC8vIEZJWE1FOiBUaGVzZSBjb25z
dHJ1Y3RvcnMgc2hvdWxkIGJlIG1hZGUgcHJpdmF0ZSBhbmQgcmVwbGFjZWQgYnkgY3JlYXRlKCkg
bWV0aG9kcy4KKyAgICBIVE1MNURvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVw
b3J0RXJyb3JzKTsKKyAgICBIVE1MNURvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqLCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIHZpcnR1YWwgfkhUTUw1RG9jdW1lbnRQ
YXJzZXIoKTsKKworICAgIC8vIERvY3VtZW50UGFyc2VyCisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
KCk7CisgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wg
aXNGcm9tTmV0d29yayk7CisgICAgdmlydHVhbCB2b2lkIGVuZCgpOworICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2goKTsKKyAgICB2aXJ0dWFsIGJvb2wgZmluaXNoV2FzQ2FsbGVkKCk7CisgICAgdmly
dHVhbCBpbnQgZXhlY3V0aW5nU2NyaXB0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHByb2Nl
c3NpbmdEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN0b3BQYXJzaW5nKCk7CisgICAg
dmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKKyAgICB2aXJ0dWFsIGlu
dCBsaW5lTnVtYmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29u
c3Q7CisgICAgLy8gRklYTUU6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgYWNjZXNzZXMgdGhlIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgdmlhIHRoaXMgbWV0aG9kLgorICAgIC8vIFJlbW92ZSB0
aGlzIHdoZW4gdGhlIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgaXMgbm8gbG9uZ2VyIHVzZWQu
CisgICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBodG1sVHJlZUNvbnN0cnVj
dG9yKCkgY29uc3Q7CisKKyAgICAvLyBIVE1MU2NyaXB0UnVubmVySG9zdAorICAgIHZpcnR1YWwg
dm9pZCB3YXRjaEZvckxvYWQoQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cFdhdGNoaW5nRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRMb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHZp
cnR1YWwgSFRNTElucHV0U3RyZWFtJiBpbnB1dFN0cmVhbSgpIHsgcmV0dXJuIG1faW5wdXQ7IH0K
KworICAgIC8vIENhY2hlZFJlc291cmNlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKENhY2hlZFJlc291cmNlKik7CisKKyAgICAvLyBFeHBvc2VkIGZvciBIVE1MUGFyc2Vy
U2NoZWR1bGVyCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1
bWVudDsgfQorICAgIHZvaWQgcmVzdW1lUGFyc2luZ0FmdGVyWWllbGQoKTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHdpbGxQdW1wTGV4ZXIoKTsKKyAgICB2b2lkIGRpZFB1bXBMZXhlcigpOworCisg
ICAgZW51bSBTeW5jaHJvbm91c01vZGUgeworICAgICAgICBBbGxvd1lpZWxkLAorICAgICAgICBG
b3JjZVN5bmNocm9ub3VzLAorICAgIH07CisgICAgdm9pZCBwdW1wVG9rZW5pemVyKFN5bmNocm9u
b3VzTW9kZSk7CisgICAgdm9pZCBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01v
ZGUpOworCisgICAgYm9vbCBydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUNvbnN0cnVjdG9yKCk7Cisg
ICAgdm9pZCByZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKTsKKworICAgIHZvaWQg
YXR0ZW1wdFRvRW5kKCk7CisgICAgdm9pZCBlbmRJZkRlbGF5ZWQoKTsKKworICAgIGJvb2wgaXNT
Y2hlZHVsZWRGb3JSZXN1bWUoKSBjb25zdDsKKyAgICBib29sIGluU2NyaXB0RXhlY3V0aW9uKCkg
Y29uc3Q7CisgICAgYm9vbCBpbldyaXRlKCkgY29uc3QgeyByZXR1cm4gbV93cml0ZU5lc3RpbmdM
ZXZlbCA+IDA7IH0KKworICAgIFNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpIGNvbnN0OworCisg
ICAgSFRNTElucHV0U3RyZWFtIG1faW5wdXQ7CisKKyAgICAvLyBXZSBob2xkIG1fdG9rZW4gaGVy
ZSBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KKyAgICBIVE1MVG9rZW4g
bV90b2tlbjsKKworICAgIC8vIFdlIG11c3Qgc3VwcG9ydCBwYXJzaW5nIGludG8gYSBEb2N1bWVu
dCogYW5kIG5vdCBqdXN0IEhUTUxEb2N1bWVudCoKKyAgICAvLyB0byBzdXBwb3J0IERvY3VtZW50
RnJhZ21lbnQgKHdoaWNoIGhhcyBhIERvY3VtZW50KikuCisgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7CisgICAgT3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOworICAgIE93blB0cjxI
VE1MU2NyaXB0UnVubmVyPiBtX3NjcmlwdFJ1bm5lcjsKKyAgICBPd25QdHI8SFRNTDVUcmVlQnVp
bGRlcj4gbV90cmVlQ29uc3RydWN0b3I7CisgICAgT3duUHRyPEhUTUw1UHJlbG9hZFNjYW5uZXI+
IG1fcHJlbG9hZFNjYW5uZXI7CisgICAgT3duUHRyPEhUTUxQYXJzZXJTY2hlZHVsZXI+IG1fcGFy
c2VyU2NoZWR1bGVyOworCisgICAgYm9vbCBtX2VuZFdhc0RlbGF5ZWQ7CisgICAgaW50IG1fd3Jp
dGVOZXN0aW5nTGV2ZWw7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnRQYXJzZXIuaAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE4ICs0NCwxOCBAQCBjbGFzcyBIVE1MRG9j
dW1lbnQ7CiBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRva2VuaXplcjsK
IGNsYXNzIEhUTUxTY3JpcHRSdW5uZXI7Ci1jbGFzcyBIVE1MNVRyZWVCdWlsZGVyOworY2xhc3Mg
SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgSFRNTDVQcmVsb2FkU2Nhbm5lcjsKIGNsYXNzIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogY2xhc3MgU2Ny
aXB0U291cmNlQ29kZTsKIAotY2xhc3MgSFRNTDVEb2N1bWVudFBhcnNlciA6ICBwdWJsaWMgRG9j
dW1lbnRQYXJzZXIsIEhUTUxTY3JpcHRSdW5uZXJIb3N0LCBDYWNoZWRSZXNvdXJjZUNsaWVudCB7
CitjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXIgOiAgcHVibGljIERvY3VtZW50UGFyc2VyLCBIVE1M
U2NyaXB0UnVubmVySG9zdCwgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgogICAgIC8v
IEZJWE1FOiBUaGVzZSBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIG1hZGUgcHJpdmF0ZSBhbmQgcmVw
bGFjZWQgYnkgY3JlYXRlKCkgbWV0aG9kcy4KLSAgICBIVE1MNURvY3VtZW50UGFyc2VyKEhUTUxE
b2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKLSAgICBIVE1MNURvY3VtZW50UGFyc2VyKERv
Y3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIHZpcnR1
YWwgfkhUTUw1RG9jdW1lbnRQYXJzZXIoKTsKKyAgICBIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERv
Y3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOworICAgIEhUTUxEb2N1bWVudFBhcnNlcihEb2N1
bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICB2aXJ0dWFs
IH5IVE1MRG9jdW1lbnRQYXJzZXIoKTsKIAogICAgIC8vIERvY3VtZW50UGFyc2VyCiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luKCk7CkBAIC0xMjAsNyArMTIwLDcgQEAgcHJpdmF0ZToKICAgICBEb2N1
bWVudCogbV9kb2N1bWVudDsKICAgICBPd25QdHI8SFRNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7
CiAgICAgT3duUHRyPEhUTUxTY3JpcHRSdW5uZXI+IG1fc2NyaXB0UnVubmVyOwotICAgIE93blB0
cjxIVE1MNVRyZWVCdWlsZGVyPiBtX3RyZWVDb25zdHJ1Y3RvcjsKKyAgICBPd25QdHI8SFRNTFRy
ZWVCdWlsZGVyPiBtX3RyZWVDb25zdHJ1Y3RvcjsKICAgICBPd25QdHI8SFRNTDVQcmVsb2FkU2Nh
bm5lcj4gbV9wcmVsb2FkU2Nhbm5lcjsKICAgICBPd25QdHI8SFRNTFBhcnNlclNjaGVkdWxlcj4g
bV9wYXJzZXJTY2hlZHVsZXI7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyU2NoZWR1
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclNjaGVkdWxlci5j
cHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXJTY2hlZHVsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNl
clNjaGVkdWxlci5oIgogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiIC8vIE9ubHkgZm9yIGlzTGF5
b3V0VGltZXJBY3RpdmUKLSNpbmNsdWRlICJIVE1MNURvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVk
ZSAiSFRNTERvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAogLy8gZGVm
YXVsdFBhcnNlckNodW5rU2l6ZSBpcyB1c2VkIHRvIGRlZmluZSBob3cgbWFueSB0b2tlbnMgdGhl
IHBhcnNlciB3aWxsCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VyQ2h1bmtTaXpl
KFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIGRlZmF1bHRQYXJzZXJDaHVua1NpemU7CiB9CiAKLUhU
TUxQYXJzZXJTY2hlZHVsZXI6OkhUTUxQYXJzZXJTY2hlZHVsZXIoSFRNTDVEb2N1bWVudFBhcnNl
ciogcGFyc2VyKQorSFRNTFBhcnNlclNjaGVkdWxlcjo6SFRNTFBhcnNlclNjaGVkdWxlcihIVE1M
RG9jdW1lbnRQYXJzZXIqIHBhcnNlcikKICAgICA6IG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1f
cGFyc2VyVGltZUxpbWl0KHBhcnNlclRpbWVMaW1pdChtX3BhcnNlci0+ZG9jdW1lbnQoKS0+cGFn
ZSgpKSkKICAgICAsIG1fcGFyc2VyQ2h1bmtTaXplKHBhcnNlckNodW5rU2l6ZShtX3BhcnNlci0+
ZG9jdW1lbnQoKS0+cGFnZSgpKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyU2NoZWR1
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXJTY2hlZHVsZXIuaAko
cmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclNjaGVkdWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBIVE1MNURvY3VtZW50UGFyc2VyOworY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyOwog
CiBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyIDogIHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJs
aWM6Ci0gICAgSFRNTFBhcnNlclNjaGVkdWxlcihIVE1MNURvY3VtZW50UGFyc2VyKik7CisgICAg
SFRNTFBhcnNlclNjaGVkdWxlcihIVE1MRG9jdW1lbnRQYXJzZXIqKTsKICAgICB+SFRNTFBhcnNl
clNjaGVkdWxlcigpOwogCiAgICAgc3RydWN0IFB1bXBTZXNzaW9uIHsKQEAgLTcyLDcgKzcyLDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNvbnRpbnVlTmV4dENodW5rVGltZXJGaXJl
ZChUaW1lcjxIVE1MUGFyc2VyU2NoZWR1bGVyPiopOwogCi0gICAgSFRNTDVEb2N1bWVudFBhcnNl
ciogbV9wYXJzZXI7CisgICAgSFRNTERvY3VtZW50UGFyc2VyKiBtX3BhcnNlcjsKIAogICAgIGRv
dWJsZSBtX3BhcnNlclRpbWVMaW1pdDsKICAgICBpbnQgbV9wYXJzZXJDaHVua1NpemU7CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gNjE2NzMpCShmcm9tIFdlYkNvcmUv
aHRtbC9IVE1MNVRyZWVCdWlsZGVyLmNwcDo2MTY3MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSFRNTDVUcmVlQnVpbGRlci5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW4uaCIKKyNpbmNsdWRl
ICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250
cm9sbGVyLmgiCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworc3RhdGljIGNvbnN0IGludCB1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlID0gLTE7CisKK0hUTUw1VHJlZUJ1aWxkZXI6OkhU
TUw1VHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisg
ICAgLCBtX3JlcG9ydEVycm9ycyhyZXBvcnRFcnJvcnMpCisgICAgLCBtX2lzUGF1c2VkKGZhbHNl
KQorICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRpYWwpCisgICAgLCBtX3Rva2VuaXplcih0b2tl
bml6ZXIpCisgICAgLCBtX2xlZ2FjeVRyZWVDb25zdHJ1Y3RvcihuZXcgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcihkb2N1bWVudCwgcmVwb3J0RXJyb3JzKSkKKyAgICAsIG1fbGFzdFNjcmlwdEVs
ZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fc2Ny
aXB0VG9Qcm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpCisgICAg
LCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQp
Cit7Cit9CisKKy8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBncm91cGVkIGlu
dG8gc2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bworLy8gbWluaW1pemUgY29kZSBkdXBsaWNh
dGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KK0hUTUw1VHJlZUJ1aWxkZXI6OkhUTUw1
VHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBEb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24p
CisgICAgOiBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9yZXBvcnRF
cnJvcnMoZmFsc2UpIC8vIEZJWE1FOiBXaHkgbm90IHJlcG9ydCBlcnJvcnMgaW4gZnJhZ21lbnRz
PworICAgICwgbV9pc1BhdXNlZChmYWxzZSkKKyAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFs
KQorICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQorICAgICwgbV9sZWdhY3lUcmVlQ29uc3Ry
dWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoZnJhZ21lbnQsIHNjcmlwdGluZ1Bl
cm1pc3Npb24pKQorICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxp
emVkTGluZU51bWJlclZhbHVlKQorICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5p
bml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKKyAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCit7Cit9CisKK0hUTUw1VHJlZUJ1aWxkZXI6On5I
VE1MNVRyZWVCdWlsZGVyKCkKK3sKK30KKworc3RhdGljIHZvaWQgY29udmVydFRvT2xkU3R5bGUo
SFRNTFRva2VuJiB0b2tlbiwgVG9rZW4mIG9sZFN0eWxlVG9rZW4pCit7CisgICAgc3dpdGNoICh0
b2tlbi50eXBlKCkpIHsKKyAgICBjYXNlIEhUTUxUb2tlbjo6VW5pbml0aWFsaXplZDoKKyAgICBj
YXNlIEhUTUxUb2tlbjo6RE9DVFlQRToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSFRNTFRva2VuOjpFbmRPZkZpbGU6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEhUTUxUb2tlbjo6U3RhcnRUYWc6CisgICAgY2FzZSBIVE1MVG9rZW46
OkVuZFRhZzogeworICAgICAgICBvbGRTdHlsZVRva2VuLmJlZ2luVGFnID0gKHRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKKyAgICAgICAgb2xkU3R5bGVUb2tlbi5zZWxmQ2xv
c2luZ1RhZyA9IHRva2VuLnNlbGZDbG9zaW5nKCk7CisgICAgICAgIG9sZFN0eWxlVG9rZW4udGFn
TmFtZSA9IEF0b21pY1N0cmluZyh0b2tlbi5uYW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6
ZSgpKTsKKyAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVz
ID0gdG9rZW4uYXR0cmlidXRlcygpOworICAgICAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRl
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsKKyAgICAgICAg
ICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYg
KCFpdGVyLT5tX25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUo
aXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3ZhbHVlLnNpemUo
KSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gbWFwcGVkQXR0cmlidXRlID0g
QXR0cmlidXRlOjpjcmVhdGVNYXBwZWQobmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlm
ICghb2xkU3R5bGVUb2tlbi5hdHRycykKKyAgICAgICAgICAgICAgICAgICAgb2xkU3R5bGVUb2tl
bi5hdHRycyA9IE5hbWVkTm9kZU1hcDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgb2xkU3R5
bGVUb2tlbi5hdHRycy0+aW5zZXJ0QXR0cmlidXRlKG1hcHBlZEF0dHJpYnV0ZS5yZWxlYXNlKCks
IGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBIVE1MVG9rZW46OkNvbW1lbnQ6CisgICAgICAgIG9sZFN0eWxlVG9rZW4udGFn
TmFtZSA9IGNvbW1lbnRBdG9tOworICAgICAgICBvbGRTdHlsZVRva2VuLnRleHQgPSBTdHJpbmdJ
bXBsOjpjcmVhdGUodG9rZW4uY29tbWVudCgpLmRhdGEoKSwgdG9rZW4uY29tbWVudCgpLnNpemUo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSFRNTFRva2VuOjpDaGFyYWN0ZXI6CisgICAg
ICAgIG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9IHRleHRBdG9tOworICAgICAgICBvbGRTdHlsZVRv
a2VuLnRleHQgPSBTdHJpbmdJbXBsOjpjcmVhdGUodG9rZW4uY2hhcmFjdGVycygpLmRhdGEoKSwg
dG9rZW4uY2hhcmFjdGVycygpLnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBIVE1MNVRyZWVCdWlsZGVyOjpoYW5kbGVTY3JpcHRTdGFydFRhZygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsgLy8gVGhlIEhUTUwgZnJnbWVudCBjYXNlPworICAgIG1fdG9rZW5pemVy
LT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpTY3JpcHREYXRhU3RhdGUpOworICAgIG5vdEltcGxl
bWVudGVkKCk7IC8vIFNhdmUgaW5zZXJ0aW9uIG1vZGUuCit9CisKK3ZvaWQgSFRNTDVUcmVlQnVp
bGRlcjo6aGFuZGxlU2NyaXB0RW5kVGFnKEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQsIGludCBzY3Jp
cHRTdGFydExpbmUpCit7CisgICAgQVNTRVJUKCFtX3NjcmlwdFRvUHJvY2Vzcyk7IC8vIENhbGxl
ciBuZXZlciBjYWxsZWQgdGFrZVNjcmlwdFRvUHJvY2VzcyEKKyAgICBBU1NFUlQobV9zY3JpcHRU
b1Byb2Nlc3NTdGFydExpbmUgPT0gdW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSk7IC8vIENh
bGxlciBuZXZlciBjYWxsZWQgdGFrZVNjcmlwdFRvUHJvY2VzcyEKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOyAvLyBTYXZlIGluc2VydGlvbiBtb2RlIGFuZCBpbnNlcnRpb24gcG9pbnQ/CisKKyAgICAv
LyBQYXVzZSBvdXJzZWx2ZXMgc28gdGhhdCBwYXJzaW5nIHN0b3BzIHVudGlsIHRoZSBzY3JpcHQg
Y2FuIGJlIHByb2Nlc3NlZCBieSB0aGUgY2FsbGVyLgorICAgIG1faXNQYXVzZWQgPSB0cnVlOwor
ICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gc2NyaXB0RWxlbWVudDsKKyAgICAvLyBMZXhlciBsaW5l
IG51bWJlcnMgYXJlIDAtYmFzZWQsIFNjcmlwdFNvdXJjZUNvZGUgZXhwZWN0cyAxLWJhc2VkIGxp
bmVzLAorICAgIC8vIHNvIHdlIGNvbnZlcnQgaGVyZSBiZWZvcmUgcGFzc2luZyB0aGUgbGluZSBu
dW1iZXIgb2ZmIHRvIEhUTUxTY3JpcHRSdW5uZXIuCisgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFy
dExpbmUgPSBzY3JpcHRTdGFydExpbmUgKyAxOworfQorCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhU
TUw1VHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoaW50JiBzY3JpcHRTdGFydExpbmUp
Cit7CisgICAgLy8gVW5wYXVzZSBvdXJzZWx2ZXMsIGNhbGxlcnMgbWF5IHBhdXNlIHVzIGFnYWlu
IHdoZW4gcHJvY2Vzc2luZyB0aGUgc2NyaXB0LgorICAgIC8vIFRoZSBIVE1MNSBzcGVjIGlzIHdy
aXR0ZW4gYXMgdGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluc2lkZSB0aGUgdHJlZQorICAg
IC8vIGJ1aWxkZXIuICBXZSBwYXVzZSB0aGUgcGFyc2VyIHRvIGV4aXQgdGhlIHRyZWUgYnVpbGRl
ciwgYW5kIHRoZW4gcmVzdW1lCisgICAgLy8gYmVmb3JlIHJ1bm5pbmcgc2NyaXB0cy4KKyAgICBt
X2lzUGF1c2VkID0gZmFsc2U7CisgICAgc2NyaXB0U3RhcnRMaW5lID0gbV9zY3JpcHRUb1Byb2Nl
c3NTdGFydExpbmU7CisgICAgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUgPSB1bmluaXRpYWxp
emVkTGluZU51bWJlclZhbHVlOworICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNl
KCk7Cit9CisKK0hUTUxUb2tlbml6ZXI6OlN0YXRlIEhUTUw1VHJlZUJ1aWxkZXI6OmFkanVzdGVk
TGV4ZXJTdGF0ZShIVE1MVG9rZW5pemVyOjpTdGF0ZSBzdGF0ZSwgY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKHRhZ05hbWUgPT0gdGV4dGFyZWFU
YWcgfHwgdGFnTmFtZSA9PSB0aXRsZVRhZykKKyAgICAgICAgcmV0dXJuIEhUTUxUb2tlbml6ZXI6
OlJDREFUQVN0YXRlOworCisgICAgaWYgKHRhZ05hbWUgPT0gc3R5bGVUYWcgfHwgdGFnTmFtZSA9
PSBpZnJhbWVUYWcgfHwgdGFnTmFtZSA9PSB4bXBUYWcgfHwgdGFnTmFtZSA9PSBub2VtYmVkVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gbm9mcmFtZXNUYWcgfHwgKHRhZ05hbWUgPT0gbm9zY3Jp
cHRUYWcgJiYgaXNTY3JpcHRpbmdGbGFnRW5hYmxlZChmcmFtZSkpKQorICAgICAgICByZXR1cm4g
SFRNTFRva2VuaXplcjo6UkFXVEVYVFN0YXRlOworCisgICAgaWYgKHRhZ05hbWUgPT0gcGxhaW50
ZXh0VGFnKQorICAgICAgICByZXR1cm4gSFRNTFRva2VuaXplcjo6UExBSU5URVhUU3RhdGU7CisK
KyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVlQnVpbGRl
cjo6cGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSkgeworICAgICAgICBEb2N0eXBlVG9r
ZW4gZG9jdHlwZVRva2VuOworICAgICAgICBkb2N0eXBlVG9rZW4ubV9uYW1lLmFwcGVuZCh0b2tl
bi5uYW1lKCkuZGF0YSgpLCB0b2tlbi5uYW1lKCkuc2l6ZSgpKTsKKyAgICAgICAgZG9jdHlwZVRv
a2VuLm1fcHVibGljSUQgPSB0b2tlbi5wdWJsaWNJZGVudGlmaWVyKCk7CisgICAgICAgIGRvY3R5
cGVUb2tlbi5tX3N5c3RlbUlEID0gdG9rZW4uc3lzdGVtSWRlbnRpZmllcigpOworICAgICAgICBk
b2N0eXBlVG9rZW4ubV9mb3JjZVF1aXJrcyA9IHRva2VuLmZvcmNlUXVpcmtzKCk7CisKKyAgICAg
ICAgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3ItPnBhcnNlRG9jdHlwZVRva2VuKCZkb2N0eXBlVG9r
ZW4pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBGb3Igbm93LCB3ZSB0cmFu
c2xhdGUgaW50byBhbiBvbGQtc3R5bGUgdG9rZW4gZm9yIHRlc3RpbmcuCisgICAgVG9rZW4gb2xk
U3R5bGVUb2tlbjsKKyAgICBjb252ZXJ0VG9PbGRTdHlsZSh0b2tlbiwgb2xkU3R5bGVUb2tlbik7
CisKKyAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yLT5w
YXJzZVRva2VuKCZvbGRTdHlsZVRva2VuKTsKKyAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlbjo6U3RhcnRUYWcpIHsKKyAgICAgICAgLy8gVGhpcyB3b3JrIGlzIHN1cHBvc2VkIHRvIGJl
IGRvbmUgYnkgdGhlIHBhcnNlciwgYnV0CisgICAgICAgIC8vIHdoZW4gdXNpbmcgdGhlIG9sZCBw
YXJzZXIgZm9yIHdlIGhhdmUgdG8gZG8gdGhpcyBtYW51YWxseS4KKyAgICAgICAgaWYgKG9sZFN0
eWxlVG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcpIHsKKyAgICAgICAgICAgIGhhbmRsZVNjcmlw
dFN0YXJ0VGFnKCk7CisgICAgICAgICAgICBtX2xhc3RTY3JpcHRFbGVtZW50ID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxFbGVtZW50PihyZXN1bHQpOworICAgICAgICAgICAgbV9sYXN0U2NyaXB0RWxl
bWVudFN0YXJ0TGluZSA9IG1fdG9rZW5pemVyLT5saW5lTnVtYmVyKCk7CisgICAgICAgIH0gZWxz
ZSBpZiAob2xkU3R5bGVUb2tlbi50YWdOYW1lID09IHByZVRhZyB8fCBvbGRTdHlsZVRva2VuLnRh
Z05hbWUgPT0gbGlzdGluZ1RhZykKKyAgICAgICAgICAgIG1fdG9rZW5pemVyLT5za2lwTGVhZGlu
Z05ld0xpbmVGb3JMaXN0aW5nKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fdG9rZW5p
emVyLT5zZXRTdGF0ZShhZGp1c3RlZExleGVyU3RhdGUobV90b2tlbml6ZXItPnN0YXRlKCksIG9s
ZFN0eWxlVG9rZW4udGFnTmFtZSwgbV9kb2N1bWVudC0+ZnJhbWUoKSkpOworICAgIH0gZWxzZSBp
ZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKSB7CisgICAgICAgIGlmIChvbGRT
dHlsZVRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFnKSB7CisgICAgICAgICAgICBpZiAobV9sYXN0
U2NyaXB0RWxlbWVudCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChtX2xhc3RTY3JpcHRFbGVt
ZW50U3RhcnRMaW5lICE9IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmIChtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlw
dGluZ05vdEFsbG93ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSBob3JyaWJsZSBoYWNrIGZvciBwbGF0Zm9ybS9QYXN0ZWJvYXJkLgorICAgICAgICAgICAgICAg
ICAgICAvLyBDbGVhciB0aGUgPHNjcmlwdD4gdGFnIHdoZW4gdXNpbmcgdGhlIFBhcnNlciB0byBj
cmVhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYSBEb2N1bWVudEZyYWdtZW50IGZvciBwYXN0
aW5nIHNvIHRoYXQgamF2YXNjcmlwdCBjb250ZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGRv
ZXMgbm90IHNob3cgdXAgaW4gcGFzdGVkIEhUTUwuCisgICAgICAgICAgICAgICAgICAgIG1fbGFz
dFNjcmlwdEVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpbnNlcnRpb25Nb2RlKCkgIT0gQWZ0ZXJGcmFtZXNldCkKKyAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlU2NyaXB0RW5kVGFnKG1fbGFzdFNjcmlwdEVsZW1lbnQuZ2V0KCksIG1fbGFzdFNj
cmlwdEVsZW1lbnRTdGFydExpbmUpOworICAgICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1l
bnQgPSAwOworICAgICAgICAgICAgICAgIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUgPSB1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKG9sZFN0eWxlVG9rZW4udGFnTmFtZSA9PSBmcmFtZXNldFRhZykKKyAgICAgICAgICAg
IHNldEluc2VydGlvbk1vZGUoQWZ0ZXJGcmFtZXNldCk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPE5vZGU+IEhUTUw1VHJlZUJ1aWxkZXI6OmNv
bnN0cnVjdFRyZWVGcm9tVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK3sKKyAgICAvLyBNYWtlIE1T
VkMgaWdub3JlIG91ciB1bnJlYWNoYWJsZSBjb2RlIGZvciBub3cuCisgICAgaWYgKHRydWUpCisg
ICAgICAgIHJldHVybiBwYXNzVG9rZW5Ub0xlZ2FjeVBhcnNlcih0b2tlbik7CisKKyAgICAvLyBI
VE1MNSBleHBlY3RzIHRoZSB0b2tlbml6ZXIgdG8gY2FsbCB0aGUgcGFyc2VyIGV2ZXJ5IHRpbWUg
YSBjaGFyYWN0ZXIgaXMKKyAgICAvLyBlbWl0dGVkLiAgV2UgaW5zdGVhZCBjb2xsZWN0IGNoYXJh
Y3RlcnMgYW5kIGNhbGwgdGhlIHBhcnNlciB3aXRoIGEgYmF0Y2guCisgICAgLy8gSW4gb3JkZXIg
dG8gbWFrZSBvdXIgZmlyc3QtcGFzcyBwYXJzZXIgY29kZSBzaW1wbGUsIHByb2Nlc3NUb2tlbiBt
YXRjaGVzCisgICAgLy8gdGhlIHNwZWMgaW4gb25seSBoYW5kbGluZyBvbmUgY2hhcmFjdGVyIGF0
IGEgdGltZS4KKyAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6Q2hhcmFjdGVyKSB7
CisgICAgICAgIEhUTUxUb2tlbjo6RGF0YVZlY3RvciBjaGFyYWN0ZXJzID0gdG9rZW4uY2hhcmFj
dGVycygpOworICAgICAgICBIVE1MVG9rZW46OkRhdGFWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ciA9IGNoYXJhY3RlcnMuYmVnaW4oKTsKKyAgICAgICAgZm9yICg7aXRyOyArK2l0cikKKyAgICAg
ICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbiwgKml0cik7CisgICAgICAgIHJldHVybiAwOyAvLyBG
SVhNRTogU2hvdWxkIHdlIGJlIHJldHVybmluZyB0aGUgVGV4dCBub2RlPworICAgIH0KKyAgICBy
ZXR1cm4gcHJvY2Vzc1Rva2VuKHRva2VuKTsKK30KKworUGFzc1JlZlB0cjxOb2RlPiBIVE1MNVRy
ZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oSFRNTFRva2VuJiB0b2tlbiwgVUNoYXIgY3VycmVudENo
YXJhY3RlcikKK3sKKyAgICBVTlVTRURfUEFSQU0odG9rZW4pOworICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50Q2hhcmFjdGVyKTsKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBjb21pbmcgaW4gdGhlIG5l
eHQgcGF0Y2guCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSFRNTDVUcmVlQnVpbGRlcjo6Zmlu
aXNoZWQoKQoreworICAgIC8vIFdlIHNob3VsZCBjYWxsIG1fZG9jdW1lbnQtPmZpbmlzaGVkUGFy
c2luZygpIGhlcmUsIGV4Y2VwdAorICAgIC8vIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yLT5maW5p
c2hlZCgpIGRvZXMgaXQgZm9yIHVzLgorICAgIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yLT5maW5p
c2hlZCgpOworfQorCitib29sIEhUTUw1VHJlZUJ1aWxkZXI6OmlzU2NyaXB0aW5nRmxhZ0VuYWJs
ZWQoRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoU2NyaXB0Q29udHJvbGxlciogc2NyaXB0Q29udHJvbGxlciA9IGZyYW1lLT5z
Y3JpcHQoKSkKKyAgICAgICAgcmV0dXJuIHNjcmlwdENvbnRyb2xsZXItPmNhbkV4ZWN1dGVTY3Jp
cHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNv
cmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhUTUw1VHJlZUJ1aWxk
ZXIuaCIKKyNpbmNsdWRlICJIVE1MVHJlZUJ1aWxkZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0YXRpYyBjb25zdCBpbnQgdW5pbml0aWFsaXplZExp
bmVOdW1iZXJWYWx1ZSA9IC0xOwogCi1IVE1MNVRyZWVCdWlsZGVyOjpIVE1MNVRyZWVCdWlsZGVy
KEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBy
ZXBvcnRFcnJvcnMpCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5p
emVyKiB0b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3Jz
KQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fcmVwb3J0RXJyb3JzKHJlcG9y
dEVycm9ycykKICAgICAsIG1faXNQYXVzZWQoZmFsc2UpCkBAIC02MCw3ICs2MCw3IEBAIEhUTUw1
VHJlZUJ1aWxkZXI6OkhUTUw1VHJlZUJ1aWxkZXIoSFRNTFQKIAogLy8gRklYTUU6IE1lbWJlciB2
YXJpYWJsZXMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byBzZWxmLWluaXRpYWxpemluZyBzdHJ1Y3Rz
IHRvCiAvLyBtaW5pbWl6ZSBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gdGhlc2UgY29uc3RydWN0
b3JzLgotSFRNTDVUcmVlQnVpbGRlcjo6SFRNTDVUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0
b2tlbml6ZXIsIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK0hUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVC
dWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAg
IDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fcmVwb3J0RXJyb3Jz
KGZhbHNlKSAvLyBGSVhNRTogV2h5IG5vdCByZXBvcnQgZXJyb3JzIGluIGZyYWdtZW50cz8KICAg
ICAsIG1faXNQYXVzZWQoZmFsc2UpCkBAIC03Myw3ICs3Myw3IEBAIEhUTUw1VHJlZUJ1aWxkZXI6
OkhUTUw1VHJlZUJ1aWxkZXIoSFRNTFQKIHsKIH0KIAotSFRNTDVUcmVlQnVpbGRlcjo6fkhUTUw1
VHJlZUJ1aWxkZXIoKQorSFRNTFRyZWVCdWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKIHsKIH0K
IApAQCAtMTE4LDE0ICsxMTgsMTQgQEAgc3RhdGljIHZvaWQgY29udmVydFRvT2xkU3R5bGUoSFRN
TFRva2VuJgogICAgIH0KIH0KIAotdm9pZCBIVE1MNVRyZWVCdWlsZGVyOjpoYW5kbGVTY3JpcHRT
dGFydFRhZygpCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aGFuZGxlU2NyaXB0U3RhcnRUYWcoKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIFRoZSBIVE1MIGZyZ21lbnQgY2FzZT8KICAgICBt
X3Rva2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOyAvLyBTYXZlIGluc2VydGlvbiBtb2RlLgogfQogCi12b2lkIEhU
TUw1VHJlZUJ1aWxkZXI6OmhhbmRsZVNjcmlwdEVuZFRhZyhFbGVtZW50KiBzY3JpcHRFbGVtZW50
LCBpbnQgc2NyaXB0U3RhcnRMaW5lKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZVNjcmlw
dEVuZFRhZyhFbGVtZW50KiBzY3JpcHRFbGVtZW50LCBpbnQgc2NyaXB0U3RhcnRMaW5lKQogewog
ICAgIEFTU0VSVCghbV9zY3JpcHRUb1Byb2Nlc3MpOyAvLyBDYWxsZXIgbmV2ZXIgY2FsbGVkIHRh
a2VTY3JpcHRUb1Byb2Nlc3MhCiAgICAgQVNTRVJUKG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5l
ID09IHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpOyAvLyBDYWxsZXIgbmV2ZXIgY2FsbGVk
IHRha2VTY3JpcHRUb1Byb2Nlc3MhCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBIVE1MNVRyZWVC
dWlsZGVyOjpoYW5kbGVTY3JpcHRFbmRUYQogICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5l
ID0gc2NyaXB0U3RhcnRMaW5lICsgMTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MNVRy
ZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKQorUGFz
c1JlZlB0cjxFbGVtZW50PiBIVE1MVHJlZUJ1aWxkZXI6OnRha2VTY3JpcHRUb1Byb2Nlc3MoaW50
JiBzY3JpcHRTdGFydExpbmUpCiB7CiAgICAgLy8gVW5wYXVzZSBvdXJzZWx2ZXMsIGNhbGxlcnMg
bWF5IHBhdXNlIHVzIGFnYWluIHdoZW4gcHJvY2Vzc2luZyB0aGUgc2NyaXB0LgogICAgIC8vIFRo
ZSBIVE1MNSBzcGVjIGlzIHdyaXR0ZW4gYXMgdGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGlu
c2lkZSB0aGUgdHJlZQpAQCAtMTUxLDcgKzE1MSw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRN
TDVUcmVlQnVpbGRlcjo6dGEKICAgICByZXR1cm4gbV9zY3JpcHRUb1Byb2Nlc3MucmVsZWFzZSgp
OwogfQogCi1IVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MNVRyZWVCdWlsZGVyOjphZGp1c3RlZExl
eGVyU3RhdGUoSFRNTFRva2VuaXplcjo6U3RhdGUgc3RhdGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRnJhbWUqIGZyYW1lKQorSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRyZWVCdWls
ZGVyOjphZGp1c3RlZExleGVyU3RhdGUoSFRNTFRva2VuaXplcjo6U3RhdGUgc3RhdGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRnJhbWUqIGZyYW1lKQogewogICAgIGlmICh0YWdOYW1l
ID09IHRleHRhcmVhVGFnIHx8IHRhZ05hbWUgPT0gdGl0bGVUYWcpCiAgICAgICAgIHJldHVybiBI
VE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBIVE1MVG9rZW5p
emVyOjpTdGF0ZSBIVE1MNVRyZWVCdWlsZGVyOjphCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1Q
YXNzUmVmUHRyPE5vZGU+IEhUTUw1VHJlZUJ1aWxkZXI6OnBhc3NUb2tlblRvTGVnYWN5UGFyc2Vy
KEhUTUxUb2tlbiYgdG9rZW4pCitQYXNzUmVmUHRyPE5vZGU+IEhUTUxUcmVlQnVpbGRlcjo6cGFz
c1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBpZiAodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlbjo6RE9DVFlQRSkgewogICAgICAgICBEb2N0eXBlVG9rZW4gZG9j
dHlwZVRva2VuOwpAQCAtMjE2LDcgKzIxNiw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVUcmVl
QnVpbGRlcjo6cGFzc1QKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1Jl
ZlB0cjxOb2RlPiBIVE1MNVRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlRnJvbVRva2VuKEhUTUxU
b2tlbiYgdG9rZW4pCitQYXNzUmVmUHRyPE5vZGU+IEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0
VHJlZUZyb21Ub2tlbihIVE1MVG9rZW4mIHRva2VuKQogewogICAgIC8vIE1ha2UgTVNWQyBpZ25v
cmUgb3VyIHVucmVhY2hhYmxlIGNvZGUgZm9yIG5vdy4KICAgICBpZiAodHJ1ZSkKQEAgLTIzNiw3
ICsyMzYsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUw1VHJlZUJ1aWxkZXI6OmNvbnN0CiAgICAg
cmV0dXJuIHByb2Nlc3NUb2tlbih0b2tlbik7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gSFRNTDVU
cmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuKEhUTUxUb2tlbiYgdG9rZW4sIFVDaGFyIGN1cnJlbnRD
aGFyYWN0ZXIpCitQYXNzUmVmUHRyPE5vZGU+IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2Vu
KEhUTUxUb2tlbiYgdG9rZW4sIFVDaGFyIGN1cnJlbnRDaGFyYWN0ZXIpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRva2VuKTsKICAgICBVTlVTRURfUEFSQU0oY3VycmVudENoYXJhY3Rlcik7CkBAIC0y
NDQsMTQgKzI0NCwxNCBAQCBQYXNzUmVmUHRyPE5vZGU+IEhUTUw1VHJlZUJ1aWxkZXI6OnByb2Nl
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSFRNTDVUcmVlQnVpbGRlcjo6ZmluaXNoZWQoKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKIHsKICAgICAvLyBXZSBzaG91bGQgY2Fs
bCBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKSBoZXJlLCBleGNlcHQKICAgICAvLyBtX2xl
Z2FjeVRyZWVDb25zdHJ1Y3Rvci0+ZmluaXNoZWQoKSBkb2VzIGl0IGZvciB1cy4KICAgICBtX2xl
Z2FjeVRyZWVDb25zdHJ1Y3Rvci0+ZmluaXNoZWQoKTsKIH0KIAotYm9vbCBIVE1MNVRyZWVCdWls
ZGVyOjppc1NjcmlwdGluZ0ZsYWdFbmFibGVkKEZyYW1lKiBmcmFtZSkKK2Jvb2wgSFRNTFRyZWVC
dWlsZGVyOjppc1NjcmlwdGluZ0ZsYWdFbmFibGVkKEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRy
ZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5o
CShyZXZpc2lvbiA2MTY3MykJKGZyb20gV2ViQ29yZS9odG1sL0hUTUw1VHJlZUJ1aWxkZXIuaDo2
MTY3MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
R09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBIVE1MNVRyZWVCdWlsZGVyX2gKKyNkZWZpbmUgSFRNTDVUcmVl
QnVpbGRlcl9oCisKKyNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNp
bmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50RnJh
Z21lbnQ7CitjbGFzcyBFbGVtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBIVE1MVG9rZW47Citj
bGFzcyBIVE1MRG9jdW1lbnQ7CitjbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOworY2xh
c3MgTm9kZTsKKworY2xhc3MgSFRNTDVUcmVlQnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CitwdWJsaWM6CisgICAgLy8gRklYTUU6IFJlcGxhY2UgY29uc3RydWN0b3JzIHdpdGggY3JlYXRl
KCkgZnVuY3Rpb25zIHJldHVybmluZyBQYXNzT3duUHRycworICAgIEhUTUw1VHJlZUJ1aWxkZXIo
SFRNTFRva2VuaXplciosIEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBI
VE1MNVRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqLCBEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICB+SFRNTDVUcmVlQnVpbGRlcigpOworCisgICAg
dm9pZCBzZXRQYXVzZWQoYm9vbCBwYXVzZWQpIHsgbV9pc1BhdXNlZCA9IHBhdXNlZDsgfQorICAg
IGJvb2wgaXNQYXVzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUGF1c2VkOyB9CisKKyAgICAvLyBU
aGUgdG9rZW4gcmVhbGx5IHNob3VsZCBiZSBwYXNzZWQgYXMgYSBjb25zdCYgc2luY2UgaXQncyBu
ZXZlciBtb2RpZmllZC4KKyAgICBQYXNzUmVmUHRyPE5vZGU+IGNvbnN0cnVjdFRyZWVGcm9tVG9r
ZW4oSFRNTFRva2VuJik7CisgICAgLy8gTXVzdCBiZSBjYWxsZWQgd2hlbiBwYXJzZXIgaXMgcGF1
c2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBwYXJzZXIgYWdhaW4uCisgICAgUGFzc1JlZlB0cjxFbGVt
ZW50PiB0YWtlU2NyaXB0VG9Qcm9jZXNzKGludCYgc2NyaXB0U3RhcnRMaW5lKTsKKworICAgIC8v
IERvbmUsIGNsb3NlIGFueSBvcGVuIHRhZ3MsIGV0Yy4KKyAgICB2b2lkIGZpbmlzaGVkKCk7CisK
KyAgICBzdGF0aWMgSFRNTFRva2VuaXplcjo6U3RhdGUgYWRqdXN0ZWRMZXhlclN0YXRlKEhUTUxU
b2tlbml6ZXI6OlN0YXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIEZyYW1lKik7CisK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGRpcnR5LCByb3R0ZW4gaGFjayB0byBrZWVwIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQgaGFwcHkKKyAgICAvLyB1bnRpbCB3ZSBzdG9wIHVzaW5nIHRoZSBs
ZWdhY3kgcGFyc2VyLiBETyBOT1QgQ0FMTCBUSElTIE1FVEhPRC4KKyAgICBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKiBsZWdhY3lUcmVlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2xl
Z2FjeVRyZWVDb25zdHJ1Y3Rvci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIC8vIFJlcHJlc2Vu
dHMgSFRNTDUgImluc2VydGlvbiBtb2RlIgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0
bWw1L3N5bnRheC5odG1sI2luc2VydGlvbi1tb2RlCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBy
ZW1haW5kZXIgb2Ygc3RhdGVzLgorICAgIGVudW0gSW5zZXJ0aW9uTW9kZSB7CisgICAgICAgIElu
aXRpYWwsCisgICAgICAgIEFmdGVyRnJhbWVzZXQsCisgICAgfTsKKworICAgIFBhc3NSZWZQdHI8
Tm9kZT4gcGFzc1Rva2VuVG9MZWdhY3lQYXJzZXIoSFRNTFRva2VuJik7CisgICAgUGFzc1JlZlB0
cjxOb2RlPiBwcm9jZXNzVG9rZW4oSFRNTFRva2VuJiwgVUNoYXIgY3VycmVudENoYXJhY3RlciA9
IDApOworICAgIAorICAgIHZvaWQgaGFuZGxlU2NyaXB0U3RhcnRUYWcoKTsKKyAgICB2b2lkIGhh
bmRsZVNjcmlwdEVuZFRhZyhFbGVtZW50KiwgaW50IHNjcmlwdFN0YXJ0TGluZSk7CisKKyAgICB2
b2lkIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZSB2YWx1ZSkgeyBtX2luc2VydGlvbk1v
ZGUgPSB2YWx1ZTsgfQorICAgIEluc2VydGlvbk1vZGUgaW5zZXJ0aW9uTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zZXJ0aW9uTW9kZTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNTY3JpcHRpbmdG
bGFnRW5hYmxlZChGcmFtZSogZnJhbWUpOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8v
IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBtX2xlZ2FjeVBhcnNlciBmb3Igbm93LgorICAgIGJv
b2wgbV9yZXBvcnRFcnJvcnM7CisgICAgYm9vbCBtX2lzUGF1c2VkOworCisgICAgSW5zZXJ0aW9u
TW9kZSBtX2luc2VydGlvbk1vZGU7CisKKyAgICAvLyBIVE1MNSBzcGVjIHJlcXVpcmVzIHRoYXQg
d2UgYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSB0b2tlbml6ZXIKKyAgICAvLyBm
cm9tIHdpdGhpbiBwYXJzZXIgYWN0aW9ucy4KKyAgICBIVE1MVG9rZW5pemVyKiBtX3Rva2VuaXpl
cjsKKworICAgIC8vIFdlJ3JlIHJlLXVzaW5nIGxvZ2ljIGZyb20gdGhlIG9sZCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yIHdoaWxlIHRoaXMgY2xhc3MgaXMgYmVpbmcgd3JpdHRlbi4KKyAgICBP
d25QdHI8TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcj4gbV9sZWdhY3lUcmVlQ29uc3RydWN0b3I7
CisKKyAgICAvLyBUaGVzZSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IGR1cGxpY2F0ZWQgYXMg
dGhlIGZpcnN0IHNldCBpcyBhIGhhY2sKKyAgICAvLyBvbiB0b3Agb2YgdGhlIGxlZ2FjeSBwYXJz
ZXIgd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQuCisgICAgUmVmUHRyPEVsZW1lbnQ+
IG1fbGFzdFNjcmlwdEVsZW1lbnQ7IC8vIEZJWE1FOiBIYWNrIGZvciA8c2NyaXB0PiBzdXBwb3J0
IG9uIHRvcCBvZiB0aGUgb2xkIHBhcnNlci4KKyAgICBpbnQgbV9sYXN0U2NyaXB0RWxlbWVudFN0
YXJ0TGluZTsgLy8gRklYTUU6IEhhY2sgZm9yIDxzY3JpcHQ+IHN1cHBvcnQgb24gdG9wIG9mIHRo
ZSBvbGQgcGFyc2VyLgorCisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fc2NyaXB0VG9Qcm9jZXNzOyAv
LyA8c2NyaXB0PiB0YWcgd2hpY2ggbmVlZHMgcHJvY2Vzc2luZyBiZWZvcmUgcmVzdW1pbmcgdGhl
IHBhcnNlci4KKyAgICBpbnQgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmU7IC8vIFN0YXJ0aW5n
IGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJvY2Vzc2luZy4KKworICAg
IC8vIEZJWE1FOiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gaXMgYSBIQUNLIGZvciBwbGF0
Zm9ybS9QYXN0ZWJvYXJkLgorICAgIC8vIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCBjYXVz
ZXMgdGhlIFBhcnNlciB0byByZW1vdmUgY2hpbGRyZW4KKyAgICAvLyBmcm9tIDxzY3JpcHQ+IHRh
Z3MgKHNvIGphdmFzY3JpcHQgZG9lc24ndCBzaG93IHVwIGluIHBhc3RlcykuCisgICAgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uOworfTsK
KworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYxNjcy
KQorKysgV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSwxMiArNDUsMTIgQEAgY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3RvcjsKIGNsYXNzIE5vZGU7CiAKLWNsYXNzIEhUTUw1VHJlZUJ1aWxkZXIgOiBwdWJs
aWMgTm9uY29weWFibGUgeworY2xhc3MgSFRNTFRyZWVCdWlsZGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVwbGFjZSBjb25zdHJ1Y3RvcnMgd2l0aCBj
cmVhdGUoKSBmdW5jdGlvbnMgcmV0dXJuaW5nIFBhc3NPd25QdHJzCi0gICAgSFRNTDVUcmVlQnVp
bGRlcihIVE1MVG9rZW5pemVyKiwgSFRNTERvY3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOwot
ICAgIEhUTUw1VHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciosIERvY3VtZW50RnJhZ21lbnQqLCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwotICAgIH5IVE1MNVRyZWVCdWlsZGVyKCk7Cisg
ICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqLCBIVE1MRG9jdW1lbnQqLCBib29sIHJl
cG9ydEVycm9ycyk7CisgICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqLCBEb2N1bWVu
dEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICB+SFRNTFRyZWVC
dWlsZGVyKCk7CiAKICAgICB2b2lkIHNldFBhdXNlZChib29sIHBhdXNlZCkgeyBtX2lzUGF1c2Vk
ID0gcGF1c2VkOyB9CiAgICAgYm9vbCBpc1BhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQYXVz
ZWQ7IH0K
</data>
<flag name="review"
          id="46376"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>